svn commit: r218150 - in head/sys/dev/ath/ath_hal: . ar5416 ar9001 ar9002

Adrian Chadd adrian at FreeBSD.org
Tue Feb 1 03:51:35 UTC 2011


Author: adrian
Date: Tue Feb  1 03:51:35 2011
New Revision: 218150
URL: http://svn.freebsd.org/changeset/base/218150

Log:
  Add a new capability which reports the number of spatial streams a device supports.
  
  The higher levels (net80211, if_ath, ath_rate) need this to make correct
  choices about what MCS capabilities to advertise and what MCS rates are
  able to be TXed.
  
  In summary:
  
  * AR5416 - 2/3 antennas, 2x2 streams
  * AR9160 - 2/3 antennas, 2x2 streams
  * AR9220 - 2 antennas, 2x2 sstraems
  * AR9280 - 2 antennas, 2x2 streams
  * AR9285 - 2 antennas but with antenna diversity, 1x1 stream

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/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	Tue Feb  1 01:05:11 2011	(r218149)
+++ head/sys/dev/ath/ath_hal/ah.c	Tue Feb  1 03:51:35 2011	(r218150)
@@ -583,6 +583,17 @@ ath_hal_getcapability(struct ath_hal *ah
 		return HAL_OK;
 	case HAL_CAP_BSSIDMATCH:	/* hardware has disable bssid match */
 		return pCap->halBssidMatchSupport ? HAL_OK : HAL_ENOTSUPP;
+	case HAL_CAP_STREAMS:		/* number of 11n spatial streams */
+		switch (capability) {
+		case 0:			/* TX */
+			*result = pCap->halTxStreams;
+			return HAL_OK;
+		case 1:			/* RX */
+			*result = pCap->halRxStreams;
+			return HAL_OK;
+		default:
+			return HAL_ENOTSUPP;
+		}
 	default:
 		return HAL_EINVAL;
 	}

Modified: head/sys/dev/ath/ath_hal/ah.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ah.h	Tue Feb  1 01:05:11 2011	(r218149)
+++ head/sys/dev/ath/ath_hal/ah.h	Tue Feb  1 03:51:35 2011	(r218150)
@@ -111,6 +111,7 @@ typedef enum {
 	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_CAPABILITY_TYPE;
 
 /* 

Modified: head/sys/dev/ath/ath_hal/ah_internal.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ah_internal.h	Tue Feb  1 01:05:11 2011	(r218149)
+++ head/sys/dev/ath/ath_hal/ah_internal.h	Tue Feb  1 03:51:35 2011	(r218150)
@@ -209,6 +209,8 @@ typedef struct {
 	uint8_t		halNumAntCfg2GHz;
 	uint8_t		halNumAntCfg5GHz;
 	uint32_t	halIntrMask;
+	uint8_t		halTxStreams;
+	uint8_t		halRxStreams;
 } HAL_CAPABILITIES;
 
 struct regDomain;

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c	Tue Feb  1 01:05:11 2011	(r218149)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c	Tue Feb  1 03:51:35 2011	(r218150)
@@ -819,6 +819,9 @@ ar5416FillCapabilityInfo(struct ath_hal 
 	pCap->halTxChainMask = ath_hal_eepromGet(ah, AR_EEP_TXMASK, AH_NULL);
 	/* XXX CB71 uses GPIO 0 to indicate 3 rx chains */
 	pCap->halRxChainMask = ath_hal_eepromGet(ah, AR_EEP_RXMASK, AH_NULL);
+	/* AR5416 may have 3 antennas but is a 2x2 stream device */
+	pCap->halTxStreams = 2;
+	pCap->halRxStreams = 2;
 	pCap->halRtsAggrLimit = 8*1024;		/* Owl 2.0 limit */
 	pCap->halMbssidAggrSupport = AH_TRUE;
 	pCap->halForcePpmSupport = AH_TRUE;

Modified: head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c	Tue Feb  1 01:05:11 2011	(r218149)
+++ head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c	Tue Feb  1 03:51:35 2011	(r218150)
@@ -290,6 +290,10 @@ ar9160FillCapabilityInfo(struct ath_hal 
 	pCap->halRtsAggrLimit = 64*1024;	/* 802.11n max */
 	pCap->halExtChanDfsSupport = AH_TRUE;
 	pCap->halAutoSleepSupport = AH_FALSE;	/* XXX? */
+	/* AR9160 is a 2x2 stream device */
+	pCap->halTxStreams = 2;
+	pCap->halRxStreams = 2;
+
 	return AH_TRUE;
 }
 

Modified: head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c	Tue Feb  1 01:05:11 2011	(r218149)
+++ head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c	Tue Feb  1 03:51:35 2011	(r218150)
@@ -684,6 +684,10 @@ ar9280FillCapabilityInfo(struct ath_hal 
 #if 0
 	pCap->halWowMatchPatternDword = AH_TRUE;
 #endif
+	/* AR9280 is a 2x2 stream device */
+	pCap->halTxStreams = 2;
+	pCap->halRxStreams = 2;
+
 	pCap->halCSTSupport = AH_TRUE;
 	pCap->halRifsRxSupport = AH_TRUE;
 	pCap->halRifsTxSupport = AH_TRUE;

Modified: head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c	Tue Feb  1 01:05:11 2011	(r218149)
+++ head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c	Tue Feb  1 03:51:35 2011	(r218150)
@@ -370,6 +370,10 @@ ar9285FillCapabilityInfo(struct ath_hal 
 #if 0
 	pCap->halWowMatchPatternDword = AH_TRUE;
 #endif
+	/* AR9285 has 2 antennas but is a 1x1 stream device */
+	pCap->halTxStreams = 2;
+	pCap->halRxStreams = 2;
+
 	pCap->halCSTSupport = AH_TRUE;
 	pCap->halRifsRxSupport = AH_TRUE;
 	pCap->halRifsTxSupport = AH_TRUE;


More information about the svn-src-all mailing list