upgrade to fedora-2.6.12-1.1398.FC4 + vserver 2.0.rc7
[linux-2.6.git] / drivers / scsi / sata_sis.c
index d48e437..e418b89 100644 (file)
@@ -90,6 +90,7 @@ static Scsi_Host_Template sis_sht = {
        .dma_boundary           = ATA_DMA_BOUNDARY,
        .slave_configure        = ata_scsi_slave_config,
        .bios_param             = ata_std_bios_param,
+       .ordered_flush          = 1,
 };
 
 static struct ata_port_operations sis_ops = {
@@ -102,6 +103,8 @@ static struct ata_port_operations sis_ops = {
        .phy_reset              = sata_phy_reset,
        .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,
        .eng_timeout            = ata_eng_timeout,
@@ -111,6 +114,7 @@ static struct ata_port_operations sis_ops = {
        .scr_write              = sis_scr_write,
        .port_start             = ata_port_start,
        .port_stop              = ata_port_stop,
+       .host_stop              = ata_host_stop,
 };
 
 static struct ata_port_info sis_port_info = {
@@ -200,14 +204,17 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
        int rc;
        u32 genctl;
        struct ata_port_info *ppi;
+       int pci_dev_busy = 0;
 
        rc = pci_enable_device(pdev);
        if (rc)
                return rc;
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out;
+       }
 
        rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
        if (rc)
@@ -259,7 +266,8 @@ err_out_regions:
        pci_release_regions(pdev);
 
 err_out:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
        return rc;
 
 }