⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ah_internal.h.svn-base

📁 最新之atheros芯片driver source code, 基于linux操作系统,內含atheros芯片HAL全部代码
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting * Copyright (c) 2002-2008 Atheros Communications, Inc. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * $Id: ah_internal.h,v 1.21 2008/11/27 22:29:27 sam Exp $ */#ifndef _ATH_AH_INTERAL_H_#define _ATH_AH_INTERAL_H_/* * Atheros Device Hardware Access Layer (HAL). * * Internal definitions. */#define	AH_NULL	0#define	AH_MIN(a,b)	((a)<(b)?(a):(b))#define	AH_MAX(a,b)	((a)>(b)?(a):(b))#ifndef NBBY#define	NBBY	8			/* number of bits/byte */#endif#ifndef roundup#define	roundup(x, y)	((((x)+((y)-1))/(y))*(y))  /* to any y */#endif#ifndef howmany#define	howmany(x, y)	(((x)+((y)-1))/(y))#endif#ifndef offsetof#define	offsetof(type, field)	((size_t)(&((type *)0)->field))#endif/* * Remove const in a way that keeps the compiler happy. * This works for gcc but may require other magic for * other compilers (not sure where this should reside). * Note that uintptr_t is C99. */#ifndef __DECONST#ifndef _UINTPTR_T#if AH_WORDSIZE == 64typedef unsigned long int uintptr_t;#elsetypedef unsigned int uintptr_t;#endif#endif#define	__DECONST(type, var)	((type)(uintptr_t)(const void *)(var))#endiftypedef struct {	uint16_t	start;		/* first register */	uint16_t	end;		/* ending register or zero */} HAL_REGRANGE;/* * Transmit power scale factor. * * NB: This is not public because we want to discourage the use of *     scaling; folks should use the tx power limit interface. */typedef enum {	HAL_TP_SCALE_MAX	= 0,		/* no scaling (default) */	HAL_TP_SCALE_50		= 1,		/* 50% of max (-3 dBm) */	HAL_TP_SCALE_25		= 2,		/* 25% of max (-6 dBm) */	HAL_TP_SCALE_12		= 3,		/* 12% of max (-9 dBm) */	HAL_TP_SCALE_MIN	= 4,		/* min, but still on */} HAL_TP_SCALE;typedef enum { 	HAL_CAP_RADAR		= 0,		/* Radar capability */ 	HAL_CAP_AR		= 1,		/* AR capability */} HAL_PHYDIAG_CAPS;/* * Each chip or class of chips registers to offer support. */struct ath_hal_chip {	const char	*name;	const char	*(*probe)(uint16_t vendorid, uint16_t devid);	struct ath_hal	*(*attach)(uint16_t devid, HAL_SOFTC,			    HAL_BUS_TAG, HAL_BUS_HANDLE, HAL_STATUS *error);};#ifndef AH_CHIP#define	AH_CHIP(_name, _probe, _attach)				\static struct ath_hal_chip _name##_chip = {			\	.name		= #_name,				\	.probe		= _probe,				\	.attach		= _attach				\};								\OS_DATA_SET(ah_chips, _name##_chip)#endif/* * Each RF backend registers to offer support; this is mostly * used by multi-chip 5212 solutions.  Single-chip solutions * have a fixed idea about which RF to use. */struct ath_hal_rf {	const char	*name;	HAL_BOOL	(*probe)(struct ath_hal *ah);	HAL_BOOL	(*attach)(struct ath_hal *ah, HAL_STATUS *ecode);};#ifndef AH_RF#define	AH_RF(_name, _probe, _attach)				\static struct ath_hal_rf _name##_rf = {				\	.name		= #_name,				\	.probe		= _probe,				\	.attach		= _attach				\};								\OS_DATA_SET(ah_rfs, _name##_rf)#endifstruct ath_hal_rf *ath_hal_rfprobe(struct ath_hal *ah, HAL_STATUS *ecode);/* * Internal form of a HAL_CHANNEL.  Note that the structure * must be defined such that you can cast references to a * HAL_CHANNEL so don't shuffle the first two members. */typedef struct {	uint32_t	channelFlags;	uint16_t	channel;	/* NB: must be first for casting */	uint8_t		privFlags;	int8_t		maxRegTxPower;	int8_t		maxTxPower;	int8_t		minTxPower;	/* as above... */	HAL_BOOL	bssSendHere;	uint8_t		gainI;	HAL_BOOL	iqCalValid;	uint8_t		calValid;		/* bitmask of cal types */	int8_t		iCoff;	int8_t		qCoff;	int16_t		rawNoiseFloor;	int16_t		noiseFloorAdjust;	int8_t		antennaMax;	uint32_t	regDmnFlags;		/* Flags for channel use in reg */	uint32_t	conformanceTestLimit;	/* conformance test limit from reg domain */	uint16_t	mainSpur;		/* cached spur value for this cahnnel */} HAL_CHANNEL_INTERNAL;typedef struct {	uint32_t	halChanSpreadSupport 		: 1,			halSleepAfterBeaconBroken	: 1,			halCompressSupport		: 1,			halBurstSupport			: 1,			halFastFramesSupport		: 1,			halChapTuningSupport		: 1,			halTurboGSupport		: 1,			halTurboPrimeSupport		: 1,			halMicAesCcmSupport		: 1,			halMicCkipSupport		: 1,			halMicTkipSupport		: 1,			halTkipMicTxRxKeySupport	: 1,			halCipherAesCcmSupport		: 1,			halCipherCkipSupport		: 1,			halCipherTkipSupport		: 1,			halPSPollBroken			: 1,			halVEOLSupport			: 1,			halBssIdMaskSupport		: 1,			halMcastKeySrchSupport		: 1,			halTsfAddSupport		: 1,			halChanHalfRate			: 1,			halChanQuarterRate		: 1,			halHTSupport			: 1,			halRfSilentSupport		: 1,			halHwPhyCounterSupport		: 1,			halWowSupport			: 1,			halWowMatchPatternExact		: 1,			halAutoSleepSupport		: 1,			halFastCCSupport		: 1,			halBtCoexSupport		: 1;	uint32_t	halRxStbcSupport		: 1,			halTxStbcSupport		: 1,			halGTTSupport			: 1,			halCSTSupport			: 1,			halRifsRxSupport		: 1,			halRifsTxSupport		: 1,			halExtChanDfsSupport		: 1,			halForcePpmSupport		: 1,			halEnhancedPmSupport		: 1,			halMbssidAggrSupport		: 1;	uint32_t	halWirelessModes;	uint16_t	halTotalQueues;	uint16_t	halKeyCacheSize;	uint16_t	halLow5GhzChan, halHigh5GhzChan;	uint16_t	halLow2GhzChan, halHigh2GhzChan;	int		halTstampPrecision;	int		halRtsAggrLimit;	uint8_t		halTxChainMask;	uint8_t		halRxChainMask;	uint8_t		halNumGpioPins;	uint8_t		halNumAntCfg2GHz;	uint8_t		halNumAntCfg5GHz;} HAL_CAPABILITIES;/* * The ``private area'' follows immediately after the ``public area'' * in the data structure returned by ath_hal_attach.  Private data are * used by device-independent code such as the regulatory domain support. * In general, code within the HAL should never depend on data in the * public area.  Instead any public data needed internally should be * shadowed here. * * When declaring a device-specific ath_hal data structure this structure * is assumed to at the front; e.g. * *	struct ath_hal_5212 { *		struct ath_hal_private	ah_priv; *		... *	}; * * It might be better to manage the method pointers in this structure * using an indirect pointer to a read-only data structure but this would * disallow class-style method overriding. */struct ath_hal_private {	struct ath_hal	h;			/* public area */	/* NB: all methods go first to simplify initialization */	HAL_BOOL	(*ah_getChannelEdges)(struct ath_hal*,				uint16_t channelFlags,				uint16_t *lowChannel, uint16_t *highChannel);	u_int		(*ah_getWirelessModes)(struct ath_hal*);	HAL_BOOL	(*ah_eepromRead)(struct ath_hal *, u_int off,				uint16_t *data);	HAL_BOOL	(*ah_eepromWrite)(struct ath_hal *, u_int off,				uint16_t data);	HAL_BOOL	(*ah_gpioCfgOutput)(struct ath_hal *, uint32_t gpio);	HAL_BOOL	(*ah_gpioCfgInput)(struct ath_hal *, uint32_t gpio);	uint32_t	(*ah_gpioGet)(struct ath_hal *, uint32_t gpio);	HAL_BOOL	(*ah_gpioSet)(struct ath_hal *,				uint32_t gpio, uint32_t val);	void		(*ah_gpioSetIntr)(struct ath_hal*, u_int, uint32_t);	HAL_BOOL	(*ah_getChipPowerLimits)(struct ath_hal *,				HAL_CHANNEL *, uint32_t);	int16_t		(*ah_getNfAdjust)(struct ath_hal *,				const HAL_CHANNEL_INTERNAL*);	void		(*ah_getNoiseFloor)(struct ath_hal *,				int16_t nfarray[]);	void		*ah_eeprom;		/* opaque EEPROM state */	uint16_t	ah_eeversion;		/* EEPROM version */	void		(*ah_eepromDetach)(struct ath_hal *);	HAL_STATUS	(*ah_eepromGet)(struct ath_hal *, int, void *);	HAL_BOOL	(*ah_eepromSet)(struct ath_hal *, int, int);	uint16_t	(*ah_getSpurChan)(struct ath_hal *, int, HAL_BOOL);	HAL_BOOL	(*ah_eepromDiag)(struct ath_hal *, int request,			    const void *args, uint32_t argsize,			    void **result, uint32_t *resultsize);	/*	 * Device revision information.	 */	uint16_t	ah_devid;		/* PCI device ID */	uint16_t	ah_subvendorid;		/* PCI subvendor ID */	uint32_t	ah_macVersion;		/* MAC version id */	uint16_t	ah_macRev;		/* MAC revision */	uint16_t	ah_phyRev;		/* PHY revision */	uint16_t	ah_analog5GhzRev;	/* 2GHz radio revision */	uint16_t	ah_analog2GhzRev;	/* 5GHz radio revision */	HAL_OPMODE	ah_opmode;		/* operating mode from reset */	HAL_CAPABILITIES ah_caps;		/* device capabilities */	uint32_t	ah_diagreg;		/* user-specified AR_DIAG_SW */	int16_t		ah_powerLimit;		/* tx power cap */	uint16_t	ah_maxPowerLevel;	/* calculated max tx power */	u_int		ah_tpScale;		/* tx power scale factor */	uint32_t	ah_11nCompat;		/* 11n compat controls */	/*	 * State for regulatory domain handling.	 */	HAL_REG_DOMAIN	ah_currentRD;		/* Current regulatory domain */	HAL_CTRY_CODE	ah_countryCode;		/* current country code */	HAL_CHANNEL_INTERNAL ah_channels[256];	/* calculated channel list */	u_int		ah_nchan;		/* valid channels in list */	HAL_CHANNEL_INTERNAL *ah_curchan;	/* current channel */	uint8_t    	ah_coverageClass;   	/* coverage class */	HAL_BOOL    	ah_regdomainUpdate;     /* regdomain is updated? */	/*	 * RF Silent handling; setup according to the EEPROM.	 */	uint16_t	ah_rfsilent;		/* GPIO pin + polarity */	HAL_BOOL	ah_rfkillEnabled;	/* enable/disable RfKill */	/*	 * Diagnostic support for discriminating HIUERR reports.	 */	uint32_t	ah_fatalState[6];	/* AR_ISR+shadow regs */	int		ah_rxornIsFatal;	/* how to treat HAL_INT_RXORN */};#define	AH_PRIVATE(_ah)	((struct ath_hal_private *)(_ah))#define	ath_hal_getChannelEdges(_ah, _cf, _lc, _hc) \	AH_PRIVATE(_ah)->ah_getChannelEdges(_ah, _cf, _lc, _hc)#define	ath_hal_getWirelessModes(_ah) \	AH_PRIVATE(_ah)->ah_getWirelessModes(_ah)#define	ath_hal_eepromRead(_ah, _off, _data) \	AH_PRIVATE(_ah)->ah_eepromRead(_ah, _off, _data)#define	ath_hal_eepromWrite(_ah, _off, _data) \	AH_PRIVATE(_ah)->ah_eepromWrite(_ah, _off, _data)#define	ath_hal_gpioCfgOutput(_ah, _gpio) \	AH_PRIVATE(_ah)->ah_gpioCfgOutput(_ah, _gpio)#define	ath_hal_gpioCfgInput(_ah, _gpio) \	AH_PRIVATE(_ah)->ah_gpioCfgInput(_ah, _gpio)#define	ath_hal_gpioGet(_ah, _gpio) \	AH_PRIVATE(_ah)->ah_gpioGet(_ah, _gpio)#define	ath_hal_gpioSet(_ah, _gpio, _val) \	AH_PRIVATE(_ah)->ah_gpioGet(_ah, _gpio, _val)#define	ath_hal_gpioSetIntr(_ah, _gpio, _ilevel) \	AH_PRIVATE(_ah)->ah_gpioSetIntr(_ah, _gpio, _ilevel)#define	ath_hal_getpowerlimits(_ah, _chans, _nchan) \	AH_PRIVATE(_ah)->ah_getChipPowerLimits(_ah, _chans, _nchan)#define ath_hal_getNfAdjust(_ah, _c) \	AH_PRIVATE(_ah)->ah_getNfAdjust(_ah, _c)#define	ath_hal_getNoiseFloor(_ah, _nfArray) \	AH_PRIVATE(_ah)->ah_getNoiseFloor(_ah, _nfArray)#define	ath_hal_eepromDetach(_ah) \	AH_PRIVATE(_ah)->ah_eepromDetach(_ah)#define	ath_hal_eepromGet(_ah, _param, _val) \	AH_PRIVATE(_ah)->ah_eepromGet(_ah, _param, _val)#define	ath_hal_eepromSet(_ah, _param, _val) \	AH_PRIVATE(_ah)->ah_eepromSet(_ah, _param, _val)#define	ath_hal_eepromGetFlag(_ah, _param) \	(AH_PRIVATE(_ah)->ah_eepromGet(_ah, _param, AH_NULL) == HAL_OK)#define ath_hal_getSpurChan(_ah, _ix, _is2G) \	AH_PRIVATE(_ah)->ah_getSpurChan(_ah, _ix, _is2G)#define	ath_hal_eepromDiag(_ah, _request, _a, _asize, _r, _rsize) \	AH_PRIVATE(_ah)->ah_eepromDiag(_ah, _request, _a, _asize,  _r, _rsize)#if !defined(_NET_IF_IEEE80211_H_) && !defined(_NET80211__IEEE80211_H_)/* * Stuff that would naturally come from _ieee80211.h */#define	IEEE80211_ADDR_LEN		6#define	IEEE80211_WEP_KEYLEN			5	/* 40bit */#define	IEEE80211_WEP_IVLEN			3	/* 24bit */#define	IEEE80211_WEP_KIDLEN			1	/* 1 octet */#define	IEEE80211_WEP_CRCLEN			4	/* CRC-32 */#define	IEEE80211_CRC_LEN			4#define	IEEE80211_MTU				1500#define	IEEE80211_MAX_LEN			(2300 + IEEE80211_CRC_LEN + \    (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))enum {	IEEE80211_T_DS,			/* direct sequence spread spectrum */	IEEE80211_T_FH,			/* frequency hopping */	IEEE80211_T_OFDM,		/* frequency division multiplexing */	IEEE80211_T_TURBO,		/* high rate DS */	IEEE80211_T_HT,			/* HT - full GI */};#define	IEEE80211_T_CCK	IEEE80211_T_DS	/* more common nomenclatur */#endif /* _NET_IF_IEEE80211_H_ *//* NB: these are defined privately until XR support is announced */enum {	ATHEROS_T_XR	= IEEE80211_T_HT+1,	/* extended range */};#define HAL_TXQ_USE_LOCKOUT_BKOFF_DIS	0x00000001#define INIT_AIFS		2#define INIT_CWMIN		15#define INIT_CWMIN_11B		31#define INIT_CWMAX		1023#define INIT_SH_RETRY		10#define INIT_LG_RETRY		10#define INIT_SSH_RETRY		32#define INIT_SLG_RETRY		32typedef struct {	uint32_t	tqi_ver;		/* HAL TXQ verson */	HAL_TX_QUEUE	tqi_type;		/* hw queue type*/	HAL_TX_QUEUE_SUBTYPE tqi_subtype;	/* queue subtype, if applicable */	HAL_TX_QUEUE_FLAGS tqi_qflags;		/* queue flags */	uint32_t	tqi_priority;	uint32_t	tqi_aifs;		/* aifs */	uint32_t	tqi_cwmin;		/* cwMin */	uint32_t	tqi_cwmax;		/* cwMax */	uint16_t	tqi_shretry;		/* frame short retry limit */	uint16_t	tqi_lgretry;		/* frame long retry limit */	uint32_t	tqi_cbrPeriod;	uint32_t	tqi_cbrOverflowLimit;	uint32_t	tqi_burstTime;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -