Lines Matching defs:siba

58 #include <dev/siba/siba_ids.h>
59 #include <dev/siba/sibareg.h>
60 #include <dev/siba/sibavar.h>
72 #define DPRINTF(siba, m, fmt, ...) do { \
73 if (siba->siba_debug & (m)) \
77 #define DPRINTF(siba, m, fmt, ...) do { (void) siba; } while (0)
176 siba_core_attach(struct siba_softc *siba)
181 KASSERT(siba->siba_type == SIBA_TYPE_PCI,
182 ("unsupported BUS type (%#x)", siba->siba_type));
184 siba->siba_ops = &siba_pci_ops;
186 siba_pci_gpio(siba, SIBA_GPIO_CRYSTAL | SIBA_GPIO_PLL, 1);
187 siba_scan(siba);
191 siba_powerup_sub(siba, 0);
194 scc = &siba->siba_cc;
202 error = siba_pci_sprom(siba, &siba->siba_sprom);
204 siba_powerdown_sub(siba);
208 siba_pcicore_init(&siba->siba_pci);
209 siba_powerdown_sub(siba);
211 return (bus_generic_attach(siba->siba_dev));
215 siba_core_detach(struct siba_softc *siba)
218 device_delete_children(siba->siba_dev);
223 siba_pci_gpio(struct siba_softc *siba, uint32_t what, int on)
228 if (siba->siba_type != SIBA_TYPE_PCI)
231 out = pci_read_config(siba->siba_dev, SIBA_GPIO_OUT, 4);
237 pci_write_config(siba->siba_dev, SIBA_GPIO_OUT, out, 4);
238 pci_write_config(siba->siba_dev, SIBA_GPIO_OUT_EN,
239 pci_read_config(siba->siba_dev,
244 in = pci_read_config(siba->siba_dev, SIBA_GPIO_IN, 4);
250 pci_write_config(siba->siba_dev, SIBA_GPIO_OUT, out, 4);
251 pci_write_config(siba->siba_dev,
252 SIBA_GPIO_OUT_EN, pci_read_config(siba->siba_dev,
258 pci_write_config(siba->siba_dev, SIBA_GPIO_OUT, out, 4);
263 status = pci_read_config(siba->siba_dev, PCIR_STATUS, 2);
265 pci_write_config(siba->siba_dev, PCIR_STATUS, status, 2);
269 siba_scan(struct siba_softc *siba)
277 KASSERT(siba->siba_type == SIBA_TYPE_PCI,
278 ("unsupported BUS type (%#x)", siba->siba_type));
280 siba->siba_ndevs = 0;
281 error = siba_switchcore(siba, 0); /* need the first core */
285 idhi = siba_scan_read_4(siba, 0, SIBA_IDHIGH);
287 tmp = siba_scan_read_4(siba, 0, SIBA_CC_CHIPID);
288 siba->siba_chipid = SIBA_CC_ID(tmp);
289 siba->siba_chiprev = SIBA_CC_REV(tmp);
290 siba->siba_chippkg = SIBA_CC_PKG(tmp);
292 siba->siba_ndevs = SIBA_CC_NCORES(tmp);
293 siba->siba_cc.scc_caps = siba_scan_read_4(siba, 0,
296 if (siba->siba_type == SIBA_TYPE_PCI) {
297 siba->siba_chipid = siba_dev2chipid(siba);
298 siba->siba_chiprev = pci_read_config(siba->siba_dev,
300 siba->siba_chippkg = 0;
302 siba->siba_chipid = 0x4710;
303 siba->siba_chiprev = 0;
304 siba->siba_chippkg = 0;
307 if (siba->siba_ndevs == 0)
308 siba->siba_ndevs = siba_getncores(siba->siba_dev,
309 siba->siba_chipid);
310 if (siba->siba_ndevs > SIBA_MAX_CORES) {
311 device_printf(siba->siba_dev,
312 "too many siba cores (max %d %d)\n",
313 SIBA_MAX_CORES, siba->siba_ndevs);
318 for (i = 0; i < siba->siba_ndevs; i++) {
319 error = siba_switchcore(siba, i);
322 sd = &(siba->siba_devs[dev_i]);
323 idhi = siba_scan_read_4(siba, i, SIBA_IDHIGH);
324 sd->sd_bus = siba;
328 sd->sd_ops = siba->siba_ops;
331 DPRINTF(siba, SIBA_DEBUG_SCAN,
340 device_printf(siba->siba_dev,
344 siba->siba_cc.scc_dev = sd;
349 device_printf(siba->siba_dev,
357 error = pci_find_cap(siba->siba_dev, PCIY_EXPRESS,
362 device_printf(siba->siba_dev,
372 siba->siba_pci.spc_dev = sd;
378 device_printf(siba->siba_dev,
385 child = device_add_child(siba->siba_dev, NULL, -1);
387 device_printf(siba->siba_dev, "child attach failed\n");
393 siba->siba_ndevs = dev_i;
397 siba_switchcore(struct siba_softc *siba, uint8_t idx)
400 switch (siba->siba_type) {
402 return (siba_pci_switchcore_sub(siba, idx));
406 siba->siba_type));
412 siba_pci_switchcore_sub(struct siba_softc *siba, uint8_t idx)
421 pci_write_config(siba->siba_dev, SIBA_BAR0, dir, 4);
422 if (pci_read_config(siba->siba_dev, SIBA_BAR0, 4) == dir)
431 siba_pci_switchcore(struct siba_softc *siba, struct siba_dev_softc *sd)
435 DPRINTF(siba, SIBA_DEBUG_SWITCHCORE, "Switching to %s core, index %d\n",
438 error = siba_pci_switchcore_sub(siba, sd->sd_coreidx);
440 siba->siba_curdev = sd;
446 siba_scan_read_4(struct siba_softc *siba, uint8_t coreidx,
451 KASSERT(siba->siba_type == SIBA_TYPE_PCI,
452 ("unsupported BUS type (%#x)", siba->siba_type));
454 return (SIBA_READ_4(siba, offset));
458 siba_dev2chipid(struct siba_softc *siba)
462 switch (siba->siba_pci_did) {
504 device_printf(siba->siba_dev, "unknown PCI did (%d)\n",
505 siba->siba_pci_did);
618 struct siba_softc *siba = sd->sd_bus;
620 if (siba->siba_curdev != sd && siba_pci_switchcore(siba, sd) != 0)
623 return (SIBA_READ_2(siba, offset));
629 struct siba_softc *siba = sd->sd_bus;
631 if (siba->siba_curdev != sd && siba_pci_switchcore(siba, sd) != 0)
634 return (SIBA_READ_4(siba, offset));
640 struct siba_softc *siba = sd->sd_bus;
642 if (siba->siba_curdev != sd && siba_pci_switchcore(siba, sd) != 0)
645 SIBA_WRITE_2(siba, offset, value);
651 struct siba_softc *siba = sd->sd_bus;
653 if (siba->siba_curdev != sd && siba_pci_switchcore(siba, sd) != 0)
656 SIBA_WRITE_4(siba, offset, value);
663 struct siba_softc *siba = sd->sd_bus;
665 if (siba->siba_curdev != sd && siba_pci_switchcore(siba, sd) != 0) {
670 SIBA_READ_MULTI_1(siba, offset, buffer, count);
677 struct siba_softc *siba = sd->sd_bus;
679 if (siba->siba_curdev != sd && siba_pci_switchcore(siba, sd) != 0) {
685 SIBA_READ_MULTI_2(siba, offset, buffer, count >> 1);
692 struct siba_softc *siba = sd->sd_bus;
694 if (siba->siba_curdev != sd && siba_pci_switchcore(siba, sd) != 0) {
700 SIBA_READ_MULTI_4(siba, offset, buffer, count >> 2);
707 struct siba_softc *siba = sd->sd_bus;
709 if (siba->siba_curdev != sd && siba_pci_switchcore(siba, sd) != 0)
712 SIBA_WRITE_MULTI_1(siba, offset, buffer, count);
719 struct siba_softc *siba = sd->sd_bus;
721 if (siba->siba_curdev != sd && siba_pci_switchcore(siba, sd) != 0)
725 SIBA_WRITE_MULTI_2(siba, offset, buffer, count >> 1);
732 struct siba_softc *siba = sd->sd_bus;
734 if (siba->siba_curdev != sd && siba_pci_switchcore(siba, sd) != 0)
738 SIBA_WRITE_MULTI_4(siba, offset, buffer, count >> 2);
745 struct siba_softc *siba = sd->sd_bus;
747 siba_powerup_sub(siba, dynamic);
751 siba_powerup_sub(struct siba_softc *siba, int dynamic)
754 siba_pci_gpio(siba, SIBA_GPIO_CRYSTAL | SIBA_GPIO_PLL, 1);
755 siba_cc_clock(&siba->siba_cc,
763 struct siba_softc *siba;
768 siba = sd->sd_bus;
786 siba_pci_gpio(siba, SIBA_GPIO_CRYSTAL, 0);
795 siba_pci_gpio(siba, SIBA_GPIO_CRYSTAL, 1);
912 struct siba_softc *siba = sd->sd_bus;
922 DPRINTF(siba, SIBA_DEBUG_PMU, "PMU(r%u) found (caps %#x)\n",
926 if (siba->siba_chiprev < 2 && siba->siba_chipid == 0x4325)
935 switch (siba->siba_chipid) {
975 device_printf(siba->siba_dev,
977 siba->siba_chipid);
1022 struct siba_softc *siba = scc->scc_dev->sd_bus;
1025 if (siba->siba_chipid == 0x4321) {
1026 if (siba->siba_chiprev == 0)
1028 else if (siba->siba_chiprev == 1)
1051 struct siba_softc *siba = scc->scc_dev->sd_bus;
1054 if (siba->siba_type != SIBA_TYPE_PCI ||
1108 struct siba_softc *siba = sd->sd_bus;
1114 if (siba->siba_chipid == 0x4312) {
1127 DPRINTF(siba, SIBA_DEBUG_PLL, "change PLL value to %u.%03u MHz\n",
1131 switch (siba->siba_chipid) {
1152 device_printf(siba->siba_dev, "failed to turn PLL off!\n");
1190 struct siba_softc *siba = sd->sd_bus;
1195 if ((siba->siba_chipid == 0x5354) && !xtalfreq)
1210 DPRINTF(siba, SIBA_DEBUG_PLL, "change PLL value to %u.%03u MHz\n",
1213 KASSERT(siba->siba_chipid == 0x4328 || siba->siba_chipid == 0x5354,
1216 switch (siba->siba_chipid) {
1238 device_printf(siba->siba_dev, "failed to turn PLL off!\n");
1277 struct siba_softc *siba = sd->sd_bus;
1280 if (siba->siba_type == SIBA_TYPE_PCI) {
1281 if (pci_read_config(siba->siba_dev, SIBA_GPIO_OUT, 4) &
1286 if (siba->siba_type == SIBA_TYPE_SSB ||
1287 siba->siba_type == SIBA_TYPE_PCMCIA)
1353 siba_pci_sprom(struct siba_softc *siba, struct siba_sprom *sprom)
1362 siba_sprom_read(siba, buf, SIBA_SPROMSIZE_R123);
1363 error = sprom_check_crc(buf, siba->siba_spromsize);
1370 siba_sprom_read(siba, buf, SIBA_SPROMSIZE_R4);
1371 error = sprom_check_crc(buf, siba->siba_spromsize);
1373 device_printf(siba->siba_dev, "warn: bad SPROM CRC\n");
1378 sprom->rev = buf[siba->siba_spromsize - 1] & 0x00FF;
1379 DPRINTF(siba, SIBA_DEBUG_SPROM, "SPROM rev %d\n",
1383 if ((siba->siba_chipid & 0xff00) == 0x4400) {
1386 } else if (siba->siba_chipid == 0x4321) {
1404 device_printf(siba->siba_dev,
1420 siba_sprom_read(struct siba_softc *siba, uint16_t *sprom, uint16_t len)
1425 sprom[i] = SIBA_READ_2(siba, SIBA_SPROM_BASE + (i * 2));
1427 siba->siba_spromsize = len;
1717 struct siba_softc *siba = sd->sd_bus;
1719 return (siba_powerdown_sub(siba));
1723 siba_powerdown_sub(struct siba_softc *siba)
1727 if (siba->siba_type == SIBA_TYPE_SSB)
1730 scc = &siba->siba_cc;
1734 siba_pci_gpio(siba, SIBA_GPIO_CRYSTAL | SIBA_GPIO_PLL, 0);
1847 struct siba_softc *siba = sd->sd_bus;
1864 device_printf(siba->siba_dev, "timeout (bit %#x reg %#x)\n",
1874 device_printf(siba->siba_dev, "timeout (bit %#x reg %#x)\n",
1891 struct siba_softc *siba = psd->sd_bus;
1907 sd = (siba->siba_cc.scc_dev != NULL) ?
1908 siba->siba_cc.scc_dev : siba->siba_pci.spc_dev;
1942 struct siba_softc *siba = sd->sd_bus;
1943 struct siba_pci *spc = &siba->siba_pci;
1947 if (siba->siba_type != SIBA_TYPE_PCI || !psd)
1950 KASSERT(siba == psd->sd_bus, ("different pointers"));
1953 if (siba->siba_dev != NULL &&
1956 tmp = pci_read_config(siba->siba_dev, SIBA_IRQMASK, 4);
1958 pci_write_config(siba->siba_dev, SIBA_IRQMASK, tmp, 4);
2026 struct siba_softc *siba = sd->sd_bus;
2028 KASSERT(siba->siba_type == SIBA_TYPE_PCI,
2029 ("unsupported bustype %d\n", siba->siba_type));
2038 struct siba_softc *siba = sd->sd_bus;
2040 SIBA_BARRIER(siba, flags);
2059 siba_core_suspend(struct siba_softc *siba)
2062 siba_cc_suspend(&siba->siba_cc);
2063 siba_pci_gpio(siba, SIBA_GPIO_CRYSTAL | SIBA_GPIO_PLL, 0);
2068 siba_core_resume(struct siba_softc *siba)
2071 siba->siba_pci.spc_inited = 0;
2072 siba->siba_curdev = NULL;
2074 siba_powerup_sub(siba, 0);
2076 siba_cc_resume(&siba->siba_cc);
2077 siba_powerdown_sub(siba);
2099 struct siba_softc *siba = sd->sd_bus;
2100 struct siba_cc *scc = &siba->siba_cc;
2109 if (siba->siba_chipid == 0x4312) {
2117 if (siba->siba_chipid == 0x4328 || siba->siba_chipid == 0x5354) {
2145 struct siba_softc *siba = sd->sd_bus;
2146 struct siba_cc *scc = &siba->siba_cc;
2149 ldo = ((siba->siba_chipid == 0x4312) ? SIBA_CC_PMU_4312_PA_REF :
2150 ((siba->siba_chipid == 0x4328) ? SIBA_CC_PMU_4328_PA_REF :
2151 ((siba->siba_chipid == 0x5354) ? SIBA_CC_PMU_5354_PA_REF : -1)));
2166 struct siba_softc *siba = sd->sd_bus;
2170 *result = siba->siba_sprom.rev;
2173 *((uint8_t **) result) = siba->siba_sprom.mac_80211bg;
2176 *((uint8_t **) result) = siba->siba_sprom.mac_eth;
2179 *((uint8_t **) result) = siba->siba_sprom.mac_80211a;
2182 *result = siba->siba_sprom.mii_eth0;
2185 *result = siba->siba_sprom.mii_eth1;
2188 *result = siba->siba_sprom.mdio_eth0;
2191 *result = siba->siba_sprom.mdio_eth1;
2194 *result = siba->siba_sprom.brev;
2197 *result = siba->siba_sprom.ccode;
2200 *result = siba->siba_sprom.ant_a;
2203 *result = siba->siba_sprom.ant_bg;
2206 *result = siba->siba_sprom.pa0b0;
2209 *result = siba->siba_sprom.pa0b1;
2212 *result = siba->siba_sprom.pa0b2;
2215 *result = siba->siba_sprom.pa1b0;
2218 *result = siba->siba_sprom.pa1b1;
2221 *result = siba->siba_sprom.pa1b2;
2224 *result = siba->siba_sprom.pa1lob0;
2227 *result = siba->siba_sprom.pa1lob1;
2230 *result = siba->siba_sprom.pa1lob2;
2233 *result = siba->siba_sprom.pa1hib0;
2236 *result = siba->siba_sprom.pa1hib1;
2239 *result = siba->siba_sprom.pa1hib2;
2242 *result = siba->siba_sprom.gpio0;
2245 *result = siba->siba_sprom.gpio1;
2248 *result = siba->siba_sprom.gpio2;
2251 *result = siba->siba_sprom.gpio3;
2254 *result = siba->siba_sprom.maxpwr_al;
2257 *result = siba->siba_sprom.maxpwr_a;
2260 *result = siba->siba_sprom.maxpwr_ah;
2263 *result = siba->siba_sprom.maxpwr_bg;
2266 *result = siba->siba_sprom.rxpo2g;
2269 *result = siba->siba_sprom.rxpo5g;
2272 *result = siba->siba_sprom.tssi_a;
2275 *result = siba->siba_sprom.tssi_bg;
2278 *result = siba->siba_sprom.tri2g;
2281 *result = siba->siba_sprom.tri5gl;
2284 *result = siba->siba_sprom.tri5g;
2287 *result = siba->siba_sprom.tri5gh;
2290 *result = siba->siba_sprom.rssisav2g;
2293 *result = siba->siba_sprom.rssismc2g;
2296 *result = siba->siba_sprom.rssismf2g;
2299 *result = siba->siba_sprom.bxa2g;
2302 *result = siba->siba_sprom.rssisav5g;
2305 *result = siba->siba_sprom.rssismc5g;
2308 *result = siba->siba_sprom.rssismf5g;
2311 *result = siba->siba_sprom.bxa5g;
2314 *result = siba->siba_sprom.cck2gpo;
2317 *result = siba->siba_sprom.ofdm2gpo;
2320 *result = siba->siba_sprom.ofdm5glpo;
2323 *result = siba->siba_sprom.ofdm5gpo;
2326 *result = siba->siba_sprom.ofdm5ghpo;
2329 *result = siba->siba_sprom.bf_lo;
2332 *result = siba->siba_sprom.bf_hi;
2335 *result = siba->siba_sprom.bf2_lo;
2338 *result = siba->siba_sprom.bf2_hi;
2350 struct siba_softc *siba = sd->sd_bus;
2354 siba->siba_sprom.rev = value;
2357 siba->siba_sprom.mii_eth0 = value;
2360 siba->siba_sprom.mii_eth1 = value;
2363 siba->siba_sprom.mdio_eth0 = value;
2366 siba->siba_sprom.mdio_eth1 = value;
2369 siba->siba_sprom.brev = value;
2372 siba->siba_sprom.ccode = value;
2375 siba->siba_sprom.ant_a = value;
2378 siba->siba_sprom.ant_bg = value;
2381 siba->siba_sprom.pa0b0 = value;
2384 siba->siba_sprom.pa0b1 = value;
2387 siba->siba_sprom.pa0b2 = value;
2390 siba->siba_sprom.pa1b0 = value;
2393 siba->siba_sprom.pa1b1 = value;
2396 siba->siba_sprom.pa1b2 = value;
2399 siba->siba_sprom.pa1lob0 = value;
2402 siba->siba_sprom.pa1lob1 = value;
2405 siba->siba_sprom.pa1lob2 = value;
2408 siba->siba_sprom.pa1hib0 = value;
2411 siba->siba_sprom.pa1hib1 = value;
2414 siba->siba_sprom.pa1hib2 = value;
2417 siba->siba_sprom.gpio0 = value;
2420 siba->siba_sprom.gpio1 = value;
2423 siba->siba_sprom.gpio2 = value;
2426 siba->siba_sprom.gpio3 = value;
2429 siba->siba_sprom.maxpwr_al = value;
2432 siba->siba_sprom.maxpwr_a = value;
2435 siba->siba_sprom.maxpwr_ah = value;
2438 siba->siba_sprom.maxpwr_bg = value;
2441 siba->siba_sprom.rxpo2g = value;
2444 siba->siba_sprom.rxpo5g = value;
2447 siba->siba_sprom.tssi_a = value;
2450 siba->siba_sprom.tssi_bg = value;
2453 siba->siba_sprom.tri2g = value;
2456 siba->siba_sprom.tri5gl = value;
2459 siba->siba_sprom.tri5g = value;
2462 siba->siba_sprom.tri5gh = value;
2465 siba->siba_sprom.rssisav2g = value;
2468 siba->siba_sprom.rssismc2g = value;
2471 siba->siba_sprom.rssismf2g = value;
2474 siba->siba_sprom.bxa2g = value;
2477 siba->siba_sprom.rssisav5g = value;
2480 siba->siba_sprom.rssismc5g = value;
2483 siba->siba_sprom.rssismf5g = value;
2486 siba->siba_sprom.bxa5g = value;
2489 siba->siba_sprom.cck2gpo = value;
2492 siba->siba_sprom.ofdm2gpo = value;
2495 siba->siba_sprom.ofdm5glpo = value;
2498 siba->siba_sprom.ofdm5gpo = value;
2501 siba->siba_sprom.ofdm5ghpo = value;
2504 siba->siba_sprom.bf_lo = value;
2507 siba->siba_sprom.bf_hi = value;
2510 siba->siba_sprom.bf2_lo = value;
2513 siba->siba_sprom.bf2_hi = value;
2527 struct siba_softc *siba = sd->sd_bus;
2530 pcidev = siba->siba_pci.spc_dev;
2531 gpiodev = siba->siba_cc.scc_dev ? siba->siba_cc.scc_dev : pcidev;
2541 struct siba_softc *siba = sd->sd_bus;
2544 pcidev = siba->siba_pci.spc_dev;
2545 gpiodev = siba->siba_cc.scc_dev ? siba->siba_cc.scc_dev : pcidev;
2555 struct siba_softc *siba = sd->sd_bus;
2558 if (siba->siba_pci.spc_dev == NULL)
2560 if (siba->siba_pci.spc_dev->sd_id.sd_device != SIBA_DEVID_PCI ||
2561 siba->siba_pci.spc_dev->sd_id.sd_rev > 5)
2566 switch (siba->siba_type) {