|
@@ -211,6 +211,11 @@ static struct scsi_host_template legacy_sht = {
|
|
ATA_PIO_SHT(DRV_NAME),
|
|
ATA_PIO_SHT(DRV_NAME),
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+static const struct ata_port_operations legacy_base_port_ops = {
|
|
|
|
+ .inherits = &ata_sff_port_ops,
|
|
|
|
+ .cable_detect = ata_cable_40wire,
|
|
|
|
+};
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* These ops are used if the user indicates the hardware
|
|
* These ops are used if the user indicates the hardware
|
|
* snoops the commands to decide on the mode and handles the
|
|
* snoops the commands to decide on the mode and handles the
|
|
@@ -220,55 +225,14 @@ static struct scsi_host_template legacy_sht = {
|
|
*/
|
|
*/
|
|
|
|
|
|
static struct ata_port_operations simple_port_ops = {
|
|
static struct ata_port_operations simple_port_ops = {
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
- .qc_issue = ata_qc_issue_prot,
|
|
|
|
-
|
|
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.data_xfer = ata_data_xfer_noirq,
|
|
.data_xfer = ata_data_xfer_noirq,
|
|
-
|
|
|
|
- .irq_handler = ata_interrupt,
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
static struct ata_port_operations legacy_port_ops = {
|
|
static struct ata_port_operations legacy_port_ops = {
|
|
- .set_mode = legacy_set_mode,
|
|
|
|
-
|
|
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
- .qc_issue = ata_qc_issue_prot,
|
|
|
|
-
|
|
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.data_xfer = ata_data_xfer_noirq,
|
|
.data_xfer = ata_data_xfer_noirq,
|
|
-
|
|
|
|
- .irq_handler = ata_interrupt,
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
|
|
+ .set_mode = legacy_set_mode,
|
|
};
|
|
};
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -359,30 +323,9 @@ static unsigned int pdc_data_xfer_vlb(struct ata_device *dev,
|
|
}
|
|
}
|
|
|
|
|
|
static struct ata_port_operations pdc20230_port_ops = {
|
|
static struct ata_port_operations pdc20230_port_ops = {
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.set_piomode = pdc20230_set_piomode,
|
|
.set_piomode = pdc20230_set_piomode,
|
|
-
|
|
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
- .qc_issue = ata_qc_issue_prot,
|
|
|
|
-
|
|
|
|
.data_xfer = pdc_data_xfer_vlb,
|
|
.data_xfer = pdc_data_xfer_vlb,
|
|
-
|
|
|
|
- .irq_handler = ata_interrupt,
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -413,30 +356,8 @@ static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
|
|
}
|
|
}
|
|
|
|
|
|
static struct ata_port_operations ht6560a_port_ops = {
|
|
static struct ata_port_operations ht6560a_port_ops = {
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.set_piomode = ht6560a_set_piomode,
|
|
.set_piomode = ht6560a_set_piomode,
|
|
-
|
|
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
- .qc_issue = ata_qc_issue_prot,
|
|
|
|
-
|
|
|
|
- .data_xfer = ata_data_xfer, /* Check vlb/noirq */
|
|
|
|
-
|
|
|
|
- .irq_handler = ata_interrupt,
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -478,30 +399,8 @@ static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
|
|
}
|
|
}
|
|
|
|
|
|
static struct ata_port_operations ht6560b_port_ops = {
|
|
static struct ata_port_operations ht6560b_port_ops = {
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.set_piomode = ht6560b_set_piomode,
|
|
.set_piomode = ht6560b_set_piomode,
|
|
-
|
|
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
- .qc_issue = ata_qc_issue_prot,
|
|
|
|
-
|
|
|
|
- .data_xfer = ata_data_xfer, /* FIXME: Check 32bit and noirq */
|
|
|
|
-
|
|
|
|
- .irq_handler = ata_interrupt,
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -599,30 +498,8 @@ static void opti82c611a_set_piomode(struct ata_port *ap,
|
|
|
|
|
|
|
|
|
|
static struct ata_port_operations opti82c611a_port_ops = {
|
|
static struct ata_port_operations opti82c611a_port_ops = {
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.set_piomode = opti82c611a_set_piomode,
|
|
.set_piomode = opti82c611a_set_piomode,
|
|
-
|
|
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
- .qc_issue = ata_qc_issue_prot,
|
|
|
|
-
|
|
|
|
- .data_xfer = ata_data_xfer,
|
|
|
|
-
|
|
|
|
- .irq_handler = ata_interrupt,
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -731,30 +608,9 @@ static unsigned int opti82c46x_qc_issue_prot(struct ata_queued_cmd *qc)
|
|
}
|
|
}
|
|
|
|
|
|
static struct ata_port_operations opti82c46x_port_ops = {
|
|
static struct ata_port_operations opti82c46x_port_ops = {
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.set_piomode = opti82c46x_set_piomode,
|
|
.set_piomode = opti82c46x_set_piomode,
|
|
-
|
|
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
.qc_issue = opti82c46x_qc_issue_prot,
|
|
.qc_issue = opti82c46x_qc_issue_prot,
|
|
-
|
|
|
|
- .data_xfer = ata_data_xfer,
|
|
|
|
-
|
|
|
|
- .irq_handler = ata_interrupt,
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
|
|
static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
|
|
@@ -916,84 +772,22 @@ static int qdi_port(struct platform_device *dev,
|
|
}
|
|
}
|
|
|
|
|
|
static struct ata_port_operations qdi6500_port_ops = {
|
|
static struct ata_port_operations qdi6500_port_ops = {
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.set_piomode = qdi6500_set_piomode,
|
|
.set_piomode = qdi6500_set_piomode,
|
|
-
|
|
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
.qc_issue = qdi_qc_issue_prot,
|
|
.qc_issue = qdi_qc_issue_prot,
|
|
-
|
|
|
|
.data_xfer = vlb32_data_xfer,
|
|
.data_xfer = vlb32_data_xfer,
|
|
-
|
|
|
|
- .irq_handler = ata_interrupt,
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
static struct ata_port_operations qdi6580_port_ops = {
|
|
static struct ata_port_operations qdi6580_port_ops = {
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.set_piomode = qdi6580_set_piomode,
|
|
.set_piomode = qdi6580_set_piomode,
|
|
-
|
|
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
- .qc_issue = ata_qc_issue_prot,
|
|
|
|
-
|
|
|
|
.data_xfer = vlb32_data_xfer,
|
|
.data_xfer = vlb32_data_xfer,
|
|
-
|
|
|
|
- .irq_handler = ata_interrupt,
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
static struct ata_port_operations qdi6580dp_port_ops = {
|
|
static struct ata_port_operations qdi6580dp_port_ops = {
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.set_piomode = qdi6580dp_set_piomode,
|
|
.set_piomode = qdi6580dp_set_piomode,
|
|
-
|
|
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
- .qc_issue = qdi_qc_issue_prot,
|
|
|
|
-
|
|
|
|
.data_xfer = vlb32_data_xfer,
|
|
.data_xfer = vlb32_data_xfer,
|
|
-
|
|
|
|
- .irq_handler = ata_interrupt,
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
static DEFINE_SPINLOCK(winbond_lock);
|
|
static DEFINE_SPINLOCK(winbond_lock);
|
|
@@ -1062,29 +856,9 @@ static int winbond_port(struct platform_device *dev,
|
|
}
|
|
}
|
|
|
|
|
|
static struct ata_port_operations winbond_port_ops = {
|
|
static struct ata_port_operations winbond_port_ops = {
|
|
|
|
+ .inherits = &legacy_base_port_ops,
|
|
.set_piomode = winbond_set_piomode,
|
|
.set_piomode = winbond_set_piomode,
|
|
-
|
|
|
|
- .tf_load = ata_tf_load,
|
|
|
|
- .tf_read = ata_tf_read,
|
|
|
|
- .check_status = ata_check_status,
|
|
|
|
- .exec_command = ata_exec_command,
|
|
|
|
- .dev_select = ata_std_dev_select,
|
|
|
|
-
|
|
|
|
- .freeze = ata_bmdma_freeze,
|
|
|
|
- .thaw = ata_bmdma_thaw,
|
|
|
|
- .error_handler = ata_bmdma_error_handler,
|
|
|
|
- .post_internal_cmd = ata_bmdma_post_internal_cmd,
|
|
|
|
- .cable_detect = ata_cable_40wire,
|
|
|
|
-
|
|
|
|
- .qc_prep = ata_qc_prep,
|
|
|
|
- .qc_issue = ata_qc_issue_prot,
|
|
|
|
-
|
|
|
|
.data_xfer = vlb32_data_xfer,
|
|
.data_xfer = vlb32_data_xfer,
|
|
-
|
|
|
|
- .irq_clear = ata_noop_irq_clear,
|
|
|
|
- .irq_on = ata_irq_on,
|
|
|
|
-
|
|
|
|
- .port_start = ata_sff_port_start,
|
|
|
|
};
|
|
};
|
|
|
|
|
|
static struct legacy_controller controllers[] = {
|
|
static struct legacy_controller controllers[] = {
|