dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Use is subject to license terms.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Copyright (c) 2008 Atheros Communications Inc.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China *
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Permission to use, copy, modify, and/or distribute this software for any
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * purpose with or without fee is hereby granted, provided that the above
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * copyright notice and this permission notice appear in all copies.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China *
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#ifndef _ARN_CORE_H
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define _ARN_CORE_H
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#ifdef __cplusplus
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaextern "C" {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#endif
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#include <sys/note.h>
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#include <sys/list.h>
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#include <sys/net80211.h>
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#include "arn_ath9k.h"
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#include "arn_rc.h"
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_node;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Node type of wifi device
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#ifndef DDI_NT_NET_WIFI
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define DDI_NT_NET_WIFI "ddi_network:wifi"
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#endif
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_NODENAME "arn"
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_LOCK(_sc) mutex_enter(&(_sc)->sc_genlock)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_UNLOCK(_sc) mutex_exit(&(_sc)->sc_genlock)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_LOCK_ASSERT(_sc) ASSERT(mutex_owned(&(_sc)->sc_genlock))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARRAY_SIZE(x) (sizeof (x) / sizeof (x[0]))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_MIN(a, b) ((a) < (b) ? (a) : (b))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_MAX(a, b) ((a) > (b) ? (a) : (b))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define abs(x) ((x) >= 0 ? (x) : -(x))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaenum ath9k_key_len {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ATH9K_LEN_WEP40 = 5,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ATH9K_LEN_WEP104 = 13,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Sync a DMA area described by a dma_area_t
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_DMA_SYNC(area, flag) ((void) ddi_dma_sync((area).dma_hdl, \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (area).offset, (area).alength, (flag)))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define list_empty(a) ((a)->list_head.list_next == &(a)->list_head)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define list_d2l(a, obj) ((list_node_t *)(((char *)obj) + (a)->list_offset))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define list_object(a, node) ((void *)(((char *)node) - (a)->list_offset))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define list_entry(ptr, type, member) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define list_is_last(node, list) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China ((node)->list_next == &(list)->list_head)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define list_for_each_entry_safe(object, temp, list_t) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China for (object = list_head(list_t), \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China temp = list_object((list_t), ((list_d2l(list_t, object))->list_next));\
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China ((list_d2l(list_t, temp))->list_next) != &((list_t)->list_head);\
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China object = temp, \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China temp = list_object((list_t), (list_d2l(list_t, temp))->list_next))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China/*
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China * Insert src list after dst list. reinitialize src list thereafter.
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinastatic __inline__ void
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China/* LINTED E_STATIC_UNUSED */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinalist_splice_tail_init(list_t *dst, list_t *src)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China{
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China list_node_t *dstnode = &dst->list_head;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China list_node_t *srcnode = &src->list_head;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China ASSERT(dst->list_size == src->list_size);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China ASSERT(dst->list_offset == src->list_offset);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China if (list_empty(src))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China return;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China dstnode->list_prev->list_next = srcnode->list_next;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China srcnode->list_next->list_prev = dstnode->list_prev;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China dstnode->list_prev = srcnode->list_prev;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China srcnode->list_prev->list_next = dstnode;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China /* reinitialize src list */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China srcnode->list_next = srcnode->list_prev = srcnode;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China}
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_LE_READ_16(p) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ((uint16_t) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ((((uint8_t *)(p))[0]) | (((uint8_t *)(p))[1] << 8)))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_LE_READ_32(p) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ((uint32_t) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ((((uint8_t *)(p))[0]) | (((uint8_t *)(p))[1] << 8) | \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (((uint8_t *)(p))[2] << 16) | (((uint8_t *)(p))[3] << 24)))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define swab16(value) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ((((value) & 0xff) << 8) | ((value) >> 8))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define swab32(value) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (((uint32_t)swab16((uint16_t)((value) & 0xffff)) << 16) | \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (uint32_t)swab16((uint16_t)((value) >> 16)))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define swab64(value) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (((uint64_t)swab32((uint32_t)((value) & 0xffffffff)) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China << 32) | \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (uint64_t)swab32((uint32_t)((value) >> 32)))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Bit map related macros. */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define set_bit(i, a) ((a)[(i)/NBBY] |= (1 << ((i)%NBBY)))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define clr_bit(i, a) ((a)[(i)/NBBY] &= ~(1 << ((i)%NBBY)))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define is_set(i, a) ((a)[(i)/NBBY] & (1 << ((i)%NBBY)))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define is_clr(i, a) (!((a)[(i)/NBBY] & (1 << ((i)%NBBY))))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Macro to expand scalars to 64-bit objects */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ito64(x) (sizeof (x) == 8) ? \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (((unsigned long long int)(x)) & (0xff)) : \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (sizeof (x) == 16) ? \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (((unsigned long long int)(x)) & 0xffff) : \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ((sizeof (x) == 32) ? \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (((unsigned long long int)(x)) & 0xffffffff) : \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (unsigned long long int)(x))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* increment with wrap-around */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define INCR(_l, _sz) do { \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (_l)++; \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (_l) &= ((_sz) - 1); \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China } while (0)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* decrement with wrap-around */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define DECR(_l, _sz) do { \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (_l)--; \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (_l) &= ((_sz) - 1); \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China } while (0)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define A_MAX(a, b) ((a) > (b) ? (a) : (b))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define TSF_TO_TU(_h, _l) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ((((uint32_t)(_h)) << 22) | (((uint32_t)(_l)) >> 10))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_TXQ_SETUP(sc, i) ((sc)->sc_txqsetup & (1<<i))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define IEEE80211_IS_CHAN_HTA(_c) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (IEEE80211_IS_CHAN_5GHZ(_c) && \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China ((_c)->ich_flags & IEEE80211_CHAN_HT))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define IEEE80211_IS_CHAN_HTG(_c) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (IEEE80211_IS_CHAN_2GHZ(_c) && \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China ((_c)->ich_flags & IEEE80211_CHAN_HT))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define IEEE80211_IS_DATA(_wh) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (((_wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK) == \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China IEEE80211_FC0_TYPE_DATA)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define IEEE80211_IS_DATA_QOS(_wh) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (((_wh)->i_fc[0] & (IEEE80211_FC0_TYPE_MASK | \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China IEEE80211_FC0_SUBTYPE_QOS)) == \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define IEEE80211_IS_MGMT(_wh) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (((_wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK) == \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China IEEE80211_FC0_TYPE_MGT)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define IEEE80211_IS_CTL(_wh) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (((_wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK) == \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China IEEE80211_FC0_TYPE_CTL)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define IEEE80211_IS_PSPOLL(_wh) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (((_wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK) == \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China IEEE80211_FC0_SUBTYPE_PS_POLL)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define IEEE80211_IS_BACK_REQ(_wh) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (((_wh)->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) == \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China IEEE80211_FC0_SUBTYPE_BAR)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define IEEE80211_HAS_MOREFRAGS(_wh) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (((_wh)->i_fc[1] & IEEE80211_FC1_MORE_FRAG) == \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China IEEE80211_FC1_MORE_FRAG)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Debugging */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaenum ARN_DEBUG {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_HW = 0x00000001,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_REG_IO = 0x00000002,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_QUEUE = 0x00000004,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_EEPROM = 0x00000008,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_XMIT = 0x00000010,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_RECV = 0x00000020,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_CALIBRATE = 0x00000040,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_CHANNEL = 0x00000080,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_INTERRUPT = 0x00000100,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_REGULATORY = 0x00000200,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_ANI = 0x00000400,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_POWER_MGMT = 0x00000800,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_KEYCACHE = 0x00001000,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_BEACON = 0x00002000,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_RATE = 0x00004000,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_INIT = 0x00008000,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_ATTACH = 0x00010000,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_DEATCH = 0x00020000,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_AGGR = 0x00040000,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_RESET = 0x00080000,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_FATAL = 0x00100000,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_ANY = 0x00200000,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ARN_DBG_ALL = 0x00FFFFFF,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Debug and log functions */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_dbg(uint32_t dbg_flags, const int8_t *fmt, ...); /* debug function */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_log(const int8_t *fmt, ...); /* event log function */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_problem(const int8_t *fmt, ...); /* run-time problem function */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#ifdef DEBUG
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_DDB(command) do { \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China { command; } \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China _NOTE(CONSTANTCONDITION)\
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China } while (0)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#else
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_DDB(command)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#endif /* DEBUG */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ARN_DBG(args) ARN_DDB(arn_dbg args)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_stats {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_hardware; /* fatal hardware error interrupts */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rxorn; /* rx overrun interrupts */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rxeol; /* rx eol interrupts */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_txurn; /* tx underrun interrupts */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_mgmt; /* management frames transmitted */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_discard; /* frames discarded prior to assoc */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_invalid; /* frames discarded 'cuz device gone */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_qstop; /* tx queue stopped 'cuz full */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_nobuf; /* tx failed 'cuz no tx buffer (data) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_nobufmgt; /* tx failed 'cuz no tx buffer(mgmt) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_xretries; /* tx failed 'cuz too many retries */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_fifoerr; /* tx failed 'cuz FIFO underrun */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_filtered; /* tx failed 'cuz xmit filtered */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_shortretry; /* tx on-chip retries (short) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_longretry; /* tx on-chip retries (long) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_noack; /* tx frames with no ack marked */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_rts; /* tx frames with rts enabled */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_shortpre; /* tx frames with short preamble */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_altrate; /* tx frames with alternate rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_tx_protect; /* tx frames with protection */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int16_t ast_tx_rssi; /* tx rssi of last ack */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int16_t ast_tx_rssidelta; /* tx rssi delta */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rx_crcerr; /* rx failed 'cuz of bad CRC */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rx_fifoerr; /* rx failed 'cuz of FIFO overrun */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rx_badcrypt; /* rx failed 'cuz decryption */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rx_phyerr; /* rx PHY error summary count */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rx_phy[32]; /* rx PHY error per-code counts */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rx_tooshort; /* rx discarded 'cuz frame too short */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_per_cal; /* periodic calibration calls */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_per_calfail; /* periodic calibration failed */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_per_rfgain; /* periodic calibration rfgain reset */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rate_calls; /* rate control checks */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rate_raise; /* rate control raised xmit rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_rate_drop; /* rate control dropped xmit rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct dma_area {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ddi_acc_handle_t acc_hdl; /* handle for memory */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China caddr_t mem_va; /* CPU VA of memory */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t nslots; /* number of slots */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t size; /* size per slot */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China size_t alength; /* allocated size */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* >= product of above */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ddi_dma_handle_t dma_hdl; /* DMA handle */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China offset_t offset; /* relative to handle */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ddi_dma_cookie_t cookie; /* associated cookie */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ncookies; /* must be 1 */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t token; /* arbitrary identifier */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinatypedef struct dma_area dma_area_t;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Load-time Configuration */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Per-instance load-time (note: NOT run-time)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * configurations for Atheros Device
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_config {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ath_aggr_prot;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t txpowlimit;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t txpowlimit_override;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t cabqReadytime; /* Cabq Readytime % */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t swBeaconProcess; /* Process received beacons in SW (vs HW) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Descriptor Management */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_TXBUF_RESET(_bf) do { \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (_bf)->bf_status = 0; \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (_bf)->bf_lastbf = NULL; \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (_bf)->bf_lastfrm = NULL; \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (_bf)->bf_next = NULL; \
a3ccee74663ff54e66f1516f3eb4e1776af8f274lin wang - Sun Microsystems - Beijing China (void) memset(&((_bf)->bf_state), 0, \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China sizeof (struct ath_buf_state)); \
a3ccee74663ff54e66f1516f3eb4e1776af8f274lin wang - Sun Microsystems - Beijing China (void) memset(&((_bf)->tx_info_priv), 0, \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China sizeof (struct ath_tx_info_priv)); \
a3ccee74663ff54e66f1516f3eb4e1776af8f274lin wang - Sun Microsystems - Beijing China _NOTE(CONSTCOND) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China } while (0)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaenum buffer_type {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_DATA = BIT(0),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_AGGR = BIT(1),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_AMPDU = BIT(2),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_HT = BIT(3),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_RETRY = BIT(4),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_XRETRY = BIT(5),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_SHORT_PREAMBLE = BIT(6),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_BAR = BIT(7),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_PSPOLL = BIT(8),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_AGGR_BURST = BIT(9),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China BUF_CALC_AIRTIME = BIT(10),
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_buf_state {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int bfs_nframes; /* # frames in aggregate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t bfs_al; /* length of aggregate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t bfs_frmlen; /* length of frame */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int bfs_seqno; /* sequence number */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int bfs_tidno; /* tid of this frame */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int bfs_retries; /* current retries */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t bf_type; /* BUF_* (enum buffer_type) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* key type used to encrypt this frame */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t bfs_keyix;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China enum ath9k_key_type bfs_keytype;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_nframes bf_state.bfs_nframes
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_al bf_state.bfs_al
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_frmlen bf_state.bfs_frmlen
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_retries bf_state.bfs_retries
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_seqno bf_state.bfs_seqno
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_tidno bf_state.bfs_tidno
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_rcs bf_state.bfs_rcs
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_keyix bf_state.bfs_keyix
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_keytype bf_state.bfs_keytype
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_isdata(bf) (bf->bf_state.bf_type & BUF_DATA)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_isaggr(bf) (bf->bf_state.bf_type & BUF_AGGR)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_isampdu(bf) (bf->bf_state.bf_type & BUF_AMPDU)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_isht(bf) (bf->bf_state.bf_type & BUF_HT)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_isretried(bf) (bf->bf_state.bf_type & BUF_RETRY)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_isxretried(bf) (bf->bf_state.bf_type & BUF_XRETRY)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_isshpreamble(bf) (bf->bf_state.bf_type & BUF_SHORT_PREAMBLE)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_isbar(bf) (bf->bf_state.bf_type & BUF_BAR)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_ispspoll(bf) (bf->bf_state.bf_type & BUF_PSPOLL)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define bf_isaggrburst(bf) (bf->bf_state.bf_type & BUF_AGGR_BURST)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Abstraction of a contiguous buffer to transmit/receive.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * There is only a single hw descriptor encapsulated here.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_buf {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* last buf of this unit (a frame or an aggregate) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_buf *bf_lastbf;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_buf *bf_lastfrm; /* last buf of this frame */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_buf *bf_next; /* next subframe in the aggregate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China mblk_t *bf_m;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_desc *bf_desc; /* virtual addr of desc */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t bf_daddr; /* physical addr of desc */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China dma_area_t bf_dma; /* dma area for buf */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ieee80211_node *bf_in; /* pointer to the node */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t bf_status;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t bf_flags; /* tx descriptor flags */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_buf_state bf_state; /* buffer state */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China /* Temp workground for rc */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China struct ath9k_tx_rate rates[4];
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China struct ath_tx_info_priv tx_info_priv;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China /* we're in list of sc->sc_txbuf_list or sc->sc_rxbuf_list */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China list_node_t bf_node;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * reset the rx buffer.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * any new fields added to the athbuf and require
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * reset need to be added to this macro.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * currently bf_status is the only one requires that
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * requires reset.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_RXBUF_RESET(_bf) ((_bf)->bf_status = 0)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* hw processing complete, desc processed by hal */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_BUFSTATUS_DONE 0x00000001
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* hw processing complete, desc hold for hw */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_BUFSTATUS_STALE 0x00000002
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Rx-only: OS is done with this packet and it's ok to queued it to hw */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_BUFSTATUS_FREE 0x00000004
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* RX / TX */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_MAX_ANTENNA 3
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_RXBUF 512
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define WME_NUM_TID 16
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_rx_buf_link(struct arn_softc *sc, struct ath_buf *bf);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaint arn_startrecv(struct arn_softc *sc);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaboolean_t arn_stoprecv(struct arn_softc *sc);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_flushrecv(struct arn_softc *sc);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinauint32_t arn_calcrxfilter(struct arn_softc *sc);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaint arn_rx_init(struct arn_softc *sc, int nbufs);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_rx_cleanup(struct arn_softc *sc);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinauint_t arn_softint_handler(caddr_t data);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_setdefantenna(struct arn_softc *sc, uint32_t antenna);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_TXBUF 512
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* max number of transmit attempts (tries) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_TXMAXTRY 13
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* max number of 11n transmit attempts (tries) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_11N_TXMAXTRY 10
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* max number of tries for management and control frames */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_MGT_TXMAXTRY 4
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define WME_BA_BMP_SIZE 64
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define WME_MAX_BA WME_BA_BMP_SIZE
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_TID_MAX_BUFS (2 * WME_MAX_BA)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Wireless Multimedia Extension Defines */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define WME_AC_BE 0 /* best effort */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define WME_AC_BK 1 /* background */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define WME_AC_VI 2 /* video */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define WME_AC_VO 3 /* voice */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define WME_NUM_AC 4
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Data transmit queue state. One of these exists for each
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * hardware transmit queue. Packets sent to us from above
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * are assigned to queues based on their priority. Not all
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * devices support a complete set of hardware transmit queues.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * For those devices the array sc_ac2q will map multiple
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * priorities to fewer hardware queues (typically all to one
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * hardware queue).
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_txq {
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint32_t axq_qnum; /* hardware q number */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t *axq_link; /* link ptr in last TX desc */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China list_t axq_list; /* transmit queue */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China kmutex_t axq_lock; /* lock on q and link */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China unsigned long axq_lockflags; /* intr state when must cli */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint32_t axq_depth; /* queue depth (stat only) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t axq_aggr_depth; /* aggregates queued */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t axq_totalqueued; /* total ever queued */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China boolean_t stopped;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_buf *axq_linkbuf; /* virtual addr of last buffer */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* first desc of the last descriptor that contains CTS */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_desc *axq_lastdsWithCTS;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China /*
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China * final desc of the gating desc that determines whether
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China * lastdsWithCTS has been DMA'ed or not
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China struct ath_desc *axq_gatingds;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China list_t axq_acq;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint32_t axq_intrcnt; /* interrupt count */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define AGGR_CLEANUP BIT(1)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define AGGR_ADDBA_COMPLETE BIT(2)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define AGGR_ADDBA_PROGRESS BIT(3)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* per TID aggregate tx state for a destination */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_atx_tid {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China list_node_t list;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China list_t buf_q;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_node *an;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_atx_ac *ac;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_buf *tx_buf[ATH_TID_MAX_BUFS]; /* active tx frames */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t seq_start;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t seq_next;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t baw_size;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int tidno;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int baw_head; /* first un-acked tx buffer */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int baw_tail; /* next unused tx buffer slot */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int sched;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int paused;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t state;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int addba_exchangeattempts;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* per access-category aggregate tx state for a destination */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_atx_ac {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int sched; /* dest-ac is scheduled */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int qnum; /* H/W queue number associated with this AC */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China list_node_t list;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China list_t tid_q;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* per dest tx state */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_atx {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_atx_tid tid[WME_NUM_TID];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_atx_ac ac[WME_NUM_AC];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* per-frame tx control block */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_tx_control {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_txq *txq;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int if_id;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* per frame tx status block */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_xmit_status {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* number of retries to successufully transmit this frame */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int retries;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int flags; /* status of transmit */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_TX_ERROR 0x01
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_TX_XRETRY 0x02
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_TX_BAR 0x04
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_tx_stat {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int rssi; /* RSSI (noise floor ajusted) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int rssictl[ATH_MAX_ANTENNA]; /* RSSI (noise floor ajusted) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int rssiextn[ATH_MAX_ANTENNA]; /* RSSI (noise floor ajusted) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int rateieee; /* data rate xmitted (IEEE rate code) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int rateKbps; /* data rate xmitted (Kbps) */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int ratecode; /* phy rate code */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int flags; /* validity flags */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* if any of ctl,extn chain rssis are valid */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_TX_CHAIN_RSSI_VALID 0x01
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* if extn chain rssis are valid */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_TX_RSSI_EXTN_VALID 0x02
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t airtime; /* time on air per final tx rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinavoid arn_tx_node_init(struct arn_softc *sc, struct ath_node *an);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinavoid arn_tx_node_cleanup(struct arn_softc *sc, struct ieee80211_node *in);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_txq *arn_txq_setup(struct arn_softc *sc, int qtype, int subtype);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_tx_cleanupq(struct arn_softc *sc, struct ath_txq *txq);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaint arn_tx_setup(struct arn_softc *sc, int haltype);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_draintxq(struct arn_softc *sc, boolean_t retry_tx);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_tx_draintxq(struct arn_softc *sc, struct ath_txq *txq);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinavoid arn_txq_schedule(struct arn_softc *sc, struct ath_txq *txq);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaint arn_tx(ieee80211com_t *ic, mblk_t *mp, uint8_t type);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaint arn_txq_update(struct arn_softc *sc, int qnum,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath9k_tx_queue_info *qinfo);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_tx_int_proc(void *arg);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Node / Aggregation */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ADDBA_EXCHANGE_ATTEMPTS 10
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_AGGR_DELIM_SZ 4 /* delimiter size */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_AGGR_MINPLEN 256 /* in bytes, minimum packet length */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* number of delimiters for encryption padding */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_AGGR_ENCRYPTDELIM 10
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* minimum h/w qdepth to be sustained to maximize aggregation */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_AGGR_MIN_QDEPTH 2
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_AMPDU_SUBFRAME_DEFAULT 32
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define IEEE80211_SEQ_SEQ_SHIFT 4
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define IEEE80211_SEQ_MAX 4096
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define IEEE80211_MIN_AMPDU_BUF 0x8
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define IEEE80211_HTCAP_MAXRXAMPDU_FACTOR 13
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * return whether a bit at index _n in bitmap _bm is set
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * _sz is the size of the bitmap
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_BA_ISSET(_bm, _n) (((_n) < (WME_BA_BMP_SIZE)) && \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ((_bm)[(_n) >> 5] & (1 << ((_n) & 31))))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* return block-ack bitmap index given sequence and starting sequence */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_BA_INDEX(_st, _seq) (((_seq) - (_st)) & (IEEE80211_SEQ_MAX - 1))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* returns delimiter padding required given the packet length */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_AGGR_GET_NDELIM(_len) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (((((_len) + ATH_AGGR_DELIM_SZ) < ATH_AGGR_MINPLEN) ? \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China (ATH_AGGR_MINPLEN - (_len) - ATH_AGGR_DELIM_SZ) : 0) >> 2)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define BAW_WITHIN(_start, _bawsz, _seqno) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ((((_seqno) - (_start)) & 4095) < (_bawsz))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_DS_BA_SEQ(_ds) ((_ds)->ds_us.tx.ts_seqnum)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_DS_BA_BITMAP(_ds) (&(_ds)->ds_us.tx.ba_low)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_DS_TX_BA(_ds) ((_ds)->ds_us.tx.ts_flags & ATH9K_TX_BA)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_AN_2_TID(_an, _tidno) (&(_an)->tid[(_tidno)])
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_TX_ERROR 0x01
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_TX_XRETRY 0x02
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_TX_BAR 0x04
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaenum ATH_AGGR_STATUS {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ATH_AGGR_DONE,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ATH_AGGR_BAW_CLOSED,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ATH_AGGR_LIMITED,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct aggr_rifs_param {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int param_max_frames;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int param_max_len;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int param_rl;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int param_al;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_rc_series *param_rcs;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China/* RSSI correction */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinavoid ath9k_init_nfcal_hist_buffer(struct ath_hal *ah);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define AR_PHY_CCA_MAX_AR5416_GOOD_VALUE -85
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define AR_PHY_CCA_MAX_AR9280_GOOD_VALUE -112
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define AR_PHY_CCA_MAX_AR9285_GOOD_VALUE -118
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_RSSI_LPF_LEN 10
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define RSSI_LPF_THRESHOLD -20
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH9K_RSSI_BAD -128
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_RSSI_EP_MULTIPLIER (1<<7)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_EP_MUL(x, mul) ((x) * (mul))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_RSSI_IN(x) (ATH_EP_MUL((x), ATH_RSSI_EP_MULTIPLIER))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_LPF_RSSI(x, y, len) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China ((x != ATH_RSSI_DUMMY_MARKER) ? \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China (((x) * ((len) - 1) + (y)) / (len)) : (y))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_RSSI_LPF(x, y) do { \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China if ((y) >= RSSI_LPF_THRESHOLD) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China x = ATH_LPF_RSSI((x), ATH_RSSI_IN((y)), ATH_RSSI_LPF_LEN); \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China} while (0)
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China#define ATH_EP_RND(x, mul) \
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China ((((x)%(mul)) >= ((mul)/2)) ? ((x) + ((mul) - 1)) / (mul) : (x)/(mul))
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* driver-specific node state */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_node {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ieee80211_node an_node; /* base class */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t an_tx_times; /* rate ctl times on one rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t an_tx_ok; /* tx ok pkt */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t an_tx_err; /* tx !ok pkt */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t an_tx_retr; /* tx retry count */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int32_t an_tx_upper; /* tx upper rate req cnt */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t an_tx_antenna; /* antenna for last good frame */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_rix0; /* series 0 rate index */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_try0; /* series 0 try count */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_mgtrate; /* h/w rate for management/ctl frames */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_mgtratesp; /* short preamble h/w rate for " " */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_rate0; /* series 0 h/w rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_rate1; /* series 1 h/w rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_rate2; /* series 2 h/w rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_rate3; /* series 3 h/w rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_rate0sp; /* series 0 short preamble h/w rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_rate1sp; /* series 1 short preamble h/w rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_rate2sp; /* series 2 short preamble h/w rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t an_tx_rate3sp; /* series 3 short preamble h/w rate */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China struct ath_rate_priv rate_priv;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China struct ath_atx_tid tid[WME_NUM_TID];
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China struct ath_atx_ac ac[WME_NUM_AC];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t maxampdu;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t mpdudensity;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China int last_rssi;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_NODE(_n) ((struct ath_node *)(_n))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Define the scheme that we select MAC address for multiple
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * BSS on the same radio. The very first VAP will just use the MAC
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * address from the EEPROM. For the next 3 VAPs, we set the
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * U/L bit (bit 1) in MAC address, and use the next two bits as the
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * index of the VAP.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_SET_VAP_BSSID_MASK(bssid_mask) \
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ((bssid_mask)[0] &= ~(((ATH_BCBUF-1)<<2)|0x02))
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* driver-specific vap state */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_vap {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int av_bslot; /* beacon slot index */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China enum ath9k_opmode av_opmode; /* VAP operational mode */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_buf *av_bcbuf; /* beacon buffer */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_tx_control av_btxctl; /* txctl information for beacon */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Beacon Handling */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Regardless of the number of beacons we stagger, (i.e. regardless of the
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * number of BSSIDs) if a given beacon does not go out even after waiting this
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * number of beacon intervals, the game's up.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define BSTUCK_THRESH (9 * ATH_BCBUF)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_BCBUF 4 /* number of beacon buffers */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_DEFAULT_BINTVAL 100 /* default beacon interval in TU */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_DEFAULT_BMISS_LIMIT 10
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define IEEE80211_MS_TO_TU(x) (((x) * 1000) / 1024)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* beacon configuration */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_beacon_config {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t beacon_interval;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t listen_interval;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t dtim_period;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t bmiss_timeout;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t dtim_count;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t tim_offset;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China union {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint64_t last_tsf;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t last_tstamp[8];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China } u; /* last received beacon/probe response timestamp of this BSS. */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinauint32_t arn_beaconq_setup(struct ath_hal *ah);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaint arn_beacon_alloc(struct arn_softc *sc, struct ieee80211_node *in);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_beacon_config(struct arn_softc *sc);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_beacon_return(struct arn_softc *sc);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_beacon_sync(struct arn_softc *sc);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_bmiss_proc(void *arg);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid arn_recv_mgmt(struct ieee80211com *ic, mblk_t *mp,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ieee80211_node *in, int subtype, int rssi, uint32_t rstamp);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* ANI */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * ANI values for STA only.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * FIXME: Add appropriate values for AP later
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_ANI_POLLINTERVAL 100 /* 100 milliseconds between ANI poll */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_SHORT_CALINTERVAL 1000 /* 1 second between calibrations */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_LONG_CALINTERVAL 30000 /* 30 seconds between calibrations */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_RESTART_CALINTERVAL 1200000 /* 20 minutes between calibrations */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_ani {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China boolean_t sc_caldone;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int16_t sc_noise_floor;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China unsigned int sc_longcal_timer;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China unsigned int sc_shortcal_timer;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China unsigned int sc_resetcal_timer;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China unsigned int sc_checkani_timer;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* LED Control */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_LED_PIN 1
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaenum ath_led_type {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ATH_LED_RADIO,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ATH_LED_ASSOC,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ATH_LED_TX,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ATH_LED_RX
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct ath_led {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct arn_softc *sc;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China enum ath_led_type led_type;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China char name[32];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China boolean_t registered;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Rfkill */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_RFKILL_POLL_INTERVAL 2000 /* msecs */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/* Main driver core */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Default cache line size, in bytes.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Used when PCI device not fully initialized by bootrom/BIOS
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define DEFAULT_CACHELINE 32
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_DEFAULT_NOISE_FLOOR -95
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_REGCLASSIDS_MAX 10
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_CABQ_READY_TIME 80 /* % of beacon interval */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_MAX_SW_RETRIES 10
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_CHAN_MAX 255
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define IEEE80211_WEP_NKID 4 /* number of key ids */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define IEEE80211_RATE_VAL 0x7f
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * The key cache is used for h/w cipher state and also for
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * tracking station state such as the current tx antenna.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * We also setup a mapping table between key cache slot indices
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * and station state to short-circuit node lookups on rx.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Different parts have different size key caches. We handle
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * up to ATH_KEYMAX entries (could dynamically allocate state).
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_KEYMAX 128 /* max key cache size we handle */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_IF_ID_ANY 0xff
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_TXPOWER_MAX 100 /* .5 dBm units */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_RSSI_DUMMY_MARKER 0x127
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define ATH_RATE_DUMMY_MARKER 0
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaenum PROT_MODE {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China PROT_M_NONE = 0,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China PROT_M_RTSCTS,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China PROT_M_CTSONLY
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_INVALID BIT(0)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_BEACONS BIT(1)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_RXAGGR BIT(2)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_TXAGGR BIT(3)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_CHAINMASK_UPDATE BIT(4)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_FULL_RESET BIT(5)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_NO_RESET BIT(6)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_PREAMBLE_SHORT BIT(7)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_PROTECT_ENABLE BIT(8)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_RXFLUSH BIT(9)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_LED_ASSOCIATED BIT(10)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_RFKILL_REGISTERED BIT(11)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_RFKILL_SW_BLOCKED BIT(12)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#define SC_OP_RFKILL_HW_BLOCKED BIT(13)
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China/* HT */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinatypedef struct ht_conf {
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China boolean_t ht_supported;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint16_t cap;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint8_t ampdu_factor;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint8_t ampdu_density;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint8_t rx_mcs_mask[10];
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China} arn_ht_conf;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinauint8_t parse_mpdudensity(uint8_t mpdudensity);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinavoid arn_ampdu_recv_action(struct ieee80211_node *in,
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China const uint8_t *frm, const uint8_t *efrm);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinaint arn_ampdu_send_action(struct ieee80211_node *in,
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China int category, int action, uint16_t args[4]);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinavoid arn_dump_line(unsigned char *p, uint32_t len, boolean_t isaddress,
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint32_t group);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinavoid arn_dump_pkg(unsigned char *p, uint32_t len, boolean_t isaddress,
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint32_t group);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinastruct arn_softc {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ieee80211com_t sc_isc; /* IEEE 802.11 common */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China dev_info_t *sc_dev; /* back pointer to dev_info_t */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ddi_taskq_t *sc_tq; /* private task queue */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_hal *sc_ah;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_config sc_config;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China caddr_t mem;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_isrunning; /* device is operational */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_mrretry; /* multi-rate retry support */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_have11g; /* have 11g support */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_bsync; /* beacon sync */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ddi_acc_handle_t sc_cfg_handle; /* DDI I/O handle */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ddi_acc_handle_t sc_io_handle; /* DDI I/O handle */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ddi_acc_handle_t sc_EEPROM_handle; /* DDI I/O handle */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ddi_iblock_cookie_t sc_iblock;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China ddi_softintr_t sc_softint_id;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China /* 802.11n/HT capabilities */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China arn_ht_conf sc_ht_conf;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China void (*sc_recv_action)(ieee80211_node_t *,
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China const uint8_t *, const uint8_t *);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China int (*sc_send_action)(ieee80211_node_t *,
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China int, int, uint16_t[4]);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* TX/RX descriptors */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_desc *sc_desc;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* descriptor structure */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China dma_area_t sc_desc_dma;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* pointer to the first "struct ath_buf" */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_buf *sc_vbufptr;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* length of all allocated "struct ath_buf" */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t sc_vbuflen;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* size of one DMA TX/RX buffer based on 802.11 MTU */
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint32_t tx_dmabuf_size;
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China uint32_t rx_dmabuf_size;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_curbssid[6];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_myaddr[6];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_bssidmask[6];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int sc_debug;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t sc_intrstatus;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t sc_flags; /* SC_OP_* */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China unsigned int rx_filter;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t sc_curtxpow;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t sc_curaid;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t sc_cachelsz;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int sc_slotupdate; /* slot to next advance fsm */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int sc_slottime;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int sc_bslot[ATH_BCBUF];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_tx_chainmask;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_rx_chainmask;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China enum ath9k_int sc_imask;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China enum PROT_MODE sc_protmode;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_nbcnvaps; /* # of vaps sending beacons */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t sc_nvaps; /* # of active virtual ap's */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_mcastantenna;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_defant; /* current default antenna */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_rxotherant; /* rx's on non-default antenna */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath9k_node_stats sc_halstats; /* station-mode rssi stats */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China enum ath9k_ht_extprotspacing sc_ht_extprotspacing;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China enum ath9k_ht_macmode tx_chan_width;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China enum {
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China OK, /* no change needed */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China UPDATE, /* update pending */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China COMMIT /* beacon sent, commit change */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China } sc_updateslot; /* slot time update fsm */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* Crypto */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t sc_keymax; /* size of key cache */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_keymap[16]; /* bit map of key cache use */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_splitmic; /* split TKIP MIC keys */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* RX */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China list_t sc_rxbuf_list;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int sc_rxbufsize; /* rx size based on mtu */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t *sc_rxlink; /* link ptr in last RX desc */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t sc_rx_pend;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint64_t sc_lastrx; /* tsf at last rx'd frame */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* TX */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China list_t sc_txbuf_list;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_txq sc_txq[ATH9K_NUM_TX_QUEUES];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t sc_txqsetup;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int sc_haltype2q[ATH9K_WME_AC_VO+1]; /* HAL WME AC -> h/w qnum */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint16_t seq_no; /* TX sequence number */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* Beacon */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath9k_tx_queue_info sc_beacon_qi;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_txq *sc_cabq;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China list_t sc_bcbuf_list; /* beacon buffer */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t sc_beaconq;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t sc_bmisscount;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t ast_be_xmit; /* beacons transmitted */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint64_t bc_tstamp;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ieee80211_beacon_offsets asc_boff; /* dynamic update state */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* Rate */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_rate_table *hw_rate_table[ATH9K_MODE_MAX];
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_rate_table *sc_currates; /* current rate table */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t asc_rixmap[256]; /* IEEE to h/w rate table ix */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_protrix; /* protection rate index */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* mode */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China enum wireless_mode sc_curmode; /* current phy mode */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* Channel, Band */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath9k_channel sc_curchan;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* Locks */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China kmutex_t sc_genlock;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China kmutex_t sc_serial_rw;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China kmutex_t sc_rxbuflock; /* recv lock */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China kmutex_t sc_txbuflock; /* txbuf lock */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China kmutex_t sc_rxflushlock;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China kmutex_t sc_resetlock;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China kmutex_t sc_bcbuflock; /* beacon buffer lock */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China kmutex_t sc_resched_lock;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China boolean_t sc_resched_needed;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* LEDs */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_led radio_led;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_led assoc_led;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_led tx_led;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_led rx_led;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint8_t sc_mcast_refs[64]; /* refer count */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China uint32_t sc_mcast_hash[2]; /* multicast hash table */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* Rfkill */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* ANI */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_ani sc_ani;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China /* interface statistics */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China struct ath_stats sc_stats;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China boolean_t sc_promisc; /* Promiscuous mode enabled */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China timeout_id_t sc_scan_timer;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China timeout_id_t sc_cal_timer;
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int (*sc_newstate)(ieee80211com_t *, enum ieee80211_state, int);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China void (*sc_recv_mgmt)(ieee80211com_t *, mblk_t *, ieee80211_node_t *,
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China int, int, uint32_t);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China};
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaint arn_reset(ieee80211com_t *ic);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaint arn_get_hal_qnum(uint16_t queue, struct arn_softc *sc);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaint ath_cabq_update(struct arn_softc *);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing Chinavoid arn_update_chainmask(struct arn_softc *sc);
c0c934808d1b7d058148814255f32064a0e09555lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China/*
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * Read and write, they both share the same lock. We do this to serialize
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * reads and writes on Atheros 802.11n PCI devices only. This is required
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * as the FIFO on these devices can only accept sanely 2 requests. After
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * that the device goes bananas. Serializing the reads/writes prevents this
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China * from happening.
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China */
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinavoid
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaarn_iowrite32(struct ath_hal *ah, uint32_t reg_offset, uint32_t val);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaunsigned int
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing Chinaarn_ioread32(struct ath_hal *ah, uint32_t reg_offset);
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#ifdef __cplusplus
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China}
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#endif
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China
dd1de3740722a4b99a74005255effebbd20a6d70lin wang - Sun Microsystems - Beijing China#endif /* _ARN_CORE_H */