aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ssb/main.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-06-11 14:34:06 -0400
committerDavid S. Miller <davem@davemloft.net>2010-06-11 14:34:06 -0400
commit14599f1e341ee219abdd15f4eee5872d6f2d29f1 (patch)
tree3875181429010e58416ab34e6c06ef42de52e756 /drivers/ssb/main.c
parentd8d1f30b95a635dbd610dcc5eb641aca8f4768cf (diff)
parent832c10fd733893f86c63bde1c65b005d5a2fe346 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
Conflicts: drivers/net/wireless/wl12xx/wl1271.h drivers/net/wireless/wl12xx/wl1271_cmd.h
Diffstat (limited to 'drivers/ssb/main.c')
-rw-r--r--drivers/ssb/main.c76
1 files changed, 2 insertions, 74 deletions
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
index 51275aac5b34..7cee7f4eb60b 100644
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -486,6 +486,7 @@ static int ssb_devices_register(struct ssb_bus *bus)
486#ifdef CONFIG_SSB_PCIHOST 486#ifdef CONFIG_SSB_PCIHOST
487 sdev->irq = bus->host_pci->irq; 487 sdev->irq = bus->host_pci->irq;
488 dev->parent = &bus->host_pci->dev; 488 dev->parent = &bus->host_pci->dev;
489 sdev->dma_dev = dev->parent;
489#endif 490#endif
490 break; 491 break;
491 case SSB_BUSTYPE_PCMCIA: 492 case SSB_BUSTYPE_PCMCIA:
@@ -501,6 +502,7 @@ static int ssb_devices_register(struct ssb_bus *bus)
501 break; 502 break;
502 case SSB_BUSTYPE_SSB: 503 case SSB_BUSTYPE_SSB:
503 dev->dma_mask = &dev->coherent_dma_mask; 504 dev->dma_mask = &dev->coherent_dma_mask;
505 sdev->dma_dev = dev;
504 break; 506 break;
505 } 507 }
506 508
@@ -1226,80 +1228,6 @@ u32 ssb_dma_translation(struct ssb_device *dev)
1226} 1228}
1227EXPORT_SYMBOL(ssb_dma_translation); 1229EXPORT_SYMBOL(ssb_dma_translation);
1228 1230
1229int ssb_dma_set_mask(struct ssb_device *dev, u64 mask)
1230{
1231#ifdef CONFIG_SSB_PCIHOST
1232 int err;
1233#endif
1234
1235 switch (dev->bus->bustype) {
1236 case SSB_BUSTYPE_PCI:
1237#ifdef CONFIG_SSB_PCIHOST
1238 err = pci_set_dma_mask(dev->bus->host_pci, mask);
1239 if (err)
1240 return err;
1241 err = pci_set_consistent_dma_mask(dev->bus->host_pci, mask);
1242 return err;
1243#endif
1244 case SSB_BUSTYPE_SSB:
1245 return dma_set_mask(dev->dev, mask);
1246 default:
1247 __ssb_dma_not_implemented(dev);
1248 }
1249 return -ENOSYS;
1250}
1251EXPORT_SYMBOL(ssb_dma_set_mask);
1252
1253void * ssb_dma_alloc_consistent(struct ssb_device *dev, size_t size,
1254 dma_addr_t *dma_handle, gfp_t gfp_flags)
1255{
1256 switch (dev->bus->bustype) {
1257 case SSB_BUSTYPE_PCI:
1258#ifdef CONFIG_SSB_PCIHOST
1259 if (gfp_flags & GFP_DMA) {
1260 /* Workaround: The PCI API does not support passing
1261 * a GFP flag. */
1262 return dma_alloc_coherent(&dev->bus->host_pci->dev,
1263 size, dma_handle, gfp_flags);
1264 }
1265 return pci_alloc_consistent(dev->bus->host_pci, size, dma_handle);
1266#endif
1267 case SSB_BUSTYPE_SSB:
1268 return dma_alloc_coherent(dev->dev, size, dma_handle, gfp_flags);
1269 default:
1270 __ssb_dma_not_implemented(dev);
1271 }
1272 return NULL;
1273}
1274EXPORT_SYMBOL(ssb_dma_alloc_consistent);
1275
1276void ssb_dma_free_consistent(struct ssb_device *dev, size_t size,
1277 void *vaddr, dma_addr_t dma_handle,
1278 gfp_t gfp_flags)
1279{
1280 switch (dev->bus->bustype) {
1281 case SSB_BUSTYPE_PCI:
1282#ifdef CONFIG_SSB_PCIHOST
1283 if (gfp_flags & GFP_DMA) {
1284 /* Workaround: The PCI API does not support passing
1285 * a GFP flag. */
1286 dma_free_coherent(&dev->bus->host_pci->dev,
1287 size, vaddr, dma_handle);
1288 return;
1289 }
1290 pci_free_consistent(dev->bus->host_pci, size,
1291 vaddr, dma_handle);
1292 return;
1293#endif
1294 case SSB_BUSTYPE_SSB:
1295 dma_free_coherent(dev->dev, size, vaddr, dma_handle);
1296 return;
1297 default:
1298 __ssb_dma_not_implemented(dev);
1299 }
1300}
1301EXPORT_SYMBOL(ssb_dma_free_consistent);
1302
1303int ssb_bus_may_powerdown(struct ssb_bus *bus) 1231int ssb_bus_may_powerdown(struct ssb_bus *bus)
1304{ 1232{
1305 struct ssb_chipcommon *cc; 1233 struct ssb_chipcommon *cc;