diff options
-rw-r--r-- | drivers/pci/msi.c | 10 | ||||
-rw-r--r-- | drivers/pci/pci.c | 26 | ||||
-rw-r--r-- | drivers/scsi/ahci.c | 16 | ||||
-rw-r--r-- | drivers/scsi/ata_piix.c | 14 | ||||
-rw-r--r-- | drivers/scsi/sata_sis.c | 14 | ||||
-rw-r--r-- | drivers/scsi/sata_uli.c | 14 | ||||
-rw-r--r-- | include/linux/pci.h | 1 |
7 files changed, 32 insertions, 63 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 532f73bb2224..ee8677bda950 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
@@ -439,10 +439,7 @@ static void enable_msi_mode(struct pci_dev *dev, int pos, int type) | |||
439 | } | 439 | } |
440 | if (pci_find_capability(dev, PCI_CAP_ID_EXP)) { | 440 | if (pci_find_capability(dev, PCI_CAP_ID_EXP)) { |
441 | /* PCI Express Endpoint device detected */ | 441 | /* PCI Express Endpoint device detected */ |
442 | u16 cmd; | 442 | pci_intx(dev, 0); /* disable intx */ |
443 | pci_read_config_word(dev, PCI_COMMAND, &cmd); | ||
444 | cmd |= PCI_COMMAND_INTX_DISABLE; | ||
445 | pci_write_config_word(dev, PCI_COMMAND, cmd); | ||
446 | } | 443 | } |
447 | } | 444 | } |
448 | 445 | ||
@@ -461,10 +458,7 @@ void disable_msi_mode(struct pci_dev *dev, int pos, int type) | |||
461 | } | 458 | } |
462 | if (pci_find_capability(dev, PCI_CAP_ID_EXP)) { | 459 | if (pci_find_capability(dev, PCI_CAP_ID_EXP)) { |
463 | /* PCI Express Endpoint device detected */ | 460 | /* PCI Express Endpoint device detected */ |
464 | u16 cmd; | 461 | pci_intx(dev, 1); /* enable intx */ |
465 | pci_read_config_word(dev, PCI_COMMAND, &cmd); | ||
466 | cmd &= ~PCI_COMMAND_INTX_DISABLE; | ||
467 | pci_write_config_word(dev, PCI_COMMAND, cmd); | ||
468 | } | 462 | } |
469 | } | 463 | } |
470 | 464 | ||
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index e179af3186f5..ccff633a3948 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -798,6 +798,31 @@ pci_clear_mwi(struct pci_dev *dev) | |||
798 | } | 798 | } |
799 | } | 799 | } |
800 | 800 | ||
801 | /** | ||
802 | * pci_intx - enables/disables PCI INTx for device dev | ||
803 | * @dev: the PCI device to operate on | ||
804 | * @enable: boolean | ||
805 | * | ||
806 | * Enables/disables PCI INTx for device dev | ||
807 | */ | ||
808 | void | ||
809 | pci_intx(struct pci_dev *pdev, int enable) | ||
810 | { | ||
811 | u16 pci_command, new; | ||
812 | |||
813 | pci_read_config_word(pdev, PCI_COMMAND, &pci_command); | ||
814 | |||
815 | if (enable) { | ||
816 | new = pci_command & ~PCI_COMMAND_INTX_DISABLE; | ||
817 | } else { | ||
818 | new = pci_command | PCI_COMMAND_INTX_DISABLE; | ||
819 | } | ||
820 | |||
821 | if (new != pci_command) { | ||
822 | pci_write_config_word(pdev, PCI_COMMAND, pci_command); | ||
823 | } | ||
824 | } | ||
825 | |||
801 | #ifndef HAVE_ARCH_PCI_SET_DMA_MASK | 826 | #ifndef HAVE_ARCH_PCI_SET_DMA_MASK |
802 | /* | 827 | /* |
803 | * These can be overridden by arch-specific implementations | 828 | * These can be overridden by arch-specific implementations |
@@ -875,6 +900,7 @@ EXPORT_SYMBOL(pci_request_region); | |||
875 | EXPORT_SYMBOL(pci_set_master); | 900 | EXPORT_SYMBOL(pci_set_master); |
876 | EXPORT_SYMBOL(pci_set_mwi); | 901 | EXPORT_SYMBOL(pci_set_mwi); |
877 | EXPORT_SYMBOL(pci_clear_mwi); | 902 | EXPORT_SYMBOL(pci_clear_mwi); |
903 | EXPORT_SYMBOL_GPL(pci_intx); | ||
878 | EXPORT_SYMBOL(pci_set_dma_mask); | 904 | EXPORT_SYMBOL(pci_set_dma_mask); |
879 | EXPORT_SYMBOL(pci_set_consistent_dma_mask); | 905 | EXPORT_SYMBOL(pci_set_consistent_dma_mask); |
880 | EXPORT_SYMBOL(pci_assign_resource); | 906 | EXPORT_SYMBOL(pci_assign_resource); |
diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c index 320df6cd3def..c2c8fa828e24 100644 --- a/drivers/scsi/ahci.c +++ b/drivers/scsi/ahci.c | |||
@@ -865,22 +865,6 @@ static int ahci_host_init(struct ata_probe_ent *probe_ent) | |||
865 | return 0; | 865 | return 0; |
866 | } | 866 | } |
867 | 867 | ||
868 | /* move to PCI layer, integrate w/ MSI stuff */ | ||
869 | static void pci_intx(struct pci_dev *pdev, int enable) | ||
870 | { | ||
871 | u16 pci_command, new; | ||
872 | |||
873 | pci_read_config_word(pdev, PCI_COMMAND, &pci_command); | ||
874 | |||
875 | if (enable) | ||
876 | new = pci_command & ~PCI_COMMAND_INTX_DISABLE; | ||
877 | else | ||
878 | new = pci_command | PCI_COMMAND_INTX_DISABLE; | ||
879 | |||
880 | if (new != pci_command) | ||
881 | pci_write_config_word(pdev, PCI_COMMAND, pci_command); | ||
882 | } | ||
883 | |||
884 | static void ahci_print_info(struct ata_probe_ent *probe_ent) | 868 | static void ahci_print_info(struct ata_probe_ent *probe_ent) |
885 | { | 869 | { |
886 | struct ahci_host_priv *hpriv = probe_ent->private_data; | 870 | struct ahci_host_priv *hpriv = probe_ent->private_data; |
diff --git a/drivers/scsi/ata_piix.c b/drivers/scsi/ata_piix.c index 5f8688529041..87e0c36f1554 100644 --- a/drivers/scsi/ata_piix.c +++ b/drivers/scsi/ata_piix.c | |||
@@ -568,18 +568,6 @@ static void piix_set_dmamode (struct ata_port *ap, struct ata_device *adev) | |||
568 | } | 568 | } |
569 | } | 569 | } |
570 | 570 | ||
571 | /* move to PCI layer, integrate w/ MSI stuff */ | ||
572 | static void pci_enable_intx(struct pci_dev *pdev) | ||
573 | { | ||
574 | u16 pci_command; | ||
575 | |||
576 | pci_read_config_word(pdev, PCI_COMMAND, &pci_command); | ||
577 | if (pci_command & PCI_COMMAND_INTX_DISABLE) { | ||
578 | pci_command &= ~PCI_COMMAND_INTX_DISABLE; | ||
579 | pci_write_config_word(pdev, PCI_COMMAND, pci_command); | ||
580 | } | ||
581 | } | ||
582 | |||
583 | #define AHCI_PCI_BAR 5 | 571 | #define AHCI_PCI_BAR 5 |
584 | #define AHCI_GLOBAL_CTL 0x04 | 572 | #define AHCI_GLOBAL_CTL 0x04 |
585 | #define AHCI_ENABLE (1 << 31) | 573 | #define AHCI_ENABLE (1 << 31) |
@@ -677,7 +665,7 @@ static int piix_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) | |||
677 | * message-signalled interrupts currently). | 665 | * message-signalled interrupts currently). |
678 | */ | 666 | */ |
679 | if (port_info[0]->host_flags & PIIX_FLAG_CHECKINTR) | 667 | if (port_info[0]->host_flags & PIIX_FLAG_CHECKINTR) |
680 | pci_enable_intx(pdev); | 668 | pci_intx(pdev, 1); |
681 | 669 | ||
682 | if (combined) { | 670 | if (combined) { |
683 | port_info[sata_chan] = &piix_port_info[ent->driver_data]; | 671 | port_info[sata_chan] = &piix_port_info[ent->driver_data]; |
diff --git a/drivers/scsi/sata_sis.c b/drivers/scsi/sata_sis.c index 7d1aaa99aaae..2bd3f11ac010 100644 --- a/drivers/scsi/sata_sis.c +++ b/drivers/scsi/sata_sis.c | |||
@@ -233,18 +233,6 @@ static void sis_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val) | |||
233 | } | 233 | } |
234 | } | 234 | } |
235 | 235 | ||
236 | /* move to PCI layer, integrate w/ MSI stuff */ | ||
237 | static void pci_enable_intx(struct pci_dev *pdev) | ||
238 | { | ||
239 | u16 pci_command; | ||
240 | |||
241 | pci_read_config_word(pdev, PCI_COMMAND, &pci_command); | ||
242 | if (pci_command & PCI_COMMAND_INTX_DISABLE) { | ||
243 | pci_command &= ~PCI_COMMAND_INTX_DISABLE; | ||
244 | pci_write_config_word(pdev, PCI_COMMAND, pci_command); | ||
245 | } | ||
246 | } | ||
247 | |||
248 | static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) | 236 | static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) |
249 | { | 237 | { |
250 | struct ata_probe_ent *probe_ent = NULL; | 238 | struct ata_probe_ent *probe_ent = NULL; |
@@ -319,7 +307,7 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) | |||
319 | } | 307 | } |
320 | 308 | ||
321 | pci_set_master(pdev); | 309 | pci_set_master(pdev); |
322 | pci_enable_intx(pdev); | 310 | pci_intx(pdev, 1); |
323 | 311 | ||
324 | /* FIXME: check ata_device_add return value */ | 312 | /* FIXME: check ata_device_add return value */ |
325 | ata_device_add(probe_ent); | 313 | ata_device_add(probe_ent); |
diff --git a/drivers/scsi/sata_uli.c b/drivers/scsi/sata_uli.c index 42e13ed8eb5b..4c9fb8b71be1 100644 --- a/drivers/scsi/sata_uli.c +++ b/drivers/scsi/sata_uli.c | |||
@@ -176,18 +176,6 @@ static void uli_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val) | |||
176 | uli_scr_cfg_write(ap, sc_reg, val); | 176 | uli_scr_cfg_write(ap, sc_reg, val); |
177 | } | 177 | } |
178 | 178 | ||
179 | /* move to PCI layer, integrate w/ MSI stuff */ | ||
180 | static void pci_enable_intx(struct pci_dev *pdev) | ||
181 | { | ||
182 | u16 pci_command; | ||
183 | |||
184 | pci_read_config_word(pdev, PCI_COMMAND, &pci_command); | ||
185 | if (pci_command & PCI_COMMAND_INTX_DISABLE) { | ||
186 | pci_command &= ~PCI_COMMAND_INTX_DISABLE; | ||
187 | pci_write_config_word(pdev, PCI_COMMAND, pci_command); | ||
188 | } | ||
189 | } | ||
190 | |||
191 | static int uli_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) | 179 | static int uli_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) |
192 | { | 180 | { |
193 | struct ata_probe_ent *probe_ent; | 181 | struct ata_probe_ent *probe_ent; |
@@ -260,7 +248,7 @@ static int uli_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) | |||
260 | } | 248 | } |
261 | 249 | ||
262 | pci_set_master(pdev); | 250 | pci_set_master(pdev); |
263 | pci_enable_intx(pdev); | 251 | pci_intx(pdev, 1); |
264 | 252 | ||
265 | /* FIXME: check ata_device_add return value */ | 253 | /* FIXME: check ata_device_add return value */ |
266 | ata_device_add(probe_ent); | 254 | ata_device_add(probe_ent); |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 7004dde7fef0..6caaba0af469 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -383,6 +383,7 @@ void pci_set_master(struct pci_dev *dev); | |||
383 | #define HAVE_PCI_SET_MWI | 383 | #define HAVE_PCI_SET_MWI |
384 | int pci_set_mwi(struct pci_dev *dev); | 384 | int pci_set_mwi(struct pci_dev *dev); |
385 | void pci_clear_mwi(struct pci_dev *dev); | 385 | void pci_clear_mwi(struct pci_dev *dev); |
386 | void pci_intx(struct pci_dev *dev, int enable); | ||
386 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask); | 387 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask); |
387 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); | 388 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); |
388 | void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); | 389 | void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); |