OSDN Git Service

Add rtl8812au driver version 5.2.6.2
[android-x86/external-kernel-drivers.git] / rtl8812au / core / rtw_mp_ioctl.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_MP_IOCTL_C_
21
22 #include <drv_types.h>
23 #include <rtw_mp_ioctl.h>
24 #include "../hal/phydm/phydm_precomp.h"
25
26 /* ****************  oid_rtl_seg_81_85   section start **************** */
27 NDIS_STATUS oid_rt_wireless_mode_hdl(struct oid_par_priv *poid_par_priv)
28 {
29         NDIS_STATUS status = NDIS_STATUS_SUCCESS;
30         PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
31
32
33         if (poid_par_priv->information_buf_len < sizeof(u8))
34                 return NDIS_STATUS_INVALID_LENGTH;
35
36         if (poid_par_priv->type_of_oid == SET_OID)
37                 Adapter->registrypriv.wireless_mode = *(u8 *)poid_par_priv->information_buf;
38         else if (poid_par_priv->type_of_oid == QUERY_OID) {
39                 *(u8 *)poid_par_priv->information_buf = Adapter->registrypriv.wireless_mode;
40                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
41         } else
42                 status = NDIS_STATUS_NOT_ACCEPTED;
43
44
45         return status;
46 }
47 /* ****************  oid_rtl_seg_81_87_80   section start **************** */
48 NDIS_STATUS oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
49 {
50 #ifdef PLATFORM_OS_XP
51         _irqL oldirql;
52 #endif
53         struct bb_reg_param *pbbreg;
54         u16 offset;
55         u32 value;
56         NDIS_STATUS status = NDIS_STATUS_SUCCESS;
57         PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
58
59
60
61         if (poid_par_priv->type_of_oid != SET_OID)
62                 return NDIS_STATUS_NOT_ACCEPTED;
63
64         if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
65                 return NDIS_STATUS_INVALID_LENGTH;
66
67         pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
68
69         offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
70         if (offset < BB_REG_BASE_ADDR)
71                 offset |= BB_REG_BASE_ADDR;
72
73         value = pbbreg->value;
74
75
76         _irqlevel_changed_(&oldirql, LOWER);
77         write_bbreg(Adapter, offset, 0xFFFFFFFF, value);
78         _irqlevel_changed_(&oldirql, RAISE);
79
80
81         return status;
82 }
83 /* ------------------------------------------------------------------------------ */
84 NDIS_STATUS oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
85 {
86 #ifdef PLATFORM_OS_XP
87         _irqL oldirql;
88 #endif
89         struct bb_reg_param *pbbreg;
90         u16 offset;
91         u32 value;
92         NDIS_STATUS status = NDIS_STATUS_SUCCESS;
93         PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
94
95
96
97         if (poid_par_priv->type_of_oid != QUERY_OID)
98                 return NDIS_STATUS_NOT_ACCEPTED;
99
100         if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
101                 return NDIS_STATUS_INVALID_LENGTH;
102
103         pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
104
105         offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
106         if (offset < BB_REG_BASE_ADDR)
107                 offset |= BB_REG_BASE_ADDR;
108
109         _irqlevel_changed_(&oldirql, LOWER);
110         value = read_bbreg(Adapter, offset, 0xFFFFFFFF);
111         _irqlevel_changed_(&oldirql, RAISE);
112
113         pbbreg->value = value;
114         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
115
116
117         return status;
118 }
119 /* ------------------------------------------------------------------------------ */
120 NDIS_STATUS oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
121 {
122 #ifdef PLATFORM_OS_XP
123         _irqL oldirql;
124 #endif
125         struct rf_reg_param *pbbreg;
126         u8 path;
127         u8 offset;
128         u32 value;
129         NDIS_STATUS status = NDIS_STATUS_SUCCESS;
130         PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
131
132
133
134         if (poid_par_priv->type_of_oid != SET_OID)
135                 return NDIS_STATUS_NOT_ACCEPTED;
136
137         if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
138                 return NDIS_STATUS_INVALID_LENGTH;
139
140         pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
141
142         if (pbbreg->path >= MAX_RF_PATH_NUMS)
143                 return NDIS_STATUS_NOT_ACCEPTED;
144         if (pbbreg->offset > 0xFF)
145                 return NDIS_STATUS_NOT_ACCEPTED;
146         if (pbbreg->value > 0xFFFFF)
147                 return NDIS_STATUS_NOT_ACCEPTED;
148
149         path = (u8)pbbreg->path;
150         offset = (u8)pbbreg->offset;
151         value = pbbreg->value;
152
153
154         _irqlevel_changed_(&oldirql, LOWER);
155         write_rfreg(Adapter, path, offset, value);
156         _irqlevel_changed_(&oldirql, RAISE);
157
158
159         return status;
160 }
161 /* ------------------------------------------------------------------------------ */
162 NDIS_STATUS oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
163 {
164 #ifdef PLATFORM_OS_XP
165         _irqL oldirql;
166 #endif
167         struct rf_reg_param *pbbreg;
168         u8 path;
169         u8 offset;
170         u32 value;
171         PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
172         NDIS_STATUS status = NDIS_STATUS_SUCCESS;
173
174
175
176         if (poid_par_priv->type_of_oid != QUERY_OID)
177                 return NDIS_STATUS_NOT_ACCEPTED;
178
179         if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
180                 return NDIS_STATUS_INVALID_LENGTH;
181
182         pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
183
184         if (pbbreg->path >= MAX_RF_PATH_NUMS)
185                 return NDIS_STATUS_NOT_ACCEPTED;
186         if (pbbreg->offset > 0xFF)
187                 return NDIS_STATUS_NOT_ACCEPTED;
188
189         path = (u8)pbbreg->path;
190         offset = (u8)pbbreg->offset;
191
192         _irqlevel_changed_(&oldirql, LOWER);
193         value = read_rfreg(Adapter, path, offset);
194         _irqlevel_changed_(&oldirql, RAISE);
195
196         pbbreg->value = value;
197
198         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
199
200
201
202         return status;
203 }
204 /* ****************  oid_rtl_seg_81_87_00   section end****************
205  * ------------------------------------------------------------------------------ */
206
207 /* ****************  oid_rtl_seg_81_80_00   section start ****************
208  * ------------------------------------------------------------------------------ */
209 NDIS_STATUS oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv)
210 {
211 #ifdef PLATFORM_OS_XP
212         _irqL           oldirql;
213 #endif
214         u32             ratevalue;/* 4 */
215         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
216         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
217
218
219
220         if (poid_par_priv->type_of_oid != SET_OID)
221                 return NDIS_STATUS_NOT_ACCEPTED;
222
223         if (poid_par_priv->information_buf_len != sizeof(u32))
224                 return NDIS_STATUS_INVALID_LENGTH;
225
226         ratevalue = *((u32 *)poid_par_priv->information_buf); /* 4 */
227         if (ratevalue >= MPT_RATE_LAST)
228                 return NDIS_STATUS_INVALID_DATA;
229
230         Adapter->mppriv.rateidx = ratevalue;
231
232         _irqlevel_changed_(&oldirql, LOWER);
233         SetDataRate(Adapter);
234         _irqlevel_changed_(&oldirql, RAISE);
235
236
237         return status;
238 }
239 /* ------------------------------------------------------------------------------ */
240 NDIS_STATUS oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv)
241 {
242 #ifdef PLATFORM_OS_XP
243         _irqL           oldirql;
244 #endif
245         u32             mode;
246         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
247         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
248
249
250
251         if (Adapter->registrypriv.mp_mode == 0)
252                 return NDIS_STATUS_NOT_ACCEPTED;
253
254         if (poid_par_priv->type_of_oid != SET_OID)
255                 return NDIS_STATUS_NOT_ACCEPTED;
256
257         _irqlevel_changed_(&oldirql, LOWER);
258
259         /* IQCalibrateBcut(Adapter); */
260
261         mode = *((u32 *)poid_par_priv->information_buf);
262         Adapter->mppriv.mode = mode;/* 1 for loopback */
263
264         if (mp_start_test(Adapter) == _FAIL) {
265                 status = NDIS_STATUS_NOT_ACCEPTED;
266                 goto exit;
267         }
268
269 exit:
270         _irqlevel_changed_(&oldirql, RAISE);
271
272
273
274         return status;
275 }
276 /* ------------------------------------------------------------------------------ */
277 NDIS_STATUS oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv)
278 {
279 #ifdef PLATFORM_OS_XP
280         _irqL           oldirql;
281 #endif
282         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
283         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
284
285
286
287         if (poid_par_priv->type_of_oid != SET_OID)
288                 return NDIS_STATUS_NOT_ACCEPTED;
289
290         _irqlevel_changed_(&oldirql, LOWER);
291         mp_stop_test(Adapter);
292         _irqlevel_changed_(&oldirql, RAISE);
293
294
295
296         return status;
297 }
298 /* ------------------------------------------------------------------------------ */
299 NDIS_STATUS oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv)
300 {
301 #ifdef PLATFORM_OS_XP
302         _irqL           oldirql;
303 #endif
304         u32             Channel;
305         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
306         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
307
308
309
310         if (poid_par_priv->information_buf_len != sizeof(u32))
311                 return NDIS_STATUS_INVALID_LENGTH;
312
313         if (poid_par_priv->type_of_oid == QUERY_OID) {
314                 *((u32 *)poid_par_priv->information_buf) = Adapter->mppriv.channel;
315                 return NDIS_STATUS_SUCCESS;
316         }
317
318         if (poid_par_priv->type_of_oid != SET_OID)
319                 return NDIS_STATUS_NOT_ACCEPTED;
320
321         Channel = *((u32 *)poid_par_priv->information_buf);
322         if (Channel > 14)
323                 return NDIS_STATUS_NOT_ACCEPTED;
324         Adapter->mppriv.channel = Channel;
325
326         _irqlevel_changed_(&oldirql, LOWER);
327         SetChannel(Adapter);
328         _irqlevel_changed_(&oldirql, RAISE);
329
330
331         return status;
332 }
333 /* ------------------------------------------------------------------------------ */
334 NDIS_STATUS oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv)
335 {
336 #ifdef PLATFORM_OS_XP
337         _irqL           oldirql;
338 #endif
339         u16             bandwidth;
340         u16             channel_offset;
341         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
342         PADAPTER        padapter = (PADAPTER)(poid_par_priv->adapter_context);
343
344
345
346         if (poid_par_priv->type_of_oid != SET_OID)
347                 return NDIS_STATUS_NOT_ACCEPTED;
348
349         if (poid_par_priv->information_buf_len < sizeof(u32))
350                 return NDIS_STATUS_INVALID_LENGTH;
351
352         bandwidth = *((u32 *)poid_par_priv->information_buf); /* 4 */
353         channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
354
355         if (bandwidth != CHANNEL_WIDTH_40)
356                 bandwidth = CHANNEL_WIDTH_20;
357         padapter->mppriv.bandwidth = (u8)bandwidth;
358         padapter->mppriv.prime_channel_offset = (u8)channel_offset;
359
360         _irqlevel_changed_(&oldirql, LOWER);
361         SetBandwidth(padapter);
362         _irqlevel_changed_(&oldirql, RAISE);
363
364
365
366         return status;
367 }
368 /* ------------------------------------------------------------------------------ */
369 NDIS_STATUS oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv)
370 {
371 #ifdef PLATFORM_OS_XP
372         _irqL           oldirql;
373 #endif
374         u32             antenna;
375         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
376         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
377
378
379
380         if (poid_par_priv->information_buf_len != sizeof(u32))
381                 return NDIS_STATUS_INVALID_LENGTH;
382
383         if (poid_par_priv->type_of_oid == SET_OID) {
384                 antenna = *(u32 *)poid_par_priv->information_buf;
385
386                 Adapter->mppriv.antenna_tx = (u16)((antenna & 0xFFFF0000) >> 16);
387                 Adapter->mppriv.antenna_rx = (u16)(antenna & 0x0000FFFF);
388
389                 _irqlevel_changed_(&oldirql, LOWER);
390                 SetAntenna(Adapter);
391                 _irqlevel_changed_(&oldirql, RAISE);
392         } else {
393                 antenna = (Adapter->mppriv.antenna_tx << 16) | Adapter->mppriv.antenna_rx;
394                 *(u32 *)poid_par_priv->information_buf = antenna;
395         }
396
397
398         return status;
399 }
400
401 NDIS_STATUS oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv)
402 {
403 #ifdef PLATFORM_OS_XP
404         _irqL           oldirql;
405 #endif
406         u32             tx_pwr_idx;
407         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
408         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
409
410
411
412         if (poid_par_priv->type_of_oid != SET_OID)
413                 return NDIS_STATUS_NOT_ACCEPTED;
414
415         if (poid_par_priv->information_buf_len != sizeof(u32))
416                 return NDIS_STATUS_INVALID_LENGTH;
417
418         tx_pwr_idx = *((u32 *)poid_par_priv->information_buf);
419         if (tx_pwr_idx > MAX_TX_PWR_INDEX_N_MODE)
420                 return NDIS_STATUS_NOT_ACCEPTED;
421
422         Adapter->mppriv.txpoweridx = (u8)tx_pwr_idx;
423
424
425         _irqlevel_changed_(&oldirql, LOWER);
426         SetTxPower(Adapter);
427         _irqlevel_changed_(&oldirql, RAISE);
428
429
430         return status;
431 }
432
433 /* ------------------------------------------------------------------------------
434  * ****************  oid_rtl_seg_81_80_20   section start ****************
435  * ------------------------------------------------------------------------------ */
436 NDIS_STATUS oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
437 {
438         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
439         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
440
441
442         if (poid_par_priv->type_of_oid != QUERY_OID) {
443                 status = NDIS_STATUS_NOT_ACCEPTED;
444                 return status;
445         }
446
447         if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
448                 *(ULONG *)poid_par_priv->information_buf =  Adapter->mppriv.tx_pktcount;
449                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
450         } else
451                 status = NDIS_STATUS_INVALID_LENGTH;
452
453
454         return status;
455 }
456 /* ------------------------------------------------------------------------------ */
457 NDIS_STATUS oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
458 {
459         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
460         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
461
462
463         if (poid_par_priv->type_of_oid != QUERY_OID) {
464                 status = NDIS_STATUS_NOT_ACCEPTED;
465                 return status;
466         }
467         if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
468                 *(ULONG *)poid_par_priv->information_buf =  Adapter->mppriv.rx_pktcount;
469                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
470         } else
471                 status = NDIS_STATUS_INVALID_LENGTH;
472
473
474         return status;
475 }
476 /* ------------------------------------------------------------------------------ */
477 NDIS_STATUS oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
478 {
479         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
480         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
481
482
483         if (poid_par_priv->type_of_oid != QUERY_OID) {
484                 status = NDIS_STATUS_NOT_ACCEPTED;
485                 return status;
486         }
487         if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
488                 *(ULONG *)poid_par_priv->information_buf =  Adapter->mppriv.rx_crcerrpktcount;
489                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
490         } else
491                 status = NDIS_STATUS_INVALID_LENGTH;
492
493
494         return status;
495 }
496 /* ------------------------------------------------------------------------------ */
497
498 NDIS_STATUS oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
499 {
500         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
501         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
502
503
504         if (poid_par_priv->type_of_oid != SET_OID) {
505                 status = NDIS_STATUS_NOT_ACCEPTED;
506                 return status;
507         }
508
509         Adapter->mppriv.tx_pktcount = 0;
510
511
512         return status;
513 }
514 /* ------------------------------------------------------------------------------ */
515 NDIS_STATUS oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
516 {
517         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
518         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
519
520
521         if (poid_par_priv->type_of_oid != SET_OID) {
522                 status = NDIS_STATUS_NOT_ACCEPTED;
523                 return status;
524         }
525
526         if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
527                 Adapter->mppriv.rx_pktcount = 0;
528                 Adapter->mppriv.rx_crcerrpktcount = 0;
529         } else
530                 status = NDIS_STATUS_INVALID_LENGTH;
531
532
533         return status;
534 }
535 /* ------------------------------------------------------------------------------ */
536 NDIS_STATUS oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv)
537 {
538 #ifdef PLATFORM_OS_XP
539         _irqL           oldirql;
540 #endif
541         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
542         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
543
544
545         if (poid_par_priv->type_of_oid != SET_OID) {
546                 status = NDIS_STATUS_NOT_ACCEPTED;
547                 return status;
548         }
549
550         _irqlevel_changed_(&oldirql, LOWER);
551         ResetPhyRxPktCount(Adapter);
552         _irqlevel_changed_(&oldirql, RAISE);
553
554
555         return status;
556 }
557 /* ------------------------------------------------------------------------------ */
558 NDIS_STATUS oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
559 {
560 #ifdef PLATFORM_OS_XP
561         _irqL           oldirql;
562 #endif
563         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
564         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
565
566
567
568         if (poid_par_priv->type_of_oid != QUERY_OID)
569                 return NDIS_STATUS_NOT_ACCEPTED;
570
571         if (poid_par_priv->information_buf_len != sizeof(ULONG))
572                 return NDIS_STATUS_INVALID_LENGTH;
573
574         _irqlevel_changed_(&oldirql, LOWER);
575         *(ULONG *)poid_par_priv->information_buf = GetPhyRxPktReceived(Adapter);
576         _irqlevel_changed_(&oldirql, RAISE);
577
578         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
579
580
581
582         return status;
583 }
584 /* ------------------------------------------------------------------------------ */
585 NDIS_STATUS oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
586 {
587 #ifdef PLATFORM_OS_XP
588         _irqL           oldirql;
589 #endif
590         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
591         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
592
593
594
595         if (poid_par_priv->type_of_oid != QUERY_OID)
596                 return NDIS_STATUS_NOT_ACCEPTED;
597
598
599         if (poid_par_priv->information_buf_len != sizeof(ULONG))
600                 return NDIS_STATUS_INVALID_LENGTH;
601
602         _irqlevel_changed_(&oldirql, LOWER);
603         *(ULONG *)poid_par_priv->information_buf = GetPhyRxPktCRC32Error(Adapter);
604         _irqlevel_changed_(&oldirql, RAISE);
605
606         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
607
608
609
610         return status;
611 }
612 /* ****************  oid_rtl_seg_81_80_20   section end **************** */
613 NDIS_STATUS oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv)
614 {
615 #ifdef PLATFORM_OS_XP
616         _irqL           oldirql;
617 #endif
618         u32             bStartTest;
619         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
620         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
621
622
623
624         if (poid_par_priv->type_of_oid != SET_OID)
625                 return NDIS_STATUS_NOT_ACCEPTED;
626
627         bStartTest = *((u32 *)poid_par_priv->information_buf);
628
629         _irqlevel_changed_(&oldirql, LOWER);
630         SetContinuousTx(Adapter, (u8)bStartTest);
631         if (bStartTest) {
632                 struct mp_priv *pmp_priv = &Adapter->mppriv;
633                 if (pmp_priv->tx.stop == 0) {
634                         pmp_priv->tx.stop = 1;
635                         RTW_INFO("%s: pkt tx is running...\n", __func__);
636                         rtw_msleep_os(5);
637                 }
638                 pmp_priv->tx.stop = 0;
639                 pmp_priv->tx.count = 1;
640                 SetPacketTx(Adapter);
641         }
642         _irqlevel_changed_(&oldirql, RAISE);
643
644
645         return status;
646 }
647
648 NDIS_STATUS oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv)
649 {
650 #ifdef PLATFORM_OS_XP
651         _irqL           oldirql;
652 #endif
653         u32             bStartTest;
654         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
655         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
656
657
658
659         if (poid_par_priv->type_of_oid != SET_OID)
660                 return NDIS_STATUS_NOT_ACCEPTED;
661
662         bStartTest = *((u32 *)poid_par_priv->information_buf);
663
664         _irqlevel_changed_(&oldirql, LOWER);
665         SetSingleCarrierTx(Adapter, (u8)bStartTest);
666         if (bStartTest) {
667                 struct mp_priv *pmp_priv = &Adapter->mppriv;
668                 if (pmp_priv->tx.stop == 0) {
669                         pmp_priv->tx.stop = 1;
670                         RTW_INFO("%s: pkt tx is running...\n", __func__);
671                         rtw_msleep_os(5);
672                 }
673                 pmp_priv->tx.stop = 0;
674                 pmp_priv->tx.count = 1;
675                 SetPacketTx(Adapter);
676         }
677         _irqlevel_changed_(&oldirql, RAISE);
678
679
680         return status;
681 }
682
683 NDIS_STATUS oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv)
684 {
685 #ifdef PLATFORM_OS_XP
686         _irqL           oldirql;
687 #endif
688         u32             bStartTest;
689         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
690         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
691
692
693
694         if (poid_par_priv->type_of_oid != SET_OID)
695                 return NDIS_STATUS_NOT_ACCEPTED;
696
697         bStartTest = *((u32 *)poid_par_priv->information_buf);
698
699         _irqlevel_changed_(&oldirql, LOWER);
700         SetCarrierSuppressionTx(Adapter, (u8)bStartTest);
701         if (bStartTest) {
702                 struct mp_priv *pmp_priv = &Adapter->mppriv;
703                 if (pmp_priv->tx.stop == 0) {
704                         pmp_priv->tx.stop = 1;
705                         RTW_INFO("%s: pkt tx is running...\n", __func__);
706                         rtw_msleep_os(5);
707                 }
708                 pmp_priv->tx.stop = 0;
709                 pmp_priv->tx.count = 1;
710                 SetPacketTx(Adapter);
711         }
712         _irqlevel_changed_(&oldirql, RAISE);
713
714
715         return status;
716 }
717
718 NDIS_STATUS oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv)
719 {
720 #ifdef PLATFORM_OS_XP
721         _irqL           oldirql;
722 #endif
723         u32             bStartTest;
724         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
725         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
726
727
728
729         if (poid_par_priv->type_of_oid != SET_OID)
730                 return NDIS_STATUS_NOT_ACCEPTED;
731
732         bStartTest = *((u32 *)poid_par_priv->information_buf);
733
734         _irqlevel_changed_(&oldirql, LOWER);
735         SetSingleToneTx(Adapter, (u8)bStartTest);
736         _irqlevel_changed_(&oldirql, RAISE);
737
738
739         return status;
740 }
741
742 NDIS_STATUS oid_rt_pro_set_modulation_hdl(struct oid_par_priv *poid_par_priv)
743 {
744         return 0;
745 }
746
747 NDIS_STATUS oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv)
748 {
749         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
750
751 #ifdef PLATFORM_OS_XP
752         _irqL           oldirql;
753 #endif
754         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
755
756         if (poid_par_priv->type_of_oid != SET_OID)
757                 return NDIS_STATUS_NOT_ACCEPTED;
758
759         _irqlevel_changed_(&oldirql, LOWER);
760         rtw_hal_set_hwreg(Adapter, HW_VAR_TRIGGER_GPIO_0, 0);
761         _irqlevel_changed_(&oldirql, RAISE);
762
763
764         return status;
765 }
766 /* ****************  oid_rtl_seg_81_80_00   section end ****************
767  * ------------------------------------------------------------------------------ */
768 NDIS_STATUS oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv)
769 {
770         return 0;
771 }
772 /* ------------------------------------------------------------------------------ */
773 NDIS_STATUS oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv)
774 {
775 #ifdef PLATFORM_OS_XP
776         _irqL           oldirql;
777 #endif
778         pRW_Reg RegRWStruct;
779         u32             offset, width;
780         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
781         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
782
783
784
785         if (poid_par_priv->type_of_oid != QUERY_OID)
786                 return NDIS_STATUS_NOT_ACCEPTED;
787
788         RegRWStruct = (pRW_Reg)poid_par_priv->information_buf;
789         offset = RegRWStruct->offset;
790         width = RegRWStruct->width;
791
792         if (offset > 0xFFF)
793                 return NDIS_STATUS_NOT_ACCEPTED;
794
795         _irqlevel_changed_(&oldirql, LOWER);
796
797         switch (width) {
798         case 1:
799                 RegRWStruct->value = rtw_read8(Adapter, offset);
800                 break;
801         case 2:
802                 RegRWStruct->value = rtw_read16(Adapter, offset);
803                 break;
804         default:
805                 width = 4;
806                 RegRWStruct->value = rtw_read32(Adapter, offset);
807                 break;
808         }
809
810         _irqlevel_changed_(&oldirql, RAISE);
811
812         *poid_par_priv->bytes_rw = width;
813
814
815         return status;
816 }
817 /* ------------------------------------------------------------------------------ */
818 NDIS_STATUS oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv)
819 {
820 #ifdef PLATFORM_OS_XP
821         _irqL           oldirql;
822 #endif
823         pRW_Reg RegRWStruct;
824         u32             offset, width, value;
825         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
826         PADAPTER        padapter = (PADAPTER)(poid_par_priv->adapter_context);
827
828
829
830         if (poid_par_priv->type_of_oid != SET_OID)
831                 return NDIS_STATUS_NOT_ACCEPTED;
832
833         RegRWStruct = (pRW_Reg)poid_par_priv->information_buf;
834         offset = RegRWStruct->offset;
835         width = RegRWStruct->width;
836         value = RegRWStruct->value;
837
838         if (offset > 0xFFF)
839                 return NDIS_STATUS_NOT_ACCEPTED;
840
841         _irqlevel_changed_(&oldirql, LOWER);
842
843         switch (RegRWStruct->width) {
844         case 1:
845                 if (value > 0xFF) {
846                         status = NDIS_STATUS_NOT_ACCEPTED;
847                         break;
848                 }
849                 rtw_write8(padapter, offset, (u8)value);
850                 break;
851         case 2:
852                 if (value > 0xFFFF) {
853                         status = NDIS_STATUS_NOT_ACCEPTED;
854                         break;
855                 }
856                 rtw_write16(padapter, offset, (u16)value);
857                 break;
858         case 4:
859                 rtw_write32(padapter, offset, value);
860                 break;
861         default:
862                 status = NDIS_STATUS_NOT_ACCEPTED;
863                 break;
864         }
865
866         _irqlevel_changed_(&oldirql, RAISE);
867
868
869
870         return status;
871 }
872 /* ------------------------------------------------------------------------------ */
873 NDIS_STATUS oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv)
874 {
875         return 0;
876 }
877 /* ------------------------------------------------------------------------------ */
878 NDIS_STATUS oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv)
879 {
880         return 0;
881 }
882 /* ------------------------------------------------------------------------------ */
883 NDIS_STATUS oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv)
884 {
885         return 0;
886 }
887
888 /* ------------------------------------------------------------------------------ */
889 NDIS_STATUS oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
890 {
891         return 0;
892 }
893
894 /* ------------------------------------------------------------------------------ */
895 NDIS_STATUS oid_rt_pro_write16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
896 {
897         return 0;
898 }
899 /* ------------------------------------------------------------------------------ */
900 NDIS_STATUS oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv)
901 {
902         return 0;
903 }
904 /* ------------------------------------------------------------------------------ */
905 NDIS_STATUS oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv *poid_par_priv)
906 {
907         return 0;
908 }
909 /* ------------------------------------------------------------------------------ */
910 NDIS_STATUS oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
911 {
912         return 0;
913 }
914 /* ------------------------------------------------------------------------------ */
915 NDIS_STATUS oid_rt_wr_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
916 {
917         return 0;
918 }
919 /* ------------------------------------------------------------------------------ */
920 NDIS_STATUS  oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv)
921 {
922         return 0;
923 }
924 /* ------------------------------------------------------------------------------ */
925 NDIS_STATUS oid_rt_poll_rx_status_hdl(struct oid_par_priv *poid_par_priv)
926 {
927         return 0;
928 }
929 /* ------------------------------------------------------------------------------ */
930 NDIS_STATUS oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv *poid_par_priv)
931 {
932         return 0;
933 }
934 /* ------------------------------------------------------------------------------ */
935 NDIS_STATUS oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv)
936 {
937         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
938
939 #ifdef PLATFORM_OS_XP
940         _irqL           oldirql;
941 #endif
942         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
943
944
945
946         if (poid_par_priv->type_of_oid != SET_OID)
947                 return NDIS_STATUS_NOT_ACCEPTED;
948
949         _irqlevel_changed_(&oldirql, LOWER);
950
951         if (rtw_setdatarate_cmd(Adapter, poid_par_priv->information_buf) != _SUCCESS)
952                 status = NDIS_STATUS_NOT_ACCEPTED;
953
954         _irqlevel_changed_(&oldirql, RAISE);
955
956
957         return status;
958 }
959 /* ----------------------------------------------------------------------------- */
960 NDIS_STATUS oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv)
961 {
962 #ifdef PLATFORM_OS_XP
963         _irqL           oldirql;
964 #endif
965         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
966         u8 thermal = 0;
967         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
968
969
970
971         if (poid_par_priv->type_of_oid != QUERY_OID)
972                 return NDIS_STATUS_NOT_ACCEPTED;
973
974         if (poid_par_priv->information_buf_len < sizeof(u32))
975                 return NDIS_STATUS_INVALID_LENGTH;
976
977         _irqlevel_changed_(&oldirql, LOWER);
978         GetThermalMeter(Adapter, &thermal);
979         _irqlevel_changed_(&oldirql, RAISE);
980
981         *(u32 *)poid_par_priv->information_buf = (u32)thermal;
982         *poid_par_priv->bytes_rw = sizeof(u32);
983
984
985         return status;
986 }
987 /* ----------------------------------------------------------------------------- */
988 NDIS_STATUS oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv)
989 {
990         return 0;
991 }
992 /* ------------------------------------------------------------------------------ */
993 NDIS_STATUS oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv)
994 {
995 #ifdef PLATFORM_OS_XP
996         _irqL           oldirql;
997 #endif
998         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
999         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1000
1001         if (poid_par_priv->information_buf_len < sizeof(u8))
1002                 return NDIS_STATUS_INVALID_LENGTH;
1003
1004         _irqlevel_changed_(&oldirql, LOWER);
1005         if (poid_par_priv->type_of_oid == SET_OID) {
1006                 u8 enable;
1007
1008                 enable = *(u8 *)poid_par_priv->information_buf;
1009
1010                 SetPowerTracking(Adapter, enable);
1011         } else
1012                 GetPowerTracking(Adapter, (u8 *)poid_par_priv->information_buf);
1013         _irqlevel_changed_(&oldirql, RAISE);
1014
1015
1016         return status;
1017 }
1018 /* ----------------------------------------------------------------------------- */
1019 NDIS_STATUS oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv)
1020 {
1021         return 0;
1022 }
1023 /* ------------------------------------------------------------------------------ */
1024 NDIS_STATUS oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
1025 {
1026         return 0;
1027 }
1028 /* ------------------------------------------------------------------------------ */
1029 NDIS_STATUS oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
1030 {
1031         return 0;
1032 }
1033 /* ------------------------------------------------------------------------------ */
1034 NDIS_STATUS oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv *poid_par_priv)
1035 {
1036         return 0;
1037 }
1038
1039 /* ****************  oid_rtl_seg_87_12_00   section start **************** */
1040 NDIS_STATUS oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv)
1041 {
1042         return 0;
1043 }
1044 /* ------------------------------------------------------------------------------ */
1045 NDIS_STATUS oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv)
1046 {
1047         return 0;
1048 }
1049 /* ------------------------------------------------------------------------------ */
1050 NDIS_STATUS oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv)
1051 {
1052         return 0;
1053 }
1054
1055 NDIS_STATUS oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv)
1056 {
1057         return 0;
1058 }
1059 /* ------------------------------------------------------------------------------ */
1060 NDIS_STATUS oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
1061 {
1062         return NDIS_STATUS_SUCCESS;
1063 }
1064 /* ------------------------------------------------------------------------------ */
1065 NDIS_STATUS oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv)
1066 {
1067         PEFUSE_ACCESS_STRUCT pefuse;
1068         u8 *data;
1069         u16 addr = 0, cnts = 0, max_available_size = 0;
1070         NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1071         PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1072
1073
1074         if (poid_par_priv->type_of_oid != QUERY_OID)
1075                 return NDIS_STATUS_NOT_ACCEPTED;
1076
1077         if (poid_par_priv->information_buf_len < sizeof(EFUSE_ACCESS_STRUCT))
1078                 return NDIS_STATUS_INVALID_LENGTH;
1079
1080         pefuse = (PEFUSE_ACCESS_STRUCT)poid_par_priv->information_buf;
1081         addr = pefuse->start_addr;
1082         cnts = pefuse->cnts;
1083         data = pefuse->data;
1084
1085
1086         EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, _FALSE);
1087
1088         if ((addr + cnts) > max_available_size) {
1089                 return NDIS_STATUS_NOT_ACCEPTED;
1090         }
1091
1092         _irqlevel_changed_(&oldirql, LOWER);
1093         if (rtw_efuse_access(Adapter, _FALSE, addr, cnts, data) == _FAIL) {
1094                 status = NDIS_STATUS_FAILURE;
1095         } else
1096                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1097         _irqlevel_changed_(&oldirql, RAISE);
1098
1099
1100         return status;
1101 }
1102 /* ------------------------------------------------------------------------------ */
1103 NDIS_STATUS oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv)
1104 {
1105 #ifdef PLATFORM_OS_XP
1106         _irqL oldirql;
1107 #endif
1108         PEFUSE_ACCESS_STRUCT pefuse;
1109         u8 *data;
1110         u16 addr = 0, cnts = 0, max_available_size = 0;
1111         NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1112         PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1113
1114
1115
1116         if (poid_par_priv->type_of_oid != SET_OID)
1117                 return NDIS_STATUS_NOT_ACCEPTED;
1118
1119         pefuse = (PEFUSE_ACCESS_STRUCT)poid_par_priv->information_buf;
1120         addr = pefuse->start_addr;
1121         cnts = pefuse->cnts;
1122         data = pefuse->data;
1123
1124
1125         EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, _FALSE);
1126
1127         if ((addr + cnts) > max_available_size) {
1128                 return NDIS_STATUS_NOT_ACCEPTED;
1129         }
1130
1131         _irqlevel_changed_(&oldirql, LOWER);
1132         if (rtw_efuse_access(Adapter, _TRUE, addr, cnts, data) == _FAIL)
1133                 status = NDIS_STATUS_FAILURE;
1134         _irqlevel_changed_(&oldirql, RAISE);
1135
1136
1137         return status;
1138 }
1139 /* ------------------------------------------------------------------------------ */
1140 NDIS_STATUS oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv)
1141 {
1142 #ifdef PLATFORM_OS_XP
1143         _irqL           oldirql;
1144 #endif
1145         PPGPKT_STRUCT   ppgpkt;
1146         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
1147         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1148
1149
1150
1151         *poid_par_priv->bytes_rw = 0;
1152
1153         if (poid_par_priv->information_buf_len < sizeof(PGPKT_STRUCT))
1154                 return NDIS_STATUS_INVALID_LENGTH;
1155
1156         ppgpkt = (PPGPKT_STRUCT)poid_par_priv->information_buf;
1157
1158         _irqlevel_changed_(&oldirql, LOWER);
1159
1160         if (poid_par_priv->type_of_oid == QUERY_OID) {
1161
1162                 Efuse_PowerSwitch(Adapter, _FALSE, _TRUE);
1163                 if (Efuse_PgPacketRead(Adapter, ppgpkt->offset, ppgpkt->data, _FALSE) == _TRUE)
1164                         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1165                 else
1166                         status = NDIS_STATUS_FAILURE;
1167                 Efuse_PowerSwitch(Adapter, _FALSE, _FALSE);
1168         } else {
1169
1170                 Efuse_PowerSwitch(Adapter, _TRUE, _TRUE);
1171                 if (Efuse_PgPacketWrite(Adapter, ppgpkt->offset, ppgpkt->word_en, ppgpkt->data, _FALSE) == _TRUE)
1172                         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1173                 else
1174                         status = NDIS_STATUS_FAILURE;
1175                 Efuse_PowerSwitch(Adapter, _TRUE, _FALSE);
1176         }
1177
1178         _irqlevel_changed_(&oldirql, RAISE);
1179
1180
1181
1182         return status;
1183 }
1184 /* ------------------------------------------------------------------------------ */
1185 NDIS_STATUS oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv)
1186 {
1187 #ifdef PLATFORM_OS_XP
1188         _irqL           oldirql;
1189 #endif
1190         u16 size;
1191         u8 ret;
1192         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
1193         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1194
1195
1196         if (poid_par_priv->type_of_oid != QUERY_OID)
1197                 return NDIS_STATUS_NOT_ACCEPTED;
1198
1199         if (poid_par_priv->information_buf_len < sizeof(u32))
1200                 return NDIS_STATUS_INVALID_LENGTH;
1201
1202         _irqlevel_changed_(&oldirql, LOWER);
1203         ret = efuse_GetCurrentSize(Adapter, &size);
1204         _irqlevel_changed_(&oldirql, RAISE);
1205         if (ret == _SUCCESS) {
1206                 *(u32 *)poid_par_priv->information_buf = size;
1207                 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1208         } else
1209                 status = NDIS_STATUS_FAILURE;
1210
1211
1212         return status;
1213 }
1214 /* ------------------------------------------------------------------------------ */
1215 NDIS_STATUS oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv)
1216 {
1217         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
1218         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1219
1220
1221         if (poid_par_priv->type_of_oid != QUERY_OID)
1222                 return NDIS_STATUS_NOT_ACCEPTED;
1223
1224         if (poid_par_priv->information_buf_len < sizeof(u32))
1225                 return NDIS_STATUS_INVALID_LENGTH;
1226
1227         *(u32 *)poid_par_priv->information_buf = efuse_GetMaxSize(Adapter);
1228         *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1229
1230
1231
1232         return status;
1233 }
1234 /* ------------------------------------------------------------------------------ */
1235 NDIS_STATUS oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv)
1236 {
1237         NDIS_STATUS     status;
1238
1239
1240
1241         if (poid_par_priv->type_of_oid == QUERY_OID)
1242                 status = oid_rt_pro_read_efuse_hdl(poid_par_priv);
1243         else
1244                 status = oid_rt_pro_write_efuse_hdl(poid_par_priv);
1245
1246
1247
1248         return status;
1249 }
1250 /* ------------------------------------------------------------------------------ */
1251 NDIS_STATUS oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv)
1252 {
1253 #ifdef PLATFORM_OS_XP
1254         _irqL           oldirql;
1255 #endif
1256         u8              *data;
1257         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
1258         PADAPTER        Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1259         u16     mapLen = 0;
1260
1261
1262
1263         EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&mapLen, _FALSE);
1264
1265         *poid_par_priv->bytes_rw = 0;
1266
1267         if (poid_par_priv->information_buf_len < mapLen)
1268                 return NDIS_STATUS_INVALID_LENGTH;
1269
1270         data = (u8 *)poid_par_priv->information_buf;
1271
1272         _irqlevel_changed_(&oldirql, LOWER);
1273
1274         if (poid_par_priv->type_of_oid == QUERY_OID) {
1275
1276                 if (rtw_efuse_map_read(Adapter, 0, mapLen, data) == _SUCCESS)
1277                         *poid_par_priv->bytes_rw = mapLen;
1278                 else {
1279                         status = NDIS_STATUS_FAILURE;
1280                 }
1281         } else {
1282                 /* SET_OID */
1283
1284                 if (rtw_efuse_map_write(Adapter, 0, mapLen, data) == _SUCCESS)
1285                         *poid_par_priv->bytes_rw = mapLen;
1286                 else {
1287                         status = NDIS_STATUS_FAILURE;
1288                 }
1289         }
1290
1291         _irqlevel_changed_(&oldirql, RAISE);
1292
1293
1294
1295         return status;
1296 }
1297
1298 NDIS_STATUS oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv)
1299 {
1300         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
1301         return status;
1302 }
1303
1304 NDIS_STATUS oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
1305 {
1306         u8              rx_pkt_type;
1307         /*      u32             rcr_val32; */
1308         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
1309         /*      PADAPTER        padapter = (PADAPTER)(poid_par_priv->adapter_context); */
1310
1311
1312
1313         if (poid_par_priv->type_of_oid != SET_OID)
1314                 return NDIS_STATUS_NOT_ACCEPTED;
1315
1316         if (poid_par_priv->information_buf_len < sizeof(u8))
1317                 return NDIS_STATUS_INVALID_LENGTH;
1318
1319         rx_pkt_type = *((u8 *)poid_par_priv->information_buf); /* 4 */
1320
1321         return status;
1322 }
1323
1324 NDIS_STATUS oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv)
1325 {
1326         return 0;
1327 }
1328
1329 NDIS_STATUS oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv *poid_par_priv)
1330 {
1331         return 0;
1332 }
1333
1334 unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
1335 {
1336         PMP_XMIT_PARM pparm;
1337         PADAPTER padapter;
1338         struct mp_priv *pmp_priv;
1339         struct pkt_attrib *pattrib;
1340
1341
1342         pparm = (PMP_XMIT_PARM)poid_par_priv->information_buf;
1343         padapter = (PADAPTER)poid_par_priv->adapter_context;
1344         pmp_priv = &padapter->mppriv;
1345
1346         if (poid_par_priv->type_of_oid == QUERY_OID) {
1347                 pparm->enable = !pmp_priv->tx.stop;
1348                 pparm->count = pmp_priv->tx.sended;
1349         } else {
1350                 if (pparm->enable == 0)
1351                         pmp_priv->tx.stop = 1;
1352                 else if (pmp_priv->tx.stop == 1) {
1353                         pmp_priv->tx.stop = 0;
1354                         pmp_priv->tx.count = pparm->count;
1355                         pmp_priv->tx.payload = pparm->payload_type;
1356                         pattrib = &pmp_priv->tx.attrib;
1357                         pattrib->pktlen = pparm->length;
1358                         _rtw_memcpy(pattrib->dst, pparm->da, ETH_ALEN);
1359                         SetPacketTx(padapter);
1360                 } else
1361                         return NDIS_STATUS_FAILURE;
1362         }
1363
1364         return NDIS_STATUS_SUCCESS;
1365 }
1366
1367 /* ------------------------------------------------------------------------------ */
1368 NDIS_STATUS oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv)
1369 {
1370 #ifdef PLATFORM_OS_XP
1371         _irqL           oldirql;
1372 #endif
1373         u8              bpwrup;
1374         NDIS_STATUS     status = NDIS_STATUS_SUCCESS;
1375 #ifdef PLATFORM_LINUX
1376 #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
1377         PADAPTER        padapter = (PADAPTER)(poid_par_priv->adapter_context);
1378 #endif
1379 #endif
1380
1381
1382         if (poid_par_priv->type_of_oid != SET_OID) {
1383                 status = NDIS_STATUS_NOT_ACCEPTED;
1384                 return status;
1385         }
1386
1387
1388         _irqlevel_changed_(&oldirql, LOWER);
1389
1390         bpwrup = *(u8 *)poid_par_priv->information_buf;
1391         /* CALL  the power_down function */
1392 #ifdef PLATFORM_LINUX
1393 #if defined(CONFIG_RTL8712) /* Linux MP insmod unknown symbol */
1394         dev_power_down(padapter, bpwrup);
1395 #endif
1396 #endif
1397         _irqlevel_changed_(&oldirql, RAISE);
1398
1399         /* DEBUG_ERR(("\n <=== Query OID_RT_PRO_READ_REGISTER. */
1400         /*      Add:0x%08x Width:%d Value:0x%08x\n",RegRWStruct->offset,RegRWStruct->width,RegRWStruct->value)); */
1401
1402
1403         return status;
1404 }
1405 /* ------------------------------------------------------------------------------ */
1406 NDIS_STATUS oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv)
1407 {
1408         return 0;
1409 }