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 --- |