1/* 2 * Copyright (c) 2009 Rui Paulo <rpaulo@FreeBSD.org> 3 * Copyright (c) 2008 Sam Leffler, Errno Consulting 4 * Copyright (c) 2008 Atheros Communications, Inc. 5 * 6 * Permission to use, copy, modify, and/or distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 * |
18 * $FreeBSD: head/sys/dev/ath/ath_hal/ah_eeprom_v4k.c 208711 2010-06-01 15:33:10Z rpaulo $ |
19 */ 20#include "opt_ah.h" 21 22#include "ah.h" 23#include "ah_internal.h" 24#include "ah_eeprom_v14.h" 25#include "ah_eeprom_v4k.h" 26 --- 6 unchanged lines hidden (view full) --- 33 HAL_EEPROM_v4k *ee = AH_PRIVATE(ah)->ah_eeprom; 34 const MODAL_EEP4K_HEADER *pModal = &ee->ee_base.modalHeader; 35 const BASE_EEP4K_HEADER *pBase = &ee->ee_base.baseEepHeader; 36 uint32_t sum; 37 uint8_t *macaddr; 38 int i; 39 40 switch (param) { |
41 case AR_EEP_NFTHRESH_2: |
42 *(int16_t *)val = pModal->noiseFloorThreshCh[0]; |
43 return HAL_OK; 44 case AR_EEP_MACADDR: /* Get MAC Address */ 45 sum = 0; 46 macaddr = val; 47 for (i = 0; i < 6; i++) { 48 macaddr[i] = pBase->macAddr[i]; 49 sum += pBase->macAddr[i]; 50 } --- 8 unchanged lines hidden (view full) --- 59 case AR_EEP_REGDMN_1: 60 return pBase->regDmn[1]; 61 case AR_EEP_OPCAP: 62 return pBase->deviceCap; 63 case AR_EEP_OPMODE: 64 return pBase->opCapFlags; 65 case AR_EEP_RFSILENT: 66 return pBase->rfSilent; |
67 case AR_EEP_OB_2: |
68 return pModal->ob; |
69 case AR_EEP_DB_2: |
70 return pModal->db; |
71 case AR_EEP_TXMASK: 72 return pBase->txMask; 73 case AR_EEP_RXMASK: 74 return pBase->rxMask; 75 case AR_EEP_RXGAIN_TYPE: 76 return AR5416_EEP_RXGAIN_ORIG; 77 case AR_EEP_TXGAIN_TYPE: 78 return IS_VERS(>=, AR5416_EEP_MINOR_VER_19) ? 79 pBase->txGainType : AR5416_EEP_TXGAIN_ORIG; |
80 case AR_EEP_OL_PWRCTRL: 81 HALASSERT(val == AH_NULL); |
82 return HAL_EIO; |
83 case AR_EEP_AMODE: 84 HALASSERT(val == AH_NULL); 85 return pBase->opCapFlags & AR5416_OPFLAGS_11A ? 86 HAL_OK : HAL_EIO; 87 case AR_EEP_BMODE: 88 case AR_EEP_GMODE: 89 HALASSERT(val == AH_NULL); 90 return pBase->opCapFlags & AR5416_OPFLAGS_11G ? --- 5 unchanged lines hidden (view full) --- 96 HALASSERT(val == AH_NULL); 97 /* fall thru... */ 98 case AR_EEP_MAXQCU: /* NB: not in opCapFlags */ 99 case AR_EEP_KCENTRIES: /* NB: not in opCapFlags */ 100 return HAL_EIO; 101 case AR_EEP_AES: 102 case AR_EEP_BURST: 103 case AR_EEP_RFKILL: |
104 case AR_EEP_TURBO2DISABLE: 105 HALASSERT(val == AH_NULL); 106 return HAL_OK; 107 case AR_EEP_ANTGAINMAX_2: |
108 *(int8_t *) val = ee->ee_antennaGainMax; |
109 return HAL_OK; |
110 default: 111 HALASSERT(0); 112 return HAL_EINVAL; 113 } 114#undef IS_VERS 115#undef CHAN_A_IDX 116#undef CHAN_B_IDX 117} 118 119static HAL_BOOL 120v4kEepromSet(struct ath_hal *ah, int param, int v) 121{ 122 HAL_EEPROM_v4k *ee = AH_PRIVATE(ah)->ah_eeprom; 123 124 switch (param) { 125 case AR_EEP_ANTGAINMAX_2: |
126 ee->ee_antennaGainMax = (int8_t) v; |
127 return HAL_OK; |
128 } 129 return HAL_EINVAL; 130} 131 132static HAL_BOOL 133v4kEepromDiag(struct ath_hal *ah, int request, 134 const void *args, uint32_t argsize, void **result, uint32_t *resultsize) 135{ --- 95 unchanged lines hidden (view full) --- 231#define CTL_CHAIN 0 232 233static void 234v4kEepromReadCTLInfo(struct ath_hal *ah, HAL_EEPROM_v4k *ee) 235{ 236 RD_EDGES_POWER *rep = ee->ee_rdEdgesPower; 237 int i, j; 238 |
239 HALASSERT(AR5416_4K_NUM_CTLS <= sizeof(ee->ee_rdEdgesPower)/NUM_EDGES); |
240 241 for (i = 0; ee->ee_base.ctlIndex[i] != 0 && i < AR5416_4K_NUM_CTLS; i++) { 242 for (j = 0; j < NUM_EDGES; j ++) { 243 /* XXX Confirm this is the right thing to do when an invalid channel is stored */ 244 if (ee->ee_base.ctlData[i].ctlEdges[CTL_CHAIN][j].bChannel == AR5416_BCHAN_UNUSED) { 245 rep[j].rdEdge = 0; 246 rep[j].twice_rdEdgePower = 0; 247 rep[j].flag = 0; --- 141 unchanged lines hidden --- |