hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
/******************************************************************************
 *
 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 *
 *
 ******************************************************************************/
 
#ifndef    __PHYDMRAINFO_H__
#define    __PHYDMRAINFO_H__
 
/*#define RAINFO_VERSION    "2.0"  //2014.11.04*/
/*#define RAINFO_VERSION    "3.0"  //2015.01.13 Dino*/
/*#define RAINFO_VERSION    "3.1"  //2015.01.14 Dino*/
/*#define RAINFO_VERSION    "3.3"  2015.07.29 YuChen*/
/*#define RAINFO_VERSION    "3.4"*/  /*2015.12.15 Stanley*/
/*#define RAINFO_VERSION    "4.0"*/  /*2016.03.24 Dino, Add more RA mask state and Phydm-lize partial ra mask function  */
#define RAINFO_VERSION    "4.1"  /*2016.04.20 Dino, Add new function to adjust PCR RA threshold  */
 
#define    H2C_0X42_LENGTH    5
 
#define    RA_FLOOR_UP_GAP                3
#define    RA_FLOOR_TABLE_SIZE    7
 
#define    ACTIVE_TP_THRESHOLD    150
#define    RA_RETRY_DESCEND_NUM    2
#define    RA_RETRY_LIMIT_LOW    4
#define    RA_RETRY_LIMIT_HIGH    32
 
#define RAINFO_BE_RX_STATE            BIT0  // 1:RX    //ULDL
#define RAINFO_STBC_STATE            BIT1
//#define RAINFO_LDPC_STATE             BIT2
#define RAINFO_NOISY_STATE             BIT2    // set by Noisy_Detection
#define RAINFO_SHURTCUT_STATE         BIT3
#define RAINFO_SHURTCUT_FLAG         BIT4
#define RAINFO_INIT_RSSI_RATE_STATE  BIT5
#define RAINFO_BF_STATE                 BIT6
#define RAINFO_BE_TX_STATE             BIT7 // 1:TX
 
#define    RA_MASK_CCK        0xf
#define    RA_MASK_OFDM        0xff0
#define    RA_MASK_HT1SS        0xff000
#define    RA_MASK_HT2SS        0xff00000
/*#define    RA_MASK_MCS3SS    */
#define    RA_MASK_HT4SS        0xff0
#define    RA_MASK_VHT1SS    0x3ff000
#define    RA_MASK_VHT2SS    0xffc00000
 
#if(DM_ODM_SUPPORT_TYPE == ODM_AP)
#define        RA_FIRST_MACID     1
#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN)
#define    RA_FIRST_MACID    0
#define    WIN_DEFAULT_PORT_MACID    0
#define    WIN_BT_PORT_MACID    2
#else /*if (DM_ODM_SUPPORT_TYPE == ODM_CE)*/
#define        RA_FIRST_MACID     0
#endif
 
#define AP_InitRateAdaptiveState    ODM_RateAdaptiveStateApInit
 
#if (RA_MASK_PHYDMLIZE_CE || RA_MASK_PHYDMLIZE_AP || RA_MASK_PHYDMLIZE_WIN)
#define        DM_RATR_STA_INIT            0
#define        DM_RATR_STA_HIGH            1
#define         DM_RATR_STA_MIDDLE        2
#define         DM_RATR_STA_LOW            3
#define        DM_RATR_STA_ULTRA_LOW    4
#endif
 
typedef enum _phydm_arfr_num {
   ARFR_0_RATE_ID    =    0x9,
   ARFR_1_RATE_ID    =    0xa,
   ARFR_2_RATE_ID    =    0xb,
   ARFR_3_RATE_ID    =    0xc,
   ARFR_4_RATE_ID    =    0xd,
   ARFR_5_RATE_ID    =    0xe
} PHYDM_RA_ARFR_NUM_E;
 
