root/drivers/staging/rtl8188eu/hal/hal_com.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. dump_chip_info
  2. hal_com_get_channel_plan
  3. MRateToHwRate
  4. hal_set_brate_cfg
  5. one_out_pipe
  6. two_out_pipe
  7. three_out_pipe
  8. hal_mapping_out_pipe

   1 // SPDX-License-Identifier: GPL-2.0
   2 /******************************************************************************
   3  *
   4  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
   5  *
   6  ******************************************************************************/
   7 #include <osdep_service.h>
   8 #include <drv_types.h>
   9 
  10 #include <hal_intf.h>
  11 #include <hal_com.h>
  12 #include <rtl8188e_hal.h>
  13 
  14 #define _HAL_INIT_C_
  15 
  16 void dump_chip_info(struct HAL_VERSION  chip_vers)
  17 {
  18         uint cnt = 0;
  19         char buf[128];
  20 
  21         cnt += sprintf((buf+cnt), "Chip Version Info: CHIP_8188E_");
  22         cnt += sprintf((buf+cnt), "%s_", chip_vers.ChipType == NORMAL_CHIP ?
  23                        "Normal_Chip" : "Test_Chip");
  24         cnt += sprintf((buf+cnt), "%s_", chip_vers.VendorType == CHIP_VENDOR_TSMC ?
  25                        "TSMC" : "UMC");
  26         if (chip_vers.CUTVersion == A_CUT_VERSION)
  27                 cnt += sprintf((buf+cnt), "A_CUT_");
  28         else if (chip_vers.CUTVersion == B_CUT_VERSION)
  29                 cnt += sprintf((buf+cnt), "B_CUT_");
  30         else if (chip_vers.CUTVersion == C_CUT_VERSION)
  31                 cnt += sprintf((buf+cnt), "C_CUT_");
  32         else if (chip_vers.CUTVersion == D_CUT_VERSION)
  33                 cnt += sprintf((buf+cnt), "D_CUT_");
  34         else if (chip_vers.CUTVersion == E_CUT_VERSION)
  35                 cnt += sprintf((buf+cnt), "E_CUT_");
  36         else
  37                 cnt += sprintf((buf+cnt), "UNKNOWN_CUT(%d)_",
  38                                chip_vers.CUTVersion);
  39         cnt += sprintf((buf+cnt), "1T1R_");
  40         cnt += sprintf((buf+cnt), "RomVer(0)\n");
  41 
  42         pr_info("%s", buf);
  43 }
  44 
  45 #define CHAN_PLAN_HW    0x80
  46 
  47 /* return the final channel plan decision */
  48 u8 hal_com_get_channel_plan(u8 hw_channel_plan, u8 sw_channel_plan,
  49                             u8 def_channel_plan, bool load_fail)
  50 {
  51         u8 sw_cfg;
  52         u8 chnlplan;
  53 
  54         sw_cfg = true;
  55         if (!load_fail) {
  56                 if (!rtw_is_channel_plan_valid(sw_channel_plan))
  57                         sw_cfg = false;
  58                 if (hw_channel_plan & CHAN_PLAN_HW)
  59                         sw_cfg = false;
  60         }
  61 
  62         if (sw_cfg)
  63                 chnlplan = sw_channel_plan;
  64         else
  65                 chnlplan = hw_channel_plan & (~CHAN_PLAN_HW);
  66 
  67         if (!rtw_is_channel_plan_valid(chnlplan))
  68                 chnlplan = def_channel_plan;
  69 
  70         return chnlplan;
  71 }
  72 
  73 u8 MRateToHwRate(u8 rate)
  74 {
  75         u8 ret = DESC_RATE1M;
  76 
  77         switch (rate) {
  78                 /*  CCK and OFDM non-HT rates */
  79         case IEEE80211_CCK_RATE_1MB:
  80                 ret = DESC_RATE1M;
  81                 break;
  82         case IEEE80211_CCK_RATE_2MB:
  83                 ret = DESC_RATE2M;
  84                 break;
  85         case IEEE80211_CCK_RATE_5MB:
  86                 ret = DESC_RATE5_5M;
  87                 break;
  88         case IEEE80211_CCK_RATE_11MB:
  89                 ret = DESC_RATE11M;
  90                 break;
  91         case IEEE80211_OFDM_RATE_6MB:
  92                 ret = DESC_RATE6M;
  93                 break;
  94         case IEEE80211_OFDM_RATE_9MB:
  95                 ret = DESC_RATE9M;
  96                 break;
  97         case IEEE80211_OFDM_RATE_12MB:
  98                 ret = DESC_RATE12M;
  99                 break;
 100         case IEEE80211_OFDM_RATE_18MB:
 101                 ret = DESC_RATE18M;
 102                 break;
 103         case IEEE80211_OFDM_RATE_24MB:
 104                 ret = DESC_RATE24M;
 105                 break;
 106         case IEEE80211_OFDM_RATE_36MB:
 107                 ret = DESC_RATE36M;
 108                 break;
 109         case IEEE80211_OFDM_RATE_48MB:
 110                 ret = DESC_RATE48M;
 111                 break;
 112         case IEEE80211_OFDM_RATE_54MB:
 113                 ret = DESC_RATE54M;
 114                 break;
 115         default:
 116                 break;
 117         }
 118         return ret;
 119 }
 120 
 121 void hal_set_brate_cfg(u8 *brates, u16 *rate_cfg)
 122 {
 123         u8 i, is_brate, brate;
 124 
 125         for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
 126                 is_brate = brates[i] & IEEE80211_BASIC_RATE_MASK;
 127                 brate = brates[i] & 0x7f;
 128 
 129                 if (is_brate) {
 130                         switch (brate) {
 131                         case IEEE80211_CCK_RATE_1MB:
 132                                 *rate_cfg |= RATE_1M;
 133                                 break;
 134                         case IEEE80211_CCK_RATE_2MB:
 135                                 *rate_cfg |= RATE_2M;
 136                                 break;
 137                         case IEEE80211_CCK_RATE_5MB:
 138                                 *rate_cfg |= RATE_5_5M;
 139                                 break;
 140                         case IEEE80211_CCK_RATE_11MB:
 141                                 *rate_cfg |= RATE_11M;
 142                                 break;
 143                         case IEEE80211_OFDM_RATE_6MB:
 144                                 *rate_cfg |= RATE_6M;
 145                                 break;
 146                         case IEEE80211_OFDM_RATE_9MB:
 147                                 *rate_cfg |= RATE_9M;
 148                                 break;
 149                         case IEEE80211_OFDM_RATE_12MB:
 150                                 *rate_cfg |= RATE_12M;
 151                                 break;
 152                         case IEEE80211_OFDM_RATE_18MB:
 153                                 *rate_cfg |= RATE_18M;
 154                                 break;
 155                         case IEEE80211_OFDM_RATE_24MB:
 156                                 *rate_cfg |= RATE_24M;
 157                                 break;
 158                         case IEEE80211_OFDM_RATE_36MB:
 159                                 *rate_cfg |= RATE_36M;
 160                                 break;
 161                         case IEEE80211_OFDM_RATE_48MB:
 162                                 *rate_cfg |= RATE_48M;
 163                                 break;
 164                         case IEEE80211_OFDM_RATE_54MB:
 165                                 *rate_cfg |= RATE_54M;
 166                                 break;
 167                         }
 168                 }
 169         }
 170 }
 171 
 172 static void one_out_pipe(struct adapter *adapter)
 173 {
 174         struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapter);
 175 
 176         pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
 177         pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];/* VI */
 178         pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[0];/* BE */
 179         pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[0];/* BK */
 180 
 181         pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
 182         pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
 183         pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
 184         pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
 185 }
 186 
 187 static void two_out_pipe(struct adapter *adapter, bool wifi_cfg)
 188 {
 189         struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapter);
 190 
 191         if (wifi_cfg) {
 192                 /*
 193                  * WMM
 194                  * BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA
 195                  *  0,  1,  0,  1,   0,   0,   0,    0,    0
 196                  * 0:H, 1:L
 197                  */
 198                 pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[1];/* VO */
 199                 pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];/* VI */
 200                 pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[1];/* BE */
 201                 pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[0];/* BK */
 202 
 203                 pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
 204                 pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
 205                 pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
 206                 pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
 207         } else {
 208                 /*
 209                  * typical setting
 210                  * BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA
 211                  *  1,  1,  0,  0,   0,   0,   0,    0,    0
 212                  * 0:H, 1:L
 213                  */
 214                 pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
 215                 pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];/* VI */
 216                 pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[1];/* BE */
 217                 pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[1];/* BK */
 218 
 219                 pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
 220                 pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
 221                 pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
 222                 pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
 223         }
 224 }
 225 
 226 static void three_out_pipe(struct adapter *adapter, bool wifi_cfg)
 227 {
 228         struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapter);
 229 
 230         if (wifi_cfg) {
 231                 /*
 232                  * for WMM
 233                  * BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA
 234                  *  1,  2,  1,  0,   0,   0,   0,    0,    0
 235                  * 0:H, 1:N, 2:L
 236                  */
 237                 pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
 238                 pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[1];/* VI */
 239                 pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[2];/* BE */
 240                 pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[1];/* BK */
 241 
 242                 pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
 243                 pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
 244                 pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
 245                 pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
 246         } else {
 247                 /*
 248                  * typical setting
 249                  * BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA
 250                  *  2,  2,  1,  0,   0,   0,   0,    0,    0
 251                  * 0:H, 1:N, 2:L
 252                  */
 253                 pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
 254                 pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[1];/* VI */
 255                 pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[2];/* BE */
 256                 pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[2];/* BK */
 257 
 258                 pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
 259                 pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
 260                 pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
 261                 pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
 262         }
 263 }
 264 
 265 bool hal_mapping_out_pipe(struct adapter *adapter, u8 numoutpipe)
 266 {
 267         struct registry_priv *pregistrypriv = &adapter->registrypriv;
 268         bool wifi_cfg = (pregistrypriv->wifi_spec) ? true : false;
 269         bool result = true;
 270 
 271         switch (numoutpipe) {
 272         case 1:
 273                 one_out_pipe(adapter);
 274                 break;
 275         case 2:
 276                 two_out_pipe(adapter, wifi_cfg);
 277                 break;
 278         case 3:
 279                 three_out_pipe(adapter, wifi_cfg);
 280                 break;
 281         default:
 282                 result = false;
 283         }
 284         return result;
 285 }

/* [<][>][^][v][top][bottom][index][help] */