diff options
author | FUJITA Tomonori <tomof@acm.org> | 2008-02-05 01:27:55 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-05 12:44:10 -0500 |
commit | 4d57cdfacaa1c207bf4c071f89835e0368766a50 (patch) | |
tree | b0b617efcd2e228573e42e7efbea4a95955ddf70 | |
parent | 6b7b651055221127304a4e373ee9b762398d54d7 (diff) |
iommu sg merging: PCI: add device_dma_parameters support
This adds struct device_dma_parameters in struct pci_dev and properly
sets up a pointer in struct device.
The default max_segment_size is set to 64K, same to the block layer's
default value.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Mostly-acked-by: Jeff Garzik <jeff@garzik.org>
Cc: James Bottomley <James.Bottomley@steeleye.com>
Acked-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/pci/pci.c | 8 | ||||
-rw-r--r-- | drivers/pci/probe.c | 3 | ||||
-rw-r--r-- | include/linux/pci.h | 9 |
3 files changed, 20 insertions, 0 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 04aac7782468..be97090ddf32 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -1451,6 +1451,14 @@ pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) | |||
1451 | } | 1451 | } |
1452 | #endif | 1452 | #endif |
1453 | 1453 | ||
1454 | #ifndef HAVE_ARCH_PCI_SET_DMA_MAX_SEGMENT_SIZE | ||
1455 | int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size) | ||
1456 | { | ||
1457 | return dma_set_max_seg_size(&dev->dev, size); | ||
1458 | } | ||
1459 | EXPORT_SYMBOL(pci_set_dma_max_seg_size); | ||
1460 | #endif | ||
1461 | |||
1454 | /** | 1462 | /** |
1455 | * pcix_get_max_mmrbc - get PCI-X maximum designed memory read byte count | 1463 | * pcix_get_max_mmrbc - get PCI-X maximum designed memory read byte count |
1456 | * @dev: PCI device to query | 1464 | * @dev: PCI device to query |
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 7f5dab34d315..f47d596d5ebc 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -933,8 +933,11 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus) | |||
933 | 933 | ||
934 | set_dev_node(&dev->dev, pcibus_to_node(bus)); | 934 | set_dev_node(&dev->dev, pcibus_to_node(bus)); |
935 | dev->dev.dma_mask = &dev->dma_mask; | 935 | dev->dev.dma_mask = &dev->dma_mask; |
936 | dev->dev.dma_parms = &dev->dma_parms; | ||
936 | dev->dev.coherent_dma_mask = 0xffffffffull; | 937 | dev->dev.coherent_dma_mask = 0xffffffffull; |
937 | 938 | ||
939 | pci_set_dma_max_seg_size(dev, 65536); | ||
940 | |||
938 | /* Fix up broken headers */ | 941 | /* Fix up broken headers */ |
939 | pci_fixup_device(pci_fixup_header, dev); | 942 | pci_fixup_device(pci_fixup_header, dev); |
940 | 943 | ||
diff --git a/include/linux/pci.h b/include/linux/pci.h index cee75c0ff6e7..ba3a7f459da4 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -159,6 +159,8 @@ struct pci_dev { | |||
159 | this if your device has broken DMA | 159 | this if your device has broken DMA |
160 | or supports 64-bit transfers. */ | 160 | or supports 64-bit transfers. */ |
161 | 161 | ||
162 | struct device_dma_parameters dma_parms; | ||
163 | |||
162 | pci_power_t current_state; /* Current operating state. In ACPI-speak, | 164 | pci_power_t current_state; /* Current operating state. In ACPI-speak, |
163 | this is D0-D3, D0 being fully functional, | 165 | this is D0-D3, D0 being fully functional, |
164 | and D3 being off. */ | 166 | and D3 being off. */ |
@@ -580,6 +582,7 @@ void pci_intx(struct pci_dev *dev, int enable); | |||
580 | void pci_msi_off(struct pci_dev *dev); | 582 | void pci_msi_off(struct pci_dev *dev); |
581 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask); | 583 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask); |
582 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); | 584 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); |
585 | int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size); | ||
583 | int pcix_get_max_mmrbc(struct pci_dev *dev); | 586 | int pcix_get_max_mmrbc(struct pci_dev *dev); |
584 | int pcix_get_mmrbc(struct pci_dev *dev); | 587 | int pcix_get_mmrbc(struct pci_dev *dev); |
585 | int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc); | 588 | int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc); |
@@ -822,6 +825,12 @@ static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) | |||
822 | return -EIO; | 825 | return -EIO; |
823 | } | 826 | } |
824 | 827 | ||
828 | static inline int pci_set_dma_max_seg_size(struct pci_dev *dev, | ||
829 | unsigned int size) | ||
830 | { | ||
831 | return -EIO; | ||
832 | } | ||
833 | |||
825 | static inline int pci_assign_resource(struct pci_dev *dev, int i) | 834 | static inline int pci_assign_resource(struct pci_dev *dev, int i) |
826 | { | 835 | { |
827 | return -EBUSY; | 836 | return -EBUSY; |