typedef enum _Phydm_ra_dbg_para {
   RADBG_PCR_TH_OFFSET        =    0,
   RADBG_RTY_PENALTY        =    1,
   RADBG_N_HIGH                 =    2,
   RADBG_N_LOW                =    3,
   RADBG_TRATE_UP_TABLE        =    4,
   RADBG_TRATE_DOWN_TABLE    =    5,
   RADBG_TRYING_NECESSARY    =    6,
   RADBG_TDROPING_NECESSARY =    7,
   RADBG_RATE_UP_RTY_RATIO    =    8,
   RADBG_RATE_DOWN_RTY_RATIO =    9, //u8
 
   RADBG_DEBUG_MONITOR1 = 0xc,
   RADBG_DEBUG_MONITOR2 = 0xd,
   RADBG_DEBUG_MONITOR3 = 0xe,
   RADBG_DEBUG_MONITOR4 = 0xf,
   RADBG_DEBUG_MONITOR5 = 0x10,
   NUM_RA_PARA
} PHYDM_RA_DBG_PARA_E;
 
typedef enum PHYDM_WIRELESS_MODE {
   
   PHYDM_WIRELESS_MODE_UNKNOWN = 0x00,
   PHYDM_WIRELESS_MODE_A        = 0x01,
   PHYDM_WIRELESS_MODE_B        = 0x02,
   PHYDM_WIRELESS_MODE_G        = 0x04,
   PHYDM_WIRELESS_MODE_AUTO    = 0x08,
   PHYDM_WIRELESS_MODE_N_24G    = 0x10,
   PHYDM_WIRELESS_MODE_N_5G    = 0x20,
   PHYDM_WIRELESS_MODE_AC_5G    = 0x40,
   PHYDM_WIRELESS_MODE_AC_24G    = 0x80,
   PHYDM_WIRELESS_MODE_AC_ONLY    = 0x100,
   PHYDM_WIRELESS_MODE_MAX        = 0x800,
   PHYDM_WIRELESS_MODE_ALL        = 0xFFFF
} PHYDM_WIRELESS_MODE_E;
 
typedef enum PHYDM_RATEID_IDX_ {
   
   PHYDM_BGN_40M_2SS    = 0,
   PHYDM_BGN_40M_1SS    = 1,
   PHYDM_BGN_20M_2SS    = 2,
   PHYDM_BGN_20M_1SS    = 3,
   PHYDM_GN_N2SS            = 4,
   PHYDM_GN_N1SS            = 5,
   PHYDM_BG                = 6,
   PHYDM_G                = 7,
   PHYDM_B_20M            = 8,
   PHYDM_ARFR0_AC_2SS    = 9,
   PHYDM_ARFR1_AC_1SS    = 10,
   PHYDM_ARFR2_AC_2G_1SS    = 11,
   PHYDM_ARFR3_AC_2G_2SS    = 12,
   PHYDM_ARFR4_AC_3SS    = 13,
   PHYDM_ARFR5_N_3SS        = 14
} PHYDM_RATEID_IDX_E;
 
typedef    enum _PHYDM_RF_TYPE_DEFINITION {
   PHYDM_RF_1T1R = 0,
   PHYDM_RF_1T2R,            
   PHYDM_RF_2T2R,
   PHYDM_RF_2T2R_GREEN,
   PHYDM_RF_2T3R,
   PHYDM_RF_2T4R,
   PHYDM_RF_3T3R,
   PHYDM_RF_3T4R,
   PHYDM_RF_4T4R,
   PHYDM_RF_MAX_TYPE
} PHYDM_RF_TYPE_DEF_E;
 
