The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/rtwn/rtl8192e/r92e_rom.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2017 Kevin Lo <kevlo@FreeBSD.org>
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  *
   14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   24  * SUCH DAMAGE.
   25  */
   26 
   27 #include <sys/cdefs.h>
   28 __FBSDID("$FreeBSD$");
   29 
   30 #include "opt_wlan.h"
   31 
   32 #include <sys/param.h>
   33 #include <sys/lock.h>
   34 #include <sys/mutex.h>
   35 #include <sys/mbuf.h>
   36 #include <sys/kernel.h>
   37 #include <sys/socket.h>
   38 #include <sys/systm.h>
   39 #include <sys/malloc.h>
   40 #include <sys/queue.h>
   41 #include <sys/taskqueue.h>
   42 #include <sys/bus.h>
   43 #include <sys/endian.h>
   44 #include <sys/linker.h>
   45 
   46 #include <net/if.h>
   47 #include <net/ethernet.h>
   48 #include <net/if_media.h>
   49 
   50 #include <net80211/ieee80211_var.h>
   51 #include <net80211/ieee80211_radiotap.h>
   52 
   53 #include <dev/rtwn/if_rtwnreg.h>
   54 #include <dev/rtwn/if_rtwnvar.h>
   55 
   56 #include <dev/rtwn/if_rtwn_debug.h>
   57 
   58 #include <dev/rtwn/rtl8192e/r92e.h>
   59 #include <dev/rtwn/rtl8192e/r92e_var.h>
   60 #include <dev/rtwn/rtl8192e/r92e_rom_image.h>
   61 
   62 void
   63 r92e_parse_rom(struct rtwn_softc *sc, uint8_t *buf)
   64 {
   65         struct r92e_softc *rs = sc->sc_priv;
   66         struct r92e_rom *rom = (struct r92e_rom *)buf;
   67         uint8_t pwr_diff;
   68         int i, j, k;
   69 
   70         sc->thermal_meter = rom->thermal_meter;
   71         rs->crystalcap = RTWN_GET_ROM_VAR(rom->crystalcap,
   72             R92E_ROM_CRYSTALCAP_DEF);
   73 
   74         for (i = 0; i < sc->ntxchains; i++) {
   75                 struct r92e_tx_pwr_2g *pwr_2g = &rom->tx_pwr[i].pwr_2g;
   76                 struct r92e_tx_pwr_diff_2g *pwr_diff_2g =
   77                     &rom->tx_pwr[i].pwr_diff_2g;
   78 
   79                 for (j = 0; j < R92E_GROUP_2G - 1; j++) {
   80                         rs->cck_tx_pwr[i][j] =
   81                             RTWN_GET_ROM_VAR(pwr_2g->cck[j],
   82                                 R92E_DEF_TX_PWR_2G);
   83                         rs->ht40_tx_pwr_2g[i][j] =
   84                             RTWN_GET_ROM_VAR(pwr_2g->ht40[j],
   85                                 R92E_DEF_TX_PWR_2G);
   86                 }
   87                 rs->cck_tx_pwr[i][j] = RTWN_GET_ROM_VAR(pwr_2g->cck[j],
   88                     R92E_DEF_TX_PWR_2G);
   89 
   90                 rs->cck_tx_pwr_diff_2g[i][0] = 0;
   91                 rs->ofdm_tx_pwr_diff_2g[i][0] = RTWN_SIGN4TO8(
   92                     MS(pwr_diff_2g->ht20_ofdm, LOW_PART));
   93                 rs->bw20_tx_pwr_diff_2g[i][0] = RTWN_SIGN4TO8(
   94                     MS(pwr_diff_2g->ht20_ofdm, HIGH_PART));
   95                 rs->bw40_tx_pwr_diff_2g[i][0] = 0;
   96                 pwr_diff = RTWN_GET_ROM_VAR(pwr_diff_2g->ht20_ofdm,
   97                     R92E_DEF_TX_PWR_HT20_DIFF);
   98                 if (pwr_diff != R92E_DEF_TX_PWR_HT20_DIFF) {
   99                         rs->ofdm_tx_pwr_diff_2g[i][0] = RTWN_SIGN4TO8(
  100                             MS(pwr_diff_2g->ht20_ofdm, LOW_PART));
  101                         rs->bw20_tx_pwr_diff_2g[i][0] = RTWN_SIGN4TO8(
  102                             MS(pwr_diff_2g->ht20_ofdm, HIGH_PART));
  103                 } else {
  104                         rs->ofdm_tx_pwr_diff_2g[i][0] =
  105                         rs->bw20_tx_pwr_diff_2g[i][0] = pwr_diff;
  106                 }
  107 
  108                 for (j = 1, k = 0; k < nitems(pwr_diff_2g->diff123); j++, k++) {
  109                         pwr_diff = RTWN_GET_ROM_VAR(
  110                             pwr_diff_2g->diff123[k].ofdm_cck,
  111                             R92E_DEF_TX_PWR_DIFF);
  112                         if (pwr_diff != R92E_DEF_TX_PWR_DIFF) {
  113                                 rs->cck_tx_pwr_diff_2g[i][j] = RTWN_SIGN4TO8(
  114                                     MS(pwr_diff_2g->diff123[k].ofdm_cck,
  115                                     LOW_PART));
  116                                 rs->ofdm_tx_pwr_diff_2g[i][j] = RTWN_SIGN4TO8(
  117                                     MS(pwr_diff_2g->diff123[k].ofdm_cck,
  118                                     HIGH_PART));
  119                         } else {
  120                                 rs->cck_tx_pwr_diff_2g[i][j] =
  121                                 rs->ofdm_tx_pwr_diff_2g[i][j] = pwr_diff;
  122                         }
  123                         pwr_diff = RTWN_GET_ROM_VAR(
  124                             pwr_diff_2g->diff123[k].ht40_ht20,
  125                             R92E_DEF_TX_PWR_DIFF);
  126                         if (pwr_diff != R92E_DEF_TX_PWR_DIFF) {
  127                                 rs->bw20_tx_pwr_diff_2g[i][j] = RTWN_SIGN4TO8(
  128                                     MS(pwr_diff_2g->diff123[k].ht40_ht20,
  129                                     LOW_PART));
  130                                 rs->bw40_tx_pwr_diff_2g[i][j] = RTWN_SIGN4TO8(
  131                                     MS(pwr_diff_2g->diff123[k].ht40_ht20,
  132                                     HIGH_PART));
  133                         } else {
  134                                 rs->bw20_tx_pwr_diff_2g[i][j] =
  135                                 rs->bw40_tx_pwr_diff_2g[i][j] = pwr_diff;
  136                         }
  137                 }
  138         }
  139 
  140         rs->regulatory = MS(rom->rf_board_opt, R92C_ROM_RF1_REGULATORY);
  141 
  142         /* Read MAC address. */
  143         IEEE80211_ADDR_COPY(sc->sc_ic.ic_macaddr, rom->macaddr);
  144 }

Cache object: f187474bf16c59278c9d2a079f54c706


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.