main.c (c7e745c6de92a757ec525fbc9a74891651a5f1c6) main.c (f225763a7d6c92c4932dbd528437997078496fcc)
1/*
2 * Sonics Silicon Backplane
3 * Subsystem core
4 *
5 * Copyright 2005, Broadcom Corporation
6 * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
7 *
8 * Licensed under the GNU/GPL. See COPYING for details.

--- 448 unchanged lines hidden (view full) ---

457 snprintf(dev->bus_id, sizeof(dev->bus_id),
458 "ssb%u:%d", bus->busnumber, dev_idx);
459
460 switch (bus->bustype) {
461 case SSB_BUSTYPE_PCI:
462#ifdef CONFIG_SSB_PCIHOST
463 sdev->irq = bus->host_pci->irq;
464 dev->parent = &bus->host_pci->dev;
1/*
2 * Sonics Silicon Backplane
3 * Subsystem core
4 *
5 * Copyright 2005, Broadcom Corporation
6 * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
7 *
8 * Licensed under the GNU/GPL. See COPYING for details.

--- 448 unchanged lines hidden (view full) ---

457 snprintf(dev->bus_id, sizeof(dev->bus_id),
458 "ssb%u:%d", bus->busnumber, dev_idx);
459
460 switch (bus->bustype) {
461 case SSB_BUSTYPE_PCI:
462#ifdef CONFIG_SSB_PCIHOST
463 sdev->irq = bus->host_pci->irq;
464 dev->parent = &bus->host_pci->dev;
465 sdev->dma_dev = &bus->host_pci->dev;
466#endif
467 break;
468 case SSB_BUSTYPE_PCMCIA:
469#ifdef CONFIG_SSB_PCMCIAHOST
470 sdev->irq = bus->host_pcmcia->irq.AssignedIRQ;
471 dev->parent = &bus->host_pcmcia->dev;
465#endif
466 break;
467 case SSB_BUSTYPE_PCMCIA:
468#ifdef CONFIG_SSB_PCMCIAHOST
469 sdev->irq = bus->host_pcmcia->irq.AssignedIRQ;
470 dev->parent = &bus->host_pcmcia->dev;
472 sdev->dma_dev = &bus->host_pcmcia->dev;
473#endif
474 break;
475 case SSB_BUSTYPE_SSB:
471#endif
472 break;
473 case SSB_BUSTYPE_SSB:
476 sdev->dma_dev = dev;
477 break;
478 }
479
480 sdev->dev = dev;
481 err = device_register(dev);
482 if (err) {
483 ssb_printk(KERN_ERR PFX
484 "Could not register %s\n",

--- 666 unchanged lines hidden (view full) ---

1151 ssb_flush_tmslow(dev);
1152}
1153EXPORT_SYMBOL(ssb_device_disable);
1154
1155u32 ssb_dma_translation(struct ssb_device *dev)
1156{
1157 switch (dev->bus->bustype) {
1158 case SSB_BUSTYPE_SSB:
474 break;
475 }
476
477 sdev->dev = dev;
478 err = device_register(dev);
479 if (err) {
480 ssb_printk(KERN_ERR PFX
481 "Could not register %s\n",

--- 666 unchanged lines hidden (view full) ---

1148 ssb_flush_tmslow(dev);
1149}
1150EXPORT_SYMBOL(ssb_device_disable);
1151
1152u32 ssb_dma_translation(struct ssb_device *dev)
1153{
1154 switch (dev->bus->bustype) {
1155 case SSB_BUSTYPE_SSB:
1159 case SSB_BUSTYPE_PCMCIA:
1160 return 0;
1161 case SSB_BUSTYPE_PCI:
1162 return SSB_PCI_DMA;
1156 return 0;
1157 case SSB_BUSTYPE_PCI:
1158 return SSB_PCI_DMA;
1159 default:
1160 __ssb_dma_not_implemented(dev);
1163 }
1164 return 0;
1165}
1166EXPORT_SYMBOL(ssb_dma_translation);
1167
1161 }
1162 return 0;
1163}
1164EXPORT_SYMBOL(ssb_dma_translation);
1165
1168int ssb_dma_set_mask(struct ssb_device *ssb_dev, u64 mask)
1166int ssb_dma_set_mask(struct ssb_device *dev, u64 mask)
1169{
1167{
1170 struct device *dma_dev = ssb_dev->dma_dev;
1171 int err = 0;
1168 int err;
1172
1169
1173#ifdef CONFIG_SSB_PCIHOST
1174 if (ssb_dev->bus->bustype == SSB_BUSTYPE_PCI) {
1175 err = pci_set_dma_mask(ssb_dev->bus->host_pci, mask);
1170 switch (dev->bus->bustype) {
1171 case SSB_BUSTYPE_PCI:
1172 err = pci_set_dma_mask(dev->bus->host_pci, mask);
1176 if (err)
1177 return err;
1173 if (err)
1174 return err;
1178 err = pci_set_consistent_dma_mask(ssb_dev->bus->host_pci, mask);
1175 err = pci_set_consistent_dma_mask(dev->bus->host_pci, mask);
1179 return err;
1176 return err;
1177 case SSB_BUSTYPE_SSB:
1178 return dma_set_mask(dev->dev, mask);
1179 default:
1180 __ssb_dma_not_implemented(dev);
1180 }
1181 }
1181#endif
1182 dma_dev->coherent_dma_mask = mask;
1183 dma_dev->dma_mask = &dma_dev->coherent_dma_mask;
1184
1185 return err;
1182 return -ENOSYS;
1186}
1187EXPORT_SYMBOL(ssb_dma_set_mask);
1188
1183}
1184EXPORT_SYMBOL(ssb_dma_set_mask);
1185
1186void * ssb_dma_alloc_consistent(struct ssb_device *dev, size_t size,
1187 dma_addr_t *dma_handle, gfp_t gfp_flags)
1188{
1189 switch (dev->bus->bustype) {
1190 case SSB_BUSTYPE_PCI:
1191 if (gfp_flags & GFP_DMA) {
1192 /* Workaround: The PCI API does not support passing
1193 * a GFP flag. */
1194 return dma_alloc_coherent(&dev->bus->host_pci->dev,
1195 size, dma_handle, gfp_flags);
1196 }
1197 return pci_alloc_consistent(dev->bus->host_pci, size, dma_handle);
1198 case SSB_BUSTYPE_SSB:
1199 return dma_alloc_coherent(dev->dev, size, dma_handle, gfp_flags);
1200 default:
1201 __ssb_dma_not_implemented(dev);
1202 }
1203 return NULL;
1204}
1205EXPORT_SYMBOL(ssb_dma_alloc_consistent);
1206
1207void ssb_dma_free_consistent(struct ssb_device *dev, size_t size,
1208 void *vaddr, dma_addr_t dma_handle,
1209 gfp_t gfp_flags)
1210{
1211 switch (dev->bus->bustype) {
1212 case SSB_BUSTYPE_PCI:
1213 if (gfp_flags & GFP_DMA) {
1214 /* Workaround: The PCI API does not support passing
1215 * a GFP flag. */
1216 dma_free_coherent(&dev->bus->host_pci->dev,
1217 size, vaddr, dma_handle);
1218 return;
1219 }
1220 pci_free_consistent(dev->bus->host_pci, size,
1221 vaddr, dma_handle);
1222 return;
1223 case SSB_BUSTYPE_SSB:
1224 dma_free_coherent(dev->dev, size, vaddr, dma_handle);
1225 return;
1226 default:
1227 __ssb_dma_not_implemented(dev);
1228 }
1229}
1230EXPORT_SYMBOL(ssb_dma_free_consistent);
1231
1189int ssb_bus_may_powerdown(struct ssb_bus *bus)
1190{
1191 struct ssb_chipcommon *cc;
1192 int err = 0;
1193
1194 /* On buses where more than one core may be working
1195 * at a time, we must not powerdown stuff if there are
1196 * still cores that may want to run. */

--- 145 unchanged lines hidden ---
1232int ssb_bus_may_powerdown(struct ssb_bus *bus)
1233{
1234 struct ssb_chipcommon *cc;
1235 int err = 0;
1236
1237 /* On buses where more than one core may be working
1238 * at a time, we must not powerdown stuff if there are
1239 * still cores that may want to run. */

--- 145 unchanged lines hidden ---