.check_altstatus        = ahci_check_status,
        .dev_select             = ata_noop_dev_select,
 
+       .dev_config             = ahci_dev_config,
+
        .tf_read                = ahci_tf_read,
 
        .qc_defer               = sata_pmp_qc_defer_cmd_switch,
        .port_suspend           = ahci_port_suspend,
        .port_resume            = ahci_port_resume,
 #endif
+       .enable_pm              = ahci_enable_alpm,
+       .disable_pm             = ahci_disable_alpm,
 
        .port_start             = ahci_port_start,
        .port_stop              = ahci_port_stop,
        .check_altstatus        = ahci_check_status,
        .dev_select             = ata_noop_dev_select,
 
+       .dev_config             = ahci_dev_config,
+
        .tf_read                = ahci_tf_read,
 
        .qc_defer               = sata_pmp_qc_defer_cmd_switch,
        .port_suspend           = ahci_port_suspend,
        .port_resume            = ahci_port_resume,
 #endif
+       .enable_pm              = ahci_enable_alpm,
+       .disable_pm             = ahci_disable_alpm,
 
        .port_start             = ahci_port_start,
        .port_stop              = ahci_port_stop,
 
 
 static struct ata_port_operations generic_port_ops = {
        .set_mode       = generic_set_mode,
+       .mode_filter    = ata_pci_default_filter,
 
        .tf_load        = ata_tf_load,
        .tf_read        = ata_tf_read,
 
        .irq_clear              = ata_bmdma_irq_clear,
        .irq_on                 = ata_irq_on,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_operations ich_pata_ops = {
        .irq_clear              = ata_bmdma_irq_clear,
        .irq_on                 = ata_irq_on,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_operations piix_sata_ops = {
        .qc_issue               = ata_qc_issue_prot,
        .data_xfer              = ata_data_xfer,
 
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = ata_bmdma_freeze,
        .thaw                   = ata_bmdma_thaw,
        .error_handler          = ata_bmdma_error_handler,
        .irq_clear              = ata_bmdma_irq_clear,
        .irq_on                 = ata_irq_on,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_operations piix_vmw_ops = {
        .irq_clear              = ata_bmdma_irq_clear,
        .irq_on                 = ata_irq_on,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_operations piix_sidpr_sata_ops = {
        .scr_read               = piix_sidpr_scr_read,
        .scr_write              = piix_sidpr_scr_write,
 
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = ata_bmdma_freeze,
        .thaw                   = ata_bmdma_thaw,
        .error_handler          = piix_sidpr_error_handler,
        .irq_clear              = ata_bmdma_irq_clear,
        .irq_on                 = ata_irq_on,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct piix_map_db ich5_map_db = {
 
        [piix_pata_vmw] =
        {
-               .sht            = &piix_sht,
                .flags          = PIIX_PATA_FLAGS,
                .pio_mask       = 0x1f, /* pio0-4 */
                .mwdma_mask     = 0x06, /* mwdma1-2 ?? CHECK 0 should be ok but slow */
 
 static const struct ata_port_operations artop6260_ops = {
        .set_piomode            = artop6260_set_piomode,
        .set_dmamode            = artop6260_set_dmamode,
+       .mode_filter            = ata_pci_default_filter,
 
        .tf_load                = ata_tf_load,
        .tf_read                = ata_tf_read,
 
 
 static struct ata_port_info bfin_port_info[] = {
        {
-               .sht            = &bfin_sht,
                .flags          = ATA_FLAG_SLAVE_POSS
                                | ATA_FLAG_MMIO
                                | ATA_FLAG_NO_LEGACY,
 
        .irq_clear      = ata_bmdma_irq_clear,
        .irq_on         = ata_irq_on,
 
-       .port_start     = ata_port_start,
+       .port_start     = ata_sff_port_start,
 };
 
 static struct ata_port_operations cmd646r1_port_ops = {
        .irq_clear      = ata_bmdma_irq_clear,
        .irq_on         = ata_irq_on,
 
-       .port_start     = ata_port_start,
+       .port_start     = ata_sff_port_start,
 };
 
 static struct ata_port_operations cmd648_port_ops = {
        .irq_clear      = ata_bmdma_irq_clear,
        .irq_on         = ata_irq_on,
 
-       .port_start     = ata_port_start,
+       .port_start     = ata_sff_port_start,
 };
 
 static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
 
 static struct ata_port_operations cs5520_port_ops = {
        .set_piomode            = cs5520_set_piomode,
        .set_dmamode            = cs5520_set_dmamode,
+       .mode_filter            = ata_pci_default_filter,
 
        .tf_load                = ata_tf_load,
        .tf_read                = ata_tf_read,
 
        .irq_clear              = ata_bmdma_irq_clear,
        .irq_on                 = ata_irq_on,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 /**
 
 {
        static int printed_version;
        static const struct ata_port_info info = {
-               .sht = &hpt3x3_sht,
                .flags = ATA_FLAG_SLAVE_POSS,
                .pio_mask = 0x1f,
 #if defined(CONFIG_PATA_HPT3X3_DMA)
 
        .can_queue              = ATA_DEF_QUEUE,
        .this_id                = ATA_SHT_THIS_ID,
        .sg_tablesize           = LIBATA_MAX_PRD,
-       .max_sectors            = ATA_MAX_SECTORS,
        .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,
        .emulated               = ATA_SHT_EMULATED,
        .use_clustering         = ATA_SHT_USE_CLUSTERING,
        .proc_name              = DRV_NAME,
        .dma_boundary           = ATA_DMA_BOUNDARY,
        .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
        .bios_param             = ata_std_bios_param,
 };
 
 
 
 static struct ata_port_operations ixp4xx_port_ops = {
        .set_mode               = ixp4xx_set_mode,
-       .mode_filter            = ata_pci_default_filter,
 
        .tf_load                = ata_tf_load,
        .tf_read                = ata_tf_read,
        .irq_clear              = ata_noop_irq_clear,
        .irq_on                 = ata_irq_on,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static void ixp4xx_setup_port(struct ata_port *ap,
 
        .exec_command           = ata_exec_command,
        .dev_select             = ata_std_dev_select,
 
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = ata_bmdma_freeze,
        .thaw                   = ata_bmdma_thaw,
        .error_handler          = jmicron_error_handler,
        .irq_on                 = ata_irq_on,
 
        /* Generic PATA PCI ATA helpers */
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 
 
        .exec_command           = ata_exec_command,
        .dev_select             = ata_std_dev_select,
 
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = ata_bmdma_freeze,
        .thaw                   = ata_bmdma_thaw,
        .error_handler          = marvell_error_handler,
 
        .can_queue              = ATA_DEF_QUEUE,
        .this_id                = ATA_SHT_THIS_ID,
        .sg_tablesize           = LIBATA_MAX_PRD,
-       .max_sectors            = ATA_MAX_SECTORS,
        .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,
        .emulated               = ATA_SHT_EMULATED,
        .use_clustering         = ATA_SHT_USE_CLUSTERING,
        .proc_name              = DRV_NAME,
        .dma_boundary           = ATA_DMA_BOUNDARY,
        .slave_configure        = ata_scsi_slave_config,
+       .slave_destroy          = ata_scsi_slave_destroy,
        .bios_param             = ata_std_bios_param,
 };
 
        .data_xfer              = ata_data_xfer,
        .irq_clear              = ata_noop_irq_clear,
        .irq_on                 = ata_irq_on,
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static int __devinit
 
        .exec_command           = ata_exec_command,
        .dev_select             = ata_std_dev_select,
 
+       .mode_filter            = ata_pci_default_filter,
        .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,
 
-       .bmdma_setup    = ata_bmdma_setup,
-       .bmdma_start    = ata_bmdma_start,
-       .bmdma_stop     = ata_bmdma_stop,
-       .bmdma_status   = ata_bmdma_status,
-
        .qc_prep        = ata_qc_prep,
        .qc_issue       = ata_qc_issue_prot,
 
        .data_xfer      = ata_data_xfer,
 
        .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
+       .irq_clear      = ata_noop_irq_clear,
        .irq_on         = ata_irq_on,
 
        .port_start     = ata_sff_port_start,
 
 static struct ata_port_operations optidma_port_ops = {
        .set_piomode    = optidma_set_pio_mode,
        .set_dmamode    = optidma_set_dma_mode,
+       .mode_filter    = ata_pci_default_filter,
 
        .tf_load        = ata_tf_load,
        .tf_read        = ata_tf_read,
 static struct ata_port_operations optiplus_port_ops = {
        .set_piomode    = optiplus_set_pio_mode,
        .set_dmamode    = optiplus_set_dma_mode,
+       .mode_filter    = ata_pci_default_filter,
 
        .tf_load        = ata_tf_load,
        .tf_read        = ata_tf_read,
 
        return 0;
 }
 
-static int ata_dummy_ret0(struct ata_port *ap) { return 0; }
-
 static struct scsi_host_template pata_platform_sht = {
        .module                 = THIS_MODULE,
        .name                   = DRV_NAME,
 
        .irq_clear              = ata_noop_irq_clear,
        .irq_on                 = ata_irq_on,
-
-       .port_start             = ata_dummy_ret0,
 };
 
 static void pata_platform_setup_port(struct ata_ioports *ioaddr,
 
        return IRQ_HANDLED;
 }
 
-static int rb500_pata_port_start(struct ata_port *ap)
-{
-       return 0;
-}
-
 static struct ata_port_operations rb500_pata_port_ops = {
        .tf_load                = ata_tf_load,
        .tf_read                = ata_tf_read,
        .freeze                 = rb500_pata_freeze,
        .thaw                   = rb500_pata_thaw,
        .error_handler          = ata_bmdma_error_handler,
+       .post_internal_cmd      = ata_bmdma_post_internal_cmd,
 
-       .irq_handler            = rb500_pata_irq_handler,
        .irq_clear              = ata_noop_irq_clear,
        .irq_on                 = ata_irq_on,
-
-       .port_start             = rb500_pata_port_start,
 };
 
 /* ------------------------------------------------------------------------ */
 
        .exec_command   = ata_exec_command,
        .dev_select     = ata_std_dev_select,
 
-       .bmdma_setup    = ata_bmdma_setup,
-       .bmdma_start    = ata_bmdma_start,
-       .bmdma_stop     = ata_bmdma_stop,
-       .bmdma_status   = ata_bmdma_status,
-
        .qc_prep        = ata_qc_prep,
        .qc_issue       = ata_qc_issue_prot,
 
        .cable_detect   = ata_cable_40wire,
 
        .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
+       .irq_clear      = ata_noop_irq_clear,
        .irq_on         = ata_irq_on,
 
        .port_start     = ata_sff_port_start,
 
 
        .tf_read = sata_fsl_tf_read,
 
+       .qc_defer = ata_std_qc_defer,
        .qc_prep = sata_fsl_qc_prep,
        .qc_issue = sata_fsl_qc_issue,
        .irq_clear = ata_noop_irq_clear,
 
        .exec_command           = ata_exec_command,
        .dev_select             = ata_std_dev_select,
 
-       .cable_detect           = ata_cable_sata,
-
        .qc_prep                = mv_qc_prep,
        .qc_issue               = mv_qc_issue,
        .data_xfer              = ata_data_xfer,
        .exec_command           = ata_exec_command,
        .dev_select             = ata_std_dev_select,
 
-       .cable_detect           = ata_cable_sata,
-
        .qc_prep                = mv_qc_prep,
        .qc_issue               = mv_qc_issue,
        .data_xfer              = ata_data_xfer,
        .exec_command           = ata_exec_command,
        .dev_select             = ata_std_dev_select,
 
-       .cable_detect           = ata_cable_sata,
-
        .qc_prep                = mv_qc_prep_iie,
        .qc_issue               = mv_qc_issue,
        .data_xfer              = ata_data_xfer,
 
        .bmdma_status           = ata_bmdma_status,
        .qc_prep                = ata_qc_prep,
        .qc_issue               = ata_qc_issue_prot,
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = ata_bmdma_freeze,
        .thaw                   = ata_bmdma_thaw,
        .error_handler          = nv_error_handler,
        .irq_on                 = ata_irq_on,
        .scr_read               = nv_scr_read,
        .scr_write              = nv_scr_write,
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_operations nv_nf2_ops = {
        .bmdma_status           = ata_bmdma_status,
        .qc_prep                = ata_qc_prep,
        .qc_issue               = ata_qc_issue_prot,
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = nv_nf2_freeze,
        .thaw                   = nv_nf2_thaw,
        .error_handler          = nv_error_handler,
        .irq_on                 = ata_irq_on,
        .scr_read               = nv_scr_read,
        .scr_write              = nv_scr_write,
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_operations nv_ck804_ops = {
        .bmdma_status           = ata_bmdma_status,
        .qc_prep                = ata_qc_prep,
        .qc_issue               = ata_qc_issue_prot,
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = nv_ck804_freeze,
        .thaw                   = nv_ck804_thaw,
        .error_handler          = nv_error_handler,
        .irq_on                 = ata_irq_on,
        .scr_read               = nv_scr_read,
        .scr_write              = nv_scr_write,
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
        .host_stop              = nv_ck804_host_stop,
 };
 
        .qc_defer               = ata_std_qc_defer,
        .qc_prep                = nv_adma_qc_prep,
        .qc_issue               = nv_adma_qc_issue,
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = nv_adma_freeze,
        .thaw                   = nv_adma_thaw,
        .error_handler          = nv_adma_error_handler,
        .qc_defer               = ata_std_qc_defer,
        .qc_prep                = nv_swncq_qc_prep,
        .qc_issue               = nv_swncq_qc_issue,
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = nv_mcp55_freeze,
        .thaw                   = nv_mcp55_thaw,
        .error_handler          = nv_swncq_error_handler,
 
        .exec_command           = ata_exec_command,
        .dev_select             = ata_std_dev_select,
        .set_mode               = sil_set_mode,
+       .mode_filter            = ata_pci_default_filter,
        .bmdma_setup            = ata_bmdma_setup,
        .bmdma_start            = ata_bmdma_start,
        .bmdma_stop             = ata_bmdma_stop,
        .irq_on                 = ata_irq_on,
        .scr_read               = sil_scr_read,
        .scr_write              = sil_scr_write,
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_info sil_port_info[] = {
 
        .qc_prep                = ata_qc_prep,
        .qc_issue               = ata_qc_issue_prot,
        .data_xfer              = ata_data_xfer,
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = ata_bmdma_freeze,
        .thaw                   = ata_bmdma_thaw,
        .error_handler          = ata_bmdma_error_handler,
        .irq_on                 = ata_irq_on,
        .scr_read               = sis_scr_read,
        .scr_write              = sis_scr_write,
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_info sis_port_info = {
 
        .qc_prep                = ata_qc_prep,
        .qc_issue               = ata_qc_issue_prot,
        .data_xfer              = ata_data_xfer,
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = ata_bmdma_freeze,
        .thaw                   = ata_bmdma_thaw,
        .error_handler          = ata_bmdma_error_handler,
        .irq_on                 = ata_irq_on,
        .scr_read               = k2_sata_scr_read,
        .scr_write              = k2_sata_scr_write,
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_info k2_port_info[] = {
 
        .qc_issue               = ata_qc_issue_prot,
        .data_xfer              = ata_data_xfer,
 
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = ata_bmdma_freeze,
        .thaw                   = ata_bmdma_thaw,
        .error_handler          = ata_bmdma_error_handler,
        .scr_read               = uli_scr_read,
        .scr_write              = uli_scr_write,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_info uli_port_info = {
 
 };
 
 static const struct ata_port_operations vt6420_sata_ops = {
+       .mode_filter            = ata_pci_default_filter,
+
        .tf_load                = ata_tf_load,
        .tf_read                = ata_tf_read,
        .check_status           = ata_check_status,
        .irq_clear              = ata_bmdma_irq_clear,
        .irq_on                 = ata_irq_on,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_operations vt6421_pata_ops = {
        .set_piomode            = vt6421_set_pio_mode,
        .set_dmamode            = vt6421_set_dma_mode,
+       .mode_filter            = ata_pci_default_filter,
 
        .tf_load                = ata_tf_load,
        .tf_read                = ata_tf_read,
        .irq_clear              = ata_bmdma_irq_clear,
        .irq_on                 = ata_irq_on,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_operations vt6421_sata_ops = {
+       .mode_filter            = ata_pci_default_filter,
+
        .tf_load                = ata_tf_load,
        .tf_read                = ata_tf_read,
        .check_status           = ata_check_status,
        .thaw                   = ata_bmdma_thaw,
        .error_handler          = ata_bmdma_error_handler,
        .post_internal_cmd      = ata_bmdma_post_internal_cmd,
-       .cable_detect           = ata_cable_sata,
 
        .irq_clear              = ata_bmdma_irq_clear,
        .irq_on                 = ata_irq_on,
        .scr_read               = svia_scr_read,
        .scr_write              = svia_scr_write,
 
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static const struct ata_port_info vt6420_port_info = {
 
        .qc_prep                = ata_qc_prep,
        .qc_issue               = ata_qc_issue_prot,
        .data_xfer              = ata_data_xfer,
+       .mode_filter            = ata_pci_default_filter,
        .freeze                 = vsc_freeze,
        .thaw                   = vsc_thaw,
        .error_handler          = ata_bmdma_error_handler,
        .irq_on                 = ata_irq_on,
        .scr_read               = vsc_sata_scr_read,
        .scr_write              = vsc_sata_scr_write,
-       .port_start             = ata_port_start,
+       .port_start             = ata_sff_port_start,
 };
 
 static void __devinit vsc_sata_setup_port(struct ata_ioports *port,