typedef    enum _PHYDM_BW {
   PHYDM_BW_20    = 0,
   PHYDM_BW_40,
   PHYDM_BW_80,
   PHYDM_BW_80_80,    
   PHYDM_BW_160,
   PHYDM_BW_10,
   PHYDM_BW_5
} PHYDM_BW_E;
 
 
#if (RATE_ADAPTIVE_SUPPORT == 1)//88E RA
typedef struct _ODM_RA_Info_ {
   u1Byte RateID;
   u4Byte RateMask;
   u4Byte RAUseRate;
   u1Byte RateSGI;
   u1Byte RssiStaRA;
   u1Byte PreRssiStaRA;
   u1Byte SGIEnable;
   u1Byte DecisionRate;
   u1Byte PreRate;
   u1Byte HighestRate;
   u1Byte LowestRate;
   u4Byte NscUp;
   u4Byte NscDown;
   u2Byte RTY[5];
   u4Byte TOTAL;
   u2Byte DROP;
   u1Byte Active;
   u2Byte RptTime;
   u1Byte RAWaitingCounter;
   u1Byte RAPendingCounter;
   u1Byte RADropAfterDown;
#if 1 //POWER_TRAINING_ACTIVE == 1 // For compile  pass only~!
   u1Byte PTActive;  // on or off
   u1Byte PTTryState;  // 0 trying state, 1 for decision state
   u1Byte PTStage;  // 0~6
   u1Byte PTStopCount; //Stop PT counter
   u1Byte PTPreRate;  // if rate change do PT
   u1Byte PTPreRssi; // if RSSI change 5% do PT
   u1Byte PTModeSS;  // decide whitch rate should do PT
   u1Byte RAstage;  // StageRA, decide how many times RA will be done between PT
   u1Byte PTSmoothFactor;
#endif
#if (DM_ODM_SUPPORT_TYPE == ODM_AP) &&     ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))
   u1Byte RateDownCounter;
   u1Byte RateUpCounter;
   u1Byte RateDirection;
   u1Byte BoundingType;
   u1Byte BoundingCounter;
   u1Byte BoundingLearningTime;
   u1Byte RateDownStartTime;
#endif
} ODM_RA_INFO_T, *PODM_RA_INFO_T;
#endif
 
 
typedef struct _Rate_Adaptive_Table_ {
   u1Byte        firstconnect;
#if(DM_ODM_SUPPORT_TYPE==ODM_WIN)
   BOOLEAN        PT_collision_pre;
#endif
 
#if (defined(CONFIG_RA_DBG_CMD))
   BOOLEAN        is_ra_dbg_init;
 
   u1Byte    RTY_P[ODM_NUM_RATE_IDX];
   u1Byte    RTY_P_default[ODM_NUM_RATE_IDX];
   BOOLEAN    RTY_P_modify_note[ODM_NUM_RATE_IDX];
 
   u1Byte    RATE_UP_RTY_RATIO[ODM_NUM_RATE_IDX];
   u1Byte    RATE_UP_RTY_RATIO_default[ODM_NUM_RATE_IDX];
   BOOLEAN    RATE_UP_RTY_RATIO_modify_note[ODM_NUM_RATE_IDX];
 
   u1Byte    RATE_DOWN_RTY_RATIO[ODM_NUM_RATE_IDX];
   u1Byte    RATE_DOWN_RTY_RATIO_default[ODM_NUM_RATE_IDX];
   BOOLEAN    RATE_DOWN_RTY_RATIO_modify_note[ODM_NUM_RATE_IDX];
 
   BOOLEAN RA_Para_feedback_req;
 
   u1Byte   para_idx;
   u1Byte    rate_idx;
   u1Byte    value;
   u2Byte    value_16;
   u1Byte    rate_length;
#endif
   u1Byte    link_tx_rate[ODM_ASSOCIATE_ENTRY_NUM];
   u1Byte    highest_client_tx_order;
   u2Byte    highest_client_tx_rate_order;
   u1Byte    power_tracking_flag;
   u1Byte    RA_threshold_offset;
   u1Byte    RA_offset_direction;
 
   #if (defined(CONFIG_RA_DYNAMIC_RTY_LIMIT))
   u1Byte per_rate_retrylimit_20M[ODM_NUM_RATE_IDX];
   u1Byte per_rate_retrylimit_40M[ODM_NUM_RATE_IDX];    
   u1Byte            retry_descend_num;
   u1Byte            retrylimit_low;
   u1Byte            retrylimit_high;
   #endif
 
 
} RA_T, *pRA_T;
 
