56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Use is subject to license terms.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Copyright (c) 2006 Sam Leffler, Errno Consulting
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Copyright (c) 2008-2009 Weongyo Jeong <weongyo@freebsd.org>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * All rights reserved.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Redistribution and use in source and binary forms, with or without
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * modification, are permitted provided that the following conditions
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * are met:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * 1. Redistributions of source code must retain the above copyright
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * notice, this list of conditions and the following disclaimer,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * without modification.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * 2. Redistributions in binary form must reproduce at minimum a disclaimer
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * redistribution must be conditioned upon including a substantially
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * similar Disclaimer requirement for further binary redistribution.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * NO WARRANTY
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * THE POSSIBILITY OF SUCH DAMAGES.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * This driver is distantly derived from a driver of the same name
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * by Damien Bergamini. The original copyright is included below:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Copyright (c) 2006
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Damien Bergamini <damien.bergamini@free.fr>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Permission to use, copy, modify, and distribute this software for any
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * purpose with or without fee is hereby granted, provided that the above
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * copyright notice and this permission notice appear in all copies.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/types.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/cmn_err.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/strsubr.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/strsun.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/modctl.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/devops.h>
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer#include <sys/byteorder.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/mac_provider.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/mac_wifi.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/net80211.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define USBDRV_MAJOR_VER 2
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define USBDRV_MINOR_VER 0
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/usb/usba.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include <sys/usb/usba/usba_types.h>
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include "uath_reg.h"
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#include "uath_var.h"
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void *uath_soft_state_p = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Bit flags in the ral_dbg_flags
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DBG_MSG 0x000001
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DBG_ERR 0x000002
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DBG_USB 0x000004
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DBG_TX 0x000008
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DBG_RX 0x000010
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DBG_FW 0x000020
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DBG_TX_CMD 0x000040
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DBG_RX_CMD 0x000080
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DBG_ALL 0x000fff
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauint32_t uath_dbg_flags = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#ifdef DEBUG
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DEBUG \
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_debug
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#else
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DEBUG
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#endif
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Various supported device vendors/products.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * UB51: AR5005UG 802.11b/g, UB52: AR5005UX 802.11b/g
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_FLAG_PRE_FIRMWARE (1 << 0)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_FLAG_ABG (1 << 1)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_FLAG_ERR (1 << 2)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DEV(v, p, f) \
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China { { USB_VENDOR_##v, USB_PRODUCT_##v##_##p }, (f) }, \
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China { { USB_VENDOR_##v, USB_PRODUCT_##v##_##p##_NF }, \
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (f) | UATH_FLAG_PRE_FIRMWARE }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DEV_UG(v, p) UATH_DEV(v, p, 0)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define UATH_DEV_UX(v, p) UATH_DEV(v, p, UATH_FLAG_ABG)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastruct uath_devno {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint16_t vendor_id;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint16_t product_id;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China};
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic const struct uath_type {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_devno dev;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint8_t flags;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China} uath_devs[] = {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(ACCTON, SMCWUSBTG2),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(ATHEROS, AR5523),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(ATHEROS2, AR5523_1),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(ATHEROS2, AR5523_2),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UX(ATHEROS2, AR5523_3),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(CONCEPTRONIC, AR5523_1),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UX(CONCEPTRONIC, AR5523_2),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UX(DLINK, DWLAG122),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UX(DLINK, DWLAG132),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(DLINK, DWLG132),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(GIGASET, AR5523),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(GIGASET, SMCWUSBTG),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(GLOBALSUN, AR5523_1),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UX(GLOBALSUN, AR5523_2),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(IODATA, USBWNG54US),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(MELCO, WLIU2KAMG54),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UX(NETGEAR, WG111U),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(NETGEAR3, WG111T),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(NETGEAR3, WPN111),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(PHILIPS, SNU6500),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UX(UMEDIA, AR5523_2),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(UMEDIA, TEW444UBEU),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(WISTRONNEWEB, AR5523_1),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UX(WISTRONNEWEB, AR5523_2),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEV_UG(ZCOM, AR5523)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China};
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic char uath_fwmod[] = "uathfw";
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic char uath_binmod[] = "uathbin";
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Supported rates for 802.11b/g modes (in 500Kbps unit).
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic const struct ieee80211_rateset uath_rateset_11b =
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China { 4, { 2, 4, 11, 22 } };
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic const struct ieee80211_rateset uath_rateset_11g =
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China { 12, { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 } };
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * device operations
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_attach(dev_info_t *, ddi_attach_cmd_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_detach(dev_info_t *, ddi_detach_cmd_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Module Loading Data & Entry Points
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing ChinaDDI_DEFINE_STREAM_OPS(uath_dev_ops, nulldev, nulldev, uath_attach,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_detach, nodev, NULL, D_MP, NULL, ddi_quiesce_not_needed);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic struct modldrv uath_modldrv = {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &mod_driverops, /* Type of module. This one is a driver */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "Atheros AR5523 USB Driver v1.1", /* short description */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &uath_dev_ops /* driver specific ops */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China};
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic struct modlinkage modlinkage = {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China MODREV_1,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void *)&uath_modldrv,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China NULL
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China};
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_m_stat(void *, uint_t, uint64_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_m_start(void *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_m_stop(void *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_m_promisc(void *, boolean_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_m_multicst(void *, boolean_t, const uint8_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_m_unicst(void *, const uint8_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic mblk_t *uath_m_tx(void *, mblk_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_m_ioctl(void *, queue_t *, mblk_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_m_setprop(void *, const char *, mac_prop_id_t,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint_t, const void *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_m_getprop(void *, const char *, mac_prop_id_t,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer uint_t, void *);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerstatic void uath_m_propinfo(void *, const char *, mac_prop_id_t,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer mac_prop_info_handle_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic mac_callbacks_t uath_m_callbacks = {
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer MC_IOCTL | MC_SETPROP | MC_GETPROP | MC_PROPINFO,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_m_stat,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_m_start,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_m_stop,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_m_promisc,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_m_multicst,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_m_unicst,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_m_tx,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer NULL,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_m_ioctl,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China NULL,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China NULL,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China NULL,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_m_setprop,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer uath_m_getprop,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer uath_m_propinfo
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China};
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic usb_alt_if_data_t *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_lookup_alt_if(usb_client_dev_data_t *,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint_t, uint_t, uint_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic usb_ep_data_t *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_lookup_ep_data(dev_info_t *,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_client_dev_data_t *, uint_t, uint_t, uint8_t, uint8_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic const char *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_codename(int code);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic uint_t uath_lookup(uint16_t, uint16_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_list_all_eps(usb_alt_if_data_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_open_pipes(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_close_pipes(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_fw_send(struct uath_softc *,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_handle_t, const void *, size_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_fw_ack(struct uath_softc *, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_loadsym(ddi_modhandle_t, char *, char **, size_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_loadfirmware(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_alloc_cmd_list(struct uath_softc *,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd *, int, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_init_cmd_list(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_free_cmd_list(struct uath_cmd *, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_host_available(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_get_capability(struct uath_softc *, uint32_t, uint32_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_get_devcap(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_get_devstatus(struct uath_softc *, uint8_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_get_status(struct uath_softc *, uint32_t, void *, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_cmd_lock_init(struct uath_cmd_lock *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_cmd_lock_destroy(struct uath_cmd_lock *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_cmd_lock_wait(struct uath_cmd_lock *, clock_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_cmd_lock_signal(struct uath_cmd_lock *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_cmd_read(struct uath_softc *, uint32_t, const void *,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int, void *, int, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_cmd_write(struct uath_softc *, uint32_t, const void *,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_cmdsend(struct uath_softc *, uint32_t,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China const void *, int, void *, int, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_rx_cmd_xfer(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_tx_cmd_xfer(struct uath_softc *,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_handle_t, const void *, uint_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_cmd_txeof(usb_pipe_handle_t, struct usb_bulk_req *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_cmd_rxeof(usb_pipe_handle_t, usb_bulk_req_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_cmdeof(struct uath_softc *, struct uath_cmd *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_init_data_queue(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_rx_data_xfer(struct uath_softc *sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_tx_data_xfer(struct uath_softc *, mblk_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_data_txeof(usb_pipe_handle_t, usb_bulk_req_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_data_rxeof(usb_pipe_handle_t, usb_bulk_req_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_create_connection(struct uath_softc *, uint32_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_set_rates(struct uath_softc *,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China const struct ieee80211_rateset *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_write_associd(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_set_ledsteady(struct uath_softc *, int, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_set_ledblink(struct uath_softc *, int, int, int, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_update_rxstat(struct uath_softc *, uint32_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_send(ieee80211com_t *, mblk_t *, uint8_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_reconnect(dev_info_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_disconnect(dev_info_t *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_newstate(struct ieee80211com *, enum ieee80211_state, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_dataflush(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_cmdflush(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_flush(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_set_ledstate(struct uath_softc *, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_set_chan(struct uath_softc *, struct ieee80211_channel *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_reset_tx_queues(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_wme_init(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_config_multi(struct uath_softc *,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint32_t, const void *, int);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_config(struct uath_softc *, uint32_t, uint32_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_switch_channel(struct uath_softc *,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_channel *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_set_rxfilter(struct uath_softc *, uint32_t, uint32_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_init_locked(void *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_stop_locked(void *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int uath_init(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_stop(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void uath_resume(struct uath_softc *);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_debug(uint32_t dbg_flags, const int8_t *fmt, ...)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China va_list args;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (dbg_flags & uath_dbg_flags) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China va_start(args, fmt);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China vcmn_err(CE_CONT, fmt, args);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China va_end(args);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic uint_t
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_lookup(uint16_t vendor_id, uint16_t product_id)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int i, size;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China size = sizeof (uath_devs) / sizeof (struct uath_type);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (i = 0; i < size; i++) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((vendor_id == uath_devs[i].dev.vendor_id) &&
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (product_id == uath_devs[i].dev.product_id))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (uath_devs[i].flags);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FLAG_ERR);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Return a specific alt_if from the device descriptor tree.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic usb_alt_if_data_t *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_lookup_alt_if(usb_client_dev_data_t *dev_data, uint_t config,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint_t interface, uint_t alt)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_cfg_data_t *cfg_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_if_data_t *if_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_alt_if_data_t *if_alt_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Assume everything is in the tree for now,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * (USB_PARSE_LVL_ALL)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * so we can directly index the array.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* Descend to configuration, configs are 1-based */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (config < 1 || config > dev_data->dev_n_cfg)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cfg_data = &dev_data->dev_cfg[config - 1];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* Descend to interface */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (interface > cfg_data->cfg_n_if - 1)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if_data = &cfg_data->cfg_if[interface];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* Descend to alt */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (alt > if_data->if_n_alt - 1)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if_alt_data = &if_data->if_alt[alt];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (if_alt_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Print all endpoints of an alt_if.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_list_all_eps(usb_alt_if_data_t *ifalt)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_ep_data_t *ep_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_ep_descr_t *ep_descr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int i;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (i = 0; i < ifalt->altif_n_ep; i++) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_data = &ifalt->altif_ep[i];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_descr = &ep_data->ep_descr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_USB,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath: uath_list_all_endpoint: "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "ep addresa[%x] is %x",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China i, ep_descr->bEndpointAddress);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic usb_ep_data_t *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_lookup_ep_data(dev_info_t *dip,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_client_dev_data_t *dev_datap,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint_t interface,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint_t alternate,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint8_t address,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint8_t type)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_alt_if_data_t *altif_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int i;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((dip == NULL) || (dev_datap == NULL))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China altif_data = &dev_datap->dev_curr_cfg->
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cfg_if[interface].if_alt[alternate];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (i = 0; i < altif_data->altif_n_ep; i++) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_ep_descr_t *ept = &altif_data->altif_ep[i].ep_descr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint8_t ept_type = ept->bmAttributes & USB_EP_ATTR_MASK;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint8_t ept_address = ept->bEndpointAddress;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (ept->bLength == 0)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China continue;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((ept_type == type) &&
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ((type == USB_EP_ATTR_CONTROL) || (address == ept_address)))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (&altif_data->altif_ep[i]);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Open communication pipes.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * The following pipes are used by the AR5523:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * ep0: 0x81 IN Rx cmd
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * ep1: 0x01 OUT Tx cmd
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * ep2: 0x82 IN Rx data
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * ep3: 0x02 OUT Tx data
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_open_pipes(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_ep_data_t *ep_node;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_ep_descr_t *ep_descr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_policy_t policy;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#ifdef DEBUG
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_alt_if_data_t *altif_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China altif_data = uath_lookup_alt_if(sc->sc_udev, UATH_CONFIG_NO,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_IFACE_INDEX, UATH_ALT_IF_INDEX);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (altif_data == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "alt_if not found");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (USB_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_list_all_eps(altif_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#endif
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * XXX pipes numbers are hardcoded because we don't have any way
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * to distinguish the data pipes from the firmware command pipes
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * (both are bulk pipes) using the endpoints descriptors.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_node = uath_lookup_ep_data(sc->sc_dev, sc->sc_udev,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China 0, 0, 0x81, USB_EP_ATTR_BULK);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_descr = &ep_node->ep_descr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_open_pipes(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "find pipe %x\n", ep_descr->bEndpointAddress);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bzero(&policy, sizeof (usb_pipe_policy_t));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China policy.pp_max_async_reqs = UATH_CMD_LIST_COUNT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_pipe_open(sc->sc_dev, &ep_node->ep_descr,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &policy, USB_FLAGS_SLEEP, &sc->rx_cmd_pipe);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_open_pipes(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to open rx data pipe, err = %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_node = uath_lookup_ep_data(sc->sc_dev, sc->sc_udev,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China 0, 0, 0x01, USB_EP_ATTR_BULK);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_descr = &ep_node->ep_descr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_open_pipes(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "find pipe %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_descr->bEndpointAddress);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bzero(&policy, sizeof (usb_pipe_policy_t));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China policy.pp_max_async_reqs = UATH_CMD_LIST_COUNT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_pipe_open(sc->sc_dev, &ep_node->ep_descr,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &policy, USB_FLAGS_SLEEP, &sc->tx_cmd_pipe);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_open_pipes(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to open tx command pipe, err = %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_node = uath_lookup_ep_data(sc->sc_dev, sc->sc_udev,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China 0, 0, 0x82, USB_EP_ATTR_BULK);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_descr = &ep_node->ep_descr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_open_pipes(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "find pipe %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_descr->bEndpointAddress);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bzero(&policy, sizeof (usb_pipe_policy_t));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China policy.pp_max_async_reqs = UATH_RX_DATA_LIST_COUNT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_pipe_open(sc->sc_dev, &ep_node->ep_descr,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &policy, USB_FLAGS_SLEEP, &sc->rx_data_pipe);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_open_pipes(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to open tx pipe, err = %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_node = uath_lookup_ep_data(sc->sc_dev, sc->sc_udev,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China 0, 0, 0x02, USB_EP_ATTR_BULK);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_descr = &ep_node->ep_descr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_open_pipes(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "find pipe %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ep_descr->bEndpointAddress);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bzero(&policy, sizeof (usb_pipe_policy_t));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China policy.pp_max_async_reqs = UATH_TX_DATA_LIST_COUNT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_pipe_open(sc->sc_dev, &ep_node->ep_descr,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &policy, USB_FLAGS_SLEEP, &sc->tx_data_pipe);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_open_pipes(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to open rx command pipe, err = %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_close_pipes(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_close_pipes(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_flags_t flags = USB_FLAGS_SLEEP;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->rx_cmd_pipe != NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_reset(sc->sc_dev, sc->rx_cmd_pipe, flags, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_close(sc->sc_dev, sc->rx_cmd_pipe, flags, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->rx_cmd_pipe = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->tx_cmd_pipe != NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_reset(sc->sc_dev, sc->tx_cmd_pipe, flags, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_close(sc->sc_dev, sc->tx_cmd_pipe, flags, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->tx_cmd_pipe = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->rx_data_pipe != NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_reset(sc->sc_dev, sc->rx_data_pipe, flags, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_close(sc->sc_dev, sc->rx_data_pipe, flags, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->rx_data_pipe = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->tx_data_pipe != NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_reset(sc->sc_dev, sc->tx_data_pipe, flags, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_close(sc->sc_dev, sc->tx_data_pipe, flags, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->tx_data_pipe = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic const char *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_codename(int code)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#define N(a) (sizeof (a)/sizeof (a[0]))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China static const char *names[] = {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "0x00",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "HOST_AVAILABLE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "BIND",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "TARGET_RESET",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "TARGET_GET_CAPABILITY",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "TARGET_SET_CONFIG",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "TARGET_GET_STATUS",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "TARGET_GET_STATS",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "TARGET_START",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "TARGET_STOP",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "TARGET_ENABLE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "TARGET_DISABLE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "CREATE_CONNECTION",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "UPDATE_CONNECT_ATTR",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "DELETE_CONNECT",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SEND",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "FLUSH",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "STATS_UPDATE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "BMISS",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "DEVICE_AVAIL",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SEND_COMPLETE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "DATA_AVAIL",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_PWR_MODE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "BMISS_ACK",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_LED_STEADY",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_LED_BLINK",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SETUP_BEACON_DESC",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "BEACON_INIT",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "RESET_KEY_CACHE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "RESET_KEY_CACHE_ENTRY",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_KEY_CACHE_ENTRY",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_DECOMP_MASK",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_REGULATORY_DOMAIN",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_LED_STATE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "WRITE_ASSOCID",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_STA_BEACON_TIMERS",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "GET_TSF",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "RESET_TSF",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_ADHOC_MODE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_BASIC_RATE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "MIB_CONTROL",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "GET_CHANNEL_DATA",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "GET_CUR_RSSI",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_ANTENNA_SWITCH",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "0x2c", "0x2d", "0x2e",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "USE_SHORT_SLOT_TIME",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_POWER_MODE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SETUP_PSPOLL_DESC",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_RX_MULTICAST_FILTER",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "RX_FILTER",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "PER_CALIBRATION",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "RESET",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "DISABLE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "PHY_DISABLE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_TX_POWER_LIMIT",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SET_TX_QUEUE_PARAMS",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "SETUP_TX_QUEUE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "RELEASE_TX_QUEUE",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China };
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China static char buf[8];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (code < N(names))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (names[code]);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (code == WDCMSG_SET_DEFAULT_KEY)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return ("SET_DEFAULT_KEY");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) snprintf(buf, sizeof (buf), "0x%02x", code);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (buf);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China#undef N
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_fw_send(struct uath_softc *sc, usb_pipe_handle_t pipe,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China const void *data, size_t len)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_bulk_req_t *send_req;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk_t *mblk;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int res;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req = usb_alloc_bulk_req(sc->sc_dev, len, USB_FLAGS_SLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_len = (int)len;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_attributes = USB_ATTRS_AUTOCLEARING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_timeout = UATH_CMD_TIMEOUT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk = send_req->bulk_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bcopy(data, mblk->b_wptr, len);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk->b_wptr += len;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China res = usb_pipe_bulk_xfer(pipe, send_req, USB_FLAGS_SLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (res != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_FW, "uath: uath_fw_send(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "Error %x writing data to bulk/out pipe", res);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_free_bulk_req(send_req);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_fw_ack(struct uath_softc *sc, int len)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_fwblock *rxblock;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_bulk_req_t *req;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk_t *mp;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req = usb_alloc_bulk_req(sc->sc_dev, len, USB_FLAGS_SLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (req == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_FW,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath: uath_fw_ack(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath_rx_transfer(): failed to allocate req");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_len = len;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_client_private = (usb_opaque_t)sc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_timeout = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_attributes = USB_ATTRS_SHORT_XFER_OK
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China | USB_ATTRS_AUTOCLEARING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_pipe_bulk_xfer(sc->rx_cmd_pipe, req, USB_FLAGS_SLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_FW, "uath: uath_fw_ack(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to do rx xfer, %d", err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_free_bulk_req(req);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mp = req->bulk_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_data = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China rxblock = (struct uath_fwblock *)mp->b_rptr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_FW, "uath: uath_fw_ack() "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "rxblock flags=0x%x total=%d\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China BE_32(rxblock->flags), BE_32(rxblock->rxtotal));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China freemsg(mp);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_free_bulk_req(req);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * find uath firmware module's "_start" "_end" symbols
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * and get its size.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_loadsym(ddi_modhandle_t modp, char *sym, char **start, size_t *len)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China char start_sym[64];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China char end_sym[64];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China char *p, *end;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int rv;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China size_t n;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) snprintf(start_sym, sizeof (start_sym), "%s_start", sym);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) snprintf(end_sym, sizeof (end_sym), "%s_end", sym);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China p = (char *)ddi_modsym(modp, start_sym, &rv);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (p == NULL || rv != 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_loadsym(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "mod %s: symbol %s not found\n", uath_fwmod, start_sym);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China end = (char *)ddi_modsym(modp, end_sym, &rv);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (end == NULL || rv != 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_loadsym(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "mod %s: symbol %s not found\n", uath_fwmod, end_sym);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China n = _PTRDIFF(end, p);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *start = p;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *len = n;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Load the MIPS R4000 microcode into the device. Once the image is loaded,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * the device will detach itself from the bus and reattach later with a new
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * product Id (a la ezusb). XXX this could also be implemented in userland
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * through /dev/ugen.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_loadfirmware(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_fwblock txblock;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ddi_modhandle_t modp;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China char *fw_index, *fw_image = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China size_t fw_size, len;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err = DDI_SUCCESS, rv = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China modp = ddi_modopen(uath_fwmod, KRTLD_MODE_FIRST, &rv);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (modp == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmn_err(CE_WARN, "uath: uath_loadfirmware(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "module %s not found\n", uath_fwmod);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto label;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_loadsym(modp, uath_binmod, &fw_index, &fw_size);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmn_err(CE_WARN, "uath: uath_loadfirmware(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not get firmware\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto label;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China fw_image = (char *)kmem_alloc(fw_size, KM_SLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (fw_image == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_loadfirmware(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to alloc firmware memory\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = UATH_FAILURE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto label;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) memcpy(fw_image, fw_index, fw_size);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China fw_index = fw_image;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China len = fw_size;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "loading firmware size = %lu\n", fw_size);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* bzero(txblock, sizeof (struct uath_fwblock)); */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China txblock.flags = BE_32(UATH_WRITE_BLOCK);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China txblock.total = BE_32(fw_size);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China while (len > 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China size_t mlen = min(len, UATH_MAX_FWBLOCK_SIZE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China txblock.remain = BE_32(len - mlen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China txblock.len = BE_32(mlen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_FW, "uath: uath_loadfirmware(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "sending firmware block: %d bytes sending\n", mlen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_FW, "uath: uath_loadfirmware(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "sending firmware block: %d bytes remaining\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China len - mlen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* send firmware block meta-data */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_fw_send(sc, sc->tx_cmd_pipe, &txblock,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (struct uath_fwblock));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_FW, "uath: uath_loadfirmware(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "send block meta-data error");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto label;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* send firmware block data */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_fw_send(sc, sc->tx_data_pipe, fw_index, mlen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_FW, "uath: uath_loadfirmware() "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "send block data err");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto label;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* wait for ack from firmware */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_fw_ack(sc, sizeof (struct uath_fwblock));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_FW, "uath: uath_loadfirmware() "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "rx block ack err");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto label;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China fw_index += mlen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China len -= mlen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinalabel:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (fw_image != NULL)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China kmem_free(fw_image, fw_size);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China fw_image = fw_index = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (modp != NULL)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) ddi_modclose(modp);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_alloc_cmd_list(struct uath_softc *sc, struct uath_cmd cmds[],
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int ncmd, int maxsz)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int i, err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (i = 0; i < ncmd; i++) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd *cmd = &cmds[i];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->sc = sc; /* backpointer for callbacks */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->msgid = i;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->buf = kmem_zalloc(maxsz, KM_NOSLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (cmd->buf == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_alloc_cmd_list(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not allocate xfer buffer\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = DDI_ENOMEM;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_free_cmd_list(cmds, ncmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_init_cmd_list(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int i;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_cmdid = sc->rx_cmd_queued = sc->tx_cmd_queued = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (i = 0; i < UATH_CMD_LIST_COUNT; i++) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (uath_rx_cmd_xfer(sc) != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_init_cmd_list(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to init cmd list %x\n", i);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_free_cmd_list(struct uath_cmd cmds[], int ncmd)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int i;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (i = 0; i < ncmd; i++)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (cmds[i].buf != NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China kmem_free(cmds[i].buf, UATH_MAX_CMDSZ);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmds[i].buf = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_host_available(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_host_available setup;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* inform target the host is available */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China setup.sw_ver_major = BE_32(ATH_SW_VER_MAJOR);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China setup.sw_ver_minor = BE_32(ATH_SW_VER_MINOR);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China setup.sw_ver_patch = BE_32(ATH_SW_VER_PATCH);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China setup.sw_ver_build = BE_32(ATH_SW_VER_BUILD);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (uath_cmd_read(sc, WDCMSG_HOST_AVAILABLE,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &setup, sizeof (setup), NULL, 0, 0));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_get_capability(struct uath_softc *sc, uint32_t cap, uint32_t *val)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cap = BE_32(cap);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_read(sc, WDCMSG_TARGET_GET_CAPABILITY, &cap,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (cap), val, sizeof (uint32_t), UATH_CMD_FLAG_MAGIC);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err == UATH_SUCCESS)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = BE_32(*val);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China else
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_get_capability(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not read capability %u\n", BE_32(cap));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_get_devcap(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_devcap *cap = &sc->sc_devcap;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* collect device capabilities */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_TARGET_VERSION,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->targetVersion);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_TARGET_REVISION,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->targetRevision);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_MAC_VERSION,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->macVersion);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_MAC_REVISION,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->macRevision);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_PHY_REVISION,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->phyRevision);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_ANALOG_5GHz_REVISION,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->analog5GhzRevision);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_ANALOG_2GHz_REVISION,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->analog2GhzRevision);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_REG_DOMAIN,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->regDomain);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_REG_CAP_BITS,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->regCapBits);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* NB: not supported in rev 1.5 */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* uath_get_capability(sc, CAP_COUNTRY_CODE, cap->countryCode); */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_WIRELESS_MODES,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->wirelessModes);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_CHAN_SPREAD_SUPPORT,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->chanSpreadSupport);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_COMPRESS_SUPPORT,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->compressSupport);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_BURST_SUPPORT,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->burstSupport);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_FAST_FRAMES_SUPPORT,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->fastFramesSupport);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_CHAP_TUNING_SUPPORT,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->chapTuningSupport);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_TURBOG_SUPPORT,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->turboGSupport);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_TURBO_PRIME_SUPPORT,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->turboPrimeSupport);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_DEVICE_TYPE,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->deviceType);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_WME_SUPPORT,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->wmeSupport);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_TOTAL_QUEUES,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->numTxQueues);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_CONNECTION_ID_MAX,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->connectionIdMax);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_LOW_5GHZ_CHAN,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->low5GhzChan);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_HIGH_5GHZ_CHAN,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->high5GhzChan);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_LOW_2GHZ_CHAN,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->low2GhzChan);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_HIGH_2GHZ_CHAN,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->high2GhzChan);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_TWICE_ANTENNAGAIN_5G,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->twiceAntennaGain5G);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_TWICE_ANTENNAGAIN_2G,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->twiceAntennaGain2G);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_CIPHER_AES_CCM,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->supportCipherAES_CCM);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_CIPHER_TKIP,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->supportCipherTKIP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_get_capability(sc, CAP_MIC_TKIP,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &cap->supportMicTKIP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cap->supportCipherWEP = 1; /* NB: always available */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_get_status(struct uath_softc *sc, uint32_t which, void *odata, int olen)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China which = BE_32(which);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_read(sc, WDCMSG_TARGET_GET_STATUS,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &which, sizeof (which), odata, olen, UATH_CMD_FLAG_MAGIC);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_get_status(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not read EEPROM offset 0x%02x\n", BE_32(which));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_get_devstatus(struct uath_softc *sc, uint8_t macaddr[IEEE80211_ADDR_LEN])
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* retrieve MAC address */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_get_status(sc, ST_MAC_ADDR, macaddr, IEEE80211_ADDR_LEN);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_get_devstatus(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not read MAC address\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_get_status(sc, ST_SERIAL_NUMBER,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &sc->sc_serial[0], sizeof (sc->sc_serial));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_get_devstatus(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not read device serial number\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * uath_cmd_lock: a special signal structure that is used for notification
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * that a callback function has been called.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/* Initializes the uath_cmd_lock structure. */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmd_lock_init(struct uath_cmd_lock *lock)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ASSERT(lock != NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_init(&lock->mutex, NULL, MUTEX_DRIVER, NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cv_init(&lock->cv, NULL, CV_DRIVER, NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China lock->done = B_FALSE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/* Deinitalizes the uath_cb_lock structure. */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinavoid
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmd_lock_destroy(struct uath_cmd_lock *lock)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ASSERT(lock != NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&lock->mutex);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cv_destroy(&lock->cv);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Wait on lock until someone calls the "signal" function or the timeout
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * expires. Note: timeout is in microseconds.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmd_lock_wait(struct uath_cmd_lock *lock, clock_t timeout)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int res, cv_res;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China clock_t etime;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ASSERT(lock != NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_enter(&lock->mutex);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (timeout < 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* no timeout - wait as long as needed */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China while (lock->done == B_FALSE)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cv_wait(&lock->cv, &lock->mutex);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China } else {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* wait with timeout (given in usec) */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China etime = ddi_get_lbolt() + drv_usectohz(timeout);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China while (lock->done == B_FALSE) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cv_res = cv_timedwait_sig(&lock->cv,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &lock->mutex, etime);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (cv_res <= 0) break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China res = (lock->done == B_TRUE) ? UATH_SUCCESS : UATH_FAILURE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_exit(&lock->mutex);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (res);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/* Signal that the job (eg. callback) is done and unblock anyone who waits. */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmd_lock_signal(struct uath_cmd_lock *lock)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ASSERT(lock != NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_enter(&lock->mutex);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China lock->done = B_TRUE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cv_broadcast(&lock->cv);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_exit(&lock->mutex);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmd_read(struct uath_softc *sc, uint32_t code, const void *idata,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int ilen, void *odata, int olen, int flags)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China flags |= UATH_CMD_FLAG_READ;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (uath_cmdsend(sc, code, idata, ilen, odata, olen, flags));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmd_write(struct uath_softc *sc, uint32_t code, const void *data,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int len, int flags)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China flags &= ~UATH_CMD_FLAG_READ;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (uath_cmdsend(sc, code, data, len, NULL, 0, flags));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Low-level function to send read or write commands to the firmware.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmdsend(struct uath_softc *sc, uint32_t code, const void *idata, int ilen,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China void *odata, int olen, int flags)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_hdr *hdr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd *cmd;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* grab a xfer */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd = &sc->sc_cmd[sc->sc_cmdid];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->flags = flags;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* always bulk-out a multiple of 4 bytes */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->buflen = (sizeof (struct uath_cmd_hdr) + ilen + 3) & ~3;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr = (struct uath_cmd_hdr *)cmd->buf;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bzero(hdr, sizeof (struct uath_cmd_hdr));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->len = BE_32(cmd->buflen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->code = BE_32(code);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->msgid = cmd->msgid; /* don't care about endianness */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->magic = BE_32((cmd->flags & UATH_CMD_FLAG_MAGIC) ? 1 << 24 : 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bcopy(idata, (uint8_t *)(hdr + 1), ilen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_TX_CMD, "uath: uath_cmdsend(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "queue %x send %s [flags 0x%x] olen %d\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->msgid, uath_codename(code), cmd->flags, olen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->odata = odata;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (odata == NULL)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_TX_CMD, "uath: uath_cmdsend(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "warning - odata is NULL\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China else if (olen < UATH_MAX_CMDSZ - sizeof (*hdr) + sizeof (uint32_t))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_TX_CMD, "uath: uath_cmdsend(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "warning - olen %x is short\n, olen");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->olen = olen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_tx_cmd_xfer(sc, sc->tx_cmd_pipe, cmd->buf, cmd->buflen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_cmdsend(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "Error writing command\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_cmdid = (sc->sc_cmdid + 1) % UATH_CMD_LIST_COUNT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (cmd->flags & UATH_CMD_FLAG_READ) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* wait at most two seconds for command reply */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_cmd_lock_init(&sc->rlock);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_lock_wait(&sc->rlock, 2000000);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->odata = NULL; /* in case reply comes too late */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_cmdsend(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "timeout waiting for reply, "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "to cmd 0x%x (%u), queue %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China code, code, cmd->msgid);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = UATH_FAILURE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China } else if (cmd->olen != olen) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_cmdsend(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "unexpected reply data count "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "to cmd 0x%x (%x), got %u, expected %u\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China code, cmd->msgid, cmd->olen, olen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = UATH_FAILURE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_cmd_lock_destroy(&sc->rlock);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/* ARGSUSED */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmd_txeof(usb_pipe_handle_t pipe, struct usb_bulk_req *req)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)req->bulk_client_private;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_TX_CMD, "uath: uath_cmd_txeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "cr:%s(%d), flags:0x%x, tx queued %d\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_str_cr(req->bulk_completion_reason),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_completion_reason,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_cb_flags,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->tx_cmd_queued);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (req->bulk_completion_reason != USB_CR_OK)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_tx_err++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_enter(&sc->sc_txlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->tx_cmd_queued--;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_exit(&sc->sc_txlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_free_bulk_req(req);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_tx_cmd_xfer(struct uath_softc *sc,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_handle_t pipe, const void *data, uint_t len)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_bulk_req_t *send_req;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk_t *mblk;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int res;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req = usb_alloc_bulk_req(sc->sc_dev, len, USB_FLAGS_SLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_client_private = (usb_opaque_t)sc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_len = (int)len;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_attributes = USB_ATTRS_AUTOCLEARING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_timeout = UATH_CMD_TIMEOUT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_cb = uath_cmd_txeof;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_exc_cb = uath_cmd_txeof;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_completion_reason = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China send_req->bulk_cb_flags = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk = send_req->bulk_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bcopy(data, mblk->b_rptr, len);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk->b_wptr += len;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China res = usb_pipe_bulk_xfer(pipe, send_req, USB_FLAGS_NOSLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (res != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_tx_cmd_xfer(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "Error %x writing cmd to bulk/out pipe", res);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_enter(&sc->sc_txlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->tx_cmd_queued++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_exit(&sc->sc_txlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmdeof(struct uath_softc *sc, struct uath_cmd *cmd)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_hdr *hdr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int dlen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr = (struct uath_cmd_hdr *)cmd->buf;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->code = BE_32(hdr->code);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->len = BE_32(hdr->len);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->magic = BE_32(hdr->magic); /* target status on return */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* NB: msgid is passed thru w/o byte swapping */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD, "uath: uath_cmdeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "%s: [ix %x] len=%x status %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_codename(hdr->code),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->msgid,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->len,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->magic);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China switch (hdr->code & 0xff) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* reply to a read command */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China default:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China dlen = hdr->len - sizeof (*hdr);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD, "uath: uath_cmdeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "code %x data len %u\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->code & 0xff, dlen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * The first response from the target after the
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * HOST_AVAILABLE has an invalid msgid so we must
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * treat it specially.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((hdr->msgid < UATH_CMD_LIST_COUNT) && (hdr->code != 0x13)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint32_t *rp = (uint32_t *)(hdr + 1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint_t olen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (!(sizeof (*hdr) <= hdr->len &&
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->len < UATH_MAX_CMDSZ)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath: uath_cmdeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "invalid WDC msg length %u; "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "msg ignored\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->len);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Calculate return/receive payload size; the
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * first word, if present, always gives the
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * number of bytes--unless it's 0 in which
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * case a single 32-bit word should be present.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (dlen >= sizeof (uint32_t)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China olen = BE_32(rp[0]);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China dlen -= sizeof (uint32_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (olen == 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* convention is 0 =>'s one word */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China olen = sizeof (uint32_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX KASSERT(olen == dlen ) */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China } else
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China olen = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (cmd->odata != NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* NB: cmd->olen validated in uath_cmd */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (olen > cmd->olen) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX complain? */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath: uath_cmdeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "cmd 0x%x olen %u cmd olen %u\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->code, olen, cmd->olen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China olen = cmd->olen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (olen > dlen) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX complain, shouldn't happen */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath: uath_cmdeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "cmd 0x%x olen %u dlen %u\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr->code, olen, dlen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China olen = dlen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX have submitter do this */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* copy answer into caller's supplied buffer */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bcopy(&rp[1], cmd->odata, olen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->olen = olen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* Just signal that something happened */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_cmd_lock_signal(&sc->rlock);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WDCMSG_TARGET_START:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD, "uath: uath_cmdeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "receive TARGET STAERT\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (hdr->msgid >= UATH_CMD_LIST_COUNT) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China dlen = hdr->len - sizeof (*hdr);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (dlen != sizeof (uint32_t)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX something wrong */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX have submitter do this */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* copy answer into caller's supplied buffer */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bcopy(hdr + 1, cmd->odata, sizeof (uint32_t));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd->olen = sizeof (uint32_t);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* wake up caller */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_cmd_lock_signal(&sc->rlock);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WDCMSG_SEND_COMPLETE:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* this notification is sent when UATH_TX_NOTIFY is set */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD, "uath: uath_cmdeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "receive Tx notification\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WDCMSG_TARGET_GET_STATS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD, "uath: uath_cmdeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "received device statistics\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/* ARGSUSED */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmd_rxeof(usb_pipe_handle_t pipe, usb_bulk_req_t *req)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)req->bulk_client_private;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_hdr *hdr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd *cmd;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk_t *m, *mp;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int len;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD, "uath: uath_cmd_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "cr:%s(%d), flags:0x%x, rx queued %d\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_str_cr(req->bulk_completion_reason),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_completion_reason,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_cb_flags,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->rx_cmd_queued);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China m = req->bulk_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_data = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (req->bulk_completion_reason != USB_CR_OK) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD, "uath: uath_cmd_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "USB CR is not OK\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (m->b_cont != NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* Fragmented message, concatenate */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mp = msgpullup(m, -1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China freemsg(m);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China m = mp;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mp = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China len = msgdsize(m);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (len < sizeof (struct uath_cmd_hdr)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX_CMD, "uath: uath_rx_cmdeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "short xfer error\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China hdr = (struct uath_cmd_hdr *)m->b_rptr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (BE_32(hdr->code) == 0x13)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd = &sc->sc_cmd[0];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China else
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China cmd = &sc->sc_cmd[hdr->msgid];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bcopy(m->b_rptr, cmd->buf, len);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_cmdeof(sc, cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_rx_cmd_xfer(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_enter(&sc->sc_rxlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->rx_cmd_queued--;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_exit(&sc->sc_rxlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (m) freemsg(m);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_free_bulk_req(req);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_rx_cmd_xfer(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_bulk_req_t *req;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req = usb_alloc_bulk_req(sc->sc_dev, UATH_MAX_CMDSZ, USB_FLAGS_SLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (req == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_rx_cmd_xfer(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to allocate req");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_len = UATH_MAX_CMDSZ;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_client_private = (usb_opaque_t)sc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_cb = uath_cmd_rxeof;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_exc_cb = uath_cmd_rxeof;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_timeout = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_completion_reason = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_cb_flags = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_attributes = USB_ATTRS_SHORT_XFER_OK
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China | USB_ATTRS_AUTOCLEARING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_pipe_bulk_xfer(sc->rx_cmd_pipe, req, USB_FLAGS_NOSLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_rx_cmd_xfer(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to do rx xfer, %d", err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_free_bulk_req(req);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_enter(&sc->sc_rxlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->rx_cmd_queued++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_exit(&sc->sc_rxlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_init_data_queue(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->tx_data_queued = sc->rx_data_queued = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/* ARGSUSED */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_data_txeof(usb_pipe_handle_t pipe, usb_bulk_req_t *req)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)req->bulk_client_private;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_TX, "uath: uath_data_txeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath_txeof(): cr:%s(%d), flags:0x%x, tx_data_queued %d\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_str_cr(req->bulk_completion_reason),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_completion_reason,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_cb_flags,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->tx_data_queued);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (req->bulk_completion_reason != USB_CR_OK)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_tx_err++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_enter(&sc->sc_txlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->tx_data_queued--;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->sc_need_sched) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_need_sched = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mac_tx_update(ic->ic_mach);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_exit(&sc->sc_txlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_free_bulk_req(req);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_tx_data_xfer(struct uath_softc *sc, mblk_t *mp)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_bulk_req_t *req;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req = usb_alloc_bulk_req(sc->sc_dev, 0, USB_FLAGS_SLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (req == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_TX, "uath: uath_tx_data_xfer(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath_tx_data_xfer(): failed to allocate req");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China freemsg(mp);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_len = msgdsize(mp);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_data = mp;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_client_private = (usb_opaque_t)sc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_timeout = UATH_DATA_TIMEOUT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_attributes = USB_ATTRS_AUTOCLEARING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_cb = uath_data_txeof;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_exc_cb = uath_data_txeof;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_completion_reason = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_cb_flags = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((err = usb_pipe_bulk_xfer(sc->tx_data_pipe, req, 0)) !=
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_TX, "uath: uath_tx_data_xfer(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to do tx xfer, %d", err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_free_bulk_req(req);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->tx_data_queued++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/* ARGSUSED */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_data_rxeof(usb_pipe_handle_t pipe, usb_bulk_req_t *req)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)req->bulk_client_private;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_chunk *chunk;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_rx_desc *desc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_frame *wh;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_node *ni;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk_t *m, *mp;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint8_t *rxbuf;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int actlen, pktlen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_enter(&sc->sc_rxlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX, "uath: uath_data_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "cr:%s(%d), flags:0x%x, rx_data_queued %d\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_str_cr(req->bulk_completion_reason),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_completion_reason,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_cb_flags,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->rx_data_queued);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mp = req->bulk_data;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_data = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (req->bulk_completion_reason != USB_CR_OK) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX, "uath: uath_data_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "USB CR is not OK\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_rx_err++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China rxbuf = (uint8_t *)mp->b_rptr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China actlen = (uintptr_t)mp->b_wptr - (uintptr_t)mp->b_rptr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (actlen < UATH_MIN_RXBUFSZ) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX, "uath_data_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "wrong recv size %d\n", actlen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_rx_err++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk = (struct uath_chunk *)rxbuf;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (chunk->seqnum == 0 && chunk->flags == 0 && chunk->length == 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX, "uath: uath_data_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "strange response\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_RESET_INTRX(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_rx_err++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (chunk->seqnum != sc->sc_intrx_nextnum) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX, "uath: uath_data_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "invalid seqnum %d, expected %d\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk->seqnum, sc->sc_intrx_nextnum);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_badchunkseqnum);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_RESET_INTRX(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_rx_err++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* check multi-chunk frames */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((chunk->seqnum == 0 && !(chunk->flags & UATH_CFLAGS_FINAL)) ||
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (chunk->seqnum != 0 && (chunk->flags & UATH_CFLAGS_FINAL)) ||
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk->flags & UATH_CFLAGS_RXMSG) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX, "uath: uath_data_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "receive multi-chunk frames "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "chunk seqnum %x, flags %x, length %u\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk->seqnum, chunk->flags, BE_16(chunk->length));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_multichunk);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* if the frame is not final continue the transfer */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (!(chunk->flags & UATH_CFLAGS_FINAL))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_intrx_nextnum++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * if the frame is not set UATH_CFLAGS_RXMSG, then rx descriptor is
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * located at the end, 32-bit aligned
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc = (chunk->flags & UATH_CFLAGS_RXMSG) ?
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (struct uath_rx_desc *)(chunk + 1) :
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (struct uath_rx_desc *)(((uint8_t *)chunk) +
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (struct uath_chunk) + BE_16(chunk->length) -
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (struct uath_rx_desc));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX, "uath: uath_data_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "frame len %u code %u status %u rate %u antenna %u "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "rssi %d channel %u phyerror %u connix %u "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "decrypterror %u keycachemiss %u\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China BE_32(desc->framelen), BE_32(desc->code), BE_32(desc->status),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China BE_32(desc->rate), BE_32(desc->antenna), BE_32(desc->rssi),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China BE_32(desc->channel), BE_32(desc->phyerror), BE_32(desc->connix),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China BE_32(desc->decrypterror), BE_32(desc->keycachemiss));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (BE_32(desc->len) > IEEE80211_MAX_LEN) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX, "uath: uath_data_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "bad descriptor (len=%d)\n", BE_32(desc->len));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_toobigrxpkt);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_update_rxstat(sc, BE_32(desc->status));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China pktlen = BE_32(desc->framelen) - UATH_RX_DUMMYSIZE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((m = allocb(pktlen, BPRI_MED)) == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_RX, "uath: uath_data_rxeof(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "allocate mblk failed.\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_rx_nobuf++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bcopy((rxbuf + sizeof (struct uath_chunk)), m->b_rptr, pktlen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China m->b_wptr = m->b_rptr + pktlen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China wh = (struct ieee80211_frame *)m->b_rptr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ni = ieee80211_find_rxnode(ic, wh);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* send the frame to the 802.11 layer */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) ieee80211_input(ic, m, ni, (int)BE_32(desc->rssi), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* node is no longer needed */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_free_node(ni);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->rx_data_queued--;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (mp) freemsg(mp);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_free_bulk_req(req);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_exit(&sc->sc_rxlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (UATH_IS_RUNNING(sc) && !UATH_IS_SUSPEND(sc)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_rx_data_xfer(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_rx_data_xfer(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_bulk_req_t *req;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req = usb_alloc_bulk_req(sc->sc_dev,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_MAX_LEN, USB_FLAGS_SLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (req == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_rx_data_xfer(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to allocate req");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_len = IEEE80211_MAX_LEN;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_cb = uath_data_rxeof;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_exc_cb = uath_data_rxeof;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_client_private = (usb_opaque_t)sc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_timeout = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_completion_reason = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_cb_flags = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China req->bulk_attributes = USB_ATTRS_SHORT_XFER_OK
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China | USB_ATTRS_AUTOCLEARING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_pipe_bulk_xfer(sc->rx_data_pipe, req, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_rx_data_xfer(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to do rx xfer, %d", err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_free_bulk_req(req);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_enter(&sc->sc_rxlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->rx_data_queued++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_exit(&sc->sc_rxlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_update_rxstat(struct uath_softc *sc, uint32_t status)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China switch (status) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case UATH_STATUS_STOP_IN_PROGRESS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_stopinprogress);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case UATH_STATUS_CRC_ERR:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_crcerr);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case UATH_STATUS_PHY_ERR:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_phyerr);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case UATH_STATUS_DECRYPT_CRC_ERR:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_decrypt_crcerr);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case UATH_STATUS_DECRYPT_MIC_ERR:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_decrypt_micerr);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case UATH_STATUS_DECOMP_ERR:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_decomperr);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case UATH_STATUS_KEY_ERR:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_keyerr);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case UATH_STATUS_ERR:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_STAT_INC(sc, st_err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China default:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_next_scan(void *arg)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = arg;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (ic->ic_state == IEEE80211_S_SCAN)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_next_scan(ic);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_scan_id = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_create_connection(struct uath_softc *sc, uint32_t connid)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China const struct ieee80211_rateset *rs;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_node *ni = ic->ic_bss;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_create_connection create;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bzero(&create, sizeof (create));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China create.connid = BE_32(connid);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China create.bssid = BE_32(0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX packed or not? */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China create.size = BE_32(sizeof (struct uath_cmd_rateset));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China rs = &ni->in_rates;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China create.connattr.rateset.length = rs->ir_nrates;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bcopy(rs->ir_rates, &create.connattr.rateset.set[0],
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China rs->ir_nrates);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX turbo */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (UATH_IS_CHAN_A(ni->in_chan))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China create.connattr.wlanmode = BE_32(WLAN_MODE_11a);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China else if (UATH_IS_CHAN_ANYG(ni->in_chan))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China create.connattr.wlanmode = BE_32(WLAN_MODE_11g);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China else
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China create.connattr.wlanmode = BE_32(WLAN_MODE_11b);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_write(sc, WDCMSG_CREATE_CONNECTION, &create,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (create), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_set_rates(struct uath_softc *sc, const struct ieee80211_rateset *rs)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_rates rates;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bzero(&rates, sizeof (rates));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China rates.connid = BE_32(UATH_ID_BSS); /* XXX */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China rates.size = BE_32(sizeof (struct uath_cmd_rateset));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX bounds check rs->rs_nrates */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China rates.rateset.length = rs->ir_nrates;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bcopy(rs->ir_rates, &rates.rateset.set[0], rs->ir_nrates);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_set_rates(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "setting supported rates nrates=%d\n", rs->ir_nrates);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_write(sc, WDCMSG_SET_BASIC_RATE,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &rates, sizeof (rates), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_write_associd(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_node *ni = ic->ic_bss;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_set_associd associd;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bzero(&associd, sizeof (associd));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China associd.defaultrateix = BE_32(1); /* XXX */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China associd.associd = BE_32(ni->in_associd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China associd.timoffset = BE_32(0x3b); /* XXX */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_ADDR_COPY(associd.bssid, ni->in_bssid);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_write(sc, WDCMSG_WRITE_ASSOCID, &associd,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (associd), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_set_ledsteady(struct uath_softc *sc, int lednum, int ledmode)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_ledsteady led;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China led.lednum = BE_32(lednum);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China led.ledmode = BE_32(ledmode);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_set_ledsteady(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "set %s led %s (steady)\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (lednum == UATH_LED_LINK) ? "link" : "activity",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ledmode ? "on" : "off");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_write(sc, WDCMSG_SET_LED_STEADY, &led, sizeof (led), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_set_ledblink(struct uath_softc *sc, int lednum, int ledmode,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int blinkrate, int slowmode)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_ledblink led;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China led.lednum = BE_32(lednum);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China led.ledmode = BE_32(ledmode);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China led.blinkrate = BE_32(blinkrate);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China led.slowmode = BE_32(slowmode);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_set_ledblink(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "set %s led %s (blink)\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (lednum == UATH_LED_LINK) ? "link" : "activity",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ledmode ? "on" : "off");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_write(sc, WDCMSG_SET_LED_BLINK,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &led, sizeof (led), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_newstate(struct ieee80211com *ic, enum ieee80211_state nstate, int arg)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_node *ni = ic->ic_bss;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China enum ieee80211_state ostate;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ostate = ic->ic_state;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_newstate(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "%d -> %d\n", ostate, nstate);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->sc_scan_id != 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) untimeout(sc->sc_scan_id);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_scan_id = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (UATH_IS_DISCONNECT(sc) && (nstate != IEEE80211_S_INIT)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (UATH_IS_SUSPEND(sc) && (nstate != IEEE80211_S_INIT)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China switch (nstate) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case IEEE80211_S_INIT:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (ostate == IEEE80211_S_RUN) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* turn link and activity LEDs off */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_set_ledstate(sc, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case IEEE80211_S_SCAN:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (uath_switch_channel(sc, ic->ic_curchan) != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_newstate(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not switch channel\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_scan_id = timeout(uath_next_scan, (void *)sc,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China drv_usectohz(250000));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case IEEE80211_S_AUTH:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX good place? set RTS threshold */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_USER_RTS_THRESHOLD, ic->ic_rtsthreshold);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (uath_switch_channel(sc, ni->in_chan) != 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_newstate(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not switch channel\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (uath_create_connection(sc, UATH_ID_BSS) != 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_newstate(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not create connection\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case IEEE80211_S_ASSOC:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (uath_set_rates(sc, &ni->in_rates) != 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_newstate(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not set negotiated rate set\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case IEEE80211_S_RUN:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX monitor mode doesn't be supported */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (ic->ic_opmode == IEEE80211_M_MONITOR) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_set_ledstate(sc, 1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Tx rate is controlled by firmware, report the maximum
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * negotiated rate in ifconfig output.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ni->in_txrate = ni->in_rates.ir_nrates - 1;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (uath_write_associd(sc) != 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_newstate(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not write association id\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* turn link LED on */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_set_ledsteady(sc, UATH_LED_LINK, UATH_LED_ON);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* make activity LED blink */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_set_ledblink(sc, UATH_LED_ACTIVITY,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LED_ON, 1, 2);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* set state to associated */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_set_ledstate(sc, 1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = sc->sc_newstate(ic, nstate, arg);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_send(ieee80211com_t *ic, mblk_t *mp, uint8_t type)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_chunk *chunk;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_tx_desc *desc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_frame *wh;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_node *ni = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_key *k;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk_t *m, *m0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err, off, mblen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int pktlen, framelen, msglen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = UATH_SUCCESS;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_enter(&sc->sc_txlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (UATH_IS_SUSPEND(sc)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->tx_data_queued > UATH_TX_DATA_LIST_COUNT) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_TX, "uath: uath_send(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "no TX buffer available!\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((type & IEEE80211_FC0_TYPE_MASK) ==
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_FC0_TYPE_DATA) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_need_sched = 1;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_tx_nobuf++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = ENOMEM;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China m = allocb(UATH_MAX_TXBUFSZ, BPRI_MED);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (m == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_TX, "uath: uath_send(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "can't alloc mblk.\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = DDI_FAILURE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* skip TX descriptor */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China m->b_rptr += sizeof (struct uath_chunk) + sizeof (struct uath_tx_desc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China m->b_wptr += sizeof (struct uath_chunk) + sizeof (struct uath_tx_desc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (off = 0, m0 = mp; m0 != NULL; m0 = m0->b_cont) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblen = (uintptr_t)m0->b_wptr - (uintptr_t)m0->b_rptr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) memcpy(m->b_rptr + off, m0->b_rptr, mblen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China off += mblen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China m->b_wptr += off;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China wh = (struct ieee80211_frame *)m->b_rptr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ni = ieee80211_find_txnode(ic, wh->i_addr1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (ni == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = DDI_FAILURE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China freemsg(m);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((type & IEEE80211_FC0_TYPE_MASK) ==
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_FC0_TYPE_DATA) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) ieee80211_encap(ic, m, ni);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China k = ieee80211_crypto_encap(ic, m);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (k == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China freemsg(m);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = DDI_FAILURE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* packet header may have moved, reset our local pointer */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China wh = (struct ieee80211_frame *)m->b_rptr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China pktlen = (uintptr_t)m->b_wptr - (uintptr_t)m->b_rptr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China framelen = pktlen + IEEE80211_CRC_LEN;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China msglen = framelen + sizeof (struct uath_tx_desc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China m->b_rptr -= sizeof (struct uath_chunk) + sizeof (struct uath_tx_desc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk = (struct uath_chunk *)m->b_rptr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc = (struct uath_tx_desc *)(chunk + 1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* one chunk only for now */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk->seqnum = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk->flags = UATH_CFLAGS_FINAL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk->length = BE_16(msglen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* fill Tx descriptor */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->msglen = BE_32(msglen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* NB: to get UATH_TX_NOTIFY reply, `msgid' must be larger than 0 */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->msgid = sc->sc_msgid; /* don't care about endianness */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->type = BE_32(WDCMSG_SEND);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China switch (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case IEEE80211_FC0_TYPE_CTL:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case IEEE80211_FC0_TYPE_MGT:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* NB: force all management frames to highest queue */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (ni->in_flags & UATH_NODE_QOS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* NB: force all management frames to highest queue */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->txqid = BE_32(WME_AC_VO | UATH_TXQID_MINRATE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China } else
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->txqid = BE_32(WME_AC_BE | UATH_TXQID_MINRATE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case IEEE80211_FC0_TYPE_DATA:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX multicast frames should honor mcastrate */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->txqid = BE_32(WME_AC_BE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China default:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_TX, "uath: uath_send(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "bogus frame type 0x%x (%s)\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = EIO;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (ic->ic_state == IEEE80211_S_AUTH ||
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_state == IEEE80211_S_ASSOC ||
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_state == IEEE80211_S_RUN)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->connid = BE_32(UATH_ID_BSS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China else
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->connid = BE_32(UATH_ID_INVALID);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->flags = BE_32(0 /* no UATH_TX_NOTIFY */);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->buflen = BE_32(pktlen);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_tx_data_xfer(sc, m);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_msgid = (sc->sc_msgid + 1) % UATH_TX_DATA_LIST_COUNT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_stats.is_tx_frags++;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_stats.is_tx_bytes += pktlen;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (ni != NULL)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_free_node(ni);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((mp) &&
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ((type & IEEE80211_FC0_TYPE_MASK) != IEEE80211_FC0_TYPE_DATA ||
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err == 0)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China freemsg(mp);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_exit(&sc->sc_txlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_reconnect(dev_info_t *devinfo)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint16_t vendor_id, product_id;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath online\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc = ddi_get_soft_state(uath_soft_state_p, ddi_get_instance(devinfo));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ASSERT(sc != NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic = (struct ieee80211com *)&sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (!UATH_IS_RECONNECT(sc)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_open_pipes(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not open pipes\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_loadfirmware(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != DDI_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not download firmware\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_close_pipes(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_client_detach(sc->sc_dev, sc->sc_udev);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* reset device */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_reset_device(sc->sc_dev, USB_RESET_LVL_DEFAULT);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not reset device %x\n", err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_client_attach(devinfo, USBDRV_VERSION, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "usb_client_attach failed\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_get_dev_data(devinfo, &sc->sc_udev,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China USB_PARSE_LVL_ALL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_udev = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "usb_get_dev_data failed\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China vendor_id = sc->sc_udev->dev_descr->idVendor;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China product_id = sc->sc_udev->dev_descr->idProduct;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->dev_flags = uath_lookup(vendor_id, product_id);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->dev_flags == UATH_FLAG_ERR) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "HW does not match\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "vendorId = %x,deviceID = %x, flags = %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China vendor_id, product_id, sc->dev_flags);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags |= UATH_FLAG_RECONNECT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China } else {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_open_pipes(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not open pipes\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Allocate xfers for firmware commands.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_alloc_cmd_list(sc, sc->sc_cmd, UATH_CMD_LIST_COUNT,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_MAX_CMDSZ);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not allocate Tx command list\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_init_cmd_list(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not init RX command list\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * We're now ready to send+receive firmware commands.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_host_available(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not initialize adapter\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_get_devcap(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not get device capabilities\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_get_devstatus(sc, ic->ic_macaddr);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not get dev status\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_check_same_device(sc->sc_dev, NULL, USB_LOG_L2, -1,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China USB_CHK_BASIC, NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "different device connected %x\n", err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_init(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_reconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "device re-connect failed\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags &= ~UATH_FLAG_RECONNECT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags &= ~UATH_FLAG_DISCONNECT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags |= UATH_FLAG_RUNNING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_disconnect(dev_info_t *devinfo)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * We can't call uath_stop() here, since the hardware is removed,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * we can't access the register anymore.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc = ddi_get_soft_state(uath_soft_state_p, ddi_get_instance(devinfo));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ASSERT(sc != NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->sc_flags & UATH_FLAG_RECONNECT) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_disconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "stage 0 in re-connect\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_close_pipes(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags |= UATH_FLAG_DISCONNECT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic = (struct ieee80211com *)&sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags &= ~UATH_FLAG_RUNNING; /* STOP */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* abort and free xfers */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_free_cmd_list(sc->sc_cmd, UATH_CMD_LIST_COUNT);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* close Tx/Rx pipes */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_close_pipes(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_disconnect(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "offline success\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_dataflush(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_chunk *chunk;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_tx_desc *desc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint8_t *buf;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China buf = kmem_alloc(UATH_MAX_TXBUFSZ, KM_NOSLEEP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (buf == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_dataflush(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "no bufs\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (ENOBUFS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk = (struct uath_chunk *)buf;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc = (struct uath_tx_desc *)(chunk + 1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* one chunk only */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk->seqnum = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk->flags = UATH_CFLAGS_FINAL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China chunk->length = BE_16(sizeof (struct uath_tx_desc));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bzero(desc, sizeof (struct uath_tx_desc));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->msglen = BE_32(sizeof (struct uath_tx_desc));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->msgid = sc->sc_msgid; /* don't care about endianness */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->type = BE_32(WDCMSG_FLUSH);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->txqid = BE_32(0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->connid = BE_32(0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China desc->flags = BE_32(0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_dataflush(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "send flush ix %d\n", desc->msgid);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_fw_send(sc, sc->tx_data_pipe, buf,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (struct uath_chunk) + sizeof (struct uath_tx_desc));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_dataflush(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "data flush error");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China kmem_free(buf, UATH_MAX_TXBUFSZ);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_msgid = (sc->sc_msgid + 1) % UATH_TX_DATA_LIST_COUNT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_cmdflush(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (uath_cmd_write(sc, WDCMSG_FLUSH, NULL, 0, 0));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_flush(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_dataflush(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto failed;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmdflush(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto failed;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafailed:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_set_ledstate(struct uath_softc *sc, int connected)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_set_ledstate(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "set led state %sconnected\n", connected ? "" : "!");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China connected = BE_32(connected);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_write(sc, WDCMSG_SET_LED_STATE,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &connected, sizeof (connected), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_config_multi(struct uath_softc *sc, uint32_t reg, const void *data,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int len)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_write_mac write;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China write.reg = BE_32(reg);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China write.len = BE_32(len);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bcopy(data, write.data, len);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* properly handle the case where len is zero (reset) */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_write(sc, WDCMSG_TARGET_SET_CONFIG, &write,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (len == 0) ? sizeof (uint32_t) : 2 * sizeof (uint32_t) + len, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_config_multi(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not write %d bytes to register 0x%02x\n", len, reg);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_config(struct uath_softc *sc, uint32_t reg, uint32_t val)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_write_mac write;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China write.reg = BE_32(reg);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China write.len = BE_32(0); /* 0 = single write */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *(uint32_t *)write.data = BE_32(val);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_write(sc, WDCMSG_TARGET_SET_CONFIG, &write,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China 3 * sizeof (uint32_t), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_config(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not write register 0x%02x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China reg);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_switch_channel(struct uath_softc *sc, struct ieee80211_channel *c)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* set radio frequency */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_set_chan(sc, c);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_switch_channel(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not set channel\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto failed;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* reset Tx rings */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_reset_tx_queues(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_switch_channel(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not reset Tx queues\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto failed;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* set Tx rings WME properties */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_wme_init(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_switch_channel(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not init Tx queues\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto failed;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_set_ledstate(sc, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_switch_channel(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not set led state\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto failed;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_flush(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_switch_channel(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not flush pipes\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto failed;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafailed:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_set_rxfilter(struct uath_softc *sc, uint32_t bits, uint32_t op)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_rx_filter rxfilter;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China rxfilter.bits = BE_32(bits);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China rxfilter.op = BE_32(op);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_set_rxfilter(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "setting Rx filter=0x%x flags=0x%x\n", bits, op);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return ((uath_cmd_write(sc, WDCMSG_RX_FILTER, &rxfilter,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (rxfilter), 0)));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_set_chan(struct uath_softc *sc, struct ieee80211_channel *c)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_reset reset;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China bzero(&reset, sizeof (reset));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (IEEE80211_IS_CHAN_2GHZ(c))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China reset.flags |= BE_32(UATH_CHAN_2GHZ);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (IEEE80211_IS_CHAN_5GHZ(c))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China reset.flags |= BE_32(UATH_CHAN_5GHZ);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* NB: 11g =>'s 11b so don't specify both OFDM and CCK */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (UATH_IS_CHAN_OFDM(c))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China reset.flags |= BE_32(UATH_CHAN_OFDM);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China else if (UATH_IS_CHAN_CCK(c))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China reset.flags |= BE_32(UATH_CHAN_CCK);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* turbo can be used in either 2GHz or 5GHz */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (c->ich_flags & IEEE80211_CHAN_TURBO)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China reset.flags |= BE_32(UATH_CHAN_TURBO);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China reset.freq = BE_32(c->ich_freq);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China reset.maxrdpower = BE_32(50); /* XXX */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China reset.channelchange = BE_32(1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China reset.keeprccontent = BE_32(0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_set_chan(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "set channel %d, flags 0x%x freq %u\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_chan2ieee(ic, c),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China BE_32(reset.flags), BE_32(reset.freq));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (uath_cmd_write(sc, WDCMSG_RESET, &reset, sizeof (reset), 0));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_reset_tx_queues(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int ac, err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (ac = 0; ac < 4; ac++) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China const uint32_t qid = BE_32(ac);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_write(sc, WDCMSG_RELEASE_TX_QUEUE, &qid,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (qid), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_wme_init(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX get from net80211 */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China static const struct uath_wme_settings uath_wme_11g[4] = {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China { 7, 4, 10, 0, 0 }, /* Background */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China { 3, 4, 10, 0, 0 }, /* Best-Effort */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China { 3, 3, 4, 26, 0 }, /* Video */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China { 2, 2, 3, 47, 0 } /* Voice */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China };
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_cmd_txq_setup qinfo;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int ac, err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (ac = 0; ac < 4; ac++) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China qinfo.qid = BE_32(ac);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China qinfo.len = BE_32(sizeof (qinfo.attr));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China qinfo.attr.priority = BE_32(ac); /* XXX */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China qinfo.attr.aifs = BE_32(uath_wme_11g[ac].aifsn);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China qinfo.attr.logcwmin = BE_32(uath_wme_11g[ac].logcwmin);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China qinfo.attr.logcwmax = BE_32(uath_wme_11g[ac].logcwmax);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China qinfo.attr.mode = BE_32(uath_wme_11g[ac].acm);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China qinfo.attr.qflags = BE_32(1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China qinfo.attr.bursttime =
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China BE_32(UATH_TXOP_TO_US(uath_wme_11g[ac].txop));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_write(sc, WDCMSG_SETUP_TX_QUEUE, &qinfo,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (qinfo), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_stop_locked(void *arg)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)arg;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* flush data & control requests into the target */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_flush(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* set a LED status to the disconnected. */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_set_ledstate(sc, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* stop the target */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_cmd_write(sc, WDCMSG_TARGET_STOP, NULL, 0, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* abort any pending transfers */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_reset(sc->sc_dev, sc->rx_data_pipe, USB_FLAGS_SLEEP, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_reset(sc->sc_dev, sc->tx_data_pipe, USB_FLAGS_SLEEP, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_pipe_reset(sc->sc_dev, sc->tx_cmd_pipe, USB_FLAGS_SLEEP, NULL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_init_locked(void *arg)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = arg;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint32_t val;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int i, err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (UATH_IS_RUNNING(sc))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_stop_locked(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_init_data_queue(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* reset variables */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_intrx_nextnum = sc->sc_msgid = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China val = BE_32(0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_cmd_write(sc, WDCMSG_BIND, &val, sizeof (val), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* set MAC address */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_config_multi(sc, CFG_MAC_ADDR,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_macaddr, IEEE80211_ADDR_LEN);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX honor net80211 state */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_RATE_CONTROL_ENABLE, 0x00000001);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_DIVERSITY_CTL, 0x00000001);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_ABOLT, 0x0000003f);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_WME_ENABLED, 0x00000001);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_SERVICE_TYPE, 1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_TP_SCALE, 0x00000000);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_TPC_HALF_DBM5, 0x0000003c);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_TPC_HALF_DBM2, 0x0000003c);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_OVERRD_TX_POWER, 0x00000000);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_GMODE_PROTECTION, 0x00000000);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_GMODE_PROTECT_RATE_INDEX, 0x00000003);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_PROTECTION_TYPE, 0x00000000);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_config(sc, CFG_MODE_CTS, 0x00000002);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_cmd_read(sc, WDCMSG_TARGET_START, NULL, 0,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China &val, sizeof (val), UATH_CMD_FLAG_MAGIC);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_init_locked(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not start target\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_init_locked(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "%s returns handle: 0x%x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_codename(WDCMSG_TARGET_START), BE_32(val));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* set default channel */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_switch_channel(sc, ic->ic_curchan);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_init_locked(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not switch channel, error %d\n", err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China val = BE_32(TARGET_DEVICE_AWAKE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_cmd_write(sc, WDCMSG_SET_PWR_MODE, &val, sizeof (val), 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* XXX? check */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_cmd_write(sc, WDCMSG_RESET_KEY_CACHE, NULL, 0, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (i = 0; i < UATH_RX_DATA_LIST_COUNT; i++) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_rx_data_xfer(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_init_locked(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not alloc rx xfer %x\n", i);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* enable Rx */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_set_rxfilter(sc, 0x0, UATH_FILTER_OP_INIT);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_set_rxfilter(sc,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_FILTER_RX_UCAST | UATH_FILTER_RX_MCAST |
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_FILTER_RX_BCAST | UATH_FILTER_RX_BEACON,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_FILTER_OP_SET);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (UATH_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_stop_locked(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_init(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_init_locked(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_init(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to initialize uath hardware\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_stop(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_stop(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath stop now\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_stop_locked(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_resume(struct uath_softc *sc)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_resume(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath resume now\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* check device changes after suspend */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (usb_check_same_device(sc->sc_dev, NULL, USB_LOG_L2, -1,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China USB_CHK_BASIC | USB_CHK_CFG, NULL) != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_resume: "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "no or different device connected\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * initialize hardware
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_init_cmd_list(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_resume(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not init RX command list\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_init(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_resume(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "hardware init failed\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_stop(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_new_state(&sc->sc_ic, IEEE80211_S_INIT, -1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags &= ~UATH_FLAG_SUSPEND;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags |= UATH_FLAG_RUNNING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_m_start(void *arg)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)arg;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * initialize hardware
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_init(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_m_start(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "device configuration failed\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_stop(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags |= UATH_FLAG_RUNNING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_m_stop(void *arg)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)arg;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (!UATH_IS_DISCONNECT(sc))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_stop(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags &= ~UATH_FLAG_RUNNING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic void
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_m_ioctl(void* arg, queue_t *wq, mblk_t *mp)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)arg;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = ieee80211_ioctl(ic, wq, mp);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err == ENETRESET) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (ic->ic_des_esslen) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (UATH_IS_RUNNING(sc)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_init(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) ieee80211_new_state(ic,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_S_SCAN, -1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*ARGSUSED*/
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_m_unicst(void *arg, const uint8_t *macaddr)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*ARGSUSED*/
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_m_multicst(void *arg, boolean_t add, const uint8_t *mca)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*ARGSUSED*/
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_m_promisc(void *arg, boolean_t on)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China/*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * callback functions for /get/set properties
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_m_setprop(void *arg, const char *pr_name, mac_prop_id_t wldp_pr_num,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint_t wldp_length, const void *wldp_buf)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)arg;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = ieee80211_setprop(ic, pr_name, wldp_pr_num,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China wldp_length, wldp_buf);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err == ENETRESET) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (ic->ic_des_esslen && UATH_IS_RUNNING(sc)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) uath_init(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) ieee80211_new_state(ic, IEEE80211_S_SCAN, -1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_m_getprop(void *arg, const char *pr_name, mac_prop_id_t wldp_pr_num,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer uint_t wldp_length, void *wldp_buf)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)arg;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = ieee80211_getprop(&sc->sc_ic, pr_name, wldp_pr_num,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer wldp_length, wldp_buf);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerstatic void
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyeruath_m_propinfo(void *arg, const char *pr_name, mac_prop_id_t wldp_pr_num,
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer mac_prop_info_handle_t prh)
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer{
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer struct uath_softc *sc = (struct uath_softc *)arg;
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer ieee80211_propinfo(&sc->sc_ic, pr_name, wldp_pr_num, prh);
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer}
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_m_stat(void *arg, uint_t stat, uint64_t *val)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)arg;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_node *ni = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211_rateset *rs = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China switch (stat) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case MAC_STAT_IFSPEED:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ni = ic->ic_bss;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China rs = &ni->in_rates;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = ((ic->ic_fixed_rate == IEEE80211_FIXED_RATE_NONE) ?
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (rs->ir_rates[ni->in_txrate] & IEEE80211_RATE_VAL)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China : ic->ic_fixed_rate) * 5000000ull;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case MAC_STAT_NOXMTBUF:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = sc->sc_tx_nobuf;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case MAC_STAT_NORCVBUF:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = sc->sc_rx_nobuf;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case MAC_STAT_IERRORS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = sc->sc_rx_err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case MAC_STAT_RBYTES:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = ic->ic_stats.is_rx_bytes;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case MAC_STAT_IPACKETS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = ic->ic_stats.is_rx_frags;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case MAC_STAT_OBYTES:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = ic->ic_stats.is_tx_bytes;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case MAC_STAT_OPACKETS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = ic->ic_stats.is_tx_frags;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case MAC_STAT_OERRORS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_TX_FAILED:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = sc->sc_tx_err;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_TX_RETRANS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China *val = sc->sc_tx_retries;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_FCS_ERRORS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_WEP_ERRORS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_TX_FRAGS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_MCAST_TX:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_RTS_SUCCESS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_RTS_FAILURE:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_ACK_FAILURE:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_RX_FRAGS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_MCAST_RX:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case WIFI_STAT_RX_DUPS:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (ieee80211_stat(ic, stat, val));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China default:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (ENOTSUP);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic mblk_t *
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_m_tx(void *arg, mblk_t *mp)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc = (struct uath_softc *)arg;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic = &sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mblk_t *next;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * No data frames go out unless we're associated; this
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * should not happen as the 802.11 layer does not enable
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * the xmit queue until we enter the RUN state.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((ic->ic_state != IEEE80211_S_RUN) ||
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_IS_SUSPEND(sc)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_m_tx(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "discard, state %u\n", ic->ic_state);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China freemsgchain(mp);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China while (mp != NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China next = mp->b_next;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mp->b_next = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (uath_send(ic, mp, IEEE80211_FC0_TYPE_DATA) != DDI_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mp->b_next = next;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mp = next;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (mp);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_attach(dev_info_t *devinfo, ddi_attach_cmd_t cmd)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct ieee80211com *ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int i, err, instance;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China char strbuf[32];
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uint16_t vendor_id, product_id;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China wifi_data_t wd = { 0 };
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mac_register_t *macp;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China switch (cmd) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case DDI_ATTACH:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case DDI_RESUME:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc = ddi_get_soft_state(uath_soft_state_p,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ddi_get_instance(devinfo));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ASSERT(sc != NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_resume(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China default:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China instance = ddi_get_instance(devinfo);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = ddi_soft_state_zalloc(uath_soft_state_p, instance);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != DDI_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "ddi_soft_state_zalloc failed\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc = ddi_get_soft_state(uath_soft_state_p, instance);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic = (ieee80211com_t *)&sc->sc_ic;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_dev = devinfo;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_client_attach(devinfo, USBDRV_VERSION, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "usb_client_attach failed\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail1;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_get_dev_data(devinfo, &sc->sc_udev, USB_PARSE_LVL_ALL, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_udev = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "usb_get_dev_data failed\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail2;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China vendor_id = sc->sc_udev->dev_descr->idVendor;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China product_id = sc->sc_udev->dev_descr->idProduct;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->dev_flags = uath_lookup(vendor_id, product_id);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->dev_flags == UATH_FLAG_ERR) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "HW does not match\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail2;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "vendorId = %x,deviceID = %x, flags = %x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China vendor_id, product_id, sc->dev_flags);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * We must open the pipes early because they're used to upload the
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * firmware (pre-firmware devices) or to send firmware commands.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_open_pipes(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not open pipes\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail3;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->dev_flags & UATH_FLAG_PRE_FIRMWARE) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_loadfirmware(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != DDI_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not read firmware %s, err %d\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath-ar5523", err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail3;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_close_pipes(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_client_detach(sc->sc_dev, sc->sc_udev);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_reset_device(devinfo, USB_RESET_LVL_REATTACH);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not re-attach, err %d\n", err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail1;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "firmware download and re-attach successfully\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Only post-firmware devices here.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_init(&sc->sc_genlock, NULL, MUTEX_DRIVER, NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_init(&sc->sc_rxlock_cmd, NULL, MUTEX_DRIVER, NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_init(&sc->sc_txlock_cmd, NULL, MUTEX_DRIVER, NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_init(&sc->sc_rxlock_data, NULL, MUTEX_DRIVER, NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_init(&sc->sc_txlock_data, NULL, MUTEX_DRIVER, NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Allocate xfers for firmware commands.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_alloc_cmd_list(sc, sc->sc_cmd, UATH_CMD_LIST_COUNT,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_MAX_CMDSZ);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not allocate Tx command list\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail4;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_init_cmd_list(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not init RX command list\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail5;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * We're now ready to send+receive firmware commands.
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_host_available(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not initialize adapter\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail5;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_get_devcap(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not get device capabilities\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail5;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = uath_get_devstatus(sc, ic->ic_macaddr);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != UATH_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "could not get dev status\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail5;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "MAC address is: %x:%x:%x:%x:%x:%x\n",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_macaddr[0], ic->ic_macaddr[1], ic->ic_macaddr[2],
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_macaddr[3], ic->ic_macaddr[4], ic->ic_macaddr[5]);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_phytype = IEEE80211_T_OFDM; /* not only, but not used */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_opmode = IEEE80211_M_STA; /* default to BSS mode */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_state = IEEE80211_S_INIT;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_maxrssi = 40;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_xmit = uath_send;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* set device capabilities */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_caps =
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_C_TXPMGT | /* tx power management */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_C_SHPREAMBLE | /* short preamble supported */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_C_SHSLOT; /* short slot time supported */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_caps |= IEEE80211_C_WPA; /* Support WPA/WPA2 */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* set supported .11b and .11g rates */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_sup_rates[IEEE80211_MODE_11B] = uath_rateset_11b;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_sup_rates[IEEE80211_MODE_11G] = uath_rateset_11g;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* set supported .11b and .11g channels (1 through 11) */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China for (i = 1; i <= 11; i++) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_sup_channels[i].ich_freq =
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_ieee2mhz(i, IEEE80211_CHAN_2GHZ);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_sup_channels[i].ich_flags =
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM |
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_attach(ic);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* register WPA door */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_register_door(ic, ddi_driver_name(devinfo),
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ddi_get_instance(devinfo));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* override state transition machine */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_newstate = ic->ic_newstate;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_newstate = uath_newstate;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_media_init(ic);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ic->ic_def_txkey = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Provide initial settings for the WiFi plugin; whenever this
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * information changes, we need to call mac_plugindata_update()
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China wd.wd_opmode = ic->ic_opmode;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China wd.wd_secalloc = WIFI_SEC_NONE;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China IEEE80211_ADDR_COPY(wd.wd_bssid, ic->ic_bss->in_bssid);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if ((macp = mac_alloc(MAC_VERSION)) == NULL) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "MAC version mismatch\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail5;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China macp->m_type_ident = MAC_PLUGIN_IDENT_WIFI;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China macp->m_driver = sc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China macp->m_dip = devinfo;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China macp->m_src_addr = ic->ic_macaddr;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China macp->m_callbacks = &uath_m_callbacks;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China macp->m_min_sdu = 0;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China macp->m_max_sdu = IEEE80211_MTU;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China macp->m_pdata = &wd;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China macp->m_pdata_size = sizeof (wd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = mac_register(macp, &ic->ic_mach);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mac_free(macp);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "mac_register() error %x\n", err);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail5;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China };
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = usb_register_hotplug_cbs(devinfo,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_disconnect, uath_reconnect);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != USB_SUCCESS) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "failed to register events\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China goto fail6;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Create minor node of type DDI_NT_NET_WIFI
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) snprintf(strbuf, sizeof (strbuf), "%s%d",
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "uath", instance);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China err = ddi_create_minor_node(devinfo, strbuf, S_IFCHR,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China instance + 1, DDI_NT_NET_WIFI, 0);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (err != DDI_SUCCESS)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_ERR, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "ddi_create_minor_node() failed\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Notify link is down now
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mac_link_update(ic->ic_mach, LINK_STATE_DOWN);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_DEBUG(UATH_DBG_MSG, "uath: uath_attach(): "
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China "attach success\n");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail6:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China (void) mac_unregister(ic->ic_mach);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail5:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_free_cmd_list(sc->sc_cmd, UATH_CMD_LIST_COUNT);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail4:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&sc->sc_genlock);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&sc->sc_rxlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&sc->sc_rxlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&sc->sc_txlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&sc->sc_txlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail3:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_close_pipes(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail2:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_client_detach(sc->sc_dev, sc->sc_udev);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinafail1:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ddi_soft_state_free(uath_soft_state_p, ddi_get_instance(devinfo));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinastatic int
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinauath_detach(dev_info_t *devinfo, ddi_detach_cmd_t cmd)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China struct uath_softc *sc;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc = ddi_get_soft_state(uath_soft_state_p, ddi_get_instance(devinfo));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ASSERT(sc != NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China switch (cmd) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case DDI_DETACH:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China break;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China case DDI_SUSPEND:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (UATH_IS_RUNNING(sc)) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_new_state(&sc->sc_ic, IEEE80211_S_INIT, -1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_stop(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_LOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags &= ~UATH_FLAG_RUNNING;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_flags |= UATH_FLAG_SUSPEND;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China UATH_UNLOCK(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China default:
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (sc->dev_flags & UATH_FLAG_PRE_FIRMWARE) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ddi_soft_state_free(uath_soft_state_p,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ddi_get_instance(devinfo));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (!UATH_IS_DISCONNECT(sc) && UATH_IS_RUNNING(sc))
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_stop(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_free_cmd_list(sc->sc_cmd, UATH_CMD_LIST_COUNT);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (mac_disable(sc->sc_ic.ic_mach) != 0)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * Unregister from the MAC layer subsystem
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (mac_unregister(sc->sc_ic.ic_mach) != 0)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_FAILURE);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /*
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China * detach ieee80211 layer
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ieee80211_detach(&sc->sc_ic);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* close Tx/Rx pipes */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China uath_close_pipes(sc);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_unregister_hotplug_cbs(devinfo);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&sc->sc_genlock);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&sc->sc_rxlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&sc->sc_rxlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&sc->sc_txlock_cmd);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mutex_destroy(&sc->sc_txlock_data);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China /* pipes will be close in uath_stop() */
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China usb_client_detach(devinfo, sc->sc_udev);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sc->sc_udev = NULL;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ddi_remove_minor_node(devinfo, NULL);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ddi_soft_state_free(uath_soft_state_p, ddi_get_instance(devinfo));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (DDI_SUCCESS);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinaint
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China_info(struct modinfo *modinfop)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (mod_info(&modlinkage, modinfop));
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinaint
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China_init(void)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int status;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China status = ddi_soft_state_init(&uath_soft_state_p,
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China sizeof (struct uath_softc), 1);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (status != 0)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (status);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mac_init_ops(&uath_dev_ops, "uath");
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China status = mod_install(&modlinkage);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (status != 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mac_fini_ops(&uath_dev_ops);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ddi_soft_state_fini(&uath_soft_state_p);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (status);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing Chinaint
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China_fini(void)
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China{
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China int status;
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China status = mod_remove(&modlinkage);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China if (status == 0) {
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China mac_fini_ops(&uath_dev_ops);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China ddi_soft_state_fini(&uath_soft_state_p);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China }
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China return (status);
56f9a274cc7ca7f2d6f19959b2db143d94a4e7e0fei feng - Sun Microsystems - Beijing China}