From owner-svn-src-user@FreeBSD.ORG Fri Jan 23 07:00:34 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 323771065708; Fri, 23 Jan 2009 07:00:34 +0000 (UTC) (envelope-from sam@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 20EF68FC2F; Fri, 23 Jan 2009 07:00:34 +0000 (UTC) (envelope-from sam@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n0N70XLe034185; Fri, 23 Jan 2009 07:00:33 GMT (envelope-from sam@svn.freebsd.org) Received: (from sam@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n0N70XZJ034176; Fri, 23 Jan 2009 07:00:33 GMT (envelope-from sam@svn.freebsd.org) Message-Id: <200901230700.n0N70XZJ034176@svn.freebsd.org> From: Sam Leffler Date: Fri, 23 Jan 2009 07:00:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r187620 - in user/sam/wifi/sys/dev/ath: . ath_hal ath_hal/ar5210 ath_hal/ar5211 ath_hal/ar5212 ath_hal/ar5312 ath_hal/ar5416 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 Jan 2009 07:00:34 -0000 Author: sam Date: Fri Jan 23 07:00:33 2009 New Revision: 187620 URL: http://svn.freebsd.org/changeset/base/187620 Log: Checkpoint gutting of HAL_CHANNEL: o replace uses of HAL_CHANNEL by struct ieee80211_channel o remove HAL_CHANNEL shadow state from HAL_CHANNEL_PRIVATE; instead users are given an ieee80211_channel and if they need private state they use ic_devdata to find the private channel (shrinks private chans by 12 bytes) o pack the private channel array (one entry per frequency) o mark 802.11 channels directly when interference is detected o use ic_devdata to index into ani state cache; note this consolidates state for enumerated channels so can change behaviour (e.g. for b/g and turbo combinations) o remove private mhz2->ieee conversion routines as we now get the ieee channel number directly from ic_ieee o setup 11g channels with correct channel flags (used to mark them pureg and then futz the flags when constructing net80211 channels) o remove conversion code in regulatory routines now that we don't do any conversion to/from private/internal data structures o de-inline ath_hal_getantennareduction Note: HAL_CHANNEL_PRIVATE temporarily shadows the frequency to validate lookups and facilitate noise floor processing; this will go away soon Note: ath_hal_computetxtime needs take a channel to eliminate use of ah_curchan (possibly other routines too) Note: channel interference handling should be moved to a callback so we can const'ify parameters and eliminate assumptions about when/how detection is done Note: private channel table can shrink and ani state table should be the same size to avoid checking references Note: ath_hal_checkchannel should be inlined when we stop validating lookups Note: privFlags can go away if we move CHANNEL_IQVALID elsewhere but might be worth keeping as removing it won't shrink HAL_CHANNEL_PRIVATE Note: purge direct use of ic_flags (e.g. in switch statements) Tested in sta mode on 5210, 5211, 5416, and a wide variety of 5212 cards in normal modes; turbo modes need testing. Modified: user/sam/wifi/sys/dev/ath/ (props changed) user/sam/wifi/sys/dev/ath/ath_hal/ah.c user/sam/wifi/sys/dev/ath/ath_hal/ah.h user/sam/wifi/sys/dev/ath/ath_hal/ah_internal.h user/sam/wifi/sys/dev/ath/ath_hal/ah_regdomain.c user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210.h user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c user/sam/wifi/sys/dev/ath/ath_hal/ar5211/ar5211.h user/sam/wifi/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c user/sam/wifi/sys/dev/ath/ath_hal/ar5211/ar5211_misc.c user/sam/wifi/sys/dev/ath/ath_hal/ar5211/ar5211_reset.c user/sam/wifi/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar2316.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar2317.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar2413.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar2425.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5111.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5112.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5212.h user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5212_ani.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5212_reset.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c user/sam/wifi/sys/dev/ath/ath_hal/ar5212/ar5413.c user/sam/wifi/sys/dev/ath/ath_hal/ar5312/ar5312.h user/sam/wifi/sys/dev/ath/ath_hal/ar5312/ar5312_reset.c user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar2133.c user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar5416.h user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar5416_cal.h user/sam/wifi/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c user/sam/wifi/sys/dev/ath/if_ath.c user/sam/wifi/sys/dev/ath/if_athvar.h Modified: user/sam/wifi/sys/dev/ath/ath_hal/ah.c ============================================================================== --- user/sam/wifi/sys/dev/ath/ath_hal/ah.c Fri Jan 23 06:33:39 2009 (r187619) +++ user/sam/wifi/sys/dev/ath/ath_hal/ah.c Fri Jan 23 07:00:33 2009 (r187620) @@ -161,8 +161,10 @@ ath_hal_computetxtime(struct ath_hal *ah kbps = rates->info[rateix].rateKbps; /* * index can be invalid duting dynamic Turbo transitions. + * XXX */ - if(kbps == 0) return 0; + if (kbps == 0) + return 0; switch (rates->info[rateix].phy) { case IEEE80211_T_CCK: @@ -196,8 +198,8 @@ ath_hal_computetxtime(struct ath_hal *ah #define OFDM_PLCP_BITS_QUARTER 22 #define OFDM_SYMBOL_TIME_QUARTER 16 - if (AH_PRIVATE(ah)->ah_curchan && - IS_CHAN_QUARTER_RATE(AH_PRIVATE(ah)->ah_curchan)) { + if (AH_PRIVATE(ah)->ah_curchan != AH_NULL && + IEEE80211_IS_CHAN_QUARTER(AH_PRIVATE(ah)->ah_curchan)) { bitsPerSymbol = (kbps * OFDM_SYMBOL_TIME_QUARTER) / 1000; HALASSERT(bitsPerSymbol != 0); @@ -206,8 +208,8 @@ ath_hal_computetxtime(struct ath_hal *ah txTime = OFDM_SIFS_TIME_QUARTER + OFDM_PREAMBLE_TIME_QUARTER + (numSymbols * OFDM_SYMBOL_TIME_QUARTER); - } else if (AH_PRIVATE(ah)->ah_curchan && - IS_CHAN_HALF_RATE(AH_PRIVATE(ah)->ah_curchan)) { + } else if (AH_PRIVATE(ah)->ah_curchan != AH_NULL && + IEEE80211_IS_CHAN_HALF(AH_PRIVATE(ah)->ah_curchan)) { bitsPerSymbol = (kbps * OFDM_SYMBOL_TIME_HALF) / 1000; HALASSERT(bitsPerSymbol != 0); @@ -272,15 +274,15 @@ typedef enum { } WIRELESS_MODE; static WIRELESS_MODE -ath_hal_chan2wmode(struct ath_hal *ah, const HAL_CHANNEL_INTERNAL *chan) +ath_hal_chan2wmode(struct ath_hal *ah, const struct ieee80211_channel *chan) { - if (IS_CHAN_CCK(chan)) + if (IEEE80211_IS_CHAN_B(chan)) return WIRELESS_MODE_11b; - if (IS_CHAN_G(chan)) + if (IEEE80211_IS_CHAN_G(chan)) return WIRELESS_MODE_11g; - if (IS_CHAN_108G(chan)) + if (IEEE80211_IS_CHAN_108G(chan)) return WIRELESS_MODE_108g; - if (IS_CHAN_TURBO(chan)) + if (IEEE80211_IS_CHAN_TURBO(chan)) return WIRELESS_MODE_TURBO; return WIRELESS_MODE_11a; } @@ -294,17 +296,17 @@ static const uint8_t CLOCK_RATE[] = { 4 u_int ath_hal_mac_clks(struct ath_hal *ah, u_int usecs) { - const HAL_CHANNEL_INTERNAL *c = AH_PRIVATE(ah)->ah_curchan; + const struct ieee80211_channel *c = AH_PRIVATE(ah)->ah_curchan; u_int clks; /* NB: ah_curchan may be null when called attach time */ if (c != AH_NULL) { clks = usecs * CLOCK_RATE[ath_hal_chan2wmode(ah, c)]; - if (IS_CHAN_HT40(c)) + if (IEEE80211_IS_CHAN_HT40(c)) clks <<= 1; - else if (IS_CHAN_HALF_RATE(c)) + else if (IEEE80211_IS_CHAN_HALF(c)) clks >>= 1; - else if (IS_CHAN_QUARTER_RATE(c)) + else if (IEEE80211_IS_CHAN_QUARTER(c)) clks >>= 2; } else clks = usecs * CLOCK_RATE[WIRELESS_MODE_11b]; @@ -314,17 +316,17 @@ ath_hal_mac_clks(struct ath_hal *ah, u_i u_int ath_hal_mac_usec(struct ath_hal *ah, u_int clks) { - const HAL_CHANNEL_INTERNAL *c = AH_PRIVATE(ah)->ah_curchan; + const struct ieee80211_channel *c = AH_PRIVATE(ah)->ah_curchan; u_int usec; /* NB: ah_curchan may be null when called attach time */ if (c != AH_NULL) { usec = clks / CLOCK_RATE[ath_hal_chan2wmode(ah, c)]; - if (IS_CHAN_HT40(c)) + if (IEEE80211_IS_CHAN_HT40(c)) usec >>= 1; - else if (IS_CHAN_HALF_RATE(c)) + else if (IEEE80211_IS_CHAN_HALF(c)) usec <<= 1; - else if (IS_CHAN_QUARTER_RATE(c)) + else if (IEEE80211_IS_CHAN_QUARTER(c)) usec <<= 2; } else usec = clks / CLOCK_RATE[WIRELESS_MODE_11b]; @@ -704,7 +706,7 @@ static const int16_t NOISE_FLOOR[] = { - * implement the ah_getChanNoise method. */ int16_t -ath_hal_getChanNoise(struct ath_hal *ah, const HAL_CHANNEL *chan) +ath_hal_getChanNoise(struct ath_hal *ah, const struct ieee80211_channel *chan) { HAL_CHANNEL_INTERNAL *ichan; @@ -712,11 +714,11 @@ ath_hal_getChanNoise(struct ath_hal *ah, if (ichan == AH_NULL) { HALDEBUG(ah, HAL_DEBUG_NFCAL, "%s: invalid channel %u/0x%x; no mapping\n", - __func__, chan->channel, chan->channelFlags); + __func__, chan->ic_freq, chan->ic_flags); return 0; } if (ichan->rawNoiseFloor == 0) { - WIRELESS_MODE mode = ath_hal_chan2wmode(ah, ichan); + WIRELESS_MODE mode = ath_hal_chan2wmode(ah, chan); HALASSERT(mode < WIRELESS_MODE_MAX); return NOISE_FLOOR[mode] + ath_hal_getNfAdjust(ah, ichan); @@ -751,8 +753,8 @@ ath_hal_process_noisefloor(struct ath_ha c = &AH_PRIVATE(ah)->ah_channels[i]; if (c->rawNoiseFloor >= 0) continue; - mode = ath_hal_chan2wmode(ah, c); - HALASSERT(mode < WIRELESS_MODE_MAX); + /* XXX can't identify proper mode */ + mode = IS_CHAN_5GHZ(c) ? WIRELESS_MODE_11a : WIRELESS_MODE_11g; nf = c->rawNoiseFloor + NOISE_FLOOR[mode] + ath_hal_getNfAdjust(ah, c); if (IS_CHAN_5GHZ(c)) { @@ -778,9 +780,8 @@ ath_hal_process_noisefloor(struct ath_ha /* Apply correction factor */ c->noiseFloorAdjust = ath_hal_getNfAdjust(ah, c) + (IS_CHAN_5GHZ(c) ? correct5 : correct2); - HALDEBUG(ah, HAL_DEBUG_NFCAL, "%u/0x%x raw nf %d adjust %d\n", - c->channel, c->channelFlags, c->rawNoiseFloor, - c->noiseFloorAdjust); + HALDEBUG(ah, HAL_DEBUG_NFCAL, "%u raw nf %d adjust %d\n", + c->channel, c->rawNoiseFloor, c->noiseFloorAdjust); } } Modified: user/sam/wifi/sys/dev/ath/ath_hal/ah.h ============================================================================== --- user/sam/wifi/sys/dev/ath/ath_hal/ah.h Fri Jan 23 06:33:39 2009 (r187619) +++ user/sam/wifi/sys/dev/ath/ath_hal/ah.h Fri Jan 23 07:00:33 2009 (r187620) @@ -367,54 +367,6 @@ typedef enum { typedef uint16_t HAL_CTRY_CODE; /* country code */ typedef uint16_t HAL_REG_DOMAIN; /* regulatory domain code */ -typedef struct { - uint32_t channelFlags; - uint16_t channel; /* NB: must be first for casting */ - uint16_t devdata; /* XXX temp */ -} HAL_CHANNEL; - -/* channelFlags */ -#define CHANNEL_NFCREQUIRED 0x01 /* channel requires noise floor check */ -#define CHANNEL_CW_INT 0x00002 /* CW interference detected on channel */ -#define CHANNEL_TURBO 0x00010 /* Turbo Channel */ -#define CHANNEL_CCK 0x00020 /* CCK channel */ -#define CHANNEL_OFDM 0x00040 /* OFDM channel */ -#define CHANNEL_2GHZ 0x00080 /* 2 GHz spectrum channel */ -#define CHANNEL_5GHZ 0x00100 /* 5 GHz spectrum channel */ -#define CHANNEL_PASSIVE 0x00200 /* Only passive scan allowed in the channel */ -#define CHANNEL_DYN 0x00400 /* dynamic CCK-OFDM channel */ -#define CHANNEL_STURBO 0x02000 /* Static turbo, no 11a-only usage */ -#define CHANNEL_HALF 0x04000 /* Half rate channel */ -#define CHANNEL_QUARTER 0x08000 /* Quarter rate channel */ -#define CHANNEL_HT20 0x10000 /* 11n 20MHZ channel */ -#define CHANNEL_HT40PLUS 0x20000 /* 11n 40MHZ channel w/ ext chan above */ -#define CHANNEL_HT40MINUS 0x40000 /* 11n 40MHZ channel w/ ext chan below */ -#define CHANNEL_DFS 0x80000 /* DFS required on channel */ -#define CHANNEL_4MS_LIMIT 0x00100000 /* 4msec packet limit on this channel */ - -#define CHANNEL_A (CHANNEL_5GHZ|CHANNEL_OFDM) -#define CHANNEL_B (CHANNEL_2GHZ|CHANNEL_CCK) -#define CHANNEL_PUREG (CHANNEL_2GHZ|CHANNEL_OFDM) -#ifdef notdef -#define CHANNEL_G (CHANNEL_2GHZ|CHANNEL_DYN) -#else -#define CHANNEL_G (CHANNEL_2GHZ|CHANNEL_OFDM) -#endif -#define CHANNEL_T (CHANNEL_5GHZ|CHANNEL_OFDM|CHANNEL_TURBO) -#define CHANNEL_ST (CHANNEL_T|CHANNEL_STURBO) -#define CHANNEL_108G (CHANNEL_2GHZ|CHANNEL_OFDM|CHANNEL_TURBO) -#define CHANNEL_108A CHANNEL_T -#define CHANNEL_G_HT20 (CHANNEL_G|CHANNEL_HT20) -#define CHANNEL_A_HT20 (CHANNEL_A|CHANNEL_HT20) -#define CHANNEL_G_HT40PLUS (CHANNEL_G|CHANNEL_HT40PLUS) -#define CHANNEL_G_HT40MINUS (CHANNEL_G|CHANNEL_HT40MINUS) -#define CHANNEL_A_HT40PLUS (CHANNEL_A|CHANNEL_HT40PLUS) -#define CHANNEL_A_HT40MINUS (CHANNEL_A|CHANNEL_HT40MINUS) -#define CHANNEL_ALL \ - (CHANNEL_OFDM | CHANNEL_CCK| CHANNEL_2GHZ | CHANNEL_5GHZ | \ - CHANNEL_TURBO | CHANNEL_HT20 | CHANNEL_HT40PLUS | CHANNEL_HT40MINUS) -#define CHANNEL_ALL_NOTURBO (CHANNEL_ALL &~ CHANNEL_TURBO) - #define HAL_ANTENNA_MIN_MODE 0 #define HAL_ANTENNA_FIXED_A 1 #define HAL_ANTENNA_FIXED_B 2 @@ -616,6 +568,7 @@ typedef struct { struct ath_desc; struct ath_tx_status; struct ath_rx_status; +struct ieee80211_channel; /* * Hardware Access Layer (HAL) API. @@ -651,18 +604,18 @@ struct ath_hal { /* Reset functions */ HAL_BOOL __ahdecl(*ah_reset)(struct ath_hal *, HAL_OPMODE, - HAL_CHANNEL *, + struct ieee80211_channel *, HAL_BOOL bChannelChange, HAL_STATUS *status); HAL_BOOL __ahdecl(*ah_phyDisable)(struct ath_hal *); HAL_BOOL __ahdecl(*ah_disable)(struct ath_hal *); void __ahdecl(*ah_setPCUConfig)(struct ath_hal *); HAL_BOOL __ahdecl(*ah_perCalibration)(struct ath_hal*, - HAL_CHANNEL *, HAL_BOOL *); + struct ieee80211_channel *, HAL_BOOL *); HAL_BOOL __ahdecl(*ah_perCalibrationN)(struct ath_hal *, - HAL_CHANNEL *, u_int chainMask, + struct ieee80211_channel *, u_int chainMask, HAL_BOOL longCal, HAL_BOOL *isCalDone); HAL_BOOL __ahdecl(*ah_resetCalValid)(struct ath_hal *, - const HAL_CHANNEL *); + const struct ieee80211_channel *); HAL_BOOL __ahdecl(*ah_setTxPowerLimit)(struct ath_hal *, uint32_t); /* Transmit functions */ @@ -724,7 +677,7 @@ struct ath_hal { struct ath_rx_status *); void __ahdecl(*ah_rxMonitor)(struct ath_hal *, const HAL_NODE_STATS *, - const HAL_CHANNEL *); + const struct ieee80211_channel *); void __ahdecl(*ah_procMibEvent)(struct ath_hal *, const HAL_NODE_STATS *); @@ -794,7 +747,7 @@ struct ath_hal { HAL_POWER_MODE mode, int setChip); HAL_POWER_MODE __ahdecl(*ah_getPowerMode)(struct ath_hal*); int16_t __ahdecl(*ah_getChanNoise)(struct ath_hal *, - const HAL_CHANNEL *); + const struct ieee80211_channel *); /* Beacon Management Functions */ void __ahdecl(*ah_setBeaconTimers)(struct ath_hal*, Modified: user/sam/wifi/sys/dev/ath/ath_hal/ah_internal.h ============================================================================== --- user/sam/wifi/sys/dev/ath/ath_hal/ah_internal.h Fri Jan 23 06:33:39 2009 (r187619) +++ user/sam/wifi/sys/dev/ath/ath_hal/ah_internal.h Fri Jan 23 07:00:33 2009 (r187620) @@ -27,6 +27,8 @@ #define AH_MIN(a,b) ((a)<(b)?(a):(b)) #define AH_MAX(a,b) ((a)>(b)?(a):(b)) +#include + #ifndef NBBY #define NBBY 8 /* number of bits/byte */ #endif @@ -112,30 +114,20 @@ struct ath_hal_rf *ath_hal_rfprobe(struc * using ic_devdata in the ieee80211_channel. */ typedef struct { - uint32_t channelFlags; - uint16_t channel; /* NB: must be first for casting */ - uint16_t devdata; /* XXX temp */ - int8_t maxRegTxPower; - int8_t maxTxPower; - int8_t minTxPower; - uint8_t antennaMax; - - uint8_t privFlags; - uint8_t ctl; /* conformance test limit */ + uint16_t channel; + uint8_t privFlags; /* XXX remove */ +#define CHANNEL_IQVALID 0x01 /* IQ calibration valid */ uint8_t calValid; /* bitmask of cal types */ int8_t iCoff; int8_t qCoff; - uint8_t pad; /* NB: hole */ int16_t rawNoiseFloor; int16_t noiseFloorAdjust; uint16_t mainSpur; /* cached spur value for this channel */ } HAL_CHANNEL_INTERNAL; +#define CHANNEL_NFCREQUIRED 0x01 /* channel requires noise floor check */ + /* privFlags */ -#define CHANNEL_INTERFERENCE 0x01 /* Software use: channel interference - used for as AR as well as RADAR - interference detection */ -#define CHANNEL_IQVALID 0x02 /* IQ calibration valid */ typedef struct { uint32_t halChanSpreadSupport : 1, @@ -233,7 +225,7 @@ struct ath_hal_private { uint32_t gpio, uint32_t val); void (*ah_gpioSetIntr)(struct ath_hal*, u_int, uint32_t); HAL_BOOL (*ah_getChipPowerLimits)(struct ath_hal *, - HAL_CHANNEL_INTERNAL *); + struct ieee80211_channel *); int16_t (*ah_getNfAdjust)(struct ath_hal *, const HAL_CHANNEL_INTERNAL*); void (*ah_getNoiseFloor)(struct ath_hal *, @@ -261,7 +253,7 @@ struct ath_hal_private { uint16_t ah_analog2GhzRev; /* 5GHz radio revision */ HAL_OPMODE ah_opmode; /* operating mode from reset */ - HAL_CHANNEL_INTERNAL *ah_curchan; /* operating channel */ + const struct ieee80211_channel *ah_curchan;/* operating channel */ HAL_CAPABILITIES ah_caps; /* device capabilities */ uint32_t ah_diagreg; /* user-specified AR_DIAG_SW */ int16_t ah_powerLimit; /* tx power cap */ @@ -417,43 +409,11 @@ typedef enum { #define HAL_BIN_WIDTH_TURBO_100HZ 6250 #define HAL_MAX_BINS_ALLOWED 28 -/* - * A = 5GHZ|OFDM - * T = 5GHZ|OFDM|TURBO - * - * IS_CHAN_A(T) will return TRUE. This is probably - * not the default behavior we want. We should migrate to a better mask -- - * perhaps CHANNEL_ALL. - * - * For now, IS_CHAN_G() masks itself with CHANNEL_108G. - * - */ - -#define IS_CHAN_A(_c) (((_c)->channelFlags & CHANNEL_A) == CHANNEL_A) -#define IS_CHAN_B(_c) (((_c)->channelFlags & CHANNEL_B) == CHANNEL_B) -#define IS_CHAN_G(_c) (((_c)->channelFlags & (CHANNEL_108G|CHANNEL_G)) == CHANNEL_G) -#define IS_CHAN_108G(_c)(((_c)->channelFlags & CHANNEL_108G) == CHANNEL_108G) -#define IS_CHAN_T(_c) (((_c)->channelFlags & CHANNEL_T) == CHANNEL_T) -#define IS_CHAN_PUREG(_c) \ - (((_c)->channelFlags & CHANNEL_PUREG) == CHANNEL_PUREG) - -#define IS_CHAN_TURBO(_c) (((_c)->channelFlags & CHANNEL_TURBO) != 0) -#define IS_CHAN_CCK(_c) (((_c)->channelFlags & CHANNEL_CCK) != 0) -#define IS_CHAN_OFDM(_c) (((_c)->channelFlags & CHANNEL_OFDM) != 0) -#define IS_CHAN_5GHZ(_c) (((_c)->channelFlags & CHANNEL_5GHZ) != 0) -#define IS_CHAN_2GHZ(_c) (((_c)->channelFlags & CHANNEL_2GHZ) != 0) -#define IS_CHAN_PASSIVE(_c) (((_c)->channelFlags & CHANNEL_PASSIVE) != 0) -#define IS_CHAN_HALF_RATE(_c) (((_c)->channelFlags & CHANNEL_HALF) != 0) -#define IS_CHAN_QUARTER_RATE(_c) (((_c)->channelFlags & CHANNEL_QUARTER) != 0) +#define IS_CHAN_5GHZ(_c) ((_c)->channel > 4900) +#define IS_CHAN_2GHZ(_c) (!IS_CHAN_5GHZ(_c)) #define IS_CHAN_IN_PUBLIC_SAFETY_BAND(_c) ((_c) > 4940 && (_c) < 4990) -#define CHANNEL_HT40 (CHANNEL_HT40PLUS | CHANNEL_HT40MINUS) -#define CHANNEL_HT (CHANNEL_HT20 | CHANNEL_HT40) -#define IS_CHAN_HT(_c) (((_c)->channelFlags & CHANNEL_HT) != 0) -#define IS_CHAN_HT20(_c) (((_c)->channelFlags & CHANNEL_HT) == CHANNEL_HT20) -#define IS_CHAN_HT40(_c) (((_c)->channelFlags & CHANNEL_HT40) != 0) - /* * Deduce if the host cpu has big- or litt-endian byte order. */ @@ -499,25 +459,15 @@ isBigEndian(void) /* * Return the max allowed antenna gain and apply any regulatory * domain specific changes. - * - * NOTE: a negative reduction is possible in RD's that only - * measure radiated power (e.g., ETSI) which would increase - * that actual conducted output power (though never beyond - * the calibrated target power). - */ -static OS_INLINE u_int -ath_hal_getantennareduction(struct ath_hal *ah, - const HAL_CHANNEL_INTERNAL *chan, u_int twiceGain) -{ - int8_t antennaMax = twiceGain - chan->antennaMax*2; - return (antennaMax < 0) ? 0 : antennaMax; -} + */ +u_int ath_hal_getantennareduction(struct ath_hal *ah, + const struct ieee80211_channel *chan, u_int twiceGain); /* * Return the test group for the specific channel based on * the current regulatory setup. */ -u_int ath_hal_getctl(struct ath_hal *, const HAL_CHANNEL_INTERNAL *); +u_int ath_hal_getctl(struct ath_hal *, const struct ieee80211_channel *); /* * Map a public channel definition to the corresponding @@ -525,8 +475,8 @@ u_int ath_hal_getctl(struct ath_hal *, c * whether or not the specified channel is ok to use * based on the current regulatory domain constraints. */ -extern HAL_CHANNEL_INTERNAL *ath_hal_checkchannel(struct ath_hal *, - const HAL_CHANNEL *); +HAL_CHANNEL_INTERNAL *ath_hal_checkchannel(struct ath_hal *, + const struct ieee80211_channel *); /* system-configurable parameters */ extern int ath_hal_dma_beacon_response_time; /* in TU's */ @@ -744,7 +694,7 @@ extern void ath_hal_setupratetable(struc /* * Common routine for implementing getChanNoise api. */ -extern int16_t ath_hal_getChanNoise(struct ath_hal *ah, const HAL_CHANNEL* ); +int16_t ath_hal_getChanNoise(struct ath_hal *, const struct ieee80211_channel *); /* * Initialization support. Modified: user/sam/wifi/sys/dev/ath/ath_hal/ah_regdomain.c ============================================================================== --- user/sam/wifi/sys/dev/ath/ath_hal/ah_regdomain.c Fri Jan 23 06:33:39 2009 (r187619) +++ user/sam/wifi/sys/dev/ath/ath_hal/ah_regdomain.c Fri Jan 23 07:00:33 2009 (r187620) @@ -1678,22 +1678,30 @@ struct cmode { }; static const struct cmode modes[] = { - { HAL_MODE_TURBO, CHANNEL_ST}, /* NB: 11a Static Turbo */ - { HAL_MODE_11A, CHANNEL_A}, - { HAL_MODE_11B, CHANNEL_B}, - { HAL_MODE_11G, CHANNEL_G}, - { HAL_MODE_11G_TURBO, CHANNEL_108G}, - { HAL_MODE_11A_TURBO, CHANNEL_108A}, - { HAL_MODE_11A_QUARTER_RATE, CHANNEL_A | CHANNEL_QUARTER}, - { HAL_MODE_11A_HALF_RATE, CHANNEL_A | CHANNEL_HALF}, - { HAL_MODE_11G_QUARTER_RATE, CHANNEL_G | CHANNEL_QUARTER}, - { HAL_MODE_11G_HALF_RATE, CHANNEL_G | CHANNEL_HALF}, - { HAL_MODE_11NG_HT20, CHANNEL_G_HT20}, - { HAL_MODE_11NG_HT40PLUS, CHANNEL_G_HT40PLUS}, - { HAL_MODE_11NG_HT40MINUS, CHANNEL_G_HT40MINUS}, - { HAL_MODE_11NA_HT20, CHANNEL_A_HT20}, - { HAL_MODE_11NA_HT40PLUS, CHANNEL_A_HT40PLUS}, - { HAL_MODE_11NA_HT40MINUS, CHANNEL_A_HT40MINUS}, + { HAL_MODE_TURBO, IEEE80211_CHAN_ST }, + { HAL_MODE_11A, IEEE80211_CHAN_A }, + { HAL_MODE_11B, IEEE80211_CHAN_B }, + { HAL_MODE_11G, IEEE80211_CHAN_G }, + { HAL_MODE_11G_TURBO, IEEE80211_CHAN_108G }, + { HAL_MODE_11A_TURBO, IEEE80211_CHAN_108A }, + { HAL_MODE_11A_QUARTER_RATE, + IEEE80211_CHAN_A | IEEE80211_CHAN_QUARTER }, + { HAL_MODE_11A_HALF_RATE, + IEEE80211_CHAN_A | IEEE80211_CHAN_HALF }, + { HAL_MODE_11G_QUARTER_RATE, + IEEE80211_CHAN_G | IEEE80211_CHAN_QUARTER }, + { HAL_MODE_11G_HALF_RATE, + IEEE80211_CHAN_G | IEEE80211_CHAN_HALF }, + { HAL_MODE_11NG_HT20, IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_HT20 }, + { HAL_MODE_11NG_HT40PLUS, + IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_HT40U }, + { HAL_MODE_11NG_HT40MINUS, + IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_HT40D }, + { HAL_MODE_11NA_HT20, IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_HT20 }, + { HAL_MODE_11NA_HT40PLUS, + IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_HT40U }, + { HAL_MODE_11NA_HT40MINUS, + IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_HT40D }, }; static OS_INLINE uint16_t @@ -1917,10 +1925,8 @@ getregstate(struct ath_hal *ah, HAL_CTRY } if (pcountry != AH_NULL) *pcountry = country; - if (prd2GHz != AH_NULL) - *prd2GHz = rd2GHz; - if (prd5GHz != AH_NULL) - *prd5GHz = rd5GHz; + *prd2GHz = rd2GHz; + *prd5GHz = rd5GHz; return HAL_OK; } @@ -2111,19 +2117,17 @@ getchannels(struct ath_hal *ah, ic->ic_freq = c; ic->ic_flags = cm->flags; ic->ic_maxregpower = fband->powerDfs; + ath_hal_getpowerlimits(ah, ic); ic->ic_maxantgain = fband->antennaMax; if (fband->usePassScan & pscan) ic->ic_flags |= IEEE80211_CHAN_PASSIVE; else ic->ic_flags &= ~IEEE80211_CHAN_PASSIVE; lastc = c; - if (fband->useDfs & dfsMask) { - /* DFS and HT40 don't mix */ - if (cm->mode == HAL_MODE_11NA_HT40PLUS || - cm->mode == HAL_MODE_11NA_HT40MINUS) - continue; + /* NB: DFS and HT40 don't mix */ + if ((fband->useDfs & dfsMask) && + !IEEE80211_IS_CHAN_HT40(ic)) ic->ic_flags |= IEEE80211_CHAN_DFS; - } if (IEEE80211_IS_CHAN_5GHZ(ic) && (rdflags & DISALLOW_ADHOC_11A)) ic->ic_flags |= IEEE80211_CHAN_NOADHOC; @@ -2137,54 +2141,75 @@ getchannels(struct ath_hal *ah, if (rdflags & NEED_NFC) ic->ic_flags |= CHANNEL_NFCREQUIRED; - /* retrieve power limits */ - { HAL_CHANNEL_INTERNAL hc; - hc.channel = ic->ic_freq; - hc.channelFlags = ic->ic_flags; - if (ath_hal_getpowerlimits(ah, &hc)) { - ic->ic_maxpower = hc.maxTxPower; - ic->ic_minpower = hc.minTxPower; - } - } - ic++, next++; } } } done: *nchans = next; + /* NB: pcountry set above by getregstate */ + if (prd2GHz != AH_NULL) + *prd2GHz = rd2GHz; + if (prd5GHz != AH_NULL) + *prd5GHz = rd5GHz; return HAL_OK; #undef HAL_MODE_11A_ALL #undef CHANNEL_HALF_BW #undef CHANNEL_QUARTER_BW } +/* + * Retrieve a channel list without affecting runtime state. + */ HAL_STATUS ath_hal_getchannels(struct ath_hal *ah, struct ieee80211_channel chans[], u_int maxchans, int *nchans, u_int modeSelect, HAL_CTRY_CODE cc, HAL_REG_DOMAIN regDmn, HAL_BOOL enableExtendedChannels) { - HAL_STATUS status; - struct ieee80211_channel *c; - int i; - - status = getchannels(ah, chans, maxchans, nchans, modeSelect, + return getchannels(ah, chans, maxchans, nchans, modeSelect, cc, regDmn, enableExtendedChannels, AH_NULL, AH_NULL, AH_NULL); - if (status == HAL_OK) { - for (i = 0; i < *nchans; i++) { - c = &chans[i]; - if (IEEE80211_IS_CHAN_PUREG(c)) { - /* - * Except for AR5211, PUREG means mixed - * DSSS and OFDM; convert to "just G". - */ - c->ic_flags &= ~IEEE80211_CHAN_PUREG; - c->ic_flags |= IEEE80211_CHAN_G; +} + +/* + * Setup the internal/private channel state given a table of + * net80211 channels. We collapse entries for the same frequency + * and record the frequency for doing noise floor processing + * where we don't have net80211 channel context. + */ +static HAL_BOOL +assignPrivateChannels(struct ath_hal *ah, + struct ieee80211_channel chans[], int nchans) +{ + HAL_CHANNEL_INTERNAL *ic; + int i, j, next; + + next = 0; + for (i = 0; i < nchans; i++) { + for (j = i-1; j >= 0; j--) + if (chans[j].ic_freq == chans[i].ic_freq) { + chans[i].ic_devdata = chans[j].ic_devdata; + break; + } + if (j < 0) { + /* new entry, assign a private channel entry */ + if (next >= N(AH_PRIVATE(ah)->ah_channels)) { + HALDEBUG(ah, HAL_DEBUG_ANY, + "%s: too many channels, max %u\n", + __func__, N(AH_PRIVATE(ah)->ah_channels)); + return AH_FALSE; } + ic = &AH_PRIVATE(ah)->ah_channels[next]; + OS_MEMZERO(ic, sizeof(*ic)); + ic->channel = chans[i].ic_freq; + chans[i].ic_devdata = next; + next++; } } - return status; + AH_PRIVATE(ah)->ah_nchan = next; + HALDEBUG(ah, HAL_DEBUG_ANY, "%s: %u public, %u private channels\n", + __func__, nchans, next); + return AH_TRUE; } /* @@ -2199,55 +2224,19 @@ ath_hal_init_channels(struct ath_hal *ah COUNTRY_CODE_TO_ENUM_RD *country; REG_DOMAIN *rd5GHz, *rd2GHz; HAL_STATUS status; - struct ieee80211_channel *c; - HAL_CHANNEL_INTERNAL *ic; - int i; - if (maxchans > N(AH_PRIVATE(ah)->ah_channels)) - maxchans = N(AH_PRIVATE(ah)->ah_channels); status = getchannels(ah, chans, maxchans, nchans, modeSelect, cc, regDmn, enableExtendedChannels, &country, &rd2GHz, &rd5GHz); - if (status != HAL_OK) - return status; - for (i = 0; i < *nchans; i++) { - c = &chans[i]; - ic = &AH_PRIVATE(ah)->ah_channels[i]; - - OS_MEMZERO(ic, sizeof(*ic)); - ic->channel = c->ic_freq; - ic->channelFlags = c->ic_flags; - ic->devdata = i; /* XXX */ - ic->maxRegTxPower = c->ic_maxregpower; - ic->maxTxPower = c->ic_maxpower; - ic->minTxPower = c->ic_minpower; - ic->antennaMax = c->ic_maxantgain; - - c->ic_devdata = i; - - if (IEEE80211_IS_CHAN_PUREG(c)) { - /* - * Except for AR5211, PUREG means mixed - * DSSS and OFDM; convert to "just G". - */ - c->ic_flags &= ~IEEE80211_CHAN_PUREG; - c->ic_flags |= IEEE80211_CHAN_G; - } - HALDEBUG(ah, HAL_DEBUG_REGDOMAIN, - "[%3u] freq %u/0x%x txpow reg/max/min %u/%u/%u" - " antmax %u ctl 0x%x\n", - i, c->ic_freq, c->ic_flags, - c->ic_maxregpower, c->ic_maxpower, c->ic_minpower, - c->ic_maxantgain, ic->ctl); - } - AH_PRIVATE(ah)->ah_nchan = *nchans; - AH_PRIVATE(ah)->ah_rd2GHz = rd2GHz; - AH_PRIVATE(ah)->ah_rd5GHz = rd5GHz; - - ah->ah_countryCode = country->countryCode; - HALDEBUG(ah, HAL_DEBUG_REGDOMAIN, "%s: cc %u\n", - __func__, ah->ah_countryCode); - - return HAL_OK; + if (status == HAL_OK && assignPrivateChannels(ah, chans, *nchans)) { + AH_PRIVATE(ah)->ah_rd2GHz = rd2GHz; + AH_PRIVATE(ah)->ah_rd5GHz = rd5GHz; + + ah->ah_countryCode = country->countryCode; + HALDEBUG(ah, HAL_DEBUG_REGDOMAIN, "%s: cc %u\n", + __func__, ah->ah_countryCode); + } else + status = HAL_EINVAL; + return status; } /* @@ -2260,77 +2249,45 @@ ath_hal_set_channels(struct ath_hal *ah, { COUNTRY_CODE_TO_ENUM_RD *country; REG_DOMAIN *rd5GHz, *rd2GHz; - struct ieee80211_channel *c; - HAL_CHANNEL_INTERNAL *ic; HAL_STATUS status; - int i; - if (nchans > N(AH_PRIVATE(ah)->ah_channels)) { - HALDEBUG(ah, HAL_DEBUG_ANY, "%s: too many channels, %u > %u\n", - __func__, nchans, N(AH_PRIVATE(ah)->ah_channels)); - return HAL_EINVAL; - } status = getregstate(ah, cc, regDmn, &country, &rd2GHz, &rd5GHz); - if (status != HAL_OK) - return status; - for (i = 0; i < nchans; i++) { - c = &chans[i]; - ic = &AH_PRIVATE(ah)->ah_channels[i]; - - OS_MEMZERO(ic, sizeof(*ic)); - ic->channel = c->ic_freq; - ic->channelFlags = c->ic_flags; - ic->devdata = i; /* XXX */ - ic->maxRegTxPower = c->ic_maxregpower; - ic->maxTxPower = c->ic_maxpower; - ic->minTxPower = c->ic_minpower; - ic->antennaMax = c->ic_maxantgain; - - c->ic_devdata = i; - - HALDEBUG(ah, HAL_DEBUG_REGDOMAIN, - "[%3u] channel %u/0x%x txpow reg/max/min %u/%u/%u" - " antmax %u ctl 0x%x\n", - i, ic->channel, ic->channelFlags, - ic->maxRegTxPower, ic->maxTxPower, ic->minTxPower, - ic->antennaMax, ic->ctl); - } - AH_PRIVATE(ah)->ah_nchan = nchans; - AH_PRIVATE(ah)->ah_rd2GHz = rd2GHz; - AH_PRIVATE(ah)->ah_rd5GHz = rd5GHz; - - ah->ah_countryCode = country->countryCode; - HALDEBUG(ah, HAL_DEBUG_REGDOMAIN, "%s: cc %u\n", - __func__, ah->ah_countryCode); - - return HAL_OK; + if (status == HAL_OK && assignPrivateChannels(ah, chans, nchans)) { + AH_PRIVATE(ah)->ah_rd2GHz = rd2GHz; + AH_PRIVATE(ah)->ah_rd5GHz = rd5GHz; + + ah->ah_countryCode = country->countryCode; + HALDEBUG(ah, HAL_DEBUG_REGDOMAIN, "%s: cc %u\n", + __func__, ah->ah_countryCode); + } else + status = HAL_EINVAL; + return status; } /* * Return the internal channel corresponding to a public channel. */ HAL_CHANNEL_INTERNAL * -ath_hal_checkchannel(struct ath_hal *ah, const HAL_CHANNEL *c) +ath_hal_checkchannel(struct ath_hal *ah, const struct ieee80211_channel *c) { -#define CHAN_FLAGS (CHANNEL_ALL|CHANNEL_HALF|CHANNEL_QUARTER) - HAL_CHANNEL_INTERNAL *cc; - /* NB: be wary of user-specified channel flags */ - int flags = c->channelFlags & CHAN_FLAGS; - - if (c->devdata > N(AH_PRIVATE(ah)->ah_channels)) { - /* XXX should not happen */ - HALDEBUG(ah, HAL_DEBUG_ANY, "%s: bad mapping, devdata %u\n", - __func__, c->devdata); - return AH_NULL; - } - cc = &AH_PRIVATE(ah)->ah_channels[c->devdata]; - if (cc->channel == c->channel && - (cc->channelFlags & CHAN_FLAGS) == flags) - return cc; - HALDEBUG(ah, HAL_DEBUG_ANY, "%s: no match for %u/0x%x\n", - __func__, c->channel, c->channelFlags); + /* XXX should not happen */ + if (c->ic_devdata < AH_PRIVATE(ah)->ah_nchan) { + HAL_CHANNEL_INTERNAL *cc = + &AH_PRIVATE(ah)->ah_channels[c->ic_devdata]; + if (c->ic_freq == cc->channel) + return cc; + } + if (c->ic_devdata >= AH_PRIVATE(ah)->ah_nchan) { + HALDEBUG(ah, HAL_DEBUG_ANY, + "%s: bad mapping, devdata %u nchans %u\n", + __func__, c->ic_devdata, AH_PRIVATE(ah)->ah_nchan); + } else { + HALDEBUG(ah, HAL_DEBUG_ANY, + "%s: no match for %u/0x%x devdata %u channel %u\n", + __func__, c->ic_freq, c->ic_flags, c->ic_devdata, + AH_PRIVATE(ah)->ah_channels[c->ic_devdata].channel); + } return AH_NULL; -#undef CHAN_FLAGS } #define isWwrSKU(_ah) \ @@ -2342,26 +2299,43 @@ ath_hal_checkchannel(struct ath_hal *ah, * the current regulatory setup. */ u_int -ath_hal_getctl(struct ath_hal *ah, const HAL_CHANNEL_INTERNAL *c) +ath_hal_getctl(struct ath_hal *ah, const struct ieee80211_channel *c) { u_int ctl; if (AH_PRIVATE(ah)->ah_rd2GHz == AH_PRIVATE(ah)->ah_rd5GHz || (ah->ah_countryCode == CTRY_DEFAULT && isWwrSKU(ah))) ctl = SD_NO_CTL; - else if (IS_CHAN_2GHZ(c)) + else if (IEEE80211_IS_CHAN_2GHZ(c)) ctl = AH_PRIVATE(ah)->ah_rd2GHz->conformanceTestLimit; else ctl = AH_PRIVATE(ah)->ah_rd5GHz->conformanceTestLimit; - if (IS_CHAN_B(c)) + if (IEEE80211_IS_CHAN_B(c)) return ctl | CTL_11B; - if (IS_CHAN_G(c)) + if (IEEE80211_IS_CHAN_G(c)) return ctl | CTL_11G; - if (IS_CHAN_108G(c)) + if (IEEE80211_IS_CHAN_108G(c)) return ctl | CTL_108G; - if (IS_CHAN_TURBO(c)) + if (IEEE80211_IS_CHAN_TURBO(c)) return ctl | CTL_TURBO; - if (IS_CHAN_A(c)) + if (IEEE80211_IS_CHAN_A(c)) return ctl | CTL_11A; return ctl; } + +/* + * Return the max allowed antenna gain and apply any regulatory + * domain specific changes. + * + * NOTE: a negative reduction is possible in RD's that only + * measure radiated power (e.g., ETSI) which would increase + * that actual conducted output power (though never beyond + * the calibrated target power). + */ +u_int +ath_hal_getantennareduction(struct ath_hal *ah, + const struct ieee80211_channel *chan, u_int twiceGain) +{ + int8_t antennaMax = twiceGain - chan->ic_maxantgain*2; + return (antennaMax < 0) ? 0 : antennaMax; +} Modified: user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210.h ============================================================================== --- user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210.h Fri Jan 23 06:33:39 2009 (r187619) +++ user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210.h Fri Jan 23 07:00:33 2009 (r187620) @@ -128,20 +128,21 @@ struct ath_hal; extern void ar5210Detach(struct ath_hal *ah); extern HAL_BOOL ar5210Reset(struct ath_hal *, HAL_OPMODE, - HAL_CHANNEL *, HAL_BOOL bChannelChange, HAL_STATUS *); + struct ieee80211_channel *, HAL_BOOL bChannelChange, HAL_STATUS *); extern void ar5210SetPCUConfig(struct ath_hal *); extern HAL_BOOL ar5210PhyDisable(struct ath_hal *); extern HAL_BOOL ar5210Disable(struct ath_hal *); -extern HAL_BOOL ar5210ChipReset(struct ath_hal *, HAL_CHANNEL *); -extern HAL_BOOL ar5210PerCalibration(struct ath_hal *, HAL_CHANNEL *, HAL_BOOL *); -extern HAL_BOOL ar5210PerCalibrationN(struct ath_hal *ah, HAL_CHANNEL *chan, +extern HAL_BOOL ar5210ChipReset(struct ath_hal *, struct ieee80211_channel *); +extern HAL_BOOL ar5210PerCalibration(struct ath_hal *, struct ieee80211_channel *, HAL_BOOL *); +extern HAL_BOOL ar5210PerCalibrationN(struct ath_hal *ah, struct ieee80211_channel *chan, u_int chainMask, HAL_BOOL longCal, HAL_BOOL *isCalDone); -extern HAL_BOOL ar5210ResetCalValid(struct ath_hal *ah, const HAL_CHANNEL *); +extern HAL_BOOL ar5210ResetCalValid(struct ath_hal *ah, const struct ieee80211_channel *); extern int16_t ar5210GetNoiseFloor(struct ath_hal *); extern int16_t ar5210GetNfAdjust(struct ath_hal *, const HAL_CHANNEL_INTERNAL *); extern HAL_BOOL ar5210SetTxPowerLimit(struct ath_hal *, uint32_t limit); -extern HAL_BOOL ar5210SetTransmitPower(struct ath_hal *, HAL_CHANNEL *); +extern HAL_BOOL ar5210SetTransmitPower(struct ath_hal *, + const struct ieee80211_channel *); extern HAL_BOOL ar5210CalNoiseFloor(struct ath_hal *, HAL_CHANNEL_INTERNAL *); extern HAL_BOOL ar5210ResetDma(struct ath_hal *, HAL_OPMODE); @@ -274,6 +275,6 @@ extern const HAL_RATE_TABLE *ar5210GetRa extern HAL_BOOL ar5210AniControl(struct ath_hal *, HAL_ANI_CMD, int ); extern void ar5210AniPoll(struct ath_hal *, const HAL_NODE_STATS *, - const HAL_CHANNEL *); + const struct ieee80211_channel *); extern void ar5210MibEvent(struct ath_hal *, const HAL_NODE_STATS *); #endif /* _ATH_AR5210_H_ */ Modified: user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c ============================================================================== --- user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c Fri Jan 23 06:33:39 2009 (r187619) +++ user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c Fri Jan 23 07:00:33 2009 (r187620) @@ -31,7 +31,7 @@ static HAL_BOOL ar5210GetChannelEdges(struct ath_hal *, uint16_t flags, uint16_t *low, uint16_t *high); static HAL_BOOL ar5210GetChipPowerLimits(struct ath_hal *ah, - HAL_CHANNEL_INTERNAL *chan); + struct ieee80211_channel *chan); static const struct ath_hal_private ar5210hal = {{ .ah_magic = AR5210_MAGIC, @@ -302,7 +302,7 @@ static HAL_BOOL ar5210GetChannelEdges(struct ath_hal *ah, uint16_t flags, uint16_t *low, uint16_t *high) { - if (flags & CHANNEL_5GHZ) { + if (flags & IEEE80211_CHAN_5GHZ) { *low = 5120; *high = 5430; return AH_TRUE; @@ -312,14 +312,14 @@ ar5210GetChannelEdges(struct ath_hal *ah } static HAL_BOOL -ar5210GetChipPowerLimits(struct ath_hal *ah, HAL_CHANNEL_INTERNAL *chan) +ar5210GetChipPowerLimits(struct ath_hal *ah, struct ieee80211_channel *chan) { /* XXX fill in, this is just a placeholder */ HALDEBUG(ah, HAL_DEBUG_ATTACH, "%s: no min/max power for %u/0x%x\n", - __func__, chan->channel, chan->channelFlags); - chan->maxTxPower = AR5210_MAX_RATE_POWER; - chan->minTxPower = 0; + __func__, chan->ic_freq, chan->ic_flags); + chan->ic_maxpower = AR5210_MAX_RATE_POWER; + chan->ic_minpower = 0; return AH_TRUE; } Modified: user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c ============================================================================== --- user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c Fri Jan 23 06:33:39 2009 (r187619) +++ user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c Fri Jan 23 07:00:33 2009 (r187620) @@ -562,7 +562,7 @@ ar5210AniControl(struct ath_hal *ah, HAL void ar5210AniPoll(struct ath_hal *ah, const HAL_NODE_STATS *stats, - const HAL_CHANNEL *chan) + const struct ieee80211_channel *chan) { } Modified: user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c ============================================================================== --- user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c Fri Jan 23 06:33:39 2009 (r187619) +++ user/sam/wifi/sys/dev/ath/ath_hal/ar5210/ar5210_reset.c Fri Jan 23 07:00:33 2009 (r187620) @@ -55,7 +55,7 @@ static const uint8_t ar5k0007_pwrSetting static HAL_BOOL ar5210SetResetReg(struct ath_hal *, uint32_t resetMask, u_int delay); -static HAL_BOOL ar5210SetChannel(struct ath_hal *, HAL_CHANNEL_INTERNAL *); +static HAL_BOOL ar5210SetChannel(struct ath_hal *, struct ieee80211_channel *); static void ar5210SetOperatingMode(struct ath_hal *, int opmode); /* @@ -68,7 +68,8 @@ static void ar5210SetOperatingMode(struc */ HAL_BOOL ar5210Reset(struct ath_hal *ah, HAL_OPMODE opmode, - HAL_CHANNEL *chan, HAL_BOOL bChannelChange, HAL_STATUS *status) + struct ieee80211_channel *chan, HAL_BOOL bChannelChange, + HAL_STATUS *status) { #define N(a) (sizeof (a) /sizeof (a[0])) #define FAIL(_code) do { ecode = _code; goto bad; } while (0) @@ -81,10 +82,10 @@ ar5210Reset(struct ath_hal *ah, HAL_OPMO HALDEBUG(ah, HAL_DEBUG_RESET, "%s: opmode %u channel %u/0x%x %s channel\n", __func__, - opmode, chan->channel, chan->channelFlags, + opmode, chan->ic_freq, chan->ic_flags, bChannelChange ? "change" : "same"); - if ((chan->channelFlags & CHANNEL_5GHZ) == 0) { + if (!IEEE80211_IS_CHAN_5GHZ(chan)) { /* Only 11a mode */ HALDEBUG(ah, HAL_DEBUG_ANY, "%s: channel not 5Ghz\n", __func__); FAIL(HAL_EINVAL); @@ -96,7 +97,7 @@ ar5210Reset(struct ath_hal *ah, HAL_OPMO if (ichan == AH_NULL) { HALDEBUG(ah, HAL_DEBUG_ANY, "%s: invalid channel %u/0x%x; no mapping\n", - __func__, chan->channel, chan->channelFlags); + __func__, chan->ic_freq, chan->ic_flags); FAIL(HAL_EINVAL); } switch (opmode) { @@ -232,15 +233,13 @@ ar5210Reset(struct ath_hal *ah, HAL_OPMO (OS_REG_READ(ah, AR_PHY(68)) & 0xFFFFFFFC) | (ee->ee_antenna & 0x3)); - if (!ar5210SetChannel(ah, ichan)) { + if (!ar5210SetChannel(ah, chan)) { HALDEBUG(ah, HAL_DEBUG_ANY, "%s: unable to set channel\n", __func__); FAIL(HAL_EIO); } - if (bChannelChange) { - if (!(ichan->channelFlags & CHANNEL_DFS)) - ichan->privFlags &= ~CHANNEL_INTERFERENCE; - } + if (bChannelChange && !IEEE80211_IS_CHAN_DFS(chan)) + chan->ic_state &= ~IEEE80211_CHANSTATE_CWINT; /* Activate the PHY */ OS_REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ENABLE); @@ -254,7 +253,7 @@ ar5210Reset(struct ath_hal *ah, HAL_OPMO /* Perform noise floor calibration and set status */ if (!ar5210CalNoiseFloor(ah, ichan)) { - chan->channelFlags |= CHANNEL_CW_INT; + chan->ic_state |= IEEE80211_CHANSTATE_CWINT; HALDEBUG(ah, HAL_DEBUG_ANY, "%s: noise floor calibration failed\n", __func__); FAIL(HAL_EIO); @@ -294,7 +293,7 @@ ar5210Reset(struct ath_hal *ah, HAL_OPMO return AH_TRUE; bad: - if (*status) + if (status != AH_NULL) *status = ecode; return AH_FALSE; #undef FAIL @@ -383,19 +382,20 @@ ar5210Disable(struct ath_hal *ah) * Places the hardware into reset and then pulls it out of reset */ HAL_BOOL -ar5210ChipReset(struct ath_hal *ah, HAL_CHANNEL *chan) +ar5210ChipReset(struct ath_hal *ah, struct ieee80211_channel *chan) { *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***