Lines Matching refs:bus

160 static u32 scan_read32(struct ssb_bus *bus, u8 current_coreidx,
165 switch (bus->bustype) {
173 ssb_pcmcia_switch_segment(bus, 1);
176 ssb_pcmcia_switch_segment(bus, 0);
177 lo = readw(bus->mmio + offset);
178 hi = readw(bus->mmio + offset + 2);
182 return ssb_sdio_scan_read32(bus, offset);
184 return readl(bus->mmio + offset);
187 static int scan_switchcore(struct ssb_bus *bus, u8 coreidx)
189 switch (bus->bustype) {
193 return ssb_pci_switch_coreidx(bus, coreidx);
195 return ssb_pcmcia_switch_coreidx(bus, coreidx);
197 return ssb_sdio_scan_switch_coreidx(bus, coreidx);
202 void ssb_iounmap(struct ssb_bus *bus)
204 switch (bus->bustype) {
207 iounmap(bus->mmio);
211 pci_iounmap(bus->host_pci, bus->mmio);
219 bus->mmio = NULL;
220 bus->mapped_device = NULL;
223 static void __iomem *ssb_ioremap(struct ssb_bus *bus,
228 switch (bus->bustype) {
237 mmio = pci_iomap(bus->host_pci, 0, ~0UL);
251 static int we_support_multiple_80211_cores(struct ssb_bus *bus)
259 if (bus->bustype == SSB_BUSTYPE_PCI) {
260 if (bus->host_pci->vendor == PCI_VENDOR_ID_BROADCOM &&
261 ((bus->host_pci->device == 0x4313) ||
262 (bus->host_pci->device == 0x431A) ||
263 (bus->host_pci->device == 0x4321) ||
264 (bus->host_pci->device == 0x4324)))
271 int ssb_bus_scan(struct ssb_bus *bus,
281 mmio = ssb_ioremap(bus, baseaddr);
284 bus->mmio = mmio;
286 err = scan_switchcore(bus, 0); /* Switch to first core */
290 idhi = scan_read32(bus, 0, SSB_IDHIGH);
295 bus->nr_devices = 0;
297 tmp = scan_read32(bus, 0, SSB_CHIPCO_CHIPID);
299 bus->chip_id = (tmp & SSB_CHIPCO_IDMASK);
300 bus->chip_rev = (tmp & SSB_CHIPCO_REVMASK) >>
302 bus->chip_package = (tmp & SSB_CHIPCO_PACKMASK) >>
305 bus->nr_devices = (tmp & SSB_CHIPCO_NRCORESMASK) >>
308 tmp = scan_read32(bus, 0, SSB_CHIPCO_CAP);
309 bus->chipco.capabilities = tmp;
311 if (bus->bustype == SSB_BUSTYPE_PCI) {
312 bus->chip_id = pcidev_to_chipid(bus->host_pci);
313 bus->chip_rev = bus->host_pci->revision;
314 bus->chip_package = 0;
316 bus->chip_id = 0x4710;
317 bus->chip_rev = 0;
318 bus->chip_package = 0;
322 bus->chip_id, bus->chip_rev, bus->chip_package);
323 if (!bus->nr_devices)
324 bus->nr_devices = chipid_to_nrcores(bus->chip_id);
325 if (bus->nr_devices > ARRAY_SIZE(bus->devices)) {
327 SSB_MAX_NR_CORES, bus->nr_devices);
331 if (bus->bustype == SSB_BUSTYPE_SSB) {
337 mmio = ioremap(baseaddr, SSB_CORE_SIZE * bus->nr_devices);
340 bus->mmio = mmio;
344 for (i = 0, dev_i = 0; i < bus->nr_devices; i++) {
345 err = scan_switchcore(bus, i);
348 dev = &(bus->devices[dev_i]);
350 idhi = scan_read32(bus, i, SSB_IDHIGH);
356 dev->bus = bus;
357 dev->ops = bus->ops;
367 if (!we_support_multiple_80211_cores(bus)) {
375 if (bus->extif.dev) {
379 bus->extif.dev = dev;
383 if (bus->chipco.dev) {
387 bus->chipco.dev = dev;
392 if (bus->mipscore.dev) {
396 bus->mipscore.dev = dev;
402 if (bus->bustype == SSB_BUSTYPE_PCI) {
407 if (pci_is_pcie(bus->host_pci))
410 if (!pci_is_pcie(bus->host_pci))
414 if (bus->pcicore.dev) {
418 bus->pcicore.dev = dev;
422 if (bus->bustype == SSB_BUSTYPE_PCI) {
423 if (bus->host_pci->vendor == PCI_VENDOR_ID_BROADCOM &&
424 (bus->host_pci->device & 0xFF00) == 0x4300) {
438 bus->nr_devices = dev_i;
444 ssb_iounmap(bus);