cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ar5523_hw.h (11641B)


      1/*
      2 * Copyright (c) 2006 Damien Bergamini <damien.bergamini@free.fr>
      3 * Copyright (c) 2006 Sam Leffler, Errno Consulting
      4 * Copyright (c) 2007 Christoph Hellwig <hch@lst.de>
      5 * Copyright (c) 2008-2009 Weongyo Jeong <weongyo@freebsd.org>
      6 * Copyright (c) 2012 Pontus Fuchs <pontus.fuchs@gmail.com>
      7 *
      8 * Permission to use, copy, modify, and/or distribute this software for any
      9 * purpose with or without fee is hereby granted, provided that the above
     10 * copyright notice and this permission notice appear in all copies.
     11 *
     12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     13 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     14 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     15 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     17 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     18 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     19 */
     20
     21/* all fields are big endian */
     22struct ar5523_fwblock {
     23	__be32		flags;
     24#define AR5523_WRITE_BLOCK	(1 << 4)
     25
     26	__be32	len;
     27#define AR5523_MAX_FWBLOCK_SIZE	2048
     28
     29	__be32		total;
     30	__be32		remain;
     31	__be32		rxtotal;
     32	__be32		pad[123];
     33} __packed;
     34
     35#define AR5523_MAX_RXCMDSZ	1024
     36#define AR5523_MAX_TXCMDSZ	1024
     37
     38struct ar5523_cmd_hdr {
     39	__be32		len;
     40	__be32		code;
     41/* NB: these are defined for rev 1.5 firmware; rev 1.6 is different */
     42/* messages from Host -> Target */
     43#define	WDCMSG_HOST_AVAILABLE		0x01
     44#define WDCMSG_BIND			0x02
     45#define WDCMSG_TARGET_RESET		0x03
     46#define WDCMSG_TARGET_GET_CAPABILITY	0x04
     47#define WDCMSG_TARGET_SET_CONFIG	0x05
     48#define WDCMSG_TARGET_GET_STATUS	0x06
     49#define WDCMSG_TARGET_GET_STATS		0x07
     50#define WDCMSG_TARGET_START		0x08
     51#define WDCMSG_TARGET_STOP		0x09
     52#define WDCMSG_TARGET_ENABLE		0x0a
     53#define WDCMSG_TARGET_DISABLE		0x0b
     54#define	WDCMSG_CREATE_CONNECTION	0x0c
     55#define WDCMSG_UPDATE_CONNECT_ATTR	0x0d
     56#define	WDCMSG_DELETE_CONNECT		0x0e
     57#define	WDCMSG_SEND			0x0f
     58#define WDCMSG_FLUSH			0x10
     59/* messages from Target -> Host */
     60#define	WDCMSG_STATS_UPDATE		0x11
     61#define	WDCMSG_BMISS			0x12
     62#define	WDCMSG_DEVICE_AVAIL		0x13
     63#define	WDCMSG_SEND_COMPLETE		0x14
     64#define	WDCMSG_DATA_AVAIL		0x15
     65#define	WDCMSG_SET_PWR_MODE		0x16
     66#define	WDCMSG_BMISS_ACK		0x17
     67#define	WDCMSG_SET_LED_STEADY		0x18
     68#define	WDCMSG_SET_LED_BLINK		0x19
     69/* more messages */
     70#define	WDCMSG_SETUP_BEACON_DESC	0x1a
     71#define	WDCMSG_BEACON_INIT		0x1b
     72#define	WDCMSG_RESET_KEY_CACHE		0x1c
     73#define	WDCMSG_RESET_KEY_CACHE_ENTRY	0x1d
     74#define	WDCMSG_SET_KEY_CACHE_ENTRY	0x1e
     75#define	WDCMSG_SET_DECOMP_MASK		0x1f
     76#define	WDCMSG_SET_REGULATORY_DOMAIN	0x20
     77#define	WDCMSG_SET_LED_STATE		0x21
     78#define	WDCMSG_WRITE_ASSOCID		0x22
     79#define	WDCMSG_SET_STA_BEACON_TIMERS	0x23
     80#define	WDCMSG_GET_TSF			0x24
     81#define	WDCMSG_RESET_TSF		0x25
     82#define	WDCMSG_SET_ADHOC_MODE		0x26
     83#define	WDCMSG_SET_BASIC_RATE		0x27
     84#define	WDCMSG_MIB_CONTROL		0x28
     85#define	WDCMSG_GET_CHANNEL_DATA		0x29
     86#define	WDCMSG_GET_CUR_RSSI		0x2a
     87#define	WDCMSG_SET_ANTENNA_SWITCH	0x2b
     88#define	WDCMSG_USE_SHORT_SLOT_TIME	0x2f
     89#define	WDCMSG_SET_POWER_MODE		0x30
     90#define	WDCMSG_SETUP_PSPOLL_DESC	0x31
     91#define	WDCMSG_SET_RX_MULTICAST_FILTER	0x32
     92#define	WDCMSG_RX_FILTER		0x33
     93#define	WDCMSG_PER_CALIBRATION		0x34
     94#define	WDCMSG_RESET			0x35
     95#define	WDCMSG_DISABLE			0x36
     96#define	WDCMSG_PHY_DISABLE		0x37
     97#define	WDCMSG_SET_TX_POWER_LIMIT	0x38
     98#define	WDCMSG_SET_TX_QUEUE_PARAMS	0x39
     99#define	WDCMSG_SETUP_TX_QUEUE		0x3a
    100#define	WDCMSG_RELEASE_TX_QUEUE		0x3b
    101#define	WDCMSG_SET_DEFAULT_KEY		0x43
    102
    103	__u32		priv;	/* driver private data,
    104				   don't care about endianess */
    105	__be32		magic;
    106	__be32		reserved2[4];
    107};
    108
    109struct ar5523_cmd_host_available {
    110	__be32	sw_ver_major;
    111	__be32	sw_ver_minor;
    112	__be32	sw_ver_patch;
    113	__be32	sw_ver_build;
    114} __packed;
    115
    116#define	ATH_SW_VER_MAJOR	1
    117#define	ATH_SW_VER_MINOR	5
    118#define	ATH_SW_VER_PATCH	0
    119#define	ATH_SW_VER_BUILD	9999
    120
    121struct ar5523_chunk {
    122	u8		seqnum;		/* sequence number for ordering */
    123	u8		flags;
    124#define	UATH_CFLAGS_FINAL	0x01	/* final chunk of a msg */
    125#define	UATH_CFLAGS_RXMSG	0x02	/* chunk contains rx completion */
    126#define	UATH_CFLAGS_DEBUG	0x04	/* for debugging */
    127	__be16		length;		/* chunk size in bytes */
    128	/* chunk data follows */
    129} __packed;
    130
    131/*
    132 * Message format for a WDCMSG_DATA_AVAIL message from Target to Host.
    133 */
    134struct ar5523_rx_desc {
    135	__be32	len;		/* msg length including header */
    136	__be32	code;		/* WDCMSG_DATA_AVAIL */
    137	__be32	gennum;		/* generation number */
    138	__be32	status;		/* start of RECEIVE_INFO */
    139#define	UATH_STATUS_OK			0
    140#define	UATH_STATUS_STOP_IN_PROGRESS	1
    141#define	UATH_STATUS_CRC_ERR		2
    142#define	UATH_STATUS_PHY_ERR		3
    143#define	UATH_STATUS_DECRYPT_CRC_ERR	4
    144#define	UATH_STATUS_DECRYPT_MIC_ERR	5
    145#define	UATH_STATUS_DECOMP_ERR		6
    146#define	UATH_STATUS_KEY_ERR		7
    147#define	UATH_STATUS_ERR			8
    148	__be32	tstamp_low;	/* low-order 32-bits of rx timestamp */
    149	__be32	tstamp_high;	/* high-order 32-bits of rx timestamp */
    150	__be32	framelen;	/* frame length */
    151	__be32	rate;		/* rx rate code */
    152	__be32	antenna;
    153	__be32	rssi;
    154	__be32	channel;
    155	__be32	phyerror;
    156	__be32	connix;		/* key table ix for bss traffic */
    157	__be32	decrypterror;
    158	__be32	keycachemiss;
    159	__be32	pad;		/* XXX? */
    160} __packed;
    161
    162struct ar5523_tx_desc {
    163	__be32	msglen;
    164	u32	msgid;		/* msg id (supplied by host) */
    165	__be32	type;		/* opcode: WDMSG_SEND or WDCMSG_FLUSH */
    166	__be32	txqid;		/* tx queue id and flags */
    167#define	UATH_TXQID_MASK		0x0f
    168#define	UATH_TXQID_MINRATE	0x10	/* use min tx rate */
    169#define	UATH_TXQID_FF		0x20	/* content is fast frame */
    170	__be32	connid;		/* tx connection id */
    171#define UATH_ID_INVALID	0xffffffff	/* for sending prior to connection */
    172	__be32	flags;		/* non-zero if response desired */
    173#define UATH_TX_NOTIFY	(1 << 24)	/* f/w will send a UATH_NOTIF_TX */
    174	__be32	buflen;		/* payload length */
    175} __packed;
    176
    177
    178#define AR5523_ID_BSS		2
    179#define AR5523_ID_BROADCAST	0xffffffff
    180
    181/* structure for command UATH_CMD_WRITE_MAC */
    182struct ar5523_write_mac {
    183	__be32	reg;
    184	__be32	len;
    185	u8		data[32];
    186} __packed;
    187
    188struct ar5523_cmd_rateset {
    189	__u8		length;
    190#define AR5523_MAX_NRATES	32
    191	__u8		set[AR5523_MAX_NRATES];
    192};
    193
    194struct ar5523_cmd_set_associd {		/* AR5523_WRITE_ASSOCID */
    195	__be32	defaultrateix;
    196	__be32	associd;
    197	__be32	timoffset;
    198	__be32	turboprime;
    199	__u8	bssid[6];
    200} __packed;
    201
    202/* structure for command WDCMSG_RESET */
    203struct ar5523_cmd_reset {
    204	__be32	flags;		/* channel flags */
    205#define	UATH_CHAN_TURBO	0x0100
    206#define	UATH_CHAN_CCK	0x0200
    207#define	UATH_CHAN_OFDM	0x0400
    208#define	UATH_CHAN_2GHZ	0x1000
    209#define	UATH_CHAN_5GHZ	0x2000
    210	__be32	freq;		/* channel frequency */
    211	__be32	maxrdpower;
    212	__be32	cfgctl;
    213	__be32	twiceantennareduction;
    214	__be32	channelchange;
    215	__be32	keeprccontent;
    216} __packed;
    217
    218/* structure for command WDCMSG_SET_BASIC_RATE */
    219struct ar5523_cmd_rates {
    220	__be32	connid;
    221	__be32	keeprccontent;
    222	__be32	size;
    223	struct ar5523_cmd_rateset rateset;
    224} __packed;
    225
    226enum {
    227	WLAN_MODE_NONE = 0,
    228	WLAN_MODE_11b,
    229	WLAN_MODE_11a,
    230	WLAN_MODE_11g,
    231	WLAN_MODE_11a_TURBO,
    232	WLAN_MODE_11g_TURBO,
    233	WLAN_MODE_11a_TURBO_PRIME,
    234	WLAN_MODE_11g_TURBO_PRIME,
    235	WLAN_MODE_11a_XR,
    236	WLAN_MODE_11g_XR,
    237};
    238
    239struct ar5523_cmd_connection_attr {
    240	__be32	longpreambleonly;
    241	struct ar5523_cmd_rateset	rateset;
    242	__be32	wlanmode;
    243} __packed;
    244
    245/* structure for command AR5523_CREATE_CONNECTION */
    246struct ar5523_cmd_create_connection {
    247	__be32	connid;
    248	__be32	bssid;
    249	__be32	size;
    250	struct ar5523_cmd_connection_attr	connattr;
    251} __packed;
    252
    253struct ar5523_cmd_ledsteady {		/* WDCMSG_SET_LED_STEADY */
    254	__be32	lednum;
    255#define UATH_LED_LINK		0
    256#define UATH_LED_ACTIVITY	1
    257	__be32	ledmode;
    258#define UATH_LED_OFF	0
    259#define UATH_LED_ON	1
    260} __packed;
    261
    262struct ar5523_cmd_ledblink {		/* WDCMSG_SET_LED_BLINK */
    263	__be32	lednum;
    264	__be32	ledmode;
    265	__be32	blinkrate;
    266	__be32	slowmode;
    267} __packed;
    268
    269struct ar5523_cmd_ledstate {		/* WDCMSG_SET_LED_STATE */
    270	__be32	connected;
    271} __packed;
    272
    273struct ar5523_cmd_txq_attr {
    274	__be32	priority;
    275	__be32	aifs;
    276	__be32	logcwmin;
    277	__be32	logcwmax;
    278	__be32	bursttime;
    279	__be32	mode;
    280	__be32	qflags;
    281} __packed;
    282
    283struct ar5523_cmd_txq_setup {		/* WDCMSG_SETUP_TX_QUEUE */
    284	__be32	qid;
    285	__be32	len;
    286	struct ar5523_cmd_txq_attr attr;
    287} __packed;
    288
    289struct ar5523_cmd_rx_filter {		/* WDCMSG_RX_FILTER */
    290	__be32	bits;
    291#define UATH_FILTER_RX_UCAST		0x00000001
    292#define UATH_FILTER_RX_MCAST		0x00000002
    293#define UATH_FILTER_RX_BCAST		0x00000004
    294#define UATH_FILTER_RX_CONTROL		0x00000008
    295#define UATH_FILTER_RX_BEACON		0x00000010	/* beacon frames */
    296#define UATH_FILTER_RX_PROM		0x00000020	/* promiscuous mode */
    297#define UATH_FILTER_RX_PHY_ERR		0x00000040	/* phy errors */
    298#define UATH_FILTER_RX_PHY_RADAR	0x00000080	/* radar phy errors */
    299#define UATH_FILTER_RX_XR_POOL		0x00000400	/* XR group polls */
    300#define UATH_FILTER_RX_PROBE_REQ	0x00000800
    301	__be32	op;
    302#define UATH_FILTER_OP_INIT		0x0
    303#define UATH_FILTER_OP_SET		0x1
    304#define UATH_FILTER_OP_CLEAR		0x2
    305#define UATH_FILTER_OP_TEMP		0x3
    306#define UATH_FILTER_OP_RESTORE		0x4
    307} __packed;
    308
    309enum {
    310	CFG_NONE,			/* Sentinal to indicate "no config" */
    311	CFG_REG_DOMAIN,			/* Regulatory Domain */
    312	CFG_RATE_CONTROL_ENABLE,
    313	CFG_DEF_XMIT_DATA_RATE,		/* NB: if rate control is not enabled */
    314	CFG_HW_TX_RETRIES,
    315	CFG_SW_TX_RETRIES,
    316	CFG_SLOW_CLOCK_ENABLE,
    317	CFG_COMP_PROC,
    318	CFG_USER_RTS_THRESHOLD,
    319	CFG_XR2NORM_RATE_THRESHOLD,
    320	CFG_XRMODE_SWITCH_COUNT,
    321	CFG_PROTECTION_TYPE,
    322	CFG_BURST_SEQ_THRESHOLD,
    323	CFG_ABOLT,
    324	CFG_IQ_LOG_COUNT_MAX,
    325	CFG_MODE_CTS,
    326	CFG_WME_ENABLED,
    327	CFG_GPRS_CBR_PERIOD,
    328	CFG_SERVICE_TYPE,
    329	/* MAC Address to use.  Overrides EEPROM */
    330	CFG_MAC_ADDR,
    331	CFG_DEBUG_EAR,
    332	CFG_INIT_REGS,
    333	/* An ID for use in error & debug messages */
    334	CFG_DEBUG_ID,
    335	CFG_COMP_WIN_SZ,
    336	CFG_DIVERSITY_CTL,
    337	CFG_TP_SCALE,
    338	CFG_TPC_HALF_DBM5,
    339	CFG_TPC_HALF_DBM2,
    340	CFG_OVERRD_TX_POWER,
    341	CFG_USE_32KHZ_CLOCK,
    342	CFG_GMODE_PROTECTION,
    343	CFG_GMODE_PROTECT_RATE_INDEX,
    344	CFG_GMODE_NON_ERP_PREAMBLE,
    345	CFG_WDC_TRANSPORT_CHUNK_SIZE,
    346};
    347
    348enum {
    349	/* Sentinal to indicate "no capability" */
    350	CAP_NONE,
    351	CAP_ALL,			/* ALL capabilities */
    352	CAP_TARGET_VERSION,
    353	CAP_TARGET_REVISION,
    354	CAP_MAC_VERSION,
    355	CAP_MAC_REVISION,
    356	CAP_PHY_REVISION,
    357	CAP_ANALOG_5GHz_REVISION,
    358	CAP_ANALOG_2GHz_REVISION,
    359	/* Target supports WDC message debug features */
    360	CAP_DEBUG_WDCMSG_SUPPORT,
    361
    362	CAP_REG_DOMAIN,
    363	CAP_COUNTRY_CODE,
    364	CAP_REG_CAP_BITS,
    365
    366	CAP_WIRELESS_MODES,
    367	CAP_CHAN_SPREAD_SUPPORT,
    368	CAP_SLEEP_AFTER_BEACON_BROKEN,
    369	CAP_COMPRESS_SUPPORT,
    370	CAP_BURST_SUPPORT,
    371	CAP_FAST_FRAMES_SUPPORT,
    372	CAP_CHAP_TUNING_SUPPORT,
    373	CAP_TURBOG_SUPPORT,
    374	CAP_TURBO_PRIME_SUPPORT,
    375	CAP_DEVICE_TYPE,
    376	CAP_XR_SUPPORT,
    377	CAP_WME_SUPPORT,
    378	CAP_TOTAL_QUEUES,
    379	CAP_CONNECTION_ID_MAX,		/* Should absorb CAP_KEY_CACHE_SIZE */
    380
    381	CAP_LOW_5GHZ_CHAN,
    382	CAP_HIGH_5GHZ_CHAN,
    383	CAP_LOW_2GHZ_CHAN,
    384	CAP_HIGH_2GHZ_CHAN,
    385
    386	CAP_MIC_AES_CCM,
    387	CAP_MIC_CKIP,
    388	CAP_MIC_TKIP,
    389	CAP_MIC_TKIP_WME,
    390	CAP_CIPHER_AES_CCM,
    391	CAP_CIPHER_CKIP,
    392	CAP_CIPHER_TKIP,
    393
    394	CAP_TWICE_ANTENNAGAIN_5G,
    395	CAP_TWICE_ANTENNAGAIN_2G,
    396};
    397
    398enum {
    399	ST_NONE,                    /* Sentinal to indicate "no status" */
    400	ST_ALL,
    401	ST_SERVICE_TYPE,
    402	ST_WLAN_MODE,
    403	ST_FREQ,
    404	ST_BAND,
    405	ST_LAST_RSSI,
    406	ST_PS_FRAMES_DROPPED,
    407	ST_CACHED_DEF_ANT,
    408	ST_COUNT_OTHER_RX_ANT,
    409	ST_USE_FAST_DIVERSITY,
    410	ST_MAC_ADDR,
    411	ST_RX_GENERATION_NUM,
    412	ST_TX_QUEUE_DEPTH,
    413	ST_SERIAL_NUMBER,
    414	ST_WDC_TRANSPORT_CHUNK_SIZE,
    415};
    416
    417enum {
    418	TARGET_DEVICE_AWAKE,
    419	TARGET_DEVICE_SLEEP,
    420	TARGET_DEVICE_PWRDN,
    421	TARGET_DEVICE_PWRSAVE,
    422	TARGET_DEVICE_SUSPEND,
    423	TARGET_DEVICE_RESUME,
    424};
    425
    426/* this is in net/ieee80211.h, but that conflicts with the mac80211 headers */
    427#define IEEE80211_2ADDR_LEN	16
    428
    429#define AR5523_MIN_RXBUFSZ				\
    430	(((sizeof(__be32) + IEEE80211_2ADDR_LEN +	\
    431	   sizeof(struct ar5523_rx_desc)) + 3) & ~3)