phy: rockchip-inno-usb2: add SDP detect retry
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8188eu / hal / OUTSRC / rtl8188e / HalHWImg8188E_MAC.c
1 /****************************************************************************** \r
2\r
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. \r
4\r
5 * This program is free software; you can redistribute it and/or modify it \r
6 * under the terms of version 2 of the GNU General Public License as \r
7 * published by the Free Software Foundation. \r
8\r
9 * This program is distributed in the hope that it will be useful, but WITHOUT \r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or \r
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for \r
12 * more details. \r
13\r
14 * You should have received a copy of the GNU General Public License along with \r
15 * this program; if not, write to the Free Software Foundation, Inc., \r
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA \r
17\r
18\r
19 ******************************************************************************/\r
20 \r
21 \r
22 #include "../odm_precomp.h"\r
23 #ifdef CONFIG_IOL_IOREG_CFG\r
24 #include <rtw_iol.h>\r
25 #endif\r
26 #if (RTL8188E_SUPPORT == 1)\r
27 static BOOLEAN\r
28 CheckCondition(\r
29     const u4Byte  Condition,\r
30     const u4Byte  Hex\r
31     )\r
32 {\r
33     u4Byte _board     = (Hex & 0x000000FF);\r
34     u4Byte _interface = (Hex & 0x0000FF00) >> 8;\r
35     u4Byte _platform  = (Hex & 0x00FF0000) >> 16;\r
36     u4Byte cond = Condition;\r
37 \r
38     if ( Condition == 0xCDCDCDCD )\r
39         return TRUE;\r
40 \r
41     cond = Condition & 0x000000FF;\r
42     if ( (_board != cond) && (cond != 0xFF) )\r
43         return FALSE;\r
44 \r
45     cond = Condition & 0x0000FF00;\r
46     cond = cond >> 8;\r
47     if ( ((_interface & cond) == 0) && (cond != 0x07) )\r
48         return FALSE;\r
49 \r
50     cond = Condition & 0x00FF0000;\r
51     cond = cond >> 16;\r
52     if ( ((_platform & cond) == 0) && (cond != 0x0F) )\r
53         return FALSE;\r
54     return TRUE;\r
55 }\r
56 \r
57 \r
58 /******************************************************************************\r
59 *                           MAC_REG.TXT\r
60 ******************************************************************************/\r
61 \r
62 u4Byte Array_MP_8188E_MAC_REG[] = { \r
63                 0x026, 0x00000041,\r
64                 0x027, 0x00000035,\r
65         0xFF0F0718, 0xABCD,\r
66                 0x040, 0x0000000C,\r
67         0xCDCDCDCD, 0xCDCD,\r
68                 0x040, 0x00000000,\r
69         0xFF0F0718, 0xDEAD,\r
70                 0x428, 0x0000000A,\r
71                 0x429, 0x00000010,\r
72                 0x430, 0x00000000,\r
73                 0x431, 0x00000001,\r
74                 0x432, 0x00000002,\r
75                 0x433, 0x00000004,\r
76                 0x434, 0x00000005,\r
77                 0x435, 0x00000006,\r
78                 0x436, 0x00000007,\r
79                 0x437, 0x00000008,\r
80                 0x438, 0x00000000,\r
81                 0x439, 0x00000000,\r
82                 0x43A, 0x00000001,\r
83                 0x43B, 0x00000002,\r
84                 0x43C, 0x00000004,\r
85                 0x43D, 0x00000005,\r
86                 0x43E, 0x00000006,\r
87                 0x43F, 0x00000007,\r
88                 0x440, 0x0000005D,\r
89                 0x441, 0x00000001,\r
90                 0x442, 0x00000000,\r
91                 0x444, 0x00000015,\r
92                 0x445, 0x000000F0,\r
93                 0x446, 0x0000000F,\r
94                 0x447, 0x00000000,\r
95                 0x458, 0x00000041,\r
96                 0x459, 0x000000A8,\r
97                 0x45A, 0x00000072,\r
98                 0x45B, 0x000000B9,\r
99                 0x460, 0x00000066,\r
100                 0x461, 0x00000066,\r
101                 0x480, 0x00000008,\r
102                 0x4C8, 0x000000FF,\r
103                 0x4C9, 0x00000008,\r
104                 0x4CC, 0x000000FF,\r
105                 0x4CD, 0x000000FF,\r
106                 0x4CE, 0x00000001,\r
107                 0x4D3, 0x00000001,\r
108                 0x500, 0x00000026,\r
109                 0x501, 0x000000A2,\r
110                 0x502, 0x0000002F,\r
111                 0x503, 0x00000000,\r
112                 0x504, 0x00000028,\r
113                 0x505, 0x000000A3,\r
114                 0x506, 0x0000005E,\r
115                 0x507, 0x00000000,\r
116                 0x508, 0x0000002B,\r
117                 0x509, 0x000000A4,\r
118                 0x50A, 0x0000005E,\r
119                 0x50B, 0x00000000,\r
120                 0x50C, 0x0000004F,\r
121                 0x50D, 0x000000A4,\r
122                 0x50E, 0x00000000,\r
123                 0x50F, 0x00000000,\r
124                 0x512, 0x0000001C,\r
125                 0x514, 0x0000000A,\r
126                 0x516, 0x0000000A,\r
127                 0x525, 0x0000004F,\r
128                 0x550, 0x00000010,\r
129                 0x551, 0x00000010,\r
130                 0x559, 0x00000002,\r
131                 0x55D, 0x000000FF,\r
132                 0x605, 0x00000030,\r
133                 0x608, 0x0000000E,\r
134                 0x609, 0x0000002A,\r
135                 0x620, 0x000000FF,\r
136                 0x621, 0x000000FF,\r
137                 0x622, 0x000000FF,\r
138                 0x623, 0x000000FF,\r
139                 0x624, 0x000000FF,\r
140                 0x625, 0x000000FF,\r
141                 0x626, 0x000000FF,\r
142                 0x627, 0x000000FF,\r
143                 0x652, 0x00000020,\r
144                 0x63C, 0x0000000A,\r
145                 0x63D, 0x0000000A,\r
146                 0x63E, 0x0000000E,\r
147                 0x63F, 0x0000000E,\r
148                 0x640, 0x00000040,\r
149                 0x66E, 0x00000005,\r
150                 0x700, 0x00000021,\r
151                 0x701, 0x00000043,\r
152                 0x702, 0x00000065,\r
153                 0x703, 0x00000087,\r
154                 0x708, 0x00000021,\r
155                 0x709, 0x00000043,\r
156                 0x70A, 0x00000065,\r
157                 0x70B, 0x00000087,\r
158 \r
159 };\r
160 \r
161 HAL_STATUS\r
162 ODM_ReadAndConfig_MP_8188E_MAC_REG(\r
163         IN   PDM_ODM_T  pDM_Odm\r
164         )\r
165 {\r
166         #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)\r
167 \r
168         u4Byte     hex         = 0;\r
169         u4Byte     i           = 0;\r
170         u2Byte     count       = 0;\r
171         pu4Byte    ptr_array   = NULL;\r
172         u1Byte     platform    = pDM_Odm->SupportPlatform;\r
173         u1Byte     _interface   = pDM_Odm->SupportInterface;\r
174         u1Byte     board       = pDM_Odm->BoardType;  \r
175         u4Byte     ArrayLen    = sizeof(Array_MP_8188E_MAC_REG)/sizeof(u4Byte);\r
176         pu4Byte    Array       = Array_MP_8188E_MAC_REG;\r
177         BOOLEAN         biol = FALSE;   \r
178         \r
179 #ifdef CONFIG_IOL_IOREG_CFG \r
180         PADAPTER        Adapter =  pDM_Odm->Adapter;    \r
181         struct xmit_frame       *pxmit_frame;   \r
182         u8 bndy_cnt = 1;\r
183         #ifdef CONFIG_IOL_IOREG_CFG_DBG\r
184         struct cmd_cmp cmpdata[ArrayLen];\r
185         u4Byte  cmpdata_idx=0;\r
186         #endif\r
187 #endif //CONFIG_IOL_IOREG_CFG\r
188         HAL_STATUS rst =HAL_STATUS_SUCCESS;\r
189 \r
190         hex += board;\r
191         hex += _interface << 8;\r
192         hex += platform << 16;\r
193         hex += 0xFF000000;\r
194         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ReadAndConfig_MP_8188E_MAC_REG, hex = 0x%X\n", hex));\r
195 \r
196 #ifdef CONFIG_IOL_IOREG_CFG                     \r
197         biol = rtw_IOL_applied(Adapter);\r
198         \r
199         if(biol){               \r
200                 if((pxmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL)\r
201                 {\r
202                         printk("rtw_IOL_accquire_xmit_frame failed\n");\r
203                         return HAL_STATUS_FAILURE;\r
204                 }\r
205         }\r
206         \r
207 #endif //CONFIG_IOL_IOREG_CFG\r
208         for (i = 0; i < ArrayLen; i += 2 )\r
209         {\r
210             u4Byte v1 = Array[i];\r
211             u4Byte v2 = Array[i+1];\r
212         \r
213             // This (offset, data) pair meets the condition.\r
214             if ( v1 < 0xCDCDCDCD )\r
215             {\r
216                         #ifdef CONFIG_IOL_IOREG_CFG\r
217                                 \r
218                         if(biol){       \r
219                                         \r
220                                 if(rtw_IOL_cmd_boundary_handle(pxmit_frame))\r
221                                         bndy_cnt++;\r
222                                 rtw_IOL_append_WB_cmd(pxmit_frame,(u2Byte)v1, (u1Byte)v2,0xFF);\r
223                                 #ifdef CONFIG_IOL_IOREG_CFG_DBG\r
224                                         cmpdata[cmpdata_idx].addr = v1;\r
225                                         cmpdata[cmpdata_idx].value= v2;\r
226                                         cmpdata_idx++;\r
227                                 #endif                                  \r
228                         }\r
229                         else\r
230                         #endif  //endif CONFIG_IOL_IOREG_CFG\r
231                         {\r
232                                 odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);\r
233                         }\r
234                     continue;\r
235                 }\r
236                 else\r
237                 { // This line is the start line of branch.\r
238                     if ( !CheckCondition(Array[i], hex) )\r
239                     { // Discard the following (offset, data) pairs.\r
240                         READ_NEXT_PAIR(v1, v2, i);\r
241                         while (v2 != 0xDEAD && \r
242                                v2 != 0xCDEF && \r
243                                v2 != 0xCDCD && i < ArrayLen -2)\r
244                         {\r
245                             READ_NEXT_PAIR(v1, v2, i);\r
246                         }\r
247                         i -= 2; // prevent from for-loop += 2\r
248                     }\r
249                     else // Configure matched pairs and skip to end of if-else.\r
250                     {\r
251                         READ_NEXT_PAIR(v1, v2, i);\r
252                         while (v2 != 0xDEAD && \r
253                                v2 != 0xCDEF && \r
254                                v2 != 0xCDCD && i < ArrayLen -2)\r
255                         {\r
256                                         #ifdef CONFIG_IOL_IOREG_CFG \r
257                                         if(biol){       \r
258                                                 if(rtw_IOL_cmd_boundary_handle(pxmit_frame))\r
259                                                         bndy_cnt++;\r
260                                                 rtw_IOL_append_WB_cmd(pxmit_frame,(u2Byte)v1, (u1Byte)v2,0xFF);\r
261                                                 #ifdef CONFIG_IOL_IOREG_CFG_DBG\r
262                                                         cmpdata[cmpdata_idx].addr = v1;\r
263                                                         cmpdata[cmpdata_idx].value= v2;\r
264                                                         cmpdata_idx++;\r
265                                                 #endif\r
266                                         }\r
267                                         else\r
268                                         #endif //#ifdef CONFIG_IOL_IOREG_CFG\r
269                                         {\r
270                                                 odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);\r
271                                         }\r
272                             READ_NEXT_PAIR(v1, v2, i);\r
273                         }\r
274 \r
275                         while (v2 != 0xDEAD && i < ArrayLen -2)\r
276                         {\r
277                             READ_NEXT_PAIR(v1, v2, i);\r
278                         }\r
279                         \r
280                     }\r
281                 }       \r
282         }\r
283 \r
284 #ifdef CONFIG_IOL_IOREG_CFG \r
285         if(biol){\r
286                 //printk("==> %s, pktlen = %d,bndy_cnt = %d\n",__FUNCTION__,pxmit_frame->attrib.pktlen+4+32,bndy_cnt);          \r
287                 \r
288                 if(rtw_IOL_exec_cmds_sync(pDM_Odm->Adapter, pxmit_frame, 1000, bndy_cnt))\r
289                 {                       \r
290                         #ifdef CONFIG_IOL_IOREG_CFG_DBG                 \r
291                         printk("~~~ IOL Config MAC Success !!! \n");\r
292                         //compare writed data\r
293                         {\r
294                                 u4Byte idx;\r
295                                 u1Byte cdata;\r
296                                 // HAL_STATUS_FAILURE;\r
297                                 printk("  MAC data compare => array_len:%d \n",cmpdata_idx);\r
298                                 for(idx=0;idx< cmpdata_idx;idx++)\r
299                                 {\r
300                                         cdata = ODM_Read1Byte(pDM_Odm, cmpdata[idx].addr);\r
301                                         if(cdata != cmpdata[idx].value){\r
302                                                 printk("### MAC data compared failed !! addr:0x%04x, data:(0x%02x : 0x%02x) ###\n",\r
303                                                         cmpdata[idx].addr,cmpdata[idx].value,cdata);\r
304                                                 //rst = HAL_STATUS_FAILURE;\r
305                                         }                                       \r
306                                 }       \r
307 \r
308 \r
309                                 //dump data from TX packet buffer\r
310                                 //if(rst == HAL_STATUS_FAILURE)\r
311                                 {\r
312                                         rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);\r
313                                 }       \r
314                                 \r
315                         }\r
316                         #endif //CONFIG_IOL_IOREG_CFG_DBG\r
317                 \r
318                 }\r
319                 else{\r
320                         printk("~~~ MAC IOL_exec_cmds Failed !!! \n");\r
321                         #ifdef CONFIG_IOL_IOREG_CFG_DBG\r
322                         {\r
323                                 //dump data from TX packet buffer                               \r
324                                 rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);\r
325                         }\r
326                         #endif //CONFIG_IOL_IOREG_CFG_DBG\r
327                         rst = HAL_STATUS_FAILURE;                       \r
328                 }\r
329                 \r
330         }\r
331 #endif  //#ifdef CONFIG_IOL_IOREG_CFG \r
332         return rst;\r
333 }\r
334 \r
335 /******************************************************************************\r
336 *                           MAC_REG_ICUT.TXT\r
337 ******************************************************************************/\r
338 \r
339 u4Byte Array_MP_8188E_MAC_REG_ICUT[] = { \r
340                 0x026, 0x00000041,\r
341                 0x027, 0x00000035,\r
342                 0x428, 0x0000000A,\r
343                 0x429, 0x00000010,\r
344                 0x430, 0x00000000,\r
345                 0x431, 0x00000001,\r
346                 0x432, 0x00000002,\r
347                 0x433, 0x00000004,\r
348                 0x434, 0x00000005,\r
349                 0x435, 0x00000006,\r
350                 0x436, 0x00000007,\r
351                 0x437, 0x00000008,\r
352                 0x438, 0x00000000,\r
353                 0x439, 0x00000000,\r
354                 0x43A, 0x00000001,\r
355                 0x43B, 0x00000002,\r
356                 0x43C, 0x00000004,\r
357                 0x43D, 0x00000005,\r
358                 0x43E, 0x00000006,\r
359                 0x43F, 0x00000007,\r
360                 0x440, 0x0000005D,\r
361                 0x441, 0x00000001,\r
362                 0x442, 0x00000000,\r
363                 0x444, 0x00000015,\r
364                 0x445, 0x000000F0,\r
365                 0x446, 0x0000000F,\r
366                 0x447, 0x00000000,\r
367                 0x458, 0x00000041,\r
368                 0x459, 0x000000A8,\r
369                 0x45A, 0x00000072,\r
370                 0x45B, 0x000000B9,\r
371                 0x460, 0x00000066,\r
372                 0x461, 0x00000066,\r
373                 0x480, 0x00000008,\r
374                 0x4C8, 0x000000FF,\r
375                 0x4C9, 0x00000008,\r
376                 0x4CC, 0x000000FF,\r
377                 0x4CD, 0x000000FF,\r
378                 0x4CE, 0x00000001,\r
379                 0x4D3, 0x00000001,\r
380                 0x500, 0x00000026,\r
381                 0x501, 0x000000A2,\r
382                 0x502, 0x0000002F,\r
383                 0x503, 0x00000000,\r
384                 0x504, 0x00000028,\r
385                 0x505, 0x000000A3,\r
386                 0x506, 0x0000005E,\r
387                 0x507, 0x00000000,\r
388                 0x508, 0x0000002B,\r
389                 0x509, 0x000000A4,\r
390                 0x50A, 0x0000005E,\r
391                 0x50B, 0x00000000,\r
392                 0x50C, 0x0000004F,\r
393                 0x50D, 0x000000A4,\r
394                 0x50E, 0x00000000,\r
395                 0x50F, 0x00000000,\r
396                 0x512, 0x0000001C,\r
397                 0x514, 0x0000000A,\r
398                 0x516, 0x0000000A,\r
399                 0x525, 0x0000004F,\r
400                 0x550, 0x00000010,\r
401                 0x551, 0x00000010,\r
402                 0x559, 0x00000002,\r
403                 0x55D, 0x000000FF,\r
404                 0x605, 0x00000030,\r
405                 0x608, 0x0000000E,\r
406                 0x609, 0x0000002A,\r
407                 0x620, 0x000000FF,\r
408                 0x621, 0x000000FF,\r
409                 0x622, 0x000000FF,\r
410                 0x623, 0x000000FF,\r
411                 0x624, 0x000000FF,\r
412                 0x625, 0x000000FF,\r
413                 0x626, 0x000000FF,\r
414                 0x627, 0x000000FF,\r
415                 0x652, 0x00000020,\r
416                 0x63C, 0x0000000A,\r
417                 0x63D, 0x0000000A,\r
418                 0x63E, 0x0000000E,\r
419                 0x63F, 0x0000000E,\r
420                 0x640, 0x00000040,\r
421                 0x66E, 0x00000005,\r
422                 0x700, 0x00000021,\r
423                 0x701, 0x00000043,\r
424                 0x702, 0x00000065,\r
425                 0x703, 0x00000087,\r
426                 0x708, 0x00000021,\r
427                 0x709, 0x00000043,\r
428                 0x70A, 0x00000065,\r
429                 0x70B, 0x00000087,\r
430 \r
431 };\r
432 \r
433 HAL_STATUS\r
434 ODM_ReadAndConfig_MP_8188E_MAC_REG_ICUT(\r
435         IN   PDM_ODM_T  pDM_Odm\r
436         )\r
437 {\r
438         #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)\r
439 \r
440         u4Byte     hex         = 0;\r
441         u4Byte     i           = 0;\r
442         u2Byte     count       = 0;\r
443         pu4Byte    ptr_array   = NULL;\r
444         u1Byte     platform    = pDM_Odm->SupportPlatform;\r
445         u1Byte     _interface   = pDM_Odm->SupportInterface;\r
446         u1Byte     board       = pDM_Odm->BoardType;  \r
447         u4Byte     ArrayLen    = sizeof(Array_MP_8188E_MAC_REG_ICUT)/sizeof(u4Byte);\r
448         pu4Byte    Array       = Array_MP_8188E_MAC_REG_ICUT;\r
449         BOOLEAN         biol = FALSE;\r
450 \r
451 #ifdef CONFIG_IOL_IOREG_CFG \r
452         PADAPTER        Adapter =  pDM_Odm->Adapter;    \r
453         struct xmit_frame       *pxmit_frame;   \r
454         u8 bndy_cnt = 1;\r
455         #ifdef CONFIG_IOL_IOREG_CFG_DBG\r
456         struct cmd_cmp cmpdata[ArrayLen];\r
457         u4Byte  cmpdata_idx=0;\r
458         #endif\r
459 #endif //CONFIG_IOL_IOREG_CFG\r
460         HAL_STATUS rst =HAL_STATUS_SUCCESS;\r
461 \r
462         hex += board;\r
463         hex += _interface << 8;\r
464         hex += platform << 16;\r
465         hex += 0xFF000000;\r
466         ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ReadAndConfig_MP_8188E_MAC_REG_ICUT, hex = 0x%X\n", hex));\r
467 \r
468 #ifdef CONFIG_IOL_IOREG_CFG                     \r
469         biol = rtw_IOL_applied(Adapter);\r
470         \r
471         if(biol){               \r
472                 if((pxmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL)\r
473                 {\r
474                         printk("rtw_IOL_accquire_xmit_frame failed\n");\r
475                         return HAL_STATUS_FAILURE;\r
476                 }\r
477         }\r
478         \r
479 #endif //CONFIG_IOL_IOREG_CFG\r
480         for (i = 0; i < ArrayLen; i += 2 )\r
481         {\r
482             u4Byte v1 = Array[i];\r
483             u4Byte v2 = Array[i+1];\r
484         \r
485             // This (offset, data) pair meets the condition.\r
486             if ( v1 < 0xCDCDCDCD )\r
487             {\r
488                         #ifdef CONFIG_IOL_IOREG_CFG\r
489                                 \r
490                         if(biol){       \r
491                                         \r
492                                 if(rtw_IOL_cmd_boundary_handle(pxmit_frame))\r
493                                         bndy_cnt++;\r
494                                 rtw_IOL_append_WB_cmd(pxmit_frame,(u2Byte)v1, (u1Byte)v2,0xFF);\r
495                                 #ifdef CONFIG_IOL_IOREG_CFG_DBG\r
496                                         cmpdata[cmpdata_idx].addr = v1;\r
497                                         cmpdata[cmpdata_idx].value= v2;\r
498                                         cmpdata_idx++;\r
499                                 #endif                                  \r
500                         }\r
501                         else\r
502                         #endif  //endif CONFIG_IOL_IOREG_CFG\r
503                         {\r
504                                 odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);\r
505                         }\r
506                     continue;\r
507                 }\r
508                 else\r
509                 { // This line is the start line of branch.\r
510                     if ( !CheckCondition(Array[i], hex) )\r
511                     { // Discard the following (offset, data) pairs.\r
512                         READ_NEXT_PAIR(v1, v2, i);\r
513                         while (v2 != 0xDEAD && \r
514                                v2 != 0xCDEF && \r
515                                v2 != 0xCDCD && i < ArrayLen -2)\r
516                         {\r
517                             READ_NEXT_PAIR(v1, v2, i);\r
518                         }\r
519                         i -= 2; // prevent from for-loop += 2\r
520                     }\r
521                     else // Configure matched pairs and skip to end of if-else.\r
522                     {\r
523                         READ_NEXT_PAIR(v1, v2, i);\r
524                         while (v2 != 0xDEAD && \r
525                                v2 != 0xCDEF && \r
526                                v2 != 0xCDCD && i < ArrayLen -2)\r
527                         {\r
528                                         #ifdef CONFIG_IOL_IOREG_CFG \r
529                                         if(biol){       \r
530                                                 if(rtw_IOL_cmd_boundary_handle(pxmit_frame))\r
531                                                         bndy_cnt++;\r
532                                                 rtw_IOL_append_WB_cmd(pxmit_frame,(u2Byte)v1, (u1Byte)v2,0xFF);\r
533                                                 #ifdef CONFIG_IOL_IOREG_CFG_DBG\r
534                                                         cmpdata[cmpdata_idx].addr = v1;\r
535                                                         cmpdata[cmpdata_idx].value= v2;\r
536                                                         cmpdata_idx++;\r
537                                                 #endif\r
538                                         }\r
539                                         else\r
540                                         #endif //#ifdef CONFIG_IOL_IOREG_CFG\r
541                                         {\r
542                                                 odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);\r
543                                         }\r
544                             READ_NEXT_PAIR(v1, v2, i);\r
545                         }\r
546 \r
547                         while (v2 != 0xDEAD && i < ArrayLen -2)\r
548                         {\r
549                             READ_NEXT_PAIR(v1, v2, i);\r
550                         }\r
551                         \r
552                     }\r
553                 }       \r
554         }\r
555 \r
556 #ifdef CONFIG_IOL_IOREG_CFG \r
557         if(biol){\r
558                 //printk("==> %s, pktlen = %d,bndy_cnt = %d\n",__FUNCTION__,pxmit_frame->attrib.pktlen+4+32,bndy_cnt);          \r
559                 \r
560                 if(rtw_IOL_exec_cmds_sync(pDM_Odm->Adapter, pxmit_frame, 1000, bndy_cnt))\r
561                 {                       \r
562                         #ifdef CONFIG_IOL_IOREG_CFG_DBG                 \r
563                         printk("~~~ IOL Config MAC Success !!! \n");\r
564                         //compare writed data\r
565                         {\r
566                                 u4Byte idx;\r
567                                 u1Byte cdata;\r
568                                 // HAL_STATUS_FAILURE;\r
569                                 printk("  MAC data compare => array_len:%d \n",cmpdata_idx);\r
570                                 for(idx=0;idx< cmpdata_idx;idx++)\r
571                                 {\r
572                                         cdata = ODM_Read1Byte(pDM_Odm, cmpdata[idx].addr);\r
573                                         if(cdata != cmpdata[idx].value){\r
574                                                 printk("### MAC data compared failed !! addr:0x%04x, data:(0x%02x : 0x%02x) ###\n",\r
575                                                         cmpdata[idx].addr,cmpdata[idx].value,cdata);\r
576                                                 //rst = HAL_STATUS_FAILURE;\r
577                                         }                                       \r
578                                 }       \r
579 \r
580 \r
581                                 //dump data from TX packet buffer\r
582                                 //if(rst == HAL_STATUS_FAILURE)\r
583                                 {\r
584                                         rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);\r
585                                 }       \r
586                                 \r
587                         }\r
588                         #endif //CONFIG_IOL_IOREG_CFG_DBG\r
589                 \r
590                 }\r
591                 else{\r
592                         printk("~~~ MAC IOL_exec_cmds Failed !!! \n");\r
593                         #ifdef CONFIG_IOL_IOREG_CFG_DBG\r
594                         {\r
595                                 //dump data from TX packet buffer                               \r
596                                 rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);\r
597                         }\r
598                         #endif //CONFIG_IOL_IOREG_CFG_DBG\r
599                         rst = HAL_STATUS_FAILURE;                       \r
600                 }\r
601                 \r
602         }\r
603 #endif  //#ifdef CONFIG_IOL_IOREG_CFG \r
604         return rst;\r
605 }\r
606 \r
607 #endif // end of HWIMG_SUPPORT\r
608 \r