1 #ifndef __RTL871X_MP_H_
2 #define __RTL871X_MP_H_
3 
4 /*	00 - Success */
5 /*	11 - Error */
6 #define STATUS_SUCCESS			(0x00000000L)
7 #define STATUS_PENDING			(0x00000103L)
8 #define STATUS_UNSUCCESSFUL		(0xC0000001L)
9 #define STATUS_INSUFFICIENT_RESOURCES	(0xC000009AL)
10 #define STATUS_NOT_SUPPORTED		(0xC00000BBL)
11 #define NDIS_STATUS_SUCCESS		((uint)STATUS_SUCCESS)
12 #define NDIS_STATUS_PENDING		((uint) STATUS_PENDING)
13 #define NDIS_STATUS_NOT_RECOGNIZED	((uint)0x00010001L)
14 #define NDIS_STATUS_NOT_COPIED		((uint)0x00010002L)
15 #define NDIS_STATUS_NOT_ACCEPTED	((uint)0x00010003L)
16 #define NDIS_STATUS_CALL_ACTIVE		((uint)0x00010007L)
17 #define NDIS_STATUS_FAILURE		((uint) STATUS_UNSUCCESSFUL)
18 #define NDIS_STATUS_RESOURCES		((uint)\
19 					STATUS_INSUFFICIENT_RESOURCES)
20 #define NDIS_STATUS_CLOSING		((uint)0xC0010002L)
21 #define NDIS_STATUS_BAD_VERSION		((uint)0xC0010004L)
22 #define NDIS_STATUS_BAD_CHARACTERISTICS	((uint)0xC0010005L)
23 #define NDIS_STATUS_ADAPTER_NOT_FOUND	((uint)0xC0010006L)
24 #define NDIS_STATUS_OPEN_FAILED		((uint)0xC0010007L)
25 #define NDIS_STATUS_DEVICE_FAILED	((uint)0xC0010008L)
26 #define NDIS_STATUS_MULTICAST_FULL	((uint)0xC0010009L)
27 #define NDIS_STATUS_MULTICAST_EXISTS	((uint)0xC001000AL)
28 #define NDIS_STATUS_MULTICAST_NOT_FOUND	((uint)0xC001000BL)
29 #define NDIS_STATUS_REQUEST_ABORTED	((uint)0xC001000CL)
30 #define NDIS_STATUS_RESET_IN_PROGRESS	((uint)0xC001000DL)
31 #define NDIS_STATUS_CLOSING_INDICATING	((uint)0xC001000EL)
32 #define NDIS_STATUS_NOT_SUPPORTED	((uint)STATUS_NOT_SUPPORTED)
33 #define NDIS_STATUS_INVALID_PACKET	((uint)0xC001000FL)
34 #define NDIS_STATUS_OPEN_LIST_FULL	((uint)0xC0010010L)
35 #define NDIS_STATUS_ADAPTER_NOT_READY	((uint)0xC0010011L)
36 #define NDIS_STATUS_ADAPTER_NOT_OPEN	((uint)0xC0010012L)
37 #define NDIS_STATUS_NOT_INDICATING	((uint)0xC0010013L)
38 #define NDIS_STATUS_INVALID_LENGTH	((uint)0xC0010014L)
39 #define NDIS_STATUS_INVALID_DATA	((uint)0xC0010015L)
40 #define NDIS_STATUS_BUFFER_TOO_SHORT	((uint)0xC0010016L)
41 #define NDIS_STATUS_INVALID_OID		((uint)0xC0010017L)
42 #define NDIS_STATUS_ADAPTER_REMOVED	((uint)0xC0010018L)
43 #define NDIS_STATUS_UNSUPPORTED_MEDIA	((uint)0xC0010019L)
44 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((uint)0xC001001AL)
45 #define NDIS_STATUS_FILE_NOT_FOUND	((uint)0xC001001BL)
46 #define NDIS_STATUS_ERROR_READING_FILE	((uint)0xC001001CL)
47 #define NDIS_STATUS_ALREADY_MAPPED	((uint)0xC001001DL)
48 #define NDIS_STATUS_RESOURCE_CONFLICT	((uint)0xC001001EL)
49 #define NDIS_STATUS_NO_CABLE		((uint)0xC001001FL)
50 #define NDIS_STATUS_INVALID_SAP		((uint)0xC0010020L)
51 #define NDIS_STATUS_SAP_IN_USE		((uint)0xC0010021L)
52 #define NDIS_STATUS_INVALID_ADDRESS	((uint)0xC0010022L)
53 #define NDIS_STATUS_VC_NOT_ACTIVATED	((uint)0xC0010023L)
54 #define NDIS_STATUS_DEST_OUT_OF_ORDER	((uint)0xC0010024L) /* cause 27*/
55 #define NDIS_STATUS_VC_NOT_AVAILABLE	((uint)0xC0010025L) /* 35,45*/
56 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((uint)0xC0010026L) /* 37*/
57 #define NDIS_STATUS_INCOMPATABLE_QOS	((uint)0xC0010027L)  /* 49*/
58 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((uint)0xC0010028L)  /*  93*/
59 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((uint)0xC0010029L)  /*  3*/
60 #define MPT_NOOP			0
61 #define MPT_READ_MAC_1BYTE		1
62 #define MPT_READ_MAC_2BYTE		2
63 #define MPT_READ_MAC_4BYTE		3
64 #define MPT_WRITE_MAC_1BYTE		4
65 #define MPT_WRITE_MAC_2BYTE		5
66 #define MPT_WRITE_MAC_4BYTE		6
67 #define MPT_READ_BB_CCK			7
68 #define MPT_WRITE_BB_CCK		8
69 #define MPT_READ_BB_OFDM		9
70 #define MPT_WRITE_BB_OFDM		10
71 #define MPT_READ_RF			11
72 #define MPT_WRITE_RF			12
73 #define MPT_READ_EEPROM_1BYTE		13
74 #define MPT_WRITE_EEPROM_1BYTE		14
75 #define MPT_READ_EEPROM_2BYTE		15
76 #define MPT_WRITE_EEPROM_2BYTE		16
77 #define MPT_SET_CSTHRESHOLD		21
78 #define MPT_SET_INITGAIN		22
79 #define MPT_SWITCH_BAND			23
80 #define MPT_SWITCH_CHANNEL		24
81 #define MPT_SET_DATARATE		25
82 #define MPT_SWITCH_ANTENNA		26
83 #define MPT_SET_TX_POWER		27
84 #define MPT_SET_CONT_TX			28
85 #define MPT_SET_SINGLE_CARRIER		29
86 #define MPT_SET_CARRIER_SUPPRESSION	30
87 #define MPT_GET_RATE_TABLE		31
88 #define MPT_READ_TSSI			32
89 #define MPT_GET_THERMAL_METER		33
90 #define MAX_MP_XMITBUF_SZ	2048
91 #define NR_MP_XMITFRAME		8
92 
93 struct mp_xmit_frame {
94 	struct list_head list;
95 	struct pkt_attrib attrib;
96 	_pkt *pkt;
97 	int frame_tag;
98 	struct _adapter *padapter;
99 	u8 *mem_addr;
100 	u16 sz[8];
101 	struct urb *pxmit_urb[8];
102 	u8 bpending[8];
103 	u8 last[8];
104 	uint mem[(MAX_MP_XMITBUF_SZ >> 2)];
105 };
106 
107 struct mp_wiparam {
108 	u32 bcompleted;
109 	u32 act_type;
110 	u32 io_offset;
111 	u32 io_value;
112 };
113 
114 struct mp_priv {
115 	struct _adapter *papdater;
116 	/*OID cmd handler*/
117 	struct mp_wiparam workparam;
118 	u8 act_in_progress;
119 	/*Tx Section*/
120 	u8 TID;
121 	u32 tx_pktcount;
122 	/*Rx Section*/
123 	u32 rx_pktcount;
124 	u32 rx_crcerrpktcount;
125 	u32 rx_pktloss;
126 	struct recv_stat rxstat;
127 	/*RF/BB relative*/
128 	u32 curr_ch;
129 	u32 curr_rateidx;
130 	u8 curr_bandwidth;
131 	u8 curr_modem;
132 	u8 curr_txpoweridx;
133 	u32 curr_crystalcap;
134 	u16 antenna_tx;
135 	u16 antenna_rx;
136 	u8 curr_rfpath;
137 	u8 check_mp_pkt;
138 	uint ForcedDataRate;
139 	struct wlan_network mp_network;
140 	unsigned char network_macaddr[6];
141 	/*Testing Flag*/
142 	u32 mode;/*0 for normal type packet,
143 		  * 1 for loopback packet (16bytes TXCMD)*/
144 	sint prev_fw_state;
145 	u8 *pallocated_mp_xmitframe_buf;
146 	u8 *pmp_xmtframe_buf;
147 	struct  __queue free_mp_xmitqueue;
148 	u32 free_mp_xmitframe_cnt;
149 };
150 
151 struct IOCMD_STRUCT {
152 	u8	cmdclass;
153 	u16	value;
154 	u8	index;
155 };
156 
157 struct rf_reg_param {
158 	u32 path;
159 	u32 offset;
160 	u32 value;
161 };
162 
163 struct bb_reg_param {
164 	u32 offset;
165 	u32 value;
166 };
167 /* ======================================================================= */
168 
169 #define LOWER	true
170 #define RAISE	false
171 #define IOCMD_CTRL_REG			0x10250370
172 #define IOCMD_DATA_REG			0x10250374
173 #define IOCMD_GET_THERMAL_METER		0xFD000028
174 #define IOCMD_CLASS_BB_RF		0xF0
175 #define IOCMD_BB_READ_IDX		0x00
176 #define IOCMD_BB_WRITE_IDX		0x01
177 #define IOCMD_RF_READ_IDX		0x02
178 #define IOCMD_RF_WRIT_IDX		0x03
179 #define BB_REG_BASE_ADDR		0x800
180 #define RF_PATH_A	0
181 #define RF_PATH_B	1
182 #define RF_PATH_C	2
183 #define RF_PATH_D	3
184 #define MAX_RF_PATH_NUMS	2
185 #define _2MAC_MODE_	0
186 #define _LOOPBOOK_MODE_	1
187 
188 /* MP set force data rate base on the definition. */
189 enum {
190 	/* CCK rate. */
191 	MPT_RATE_1M,	/* 0 */
192 	MPT_RATE_2M,
193 	MPT_RATE_55M,
194 	MPT_RATE_11M,	/* 3 */
195 
196 	/* OFDM rate. */
197 	MPT_RATE_6M,	/* 4 */
198 	MPT_RATE_9M,
199 	MPT_RATE_12M,
200 	MPT_RATE_18M,
201 	MPT_RATE_24M,
202 	MPT_RATE_36M,
203 	MPT_RATE_48M,
204 	MPT_RATE_54M,	/* 11 */
205 
206 	/* HT rate. */
207 	MPT_RATE_MCS0,	/* 12 */
208 	MPT_RATE_MCS1,
209 	MPT_RATE_MCS2,
210 	MPT_RATE_MCS3,
211 	MPT_RATE_MCS4,
212 	MPT_RATE_MCS5,
213 	MPT_RATE_MCS6,
214 	MPT_RATE_MCS7,	/* 19 */
215 	MPT_RATE_MCS8,
216 	MPT_RATE_MCS9,
217 	MPT_RATE_MCS10,
218 	MPT_RATE_MCS11,
219 	MPT_RATE_MCS12,
220 	MPT_RATE_MCS13,
221 	MPT_RATE_MCS14,
222 	MPT_RATE_MCS15,	/* 27 */
223 	MPT_RATE_LAST
224 };
225 
226 /* Represent Channel Width in HT Capabilities */
227 enum HT_CHANNEL_WIDTH {
228 	HT_CHANNEL_WIDTH_20 = 0,
229 	HT_CHANNEL_WIDTH_40 = 1,
230 };
231 
232 #define MAX_TX_PWR_INDEX_N_MODE 64	/* 0x3F */
233 
234 enum POWER_MODE {
235 	POWER_LOW = 0,
236 	POWER_NORMAL
237 };
238 
239 #define RX_PKT_BROADCAST	1
240 #define RX_PKT_DEST_ADDR	2
241 #define RX_PKT_PHY_MATCH	3
242 
243 #define RPTMaxCount 0x000FFFFF;
244 
245 /* parameter 1 : BitMask
246  *	bit 0  : OFDM PPDU
247  *	bit 1  : OFDM False Alarm
248  *	bit 2  : OFDM MPDU OK
249  *	bit 3  : OFDM MPDU Fail
250  *	bit 4  : CCK PPDU
251  *	bit 5  : CCK False Alarm
252  *	bit 6  : CCK MPDU ok
253  *	bit 7  : CCK MPDU fail
254  *	bit 8  : HT PPDU counter
255  *	bit 9  : HT false alarm
256  *	bit 10 : HT MPDU total
257  *	bit 11 : HT MPDU OK
258  *	bit 12 : HT MPDU fail
259  *	bit 15 : RX full drop
260  */
261 enum RXPHY_BITMASK {
262 	OFDM_PPDU_BIT = 0,
263 	OFDM_MPDU_OK_BIT,
264 	OFDM_MPDU_FAIL_BIT,
265 	CCK_PPDU_BIT,
266 	CCK_MPDU_OK_BIT,
267 	CCK_MPDU_FAIL_BIT,
268 	HT_PPDU_BIT,
269 	HT_MPDU_BIT,
270 	HT_MPDU_OK_BIT,
271 	HT_MPDU_FAIL_BIT,
272 };
273 
274 enum ENCRY_CTRL_STATE {
275 	HW_CONTROL,		/*hw encryption& decryption*/
276 	SW_CONTROL,		/*sw encryption& decryption*/
277 	HW_ENCRY_SW_DECRY,	/*hw encryption & sw decryption*/
278 	SW_ENCRY_HW_DECRY	/*sw encryption & hw decryption*/
279 };
280 
281 /* Bandwidth Offset */
282 #define HAL_PRIME_CHNL_OFFSET_DONT_CARE	0
283 #define HAL_PRIME_CHNL_OFFSET_LOWER	1
284 #define HAL_PRIME_CHNL_OFFSET_UPPER	2
285 /*=======================================================================*/
286 void mp871xinit(struct _adapter *padapter);
287 void mp871xdeinit(struct _adapter *padapter);
288 u32 r8712_bb_reg_read(struct _adapter *Adapter, u16 offset);
289 u8 r8712_bb_reg_write(struct _adapter *Adapter, u16 offset, u32 value);
290 u32 r8712_rf_reg_read(struct _adapter *Adapter, u8 path, u8 offset);
291 u8 r8712_rf_reg_write(struct _adapter *Adapter, u8 path,
292 		      u8 offset, u32 value);
293 u32 r8712_get_bb_reg(struct _adapter *Adapter, u16 offset, u32 bitmask);
294 u8 r8712_set_bb_reg(struct _adapter *Adapter, u16 offset,
295 		    u32 bitmask, u32 value);
296 u32 r8712_get_rf_reg(struct _adapter *Adapter, u8 path, u8 offset,
297 		     u32 bitmask);
298 u8 r8712_set_rf_reg(struct _adapter *Adapter, u8 path, u8 offset,
299 		    u32 bitmask, u32 value);
300 
301 void r8712_SetChannel(struct _adapter *pAdapter);
302 void r8712_SetTxPower(struct _adapter *pAdapte);
303 void r8712_SetTxAGCOffset(struct _adapter *pAdapter, u32 ulTxAGCOffset);
304 void r8712_SetDataRate(struct _adapter *pAdapter);
305 void r8712_SwitchBandwidth(struct _adapter *pAdapter);
306 void r8712_SwitchAntenna(struct _adapter *pAdapter);
307 void r8712_SetCrystalCap(struct _adapter *pAdapter);
308 void r8712_GetThermalMeter(struct _adapter *pAdapter, u32 *value);
309 void r8712_SetContinuousTx(struct _adapter *pAdapter, u8 bStart);
310 void r8712_SetSingleCarrierTx(struct _adapter *pAdapter, u8 bStart);
311 void r8712_SetSingleToneTx(struct _adapter *pAdapter, u8 bStart);
312 void r8712_SetCarrierSuppressionTx(struct _adapter *pAdapter, u8 bStart);
313 void r8712_ResetPhyRxPktCount(struct _adapter *pAdapter);
314 u32 r8712_GetPhyRxPktReceived(struct _adapter *pAdapter);
315 u32 r8712_GetPhyRxPktCRC32Error(struct _adapter *pAdapter);
316 
317 #endif /*__RTL871X_MP_H_*/
318 
319