typedef struct _ODM_RATE_ADAPTIVE {
   u1Byte                Type;                // DM_Type_ByFW/DM_Type_ByDriver
   u1Byte                HighRSSIThresh;        // if RSSI > HighRSSIThresh    => RATRState is DM_RATR_STA_HIGH
   u1Byte                LowRSSIThresh;        // if RSSI <= LowRSSIThresh    => RATRState is DM_RATR_STA_LOW
   u1Byte                RATRState;            // Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW
 
#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE))
   u1Byte                LdpcThres;            // if RSSI > LdpcThres => switch from LPDC to BCC
   BOOLEAN                bLowerRtsRate;
#endif
 
#if(DM_ODM_SUPPORT_TYPE & ODM_WIN)
   u1Byte                RtsThres;
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
   BOOLEAN                bUseLdpc;
#else
   u1Byte                UltraLowRSSIThresh;
   u4Byte                LastRATR;            // RATR Register Content
#endif
 
} ODM_RATE_ADAPTIVE, *PODM_RATE_ADAPTIVE;
 
#if (defined(CONFIG_RA_DBG_CMD))
 
VOID
odm_RA_debug(
   IN        PVOID        pDM_VOID,
   IN        u4Byte        *const dm_value
);
 
VOID
odm_RA_ParaAdjust_init(
   IN        PVOID        pDM_VOID
);
 
#else
 
VOID
phydm_RA_debug_PCR(
   IN        PVOID        pDM_VOID,
   IN        u4Byte        *const dm_value,
   IN        u4Byte        *_used,
   OUT        char            *output,
   IN        u4Byte        *_out_len
);
 
#endif
 
VOID
ODM_C2HRaParaReportHandler(
   IN    PVOID    pDM_VOID,
   IN    pu1Byte    CmdBuf,
   IN    u1Byte    CmdLen
);
 
VOID
odm_RA_ParaAdjust(
   IN        PVOID        pDM_VOID
);
 
VOID
phydm_ra_dynamic_retry_count(
   IN    PVOID    pDM_VOID
);
 
VOID
phydm_ra_dynamic_retry_limit(
   IN    PVOID    pDM_VOID
);
 
VOID
phydm_ra_dynamic_rate_id_on_assoc(
   IN    PVOID    pDM_VOID,
   IN    u1Byte    wireless_mode,
   IN    u1Byte    init_rate_id
);
 
VOID
phydm_print_rate(
   IN    PVOID    pDM_VOID,
   IN    u1Byte    rate,
   IN    u4Byte    dbg_component
);
 
VOID
phydm_c2h_ra_report_handler(
   IN PVOID    pDM_VOID,
   IN pu1Byte   CmdBuf,
   IN u1Byte   CmdLen
);
 
u1Byte
phydm_rate_order_compute(
   IN    PVOID    pDM_VOID,
   IN    u1Byte    rate_idx
   );
 
VOID
phydm_ra_info_watchdog(
   IN    PVOID    pDM_VOID
);
 
VOID
phydm_ra_info_init(
   IN    PVOID    pDM_VOID
);
 
VOID
odm_RSSIMonitorInit(
   IN    PVOID    pDM_VOID
);
 
VOID
odm_RSSIMonitorCheck(
   IN    PVOID    pDM_VOID
);
 
VOID
phydm_initRaInfo(
   IN        PVOID        pDM_VOID
);
 
u1Byte
phydm_vht_en_mapping(
   IN    PVOID            pDM_VOID,
   IN    u4Byte            WirelessMode
);
 
u1Byte
phydm_rate_id_mapping(
   IN    PVOID            pDM_VOID,
   IN    u4Byte            WirelessMode,
   IN    u1Byte            RfType,
   IN    u1Byte            bw
);
 
VOID
phydm_UpdateHalRAMask(
   IN    PVOID            pDM_VOID,
   IN    u4Byte            wirelessMode,
   IN    u1Byte            RfType,
   IN    u1Byte            BW,
   IN    u1Byte            MimoPs_enable,
   IN    u1Byte            disable_cck_rate,
   IN    u4Byte            *ratr_bitmap_msb_in,
   IN    u4Byte            *ratr_bitmap_in,
   IN    u1Byte            tx_rate_level
);
 
