svn commit: r221603 - in head/sys/dev/ath/ath_hal: . ar5416 ar9001
ar9002
Adrian Chadd
adrian at FreeBSD.org
Sat May 7 15:30:23 UTC 2011
Author: adrian
Date: Sat May 7 15:30:23 2011
New Revision: 221603
URL: http://svn.freebsd.org/changeset/base/221603
Log:
Do a HAL capabilities sync pass based on the Atheros HAL.
* Shuffle some of the capability numbers around to match the
Atheros HAL capability IDs, just for consistency.
* Add some new capabilities to FreeBSD from the Atheros
HAL which will be be shortly used when new chipsets are added
(HAL SGI-20 support is for Kiwi/AR9287 support); for
TX aggregation (MBSSID aggregate support, WDS aggregation
support); CST/GTT support for carrier sense/TX timeout.
Modified:
head/sys/dev/ath/ath_hal/ah.c
head/sys/dev/ath/ath_hal/ah.h
head/sys/dev/ath/ath_hal/ah_internal.h
head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
head/sys/dev/ath/ath_hal/ar9001/ar9130_attach.c
head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c
head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
Modified: head/sys/dev/ath/ath_hal/ah.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ah.c Sat May 7 14:32:16 2011 (r221602)
+++ head/sys/dev/ath/ath_hal/ah.c Sat May 7 15:30:23 2011 (r221603)
@@ -585,19 +585,49 @@ ath_hal_getcapability(struct ath_hal *ah
return HAL_ENOTSUPP;
case HAL_CAP_11D:
return HAL_OK;
- case HAL_CAP_RXORN_FATAL: /* HAL_INT_RXORN treated as fatal */
- return AH_PRIVATE(ah)->ah_rxornIsFatal ? HAL_OK : HAL_ENOTSUPP;
+
case HAL_CAP_HT:
return pCap->halHTSupport ? HAL_OK : HAL_ENOTSUPP;
+ case HAL_CAP_GTXTO:
+ return pCap->halGTTSupport ? HAL_OK : HAL_ENOTSUPP;
+ case HAL_CAP_FAST_CC:
+ return pCap->halFastCCSupport ? HAL_OK : HAL_ENOTSUPP;
case HAL_CAP_TX_CHAINMASK: /* mask of TX chains supported */
*result = pCap->halTxChainMask;
return HAL_OK;
case HAL_CAP_RX_CHAINMASK: /* mask of RX chains supported */
*result = pCap->halRxChainMask;
return HAL_OK;
+ case HAL_CAP_NUM_GPIO_PINS:
+ *result = pCap->halNumGpioPins;
+ return HAL_OK;
+ case HAL_CAP_CST:
+ return pCap->halCSTSupport ? HAL_OK : HAL_ENOTSUPP;
+ case HAL_CAP_RTS_AGGR_LIMIT:
+ *result = pCap->halRtsAggrLimit;
+ return HAL_OK;
+ case HAL_CAP_4ADDR_AGGR:
+ return pCap->hal4AddrAggrSupport ? HAL_OK : HAL_ENOTSUPP;
+ case HAL_CAP_AUTO_SLEEP:
+ return pCap->halAutoSleepSupport ? HAL_OK : HAL_ENOTSUPP;
+ case HAL_CAP_MBSSID_AGGR_SUPPORT:
+ return pCap->halMbssidAggrSupport ? HAL_OK : HAL_ENOTSUPP;
+ case HAL_CAP_SPLIT_4KB_TRANS: /* hardware handles descriptors straddling 4k page boundary */
+ return pCap->hal4kbSplitTransSupport ? HAL_OK : HAL_ENOTSUPP;
+ case HAL_CAP_REG_FLAG:
+ *result = AH_PRIVATE(ah)->ah_currentRDext;
+ return HAL_OK;
+ case HAL_CAP_BT_COEX:
+ return pCap->halBtCoexSupport ? HAL_OK : HAL_ENOTSUPP;
+ case HAL_CAP_HT20_SGI:
+ return pCap->halHTSGI20Support ? HAL_OK : HAL_ENOTSUPP;
case HAL_CAP_RXTSTAMP_PREC: /* rx desc tstamp precision (bits) */
*result = pCap->halTstampPrecision;
return HAL_OK;
+
+ /* FreeBSD-specific entries for now */
+ case HAL_CAP_RXORN_FATAL: /* HAL_INT_RXORN treated as fatal */
+ return AH_PRIVATE(ah)->ah_rxornIsFatal ? HAL_OK : HAL_ENOTSUPP;
case HAL_CAP_INTRMASK: /* mask of supported interrupts */
*result = pCap->halIntrMask;
return HAL_OK;
@@ -614,10 +644,6 @@ ath_hal_getcapability(struct ath_hal *ah
default:
return HAL_ENOTSUPP;
}
- case HAL_CAP_SPLIT_4KB_TRANS: /* hardware handles descriptors straddling 4k page boundary */
- return pCap->hal4kbSplitTransSupport ? HAL_OK : HAL_ENOTSUPP;
- case HAL_CAP_HAS_PSPOLL: /* hardware has ps-poll support */
- return pCap->halHasPsPollSupport ? HAL_OK : HAL_ENOTSUPP;
case HAL_CAP_RXDESC_SELFLINK: /* hardware supports self-linked final RX descriptors correctly */
return pCap->halHasRxSelfLinkedTail ? HAL_OK : HAL_ENOTSUPP;
default:
Modified: head/sys/dev/ath/ath_hal/ah.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ah.h Sat May 7 14:32:16 2011 (r221602)
+++ head/sys/dev/ath/ath_hal/ah.h Sat May 7 15:30:23 2011 (r221603)
@@ -110,27 +110,40 @@ typedef enum {
HAL_CAP_TPC_CTS = 27, /* cts txpower with per-packet tpc */
HAL_CAP_11D = 28, /* 11d beacon support for changing cc */
- /* The following are currently different IDs to the Atheros HAL */
- HAL_CAP_INTMIT = 29, /* interference mitigation */
- HAL_CAP_RXORN_FATAL = 30, /* HAL_INT_RXORN treated as fatal */
- HAL_CAP_HT = 31, /* hardware can support HT */
- HAL_CAP_TX_CHAINMASK = 32, /* mask of TX chains supported */
- HAL_CAP_RX_CHAINMASK = 33, /* mask of RX chains supported */
- HAL_CAP_RXTSTAMP_PREC = 34, /* rx desc tstamp precision (bits) */
- HAL_CAP_BB_HANG = 35, /* can baseband hang */
- HAL_CAP_MAC_HANG = 36, /* can MAC hang */
- HAL_CAP_INTRMASK = 37, /* bitmask of supported interrupts */
- HAL_CAP_BSSIDMATCH = 38, /* hardware has disable bssid match */
- HAL_CAP_STREAMS = 39, /* how many 802.11n spatial streams are available */
- HAL_CAP_SPLIT_4KB_TRANS = 40, /* hardware supports descriptors straddling a 4k page boundary */
- HAL_CAP_HAS_PSPOLL = 41, /* hardware has ps-poll support */
- HAL_CAP_RXDESC_SELFLINK = 42, /* support a self-linked tail RX descriptor */
- HAL_CAP_GTXTO = 43, /* hardware supports global tx timeout */
+ HAL_CAP_HT = 30, /* hardware can support HT */
+ HAL_CAP_GTXTO = 31, /* hardware supports global tx timeout */
+ HAL_CAP_FAST_CC = 32, /* hardware supports fast channel change */
+ HAL_CAP_TX_CHAINMASK = 33, /* mask of TX chains supported */
+ HAL_CAP_RX_CHAINMASK = 34, /* mask of RX chains supported */
+ HAL_CAP_NUM_GPIO_PINS = 36, /* number of GPIO pins */
- /* The following are back to normal, shared with the Atheros HAL */
+ HAL_CAP_CST = 38, /* hardware supports carrier sense timeout */
+
+ HAL_CAP_RTS_AGGR_LIMIT = 42, /* aggregation limit with RTS */
+ HAL_CAP_4ADDR_AGGR = 43, /* hardware is capable of 4addr aggregation */
+
+ HAL_CAP_AUTO_SLEEP = 48, /* hardware can go to network sleep
+ automatically after waking up to receive TIM */
+ HAL_CAP_MBSSID_AGGR_SUPPORT = 49, /* Support for mBSSID Aggregation */
+ HAL_CAP_SPLIT_4KB_TRANS = 50, /* hardware supports descriptors straddling a 4k page boundary */
+ HAL_CAP_REG_FLAG = 51, /* Regulatory domain flags */
+
+ HAL_CAP_BT_COEX = 60, /* hardware is capable of bluetooth coexistence */
+
+ HAL_CAP_HT20_SGI = 96, /* hardware supports HT20 short GI */
+
+ HAL_CAP_RXTSTAMP_PREC = 100, /* rx desc tstamp precision (bits) */
/* The following are private to the FreeBSD HAL (224 onward) */
+ HAL_CAP_INTMIT = 229, /* interference mitigation */
+ HAL_CAP_RXORN_FATAL = 230, /* HAL_INT_RXORN treated as fatal */
+ HAL_CAP_BB_HANG = 235, /* can baseband hang */
+ HAL_CAP_MAC_HANG = 236, /* can MAC hang */
+ HAL_CAP_INTRMASK = 237, /* bitmask of supported interrupts */
+ HAL_CAP_BSSIDMATCH = 238, /* hardware has disable bssid match */
+ HAL_CAP_STREAMS = 239, /* how many 802.11n spatial streams are available */
+ HAL_CAP_RXDESC_SELFLINK = 242, /* support a self-linked tail RX descriptor */
} HAL_CAPABILITY_TYPE;
/*
Modified: head/sys/dev/ath/ath_hal/ah_internal.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ah_internal.h Sat May 7 14:32:16 2011 (r221602)
+++ head/sys/dev/ath/ath_hal/ah_internal.h Sat May 7 15:30:23 2011 (r221603)
@@ -184,6 +184,7 @@ typedef struct {
halChanHalfRate : 1,
halChanQuarterRate : 1,
halHTSupport : 1,
+ halHTSGI20Support : 1,
halRfSilentSupport : 1,
halHwPhyCounterSupport : 1,
halWowSupport : 1,
@@ -197,13 +198,13 @@ typedef struct {
halCSTSupport : 1,
halRifsRxSupport : 1,
halRifsTxSupport : 1,
+ hal4AddrAggrSupport : 1,
halExtChanDfsSupport : 1,
halForcePpmSupport : 1,
halEnhancedPmSupport : 1,
halMbssidAggrSupport : 1,
halBssidMatchSupport : 1,
hal4kbSplitTransSupport : 1,
- halHasPsPollSupport : 1,
halHasRxSelfLinkedTail : 1;
uint32_t halWirelessModes;
uint16_t halTotalQueues;
Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c Sat May 7 14:32:16 2011 (r221602)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c Sat May 7 15:30:23 2011 (r221603)
@@ -812,6 +812,7 @@ ar5416FillCapabilityInfo(struct ath_hal
pCap->halBssIdMaskSupport = AH_TRUE;
pCap->halMcastKeySrchSupport = AH_FALSE;
pCap->halTsfAddSupport = AH_TRUE;
+ pCap->hal4AddrAggrSupport = AH_FALSE; /* Broken in Owl */
if (ath_hal_eepromGet(ah, AR_EEP_MAXQCU, &val) == HAL_OK)
pCap->halTotalQueues = val;
@@ -862,10 +863,12 @@ ar5416FillCapabilityInfo(struct ath_hal
pCap->halTxStreams = 2;
pCap->halRxStreams = 2;
pCap->halRtsAggrLimit = 8*1024; /* Owl 2.0 limit */
- pCap->halMbssidAggrSupport = AH_TRUE;
+ pCap->halMbssidAggrSupport = AH_FALSE; /* Broken on Owl */
pCap->halForcePpmSupport = AH_TRUE;
pCap->halEnhancedPmSupport = AH_TRUE;
pCap->halBssidMatchSupport = AH_TRUE;
+ pCap->halGTTSupport = AH_TRUE;
+ pCap->halCSTSupport = AH_TRUE;
if (ath_hal_eepromGetFlag(ah, AR_EEP_RFKILL) &&
ath_hal_eepromGet(ah, AR_EEP_RFSILENT, &ahpriv->ah_rfsilent) == HAL_OK) {
Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c Sat May 7 14:32:16 2011 (r221602)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c Sat May 7 15:30:23 2011 (r221603)
@@ -278,8 +278,6 @@ ar5416GetCapability(struct ath_hal *ah,
uint32_t capability, uint32_t *result)
{
switch (type) {
- case HAL_CAP_GTXTO:
- return HAL_OK; /* All AR5416+ supports Global TX Timeout */
case HAL_CAP_BB_HANG:
switch (capability) {
case HAL_BB_HANG_RIFS:
Modified: head/sys/dev/ath/ath_hal/ar9001/ar9130_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9001/ar9130_attach.c Sat May 7 14:32:16 2011 (r221602)
+++ head/sys/dev/ath/ath_hal/ar9001/ar9130_attach.c Sat May 7 15:30:23 2011 (r221603)
@@ -290,6 +290,14 @@ ar9130FillCapabilityInfo(struct ath_hal
pCap->halRtsAggrLimit = 64*1024; /* 802.11n max */
pCap->halExtChanDfsSupport = AH_TRUE;
pCap->halAutoSleepSupport = AH_FALSE; /* XXX? */
+ /*
+ * MBSSID aggregation is broken in Howl v1.1, v1.2, v1.3
+ * and works fine in v1.4.
+ * XXX todo, enable it for v1.4.
+ */
+ pCap->halMbssidAggrSupport = AH_FALSE;
+ pCap->hal4AddrAggrSupport = AH_TRUE;
+
return AH_TRUE;
}
Modified: head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c Sat May 7 14:32:16 2011 (r221602)
+++ head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c Sat May 7 15:30:23 2011 (r221603)
@@ -294,6 +294,9 @@ ar9160FillCapabilityInfo(struct ath_hal
pCap->halRtsAggrLimit = 64*1024; /* 802.11n max */
pCap->halExtChanDfsSupport = AH_TRUE;
pCap->halAutoSleepSupport = AH_FALSE; /* XXX? */
+ pCap->halMbssidAggrSupport = AH_TRUE;
+ pCap->hal4AddrAggrSupport = AH_TRUE;
+
/* AR9160 is a 2x2 stream device */
pCap->halTxStreams = 2;
pCap->halRxStreams = 2;
Modified: head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c Sat May 7 14:32:16 2011 (r221602)
+++ head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c Sat May 7 15:30:23 2011 (r221603)
@@ -784,8 +784,11 @@ ar9280FillCapabilityInfo(struct ath_hal
pCap->hal4kbSplitTransSupport = AH_FALSE;
/* Disable this so Block-ACK works correctly */
pCap->halHasRxSelfLinkedTail = AH_FALSE;
+ pCap->halMbssidAggrSupport = AH_TRUE;
+ pCap->hal4AddrAggrSupport = AH_TRUE;
+
if (AR_SREV_MERLIN_20_OR_LATER(ah))
- pCap->halHasPsPollSupport = AH_TRUE;
+ pCap->halPSPollBroken = AH_FALSE;
pCap->halRxStbcSupport = 1;
pCap->halTxStbcSupport = 1;
Modified: head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c Sat May 7 14:32:16 2011 (r221602)
+++ head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c Sat May 7 15:30:23 2011 (r221603)
@@ -395,8 +395,11 @@ ar9285FillCapabilityInfo(struct ath_hal
pCap->hal4kbSplitTransSupport = AH_FALSE;
/* Disable this so Block-ACK works correctly */
pCap->halHasRxSelfLinkedTail = AH_FALSE;
+ pCap->halMbssidAggrSupport = AH_TRUE;
+ pCap->hal4AddrAggrSupport = AH_TRUE;
+
if (AR_SREV_KITE_12_OR_LATER(ah))
- pCap->halHasPsPollSupport = AH_TRUE;
+ pCap->halPSPollBroken = AH_FALSE;
pCap->halRxStbcSupport = 1;
pCap->halTxStbcSupport = 1;
More information about the svn-src-all
mailing list