summaryrefslogtreecommitdiff
path: root/mwl_dev.h
diff options
context:
space:
mode:
Diffstat (limited to 'mwl_dev.h')
-rw-r--r--mwl_dev.h465
1 files changed, 0 insertions, 465 deletions
diff --git a/mwl_dev.h b/mwl_dev.h
deleted file mode 100644
index 7c6facc..0000000
--- a/mwl_dev.h
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
-* Copyright (c) 2006-2015 Marvell International Ltd.
-*
-* 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.
-*/
-
-/* Description: This file defines device related information.
-*/
-
-#ifndef _mwl_dev_h_
-#define _mwl_dev_h_
-
-#include <linux/interrupt.h>
-#include <linux/pci.h>
-#include <linux/firmware.h>
-#include <linux/delay.h>
-#include <linux/bitops.h>
-#include <net/mac80211.h>
-
-/* CONSTANTS AND MACROS
-*/
-
-/* Map to 0x80000000 (Bus control) on BAR0
-*/
-#define MACREG_REG_H2A_INTERRUPT_EVENTS 0x00000C18 /* (From host to ARM) */
-#define MACREG_REG_H2A_INTERRUPT_CAUSE 0x00000C1C /* (From host to ARM) */
-#define MACREG_REG_H2A_INTERRUPT_MASK 0x00000C20 /* (From host to ARM) */
-#define MACREG_REG_H2A_INTERRUPT_CLEAR_SEL 0x00000C24 /* (From host to ARM) */
-#define MACREG_REG_H2A_INTERRUPT_STATUS_MASK 0x00000C28 /* (From host to ARM) */
-
-#define MACREG_REG_A2H_INTERRUPT_EVENTS 0x00000C2C /* (From ARM to host) */
-#define MACREG_REG_A2H_INTERRUPT_CAUSE 0x00000C30 /* (From ARM to host) */
-#define MACREG_REG_A2H_INTERRUPT_MASK 0x00000C34 /* (From ARM to host) */
-#define MACREG_REG_A2H_INTERRUPT_CLEAR_SEL 0x00000C38 /* (From ARM to host) */
-#define MACREG_REG_A2H_INTERRUPT_STATUS_MASK 0x00000C3C /* (From ARM to host) */
-
-/* Map to 0x80000000 on BAR1
-*/
-#define MACREG_REG_GEN_PTR 0x00000C10
-#define MACREG_REG_INT_CODE 0x00000C14
-#define MACREG_REG_SCRATCH 0x00000C40
-#define MACREG_REG_FW_PRESENT 0x0000BFFC
-
-/* Bit definitio for MACREG_REG_A2H_INTERRUPT_CAUSE (A2HRIC)
-*/
-#define MACREG_A2HRIC_BIT_TX_DONE 0x00000001 /* bit 0 */
-#define MACREG_A2HRIC_BIT_RX_RDY 0x00000002 /* bit 1 */
-#define MACREG_A2HRIC_BIT_OPC_DONE 0x00000004 /* bit 2 */
-#define MACREG_A2HRIC_BIT_MAC_EVENT 0x00000008 /* bit 3 */
-#define MACREG_A2HRIC_BIT_RX_PROBLEM 0x00000010 /* bit 4 */
-#define MACREG_A2HRIC_BIT_RADIO_OFF 0x00000020 /* bit 5 */
-#define MACREG_A2HRIC_BIT_RADIO_ON 0x00000040 /* bit 6 */
-#define MACREG_A2HRIC_BIT_RADAR_DETECT 0x00000080 /* bit 7 */
-#define MACREG_A2HRIC_BIT_ICV_ERROR 0x00000100 /* bit 8 */
-#define MACREG_A2HRIC_BIT_WEAKIV_ERROR 0x00000200 /* bit 9 */
-#define MACREG_A2HRIC_BIT_QUEUE_EMPTY BIT(10)
-#define MACREG_A2HRIC_BIT_QUEUE_FULL BIT(11)
-#define MACREG_A2HRIC_BIT_CHAN_SWITCH BIT(12) /* IEEE80211_DH */
-#define MACREG_A2HRIC_BIT_TX_WATCHDOG BIT(13)
-#define MACREG_A2HRIC_BA_WATCHDOG BIT(14)
-#define MACREG_A2HRIC_BIT_SSU_DONE BIT(16)
-#define MACREG_A2HRIC_CONSEC_TXFAIL BIT(17) /* 15 taken by ISR_TXACK */
-
-#define ISR_SRC_BITS ((MACREG_A2HRIC_BIT_RX_RDY) | \
- (MACREG_A2HRIC_BIT_TX_DONE) | \
- (MACREG_A2HRIC_BIT_OPC_DONE) | \
- (MACREG_A2HRIC_BIT_MAC_EVENT) | \
- (MACREG_A2HRIC_BIT_WEAKIV_ERROR) | \
- (MACREG_A2HRIC_BIT_ICV_ERROR) | \
- (MACREG_A2HRIC_BIT_SSU_DONE) | \
- (MACREG_A2HRIC_BIT_RADAR_DETECT) | \
- (MACREG_A2HRIC_BIT_CHAN_SWITCH) | \
- (MACREG_A2HRIC_BIT_TX_WATCHDOG) | \
- (MACREG_A2HRIC_BIT_QUEUE_EMPTY) | \
- (MACREG_A2HRIC_BA_WATCHDOG) | \
- (MACREG_A2HRIC_CONSEC_TXFAIL))
-
-#define MACREG_A2HRIC_BIT_MASK ISR_SRC_BITS
-
-/* Bit definitio for MACREG_REG_H2A_INTERRUPT_CAUSE (H2ARIC)
-*/
-#define MACREG_H2ARIC_BIT_PPA_READY 0x00000001 /* bit 0 */
-#define MACREG_H2ARIC_BIT_DOOR_BELL 0x00000002 /* bit 1 */
-#define MACREG_H2ARIC_BIT_PS 0x00000004 /* bit 2 */
-#define MACREG_H2ARIC_BIT_PSPOLL 0x00000008 /* bit 3 */
-#define ISR_RESET BIT(15)
-#define ISR_RESET_AP33 BIT(26)
-
-/* Data descriptor related constants
-*/
-#define EAGLE_RXD_CTRL_DRIVER_OWN 0x00
-#define EAGLE_RXD_CTRL_OS_OWN 0x04
-#define EAGLE_RXD_CTRL_DMA_OWN 0x80
-
-#define EAGLE_RXD_STATUS_IDLE 0x00
-#define EAGLE_RXD_STATUS_OK 0x01
-#define EAGLE_RXD_STATUS_MULTICAST_RX 0x02
-#define EAGLE_RXD_STATUS_BROADCAST_RX 0x04
-#define EAGLE_RXD_STATUS_FRAGMENT_RX 0x08
-
-#define EAGLE_TXD_STATUS_IDLE 0x00000000
-#define EAGLE_TXD_STATUS_USED 0x00000001
-#define EAGLE_TXD_STATUS_OK 0x00000001
-#define EAGLE_TXD_STATUS_OK_RETRY 0x00000002
-#define EAGLE_TXD_STATUS_OK_MORE_RETRY 0x00000004
-#define EAGLE_TXD_STATUS_MULTICAST_TX 0x00000008
-#define EAGLE_TXD_STATUS_BROADCAST_TX 0x00000010
-#define EAGLE_TXD_STATUS_FAILED_LINK_ERROR 0x00000020
-#define EAGLE_TXD_STATUS_FAILED_EXCEED_LIMIT 0x00000040
-#define EAGLE_TXD_STATUS_FAILED_AGING 0x00000080
-#define EAGLE_TXD_STATUS_FW_OWNED 0x80000000
-
-#define EAGLE_TXD_XMITCTRL_USE_RATEINFO 0x1
-#define EAGLE_TXD_XMITCTRL_DISABLE_AMPDU 0x2
-#define EAGLE_TXD_XMITCTRL_ENABLE_AMPDU 0x4
-#define EAGLE_TXD_XMITCTRL_USE_MC_RATE 0x8
-
-#define NBR_BYTES_FW_RX_PREPEND_LEN 2
-#define NBR_BYTES_FW_TX_PREPEND_LEN 2
-
-/* Antenna control
-*/
-#define ANTENNA_TX_4_AUTO 0
-#define ANTENNA_TX_2 3
-#define ANTENNA_RX_4_AUTO 0
-#define ANTENNA_RX_2 2
-
-/* Band related constants
-*/
-#define BAND_24_CHANNEL_NUM 14
-#define BAND_24_RATE_NUM 13
-#define BAND_50_CHANNEL_NUM 24
-#define BAND_50_RATE_NUM 8
-
-/* Misc
-*/
-#define WL_SEC_SLEEP(num_secs) mdelay(num_secs * 1000)
-#define WL_MSEC_SLEEP(num_milli_secs) mdelay(num_milli_secs)
-
-#define ENDIAN_SWAP32(_val) (cpu_to_le32(_val))
-#define ENDIAN_SWAP16(_val) (cpu_to_le16(_val))
-
-#define DECLARE_LOCK(l) spinlock_t l
-#define SPIN_LOCK_INIT(l) spin_lock_init(l)
-#define SPIN_LOCK(l) spin_lock(l)
-#define SPIN_UNLOCK(l) spin_unlock(l)
-#define SPIN_LOCK_IRQSAVE(l, f) spin_lock_irqsave(l, f)
-#define SPIN_UNLOCK_IRQRESTORE(l, f) spin_unlock_irqrestore(l, f)
-
-/* vif and station
-*/
-#define MAX_WEP_KEY_LEN 13
-#define NUM_WEP_KEYS 4
-#define MWL_MAX_TID 8
-#define MWL_VIF(_vif) ((struct mwl_vif *)&((_vif)->drv_priv))
-#define IEEE80211_KEY_CONF(_u8) ((struct ieee80211_key_conf *)(_u8))
-#define MWL_STA(_sta) ((struct mwl_sta *)&((_sta)->drv_priv))
-
-/* TYPE DEFINITION
-*/
-
-enum {
- MWL8864 = 0,
- MWL8897,
- MWLUNKNOWN,
-};
-
-enum {
- AP_MODE_11AC = 0x10, /* generic 11ac indication mode */
- AP_MODE_2_4GHZ_11AC_MIXED = 0x17,
-};
-
-enum {
- AMPDU_NO_STREAM,
- AMPDU_STREAM_NEW,
- AMPDU_STREAM_IN_PROGRESS,
- AMPDU_STREAM_ACTIVE,
-};
-
-enum {
- IEEE_TYPE_MANAGEMENT = 0,
- IEEE_TYPE_CONTROL,
- IEEE_TYPE_DATA
-};
-
-struct mwl_chip_info {
- char *part_name;
- char *fw_image;
-};
-
-struct mwl_tx_pwr_tbl {
- u8 channel;
- u8 setcap;
- u16 tx_power[SYSADPT_TX_POWER_LEVEL_TOTAL];
- u8 cdd; /* 0: off, 1: on */
- u16 txantenna2;
-};
-
-struct mwl_hw_data {
- u32 fw_release_num; /* MajNbr:MinNbr:SubMin:PatchLevel */
- u8 hw_version; /* plain number indicating version */
- u8 host_interface; /* plain number of interface */
- u16 max_num_tx_desc; /* max number of TX descriptors */
- u16 max_num_mc_addr; /* max number multicast addresses */
- u16 num_antennas; /* number antennas used */
- u16 region_code; /* region (eg. 0x10 for USA FCC) */
- unsigned char mac_addr[ETH_ALEN]; /* well known -> AA:BB:CC:DD:EE:FF */
-};
-
-struct mwl_rate_info {
- u32 format:2; /* 0 = Legacy, 1 = 11n, 2 = 11ac */
- u32 stbc:1;
- u32 rsvd1:1;
- u32 bandwidth:2; /* 0 = 20 MHz, 1 = 40 MHz, 2 = 80 MHz */
- u32 short_gi:1; /* 0 = standard guard interval, 1 = short */
- u32 rsvd2:1;
- u32 rate_id_mcs:7;
- u32 preamble_type:1; /* Preambletype 0 = Long, 1 = Short; */
- u32 power_id:6;
- u32 adv_coding:1; /* ldpc */
- u32 bf:1;
- u32 ant_select:8; /* Bitmap to select one of the transmit antenna */
-} __packed;
-
-struct mwl_tx_desc {
- u8 data_rate;
- u8 tx_priority;
- u16 qos_ctrl;
- u32 pkt_ptr;
- u16 pkt_len;
- u8 dest_addr[ETH_ALEN];
- u32 pphys_next;
- u32 sap_pkt_info;
- struct mwl_rate_info rate_info;
- u8 type;
- u8 xmit_control; /* bit 0: use rateinfo, bit 1: disable ampdu */
- u16 reserved;
- u32 tcpack_sn;
- u32 tcpack_src_dst;
- struct sk_buff *psk_buff;
- struct mwl_tx_desc *pnext;
- u8 reserved1[2];
- u8 packet_info;
- u8 packet_id;
- u16 packet_len_and_retry;
- u16 packet_rate_info;
- u8 *sta_info;
- u32 status;
-} __packed;
-
-struct mwl_hw_rssi_info {
- u32 rssi_a:8;
- u32 rssi_b:8;
- u32 rssi_c:8;
- u32 rssi_d:8;
-} __packed;
-
-struct mwl_hw_noise_floor_info {
- u32 noise_floor_a:8;
- u32 noise_floor_b:8;
- u32 noise_floor_c:8;
- u32 noise_floor_d:8;
-} __packed;
-
-struct mwl_rxrate_info {
- u16 format:3; /* 0: 11a, 1: 11b, 2: 11n, 4: 11ac */
- u16 nss:2; /* number space spectrum */
- u16 bw:2; /* 0: ht20, 1: ht40, 2: ht80 */
- u16 gi:1; /* 0: long interval, 1: short interval*/
- u16 rt:8; /* 11a/11b: 1,2,5,11,22,6,9,12,18,24,36,48,54,72*/
-} __packed; /* 11n/11ac: MCS */
-
-struct mwl_rx_desc {
- u16 pkt_len; /* total length of received data */
- struct mwl_rxrate_info rate; /* receive rate information */
- u32 pphys_buff_data; /* physical address of payload data */
- u32 pphys_next; /* physical address of next RX desc */
- u16 qos_ctrl; /* received QosCtrl field variable */
- u16 ht_sig2; /* like name states */
- struct mwl_hw_rssi_info hw_rssi_info;
- struct mwl_hw_noise_floor_info hw_noise_floor_info;
- u8 noise_floor;
- u8 reserved[3];
- u8 rssi; /* received signal strengt indication */
- u8 status; /* status field containing USED bit */
- u8 channel; /* channel this pkt was received on */
- u8 rx_control; /* the control element of the desc */
- /* above are 32bits aligned and is same as FW, RxControl put at end
- * for sync
- */
- struct sk_buff *psk_buff; /* associated sk_buff for Linux */
- void *pbuff_data; /* virtual address of payload data */
- struct mwl_rx_desc *pnext; /* virtual address of next RX desc */
-} __packed;
-
-struct mwl_desc_data {
- dma_addr_t pphys_tx_ring; /* ptr to first TX desc (phys.) */
- struct mwl_tx_desc *ptx_ring; /* ptr to first TX desc (virt.) */
- struct mwl_tx_desc *pnext_tx_desc; /* next TX desc that can be used */
- struct mwl_tx_desc *pstale_tx_desc;/* the staled TX descriptor */
- dma_addr_t pphys_rx_ring; /* ptr to first RX desc (phys.) */
- struct mwl_rx_desc *prx_ring; /* ptr to first RX desc (virt.) */
- struct mwl_rx_desc *pnext_rx_desc; /* next RX desc that can be used */
- unsigned int wcb_base; /* FW base offset for registers */
- unsigned int rx_desc_write; /* FW descriptor write position */
- unsigned int rx_desc_read; /* FW descriptor read position */
- unsigned int rx_buf_size; /* length of the RX buffers */
-} __packed;
-
-struct mwl_locks {
- DECLARE_LOCK(xmit_lock); /* used to protect TX actions */
- DECLARE_LOCK(fwcmd_lock); /* used to protect FW commands */
- DECLARE_LOCK(stream_lock); /* used to protect stream */
-};
-
-struct mwl_ampdu_stream {
- struct ieee80211_sta *sta;
- u8 tid;
- u8 state;
- u8 idx;
-};
-
-struct mwl_priv {
- struct ieee80211_hw *hw;
- const struct firmware *fw_ucode;
- int chip_type;
- struct device_node *dt_node;
- struct device_node *pwr_node;
- bool disable_2g;
- bool disable_5g;
- int antenna_tx;
- int antenna_rx;
- struct mwl_tx_pwr_tbl tx_pwr_tbl[SYSADPT_MAX_NUM_CHANNELS];
- u32 cdd; /* 0: off, 1: on */
- u16 txantenna2;
- u8 powinited;
- u16 max_tx_pow[SYSADPT_TX_POWER_LEVEL_TOTAL]; /* max tx power (dBm) */
- u16 target_powers[SYSADPT_TX_POWER_LEVEL_TOTAL]; /* target powers */
- u8 cal_tbl[200];
- struct pci_dev *pdev;
- void *iobase0; /* MEM Base Address Register 0 */
- void *iobase1; /* MEM Base Address Register 1 */
- u32 next_bar_num;
- unsigned short *pcmd_buf; /* pointer to CmdBuf (virtual) */
- dma_addr_t pphys_cmd_buf; /* pointer to CmdBuf (physical) */
- bool in_send_cmd;
- int irq;
- struct mwl_hw_data hw_data; /* Adapter HW specific info */
- /* various descriptor data */
- struct mwl_desc_data desc_data[SYSADPT_NUM_OF_DESC_DATA];
- struct sk_buff_head txq[SYSADPT_NUM_OF_DESC_DATA];
- struct sk_buff_head delay_q;
- /* number of descriptors owned by fw at any one time */
- int fw_desc_cnt[SYSADPT_NUM_OF_DESC_DATA];
- struct mwl_locks locks; /* various spinlocks */
- struct tasklet_struct tx_task;
- struct tasklet_struct rx_task;
- int txq_limit;
- bool is_tx_schedule;
- int recv_limit;
- bool is_rx_schedule;
- s8 noise; /* Most recently reported noise in dBm */
- struct ieee80211_supported_band band_24;
- struct ieee80211_channel channels_24[BAND_24_CHANNEL_NUM];
- struct ieee80211_rate rates_24[BAND_24_RATE_NUM];
- struct ieee80211_supported_band band_50;
- struct ieee80211_channel channels_50[BAND_50_CHANNEL_NUM];
- struct ieee80211_rate rates_50[BAND_50_RATE_NUM];
- u32 ap_macids_supported;
- u32 sta_macids_supported;
- u32 macids_used;
- struct list_head vif_list; /* List of interfaces. */
- u32 running_bsses; /* bitmap of running BSSes */
- bool radio_on;
- bool radio_short_preamble;
- bool wmm_enabled;
- struct ieee80211_tx_queue_params wmm_params[SYSADPT_TX_WMM_QUEUES];
- /* Ampdu stream information */
- u8 num_ampdu_queues;
- struct mwl_ampdu_stream ampdu[SYSADPT_TX_AMPDU_QUEUES];
- struct work_struct watchdog_ba_handle;
-};
-
-struct beacon_info {
- bool valid;
- u16 cap_info;
- u8 b_rate_set[SYSADPT_MAX_DATA_RATES_G];
- u8 op_rate_set[SYSADPT_MAX_DATA_RATES_G];
- u8 ie_wmm_len; /* Keep WMM IE */
- u8 *ie_wmm_ptr;
- u8 ie_rsn_len; /* Keep WPA IE */
- u8 *ie_rsn_ptr;
- u8 ie_rsn48_len; /* Keep WPA2 IE */
- u8 *ie_rsn48_ptr;
- u8 ie_ht_len; /* Keep HT IE */
- u8 *ie_ht_ptr;
- u8 ie_list_ht[148];
- u8 ie_vht_len; /* Keep VHT IE */
- u8 *ie_vht_ptr;
- u8 ie_list_vht[24];
-};
-
-struct mwl_vif {
- struct list_head list;
- struct ieee80211_vif *vif;
- int macid; /* Firmware macid for this vif. */
- u16 seqno; /* Non AMPDU sequence number assigned by driver. */
- struct { /* Saved WEP keys */
- u8 enabled;
- u8 key[sizeof(struct ieee80211_key_conf) + MAX_WEP_KEY_LEN];
- } wep_key_conf[NUM_WEP_KEYS];
- u8 bssid[ETH_ALEN]; /* BSSID */
- u8 sta_mac[ETH_ALEN]; /* Station mac address */
- /* A flag to indicate is HW crypto is enabled for this bssid */
- bool is_hw_crypto_enabled;
- /* Indicate if this is station mode */
- bool is_sta;
- struct beacon_info beacon_info;
- u16 iv16;
- u32 iv32;
- s8 keyidx;
-};
-
-struct mwl_tx_info {
- u32 start_time;
- u32 pkts;
-};
-
-struct mwl_sta {
- u8 is_ampdu_allowed;
- struct mwl_tx_info tx_stats[MWL_MAX_TID];
- u16 iv16;
- u32 iv32;
-};
-
-/* DMA header used by firmware and hardware.
-*/
-struct mwl_dma_data {
- u16 fwlen;
- struct ieee80211_hdr wh;
- char data[0];
-} __packed;
-
-/* Transmission information to transmit a socket buffer.
- */
-struct mwl_tx_ctrl {
- u8 tx_priority;
- u16 qos_ctrl;
- u8 type;
- u8 xmit_control;
- u8 *sta_info;
- bool ccmp;
-} __packed;
-
-#endif /* _mwl_dev_h_ */