VOID
odm_RateAdaptiveMaskInit(
   IN     PVOID    pDM_VOID
);
 
VOID
odm_RefreshRateAdaptiveMask(
   IN        PVOID        pDM_VOID
);
 
VOID
odm_RefreshRateAdaptiveMaskMP(
   IN        PVOID        pDM_VOID
);
 
VOID
odm_RefreshRateAdaptiveMaskCE(
   IN        PVOID        pDM_VOID
);
 
VOID
odm_RefreshRateAdaptiveMaskAPADSL(
   IN        PVOID        pDM_VOID
);
 
u1Byte 
phydm_RA_level_decision(
   IN        PVOID            pDM_VOID,
   IN        u4Byte            rssi,
   IN        u1Byte            Ratr_State
);
 
BOOLEAN
ODM_RAStateCheck(
   IN        PVOID            pDM_VOID,
   IN        s4Byte            RSSI,
   IN        BOOLEAN            bForceUpdate,
   OUT        pu1Byte            pRATRState
);
 
VOID
odm_RefreshBasicRateMask(
   IN        PVOID        pDM_VOID
);
VOID
ODM_RAPostActionOnAssoc(
   IN        PVOID    pDM_Odm
);
 
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
 
u1Byte
odm_Find_RTS_Rate(
   IN    PVOID        pDM_VOID,
   IN        u1Byte            Tx_Rate,
   IN        BOOLEAN            bErpProtect
);
 
VOID
ODM_UpdateNoisyState(
   IN    PVOID        pDM_VOID,
   IN    BOOLEAN        bNoisyStateFromC2H
);
 
VOID
phydm_update_pwr_track(
   IN    PVOID        pDM_VOID,
   IN    u1Byte        Rate
);
 
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
 
s4Byte
phydm_FindMinimumRSSI(
IN        PDM_ODM_T        pDM_Odm,
IN        PADAPTER        pAdapter,
IN OUT    BOOLEAN    *pbLink_temp
);
 
VOID
ODM_UpdateInitRateWorkItemCallback(
   IN    PVOID    pContext
);
 
VOID
odm_RSSIDumpToRegister(
   IN    PVOID    pDM_VOID
);
 
VOID
odm_RefreshLdpcRtsMP(
   IN    PADAPTER            pAdapter,
   IN    PDM_ODM_T            pDM_Odm,
   IN    u1Byte                mMacId,
   IN    u1Byte                IOTPeer,
   IN    s4Byte                UndecoratedSmoothedPWDB
);
 
#if 0
VOID
ODM_DynamicARFBSelect(
   IN        PVOID        pDM_VOID,
   IN         u1Byte        rate,
   IN      BOOLEAN        Collision_State
);
#endif
 
VOID
ODM_RateAdaptiveStateApInit(
   IN    PVOID            PADAPTER_VOID,
   IN    PRT_WLAN_STA      pEntry
);
#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
 
static void
FindMinimumRSSI(
   IN    PADAPTER    pAdapter
);
 
u8Byte
PhyDM_Get_Rate_Bitmap_Ex(
   IN    PVOID        pDM_VOID,
   IN    u4Byte        macid,
   IN    u8Byte        ra_mask,
   IN    u1Byte        rssi_level,
   OUT        u8Byte    *dm_RA_Mask,
   OUT        u1Byte    *dm_RteID
);
u4Byte
ODM_Get_Rate_Bitmap(
   IN    PVOID        pDM_VOID,
   IN    u4Byte        macid,
   IN    u4Byte         ra_mask,
   IN    u1Byte         rssi_level
);
 
void phydm_ra_rssi_rpt_wk(PVOID pContext);
#endif/*#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)*/
 
#elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))
 
VOID
phydm_gen_ramask_h2c_AP(
   IN        PVOID            pDM_VOID,
   IN        struct rtl8192cd_priv *priv,
   IN        PSTA_INFO_T        *pEntry,
   IN        u1Byte            rssi_level
);
 
#endif/*#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))*/
 
#endif /*#ifndef    __ODMRAINFO_H__*/