WiFi: add rtl8189es/etv support, Optimization wifi configuration.
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8189es / core / rtw_ioctl_rtl.c
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  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17  *
18  *
19  ******************************************************************************/
20 #define  _RTW_IOCTL_RTL_C_
21
22 #include <drv_types.h>
23
24 #ifdef CONFIG_MP_INCLUDED
25 #include <rtw_mp_ioctl.h>
26 #endif
27
28 struct oid_obj_priv oid_rtl_seg_01_01[] =
29 {
30         {1, &oid_null_function},                                                                                //0x80
31         {1, &oid_null_function},                                                                                //0x81
32         {1, &oid_null_function},                                                                                //0x82
33         {1, &oid_null_function},                                                                                //0x83//OID_RT_SET_SNIFFER_MODE
34         {1, &oid_rt_get_signal_quality_hdl},                                                    //0x84
35         {1, &oid_rt_get_small_packet_crc_hdl},                                          //0x85
36         {1, &oid_rt_get_middle_packet_crc_hdl},                                         //0x86
37         {1, &oid_rt_get_large_packet_crc_hdl},                                          //0x87
38         {1, &oid_rt_get_tx_retry_hdl},                                                          //0x88
39         {1, &oid_rt_get_rx_retry_hdl},                                                          //0x89
40         {1, &oid_rt_pro_set_fw_dig_state_hdl},                                          //0x8A
41         {1, &oid_rt_pro_set_fw_ra_state_hdl}    ,                                               //0x8B
42         {1, &oid_null_function},                                                                                //0x8C
43         {1, &oid_null_function},                                                                                //0x8D
44         {1, &oid_null_function},                                                                                //0x8E
45         {1, &oid_null_function},                                                                                //0x8F
46         {1, &oid_rt_get_rx_total_packet_hdl},                                                   //0x90
47         {1, &oid_rt_get_tx_beacon_ok_hdl},                                                      //0x91
48         {1, &oid_rt_get_tx_beacon_err_hdl},                                                     //0x92
49         {1, &oid_rt_get_rx_icv_err_hdl},                                                                //0x93
50         {1, &oid_rt_set_encryption_algorithm_hdl},                                      //0x94
51         {1, &oid_null_function},                                                                                //0x95
52         {1, &oid_rt_get_preamble_mode_hdl},                                                     //0x96
53         {1, &oid_null_function},                                                                                //0x97
54         {1, &oid_rt_get_ap_ip_hdl},                                                                     //0x98
55         {1, &oid_rt_get_channelplan_hdl},                                                       //0x99  
56         {1, &oid_rt_set_preamble_mode_hdl},                                                     //0x9A
57         {1, &oid_rt_set_bcn_intvl_hdl},                                                         //0x9B
58         {1, &oid_null_function},                                                                                //0x9C
59         {1, &oid_rt_dedicate_probe_hdl},                                                                //0x9D
60         {1, &oid_null_function},                                                                                //0x9E
61         {1, &oid_null_function},                                                                                //0x9F
62         {1, &oid_null_function},                                                                                //0xA0
63         {1, &oid_null_function},                                                                                //0xA1
64         {1, &oid_null_function},                                                                                //0xA2
65         {1, &oid_null_function},                                                                                //0xA3
66         {1, &oid_null_function},                                                                                //0xA4
67         {1, &oid_null_function},                                                                                //0xA5
68         {1, &oid_null_function},                                                                                //0xA6
69         {1, &oid_rt_get_total_tx_bytes_hdl},                                                    //0xA7
70         {1, &oid_rt_get_total_rx_bytes_hdl},                                                    //0xA8
71         {1, &oid_rt_current_tx_power_level_hdl},                                                //0xA9  
72         {1, &oid_rt_get_enc_key_mismatch_count_hdl},                            //0xAA
73         {1, &oid_rt_get_enc_key_match_count_hdl},                                       //0xAB
74         {1, &oid_rt_get_channel_hdl},                                                           //0xAC
75         {1, &oid_rt_set_channelplan_hdl},                                                               //0xAD
76         {1, &oid_rt_get_hardware_radio_off_hdl},                                                //0xAE
77         {1, &oid_null_function},                                                                                //0xAF
78         {1, &oid_null_function},                                                                                //0xB0
79         {1, &oid_null_function},                                                                                //0xB1
80         {1, &oid_null_function},                                                                                //0xB2
81         {1, &oid_null_function},                                                                                //0xB3
82         {1, &oid_rt_get_key_mismatch_hdl},                                                      //0xB4
83         {1, &oid_null_function},                                                                                //0xB5
84         {1, &oid_null_function},                                                                                //0xB6
85         {1, &oid_null_function},                                                                                //0xB7
86         {1, &oid_null_function},                                                                                //0xB8
87         {1, &oid_null_function},                                                                                //0xB9  
88         {1, &oid_null_function},                                                                                //0xBA
89         {1, &oid_rt_supported_wireless_mode_hdl},                                       //0xBB
90         {1, &oid_rt_get_channel_list_hdl},                                                      //0xBC
91         {1, &oid_rt_get_scan_in_progress_hdl},                                          //0xBD
92         {1, &oid_null_function},                                                                                //0xBE
93         {1, &oid_null_function},                                                                                //0xBF
94         {1, &oid_null_function},                                                                                //0xC0
95         {1, &oid_rt_forced_data_rate_hdl},                                                      //0xC1
96         {1, &oid_rt_wireless_mode_for_scan_list_hdl},                                   //0xC2
97         {1, &oid_rt_get_bss_wireless_mode_hdl},                                         //0xC3
98         {1, &oid_rt_scan_with_magic_packet_hdl},                                        //0xC4
99         {1, &oid_null_function},                                                                                //0xC5
100         {1, &oid_null_function},                                                                                //0xC6
101         {1, &oid_null_function},                                                                                //0xC7
102         {1, &oid_null_function},                                                                                //0xC8
103         {1, &oid_null_function},                                                                                //0xC9  
104         {1, &oid_null_function},                                                                                //0xCA
105         {1, &oid_null_function},                                                                                //0xCB
106         {1, &oid_null_function},                                                                                //0xCC
107         {1, &oid_null_function},                                                                                //0xCD
108         {1, &oid_null_function},                                                                                //0xCE
109         {1, &oid_null_function},                                                                                //0xCF
110         
111 };
112
113 struct oid_obj_priv oid_rtl_seg_01_03[] =
114 {
115         {1, &oid_rt_ap_get_associated_station_list_hdl},                                //0x00
116         {1, &oid_null_function},                                                                                //0x01
117         {1, &oid_rt_ap_switch_into_ap_mode_hdl},                                        //0x02
118         {1, &oid_null_function},                                                                                //0x03
119         {1, &oid_rt_ap_supported_hdl},                                                          //0x04
120         {1, &oid_rt_ap_set_passphrase_hdl},                                                     //0x05
121
122 };
123
124 struct oid_obj_priv oid_rtl_seg_01_11[] =
125 {
126         {1, &oid_null_function},                                        //0xC0  OID_RT_PRO_RX_FILTER    
127         {1, &oid_null_function},                                        //0xC1  OID_CE_USB_WRITE_REGISTRY
128         {1, &oid_null_function},                                        //0xC2  OID_CE_USB_READ_REGISTRY
129         {1, &oid_null_function},                                        //0xC3  OID_RT_PRO_SET_INITIAL_GAIN
130         {1, &oid_null_function},                                        //0xC4  OID_RT_PRO_SET_BB_RF_STANDBY_MODE
131         {1, &oid_null_function},                                        //0xC5  OID_RT_PRO_SET_BB_RF_SHUTDOWN_MODE
132         {1, &oid_null_function},                                        //0xC6  OID_RT_PRO_SET_TX_CHARGE_PUMP
133         {1, &oid_null_function},                                        //0xC7  OID_RT_PRO_SET_RX_CHARGE_PUMP
134         {1, &oid_rt_pro_rf_write_registry_hdl}, //0xC8  
135         {1, &oid_rt_pro_rf_read_registry_hdl},  //0xC9  
136         {1, &oid_null_function}                                 //0xCA  OID_RT_PRO_QUERY_RF_TYPE
137         
138 };
139
140 struct oid_obj_priv oid_rtl_seg_03_00[] =
141 {
142         {1, &oid_null_function},                                                                                //0x00
143         {1, &oid_rt_get_connect_state_hdl},                                                     //0x01
144         {1, &oid_null_function},                                                                                //0x02
145         {1, &oid_null_function},                                                                                //0x03
146         {1, &oid_rt_set_default_key_id_hdl},                                                    //0x04
147
148         
149 };
150
151
152 //**************  oid_rtl_seg_01_01 section start ************** 
153
154 NDIS_STATUS oid_rt_pro_set_fw_dig_state_hdl(struct oid_par_priv* poid_par_priv)
155 {
156         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
157 #if 0
158         PADAPTER                Adapter = (PADAPTER)(poid_par_priv->adapter_context);
159         _irqL                   oldirql;
160         
161         _func_enter_;
162         
163         if(poid_par_priv->type_of_oid != SET_OID) 
164         {
165                 status = NDIS_STATUS_NOT_ACCEPTED;
166                 return status;
167         }
168                         
169         _irqlevel_changed_(&oldirql,LOWER);
170         if(poid_par_priv->information_buf_len >= sizeof(struct setdig_parm))
171         {
172                 //DEBUG_ERR(("===> oid_rt_pro_set_fw_dig_state_hdl. type:0x%02x.\n",*((unsigned char*)poid_par_priv->information_buf )));       
173                 if(!rtw_setfwdig_cmd(Adapter,*((unsigned char*)poid_par_priv->information_buf )))                       
174                 {
175                         status = NDIS_STATUS_NOT_ACCEPTED;
176                 }
177                                    
178         }
179         else{
180                 status = NDIS_STATUS_NOT_ACCEPTED;
181         }  
182         _irqlevel_changed_(&oldirql,RAISE);
183         _func_exit_;
184 #endif
185         return status;
186 }
187 //-----------------------------------------------------------------------------
188 NDIS_STATUS oid_rt_pro_set_fw_ra_state_hdl(struct oid_par_priv* poid_par_priv)
189 {
190
191         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
192 #if 0
193         PADAPTER                Adapter = (PADAPTER)(poid_par_priv->adapter_context);
194         _irqL                   oldirql;
195         
196         _func_enter_;   
197         if(poid_par_priv->type_of_oid != SET_OID) 
198         {
199                 status = NDIS_STATUS_NOT_ACCEPTED;
200                 return status;
201         }
202
203                                         
204         _irqlevel_changed_(&oldirql,LOWER);
205         
206         if(poid_par_priv->information_buf_len >= sizeof(struct setra_parm))
207         {
208                 //DEBUG_ERR(("===> oid_rt_pro_set_fw_ra_state_hdl. type:0x%02x.\n",*((unsigned char*)poid_par_priv->information_buf )));        
209                 if(!rtw_setfwra_cmd(Adapter,*((unsigned char*)poid_par_priv->information_buf )))                        
210                 {
211                         status = NDIS_STATUS_NOT_ACCEPTED;
212                 }
213                                    
214         }
215         else{
216                 status = NDIS_STATUS_NOT_ACCEPTED;
217         }  
218         _irqlevel_changed_(&oldirql,RAISE);
219         _func_exit_;
220 #endif
221         return status;
222 }
223 //-----------------------------------------------------------------------------
224 NDIS_STATUS oid_rt_get_signal_quality_hdl(struct oid_par_priv* poid_par_priv)
225 {
226         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
227         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
228
229         //DEBUG_ERR(("<**********************oid_rt_get_signal_quality_hdl \n"));
230         if(poid_par_priv->type_of_oid != QUERY_OID)
231         {
232                 status = NDIS_STATUS_NOT_ACCEPTED;
233                 return status;
234         }               
235
236 #if 0
237                 if(pMgntInfo->mAssoc || pMgntInfo->mIbss)
238                 {
239                         ulInfo = pAdapter->RxStats.SignalQuality;
240                         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
241                 }
242                 else
243                 {
244                         ulInfo = 0xffffffff; // It stands for -1 in 4-byte integer.
245                 }
246                 break;
247 #endif
248
249         return status;
250 }
251
252 //------------------------------------------------------------------------------
253
254 NDIS_STATUS oid_rt_get_small_packet_crc_hdl(struct oid_par_priv* poid_par_priv)
255 {
256         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
257         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
258
259         if(poid_par_priv->type_of_oid != QUERY_OID)
260         {
261                 status = NDIS_STATUS_NOT_ACCEPTED;
262                 return status;
263         }               
264                 
265         if(poid_par_priv->information_buf_len >=  sizeof(ULONG) )
266         {               
267                 *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_smallpacket_crcerr;
268                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;          
269         }
270         else
271         {
272                 status = NDIS_STATUS_INVALID_LENGTH;
273         }
274
275         return status;
276 }
277 //------------------------------------------------------------------------------
278 NDIS_STATUS oid_rt_get_middle_packet_crc_hdl(struct oid_par_priv* poid_par_priv)
279 {
280         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
281         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
282
283         if(poid_par_priv->type_of_oid != QUERY_OID)
284         {
285                 status = NDIS_STATUS_NOT_ACCEPTED;
286                 return status;
287         }               
288
289         if(poid_par_priv->information_buf_len >=  sizeof(ULONG) )
290         {               
291                 *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_middlepacket_crcerr;
292                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;          
293         }
294         else
295         {
296                 status = NDIS_STATUS_INVALID_LENGTH;
297         }
298
299
300         return status;
301 }
302 //------------------------------------------------------------------------------
303 NDIS_STATUS oid_rt_get_large_packet_crc_hdl(struct oid_par_priv* poid_par_priv)
304 {
305         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
306         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
307
308         if(poid_par_priv->type_of_oid != QUERY_OID)
309         {
310                 status = NDIS_STATUS_NOT_ACCEPTED;
311                 return status;
312         }       
313
314         if(poid_par_priv->information_buf_len >=  sizeof(ULONG) )
315         {               
316                 *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_largepacket_crcerr;
317                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;          
318         }
319         else
320         {
321                 status = NDIS_STATUS_INVALID_LENGTH;
322         }
323
324
325         return status;
326 }
327
328 //------------------------------------------------------------------------------
329 NDIS_STATUS oid_rt_get_tx_retry_hdl(struct oid_par_priv* poid_par_priv)
330 {
331         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
332         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
333
334         if(poid_par_priv->type_of_oid != QUERY_OID)
335         {
336                 status = NDIS_STATUS_NOT_ACCEPTED;
337                 return status;
338         }               
339
340         return status;
341 }
342 NDIS_STATUS oid_rt_get_rx_retry_hdl(struct oid_par_priv* poid_par_priv)
343 {
344         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
345         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
346
347         if(poid_par_priv->type_of_oid != QUERY_OID)
348         {
349                 status = NDIS_STATUS_NOT_ACCEPTED;
350                 return status;
351         }               
352         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
353         return status;
354 }
355 //------------------------------------------------------------------------------
356 NDIS_STATUS oid_rt_get_rx_total_packet_hdl(struct oid_par_priv* poid_par_priv)
357 {
358         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
359         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
360
361         if(poid_par_priv->type_of_oid != QUERY_OID)
362         {
363                 status = NDIS_STATUS_NOT_ACCEPTED;
364                 return status;
365         }       
366         if(poid_par_priv->information_buf_len >=  sizeof(ULONG) )
367         {               
368                 *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_pkts + padapter->recvpriv.rx_drop;
369                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;          
370         }
371         else
372         {
373                 status = NDIS_STATUS_INVALID_LENGTH;
374         }
375
376
377         return status;
378 }
379 //------------------------------------------------------------------------------
380 NDIS_STATUS oid_rt_get_tx_beacon_ok_hdl(struct oid_par_priv* poid_par_priv)
381 {
382         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
383         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
384
385         if(poid_par_priv->type_of_oid != QUERY_OID)
386         {
387                 status = NDIS_STATUS_NOT_ACCEPTED;
388                 return status;
389         }               
390
391         return status;
392 }
393 NDIS_STATUS oid_rt_get_tx_beacon_err_hdl(struct oid_par_priv* poid_par_priv)
394 {
395         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
396         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
397
398         if(poid_par_priv->type_of_oid != QUERY_OID)
399         {
400                 status = NDIS_STATUS_NOT_ACCEPTED;
401                 return status;
402         }               
403
404         return status;
405 }
406 //------------------------------------------------------------------------------
407 NDIS_STATUS oid_rt_get_rx_icv_err_hdl(struct oid_par_priv* poid_par_priv)
408 {
409         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
410         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
411
412         if(poid_par_priv->type_of_oid != QUERY_OID)
413         {
414                 status = NDIS_STATUS_NOT_ACCEPTED;
415                 return status;
416         }
417         if(poid_par_priv->information_buf_len>= sizeof(u32))
418         {
419                 //_rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32));
420                 *(uint *)poid_par_priv->information_buf = padapter->recvpriv.rx_icv_err;
421                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
422         }
423         else
424         {
425                 status = NDIS_STATUS_INVALID_LENGTH ;
426         }
427         
428
429         return status;
430 }
431 //------------------------------------------------------------------------------
432 NDIS_STATUS oid_rt_set_encryption_algorithm_hdl(struct oid_par_priv* poid_par_priv)
433 {
434         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
435         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
436
437         if(poid_par_priv->type_of_oid != SET_OID)
438         {
439                 status = NDIS_STATUS_NOT_ACCEPTED;
440                 return status;
441         }       
442
443         return status;
444 }
445 //------------------------------------------------------------------------------
446 NDIS_STATUS oid_rt_get_preamble_mode_hdl(struct oid_par_priv* poid_par_priv)
447 {
448         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
449         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
450         ULONG                   preamblemode = 0 ;                      
451                 
452         if(poid_par_priv->type_of_oid != QUERY_OID)
453         {
454                 status = NDIS_STATUS_NOT_ACCEPTED;
455                 return status;
456         }               
457         if(poid_par_priv->information_buf_len>= sizeof(ULONG))
458         {               
459                 if(padapter->registrypriv.preamble == PREAMBLE_LONG)
460                         preamblemode = 0;
461                 else if (padapter->registrypriv.preamble == PREAMBLE_AUTO)
462                         preamblemode = 1;
463                 else if (padapter->registrypriv.preamble == PREAMBLE_SHORT)
464                         preamblemode = 2;
465                 
466                         
467                 *(ULONG *)poid_par_priv->information_buf = preamblemode ;
468                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
469         }
470         else
471         {
472                 status = NDIS_STATUS_INVALID_LENGTH ;
473         }
474         return status;
475 }
476 //------------------------------------------------------------------------------
477 NDIS_STATUS oid_rt_get_ap_ip_hdl(struct oid_par_priv* poid_par_priv)
478 {
479         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
480         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
481
482         if(poid_par_priv->type_of_oid != QUERY_OID)
483         {
484                 status = NDIS_STATUS_NOT_ACCEPTED;
485                 return status;
486         }               
487
488         return status;
489 }
490
491 NDIS_STATUS oid_rt_get_channelplan_hdl(struct oid_par_priv* poid_par_priv)
492 {
493         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
494         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
495         struct eeprom_priv*     peeprompriv = &padapter->eeprompriv;    
496
497         if(poid_par_priv->type_of_oid != QUERY_OID)
498         {
499                 status = NDIS_STATUS_NOT_ACCEPTED;
500                 return status;
501         }               
502         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
503         *(u16 *)poid_par_priv->information_buf = peeprompriv->channel_plan ;
504
505         return status;
506 }
507 NDIS_STATUS oid_rt_set_channelplan_hdl(struct oid_par_priv* poid_par_priv)
508 {
509         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
510         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
511         struct eeprom_priv*     peeprompriv = &padapter->eeprompriv;    
512         
513         if(poid_par_priv->type_of_oid != SET_OID)
514         {
515                 status = NDIS_STATUS_NOT_ACCEPTED;
516                 return status;
517         }               
518         
519         peeprompriv->channel_plan = *(u16 *)poid_par_priv->information_buf ;
520
521         return status;
522 }
523 //------------------------------------------------------------------------------
524 NDIS_STATUS oid_rt_set_preamble_mode_hdl(struct oid_par_priv* poid_par_priv)
525 {
526         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
527         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
528         ULONG                   preamblemode = 0;
529         if(poid_par_priv->type_of_oid != SET_OID)
530         {
531                 status = NDIS_STATUS_NOT_ACCEPTED;
532                 return status;
533         }
534          
535         if(poid_par_priv->information_buf_len>= sizeof(ULONG))
536         {               
537                 preamblemode = *(ULONG *)poid_par_priv->information_buf ;
538                 if( preamblemode == 0)
539                         padapter->registrypriv.preamble = PREAMBLE_LONG;
540                 else if (preamblemode==1 )
541                         padapter->registrypriv.preamble = PREAMBLE_AUTO;
542                 else if ( preamblemode==2 )
543                         padapter->registrypriv.preamble = PREAMBLE_SHORT;               
544                         
545                 *(ULONG *)poid_par_priv->information_buf = preamblemode ;
546                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
547         }
548         else
549         {
550                 status = NDIS_STATUS_INVALID_LENGTH ;
551         }       
552
553         return status;
554 }
555 //------------------------------------------------------------------------------
556 NDIS_STATUS oid_rt_set_bcn_intvl_hdl(struct oid_par_priv* poid_par_priv)
557 {
558         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
559         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
560
561         if(poid_par_priv->type_of_oid != SET_OID)
562         {
563                 status = NDIS_STATUS_NOT_ACCEPTED;
564                 return status;
565         }
566
567         return status;
568 }
569 NDIS_STATUS oid_rt_dedicate_probe_hdl(struct oid_par_priv* poid_par_priv)
570 {
571         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
572         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
573
574         return status;
575 }
576 //------------------------------------------------------------------------------
577 NDIS_STATUS oid_rt_get_total_tx_bytes_hdl(struct oid_par_priv* poid_par_priv)
578 {
579         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
580         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
581
582         if(poid_par_priv->type_of_oid != QUERY_OID)
583         {
584                 status = NDIS_STATUS_NOT_ACCEPTED;
585                 return status;
586         }       
587         if(poid_par_priv->information_buf_len>= sizeof(ULONG))
588         {               
589                 *(u64 *)poid_par_priv->information_buf = padapter->xmitpriv.tx_bytes;
590                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
591         }
592         else
593         {
594                 status = NDIS_STATUS_INVALID_LENGTH ;
595         }
596         
597
598         return status;
599 }
600 //------------------------------------------------------------------------------
601 NDIS_STATUS oid_rt_get_total_rx_bytes_hdl(struct oid_par_priv* poid_par_priv)
602 {
603         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
604         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
605
606         if(poid_par_priv->type_of_oid != QUERY_OID)
607         {
608                 status = NDIS_STATUS_NOT_ACCEPTED;
609                 return status;
610         }
611         if(poid_par_priv->information_buf_len>= sizeof(ULONG))
612         {
613                 //_rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32));
614                 *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_bytes;
615                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
616         }
617         else
618         {
619                 status = NDIS_STATUS_INVALID_LENGTH ;
620         }
621         return status;
622 }
623 //------------------------------------------------------------------------------
624 NDIS_STATUS oid_rt_current_tx_power_level_hdl(struct oid_par_priv* poid_par_priv)
625 {
626         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
627         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
628
629         return status;
630 }
631 NDIS_STATUS oid_rt_get_enc_key_mismatch_count_hdl(struct oid_par_priv* poid_par_priv)
632 {
633         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
634         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
635
636         if(poid_par_priv->type_of_oid != QUERY_OID)
637         {
638                 status = NDIS_STATUS_NOT_ACCEPTED;
639                 return status;
640         }               
641
642         return status;
643 }
644 NDIS_STATUS oid_rt_get_enc_key_match_count_hdl(struct oid_par_priv* poid_par_priv)
645 {
646         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
647         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
648
649         if(poid_par_priv->type_of_oid != QUERY_OID)
650         {
651                 status = NDIS_STATUS_NOT_ACCEPTED;
652                 return status;
653         }               
654
655         return status;
656 }
657 NDIS_STATUS oid_rt_get_channel_hdl(struct oid_par_priv* poid_par_priv)
658 {
659         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
660         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
661         struct  mlme_priv       *pmlmepriv = &padapter->mlmepriv;
662         NDIS_802_11_CONFIGURATION               *pnic_Config;
663
664         ULONG   channelnum;
665
666         _func_enter_;
667         if(poid_par_priv->type_of_oid != QUERY_OID)
668         {
669                 status = NDIS_STATUS_NOT_ACCEPTED;
670                 return status;
671         }               
672
673         if ( (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) ||
674                 (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE))
675                 pnic_Config = &pmlmepriv->cur_network.network.Configuration;
676         else
677                 pnic_Config = &padapter->registrypriv.dev_network.Configuration;
678
679         channelnum = pnic_Config->DSConfig;
680         *(ULONG *)poid_par_priv->information_buf = channelnum;
681         
682         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
683
684         _func_exit_;
685
686
687
688         return status;
689 }
690 NDIS_STATUS oid_rt_get_hardware_radio_off_hdl(struct oid_par_priv* poid_par_priv)
691 {
692         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
693         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
694
695         if(poid_par_priv->type_of_oid != QUERY_OID)
696         {
697                 status = NDIS_STATUS_NOT_ACCEPTED;
698                 return status;
699         }               
700
701         return status;
702 }
703 NDIS_STATUS oid_rt_get_key_mismatch_hdl(struct oid_par_priv* poid_par_priv)
704 {
705         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
706         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
707
708         if(poid_par_priv->type_of_oid != QUERY_OID)
709         {
710                 status = NDIS_STATUS_NOT_ACCEPTED;
711                 return status;
712         }               
713
714         return status;
715 }
716 NDIS_STATUS oid_rt_supported_wireless_mode_hdl(struct oid_par_priv* poid_par_priv)
717 {
718         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
719         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
720         ULONG                   ulInfo = 0 ;
721         //DEBUG_ERR(("<**********************oid_rt_supported_wireless_mode_hdl \n"));  
722         if(poid_par_priv->type_of_oid != QUERY_OID)
723         {
724                 status = NDIS_STATUS_NOT_ACCEPTED;
725                 return status;
726         }               
727         if(poid_par_priv->information_buf_len >= sizeof(ULONG)){
728                 ulInfo |= 0x0100; //WIRELESS_MODE_B
729                 ulInfo |= 0x0200; //WIRELESS_MODE_G
730                 ulInfo |= 0x0400; //WIRELESS_MODE_A
731
732                 *(ULONG *) poid_par_priv->information_buf = ulInfo;             
733                 //DEBUG_ERR(("<===oid_rt_supported_wireless_mode %x\n",ulInfo));        
734                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
735         }
736         else{
737                 status = NDIS_STATUS_INVALID_LENGTH;
738         }               
739
740         return status;
741 }
742 NDIS_STATUS oid_rt_get_channel_list_hdl(struct oid_par_priv* poid_par_priv)
743 {
744         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
745         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
746
747         if(poid_par_priv->type_of_oid != QUERY_OID)
748         {
749                 status = NDIS_STATUS_NOT_ACCEPTED;
750                 return status;
751         }               
752
753         return status;
754 }
755 NDIS_STATUS oid_rt_get_scan_in_progress_hdl(struct oid_par_priv* poid_par_priv)
756 {
757         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
758         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
759
760         if(poid_par_priv->type_of_oid != QUERY_OID)
761         {
762                 status = NDIS_STATUS_NOT_ACCEPTED;
763                 return status;
764         }               
765
766         return status;
767 }
768
769
770 NDIS_STATUS oid_rt_forced_data_rate_hdl(struct oid_par_priv* poid_par_priv)
771 {
772         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
773         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
774
775         return status;
776 }
777 NDIS_STATUS oid_rt_wireless_mode_for_scan_list_hdl(struct oid_par_priv* poid_par_priv)
778 {
779         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
780         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
781
782         return status;
783 }
784 NDIS_STATUS oid_rt_get_bss_wireless_mode_hdl(struct oid_par_priv* poid_par_priv)
785 {
786         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
787         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
788
789         if(poid_par_priv->type_of_oid != QUERY_OID)
790         {
791                 status = NDIS_STATUS_NOT_ACCEPTED;
792                 return status;
793         }               
794
795         return status;
796 }
797
798 NDIS_STATUS oid_rt_scan_with_magic_packet_hdl(struct oid_par_priv* poid_par_priv)
799 {
800         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
801         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
802
803         return status;
804 }
805 //**************  oid_rtl_seg_01_01 section end ************** 
806
807 //**************  oid_rtl_seg_01_03 section start ************** 
808 NDIS_STATUS oid_rt_ap_get_associated_station_list_hdl(struct oid_par_priv* poid_par_priv)
809 {
810         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
811         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
812
813         if(poid_par_priv->type_of_oid != QUERY_OID)
814         {
815                 status = NDIS_STATUS_NOT_ACCEPTED;
816                 return status;
817         }               
818
819         return status;
820 }
821 NDIS_STATUS oid_rt_ap_switch_into_ap_mode_hdl(struct oid_par_priv* poid_par_priv)
822 {
823         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
824         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
825
826         return status;
827 }
828 NDIS_STATUS oid_rt_ap_supported_hdl(struct oid_par_priv* poid_par_priv)
829 {
830         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
831         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
832
833         return status;
834 }
835 NDIS_STATUS oid_rt_ap_set_passphrase_hdl(struct oid_par_priv* poid_par_priv)
836 {
837         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
838         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
839
840         if(poid_par_priv->type_of_oid != SET_OID)
841         {
842                 status = NDIS_STATUS_NOT_ACCEPTED;
843                 return status;
844         }               
845
846         return status;
847 }
848
849 //**************  oid_rtl_seg_01_03 section end ************** 
850
851 //****************  oid_rtl_seg_01_11   section start ****************
852 NDIS_STATUS oid_rt_pro_rf_write_registry_hdl(struct oid_par_priv* poid_par_priv)
853 {
854         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
855         PADAPTER                Adapter = (PADAPTER)(poid_par_priv->adapter_context);
856         _irqL                   oldirql;
857         _func_enter_;
858         //DEBUG_ERR(("<**********************oid_rt_pro_rf_write_registry_hdl \n"));
859         if(poid_par_priv->type_of_oid != SET_OID) //QUERY_OID
860         {
861                 status = NDIS_STATUS_NOT_ACCEPTED;
862                 return status;
863         }
864         
865         _irqlevel_changed_(&oldirql,LOWER);
866         if(poid_par_priv->information_buf_len== (sizeof(unsigned long)*3))
867         {      
868                 //RegOffsetValue        - The offset of RF register to write.
869                 //RegDataWidth  - The data width of RF register to write.
870                 //RegDataValue  - The value to write. 
871                 //RegOffsetValue = *((unsigned long*)InformationBuffer);
872                 //RegDataWidth = *((unsigned long*)InformationBuffer+1);           
873                 //RegDataValue =  *((unsigned long*)InformationBuffer+2);       
874                 if(!rtw_setrfreg_cmd(Adapter, 
875                                                 *(unsigned char*)poid_par_priv->information_buf, 
876                                                 (unsigned long)(*((unsigned long*)poid_par_priv->information_buf+2))))
877                 {
878                         status = NDIS_STATUS_NOT_ACCEPTED;
879                 }
880                            
881         }
882         else{
883                 status = NDIS_STATUS_INVALID_LENGTH;
884         }   
885         _irqlevel_changed_(&oldirql,RAISE);
886         _func_exit_;
887
888         return status;
889 }
890
891 //------------------------------------------------------------------------------
892 NDIS_STATUS oid_rt_pro_rf_read_registry_hdl(struct oid_par_priv* poid_par_priv)
893 {
894         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
895 #if 0
896         PADAPTER                Adapter = (PADAPTER)(poid_par_priv->adapter_context);
897         _irqL   oldirql;
898         _func_enter_;
899
900         //DEBUG_ERR(("<**********************oid_rt_pro_rf_read_registry_hdl \n"));
901         if(poid_par_priv->type_of_oid != SET_OID) //QUERY_OID
902         {
903                 status = NDIS_STATUS_NOT_ACCEPTED;
904                 return status;
905         }       
906         
907         _irqlevel_changed_(&oldirql,LOWER);
908         if(poid_par_priv->information_buf_len== (sizeof(unsigned long)*3))
909         {
910                 if(Adapter->mppriv.act_in_progress == _TRUE)
911                 {
912                         status = NDIS_STATUS_NOT_ACCEPTED;
913                 }
914                 else
915                 {
916                         //init workparam
917                         Adapter->mppriv.act_in_progress = _TRUE;
918                         Adapter->mppriv.workparam.bcompleted= _FALSE;
919                         Adapter->mppriv.workparam.act_type = MPT_READ_RF;
920                         Adapter->mppriv.workparam.io_offset = *(unsigned long*)poid_par_priv->information_buf;          
921                         Adapter->mppriv.workparam.io_value = 0xcccccccc;
922                                        
923                         //RegOffsetValue        - The offset of RF register to read.
924                         //RegDataWidth  - The data width of RF register to read.
925                         //RegDataValue  - The value to read. 
926                         //RegOffsetValue = *((unsigned long*)InformationBuffer);
927                         //RegDataWidth = *((unsigned long*)InformationBuffer+1);           
928                         //RegDataValue =  *((unsigned long*)InformationBuffer+2);                                          
929                         if(!rtw_getrfreg_cmd(Adapter, 
930                                                         *(unsigned char*)poid_par_priv->information_buf, 
931                                                         (unsigned char*)&Adapter->mppriv.workparam.io_value))
932                         {
933                                 status = NDIS_STATUS_NOT_ACCEPTED;
934                         }
935                 }
936                                                    
937                                    
938         }
939         else    {
940                 status = NDIS_STATUS_INVALID_LENGTH;
941         }
942         _irqlevel_changed_(&oldirql,RAISE);
943         _func_exit_;
944 #endif
945         return status;
946 }
947
948 //****************  oid_rtl_seg_01_11   section end****************     
949
950
951 //**************  oid_rtl_seg_03_00 section start **************  
952 enum _CONNECT_STATE_{
953         CHECKINGSTATUS,
954         ASSOCIATED,
955         ADHOCMODE,
956         NOTASSOCIATED
957 };
958
959 NDIS_STATUS oid_rt_get_connect_state_hdl(struct oid_par_priv* poid_par_priv)
960 {
961         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
962         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
963
964         struct mlme_priv        *pmlmepriv = &(padapter->mlmepriv);
965
966         ULONG ulInfo;
967                 
968         if(poid_par_priv->type_of_oid != QUERY_OID)
969         {
970                 status = NDIS_STATUS_NOT_ACCEPTED;
971                 return status;
972         }               
973
974         // nStatus==0   CheckingStatus
975         // nStatus==1   Associated
976         // nStatus==2   AdHocMode
977         // nStatus==3   NotAssociated
978         
979         if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE)
980                 ulInfo = CHECKINGSTATUS;
981         else if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)  
982                 ulInfo = ASSOCIATED;
983         else if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)== _TRUE)
984                 ulInfo = ADHOCMODE;
985         else
986                 ulInfo = NOTASSOCIATED ;
987
988         *(ULONG *)poid_par_priv->information_buf = ulInfo;
989         *poid_par_priv->bytes_rw =  poid_par_priv->information_buf_len;
990
991 #if 0
992         // Rearrange the order to let the UI still shows connection when scan is in progress
993         RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_CONNECT_STATE.\n"));
994         if(pMgntInfo->mAssoc)
995                 ulInfo = 1;
996         else if(pMgntInfo->mIbss)
997                 ulInfo = 2;
998         else if(pMgntInfo->bScanInProgress)
999                 ulInfo = 0;
1000         else
1001                 ulInfo = 3;
1002         ulInfoLen = sizeof(ULONG);
1003         RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_CONNECT_STATE: %d\n", ulInfo));
1004 #endif
1005
1006         return status;
1007 }
1008
1009 NDIS_STATUS oid_rt_set_default_key_id_hdl(struct oid_par_priv* poid_par_priv)
1010 {
1011         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
1012         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
1013
1014         if(poid_par_priv->type_of_oid != SET_OID)
1015         {
1016                 status = NDIS_STATUS_NOT_ACCEPTED;
1017                 return status;
1018         }
1019         
1020         return status;
1021 }
1022 //**************  oid_rtl_seg_03_00 section end **************  
1023