ARM64: DTS: Add rk3399-firefly uart4 device, node as /dev/ttyS1
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bu / 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
496         if(poid_par_priv->type_of_oid != QUERY_OID)
497         {
498                 status = NDIS_STATUS_NOT_ACCEPTED;
499                 return status;
500         }               
501         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
502         *(u16 *)poid_par_priv->information_buf = padapter->mlmepriv.ChannelPlan ;
503
504         return status;
505 }
506 NDIS_STATUS oid_rt_set_channelplan_hdl(struct oid_par_priv* poid_par_priv)
507 {
508         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
509         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
510         
511         if(poid_par_priv->type_of_oid != SET_OID)
512         {
513                 status = NDIS_STATUS_NOT_ACCEPTED;
514                 return status;
515         }               
516         
517         padapter->mlmepriv.ChannelPlan  = *(u16 *)poid_par_priv->information_buf ;
518
519         return status;
520 }
521 //------------------------------------------------------------------------------
522 NDIS_STATUS oid_rt_set_preamble_mode_hdl(struct oid_par_priv* poid_par_priv)
523 {
524         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
525         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
526         ULONG                   preamblemode = 0;
527         if(poid_par_priv->type_of_oid != SET_OID)
528         {
529                 status = NDIS_STATUS_NOT_ACCEPTED;
530                 return status;
531         }
532          
533         if(poid_par_priv->information_buf_len>= sizeof(ULONG))
534         {               
535                 preamblemode = *(ULONG *)poid_par_priv->information_buf ;
536                 if( preamblemode == 0)
537                         padapter->registrypriv.preamble = PREAMBLE_LONG;
538                 else if (preamblemode==1 )
539                         padapter->registrypriv.preamble = PREAMBLE_AUTO;
540                 else if ( preamblemode==2 )
541                         padapter->registrypriv.preamble = PREAMBLE_SHORT;               
542                         
543                 *(ULONG *)poid_par_priv->information_buf = preamblemode ;
544                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
545         }
546         else
547         {
548                 status = NDIS_STATUS_INVALID_LENGTH ;
549         }       
550
551         return status;
552 }
553 //------------------------------------------------------------------------------
554 NDIS_STATUS oid_rt_set_bcn_intvl_hdl(struct oid_par_priv* poid_par_priv)
555 {
556         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
557         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
558
559         if(poid_par_priv->type_of_oid != SET_OID)
560         {
561                 status = NDIS_STATUS_NOT_ACCEPTED;
562                 return status;
563         }
564
565         return status;
566 }
567 NDIS_STATUS oid_rt_dedicate_probe_hdl(struct oid_par_priv* poid_par_priv)
568 {
569         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
570         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
571
572         return status;
573 }
574 //------------------------------------------------------------------------------
575 NDIS_STATUS oid_rt_get_total_tx_bytes_hdl(struct oid_par_priv* poid_par_priv)
576 {
577         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
578         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
579
580         if(poid_par_priv->type_of_oid != QUERY_OID)
581         {
582                 status = NDIS_STATUS_NOT_ACCEPTED;
583                 return status;
584         }       
585         if(poid_par_priv->information_buf_len>= sizeof(ULONG))
586         {               
587                 *(u64 *)poid_par_priv->information_buf = padapter->xmitpriv.tx_bytes;
588                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
589         }
590         else
591         {
592                 status = NDIS_STATUS_INVALID_LENGTH ;
593         }
594         
595
596         return status;
597 }
598 //------------------------------------------------------------------------------
599 NDIS_STATUS oid_rt_get_total_rx_bytes_hdl(struct oid_par_priv* poid_par_priv)
600 {
601         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
602         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
603
604         if(poid_par_priv->type_of_oid != QUERY_OID)
605         {
606                 status = NDIS_STATUS_NOT_ACCEPTED;
607                 return status;
608         }
609         if(poid_par_priv->information_buf_len>= sizeof(ULONG))
610         {
611                 //_rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32));
612                 *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_bytes;
613                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
614         }
615         else
616         {
617                 status = NDIS_STATUS_INVALID_LENGTH ;
618         }
619         return status;
620 }
621 //------------------------------------------------------------------------------
622 NDIS_STATUS oid_rt_current_tx_power_level_hdl(struct oid_par_priv* poid_par_priv)
623 {
624         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
625         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
626
627         return status;
628 }
629 NDIS_STATUS oid_rt_get_enc_key_mismatch_count_hdl(struct oid_par_priv* poid_par_priv)
630 {
631         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
632         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
633
634         if(poid_par_priv->type_of_oid != QUERY_OID)
635         {
636                 status = NDIS_STATUS_NOT_ACCEPTED;
637                 return status;
638         }               
639
640         return status;
641 }
642 NDIS_STATUS oid_rt_get_enc_key_match_count_hdl(struct oid_par_priv* poid_par_priv)
643 {
644         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
645         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
646
647         if(poid_par_priv->type_of_oid != QUERY_OID)
648         {
649                 status = NDIS_STATUS_NOT_ACCEPTED;
650                 return status;
651         }               
652
653         return status;
654 }
655 NDIS_STATUS oid_rt_get_channel_hdl(struct oid_par_priv* poid_par_priv)
656 {
657         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
658         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
659         struct  mlme_priv       *pmlmepriv = &padapter->mlmepriv;
660         NDIS_802_11_CONFIGURATION               *pnic_Config;
661
662         ULONG   channelnum;
663
664         _func_enter_;
665         if(poid_par_priv->type_of_oid != QUERY_OID)
666         {
667                 status = NDIS_STATUS_NOT_ACCEPTED;
668                 return status;
669         }               
670
671         if ( (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) ||
672                 (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE))
673                 pnic_Config = &pmlmepriv->cur_network.network.Configuration;
674         else
675                 pnic_Config = &padapter->registrypriv.dev_network.Configuration;
676
677         channelnum = pnic_Config->DSConfig;
678         *(ULONG *)poid_par_priv->information_buf = channelnum;
679         
680         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
681
682         _func_exit_;
683
684
685
686         return status;
687 }
688 NDIS_STATUS oid_rt_get_hardware_radio_off_hdl(struct oid_par_priv* poid_par_priv)
689 {
690         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
691         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
692
693         if(poid_par_priv->type_of_oid != QUERY_OID)
694         {
695                 status = NDIS_STATUS_NOT_ACCEPTED;
696                 return status;
697         }               
698
699         return status;
700 }
701 NDIS_STATUS oid_rt_get_key_mismatch_hdl(struct oid_par_priv* poid_par_priv)
702 {
703         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
704         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
705
706         if(poid_par_priv->type_of_oid != QUERY_OID)
707         {
708                 status = NDIS_STATUS_NOT_ACCEPTED;
709                 return status;
710         }               
711
712         return status;
713 }
714 NDIS_STATUS oid_rt_supported_wireless_mode_hdl(struct oid_par_priv* poid_par_priv)
715 {
716         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
717         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
718         ULONG                   ulInfo = 0 ;
719         //DEBUG_ERR(("<**********************oid_rt_supported_wireless_mode_hdl \n"));  
720         if(poid_par_priv->type_of_oid != QUERY_OID)
721         {
722                 status = NDIS_STATUS_NOT_ACCEPTED;
723                 return status;
724         }               
725         if(poid_par_priv->information_buf_len >= sizeof(ULONG)){
726                 ulInfo |= 0x0100; //WIRELESS_MODE_B
727                 ulInfo |= 0x0200; //WIRELESS_MODE_G
728                 ulInfo |= 0x0400; //WIRELESS_MODE_A
729
730                 *(ULONG *) poid_par_priv->information_buf = ulInfo;             
731                 //DEBUG_ERR(("<===oid_rt_supported_wireless_mode %x\n",ulInfo));        
732                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
733         }
734         else{
735                 status = NDIS_STATUS_INVALID_LENGTH;
736         }               
737
738         return status;
739 }
740 NDIS_STATUS oid_rt_get_channel_list_hdl(struct oid_par_priv* poid_par_priv)
741 {
742         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
743         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
744
745         if(poid_par_priv->type_of_oid != QUERY_OID)
746         {
747                 status = NDIS_STATUS_NOT_ACCEPTED;
748                 return status;
749         }               
750
751         return status;
752 }
753 NDIS_STATUS oid_rt_get_scan_in_progress_hdl(struct oid_par_priv* poid_par_priv)
754 {
755         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
756         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
757
758         if(poid_par_priv->type_of_oid != QUERY_OID)
759         {
760                 status = NDIS_STATUS_NOT_ACCEPTED;
761                 return status;
762         }               
763
764         return status;
765 }
766
767
768 NDIS_STATUS oid_rt_forced_data_rate_hdl(struct oid_par_priv* poid_par_priv)
769 {
770         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
771         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
772
773         return status;
774 }
775 NDIS_STATUS oid_rt_wireless_mode_for_scan_list_hdl(struct oid_par_priv* poid_par_priv)
776 {
777         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
778         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
779
780         return status;
781 }
782 NDIS_STATUS oid_rt_get_bss_wireless_mode_hdl(struct oid_par_priv* poid_par_priv)
783 {
784         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
785         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
786
787         if(poid_par_priv->type_of_oid != QUERY_OID)
788         {
789                 status = NDIS_STATUS_NOT_ACCEPTED;
790                 return status;
791         }               
792
793         return status;
794 }
795
796 NDIS_STATUS oid_rt_scan_with_magic_packet_hdl(struct oid_par_priv* poid_par_priv)
797 {
798         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
799         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
800
801         return status;
802 }
803 //**************  oid_rtl_seg_01_01 section end ************** 
804
805 //**************  oid_rtl_seg_01_03 section start ************** 
806 NDIS_STATUS oid_rt_ap_get_associated_station_list_hdl(struct oid_par_priv* poid_par_priv)
807 {
808         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
809         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
810
811         if(poid_par_priv->type_of_oid != QUERY_OID)
812         {
813                 status = NDIS_STATUS_NOT_ACCEPTED;
814                 return status;
815         }               
816
817         return status;
818 }
819 NDIS_STATUS oid_rt_ap_switch_into_ap_mode_hdl(struct oid_par_priv* poid_par_priv)
820 {
821         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
822         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
823
824         return status;
825 }
826 NDIS_STATUS oid_rt_ap_supported_hdl(struct oid_par_priv* poid_par_priv)
827 {
828         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
829         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
830
831         return status;
832 }
833 NDIS_STATUS oid_rt_ap_set_passphrase_hdl(struct oid_par_priv* poid_par_priv)
834 {
835         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
836         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
837
838         if(poid_par_priv->type_of_oid != SET_OID)
839         {
840                 status = NDIS_STATUS_NOT_ACCEPTED;
841                 return status;
842         }               
843
844         return status;
845 }
846
847 //**************  oid_rtl_seg_01_03 section end ************** 
848
849 //****************  oid_rtl_seg_01_11   section start ****************
850 NDIS_STATUS oid_rt_pro_rf_write_registry_hdl(struct oid_par_priv* poid_par_priv)
851 {
852         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
853         PADAPTER                Adapter = (PADAPTER)(poid_par_priv->adapter_context);
854         _irqL                   oldirql;
855         _func_enter_;
856         //DEBUG_ERR(("<**********************oid_rt_pro_rf_write_registry_hdl \n"));
857         if(poid_par_priv->type_of_oid != SET_OID) //QUERY_OID
858         {
859                 status = NDIS_STATUS_NOT_ACCEPTED;
860                 return status;
861         }
862         
863         _irqlevel_changed_(&oldirql,LOWER);
864         if(poid_par_priv->information_buf_len== (sizeof(unsigned long)*3))
865         {      
866                 //RegOffsetValue        - The offset of RF register to write.
867                 //RegDataWidth  - The data width of RF register to write.
868                 //RegDataValue  - The value to write. 
869                 //RegOffsetValue = *((unsigned long*)InformationBuffer);
870                 //RegDataWidth = *((unsigned long*)InformationBuffer+1);           
871                 //RegDataValue =  *((unsigned long*)InformationBuffer+2);       
872                 if(!rtw_setrfreg_cmd(Adapter, 
873                                                 *(unsigned char*)poid_par_priv->information_buf, 
874                                                 (unsigned long)(*((unsigned long*)poid_par_priv->information_buf+2))))
875                 {
876                         status = NDIS_STATUS_NOT_ACCEPTED;
877                 }
878                            
879         }
880         else{
881                 status = NDIS_STATUS_INVALID_LENGTH;
882         }   
883         _irqlevel_changed_(&oldirql,RAISE);
884         _func_exit_;
885
886         return status;
887 }
888
889 //------------------------------------------------------------------------------
890 NDIS_STATUS oid_rt_pro_rf_read_registry_hdl(struct oid_par_priv* poid_par_priv)
891 {
892         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
893 #if 0
894         PADAPTER                Adapter = (PADAPTER)(poid_par_priv->adapter_context);
895         _irqL   oldirql;
896         _func_enter_;
897
898         //DEBUG_ERR(("<**********************oid_rt_pro_rf_read_registry_hdl \n"));
899         if(poid_par_priv->type_of_oid != SET_OID) //QUERY_OID
900         {
901                 status = NDIS_STATUS_NOT_ACCEPTED;
902                 return status;
903         }       
904         
905         _irqlevel_changed_(&oldirql,LOWER);
906         if(poid_par_priv->information_buf_len== (sizeof(unsigned long)*3))
907         {
908                 if(Adapter->mppriv.act_in_progress == _TRUE)
909                 {
910                         status = NDIS_STATUS_NOT_ACCEPTED;
911                 }
912                 else
913                 {
914                         //init workparam
915                         Adapter->mppriv.act_in_progress = _TRUE;
916                         Adapter->mppriv.workparam.bcompleted= _FALSE;
917                         Adapter->mppriv.workparam.act_type = MPT_READ_RF;
918                         Adapter->mppriv.workparam.io_offset = *(unsigned long*)poid_par_priv->information_buf;          
919                         Adapter->mppriv.workparam.io_value = 0xcccccccc;
920                                        
921                         //RegOffsetValue        - The offset of RF register to read.
922                         //RegDataWidth  - The data width of RF register to read.
923                         //RegDataValue  - The value to read. 
924                         //RegOffsetValue = *((unsigned long*)InformationBuffer);
925                         //RegDataWidth = *((unsigned long*)InformationBuffer+1);           
926                         //RegDataValue =  *((unsigned long*)InformationBuffer+2);                                          
927                         if(!rtw_getrfreg_cmd(Adapter, 
928                                                         *(unsigned char*)poid_par_priv->information_buf, 
929                                                         (unsigned char*)&Adapter->mppriv.workparam.io_value))
930                         {
931                                 status = NDIS_STATUS_NOT_ACCEPTED;
932                         }
933                 }
934                                                    
935                                    
936         }
937         else    {
938                 status = NDIS_STATUS_INVALID_LENGTH;
939         }
940         _irqlevel_changed_(&oldirql,RAISE);
941         _func_exit_;
942 #endif
943         return status;
944 }
945
946 //****************  oid_rtl_seg_01_11   section end****************     
947
948
949 //**************  oid_rtl_seg_03_00 section start **************  
950 enum _CONNECT_STATE_{
951         CHECKINGSTATUS,
952         ASSOCIATED,
953         ADHOCMODE,
954         NOTASSOCIATED
955 };
956
957 NDIS_STATUS oid_rt_get_connect_state_hdl(struct oid_par_priv* poid_par_priv)
958 {
959         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
960         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
961
962         struct mlme_priv        *pmlmepriv = &(padapter->mlmepriv);
963
964         ULONG ulInfo;
965                 
966         if(poid_par_priv->type_of_oid != QUERY_OID)
967         {
968                 status = NDIS_STATUS_NOT_ACCEPTED;
969                 return status;
970         }               
971
972         // nStatus==0   CheckingStatus
973         // nStatus==1   Associated
974         // nStatus==2   AdHocMode
975         // nStatus==3   NotAssociated
976         
977         if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE)
978                 ulInfo = CHECKINGSTATUS;
979         else if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)  
980                 ulInfo = ASSOCIATED;
981         else if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)== _TRUE)
982                 ulInfo = ADHOCMODE;
983         else
984                 ulInfo = NOTASSOCIATED ;
985
986         *(ULONG *)poid_par_priv->information_buf = ulInfo;
987         *poid_par_priv->bytes_rw =  poid_par_priv->information_buf_len;
988
989 #if 0
990         // Rearrange the order to let the UI still shows connection when scan is in progress
991         RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_CONNECT_STATE.\n"));
992         if(pMgntInfo->mAssoc)
993                 ulInfo = 1;
994         else if(pMgntInfo->mIbss)
995                 ulInfo = 2;
996         else if(pMgntInfo->bScanInProgress)
997                 ulInfo = 0;
998         else
999                 ulInfo = 3;
1000         ulInfoLen = sizeof(ULONG);
1001         RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_CONNECT_STATE: %d\n", ulInfo));
1002 #endif
1003
1004         return status;
1005 }
1006
1007 NDIS_STATUS oid_rt_set_default_key_id_hdl(struct oid_par_priv* poid_par_priv)
1008 {
1009         NDIS_STATUS             status = NDIS_STATUS_SUCCESS;
1010         PADAPTER                padapter = (PADAPTER)(poid_par_priv->adapter_context);
1011
1012         if(poid_par_priv->type_of_oid != SET_OID)
1013         {
1014                 status = NDIS_STATUS_NOT_ACCEPTED;
1015                 return status;
1016         }
1017         
1018         return status;
1019 }
1020 //**************  oid_rtl_seg_03_00 section end **************  
1021