Lines Matching defs:sc

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