diff options
author | David S. Miller <davem@davemloft.net> | 2010-06-11 14:34:06 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-06-11 14:34:06 -0400 |
commit | 14599f1e341ee219abdd15f4eee5872d6f2d29f1 (patch) | |
tree | 3875181429010e58416ab34e6c06ef42de52e756 /drivers/ssb/main.c | |
parent | d8d1f30b95a635dbd610dcc5eb641aca8f4768cf (diff) | |
parent | 832c10fd733893f86c63bde1c65b005d5a2fe346 (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.c | 76 |
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 | } |
1227 | EXPORT_SYMBOL(ssb_dma_translation); | 1229 | EXPORT_SYMBOL(ssb_dma_translation); |
1228 | 1230 | ||
1229 | int 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 | } | ||
1251 | EXPORT_SYMBOL(ssb_dma_set_mask); | ||
1252 | |||
1253 | void * 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 | } | ||
1274 | EXPORT_SYMBOL(ssb_dma_alloc_consistent); | ||
1275 | |||
1276 | void 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 | } | ||
1301 | EXPORT_SYMBOL(ssb_dma_free_consistent); | ||
1302 | |||
1303 | int ssb_bus_may_powerdown(struct ssb_bus *bus) | 1231 | int ssb_bus_may_powerdown(struct ssb_bus *bus) |
1304 | { | 1232 | { |
1305 | struct ssb_chipcommon *cc; | 1233 | struct ssb_chipcommon *cc; |