• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  ******************************************************************************/
15 #ifndef _RTW_MP_H_
16 #define _RTW_MP_H_
17 
18 #define MAX_MP_XMITBUF_SZ	2048
19 #define NR_MP_XMITFRAME		8
20 
21 struct mp_xmit_frame
22 {
23 	struct list_head	list;
24 
25 	struct pkt_attrib attrib;
26 
27 	_pkt *pkt;
28 
29 	int frame_tag;
30 
31 	struct adapter *padapter;
32 
33 	uint mem[(MAX_MP_XMITBUF_SZ >> 2)];
34 };
35 
36 struct mp_wiparam
37 {
38 	u32 bcompleted;
39 	u32 act_type;
40 	u32 io_offset;
41 	u32 io_value;
42 };
43 
44 typedef void(*wi_act_func)(void* padapter);
45 
46 struct mp_tx
47 {
48 	u8 stop;
49 	u32 count, sended;
50 	u8 payload;
51 	struct pkt_attrib attrib;
52 	/* struct tx_desc desc; */
53 	/* u8 resvdtx[7]; */
54 	u8 desc[TXDESC_SIZE];
55 	u8 *pallocated_buf;
56 	u8 *buf;
57 	u32 buf_size, write_size;
58 	void *PktTxThread;
59 };
60 
61 #define MP_MAX_LINES		1000
62 #define MP_MAX_LINES_BYTES	256
63 
64 typedef void (*MPT_WORK_ITEM_HANDLER)(void *Adapter);
65 typedef struct _MPT_CONTEXT
66 {
67 	/*  Indicate if we have started Mass Production Test. */
68 	bool			bMassProdTest;
69 
70 	/*  Indicate if the driver is unloading or unloaded. */
71 	bool			bMptDrvUnload;
72 
73 	_sema			MPh2c_Sema;
74 	_timer			MPh2c_timeout_timer;
75 /*  Event used to sync H2c for BT control */
76 
77 	bool		MptH2cRspEvent;
78 	bool		MptBtC2hEvent;
79 	bool		bMPh2c_timeout;
80 
81 	/* 8190 PCI does not support NDIS_WORK_ITEM. */
82 	/*  Work Item for Mass Production Test. */
83 	/* NDIS_WORK_ITEM	MptWorkItem; */
84 /* 	RT_WORK_ITEM		MptWorkItem; */
85 	/*  Event used to sync the case unloading driver and MptWorkItem is still in progress. */
86 /* 	NDIS_EVENT		MptWorkItemEvent; */
87 	/*  To protect the following variables. */
88 /* 	NDIS_SPIN_LOCK		MptWorkItemSpinLock; */
89 	/*  Indicate a MptWorkItem is scheduled and not yet finished. */
90 	bool			bMptWorkItemInProgress;
91 	/*  An instance which implements function and context of MptWorkItem. */
92 	MPT_WORK_ITEM_HANDLER	CurrMptAct;
93 
94 	/*  1 =Start, 0 =Stop from UI. */
95 	u32 		MptTestStart;
96 	/*  _TEST_MODE, defined in MPT_Req2.h */
97 	u32 		MptTestItem;
98 	/*  Variable needed in each implementation of CurrMptAct. */
99 	u32 		MptActType;	/*  Type of action performed in CurrMptAct. */
100 	/*  The Offset of IO operation is depend of MptActType. */
101 	u32 		MptIoOffset;
102 	/*  The Value of IO operation is depend of MptActType. */
103 	u32 		MptIoValue;
104 	/*  The RfPath of IO operation is depend of MptActType. */
105 	u32 		MptRfPath;
106 
107 	enum WIRELESS_MODE		MptWirelessModeToSw;	/*  Wireless mode to switch. */
108 	u8 	MptChannelToSw;		/*  Channel to switch. */
109 	u8 	MptInitGainToSet;	/*  Initial gain to set. */
110 	u32 		MptBandWidth;		/*  bandwidth to switch. */
111 	u32 		MptRateIndex;		/*  rate index. */
112 	/*  Register value kept for Single Carrier Tx test. */
113 	u8 	btMpCckTxPower;
114 	/*  Register value kept for Single Carrier Tx test. */
115 	u8 	btMpOfdmTxPower;
116 	/*  For MP Tx Power index */
117 	u8 	TxPwrLevel[2];	/*  rf-A, rf-B */
118 	u32 		RegTxPwrLimit;
119 	/*  Content of RCR Regsiter for Mass Production Test. */
120 	u32 		MptRCR;
121 	/*  true if we only receive packets with specific pattern. */
122 	bool			bMptFilterPattern;
123 	/*  Rx OK count, statistics used in Mass Production Test. */
124 	u32 		MptRxOkCnt;
125 	/*  Rx CRC32 error count, statistics used in Mass Production Test. */
126 	u32 		MptRxCrcErrCnt;
127 
128 	bool			bCckContTx;	/*  true if we are in CCK Continuous Tx test. */
129 	bool			bOfdmContTx;	/*  true if we are in OFDM Continuous Tx test. */
130 	bool			bStartContTx;	/*  true if we have start Continuous Tx test. */
131 	/*  true if we are in Single Carrier Tx test. */
132 	bool			bSingleCarrier;
133 	/*  true if we are in Carrier Suppression Tx Test. */
134 	bool			bCarrierSuppression;
135 	/* true if we are in Single Tone Tx test. */
136 	bool			bSingleTone;
137 
138 	/*  ACK counter asked by K.Y.. */
139 	bool			bMptEnableAckCounter;
140 	u32 		MptAckCounter;
141 
142 	/*  SD3 Willis For 8192S to save 1T/2T RF table for ACUT	Only fro ACUT delete later ~~~! */
143 	/* s8		BufOfLines[2][MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; */
144 	/* s8			BufOfLines[2][MP_MAX_LINES][MP_MAX_LINES_BYTES]; */
145 	/* s32			RfReadLine[2]; */
146 
147 	u8 APK_bound[2];	/* for APK	path A/path B */
148 	bool		bMptIndexEven;
149 
150 	u8 backup0xc50;
151 	u8 backup0xc58;
152 	u8 backup0xc30;
153 	u8 backup0x52_RF_A;
154 	u8 backup0x52_RF_B;
155 
156 	u32 		backup0x58_RF_A;
157 	u32 		backup0x58_RF_B;
158 
159 	u8 	h2cReqNum;
160 	u8 	c2hBuf[32];
161 
162     u8          btInBuf[100];
163 	u32 		mptOutLen;
164     u8          mptOutBuf[100];
165 
166 }MPT_CONTEXT, *PMPT_CONTEXT;
167 /* endif */
168 
169 /* E-Fuse */
170 #define EFUSE_MAP_SIZE		512
171 
172 #define EFUSE_MAX_SIZE		512
173 /* end of E-Fuse */
174 
175 /* define RTPRIV_IOCTL_MP					(SIOCIWFIRSTPRIV + 0x17) */
176 enum {
177 	WRITE_REG = 1,
178 	READ_REG,
179 	WRITE_RF,
180 	READ_RF,
181 	MP_START,
182 	MP_STOP,
183 	MP_RATE,
184 	MP_CHANNEL,
185 	MP_BANDWIDTH,
186 	MP_TXPOWER,
187 	MP_ANT_TX,
188 	MP_ANT_RX,
189 	MP_CTX,
190 	MP_QUERY,
191 	MP_ARX,
192 	MP_PSD,
193 	MP_PWRTRK,
194 	MP_THER,
195 	MP_IOCTL,
196 	EFUSE_GET,
197 	EFUSE_SET,
198 	MP_RESET_STATS,
199 	MP_DUMP,
200 	MP_PHYPARA,
201 	MP_SetRFPathSwh,
202 	MP_QueryDrvStats,
203 	MP_SetBT,
204 	CTA_TEST,
205 	MP_DISABLE_BT_COEXIST,
206 	MP_PwrCtlDM,
207 #ifdef CONFIG_WOWLAN
208 	MP_WOW_ENABLE,
209 #endif
210 #ifdef CONFIG_AP_WOWLAN
211 	MP_AP_WOW_ENABLE,
212 #endif
213 	MP_NULL,
214 	MP_GET_TXPOWER_INX,
215 };
216 
217 struct mp_priv
218 {
219 	struct adapter *papdater;
220 
221 	/* Testing Flag */
222 	u32 mode;/* 0 for normal type packet, 1 for loopback packet (16bytes TXCMD) */
223 
224 	u32 prev_fw_state;
225 
226 	/* OID cmd handler */
227 	struct mp_wiparam workparam;
228 /* 	u8 act_in_progress; */
229 
230 	/* Tx Section */
231 	u8 TID;
232 	u32 tx_pktcount;
233 	u32 pktInterval;
234 	struct mp_tx tx;
235 
236 	/* Rx Section */
237 	u32 rx_bssidpktcount;
238 	u32 rx_pktcount;
239 	u32 rx_pktcount_filter_out;
240 	u32 rx_crcerrpktcount;
241 	u32 rx_pktloss;
242 	bool  rx_bindicatePkt;
243 	struct recv_stat rxstat;
244 
245 	/* RF/BB relative */
246 	u8 channel;
247 	u8 bandwidth;
248 	u8 prime_channel_offset;
249 	u8 txpoweridx;
250 	u8 txpoweridx_b;
251 	u8 rateidx;
252 	u32 preamble;
253 /* 	u8 modem; */
254 	u32 CrystalCap;
255 /* 	u32 curr_crystalcap; */
256 
257 	u16 antenna_tx;
258 	u16 antenna_rx;
259 /* 	u8 curr_rfpath; */
260 
261 	u8 check_mp_pkt;
262 
263 	u8 bSetTxPower;
264 /* 	uint ForcedDataRate; */
265 	u8 mp_dm;
266 	u8 mac_filter[ETH_ALEN];
267 	u8 bmac_filter;
268 
269 	struct wlan_network mp_network;
270 	NDIS_802_11_MAC_ADDRESS network_macaddr;
271 
272 	u8 *pallocated_mp_xmitframe_buf;
273 	u8 *pmp_xmtframe_buf;
274 	struct __queue free_mp_xmitqueue;
275 	u32 free_mp_xmitframe_cnt;
276 	bool bSetRxBssid;
277 	bool bTxBufCkFail;
278 
279 	MPT_CONTEXT MptCtx;
280 
281 	u8 *TXradomBuffer;
282 };
283 
284 typedef struct _IOCMD_STRUCT_ {
285 	u8 cmdclass;
286 	u16 value;
287 	u8 index;
288 }IOCMD_STRUCT;
289 
290 struct rf_reg_param {
291 	u32 path;
292 	u32 offset;
293 	u32 value;
294 };
295 
296 struct bb_reg_param {
297 	u32 offset;
298 	u32 value;
299 };
300 
301 #define LOWER	true
302 #define RAISE	false
303 
304 /* Hardware Registers */
305 #define BB_REG_BASE_ADDR		0x800
306 
307 /* MP variables */
308 enum MP_MODE {
309 	MP_OFF,
310 	MP_ON,
311 	MP_ERR,
312 	MP_CONTINUOUS_TX,
313 	MP_SINGLE_CARRIER_TX,
314 	MP_CARRIER_SUPPRISSION_TX,
315 	MP_SINGLE_TONE_TX,
316 	MP_PACKET_TX,
317 	MP_PACKET_RX
318 };
319 
320 #define MAX_RF_PATH_NUMS	RF_PATH_MAX
321 
322 extern u8 mpdatarate[NumRates];
323 
324 /* MP set force data rate base on the definition. */
325 enum MPT_RATE_INDEX {
326 	/* CCK rate. */
327 	MPT_RATE_1M = 0 ,	/* 0 */
328 	MPT_RATE_2M,
329 	MPT_RATE_55M,
330 	MPT_RATE_11M,	/* 3 */
331 
332 	/* OFDM rate. */
333 	MPT_RATE_6M,	/* 4 */
334 	MPT_RATE_9M,
335 	MPT_RATE_12M,
336 	MPT_RATE_18M,
337 	MPT_RATE_24M,
338 	MPT_RATE_36M,
339 	MPT_RATE_48M,
340 	MPT_RATE_54M,	/* 11 */
341 
342 	/* HT rate. */
343 	MPT_RATE_MCS0,	/* 12 */
344 	MPT_RATE_MCS1,
345 	MPT_RATE_MCS2,
346 	MPT_RATE_MCS3,
347 	MPT_RATE_MCS4,
348 	MPT_RATE_MCS5,
349 	MPT_RATE_MCS6,
350 	MPT_RATE_MCS7,	/* 19 */
351 	MPT_RATE_MCS8,
352 	MPT_RATE_MCS9,
353 	MPT_RATE_MCS10,
354 	MPT_RATE_MCS11,
355 	MPT_RATE_MCS12,
356 	MPT_RATE_MCS13,
357 	MPT_RATE_MCS14,
358 	MPT_RATE_MCS15,	/* 27 */
359 	/* VHT rate. Total: 20*/
360 	MPT_RATE_VHT1SS_MCS0 = 100,/*  To reserve MCS16~MCS31, the index starts from #100. */
361 	MPT_RATE_VHT1SS_MCS1, /*  #101 */
362 	MPT_RATE_VHT1SS_MCS2,
363 	MPT_RATE_VHT1SS_MCS3,
364 	MPT_RATE_VHT1SS_MCS4,
365 	MPT_RATE_VHT1SS_MCS5,
366 	MPT_RATE_VHT1SS_MCS6, /*  #106 */
367 	MPT_RATE_VHT1SS_MCS7,
368 	MPT_RATE_VHT1SS_MCS8,
369 	MPT_RATE_VHT1SS_MCS9,
370 	MPT_RATE_VHT2SS_MCS0,
371 	MPT_RATE_VHT2SS_MCS1, /*  #111 */
372 	MPT_RATE_VHT2SS_MCS2,
373 	MPT_RATE_VHT2SS_MCS3,
374 	MPT_RATE_VHT2SS_MCS4,
375 	MPT_RATE_VHT2SS_MCS5,
376 	MPT_RATE_VHT2SS_MCS6, /*  #116 */
377 	MPT_RATE_VHT2SS_MCS7,
378 	MPT_RATE_VHT2SS_MCS8,
379 	MPT_RATE_VHT2SS_MCS9,
380 	MPT_RATE_LAST
381 };
382 
383 #define MAX_TX_PWR_INDEX_N_MODE 64	/*  0x3F */
384 
385 enum POWER_MODE {
386 	POWER_LOW = 0,
387 	POWER_NORMAL
388 };
389 
390 /*  The following enumeration is used to define the value of Reg0xD00[30:28] or JaguarReg0x914[18:16]. */
391 enum OFDM_TX_MODE {
392 	OFDM_ALL_OFF		= 0,
393 	OFDM_ContinuousTx	= 1,
394 	OFDM_SingleCarrier	= 2,
395 	OFDM_SingleTone		= 4,
396 };
397 
398 #define RX_PKT_BROADCAST	1
399 #define RX_PKT_DEST_ADDR	2
400 #define RX_PKT_PHY_MATCH	3
401 
402 #define Mac_OFDM_OK			0x00000000
403 #define Mac_OFDM_Fail			0x10000000
404 #define Mac_OFDM_FasleAlarm	0x20000000
405 #define Mac_CCK_OK				0x30000000
406 #define Mac_CCK_Fail			0x40000000
407 #define Mac_CCK_FasleAlarm		0x50000000
408 #define Mac_HT_OK				0x60000000
409 #define Mac_HT_Fail			0x70000000
410 #define Mac_HT_FasleAlarm		0x90000000
411 #define Mac_DropPacket			0xA0000000
412 
413 enum ENCRY_CTRL_STATE {
414 	HW_CONTROL,		/* hw encryption& decryption */
415 	SW_CONTROL,		/* sw encryption& decryption */
416 	HW_ENCRY_SW_DECRY,	/* hw encryption & sw decryption */
417 	SW_ENCRY_HW_DECRY	/* sw encryption & hw decryption */
418 };
419 
420 enum MPT_TXPWR_DEF {
421 	MPT_CCK,
422 	MPT_OFDM, /*  L and HT OFDM */
423 	MPT_VHT_OFDM
424 };
425 
426 #define		REG_RF_BB_GAIN_OFFSET	0x7f
427 #define		RF_GAIN_OFFSET_MASK	0xfffff
428 
429 /*  */
430 /* struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv); */
431 /* int free_mp_xmitframe(struct xmit_priv *pxmitpriv, struct mp_xmit_frame *pmp_xmitframe); */
432 
433 s32 init_mp_priv(struct adapter *padapter);
434 void free_mp_priv(struct mp_priv *pmp_priv);
435 s32 MPT_InitializeAdapter(struct adapter *padapter, u8 Channel);
436 void MPT_DeInitAdapter(struct adapter *padapter);
437 s32 mp_start_test(struct adapter *padapter);
438 void mp_stop_test(struct adapter *padapter);
439 
440 u32 _read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask);
441 void _write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val);
442 
443 u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz);
444 void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz);
445 u32 read_bbreg(struct adapter *padapter, u32 addr, u32 bitmask);
446 void write_bbreg(struct adapter *padapter, u32 addr, u32 bitmask, u32 val);
447 u32 read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr);
448 void write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 val);
449 
450 void SetChannel(struct adapter *padapter);
451 void SetBandwidth(struct adapter *padapter);
452 int SetTxPower(struct adapter *padapter);
453 void SetAntennaPathPower(struct adapter *padapter);
454 void SetDataRate(struct adapter *padapter);
455 
456 void SetAntenna(struct adapter *padapter);
457 
458 s32 SetThermalMeter(struct adapter *padapter, u8 target_ther);
459 void GetThermalMeter(struct adapter *padapter, u8 *value);
460 
461 void SetContinuousTx(struct adapter *padapter, u8 bStart);
462 void SetSingleCarrierTx(struct adapter *padapter, u8 bStart);
463 void SetSingleToneTx(struct adapter *padapter, u8 bStart);
464 void SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart);
465 void PhySetTxPowerLevel(struct adapter *padapter);
466 
467 void fill_txdesc_for_mp(struct adapter *padapter, u8 *ptxdesc);
468 void SetPacketTx(struct adapter *padapter);
469 void SetPacketRx(struct adapter *padapter, u8 bStartRx);
470 
471 void ResetPhyRxPktCount(struct adapter *padapter);
472 u32 GetPhyRxPktReceived(struct adapter *padapter);
473 u32 GetPhyRxPktCRC32Error(struct adapter *padapter);
474 
475 s32	SetPowerTracking(struct adapter *padapter, u8 enable);
476 void GetPowerTracking(struct adapter *padapter, u8 *enable);
477 
478 u32 mp_query_psd(struct adapter *padapter, u8 *data);
479 
480 void Hal_SetAntenna(struct adapter *padapter);
481 void Hal_SetBandwidth(struct adapter *padapter);
482 
483 void Hal_SetTxPower(struct adapter *padapter);
484 void Hal_SetCarrierSuppressionTx(struct adapter *padapter, u8 bStart);
485 void Hal_SetSingleToneTx (struct adapter *padapter , u8 bStart);
486 void Hal_SetSingleCarrierTx (struct adapter *padapter, u8 bStart);
487 void Hal_SetContinuousTx (struct adapter *padapter, u8 bStart);
488 void Hal_SetBandwidth(struct adapter *padapter);
489 
490 void Hal_SetDataRate(struct adapter *padapter);
491 void Hal_SetChannel(struct adapter *padapter);
492 void Hal_SetAntennaPathPower(struct adapter *padapter);
493 s32 Hal_SetThermalMeter(struct adapter *padapter, u8 target_ther);
494 s32 Hal_SetPowerTracking(struct adapter *padapter, u8 enable);
495 void Hal_GetPowerTracking(struct adapter *padapter, u8 * enable);
496 void Hal_GetThermalMeter(struct adapter *padapter, u8 *value);
497 void Hal_mpt_SwitchRfSetting(struct adapter *padapter);
498 void Hal_MPT_CCKTxPowerAdjust(struct adapter * Adapter, bool bInCH14);
499 void Hal_MPT_CCKTxPowerAdjustbyIndex(struct adapter *padapter, bool beven);
500 void Hal_SetCCKTxPower(struct adapter *padapter, u8 * TxPower);
501 void Hal_SetOFDMTxPower(struct adapter *padapter, u8 * TxPower);
502 void Hal_TriggerRFThermalMeter(struct adapter *padapter);
503 u8 Hal_ReadRFThermalMeter(struct adapter *padapter);
504 void Hal_SetCCKContinuousTx(struct adapter *padapter, u8 bStart);
505 void Hal_SetOFDMContinuousTx(struct adapter *padapter, u8 bStart);
506 void Hal_ProSetCrystalCap (struct adapter *padapter , u32 CrystalCapVal);
507 void MP_PHY_SetRFPathSwitch(struct adapter *padapter , bool bMain);
508 u32 mpt_ProQueryCalTxPower(struct adapter *padapter, u8 RfPath);
509 void MPT_PwrCtlDM(struct adapter *padapter, u32 bstart);
510 u8 MptToMgntRate(u32 MptRateIdx);
511 
512 #endif /* _RTW_MP_H_ */
513