Lines Matching refs:sc

41 static zyd_res zyd_hw_configure(struct zyd_softc *sc);
72 zyd_read32(struct zyd_softc *sc, uint16_t reg, uint32_t *val) in zyd_read32() argument
81 result = zyd_usb_ioread_req(&sc->usb, regs, sizeof (regs), in zyd_read32()
108 zyd_write32(struct zyd_softc *sc, uint16_t reg, uint32_t val) in zyd_write32() argument
118 result = zyd_usb_cmd_send(&sc->usb, ZYD_CMD_IOWR, tmp, sizeof (tmp)); in zyd_write32()
131 zyd_read16(struct zyd_softc *sc, uint16_t reg, uint16_t *val) in zyd_read16() argument
139 result = zyd_usb_ioread_req(&sc->usb, &regbuf, sizeof (regbuf), in zyd_read16()
168 zyd_write16(struct zyd_softc *sc, uint16_t reg, uint16_t val) in zyd_write16() argument
176 result = zyd_usb_cmd_send(&sc->usb, ZYD_CMD_IOWR, tmp, sizeof (tmp)); in zyd_write16()
189 zyd_write16a(struct zyd_softc *sc, const struct zyd_iowrite16 *reqa, int n) in zyd_write16a() argument
195 res = zyd_write16(sc, reqa[i].reg, reqa[i].value); in zyd_write16a()
207 zyd_lock_phy(struct zyd_softc *sc) in zyd_lock_phy() argument
211 (void) zyd_read32(sc, ZYD_MAC_MISC, &tmp); in zyd_lock_phy()
213 (void) zyd_write32(sc, ZYD_MAC_MISC, tmp); in zyd_lock_phy()
220 zyd_unlock_phy(struct zyd_softc *sc) in zyd_unlock_phy() argument
224 (void) zyd_read32(sc, ZYD_MAC_MISC, &tmp); in zyd_unlock_phy()
226 (void) zyd_write32(sc, ZYD_MAC_MISC, tmp); in zyd_unlock_phy()
233 zyd_read_mac(struct zyd_softc *sc) in zyd_read_mac() argument
237 if (zyd_read32(sc, ZYD_EEPROM_MAC_ADDR_P1, &tmp) != ZYD_SUCCESS) in zyd_read_mac()
240 sc->macaddr[0] = tmp & 0xff; in zyd_read_mac()
241 sc->macaddr[1] = tmp >> 8; in zyd_read_mac()
242 sc->macaddr[2] = tmp >> 16; in zyd_read_mac()
243 sc->macaddr[3] = tmp >> 24; in zyd_read_mac()
245 if (zyd_read32(sc, ZYD_EEPROM_MAC_ADDR_P2, &tmp) != ZYD_SUCCESS) in zyd_read_mac()
248 sc->macaddr[4] = tmp & 0xff; in zyd_read_mac()
249 sc->macaddr[5] = tmp >> 8; in zyd_read_mac()
258 zyd_rfwrite(struct zyd_softc *sc, uint32_t val, int bits) in zyd_rfwrite() argument
267 if (zyd_read16(sc, ZYD_CR203, &cr203) != ZYD_SUCCESS) in zyd_rfwrite()
280 res = zyd_usb_cmd_send(&sc->usb, ZYD_CMD_RFCFG, &req, in zyd_rfwrite()
295 zyd_set_led(struct zyd_softc *sc, int which, boolean_t on) in zyd_set_led() argument
299 (void) zyd_read32(sc, ZYD_MAC_TX_PE_CONTROL, &tmp); in zyd_set_led()
303 (void) zyd_write32(sc, ZYD_MAC_TX_PE_CONTROL, tmp); in zyd_set_led()
310 zyd_set_macaddr(struct zyd_softc *sc, const uint8_t *addr) in zyd_set_macaddr() argument
315 (void) zyd_write32(sc, ZYD_MAC_MACADRL, tmp); in zyd_set_macaddr()
318 (void) zyd_write32(sc, ZYD_MAC_MACADRH, tmp); in zyd_set_macaddr()
325 zyd_read_eeprom(struct zyd_softc *sc) in zyd_read_eeprom() argument
332 (void) zyd_read32(sc, ZYD_EEPROM_POD, &tmp); in zyd_read_eeprom()
333 sc->rf_rev = tmp & 0x0f; in zyd_read_eeprom()
334 sc->pa_rev = (tmp >> 16) & 0x0f; in zyd_read_eeprom()
335 sc->fix_cr47 = (tmp >> 8) & 0x01; in zyd_read_eeprom()
336 sc->fix_cr157 = (tmp >> 13) & 0x01; in zyd_read_eeprom()
338 ZYD_DEBUG((ZYD_DBG_HW, "fix cr47: 0x%x\n", sc->fix_cr47)); in zyd_read_eeprom()
339 ZYD_DEBUG((ZYD_DBG_HW, "fix cr157: 0x%x\n", sc->fix_cr157)); in zyd_read_eeprom()
341 zyd_rf_name(sc->rf_rev), sc->rf_rev)); in zyd_read_eeprom()
344 (void) zyd_read32(sc, ZYD_EEPROM_SUBID, &tmp); in zyd_read_eeprom()
345 sc->regdomain = tmp >> 16; in zyd_read_eeprom()
347 ZYD_DEBUG((ZYD_DBG_HW, "regulatory domain: %x\n", sc->regdomain)); in zyd_read_eeprom()
351 (void) zyd_read16(sc, ZYD_EEPROM_PWR_CAL + i, &val); in zyd_read_eeprom()
352 sc->pwr_cal[i * 2] = val >> 8; in zyd_read_eeprom()
353 sc->pwr_cal[i * 2 + 1] = val & 0xff; in zyd_read_eeprom()
355 (void) zyd_read16(sc, ZYD_EEPROM_PWR_INT + i, &val); in zyd_read_eeprom()
356 sc->pwr_int[i * 2] = val >> 8; in zyd_read_eeprom()
357 sc->pwr_int[i * 2 + 1] = val & 0xff; in zyd_read_eeprom()
359 (void) zyd_read16(sc, ZYD_EEPROM_36M_CAL + i, &val); in zyd_read_eeprom()
360 sc->ofdm36_cal[i * 2] = val >> 8; in zyd_read_eeprom()
361 sc->ofdm36_cal[i * 2 + 1] = val & 0xff; in zyd_read_eeprom()
363 (void) zyd_read16(sc, ZYD_EEPROM_48M_CAL + i, &val); in zyd_read_eeprom()
364 sc->ofdm48_cal[i * 2] = val >> 8; in zyd_read_eeprom()
365 sc->ofdm48_cal[i * 2 + 1] = val & 0xff; in zyd_read_eeprom()
367 (void) zyd_read16(sc, ZYD_EEPROM_54M_CAL + i, &val); in zyd_read_eeprom()
368 sc->ofdm54_cal[i * 2] = val >> 8; in zyd_read_eeprom()
369 sc->ofdm54_cal[i * 2 + 1] = val & 0xff; in zyd_read_eeprom()
374 zyd_hw_init(struct zyd_softc *sc) in zyd_hw_init() argument
376 struct zyd_usb *uc = &sc->usb; in zyd_hw_init()
380 sc->mac_rev = zyd_usb_mac_rev(uc->cdata->dev_descr->idVendor, in zyd_hw_init()
382 if (sc->mac_rev == ZYD_ZD1211) { in zyd_hw_init()
411 if (zyd_read_mac(sc) != ZYD_SUCCESS) { in zyd_hw_init()
416 zyd_read_eeprom(sc); in zyd_hw_init()
417 switch (sc->rf_rev) { in zyd_hw_init()
423 zyd_rf_name(sc->rf_rev), sc->rf_rev); in zyd_hw_init()
427 if (zyd_hw_configure(sc) != ZYD_SUCCESS) { in zyd_hw_init()
433 zyd_lock_phy(sc); in zyd_hw_init()
434 switch (sc->rf_rev) { in zyd_hw_init()
436 if (sc->mac_rev == ZYD_ZD1211) { in zyd_hw_init()
437 res = zyd_al2230_rf_init(sc); in zyd_hw_init()
439 res = zyd_al2230_rf_init_b(sc); in zyd_hw_init()
443 res = zyd_rfmd_rf_init(sc); in zyd_hw_init()
447 zyd_rf_name(sc->rf_rev), sc->rf_rev); in zyd_hw_init()
451 zyd_unlock_phy(sc); in zyd_hw_init()
459 sc->macaddr[0], sc->macaddr[1], sc->macaddr[2], in zyd_hw_init()
460 sc->macaddr[3], sc->macaddr[4], sc->macaddr[5])); in zyd_hw_init()
473 zyd_hw_deinit(struct zyd_softc *sc) in zyd_hw_deinit() argument
475 struct zyd_usb *uc = &sc->usb; in zyd_hw_deinit()
485 zyd_hw_configure(struct zyd_softc *sc) in zyd_hw_configure() argument
491 (void) zyd_write32(sc, ZYD_MAC_AFTER_PNP, 1); in zyd_hw_configure()
492 (void) zyd_read16(sc, ZYD_FIRMWARE_BASE_ADDR, &sc->fwbase); in zyd_hw_configure()
493 ZYD_DEBUG((ZYD_DBG_FW, "firmware base address: 0x%04x\n", sc->fwbase)); in zyd_hw_configure()
496 (void) zyd_read16(sc, sc->fwbase + ZYD_FW_FIRMWARE_REV, &sc->fw_rev); in zyd_hw_configure()
497 ZYD_DEBUG((ZYD_DBG_FW, "firmware revision: x0x%4x\n", sc->fw_rev)); in zyd_hw_configure()
499 (void) zyd_write32(sc, ZYD_CR_GPI_EN, 0); in zyd_hw_configure()
500 (void) zyd_write32(sc, ZYD_MAC_CONT_WIN_LIMIT, 0x7f043f); in zyd_hw_configure()
503 (void) zyd_write32(sc, ZYD_CR_INTERRUPT, 0); in zyd_hw_configure()
506 zyd_lock_phy(sc); in zyd_hw_configure()
507 if (sc->mac_rev == ZYD_ZD1211) { in zyd_hw_configure()
508 res = zyd_write16a(sc, zyd_def_phy, in zyd_hw_configure()
511 res = zyd_write16a(sc, zyd_def_phyB, in zyd_hw_configure()
514 if (sc->fix_cr157) { in zyd_hw_configure()
515 if (zyd_read32(sc, ZYD_EEPROM_PHY_REG, &tmp) == 0) in zyd_hw_configure()
516 (void) zyd_write32(sc, ZYD_CR157, tmp >> 8); in zyd_hw_configure()
518 zyd_unlock_phy(sc); in zyd_hw_configure()
524 if (sc->mac_rev == ZYD_ZD1211) { in zyd_hw_configure()
525 (void) zyd_write32(sc, ZYD_MAC_RETRY, 0x00000002); in zyd_hw_configure()
527 (void) zyd_write32(sc, ZYD_MACB_MAX_RETRY, 0x02020202); in zyd_hw_configure()
528 (void) zyd_write32(sc, ZYD_MACB_TXPWR_CTL4, 0x007f003f); in zyd_hw_configure()
529 (void) zyd_write32(sc, ZYD_MACB_TXPWR_CTL3, 0x007f003f); in zyd_hw_configure()
530 (void) zyd_write32(sc, ZYD_MACB_TXPWR_CTL2, 0x003f001f); in zyd_hw_configure()
531 (void) zyd_write32(sc, ZYD_MACB_TXPWR_CTL1, 0x001f000f); in zyd_hw_configure()
532 (void) zyd_write32(sc, ZYD_MACB_AIFS_CTL1, 0x00280028); in zyd_hw_configure()
533 (void) zyd_write32(sc, ZYD_MACB_AIFS_CTL2, 0x008C003c); in zyd_hw_configure()
534 (void) zyd_write32(sc, ZYD_MACB_TXOP, 0x01800824); in zyd_hw_configure()
536 (void) zyd_write32(sc, ZYD_MAC_ACK_EXT, 0x00000020); in zyd_hw_configure()
537 (void) zyd_write32(sc, ZYD_CR_ADDA_MBIAS_WT, 0x30000808); in zyd_hw_configure()
538 (void) zyd_write32(sc, ZYD_MAC_SNIFFER, 0x00000000); in zyd_hw_configure()
539 (void) zyd_write32(sc, ZYD_MAC_RXFILTER, 0x00000000); in zyd_hw_configure()
540 (void) zyd_write32(sc, ZYD_MAC_GHTBL, 0x00000000); in zyd_hw_configure()
541 (void) zyd_write32(sc, ZYD_MAC_GHTBH, 0x80000000); in zyd_hw_configure()
542 (void) zyd_write32(sc, ZYD_MAC_MISC, 0x000000a4); in zyd_hw_configure()
543 (void) zyd_write32(sc, ZYD_CR_ADDA_PWR_DWN, 0x0000007f); in zyd_hw_configure()
544 (void) zyd_write32(sc, ZYD_MAC_BCNCFG, 0x00f00401); in zyd_hw_configure()
545 (void) zyd_write32(sc, ZYD_MAC_PHY_DELAY2, 0x00000000); in zyd_hw_configure()
546 (void) zyd_write32(sc, ZYD_MAC_ACK_EXT, 0x00000080); in zyd_hw_configure()
547 (void) zyd_write32(sc, ZYD_CR_ADDA_PWR_DWN, 0x00000000); in zyd_hw_configure()
548 (void) zyd_write32(sc, ZYD_MAC_SIFS_ACK_TIME, 0x00000100); in zyd_hw_configure()
549 (void) zyd_write32(sc, ZYD_MAC_DIFS_EIFS_SIFS, 0x0547c032); in zyd_hw_configure()
550 (void) zyd_write32(sc, ZYD_CR_RX_PE_DELAY, 0x00000070); in zyd_hw_configure()
551 (void) zyd_write32(sc, ZYD_CR_PS_CTRL, 0x10000000); in zyd_hw_configure()
552 (void) zyd_write32(sc, ZYD_MAC_RTSCTSRATE, 0x02030203); in zyd_hw_configure()
553 (void) zyd_write32(sc, ZYD_MAC_RX_THRESHOLD, 0x000c0640); in zyd_hw_configure()
554 (void) zyd_write32(sc, ZYD_MAC_BACKOFF_PROTECT, 0x00000114); in zyd_hw_configure()
563 zyd_hw_set_channel(struct zyd_softc *sc, uint8_t chan) in zyd_hw_set_channel() argument
567 zyd_lock_phy(sc); in zyd_hw_set_channel()
571 switch (sc->rf_rev) { in zyd_hw_set_channel()
573 (void) zyd_al2230_set_channel(sc, chan); in zyd_hw_set_channel()
576 (void) zyd_rfmd_set_channel(sc, chan); in zyd_hw_set_channel()
583 (void) zyd_write16(sc, ZYD_CR31, sc->pwr_int[chan - 1]); in zyd_hw_set_channel()
584 if (sc->mac_rev == ZYD_ZD1211B) { in zyd_hw_set_channel()
585 (void) zyd_write16(sc, ZYD_CR67, sc->ofdm36_cal[chan - 1]); in zyd_hw_set_channel()
586 (void) zyd_write16(sc, ZYD_CR66, sc->ofdm48_cal[chan - 1]); in zyd_hw_set_channel()
587 (void) zyd_write16(sc, ZYD_CR65, sc->ofdm54_cal[chan - 1]); in zyd_hw_set_channel()
588 (void) zyd_write16(sc, ZYD_CR68, sc->pwr_cal[chan - 1]); in zyd_hw_set_channel()
589 (void) zyd_write16(sc, ZYD_CR69, 0x28); in zyd_hw_set_channel()
590 (void) zyd_write16(sc, ZYD_CR69, 0x2a); in zyd_hw_set_channel()
593 if (sc->fix_cr47) { in zyd_hw_set_channel()
595 if (zyd_read32(sc, ZYD_EEPROM_PHY_REG, &tmp) == 0) in zyd_hw_set_channel()
596 (void) zyd_write16(sc, ZYD_CR47, tmp & 0xff); in zyd_hw_set_channel()
599 (void) zyd_write32(sc, ZYD_CR_CONFIG_PHILIPS, 0); in zyd_hw_set_channel()
601 zyd_unlock_phy(sc); in zyd_hw_set_channel()
608 zyd_hw_start(struct zyd_softc *sc) in zyd_hw_start() argument
610 struct zyd_usb *uc = &sc->usb; in zyd_hw_start()
611 struct ieee80211com *ic = &sc->ic; in zyd_hw_start()
614 if (zyd_usb_data_in_enable(&sc->usb) != ZYD_SUCCESS) { in zyd_hw_start()
620 zyd_set_macaddr(sc, sc->macaddr); in zyd_hw_start()
624 res = zyd_write32(sc, ZYD_MAC_ENCRYPTION_TYPE, ZYD_ENC_SNIFFER); in zyd_hw_start()
629 (void) zyd_write32(sc, ZYD_MAC_SNIFFER, 0); in zyd_hw_start()
632 (void) zyd_write32(sc, ZYD_MAC_RXFILTER, ZYD_FILTER_BSS); in zyd_hw_start()
635 switch (sc->rf_rev) { in zyd_hw_start()
637 (void) zyd_al2230_switch_radio(sc, B_TRUE); in zyd_hw_start()
640 (void) zyd_rfmd_switch_radio(sc, B_TRUE); in zyd_hw_start()
647 (void) zyd_write32(sc, ZYD_MAC_BAS_RATE, 0x0003); in zyd_hw_start()
649 (void) zyd_write32(sc, ZYD_MAC_BAS_RATE, 0x1500); in zyd_hw_start()
651 (void) zyd_write32(sc, ZYD_MAC_BAS_RATE, 0x000f); in zyd_hw_start()
656 (void) zyd_write32(sc, ZYD_MAC_MAN_RATE, 0x000f); in zyd_hw_start()
658 (void) zyd_write32(sc, ZYD_MAC_MAN_RATE, 0x1500); in zyd_hw_start()
660 (void) zyd_write32(sc, ZYD_MAC_MAN_RATE, 0x150f); in zyd_hw_start()
663 (void) zyd_write32(sc, ZYD_CR_INTERRUPT, ZYD_HWINT_MASK); in zyd_hw_start()
665 zyd_set_led(sc, ZYD_LED2, B_TRUE); in zyd_hw_start()
679 zyd_hw_stop(struct zyd_softc *sc) in zyd_hw_stop() argument
681 struct zyd_usb *uc = &sc->usb; in zyd_hw_stop()
685 switch (sc->rf_rev) { in zyd_hw_stop()
687 (void) zyd_al2230_switch_radio(sc, B_FALSE); in zyd_hw_stop()
690 (void) zyd_rfmd_switch_radio(sc, B_FALSE); in zyd_hw_stop()
695 (void) zyd_write32(sc, ZYD_MAC_RXFILTER, 0); in zyd_hw_stop()
698 (void) zyd_write32(sc, ZYD_CR_INTERRUPT, 0); in zyd_hw_stop()
700 zyd_set_led(sc, ZYD_LED2, B_FALSE); in zyd_hw_stop()
707 sc->tx_queued = 0; in zyd_hw_stop()
715 zyd_al2230_rf_init(struct zyd_softc *sc) in zyd_al2230_rf_init() argument
723 zyd_lock_phy(sc); in zyd_al2230_rf_init()
726 res = zyd_write16a(sc, phyini, ZYD_ARRAY_LENGTH(phyini)); in zyd_al2230_rf_init()
728 zyd_unlock_phy(sc); in zyd_al2230_rf_init()
734 res = zyd_rfwrite(sc, rfini[i], ZYD_AL2230_RF_BITS); in zyd_al2230_rf_init()
736 zyd_unlock_phy(sc); in zyd_al2230_rf_init()
741 zyd_unlock_phy(sc); in zyd_al2230_rf_init()
752 zyd_al2230_rf_init_b(struct zyd_softc *sc) in zyd_al2230_rf_init_b() argument
759 zyd_lock_phy(sc); in zyd_al2230_rf_init_b()
761 res = zyd_write16a(sc, phyini, ZYD_ARRAY_LENGTH(phyini)); in zyd_al2230_rf_init_b()
763 zyd_unlock_phy(sc); in zyd_al2230_rf_init_b()
769 res = zyd_rfwrite(sc, rfini[i], ZYD_AL2230_RF_BITS); in zyd_al2230_rf_init_b()
771 zyd_unlock_phy(sc); in zyd_al2230_rf_init_b()
775 zyd_unlock_phy(sc); in zyd_al2230_rf_init_b()
785 zyd_al2230_set_channel(struct zyd_softc *sc, uint8_t chan) in zyd_al2230_set_channel() argument
791 (void) zyd_rfwrite(sc, rfprog[chan - 1].r1, ZYD_AL2230_RF_BITS); in zyd_al2230_set_channel()
792 (void) zyd_rfwrite(sc, rfprog[chan - 1].r2, ZYD_AL2230_RF_BITS); in zyd_al2230_set_channel()
793 (void) zyd_rfwrite(sc, rfprog[chan - 1].r3, ZYD_AL2230_RF_BITS); in zyd_al2230_set_channel()
795 (void) zyd_write16(sc, ZYD_CR138, 0x28); in zyd_al2230_set_channel()
796 (void) zyd_write16(sc, ZYD_CR203, 0x06); in zyd_al2230_set_channel()
805 zyd_al2230_switch_radio(struct zyd_softc *sc, boolean_t on) in zyd_al2230_switch_radio() argument
807 int on251 = (sc->mac_rev == ZYD_ZD1211) ? 0x3f : 0x7f; in zyd_al2230_switch_radio()
809 zyd_lock_phy(sc); in zyd_al2230_switch_radio()
811 (void) zyd_write16(sc, ZYD_CR11, (on == B_TRUE) ? 0x00 : 0x04); in zyd_al2230_switch_radio()
812 (void) zyd_write16(sc, ZYD_CR251, (on == B_TRUE) ? on251 : 0x2f); in zyd_al2230_switch_radio()
814 zyd_unlock_phy(sc); in zyd_al2230_switch_radio()
824 zyd_rfmd_rf_init(struct zyd_softc *sc) in zyd_rfmd_rf_init() argument
832 zyd_lock_phy(sc); in zyd_rfmd_rf_init()
833 res = zyd_write16a(sc, phyini, ZYD_ARRAY_LENGTH(phyini)); in zyd_rfmd_rf_init()
835 zyd_unlock_phy(sc); in zyd_rfmd_rf_init()
840 res = zyd_rfwrite(sc, rfini[i], ZYD_RFMD_RF_BITS); in zyd_rfmd_rf_init()
842 zyd_unlock_phy(sc); in zyd_rfmd_rf_init()
846 zyd_unlock_phy(sc); in zyd_rfmd_rf_init()
853 zyd_rfmd_switch_radio(struct zyd_softc *sc, boolean_t on) in zyd_rfmd_switch_radio() argument
856 (void) zyd_write16(sc, ZYD_CR10, on ? 0x89 : 0x15); in zyd_rfmd_switch_radio()
857 (void) zyd_write16(sc, ZYD_CR11, on ? 0x00 : 0x81); in zyd_rfmd_switch_radio()
863 zyd_rfmd_set_channel(struct zyd_softc *sc, uint8_t chan) in zyd_rfmd_set_channel() argument
869 (void) zyd_rfwrite(sc, rfprog[chan - 1].r1, ZYD_RFMD_RF_BITS); in zyd_rfmd_set_channel()
870 (void) zyd_rfwrite(sc, rfprog[chan - 1].r2, ZYD_RFMD_RF_BITS); in zyd_rfmd_set_channel()