xref: /illumos-gate/usr/src/uts/common/io/arn/arn_phy.c (revision dd1de374)
1*dd1de374Slin wang - Sun Microsystems - Beijing China /*
2*dd1de374Slin wang - Sun Microsystems - Beijing China  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
3*dd1de374Slin wang - Sun Microsystems - Beijing China  * Use is subject to license terms.
4*dd1de374Slin wang - Sun Microsystems - Beijing China  */
5*dd1de374Slin wang - Sun Microsystems - Beijing China 
6*dd1de374Slin wang - Sun Microsystems - Beijing China /*
7*dd1de374Slin wang - Sun Microsystems - Beijing China  * Copyright (c) 2008 Atheros Communications Inc.
8*dd1de374Slin wang - Sun Microsystems - Beijing China  *
9*dd1de374Slin wang - Sun Microsystems - Beijing China  * Permission to use, copy, modify, and/or distribute this software for any
10*dd1de374Slin wang - Sun Microsystems - Beijing China  * purpose with or without fee is hereby granted, provided that the above
11*dd1de374Slin wang - Sun Microsystems - Beijing China  * copyright notice and this permission notice appear in all copies.
12*dd1de374Slin wang - Sun Microsystems - Beijing China  *
13*dd1de374Slin wang - Sun Microsystems - Beijing China  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14*dd1de374Slin wang - Sun Microsystems - Beijing China  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15*dd1de374Slin wang - Sun Microsystems - Beijing China  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
16*dd1de374Slin wang - Sun Microsystems - Beijing China  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17*dd1de374Slin wang - Sun Microsystems - Beijing China  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18*dd1de374Slin wang - Sun Microsystems - Beijing China  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19*dd1de374Slin wang - Sun Microsystems - Beijing China  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20*dd1de374Slin wang - Sun Microsystems - Beijing China  */
21*dd1de374Slin wang - Sun Microsystems - Beijing China 
22*dd1de374Slin wang - Sun Microsystems - Beijing China #include "arn_core.h"
23*dd1de374Slin wang - Sun Microsystems - Beijing China #include "arn_hw.h"
24*dd1de374Slin wang - Sun Microsystems - Beijing China #include "arn_reg.h"
25*dd1de374Slin wang - Sun Microsystems - Beijing China #include "arn_phy.h"
26*dd1de374Slin wang - Sun Microsystems - Beijing China 
27*dd1de374Slin wang - Sun Microsystems - Beijing China /* ARGSUSED */
28*dd1de374Slin wang - Sun Microsystems - Beijing China void
ath9k_hw_write_regs(struct ath_hal * ah,uint32_t modesIndex,uint32_t freqIndex,int regWrites)29*dd1de374Slin wang - Sun Microsystems - Beijing China ath9k_hw_write_regs(struct ath_hal *ah, uint32_t modesIndex, uint32_t freqIndex,
30*dd1de374Slin wang - Sun Microsystems - Beijing China 		    int regWrites)
31*dd1de374Slin wang - Sun Microsystems - Beijing China {
32*dd1de374Slin wang - Sun Microsystems - Beijing China 	struct ath_hal_5416 *ahp = AH5416(ah);
33*dd1de374Slin wang - Sun Microsystems - Beijing China 
34*dd1de374Slin wang - Sun Microsystems - Beijing China 	/* LINTED: E_CONSTANT_CONDITION */
35*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE_ARRAY(&ahp->ah_iniBB_RfGain, freqIndex, regWrites);
36*dd1de374Slin wang - Sun Microsystems - Beijing China }
37*dd1de374Slin wang - Sun Microsystems - Beijing China 
38*dd1de374Slin wang - Sun Microsystems - Beijing China boolean_t
ath9k_hw_set_channel(struct ath_hal * ah,struct ath9k_channel * chan)39*dd1de374Slin wang - Sun Microsystems - Beijing China ath9k_hw_set_channel(struct ath_hal *ah, struct ath9k_channel *chan)
40*dd1de374Slin wang - Sun Microsystems - Beijing China {
41*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t channelSel = 0;
42*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t bModeSynth = 0;
43*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t aModeRefSel = 0;
44*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t reg32 = 0;
45*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint16_t freq;
46*dd1de374Slin wang - Sun Microsystems - Beijing China 	struct chan_centers centers;
47*dd1de374Slin wang - Sun Microsystems - Beijing China 
48*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_hw_get_channel_centers(ah, chan, &centers);
49*dd1de374Slin wang - Sun Microsystems - Beijing China 	freq = centers.synth_center;
50*dd1de374Slin wang - Sun Microsystems - Beijing China 
51*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (freq < 4800) {
52*dd1de374Slin wang - Sun Microsystems - Beijing China 		uint32_t txctl;
53*dd1de374Slin wang - Sun Microsystems - Beijing China 
54*dd1de374Slin wang - Sun Microsystems - Beijing China 		if (((freq - 2192) % 5) == 0) {
55*dd1de374Slin wang - Sun Microsystems - Beijing China 			channelSel = ((freq - 672) * 2 - 3040) / 10;
56*dd1de374Slin wang - Sun Microsystems - Beijing China 			bModeSynth = 0;
57*dd1de374Slin wang - Sun Microsystems - Beijing China 		} else if (((freq - 2224) % 5) == 0) {
58*dd1de374Slin wang - Sun Microsystems - Beijing China 			channelSel = ((freq - 704) * 2 - 3040) / 10;
59*dd1de374Slin wang - Sun Microsystems - Beijing China 			bModeSynth = 1;
60*dd1de374Slin wang - Sun Microsystems - Beijing China 		} else {
61*dd1de374Slin wang - Sun Microsystems - Beijing China 			arn_problem("%s: invalid channel %u MHz\n",
62*dd1de374Slin wang - Sun Microsystems - Beijing China 			    __func__, freq);
63*dd1de374Slin wang - Sun Microsystems - Beijing China 			return (B_FALSE);
64*dd1de374Slin wang - Sun Microsystems - Beijing China 		}
65*dd1de374Slin wang - Sun Microsystems - Beijing China 
66*dd1de374Slin wang - Sun Microsystems - Beijing China 		channelSel = (channelSel << 2) & 0xff;
67*dd1de374Slin wang - Sun Microsystems - Beijing China 		channelSel = ath9k_hw_reverse_bits(channelSel, 8);
68*dd1de374Slin wang - Sun Microsystems - Beijing China 
69*dd1de374Slin wang - Sun Microsystems - Beijing China 		txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
70*dd1de374Slin wang - Sun Microsystems - Beijing China 		if (freq == 2484) {
71*dd1de374Slin wang - Sun Microsystems - Beijing China 
72*dd1de374Slin wang - Sun Microsystems - Beijing China 			REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
73*dd1de374Slin wang - Sun Microsystems - Beijing China 			    txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
74*dd1de374Slin wang - Sun Microsystems - Beijing China 		} else {
75*dd1de374Slin wang - Sun Microsystems - Beijing China 			REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
76*dd1de374Slin wang - Sun Microsystems - Beijing China 			    txctl & ~AR_PHY_CCK_TX_CTRL_JAPAN);
77*dd1de374Slin wang - Sun Microsystems - Beijing China 		}
78*dd1de374Slin wang - Sun Microsystems - Beijing China 
79*dd1de374Slin wang - Sun Microsystems - Beijing China 	} else if ((freq % 20) == 0 && freq >= 5120) {
80*dd1de374Slin wang - Sun Microsystems - Beijing China 		channelSel =
81*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ath9k_hw_reverse_bits(((freq - 4800) / 20 << 2), 8);
82*dd1de374Slin wang - Sun Microsystems - Beijing China 		aModeRefSel = ath9k_hw_reverse_bits(1, 2);
83*dd1de374Slin wang - Sun Microsystems - Beijing China 	} else if ((freq % 10) == 0) {
84*dd1de374Slin wang - Sun Microsystems - Beijing China 		channelSel =
85*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ath9k_hw_reverse_bits(((freq - 4800) / 10 << 1), 8);
86*dd1de374Slin wang - Sun Microsystems - Beijing China 		if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah))
87*dd1de374Slin wang - Sun Microsystems - Beijing China 			aModeRefSel = ath9k_hw_reverse_bits(2, 2);
88*dd1de374Slin wang - Sun Microsystems - Beijing China 		else
89*dd1de374Slin wang - Sun Microsystems - Beijing China 			aModeRefSel = ath9k_hw_reverse_bits(1, 2);
90*dd1de374Slin wang - Sun Microsystems - Beijing China 	} else if ((freq % 5) == 0) {
91*dd1de374Slin wang - Sun Microsystems - Beijing China 		channelSel = ath9k_hw_reverse_bits((freq - 4800) / 5, 8);
92*dd1de374Slin wang - Sun Microsystems - Beijing China 		aModeRefSel = ath9k_hw_reverse_bits(1, 2);
93*dd1de374Slin wang - Sun Microsystems - Beijing China 	} else {
94*dd1de374Slin wang - Sun Microsystems - Beijing China 		arn_problem("%s: invalid channel %u MHz\n", __func__, freq);
95*dd1de374Slin wang - Sun Microsystems - Beijing China 		return (B_FALSE);
96*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
97*dd1de374Slin wang - Sun Microsystems - Beijing China 
98*dd1de374Slin wang - Sun Microsystems - Beijing China 	reg32 =
99*dd1de374Slin wang - Sun Microsystems - Beijing China 	    (channelSel << 8) | (aModeRefSel << 2) | (bModeSynth << 1) |
100*dd1de374Slin wang - Sun Microsystems - Beijing China 	    (1 << 5) | 0x1;
101*dd1de374Slin wang - Sun Microsystems - Beijing China 
102*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE(ah, AR_PHY(0x37), reg32);
103*dd1de374Slin wang - Sun Microsystems - Beijing China 
104*dd1de374Slin wang - Sun Microsystems - Beijing China 	ah->ah_curchan = chan;
105*dd1de374Slin wang - Sun Microsystems - Beijing China 
106*dd1de374Slin wang - Sun Microsystems - Beijing China 	AH5416(ah)->ah_curchanRadIndex = -1;
107*dd1de374Slin wang - Sun Microsystems - Beijing China 
108*dd1de374Slin wang - Sun Microsystems - Beijing China 	return (B_TRUE);
109*dd1de374Slin wang - Sun Microsystems - Beijing China }
110*dd1de374Slin wang - Sun Microsystems - Beijing China 
111*dd1de374Slin wang - Sun Microsystems - Beijing China boolean_t
ath9k_hw_ar9280_set_channel(struct ath_hal * ah,struct ath9k_channel * chan)112*dd1de374Slin wang - Sun Microsystems - Beijing China ath9k_hw_ar9280_set_channel(struct ath_hal *ah,
113*dd1de374Slin wang - Sun Microsystems - Beijing China     struct ath9k_channel *chan)
114*dd1de374Slin wang - Sun Microsystems - Beijing China {
115*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint16_t bMode, fracMode, aModeRefSel = 0;
116*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t freq, ndiv, channelSel = 0, channelFrac = 0, reg32 = 0;
117*dd1de374Slin wang - Sun Microsystems - Beijing China 	struct chan_centers centers;
118*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t refDivA = 24;
119*dd1de374Slin wang - Sun Microsystems - Beijing China 
120*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_hw_get_channel_centers(ah, chan, &centers);
121*dd1de374Slin wang - Sun Microsystems - Beijing China 	freq = centers.synth_center;
122*dd1de374Slin wang - Sun Microsystems - Beijing China 
123*dd1de374Slin wang - Sun Microsystems - Beijing China 	reg32 = REG_READ(ah, AR_PHY_SYNTH_CONTROL);
124*dd1de374Slin wang - Sun Microsystems - Beijing China 	reg32 &= 0xc0000000;
125*dd1de374Slin wang - Sun Microsystems - Beijing China 
126*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (freq < 4800) {
127*dd1de374Slin wang - Sun Microsystems - Beijing China 		uint32_t txctl;
128*dd1de374Slin wang - Sun Microsystems - Beijing China 
129*dd1de374Slin wang - Sun Microsystems - Beijing China 		bMode = 1;
130*dd1de374Slin wang - Sun Microsystems - Beijing China 		fracMode = 1;
131*dd1de374Slin wang - Sun Microsystems - Beijing China 		aModeRefSel = 0;
132*dd1de374Slin wang - Sun Microsystems - Beijing China 		channelSel = (freq * 0x10000) / 15;
133*dd1de374Slin wang - Sun Microsystems - Beijing China 
134*dd1de374Slin wang - Sun Microsystems - Beijing China 		txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
135*dd1de374Slin wang - Sun Microsystems - Beijing China 		if (freq == 2484) {
136*dd1de374Slin wang - Sun Microsystems - Beijing China 
137*dd1de374Slin wang - Sun Microsystems - Beijing China 			REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
138*dd1de374Slin wang - Sun Microsystems - Beijing China 			    txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
139*dd1de374Slin wang - Sun Microsystems - Beijing China 		} else {
140*dd1de374Slin wang - Sun Microsystems - Beijing China 			REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
141*dd1de374Slin wang - Sun Microsystems - Beijing China 			    txctl & ~AR_PHY_CCK_TX_CTRL_JAPAN);
142*dd1de374Slin wang - Sun Microsystems - Beijing China 		}
143*dd1de374Slin wang - Sun Microsystems - Beijing China 	} else {
144*dd1de374Slin wang - Sun Microsystems - Beijing China 		bMode = 0;
145*dd1de374Slin wang - Sun Microsystems - Beijing China 		fracMode = 0;
146*dd1de374Slin wang - Sun Microsystems - Beijing China 
147*dd1de374Slin wang - Sun Microsystems - Beijing China 		if ((freq % 20) == 0) {
148*dd1de374Slin wang - Sun Microsystems - Beijing China 			aModeRefSel = 3;
149*dd1de374Slin wang - Sun Microsystems - Beijing China 		} else if ((freq % 10) == 0) {
150*dd1de374Slin wang - Sun Microsystems - Beijing China 			aModeRefSel = 2;
151*dd1de374Slin wang - Sun Microsystems - Beijing China 		} else {
152*dd1de374Slin wang - Sun Microsystems - Beijing China 			aModeRefSel = 0;
153*dd1de374Slin wang - Sun Microsystems - Beijing China 
154*dd1de374Slin wang - Sun Microsystems - Beijing China 			fracMode = 1;
155*dd1de374Slin wang - Sun Microsystems - Beijing China 			refDivA = 1;
156*dd1de374Slin wang - Sun Microsystems - Beijing China 			channelSel = (freq * 0x8000) / 15;
157*dd1de374Slin wang - Sun Microsystems - Beijing China 
158*dd1de374Slin wang - Sun Microsystems - Beijing China 			REG_RMW_FIELD(ah, AR_AN_SYNTH9,
159*dd1de374Slin wang - Sun Microsystems - Beijing China 			    AR_AN_SYNTH9_REFDIVA, refDivA);
160*dd1de374Slin wang - Sun Microsystems - Beijing China 		}
161*dd1de374Slin wang - Sun Microsystems - Beijing China 		if (!fracMode) {
162*dd1de374Slin wang - Sun Microsystems - Beijing China 			ndiv = (freq * (refDivA >> aModeRefSel)) / 60;
163*dd1de374Slin wang - Sun Microsystems - Beijing China 			channelSel = ndiv & 0x1ff;
164*dd1de374Slin wang - Sun Microsystems - Beijing China 			channelFrac = (ndiv & 0xfffffe00) * 2;
165*dd1de374Slin wang - Sun Microsystems - Beijing China 			channelSel = (channelSel << 17) | channelFrac;
166*dd1de374Slin wang - Sun Microsystems - Beijing China 		}
167*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
168*dd1de374Slin wang - Sun Microsystems - Beijing China 
169*dd1de374Slin wang - Sun Microsystems - Beijing China 	reg32 = reg32 |
170*dd1de374Slin wang - Sun Microsystems - Beijing China 	    (bMode << 29) |
171*dd1de374Slin wang - Sun Microsystems - Beijing China 	    (fracMode << 28) | (aModeRefSel << 26) | (channelSel);
172*dd1de374Slin wang - Sun Microsystems - Beijing China 
173*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE(ah, AR_PHY_SYNTH_CONTROL, reg32);
174*dd1de374Slin wang - Sun Microsystems - Beijing China 
175*dd1de374Slin wang - Sun Microsystems - Beijing China 	ah->ah_curchan = chan;
176*dd1de374Slin wang - Sun Microsystems - Beijing China 
177*dd1de374Slin wang - Sun Microsystems - Beijing China 	AH5416(ah)->ah_curchanRadIndex = -1;
178*dd1de374Slin wang - Sun Microsystems - Beijing China 
179*dd1de374Slin wang - Sun Microsystems - Beijing China 	return (B_TRUE);
180*dd1de374Slin wang - Sun Microsystems - Beijing China }
181*dd1de374Slin wang - Sun Microsystems - Beijing China 
182*dd1de374Slin wang - Sun Microsystems - Beijing China static void
ath9k_phy_modify_rx_buffer(uint32_t * rfBuf,uint32_t reg32,uint32_t numBits,uint32_t firstBit,uint32_t column)183*dd1de374Slin wang - Sun Microsystems - Beijing China ath9k_phy_modify_rx_buffer(uint32_t *rfBuf, uint32_t reg32,
184*dd1de374Slin wang - Sun Microsystems - Beijing China     uint32_t numBits, uint32_t firstBit, uint32_t column)
185*dd1de374Slin wang - Sun Microsystems - Beijing China {
186*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t tmp32, mask, arrayEntry, lastBit;
187*dd1de374Slin wang - Sun Microsystems - Beijing China 	int32_t bitPosition, bitsLeft;
188*dd1de374Slin wang - Sun Microsystems - Beijing China 
189*dd1de374Slin wang - Sun Microsystems - Beijing China 	tmp32 = ath9k_hw_reverse_bits(reg32, numBits);
190*dd1de374Slin wang - Sun Microsystems - Beijing China 	arrayEntry = (firstBit - 1) / 8;
191*dd1de374Slin wang - Sun Microsystems - Beijing China 	bitPosition = (firstBit - 1) % 8;
192*dd1de374Slin wang - Sun Microsystems - Beijing China 	bitsLeft = numBits;
193*dd1de374Slin wang - Sun Microsystems - Beijing China 	while (bitsLeft > 0) {
194*dd1de374Slin wang - Sun Microsystems - Beijing China 		lastBit = (bitPosition + bitsLeft > 8) ?
195*dd1de374Slin wang - Sun Microsystems - Beijing China 		    8 : bitPosition + bitsLeft;
196*dd1de374Slin wang - Sun Microsystems - Beijing China 		mask = (((1 << lastBit) - 1) ^ ((1 << bitPosition) - 1)) <<
197*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (column * 8);
198*dd1de374Slin wang - Sun Microsystems - Beijing China 		rfBuf[arrayEntry] &= ~mask;
199*dd1de374Slin wang - Sun Microsystems - Beijing China 		rfBuf[arrayEntry] |= ((tmp32 << bitPosition) <<
200*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (column * 8)) & mask;
201*dd1de374Slin wang - Sun Microsystems - Beijing China 		bitsLeft -= 8 - bitPosition;
202*dd1de374Slin wang - Sun Microsystems - Beijing China 		tmp32 = tmp32 >> (8 - bitPosition);
203*dd1de374Slin wang - Sun Microsystems - Beijing China 		bitPosition = 0;
204*dd1de374Slin wang - Sun Microsystems - Beijing China 		arrayEntry++;
205*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
206*dd1de374Slin wang - Sun Microsystems - Beijing China }
207*dd1de374Slin wang - Sun Microsystems - Beijing China 
208*dd1de374Slin wang - Sun Microsystems - Beijing China boolean_t
ath9k_hw_set_rf_regs(struct ath_hal * ah,struct ath9k_channel * chan,uint16_t modesIndex)209*dd1de374Slin wang - Sun Microsystems - Beijing China ath9k_hw_set_rf_regs(struct ath_hal *ah, struct ath9k_channel *chan,
210*dd1de374Slin wang - Sun Microsystems - Beijing China     uint16_t modesIndex)
211*dd1de374Slin wang - Sun Microsystems - Beijing China {
212*dd1de374Slin wang - Sun Microsystems - Beijing China 	struct ath_hal_5416 *ahp = AH5416(ah);
213*dd1de374Slin wang - Sun Microsystems - Beijing China 
214*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t eepMinorRev;
215*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t ob5GHz = 0, db5GHz = 0;
216*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t ob2GHz = 0, db2GHz = 0;
217*dd1de374Slin wang - Sun Microsystems - Beijing China 	/* LINTED E_FUNC_SET_NOT_USED */
218*dd1de374Slin wang - Sun Microsystems - Beijing China 	int regWrites = 0;
219*dd1de374Slin wang - Sun Microsystems - Beijing China 
220*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (AR_SREV_9280_10_OR_LATER(ah))
221*dd1de374Slin wang - Sun Microsystems - Beijing China 		return (B_TRUE);
222*dd1de374Slin wang - Sun Microsystems - Beijing China 
223*dd1de374Slin wang - Sun Microsystems - Beijing China 	eepMinorRev = ath9k_hw_get_eeprom(ah, EEP_MINOR_REV);
224*dd1de374Slin wang - Sun Microsystems - Beijing China 
225*dd1de374Slin wang - Sun Microsystems - Beijing China 	RF_BANK_SETUP(ahp->ah_analogBank0Data, &ahp->ah_iniBank0, 1);
226*dd1de374Slin wang - Sun Microsystems - Beijing China 
227*dd1de374Slin wang - Sun Microsystems - Beijing China 	RF_BANK_SETUP(ahp->ah_analogBank1Data, &ahp->ah_iniBank1, 1);
228*dd1de374Slin wang - Sun Microsystems - Beijing China 
229*dd1de374Slin wang - Sun Microsystems - Beijing China 	RF_BANK_SETUP(ahp->ah_analogBank2Data, &ahp->ah_iniBank2, 1);
230*dd1de374Slin wang - Sun Microsystems - Beijing China 
231*dd1de374Slin wang - Sun Microsystems - Beijing China 	RF_BANK_SETUP(ahp->ah_analogBank3Data, &ahp->ah_iniBank3,
232*dd1de374Slin wang - Sun Microsystems - Beijing China 	    modesIndex);
233*dd1de374Slin wang - Sun Microsystems - Beijing China 	{
234*dd1de374Slin wang - Sun Microsystems - Beijing China 		int i;
235*dd1de374Slin wang - Sun Microsystems - Beijing China 		for (i = 0; i < ahp->ah_iniBank6TPC.ia_rows; i++) {
236*dd1de374Slin wang - Sun Microsystems - Beijing China 			ahp->ah_analogBank6Data[i] =
237*dd1de374Slin wang - Sun Microsystems - Beijing China 			    INI_RA(&ahp->ah_iniBank6TPC, i, modesIndex);
238*dd1de374Slin wang - Sun Microsystems - Beijing China 		}
239*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
240*dd1de374Slin wang - Sun Microsystems - Beijing China 
241*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (eepMinorRev >= 2) {
242*dd1de374Slin wang - Sun Microsystems - Beijing China 		if (IS_CHAN_2GHZ(chan)) {
243*dd1de374Slin wang - Sun Microsystems - Beijing China 			ob2GHz = ath9k_hw_get_eeprom(ah, EEP_OB_2);
244*dd1de374Slin wang - Sun Microsystems - Beijing China 			db2GHz = ath9k_hw_get_eeprom(ah, EEP_DB_2);
245*dd1de374Slin wang - Sun Microsystems - Beijing China 			ath9k_phy_modify_rx_buffer(ahp->ah_analogBank6Data,
246*dd1de374Slin wang - Sun Microsystems - Beijing China 			    ob2GHz, 3, 197, 0);
247*dd1de374Slin wang - Sun Microsystems - Beijing China 			ath9k_phy_modify_rx_buffer(ahp->ah_analogBank6Data,
248*dd1de374Slin wang - Sun Microsystems - Beijing China 			    db2GHz, 3, 194, 0);
249*dd1de374Slin wang - Sun Microsystems - Beijing China 		} else {
250*dd1de374Slin wang - Sun Microsystems - Beijing China 			ob5GHz = ath9k_hw_get_eeprom(ah, EEP_OB_5);
251*dd1de374Slin wang - Sun Microsystems - Beijing China 			db5GHz = ath9k_hw_get_eeprom(ah, EEP_DB_5);
252*dd1de374Slin wang - Sun Microsystems - Beijing China 			ath9k_phy_modify_rx_buffer(ahp->ah_analogBank6Data,
253*dd1de374Slin wang - Sun Microsystems - Beijing China 			    ob5GHz, 3, 203, 0);
254*dd1de374Slin wang - Sun Microsystems - Beijing China 			ath9k_phy_modify_rx_buffer(ahp->ah_analogBank6Data,
255*dd1de374Slin wang - Sun Microsystems - Beijing China 			    db5GHz, 3, 200, 0);
256*dd1de374Slin wang - Sun Microsystems - Beijing China 		}
257*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
258*dd1de374Slin wang - Sun Microsystems - Beijing China 
259*dd1de374Slin wang - Sun Microsystems - Beijing China 	RF_BANK_SETUP(ahp->ah_analogBank7Data, &ahp->ah_iniBank7, 1);
260*dd1de374Slin wang - Sun Microsystems - Beijing China 
261*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE_RF_ARRAY(&ahp->ah_iniBank0, ahp->ah_analogBank0Data,
262*dd1de374Slin wang - Sun Microsystems - Beijing China 	    regWrites);
263*dd1de374Slin wang - Sun Microsystems - Beijing China 
264*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE_RF_ARRAY(&ahp->ah_iniBank1, ahp->ah_analogBank1Data,
265*dd1de374Slin wang - Sun Microsystems - Beijing China 	    regWrites);
266*dd1de374Slin wang - Sun Microsystems - Beijing China 
267*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE_RF_ARRAY(&ahp->ah_iniBank2, ahp->ah_analogBank2Data,
268*dd1de374Slin wang - Sun Microsystems - Beijing China 	    regWrites);
269*dd1de374Slin wang - Sun Microsystems - Beijing China 
270*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE_RF_ARRAY(&ahp->ah_iniBank3, ahp->ah_analogBank3Data,
271*dd1de374Slin wang - Sun Microsystems - Beijing China 	    regWrites);
272*dd1de374Slin wang - Sun Microsystems - Beijing China 
273*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE_RF_ARRAY(&ahp->ah_iniBank6TPC, ahp->ah_analogBank6Data,
274*dd1de374Slin wang - Sun Microsystems - Beijing China 	    regWrites);
275*dd1de374Slin wang - Sun Microsystems - Beijing China 
276*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE_RF_ARRAY(&ahp->ah_iniBank7, ahp->ah_analogBank7Data,
277*dd1de374Slin wang - Sun Microsystems - Beijing China 	    regWrites);
278*dd1de374Slin wang - Sun Microsystems - Beijing China 
279*dd1de374Slin wang - Sun Microsystems - Beijing China 	return (B_TRUE);
280*dd1de374Slin wang - Sun Microsystems - Beijing China }
281*dd1de374Slin wang - Sun Microsystems - Beijing China 
282*dd1de374Slin wang - Sun Microsystems - Beijing China void
ath9k_hw_rfdetach(struct ath_hal * ah)283*dd1de374Slin wang - Sun Microsystems - Beijing China ath9k_hw_rfdetach(struct ath_hal *ah)
284*dd1de374Slin wang - Sun Microsystems - Beijing China {
285*dd1de374Slin wang - Sun Microsystems - Beijing China 	struct ath_hal_5416 *ahp = AH5416(ah);
286*dd1de374Slin wang - Sun Microsystems - Beijing China 
287*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (ahp->ah_analogBank0Data != NULL) {
288*dd1de374Slin wang - Sun Microsystems - Beijing China 		kmem_free(ahp->ah_analogBank0Data,
289*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (sizeof (uint32_t) * ahp->ah_iniBank0.ia_rows));
290*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank0Data = NULL;
291*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
292*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (ahp->ah_analogBank1Data != NULL) {
293*dd1de374Slin wang - Sun Microsystems - Beijing China 		kmem_free(ahp->ah_analogBank1Data,
294*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (sizeof (uint32_t) * ahp->ah_iniBank1.ia_rows));
295*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank1Data = NULL;
296*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
297*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (ahp->ah_analogBank2Data != NULL) {
298*dd1de374Slin wang - Sun Microsystems - Beijing China 		kmem_free(ahp->ah_analogBank2Data,
299*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (sizeof (uint32_t) * ahp->ah_iniBank2.ia_rows));
300*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank2Data = NULL;
301*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
302*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (ahp->ah_analogBank3Data != NULL) {
303*dd1de374Slin wang - Sun Microsystems - Beijing China 		kmem_free(ahp->ah_analogBank3Data,
304*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (sizeof (uint32_t) * ahp->ah_iniBank3.ia_rows));
305*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank3Data = NULL;
306*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
307*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (ahp->ah_analogBank6Data != NULL) {
308*dd1de374Slin wang - Sun Microsystems - Beijing China 		kmem_free(ahp->ah_analogBank6Data,
309*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (sizeof (uint32_t) * ahp->ah_iniBank6.ia_rows));
310*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank6Data = NULL;
311*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
312*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (ahp->ah_analogBank6TPCData != NULL) {
313*dd1de374Slin wang - Sun Microsystems - Beijing China 		kmem_free(ahp->ah_analogBank6TPCData,
314*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (sizeof (uint32_t) * ahp->ah_iniBank6TPC.ia_rows));
315*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank6TPCData = NULL;
316*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
317*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (ahp->ah_analogBank7Data != NULL) {
318*dd1de374Slin wang - Sun Microsystems - Beijing China 		kmem_free(ahp->ah_analogBank7Data,
319*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (sizeof (uint32_t) * ahp->ah_iniBank7.ia_rows));
320*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank7Data = NULL;
321*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
322*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (ahp->ah_addac5416_21 != NULL) {
323*dd1de374Slin wang - Sun Microsystems - Beijing China 		kmem_free(ahp->ah_addac5416_21,
324*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (sizeof (uint32_t) * ahp->ah_iniAddac.ia_rows *
325*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniAddac.ia_columns));
326*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_addac5416_21 = NULL;
327*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
328*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (ahp->ah_bank6Temp != NULL) {
329*dd1de374Slin wang - Sun Microsystems - Beijing China 		kmem_free(ahp->ah_bank6Temp,
330*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (sizeof (uint32_t) * ahp->ah_iniBank6.ia_rows));
331*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_bank6Temp = NULL;
332*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
333*dd1de374Slin wang - Sun Microsystems - Beijing China }
334*dd1de374Slin wang - Sun Microsystems - Beijing China 
335*dd1de374Slin wang - Sun Microsystems - Beijing China boolean_t
ath9k_hw_init_rf(struct ath_hal * ah,int * status)336*dd1de374Slin wang - Sun Microsystems - Beijing China ath9k_hw_init_rf(struct ath_hal *ah, int *status)
337*dd1de374Slin wang - Sun Microsystems - Beijing China {
338*dd1de374Slin wang - Sun Microsystems - Beijing China 	struct ath_hal_5416 *ahp = AH5416(ah);
339*dd1de374Slin wang - Sun Microsystems - Beijing China 
340*dd1de374Slin wang - Sun Microsystems - Beijing China 	if (!AR_SREV_9280_10_OR_LATER(ah)) {
341*dd1de374Slin wang - Sun Microsystems - Beijing China 
342*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank0Data =
343*dd1de374Slin wang - Sun Microsystems - Beijing China 		    kmem_zalloc((sizeof (uint32_t) *
344*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniBank0.ia_rows), KM_SLEEP);
345*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank1Data =
346*dd1de374Slin wang - Sun Microsystems - Beijing China 		    kmem_zalloc((sizeof (uint32_t) *
347*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniBank1.ia_rows), KM_SLEEP);
348*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank2Data =
349*dd1de374Slin wang - Sun Microsystems - Beijing China 		    kmem_zalloc((sizeof (uint32_t) *
350*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniBank2.ia_rows), KM_SLEEP);
351*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank3Data =
352*dd1de374Slin wang - Sun Microsystems - Beijing China 		    kmem_zalloc((sizeof (uint32_t) *
353*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniBank3.ia_rows), KM_SLEEP);
354*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank6Data =
355*dd1de374Slin wang - Sun Microsystems - Beijing China 		    kmem_zalloc((sizeof (uint32_t) *
356*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniBank6.ia_rows), KM_SLEEP);
357*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank6TPCData =
358*dd1de374Slin wang - Sun Microsystems - Beijing China 		    kmem_zalloc((sizeof (uint32_t) *
359*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniBank6TPC.ia_rows), KM_SLEEP);
360*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_analogBank7Data =
361*dd1de374Slin wang - Sun Microsystems - Beijing China 		    kmem_zalloc((sizeof (uint32_t) *
362*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniBank7.ia_rows), KM_SLEEP);
363*dd1de374Slin wang - Sun Microsystems - Beijing China 
364*dd1de374Slin wang - Sun Microsystems - Beijing China 		if (ahp->ah_analogBank0Data == NULL ||
365*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_analogBank1Data == NULL ||
366*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_analogBank2Data == NULL ||
367*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_analogBank3Data == NULL ||
368*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_analogBank6Data == NULL ||
369*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_analogBank6TPCData == NULL ||
370*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_analogBank7Data == NULL) {
371*dd1de374Slin wang - Sun Microsystems - Beijing China 			ARN_DBG((ARN_DBG_FATAL, "arn: ath9k_hw_init_rf(): "
372*dd1de374Slin wang - Sun Microsystems - Beijing China 			    "cannot allocate RF banks\n"));
373*dd1de374Slin wang - Sun Microsystems - Beijing China 			*status = ENOMEM;
374*dd1de374Slin wang - Sun Microsystems - Beijing China 			return (B_FALSE);
375*dd1de374Slin wang - Sun Microsystems - Beijing China 		}
376*dd1de374Slin wang - Sun Microsystems - Beijing China 
377*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_addac5416_21 =
378*dd1de374Slin wang - Sun Microsystems - Beijing China 		    kmem_zalloc((sizeof (uint32_t) *
379*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniAddac.ia_rows *
380*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniAddac.ia_columns), KM_SLEEP);
381*dd1de374Slin wang - Sun Microsystems - Beijing China 		if (ahp->ah_addac5416_21 == NULL) {
382*dd1de374Slin wang - Sun Microsystems - Beijing China 			ARN_DBG((ARN_DBG_FATAL, "arn: ath9k_hw_init_rf(): "
383*dd1de374Slin wang - Sun Microsystems - Beijing China 			    "cannot allocate ah_addac5416_21\n"));
384*dd1de374Slin wang - Sun Microsystems - Beijing China 			*status = ENOMEM;
385*dd1de374Slin wang - Sun Microsystems - Beijing China 			return (B_FALSE);
386*dd1de374Slin wang - Sun Microsystems - Beijing China 		}
387*dd1de374Slin wang - Sun Microsystems - Beijing China 
388*dd1de374Slin wang - Sun Microsystems - Beijing China 		ahp->ah_bank6Temp =
389*dd1de374Slin wang - Sun Microsystems - Beijing China 		    kmem_zalloc((sizeof (uint32_t) *
390*dd1de374Slin wang - Sun Microsystems - Beijing China 		    ahp->ah_iniBank6.ia_rows), KM_SLEEP);
391*dd1de374Slin wang - Sun Microsystems - Beijing China 		if (ahp->ah_bank6Temp == NULL) {
392*dd1de374Slin wang - Sun Microsystems - Beijing China 			ARN_DBG((ARN_DBG_FATAL, "arn: ath9k_hw_init_rf(): "
393*dd1de374Slin wang - Sun Microsystems - Beijing China 			    "cannot allocate ah_bank6Temp\n"));
394*dd1de374Slin wang - Sun Microsystems - Beijing China 			*status = ENOMEM;
395*dd1de374Slin wang - Sun Microsystems - Beijing China 			return (B_FALSE);
396*dd1de374Slin wang - Sun Microsystems - Beijing China 		}
397*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
398*dd1de374Slin wang - Sun Microsystems - Beijing China 
399*dd1de374Slin wang - Sun Microsystems - Beijing China 	return (B_TRUE);
400*dd1de374Slin wang - Sun Microsystems - Beijing China }
401*dd1de374Slin wang - Sun Microsystems - Beijing China 
402*dd1de374Slin wang - Sun Microsystems - Beijing China /* ARGSUSED */
403*dd1de374Slin wang - Sun Microsystems - Beijing China void
ath9k_hw_decrease_chain_power(struct ath_hal * ah,struct ath9k_channel * chan)404*dd1de374Slin wang - Sun Microsystems - Beijing China ath9k_hw_decrease_chain_power(struct ath_hal *ah, struct ath9k_channel *chan)
405*dd1de374Slin wang - Sun Microsystems - Beijing China {
406*dd1de374Slin wang - Sun Microsystems - Beijing China 	/* LINTED E_FUNC_SET_NOT_USED */
407*dd1de374Slin wang - Sun Microsystems - Beijing China 	int i, regWrites = 0;
408*dd1de374Slin wang - Sun Microsystems - Beijing China 	struct ath_hal_5416 *ahp = AH5416(ah);
409*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t bank6SelMask;
410*dd1de374Slin wang - Sun Microsystems - Beijing China 	uint32_t *bank6Temp = ahp->ah_bank6Temp;
411*dd1de374Slin wang - Sun Microsystems - Beijing China 
412*dd1de374Slin wang - Sun Microsystems - Beijing China 	switch (ahp->ah_diversityControl) {
413*dd1de374Slin wang - Sun Microsystems - Beijing China 	case ATH9K_ANT_FIXED_A:
414*dd1de374Slin wang - Sun Microsystems - Beijing China 		bank6SelMask =
415*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (ahp-> ah_antennaSwitchSwap & ANTSWAP_AB) ? REDUCE_CHAIN_0 :
416*dd1de374Slin wang - Sun Microsystems - Beijing China 		    REDUCE_CHAIN_1;
417*dd1de374Slin wang - Sun Microsystems - Beijing China 		break;
418*dd1de374Slin wang - Sun Microsystems - Beijing China 	case ATH9K_ANT_FIXED_B:
419*dd1de374Slin wang - Sun Microsystems - Beijing China 		bank6SelMask =
420*dd1de374Slin wang - Sun Microsystems - Beijing China 		    (ahp-> ah_antennaSwitchSwap & ANTSWAP_AB) ? REDUCE_CHAIN_1 :
421*dd1de374Slin wang - Sun Microsystems - Beijing China 		    REDUCE_CHAIN_0;
422*dd1de374Slin wang - Sun Microsystems - Beijing China 		break;
423*dd1de374Slin wang - Sun Microsystems - Beijing China 	case ATH9K_ANT_VARIABLE:
424*dd1de374Slin wang - Sun Microsystems - Beijing China 	default:
425*dd1de374Slin wang - Sun Microsystems - Beijing China 		return;
426*dd1de374Slin wang - Sun Microsystems - Beijing China 	}
427*dd1de374Slin wang - Sun Microsystems - Beijing China 
428*dd1de374Slin wang - Sun Microsystems - Beijing China 	for (i = 0; i < ahp->ah_iniBank6.ia_rows; i++)
429*dd1de374Slin wang - Sun Microsystems - Beijing China 		bank6Temp[i] = ahp->ah_analogBank6Data[i];
430*dd1de374Slin wang - Sun Microsystems - Beijing China 
431*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE(ah, AR_PHY_BASE + 0xD8, bank6SelMask);
432*dd1de374Slin wang - Sun Microsystems - Beijing China 
433*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_phy_modify_rx_buffer(bank6Temp, 1, 1, 189, 0);
434*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_phy_modify_rx_buffer(bank6Temp, 1, 1, 190, 0);
435*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_phy_modify_rx_buffer(bank6Temp, 1, 1, 191, 0);
436*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_phy_modify_rx_buffer(bank6Temp, 1, 1, 192, 0);
437*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_phy_modify_rx_buffer(bank6Temp, 1, 1, 193, 0);
438*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_phy_modify_rx_buffer(bank6Temp, 1, 1, 222, 0);
439*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_phy_modify_rx_buffer(bank6Temp, 1, 1, 245, 0);
440*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_phy_modify_rx_buffer(bank6Temp, 1, 1, 246, 0);
441*dd1de374Slin wang - Sun Microsystems - Beijing China 	ath9k_phy_modify_rx_buffer(bank6Temp, 1, 1, 247, 0);
442*dd1de374Slin wang - Sun Microsystems - Beijing China 
443*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE_RF_ARRAY(&ahp->ah_iniBank6, bank6Temp, regWrites);
444*dd1de374Slin wang - Sun Microsystems - Beijing China 
445*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE(ah, AR_PHY_BASE + 0xD8, 0x00000053);
446*dd1de374Slin wang - Sun Microsystems - Beijing China #ifdef ALTER_SWITCH
447*dd1de374Slin wang - Sun Microsystems - Beijing China 	REG_WRITE(ah, PHY_SWITCH_CHAIN_0,
448*dd1de374Slin wang - Sun Microsystems - Beijing China 	    (REG_READ(ah, PHY_SWITCH_CHAIN_0) & ~0x38)
449*dd1de374Slin wang - Sun Microsystems - Beijing China 	    | ((REG_READ(ah, PHY_SWITCH_CHAIN_0) >> 3) & 0x38));
450*dd1de374Slin wang - Sun Microsystems - Beijing China #endif
451*dd1de374Slin wang - Sun Microsystems - Beijing China }
452