diff options
-rw-r--r-- | drivers/ssb/main.c | 74 | ||||
-rw-r--r-- | include/linux/ssb/ssb.h | 157 |
2 files changed, 0 insertions, 231 deletions
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c index a732b396e602..7cee7f4eb60b 100644 --- a/drivers/ssb/main.c +++ b/drivers/ssb/main.c | |||
@@ -1228,80 +1228,6 @@ u32 ssb_dma_translation(struct ssb_device *dev) | |||
1228 | } | 1228 | } |
1229 | EXPORT_SYMBOL(ssb_dma_translation); | 1229 | EXPORT_SYMBOL(ssb_dma_translation); |
1230 | 1230 | ||
1231 | int ssb_dma_set_mask(struct ssb_device *dev, u64 mask) | ||
1232 | { | ||
1233 | #ifdef CONFIG_SSB_PCIHOST | ||
1234 | int err; | ||
1235 | #endif | ||
1236 | |||
1237 | switch (dev->bus->bustype) { | ||
1238 | case SSB_BUSTYPE_PCI: | ||
1239 | #ifdef CONFIG_SSB_PCIHOST | ||
1240 | err = pci_set_dma_mask(dev->bus->host_pci, mask); | ||
1241 | if (err) | ||
1242 | return err; | ||
1243 | err = pci_set_consistent_dma_mask(dev->bus->host_pci, mask); | ||
1244 | return err; | ||
1245 | #endif | ||
1246 | case SSB_BUSTYPE_SSB: | ||
1247 | return dma_set_mask(dev->dev, mask); | ||
1248 | default: | ||
1249 | __ssb_dma_not_implemented(dev); | ||
1250 | } | ||
1251 | return -ENOSYS; | ||
1252 | } | ||
1253 | EXPORT_SYMBOL(ssb_dma_set_mask); | ||
1254 | |||
1255 | void * ssb_dma_alloc_consistent(struct ssb_device *dev, size_t size, | ||
1256 | dma_addr_t *dma_handle, gfp_t gfp_flags) | ||
1257 | { | ||
1258 | switch (dev->bus->bustype) { | ||
1259 | case SSB_BUSTYPE_PCI: | ||
1260 | #ifdef CONFIG_SSB_PCIHOST | ||
1261 | if (gfp_flags & GFP_DMA) { | ||
1262 | /* Workaround: The PCI API does not support passing | ||
1263 | * a GFP flag. */ | ||
1264 | return dma_alloc_coherent(&dev->bus->host_pci->dev, | ||
1265 | size, dma_handle, gfp_flags); | ||
1266 | } | ||
1267 | return pci_alloc_consistent(dev->bus->host_pci, size, dma_handle); | ||
1268 | #endif | ||
1269 | case SSB_BUSTYPE_SSB: | ||
1270 | return dma_alloc_coherent(dev->dev, size, dma_handle, gfp_flags); | ||
1271 | default: | ||
1272 | __ssb_dma_not_implemented(dev); | ||
1273 | } | ||
1274 | return NULL; | ||
1275 | } | ||
1276 | EXPORT_SYMBOL(ssb_dma_alloc_consistent); | ||
1277 | |||
1278 | void ssb_dma_free_consistent(struct ssb_device *dev, size_t size, | ||
1279 | void *vaddr, dma_addr_t dma_handle, | ||
1280 | gfp_t gfp_flags) | ||
1281 | { | ||
1282 | switch (dev->bus->bustype) { | ||
1283 | case SSB_BUSTYPE_PCI: | ||
1284 | #ifdef CONFIG_SSB_PCIHOST | ||
1285 | if (gfp_flags & GFP_DMA) { | ||
1286 | /* Workaround: The PCI API does not support passing | ||
1287 | * a GFP flag. */ | ||
1288 | dma_free_coherent(&dev->bus->host_pci->dev, | ||
1289 | size, vaddr, dma_handle); | ||
1290 | return; | ||
1291 | } | ||
1292 | pci_free_consistent(dev->bus->host_pci, size, | ||
1293 | vaddr, dma_handle); | ||
1294 | return; | ||
1295 | #endif | ||
1296 | case SSB_BUSTYPE_SSB: | ||
1297 | dma_free_coherent(dev->dev, size, vaddr, dma_handle); | ||
1298 | return; | ||
1299 | default: | ||
1300 | __ssb_dma_not_implemented(dev); | ||
1301 | } | ||
1302 | } | ||
1303 | EXPORT_SYMBOL(ssb_dma_free_consistent); | ||
1304 | |||
1305 | int ssb_bus_may_powerdown(struct ssb_bus *bus) | 1231 | int ssb_bus_may_powerdown(struct ssb_bus *bus) |
1306 | { | 1232 | { |
1307 | struct ssb_chipcommon *cc; | 1233 | struct ssb_chipcommon *cc; |
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h index 0d5f04316b35..623b704fdc42 100644 --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h | |||
@@ -470,14 +470,6 @@ extern u32 ssb_dma_translation(struct ssb_device *dev); | |||
470 | #define SSB_DMA_TRANSLATION_MASK 0xC0000000 | 470 | #define SSB_DMA_TRANSLATION_MASK 0xC0000000 |
471 | #define SSB_DMA_TRANSLATION_SHIFT 30 | 471 | #define SSB_DMA_TRANSLATION_SHIFT 30 |
472 | 472 | ||
473 | extern int ssb_dma_set_mask(struct ssb_device *dev, u64 mask); | ||
474 | |||
475 | extern void * ssb_dma_alloc_consistent(struct ssb_device *dev, size_t size, | ||
476 | dma_addr_t *dma_handle, gfp_t gfp_flags); | ||
477 | extern void ssb_dma_free_consistent(struct ssb_device *dev, size_t size, | ||
478 | void *vaddr, dma_addr_t dma_handle, | ||
479 | gfp_t gfp_flags); | ||
480 | |||
481 | static inline void __cold __ssb_dma_not_implemented(struct ssb_device *dev) | 473 | static inline void __cold __ssb_dma_not_implemented(struct ssb_device *dev) |
482 | { | 474 | { |
483 | #ifdef CONFIG_SSB_DEBUG | 475 | #ifdef CONFIG_SSB_DEBUG |
@@ -486,155 +478,6 @@ static inline void __cold __ssb_dma_not_implemented(struct ssb_device *dev) | |||
486 | #endif /* DEBUG */ | 478 | #endif /* DEBUG */ |
487 | } | 479 | } |
488 | 480 | ||
489 | static inline int ssb_dma_mapping_error(struct ssb_device *dev, dma_addr_t addr) | ||
490 | { | ||
491 | switch (dev->bus->bustype) { | ||
492 | case SSB_BUSTYPE_PCI: | ||
493 | #ifdef CONFIG_SSB_PCIHOST | ||
494 | return pci_dma_mapping_error(dev->bus->host_pci, addr); | ||
495 | #endif | ||
496 | break; | ||
497 | case SSB_BUSTYPE_SSB: | ||
498 | return dma_mapping_error(dev->dev, addr); | ||
499 | default: | ||
500 | break; | ||
501 | } | ||
502 | __ssb_dma_not_implemented(dev); | ||
503 | return -ENOSYS; | ||
504 | } | ||
505 | |||
506 | static inline dma_addr_t ssb_dma_map_single(struct ssb_device *dev, void *p, | ||
507 | size_t size, enum dma_data_direction dir) | ||
508 | { | ||
509 | switch (dev->bus->bustype) { | ||
510 | case SSB_BUSTYPE_PCI: | ||
511 | #ifdef CONFIG_SSB_PCIHOST | ||
512 | return pci_map_single(dev->bus->host_pci, p, size, dir); | ||
513 | #endif | ||
514 | break; | ||
515 | case SSB_BUSTYPE_SSB: | ||
516 | return dma_map_single(dev->dev, p, size, dir); | ||
517 | default: | ||
518 | break; | ||
519 | } | ||
520 | __ssb_dma_not_implemented(dev); | ||
521 | return 0; | ||
522 | } | ||
523 | |||
524 | static inline void ssb_dma_unmap_single(struct ssb_device *dev, dma_addr_t dma_addr, | ||
525 | size_t size, enum dma_data_direction dir) | ||
526 | { | ||
527 | switch (dev->bus->bustype) { | ||
528 | case SSB_BUSTYPE_PCI: | ||
529 | #ifdef CONFIG_SSB_PCIHOST | ||
530 | pci_unmap_single(dev->bus->host_pci, dma_addr, size, dir); | ||
531 | return; | ||
532 | #endif | ||
533 | break; | ||
534 | case SSB_BUSTYPE_SSB: | ||
535 | dma_unmap_single(dev->dev, dma_addr, size, dir); | ||
536 | return; | ||
537 | default: | ||
538 | break; | ||
539 | } | ||
540 | __ssb_dma_not_implemented(dev); | ||
541 | } | ||
542 | |||
543 | static inline void ssb_dma_sync_single_for_cpu(struct ssb_device *dev, | ||
544 | dma_addr_t dma_addr, | ||
545 | size_t size, | ||
546 | enum dma_data_direction dir) | ||
547 | { | ||
548 | switch (dev->bus->bustype) { | ||
549 | case SSB_BUSTYPE_PCI: | ||
550 | #ifdef CONFIG_SSB_PCIHOST | ||
551 | pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr, | ||
552 | size, dir); | ||
553 | return; | ||
554 | #endif | ||
555 | break; | ||
556 | case SSB_BUSTYPE_SSB: | ||
557 | dma_sync_single_for_cpu(dev->dev, dma_addr, size, dir); | ||
558 | return; | ||
559 | default: | ||
560 | break; | ||
561 | } | ||
562 | __ssb_dma_not_implemented(dev); | ||
563 | } | ||
564 | |||
565 | static inline void ssb_dma_sync_single_for_device(struct ssb_device *dev, | ||
566 | dma_addr_t dma_addr, | ||
567 | size_t size, | ||
568 | enum dma_data_direction dir) | ||
569 | { | ||
570 | switch (dev->bus->bustype) { | ||
571 | case SSB_BUSTYPE_PCI: | ||
572 | #ifdef CONFIG_SSB_PCIHOST | ||
573 | pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr, | ||
574 | size, dir); | ||
575 | return; | ||
576 | #endif | ||
577 | break; | ||
578 | case SSB_BUSTYPE_SSB: | ||
579 | dma_sync_single_for_device(dev->dev, dma_addr, size, dir); | ||
580 | return; | ||
581 | default: | ||
582 | break; | ||
583 | } | ||
584 | __ssb_dma_not_implemented(dev); | ||
585 | } | ||
586 | |||
587 | static inline void ssb_dma_sync_single_range_for_cpu(struct ssb_device *dev, | ||
588 | dma_addr_t dma_addr, | ||
589 | unsigned long offset, | ||
590 | size_t size, | ||
591 | enum dma_data_direction dir) | ||
592 | { | ||
593 | switch (dev->bus->bustype) { | ||
594 | case SSB_BUSTYPE_PCI: | ||
595 | #ifdef CONFIG_SSB_PCIHOST | ||
596 | /* Just sync everything. That's all the PCI API can do. */ | ||
597 | pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr, | ||
598 | offset + size, dir); | ||
599 | return; | ||
600 | #endif | ||
601 | break; | ||
602 | case SSB_BUSTYPE_SSB: | ||
603 | dma_sync_single_range_for_cpu(dev->dev, dma_addr, offset, | ||
604 | size, dir); | ||
605 | return; | ||
606 | default: | ||
607 | break; | ||
608 | } | ||
609 | __ssb_dma_not_implemented(dev); | ||
610 | } | ||
611 | |||
612 | static inline void ssb_dma_sync_single_range_for_device(struct ssb_device *dev, | ||
613 | dma_addr_t dma_addr, | ||
614 | unsigned long offset, | ||
615 | size_t size, | ||
616 | enum dma_data_direction dir) | ||
617 | { | ||
618 | switch (dev->bus->bustype) { | ||
619 | case SSB_BUSTYPE_PCI: | ||
620 | #ifdef CONFIG_SSB_PCIHOST | ||
621 | /* Just sync everything. That's all the PCI API can do. */ | ||
622 | pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr, | ||
623 | offset + size, dir); | ||
624 | return; | ||
625 | #endif | ||
626 | break; | ||
627 | case SSB_BUSTYPE_SSB: | ||
628 | dma_sync_single_range_for_device(dev->dev, dma_addr, offset, | ||
629 | size, dir); | ||
630 | return; | ||
631 | default: | ||
632 | break; | ||
633 | } | ||
634 | __ssb_dma_not_implemented(dev); | ||
635 | } | ||
636 | |||
637 | |||
638 | #ifdef CONFIG_SSB_PCIHOST | 481 | #ifdef CONFIG_SSB_PCIHOST |
639 | /* PCI-host wrapper driver */ | 482 | /* PCI-host wrapper driver */ |
640 | extern int ssb_pcihost_register(struct pci_driver *driver); | 483 | extern int ssb_pcihost_register(struct pci_driver *driver); |