e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Use is subject to license terms.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Copyright (c) 2008 by Ben Taylor <bentaylor.solx86@gmail.com>
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Copyright (c) 2007 by Lukas Turek <turek@ksvi.mff.cuni.cz>
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Copyright (c) 2007 by Jiri Svoboda <jirik.svoboda@seznam.cz>
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Copyright (c) 2007 by Martin Krulis <martin.krulis@matfyz.cz>
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Copyright (c) 2006 by Damien Bergamini <damien.bergamini@free.fr>
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Copyright (c) 2006 by Florian Stoehr <ich@florian-stoehr.de>
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Permission to use, copy, modify, and distribute this software for any
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * purpose with or without fee is hereby granted, provided that the above
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * copyright notice and this permission notice appear in all copies.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * ZD1211 wLAN driver
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Device hardware control
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Control the ZD1211 chip and the RF chip.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China#include <sys/byteorder.h>
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China#include <sys/strsun.h>
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China#include "zyd.h"
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China#include "zyd_reg.h"
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res zyd_hw_configure(struct zyd_softc *sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res zyd_al2230_rf_init(struct zyd_softc *);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res zyd_al2230_rf_init_b(struct zyd_softc *);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res zyd_al2230_switch_radio(struct zyd_softc *, boolean_t);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res zyd_al2230_set_channel(struct zyd_softc *, uint8_t);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res zyd_rfmd_rf_init(struct zyd_softc *);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res zyd_rfmd_switch_radio(struct zyd_softc *, boolean_t);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res zyd_rfmd_set_channel(struct zyd_softc *, uint8_t);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/* io write sequences to initialize RF-independent PHY registers */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic const struct zyd_iowrite16 zyd_def_phy[] = ZYD_DEF_PHY;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic const struct zyd_iowrite16 zyd_def_phyB[] = ZYD_DEF_PHYB;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic const char *zyd_rf_name(uint8_t type)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China static const char *const zyd_rfs[] = {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China "unknown", "unknown", "UW2451", "UCHIP", "AL2230",
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China "AL7230B", "THETA", "AL2210", "MAXIM_NEW", "GCT",
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China "PV2000", "RALINK", "INTERSIL", "RFMD", "MAXIM_NEW2",
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China "PHILIPS"
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China };
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (zyd_rfs[(type > 15) ? 0 : type]);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Read a 32-bit I/O register.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * sc soft state
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * reg register number
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * *val place to store the value
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_read32(struct zyd_softc *sc, uint16_t reg, uint32_t *val)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res result;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint16_t tmp[4];
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint16_t regs[2];
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China regs[0] = LE_16(ZYD_REG32_HI(reg));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China regs[1] = LE_16(ZYD_REG32_LO(reg));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China result = zyd_usb_ioread_req(&sc->usb, regs, sizeof (regs),
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp, sizeof (tmp));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (result != USB_SUCCESS)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (tmp[0] != regs[0] || tmp[2] != regs[1]) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("ioread response doesn't match request\n");
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("requested regs %04x, %04x; got %04x, %04x\n",
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China LE_16(regs[0]), LE_16(regs[1]),
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China LE_16(tmp[0]), LE_16(tmp[2]));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *val = ((uint32_t)LE_16(tmp[1]) << 16) | (uint32_t)LE_16(tmp[3]);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Write a 32-bit I/O register.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * sc soft state
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * reg register number
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * val value to write
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_write32(struct zyd_softc *sc, uint16_t reg, uint32_t val)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res result;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint16_t tmp[4];
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp[0] = LE_16(ZYD_REG32_HI(reg));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp[1] = LE_16(val >> 16);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp[2] = LE_16(ZYD_REG32_LO(reg));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp[3] = LE_16(val & 0xffff);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China result = zyd_usb_cmd_send(&sc->usb, ZYD_CMD_IOWR, tmp, sizeof (tmp));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (result);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Read a 16-bit I/O register.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * sc soft state
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * reg register number
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * *val place to store the value
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_read16(struct zyd_softc *sc, uint16_t reg, uint16_t *val)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res result;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint16_t tmp[2];
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint16_t regbuf;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China regbuf = LE_16(reg);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China result = zyd_usb_ioread_req(&sc->usb, &regbuf, sizeof (regbuf),
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp, sizeof (tmp));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (result != USB_SUCCESS)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (tmp[0] != regbuf) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("ioread response doesn't match request\n");
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("requested reg %04x; got %04x\n",
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China LE_16(regbuf), LE_16(tmp[0]));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (result != USB_SUCCESS)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *val = LE_16(tmp[1]);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Write a 16-bit I/O register.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * sc soft state
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * reg register number
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * val value to write
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_write16(struct zyd_softc *sc, uint16_t reg, uint16_t val)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res result;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint16_t tmp[2];
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp[0] = LE_16(ZYD_REG32_LO(reg));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp[1] = LE_16(val & 0xffff);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China result = zyd_usb_cmd_send(&sc->usb, ZYD_CMD_IOWR, tmp, sizeof (tmp));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (result);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Write an array of 16-bit registers.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China *
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * sc soft state
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * *reqa array of register-value pairs
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * n number of registers
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_write16a(struct zyd_softc *sc, const struct zyd_iowrite16 *reqa, int n)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res res;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China int i;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China for (i = 0; i < n; i++) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_write16(sc, reqa[i].reg, reqa[i].value);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Lock PHY registers.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic void
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_lock_phy(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint32_t tmp;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read32(sc, ZYD_MAC_MISC, &tmp);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp &= ~ZYD_UNLOCK_PHY_REGS;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_MISC, tmp);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Unlock PHY registers.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic void
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_unlock_phy(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint32_t tmp;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read32(sc, ZYD_MAC_MISC, &tmp);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp |= ZYD_UNLOCK_PHY_REGS;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_MISC, tmp);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Read MAC address from EEPROM.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_read_mac(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint32_t tmp;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (zyd_read32(sc, ZYD_EEPROM_MAC_ADDR_P1, &tmp) != ZYD_SUCCESS)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->macaddr[0] = tmp & 0xff;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->macaddr[1] = tmp >> 8;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->macaddr[2] = tmp >> 16;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->macaddr[3] = tmp >> 24;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (zyd_read32(sc, ZYD_EEPROM_MAC_ADDR_P2, &tmp) != ZYD_SUCCESS)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->macaddr[4] = tmp & 0xff;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->macaddr[5] = tmp >> 8;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Write bits to RF configuration register.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_rfwrite(struct zyd_softc *sc, uint32_t val, int bits)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint16_t cr203;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China struct zyd_rfwrite req;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint16_t tmp;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China int bit;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res res;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China int i;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (zyd_read16(sc, ZYD_CR203, &cr203) != ZYD_SUCCESS)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China cr203 &= ~(ZYD_RF_IF_LE | ZYD_RF_CLK | ZYD_RF_DATA);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China req.code = LE_16(ZYD_RFCFG_VALUE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China req.width = LE_16((uint16_t)bits);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China for (i = 0; i < bits; i++) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China bit = (val & (1 << (bits - i - 1))) != 0;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp = LE_16(cr203) | (bit ? LE_16(ZYD_RF_DATA) : 0);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China req.bit[i] = tmp;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_usb_cmd_send(&sc->usb, ZYD_CMD_RFCFG, &req,
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sizeof (uint16_t) * (2 + bits));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("failed configuring rf register\n");
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Control the LEDs.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic void
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_set_led(struct zyd_softc *sc, int which, boolean_t on)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint32_t tmp;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read32(sc, ZYD_MAC_TX_PE_CONTROL, &tmp);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp &= ~which;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (on == B_TRUE)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp |= which;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_TX_PE_CONTROL, tmp);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Set MAC address.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic void
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_set_macaddr(struct zyd_softc *sc, const uint8_t *addr)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint32_t tmp;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp = addr[3] << 24 | addr[2] << 16 | addr[1] << 8 | addr[0];
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_MACADRL, tmp);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China tmp = addr[5] << 8 | addr[4];
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_MACADRH, tmp);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Read data from EEPROM.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic void
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_read_eeprom(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint32_t tmp;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint16_t val;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China int i;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* read RF chip type */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read32(sc, ZYD_EEPROM_POD, &tmp);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->rf_rev = tmp & 0x0f;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->pa_rev = (tmp >> 16) & 0x0f;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->fix_cr47 = (tmp >> 8) & 0x01;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->fix_cr157 = (tmp >> 13) & 0x01;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "fix cr47: 0x%x\n", sc->fix_cr47));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "fix cr157: 0x%x\n", sc->fix_cr157));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "found RF chip %s, rev 0x%x\n",
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_rf_name(sc->rf_rev), sc->rf_rev));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* read regulatory domain (currently unused) */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read32(sc, ZYD_EEPROM_SUBID, &tmp);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->regdomain = tmp >> 16;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "regulatory domain: %x\n", sc->regdomain));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* read Tx power calibration tables */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China for (i = 0; i < 7; i++) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read16(sc, ZYD_EEPROM_PWR_CAL + i, &val);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->pwr_cal[i * 2] = val >> 8;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->pwr_cal[i * 2 + 1] = val & 0xff;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read16(sc, ZYD_EEPROM_PWR_INT + i, &val);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->pwr_int[i * 2] = val >> 8;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->pwr_int[i * 2 + 1] = val & 0xff;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read16(sc, ZYD_EEPROM_36M_CAL + i, &val);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->ofdm36_cal[i * 2] = val >> 8;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->ofdm36_cal[i * 2 + 1] = val & 0xff;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read16(sc, ZYD_EEPROM_48M_CAL + i, &val);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->ofdm48_cal[i * 2] = val >> 8;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->ofdm48_cal[i * 2 + 1] = val & 0xff;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read16(sc, ZYD_EEPROM_54M_CAL + i, &val);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->ofdm54_cal[i * 2] = val >> 8;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->ofdm54_cal[i * 2 + 1] = val & 0xff;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_hw_init(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China struct zyd_usb *uc = &sc->usb;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China int ures;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res res;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->mac_rev = zyd_usb_mac_rev(uc->cdata->dev_descr->idVendor,
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uc->cdata->dev_descr->idProduct);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (sc->mac_rev == ZYD_ZD1211) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_usb_loadfirmware(uc, zd1211_firmware,
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zd1211_firmware_size);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China } else {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_usb_loadfirmware(uc, zd1211b_firmware,
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zd1211b_firmware_size);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("failed to load firmware\n");
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China goto fail1;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* set configuration 1 - required for later communication */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ures = usb_set_cfg(uc->dip, 0, USB_FLAGS_SLEEP, NULL, NULL);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (ures != USB_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("failed to set configuration 1 (%d)\n", ures);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China goto fail1;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (zyd_usb_open_pipes(uc) != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("failed to open pipes\n");
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China goto fail1;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (zyd_usb_cmd_in_start_polling(uc) != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("failed to start command IN polling\n");
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China goto fail2;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (zyd_read_mac(sc) != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("failed to read MAC address\n");
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China goto fail3;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_read_eeprom(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China switch (sc->rf_rev) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China case ZYD_RF_AL2230:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China case ZYD_RF_RFMD:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China break;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China default:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("unsupported RF %s, chip type 0x%x\n",
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_rf_name(sc->rf_rev), sc->rf_rev);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China goto fail3;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (zyd_hw_configure(sc) != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("failed to configure hardware\n");
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China goto fail3;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* RF chip init */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_lock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China switch (sc->rf_rev) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China case ZYD_RF_AL2230:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (sc->mac_rev == ZYD_ZD1211) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_al2230_rf_init(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China } else {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_al2230_rf_init_b(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China break;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China case ZYD_RF_RFMD:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_rfmd_rf_init(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China break;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China default:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("unsupported Radio %s, code = 0x%x\n",
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_rf_name(sc->rf_rev), sc->rf_rev);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = ZYD_FAILURE;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China break;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("failed to configure RF chip\n");
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China goto fail3;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->macaddr[0], sc->macaddr[1], sc->macaddr[2],
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->macaddr[3], sc->macaddr[4], sc->macaddr[5]));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinafail3:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_usb_cmd_in_stop_polling(uc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinafail2:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_usb_close_pipes(uc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinafail1:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinavoid
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_hw_deinit(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China struct zyd_usb *uc = &sc->usb;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_usb_cmd_in_stop_polling(uc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_usb_close_pipes(uc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Finish ZD chip initialization.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_hw_configure(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res res;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint32_t tmp;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* specify that the plug and play is finished */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_AFTER_PNP, 1);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read16(sc, ZYD_FIRMWARE_BASE_ADDR, &sc->fwbase);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_FW, "firmware base address: 0x%04x\n", sc->fwbase));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* retrieve firmware revision number */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_read16(sc, sc->fwbase + ZYD_FW_FIRMWARE_REV, &sc->fw_rev);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_FW, "firmware revision: x0x%4x\n", sc->fw_rev));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR_GPI_EN, 0);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_CONT_WIN_LIMIT, 0x7f043f);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* disable interrupts */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR_INTERRUPT, 0);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* Init RF chip-independent PHY registers */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_lock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (sc->mac_rev == ZYD_ZD1211) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_write16a(sc, zyd_def_phy,
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_ARRAY_LENGTH(zyd_def_phy));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China } else {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_write16a(sc, zyd_def_phyB,
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_ARRAY_LENGTH(zyd_def_phyB));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (sc->fix_cr157) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (zyd_read32(sc, ZYD_EEPROM_PHY_REG, &tmp) == 0)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR157, tmp >> 8);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* HMAC initialization magic */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (sc->mac_rev == ZYD_ZD1211) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_RETRY, 0x00000002);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China } else {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MACB_MAX_RETRY, 0x02020202);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MACB_TXPWR_CTL4, 0x007f003f);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MACB_TXPWR_CTL3, 0x007f003f);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MACB_TXPWR_CTL2, 0x003f001f);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MACB_TXPWR_CTL1, 0x001f000f);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MACB_AIFS_CTL1, 0x00280028);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MACB_AIFS_CTL2, 0x008C003c);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MACB_TXOP, 0x01800824);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_ACK_EXT, 0x00000020);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR_ADDA_MBIAS_WT, 0x30000808);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_SNIFFER, 0x00000000);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_RXFILTER, 0x00000000);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_GHTBL, 0x00000000);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_GHTBH, 0x80000000);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_MISC, 0x000000a4);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR_ADDA_PWR_DWN, 0x0000007f);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_BCNCFG, 0x00f00401);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_PHY_DELAY2, 0x00000000);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_ACK_EXT, 0x00000080);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR_ADDA_PWR_DWN, 0x00000000);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_SIFS_ACK_TIME, 0x00000100);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_DIFS_EIFS_SIFS, 0x0547c032);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR_RX_PE_DELAY, 0x00000070);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR_PS_CTRL, 0x10000000);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_RTSCTSRATE, 0x02030203);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_RX_THRESHOLD, 0x000c0640);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_BACKOFF_PROTECT, 0x00000114);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Set active channel number.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinavoid
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_hw_set_channel(struct zyd_softc *sc, uint8_t chan)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint32_t tmp;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_lock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "setting channel %d\n", chan));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China switch (sc->rf_rev) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China case ZYD_RF_AL2230:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_al2230_set_channel(sc, chan);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China break;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China case ZYD_RF_RFMD:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_rfmd_set_channel(sc, chan);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China break;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* update Tx power */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "updating tx power table\n"));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR31, sc->pwr_int[chan - 1]);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (sc->mac_rev == ZYD_ZD1211B) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR67, sc->ofdm36_cal[chan - 1]);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR66, sc->ofdm48_cal[chan - 1]);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR65, sc->ofdm54_cal[chan - 1]);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR68, sc->pwr_cal[chan - 1]);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR69, 0x28);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR69, 0x2a);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (sc->fix_cr47) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* set CCK baseband gain from EEPROM */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (zyd_read32(sc, ZYD_EEPROM_PHY_REG, &tmp) == 0)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR47, tmp & 0xff);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR_CONFIG_PHILIPS, 0);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Activate the device.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_hw_start(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China struct zyd_usb *uc = &sc->usb;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->ic;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res res;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (zyd_usb_data_in_enable(&sc->usb) != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_WARN("error starting rx transfer\n");
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China goto fail1;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "setting MAC address\n"));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_set_macaddr(sc, sc->macaddr);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* we'll do software WEP decryption for now */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "setting encryption mode\n"));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_write32(sc, ZYD_MAC_ENCRYPTION_TYPE, ZYD_ENC_SNIFFER);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China goto fail2;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* promiscuous mode */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_SNIFFER, 0);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* try to catch all packets */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_RXFILTER, ZYD_FILTER_BSS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* switch radio transmitter ON */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China switch (sc->rf_rev) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China case ZYD_RF_AL2230:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_al2230_switch_radio(sc, B_TRUE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China break;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China case ZYD_RF_RFMD:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_rfmd_switch_radio(sc, B_TRUE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China break;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* set basic rates */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "setting basic rates\n"));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (ic->ic_curmode == IEEE80211_MODE_11B)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_BAS_RATE, 0x0003);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China else if (ic->ic_curmode == IEEE80211_MODE_11A)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_BAS_RATE, 0x1500);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China else /* assumes 802.11b/g */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_BAS_RATE, 0x000f);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* set mandatory rates */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "setting mandatory rates\n"));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (ic->ic_curmode == IEEE80211_MODE_11B)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_MAN_RATE, 0x000f);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China else if (ic->ic_curmode == IEEE80211_MODE_11A)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_MAN_RATE, 0x1500);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China else /* assumes 802.11b/g */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_MAN_RATE, 0x150f);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* enable interrupts */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR_INTERRUPT, ZYD_HWINT_MASK);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_set_led(sc, ZYD_LED2, B_TRUE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinafail2:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_usb_data_in_disable(uc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinafail1:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Deactivate the device.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinavoid
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_hw_stop(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China struct zyd_usb *uc = &sc->usb;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (uc->connected) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* switch radio transmitter OFF */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China switch (sc->rf_rev) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China case ZYD_RF_AL2230:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_al2230_switch_radio(sc, B_FALSE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China break;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China case ZYD_RF_RFMD:
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_rfmd_switch_radio(sc, B_FALSE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China break;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* disable reception */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_MAC_RXFILTER, 0);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* disable interrupts */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write32(sc, ZYD_CR_INTERRUPT, 0);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_set_led(sc, ZYD_LED2, B_FALSE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China } else {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "stop: device absent\n"));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_usb_data_in_disable(uc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China sc->tx_queued = 0;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * ZD1211 AL2230 Radio control
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Init the AL2230 RF chip.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_al2230_rf_init(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China const struct zyd_iowrite16 phyini[] = ZYD_AL2230_PHY;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China const uint32_t rfini[] = ZYD_AL2230_RF;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res res;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China int i;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_lock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* init RF-dependent PHY registers */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_write16a(sc, phyini, ZYD_ARRAY_LENGTH(phyini));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* init AL2230 radio */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China for (i = 0; i < ZYD_ARRAY_LENGTH(rfini); i++) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_rfwrite(sc, rfini[i], ZYD_AL2230_RF_BITS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "RF chip AL2230 initialized\n"));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Init the AL2230B RF chip (11b).
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_al2230_rf_init_b(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China const struct zyd_iowrite16 phyini[] = ZYD_AL2230_PHY_B;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China const uint32_t rfini[] = ZYD_AL2230_RF_B;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res res;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China int i;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_lock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* init RF-dependent PHY registers */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_write16a(sc, phyini, ZYD_ARRAY_LENGTH(phyini));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* init AL2230 radio */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China for (i = 0; i < ZYD_ARRAY_LENGTH(rfini); i++) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_rfwrite(sc, rfini[i], ZYD_AL2230_RF_BITS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "RF chip AL2230 (11b) initialized\n"));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Tune RF chip to a specified channel.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_al2230_set_channel(struct zyd_softc *sc, uint8_t chan)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China static const struct {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint32_t r1, r2, r3;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China } rfprog[] = ZYD_AL2230_CHANTABLE;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_rfwrite(sc, rfprog[chan - 1].r1, ZYD_AL2230_RF_BITS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_rfwrite(sc, rfprog[chan - 1].r2, ZYD_AL2230_RF_BITS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_rfwrite(sc, rfprog[chan - 1].r3, ZYD_AL2230_RF_BITS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR138, 0x28);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR203, 0x06);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * Turn the radio transciever on/off.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_al2230_switch_radio(struct zyd_softc *sc, boolean_t on)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China int on251 = (sc->mac_rev == ZYD_ZD1211) ? 0x3f : 0x7f;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_lock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR11, (on == B_TRUE) ? 0x00 : 0x04);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR251, (on == B_TRUE) ? on251 : 0x2f);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China/*
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China * RFMD RF methods.
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_rfmd_rf_init(struct zyd_softc *sc)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China static const struct zyd_iowrite16 phyini[] = ZYD_RFMD_PHY;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China static const uint32_t rfini[] = ZYD_RFMD_RF;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_res res;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China int i;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* init RF-dependent PHY registers */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_lock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_write16a(sc, phyini, ZYD_ARRAY_LENGTH(phyini));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China /* init RFMD radio */
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China for (i = 0; i < ZYD_ARRAY_LENGTH(rfini); i++) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China res = zyd_rfwrite(sc, rfini[i], ZYD_RFMD_RF_BITS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China if (res != ZYD_SUCCESS) {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_FAILURE);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China }
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China zyd_unlock_phy(sc);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China ZYD_DEBUG((ZYD_DBG_HW, "RF chip RFMD initialized\n"));
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_rfmd_switch_radio(struct zyd_softc *sc, boolean_t on)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR10, on ? 0x89 : 0x15);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_write16(sc, ZYD_CR11, on ? 0x00 : 0x81);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinastatic zyd_res
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing Chinazyd_rfmd_set_channel(struct zyd_softc *sc, uint8_t chan)
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China{
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China static const struct {
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China uint32_t r1, r2;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China } rfprog[] = ZYD_RFMD_CHANTABLE;
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_rfwrite(sc, rfprog[chan - 1].r1, ZYD_RFMD_RF_BITS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China (void) zyd_rfwrite(sc, rfprog[chan - 1].r2, ZYD_RFMD_RF_BITS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China return (ZYD_SUCCESS);
e8da18d8c173d57b68019b8d92471843c44ec746pengcheng chen - Sun Microsystems - Beijing China}