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/contrib/dev/ath/ath_hal/ar9300/eeprom.diff

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) 2013 Qualcomm Atheros, Inc.
    3  *
    4  * Permission to use, copy, modify, and/or distribute this software for any
    5  * purpose with or without fee is hereby granted, provided that the above
    6  * copyright notice and this permission notice appear in all copies.
    7  *
    8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
    9  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
   10  * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
   11  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
   12  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
   13  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
   14  * PERFORMANCE OF THIS SOFTWARE.
   15  */
   16 diff --git a/hal/ar9300/ar9300_eeprom.c b/hal/ar9300/ar9300_eeprom.c
   17 index 2fe5506..628026f 100644
   18 --- a/hal/ar9300/ar9300_eeprom.c
   19 +++ b/hal/ar9300/ar9300_eeprom.c
   20 @@ -342,6 +342,8 @@ ar9300_otp_read(struct ath_hal *ah, u_int off, u_int32_t *data, HAL_BOOL is_wifi
   21      int status = 0;
   22      u_int32_t addr;
   23  
   24 +    //ath_hal_printf(ah, "%s: reading offset 0x%x\n", __func__, off);
   25 +
   26      addr = (AR_SREV_WASP(ah) || AR_SREV_SCORPION(ah))?
   27          OTP_MEM_START_ADDRESS_WASP : OTP_MEM_START_ADDRESS;
   28         if (!is_wifi) {
   29 @@ -372,6 +374,7 @@ ar9300_otp_read(struct ath_hal *ah, u_int off, u_int32_t *data, HAL_BOOL is_wifi
   30          addr = BTOTP_STATUS1_EFUSE_READ_DATA;
   31      }
   32      *data = OS_REG_READ(ah, addr);
   33 +    //ath_hal_printf(ah, "%s:  data=0x%x\n", __func__, *data);
   34      return AH_TRUE;
   35  }
   36  
   37 @@ -603,6 +606,8 @@ ar9300_eeprom_attach(struct ath_hal *ah)
   38      systime_t current_system_time = OS_GET_TIMESTAMP();
   39  #endif    
   40  #endif
   41 +
   42 +    ath_hal_printf(ah, "%s: starting\n", __func__);
   43      ahp->try_dram = 1;
   44      ahp->try_eeprom = 1;
   45      ahp->try_otp = 1;
   46 @@ -679,10 +684,14 @@ ar9300_eeprom_attach(struct ath_hal *ah)
   47  #endif
   48  #endif
   49      
   50 +    ath_hal_printf(ah, "%s: calling ar9300_fill_eeprom\n", __func__);
   51      if (!ar9300_fill_eeprom(ah)) {
   52          return HAL_EIO;
   53      }
   54  
   55 +    ath_hal_printf(ah, "%s: calibration data type = %d\n", __func__,
   56 +      AH9300(ah)->calibration_data_source);
   57 +
   58      return HAL_OK;
   59      /* return ar9300_check_eeprom(ah); */
   60  #endif
   61 @@ -704,6 +713,7 @@ ar9300_eeprom_attach(struct ath_hal *ah)
   62      ahp->ah_eeprom.mac_addr[4] = 0xD0;
   63      ahp->ah_eeprom.mac_addr[5] = 0x00;
   64  #endif
   65 +    ath_hal_printf(ah, "%s: %s:%d\n", __func__, __FILE__, __LINE__);
   66      return HAL_OK;
   67  #else
   68  #if ATH_DRIVER_SIM
   69 @@ -764,13 +774,17 @@ ar9300_eeprom_attach(struct ath_hal *ah)
   70          return HAL_OK;
   71      }
   72  #endif
   73 +    ath_hal_printf(ah, "%s: %s:%d\n", __func__, __FILE__, __LINE__);
   74      if (AR_SREV_HORNET(ah) || AR_SREV_WASP(ah) || AR_SREV_SCORPION(ah)) {
   75          ahp->try_eeprom = 0;
   76      }
   77  
   78 +    ath_hal_printf(ah, "%s: %s:%d\n", __func__, __FILE__, __LINE__);
   79      if (!ar9300_eeprom_restore(ah)) {
   80 +       ath_hal_printf(ah, "%s: %s:%d\n", __func__, __FILE__, __LINE__);
   81          return HAL_EIO;
   82      }
   83 +    ath_hal_printf(ah, "%s: %s:%d\n", __func__, __FILE__, __LINE__);
   84      return HAL_OK;
   85  #endif
   86  #endif
   87 @@ -3743,6 +3757,12 @@ ar9300_calibration_data_read_otp(struct ath_hal *ah, long address,
   88      unsigned long byte_addr;
   89      u_int32_t svalue;
   90  
   91 +    ath_hal_printf(ah, "%s: called: address=%d, many=%d, is_wifi=%d\n",
   92 +        __func__,
   93 +       (int) address,
   94 +       many,
   95 +       is_wifi);
   96 +
   97      if (((address) < 0) || ((address + many) > 0x400)) {
   98          return AH_FALSE;
   99      }
  100 @@ -3802,6 +3822,8 @@ ar9300_calibration_data_read_array(struct ath_hal *ah, int address,
  101  {
  102      int it;
  103  
  104 +    ath_hal_printf(ah, "%s: address=%d, many=%d\n", __func__, address, many);
  105 +
  106      for (it = 0; it < many; it++) {
  107          (void)ar9300_calibration_data_read(ah, address - it, buffer + it, 1);
  108      }
  109 @@ -4001,13 +4023,24 @@ ar9300_eeprom_restore_internal_address(struct ath_hal *ah,
  110      int restored;
  111      u_int16_t checksum, mchecksum;
  112  
  113 +    ath_hal_printf(ah, "%s: called, cptr=0x%x, mdata_size=%d, blank=%d\n",
  114 +      __func__, cptr, mdata_size, blank);
  115 +
  116      restored = 0;
  117      for (it = 0; it < MSTATE; it++) {            
  118          (void) ar9300_calibration_data_read_array(
  119              ah, cptr, word, compression_header_length);
  120 +        ath_hal_printf(ah, "%s:  word = 0x%x, 0x%x, 0x%x, 0x%x\n",
  121 +          __func__,
  122 +          word[0],
  123 +          word[1],
  124 +          word[2],
  125 +          word[3]);
  126          if (word[0] == blank && word[1] == blank && word[2] == blank && word[3] == blank)
  127          {
  128 -            break;
  129 +            ath_hal_printf(ah, "%s: word=blank, skipping\n", __func__);
  130 +            cptr -= compression_header_length;
  131 +            continue;
  132          }
  133          ar9300_compression_header_unpack(
  134              word, &code, &reference, &length, &major, &minor);
  135 @@ -4143,19 +4176,18 @@ static int
  136  ar9300_eeprom_restore_from_dram(struct ath_hal *ah, ar9300_eeprom_t *mptr,
  137      int mdata_size)
  138  {
  139 -#if 0
  140      struct ath_hal_9300 *ahp = AH9300(ah);
  141      char *cal_ptr;
  142 -#endif
  143  
  144 +#if 0
  145      /* cal data in flash / DRAM isn't currently supported */
  146      ath_hal_printf(ah, "%s: Cal data from DRAM isn't supported\n",
  147        __func__);
  148  
  149      return -1;
  150 +#endif
  151  
  152  #ifndef WIN32
  153 -#if 0
  154      HALASSERT(mdata_size > 0);
  155  
  156      /* if cal_in_flash is true, the address sent by LMAC to HAL
  157 @@ -4164,14 +4196,17 @@ ar9300_eeprom_restore_from_dram(struct ath_hal *ah, ar9300_eeprom_t *mptr,
  158      if(ar9300_eep_data_in_flash(ah))
  159          return -1;
  160  
  161 +#if 0
  162      /* check if LMAC sent DRAM address is valid */
  163      if (!(uintptr_t)(AH_PRIVATE(ah)->ah_st)) {
  164          return -1;
  165      }
  166 +#endif
  167  
  168      /* When calibration data is from host, Host will copy the 
  169         compressed data to the predefined DRAM location saved at ah->ah_st */
  170      ath_hal_printf(ah, "Restoring Cal data from DRAM\n");
  171 +#if 0
  172  #ifdef __NetBSD__
  173      ahp->ah_cal_mem = OS_REMAP(ah, (uintptr_t)(AH_PRIVATE(ah)->ah_st), 
  174                                                         HOST_CALDATA_SIZE);
  175 @@ -4184,6 +4219,20 @@ ar9300_eeprom_restore_from_dram(struct ath_hal *ah, ar9300_eeprom_t *mptr,
  176         HALDEBUG(ah, HAL_DEBUG_EEPROM,"%s: can't remap dram region\n", __func__);
  177         return -1;
  178      }
  179 +#endif
  180 +
  181 +    /*
  182 +     * The atheros HAL passes in this buffer anyway, and we copy things
  183 +     * into it.  However, the FreeBSD driver doesn't supply this
  184 +     * particular memory.  So, let's just assume attach/detach will
  185 +     * provide us with a 16 kilobyte buffer for now, and hope the whole
  186 +     * OTP path works.
  187 +     */
  188 +    if (! ahp->ah_cal_mem) {
  189 +        ath_hal_printf(ah, "%s: FreeBSD: ah_cal_mem isn't set\n", __func__);
  190 +        return -1;
  191 +    }
  192 +
  193      cal_ptr = &((char *)(ahp->ah_cal_mem))[AR9300_FLASH_CAL_START_OFFSET];
  194      OS_MEMCPY(mptr, cal_ptr, mdata_size);
  195  
  196 @@ -4201,7 +4250,6 @@ ar9300_eeprom_restore_from_dram(struct ath_hal *ah, ar9300_eeprom_t *mptr,
  197      }
  198  
  199      return mdata_size;
  200 -#endif
  201  #else
  202      return -1;
  203  #endif
  204 @@ -4290,6 +4338,11 @@ ar9300_eeprom_restore_from_flash(struct ath_hal *ah, ar9300_eeprom_t *mptr,
  205      }
  206  
  207  #endif
  208 +    ath_hal_printf(ah, "%s: eeprom version=%d, template version=%d\n",
  209 +        __func__,
  210 +        (int) mptr->eeprom_version,
  211 +        (int) mptr->template_version);
  212 +
  213      if (mptr->eeprom_version   == 0xff ||
  214          mptr->template_version == 0xff ||
  215          mptr->eeprom_version   == 0    ||
  216 @@ -4321,10 +4374,11 @@ ar9300_eeprom_restore_internal(struct ath_hal *ah, ar9300_eeprom_t *mptr,
  217  
  218      nptr = -1;    
  219  
  220 -    if ((AH9300(ah)->calibration_data_try == calibration_data_none ||
  221 +    if (0 && (AH9300(ah)->calibration_data_try == calibration_data_none ||
  222           AH9300(ah)->calibration_data_try == calibration_data_dram) &&
  223           AH9300(ah)->try_dram && nptr < 0)
  224      {   
  225 +        ath_hal_printf(ah, "%s: trying dram\n", __func__);
  226          AH9300(ah)->calibration_data_source = calibration_data_dram;
  227          AH9300(ah)->calibration_data_source_address = 0;
  228          nptr = ar9300_eeprom_restore_from_dram(ah, mptr, mdata_size);
  229 @@ -4334,7 +4388,7 @@ ar9300_eeprom_restore_internal(struct ath_hal *ah, ar9300_eeprom_t *mptr,
  230          }
  231      }
  232      
  233 -    if ((AH9300(ah)->calibration_data_try == calibration_data_none ||
  234 +    if (0 && (AH9300(ah)->calibration_data_try == calibration_data_none ||
  235           AH9300(ah)->calibration_data_try == calibration_data_eeprom) &&
  236          AH9300(ah)->try_eeprom && nptr < 0)
  237      {
  238 @@ -4343,6 +4397,7 @@ ar9300_eeprom_restore_internal(struct ath_hal *ah, ar9300_eeprom_t *mptr,
  239           * base_address=0x3ff where we used to write the data
  240           */
  241          AH9300(ah)->calibration_data_source = calibration_data_eeprom;
  242 +        ath_hal_printf(ah, "%s: trying eeprom\n", __func__);
  243          if (AH9300(ah)->calibration_data_try_address != 0) {
  244              AH9300(ah)->calibration_data_source_address =
  245                  AH9300(ah)->calibration_data_try_address;
  246 @@ -4374,7 +4429,7 @@ ar9300_eeprom_restore_internal(struct ath_hal *ah, ar9300_eeprom_t *mptr,
  247       * ##### should be an ifdef test for any AP usage,
  248       * either in driver or in nart
  249       */
  250 -    if ((AH9300(ah)->calibration_data_try == calibration_data_none ||
  251 +    if (0 && (AH9300(ah)->calibration_data_try == calibration_data_none ||
  252           AH9300(ah)->calibration_data_try == calibration_data_flash) &&
  253          AH9300(ah)->try_flash && nptr < 0)
  254      {
  255 @@ -4388,10 +4443,17 @@ ar9300_eeprom_restore_internal(struct ath_hal *ah, ar9300_eeprom_t *mptr,
  256          }
  257      }
  258  
  259 +    /* XXX FreeBSD? */
  260 +    AH9300(ah)->calibration_data_try = calibration_data_otp;
  261 +    AH9300(ah)->calibration_data_try_address = 0x2ff;
  262 +
  263      if ((AH9300(ah)->calibration_data_try == calibration_data_none ||
  264           AH9300(ah)->calibration_data_try == calibration_data_otp) &&
  265          AH9300(ah)->try_otp && nptr < 0)
  266      {
  267 +        ath_hal_printf(ah, "%s: trying OTP, try_address=0x%x\n",
  268 +            __func__,
  269 +            AH9300(ah)->calibration_data_try_address);
  270          AH9300(ah)->calibration_data_source = calibration_data_otp;
  271          if (AH9300(ah)->calibration_data_try_address != 0) {
  272              AH9300(ah)->calibration_data_source_address =
  273 @@ -4526,6 +4588,8 @@ ar9300_eeprom_restore(struct ath_hal *ah)
  274      int mdata_size;
  275      HAL_BOOL status = AH_FALSE;
  276  
  277 +    ath_hal_printf(ah, "%s: called\n", __func__);
  278 +
  279      mptr = &ahp->ah_eeprom;
  280      mdata_size = ar9300_eeprom_struct_size();
  281  

Cache object: 2c4c2a9874e04bfe4b6afa559a639607


[ 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.