| /* |
| * Copyright (c) 2011 Quantenna Communications, Inc. |
| */ |
| |
| /* |
| * This file contains host definitions which are common between the |
| * host driver and the microcontroller/MAC code. |
| */ |
| #ifndef _LHOST_MUC_COMM_H |
| #define _LHOST_MUC_COMM_H |
| |
| #include "qtn_uc_comm.h" |
| #include "qtn_cca.h" |
| #include "qtn_wmm_ac.h" |
| #include "net80211/ieee80211.h" |
| #include "net80211/ieee80211_crypto.h" |
| #include "muc_txrx_stats.h" |
| #include "qtn/qvsp_common.h" |
| #include "qtn/shared_defs.h" |
| |
| /* packed definitions for each compiler */ |
| #if defined(MUC_BUILD) || defined(DSP_BUILD) || defined(AUC_BUILD) |
| # define PACKED __packed |
| # define LM(a,b) (b) |
| # define lhost_volatile |
| # define muc_volatile volatile |
| #else |
| # define PACKED __attribute__ ((packed)) |
| # define LM(a,b) (a) |
| # define lhost_volatile volatile |
| # define muc_volatile |
| #endif // #if defined(MUC_BUILD) || defined(DSP_BUILD) || defined(AUC_BUILD) |
| |
| #define HOST_TXD_NUMSEG 2 |
| |
| #define QTN_BBIC_11N 0x30 |
| #define QTN_BBIC_11AC 0x40 |
| |
| #define QTN_VSP_STATS_TID_NUM 4 |
| |
| #define QTN_VSP_TIDS { 6, 5, 0, 1 } |
| #define QTN_VSP_STATS_TID2IDX {0, 1, -1, -1, -1, 2, 3, -1} /* make sure no tids using same index */ |
| |
| struct qtn_vsp_per_node_stats { |
| struct qtn_per_tid_stats per_tid_stats[QTN_VSP_STATS_TID_NUM]; |
| }; |
| |
| struct qtn_vsp_stats { |
| #define QVSP_FAT_MAX 1000 |
| #define QVSP_FAT_NONE ((uint32_t)(-1)) |
| uint32_t fat; /* free airtime */ |
| uint32_t intf_ms; /* interference */ |
| #if TOPAZ_QTM |
| struct qtn_vsp_per_node_stats per_node_stats[QTN_NCIDX_MAX]; |
| #endif |
| }; |
| |
| /** |
| * \brief This enumeration represents the mode in use on the device. |
| * |
| * This enumeration is used to set the correct bandwidth. |
| */ |
| |
| enum { |
| QTN_11NAC_DISABLE = 0, |
| QTN_11NAC_ENABLE = 1, |
| }; |
| |
| /* Host tx descriptor */ |
| struct host_txdesc { |
| uint32_t hd_version:8; /* Descriptor version */ |
| uint32_t hd_tid:4; /* packet tid */ |
| uint32_t hd_txstatus:2; /* Transmit status: 1 sent to MuC, 2 tx success */ |
| #define QTN_TXSTATUS_TX_ON_MUC 1 |
| #define QTN_TXSTATUS_TX_SUCCESS 2 |
| uint32_t hd_wmmac:2; /* Reserved for WMM AC*/ |
| uint32_t hd_pktlen:16; /* Pkt len (incl. all headers) */ |
| uint32_t hd_node_idx; /* local node index */ |
| uint16_t hd_seglen[HOST_TXD_NUMSEG]; /* Segment lenghts */ |
| uint32_t hd_segaddr[HOST_TXD_NUMSEG]; /* Phys addr of each seg */ |
| uint32_t hd_ts; /* Timestamp of the pkt */ |
| uint32_t hd_nextpa; /* Phys addr of next host tx descr in fwd dir */ |
| uint32_t hd_nextpa_rev; /* Phys addr of next host tx descr in rev dir */ |
| void *hd_nextva_rev; /* Virtual addr (LHOST view) of next host tx descr in rev dir */ |
| uint32_t hd_pa; /* Physical addr of this host tx descr */ |
| void *hd_va; /* Virtual addr (LHOST view) of this host tx descr */ |
| uint32_t hd_status; /* Status of HTxD */ |
| void (*hd_muc_txdone_cb)(void *, uint32_t, uint32_t); /* MuC callback after txdone */ |
| uint32_t hd_muc_cb_arg1; /* parameter for hd_muc_txdone_cb */ |
| uint32_t hd_muc_cb_arg2; /* parameter for hd_muc_txdone_cb */ |
| uint32_t hd_txtsf; /* record the tsf_lo on that frame was sent successfully */ |
| uint8_t hd_mpdu[128]; |
| uint8_t hd_msdu[128]; |
| uint8_t hd_dma[128]; |
| #define HTXD_FLAG_AMSDU_DEST_CAPABLE 0x00000002 /* Can be used for AMSDU destination (append to) */ |
| #define HTXD_FLAG_AMSDU_SRC_CAPABLE 0x00000004 /* Can be used for AMSDU (copy from) */ |
| #define HTXD_FLAG_NO_UPDATE_NAV 0x00000008 /* Don't update NAV for this frame */ |
| #define HTXD_FLAG_NO_RETRY 0x00000010 /* Don't retry this frame if tx failed */ |
| #define HTXD_FLAG_NO_RETURN 0x00000020 /* Don't return txdesc from MuC to lhost */ |
| #define HTXD_FLAG_IMM_RETURN 0x00000040 /* Immediately return txdesc from Muc to lhost */ |
| uint32_t hd_flags; |
| }; |
| |
| #define QTN_AMSDU_DEST_CAPABLE_SIZE ETHER_MAX_LEN |
| #define QTN_AMSDU_DEST_CAPABLE_GUARD_SIZE 64 |
| #define QTN_AMSDU_SRC_FRAME_SIZE (QTN_AMSDU_DEST_CAPABLE_SIZE / 10) |
| #define QTN_AMSDU_DEST_CAPABLE_OCCUPY_SIZE (QTN_AMSDU_DEST_CAPABLE_SIZE / 3 * 2) |
| |
| #define HTXD_FLAG_SET(_htxd, _flag) \ |
| (((struct host_txdesc *)(_htxd))->hd_flags |= (_flag)) |
| #define HTXD_FLAG_CLR(_htxd, _flag) \ |
| (((struct host_txdesc *)(_htxd))->hd_flags &= ~(_flag)) |
| #define HTXD_FLAG_GET(_htxd, _flag) \ |
| (((struct host_txdesc *)(_htxd))->hd_flags & (_flag)) |
| #define HTXD_FLAG_ISSET(_htxd, _flag) \ |
| (!!(((struct host_txdesc *)(_htxd))->hd_flags & (_flag))) |
| #define HTXD_FLAG_KEEP_ONLY(_htxd, _flag) \ |
| (((struct host_txdesc *)(_htxd))->hd_flags &= (_flag)) |
| |
| |
| /* host_ioctl_hifinfo */ |
| |
| #define NAMESIZE 16 |
| #define VERSION_SIZE 16 |
| #define MAC_ADDR_LEN 6 |
| #define MAC_STR_BUF_SIZE 18 |
| |
| #define HOST_NUM_IOCTLQ 1 /* Number of ioctl q's */ |
| /* |
| * LHost -> MuC TX queues are per node to allow variable backpressure per node. |
| * One universal management data frame tx mailbox, and one ioctl mailbox |
| */ |
| #define HOST_NUM_MGMTQ 1 |
| #define HOST_NUM_DATAQ (QTN_NCIDX_MAX) |
| #define HOST_NUM_DATASEM 1 |
| |
| #define HOST_IOCTL_INDEX_BASE 0 |
| #define HOST_MGMT_INDEX_BASE (HOST_IOCTL_INDEX_BASE + HOST_NUM_IOCTLQ) |
| #define HOST_DATA_INDEX_BASE (HOST_MGMT_INDEX_BASE + HOST_NUM_MGMTQ) |
| #define HOST_NUM_HOSTIFQ (HOST_NUM_DATAQ + HOST_NUM_IOCTLQ + HOST_NUM_MGMTQ) |
| #define HOST_MBOX_SIZE (sizeof(uint32_t) * HOST_NUM_HOSTIFQ) |
| |
| #define QTN_PHY_RATE_PROP_SCALE 1024 |
| #define QTN_MUC_NODE_PKT_LIMIT_MIN 16 |
| #define QTN_MUC_NODE_PKT_LIMIT_DEFAULT 64 |
| #define QTN_MUC_NODE_PKT_LIMIT_MAX 128 |
| |
| #define IEEE80211_TXPOW_ENCODE(x) ((255 * 65536) + (x * 256) + 1) |
| #define IEEE80211_TXPOW_DECODE(x) (((x) - (255 * 65536) - 1) / 256) |
| #define RF_MIXER_VAL_HI 0x1 |
| #define RF_MIXER_VAL_LO 0x7 |
| #define RF_PGA_VAL_HI 0x3 |
| #define RF_PGA_VAL_LO 0x0 |
| #define IEEE80211_LOWGAIN_TXPOW_MAX 10 |
| #define IEEE80211_LOWGAIN_TXPOW_MIN 9 |
| |
| #define IEEE80211_CHAN_SEC_SHIFT 4 |
| #define IEEE80211_24G_CHAN_SEC_SHIFT 1 |
| |
| struct host_ioctl_hifinfo { |
| uint32_t hi_mboxstart; /* Start address for mbox */ |
| uint32_t hi_rxdoneirq; /* IRQ map for rx done */ |
| uint32_t hi_txdoneirq; /* IRQ map for tx done */ |
| uint32_t hi_rxfifo; /* Rx FIFO location */ |
| uint32_t hi_scanirq; /* IRQ map for Scan */ |
| uint32_t hi_scanfifo; /* Scan FIFO location */ |
| uint32_t hi_dspgpios; |
| uint32_t hi_vsp_stats_phys; |
| uint32_t hi_vapnode_idx; /* node_idx of the vap node for tx */ |
| uint8_t hi_vapid; |
| char hi_name[NAMESIZE]; /* Device name */ |
| char hi_version[VERSION_SIZE]; /* basic firmware version */ |
| char hi_algover[VERSION_SIZE]; /* calibration algorithm version */ |
| uint8_t hi_macaddr[MAC_ADDR_LEN]; |
| uint8_t hi_semmap[HOST_NUM_HOSTIFQ]; /* Mapping of semaphores */ |
| }; |
| |
| typedef int (*scan_done_fn)(int sc_devid, void *chan, int type, int status); |
| |
| struct host_scandesc { |
| uint8_t sd_type; |
| uint8_t sd_devid; |
| uint8_t status; |
| uint8_t ____pad; |
| uint8_t* sd_data; |
| scan_done_fn *sd_ppfn; |
| struct host_scandesc *sd_next; |
| }; |
| |
| struct host_rxdesc { |
| uint8_t hw_desc[128]; /* need to be aligned on 8 bytes */ |
| uint8_t *skbuff; |
| uint8_t *rd_buffer; |
| uint32_t rs_statword; |
| struct host_rxdesc *rd_next; |
| struct host_rxdesc *rd_pa; |
| struct host_rxdesc *rd_va; |
| void *node; /* Where the frame was from */ |
| uint8_t gain_db; |
| }; |
| |
| struct host_descfifo { |
| struct host_rxdesc *df_fifo; /* Pointer to first descriptor in linked list */ |
| volatile uint32_t df_numelems; /* Num elems on fifo */ |
| volatile uint32_t df_size; /* Size of fifo */ |
| struct host_rxdesc * volatile hrdstart; /* the ptr to the host_rxdesc linked list ready for indication */ |
| }; |
| |
| struct host_scanfifo { |
| uint32_t sf_req; /* Pointer to request mailbox */ |
| uint32_t sf_res; /* Pointer to result mailbox */ |
| uint8_t sf_sem; /* Semaphore for Scan fifo */ |
| uint8_t tx_sem; /* Semaphore for Scan fifo */ |
| uint8_t ____pad[2]; |
| }; |
| |
| struct host_rxfifo { |
| struct host_descfifo *rf_fifo; /* Data Descriptor fifo */ |
| uint8_t rf_sem; /* Semaphore for rx fifo */ |
| uint8_t ____pad[3]; |
| }; |
| |
| struct host_ndp_mesg { |
| uint8_t macaddr_ta[6]; |
| uint8_t bw; |
| uint8_t rxgain; |
| uint8_t mcs; |
| uint8_t ____pad[3]; |
| }; |
| |
| |
| struct host_ioctl { |
| lhost_volatile uint32_t ioctl_dev; /* Device to run IOCTL on */ |
| lhost_volatile uint32_t ioctl_command; /* Command type */ |
| lhost_volatile uint32_t ioctl_arg1; /* Single valued arg 1 */ |
| lhost_volatile uint32_t ioctl_arg2; /* Single valued arg 2 */ |
| volatile uint32_t ioctl_argp; /* Argument payload pointer */ |
| volatile uint32_t ioctl_status; /* Status from other side */ |
| volatile uint32_t ioctl_rc; /* Command return code */ |
| lhost_volatile struct host_ioctl *ioctl_next; /* link to next msg in chain */ |
| }; |
| |
| struct qtn_vap_args { |
| char vap_name[17]; |
| uint8_t vap_id; |
| uint8_t vap_macaddr[IEEE80211_ADDR_LEN]; |
| }; |
| |
| struct qtn_setparams_args |
| { |
| int ni_param; |
| int ni_value; |
| int ni_len; |
| unsigned char ni_data[64]; |
| }; |
| |
| struct qtn_baparams_args { |
| unsigned char ni_addr[8]; |
| enum ieee80211_ba_state state; |
| int tid; |
| int type; |
| int start_seq_num; |
| int window_size; |
| int lifetime; |
| uint16_t flags; |
| }; |
| |
| #define QTN_HLINK_RC_DONE 0x00000001 |
| #define QTN_HLINK_RC_ERR 0x00000002 |
| #define QTN_HLINK_STATUS_AVAIL 1 |
| |
| #define IOCTL_DEV_VAPCREATE 4 /* Create a vap */ |
| #define IOCTL_DEV_DEVOPEN 5 /* Bring the device up */ |
| #define IOCTL_DEV_BEACON_START 6 /* Start Beacon */ |
| #define IOCTL_DEV_NEWASSOC 7 /* New associated node */ |
| #define IOCTL_DEV_NEWBSSID 8 /* New associated node */ |
| #define IOCTL_DEV_SEND_NDP_ANNOUNCEMENT 10 /* Send NDP announcement */ |
| #define IOCTL_DEV_SETPARAMS 11 /* Configure Parameters */ |
| #define IOCTL_DEV_GETPARAMS 12 /* Configure Parameters */ |
| #define IOCTL_DEV_BA_ADDED_TX 13 |
| #define IOCTL_DEV_BA_ADDED_RX 14 |
| #define IOCTL_DEV_BA_REMOVED_TX 15 |
| #define IOCTL_DEV_BA_REMOVED_RX 16 |
| #define IOCTL_DEV_CHANGE_CHANNEL 17 |
| #define IOCTL_DEV_SETKEY 18 |
| #define IOCTL_DEV_CALCMD 19 /* Send the cal cmd */ |
| #define IOCTL_DEV_DELKEY 20 |
| #define IOCTL_DEV_CMD 21 /* General commands */ |
| #define IOCTL_DEV_DISASSOC 22 /* Configure node */ |
| #define IOCTL_DEV_SMPS 23 /* MIMO power save mode change */ |
| #define IOCTL_DEV_FORCEMICERROR 24 |
| #define IOCTL_DEV_SET_SCANMODE 25 |
| #define IOCTL_DEV_XMITCTL 26 /* transmission control (turning on or off) */ |
| #define IOCTL_DEV_BEACON_STOP 27 /* Stop transmitting beacons */ |
| #define IOCTL_DEV_SET_MACADDR 30 |
| #define IOCTL_DEV_KILL_MUC 31 |
| #define IOCTL_DEV_DUMP_LOG 32 |
| #define IOCTL_DEV_SET_HRFLAGS 33 |
| #define IOCTL_DEV_SAMPLE_CHANNEL 34 |
| #define IOCTL_DEV_CHANGE_CHAN_DEFERRED 35 |
| #define IOCTL_DEV_WMM_PARAMS 36 |
| #define IOCTL_DEV_VAPDELETE 37 /* Delete a vap */ |
| #define IOCTL_DEV_STORE_TXPOW 38 /* Store the Tx power, short-range workaround*/ |
| #define IOCTL_DEV_USE_RTS_CTS 39 /* Enable-disable RTS-CTS */ |
| #define IOCTL_DEV_RST_QUEUE_DEPTH 40 |
| #define IOCTL_DEV_SET_POWER_SAVE 41 /* send request to MuC to change power save level */ |
| #define IOCTL_DEV_VSP 42 /* Configure QVSP */ |
| #define IOCTL_DEV_SET_11G_ERP 43 /* set 11bg ERP on/off */ |
| #define IOCTL_DEV_BGSCAN_CHANNEL 44 |
| #define IOCTL_DEV_SET_OCAC 46 |
| #define IOCTL_DEV_MEAS_CHANNEL 47 /* notify MUC to execute measurement */ |
| #define IOCTL_DEV_GET_LINK_MARGIN_INFO 48 /* get rssi info */ |
| #define IOCTL_DEV_SET_TDLS_PARAM 49 /* set tdls related paramters */ |
| #define IOCTL_DEV_GET_TDLS_PARAM 50 /* set tdls related paramters */ |
| #define IOCTL_DEV_POWER_SAVE 51 /* enter/leave power save state */ |
| #define IOCTL_DEV_REMAIN_CHANNEL 52 /* Remain on target channel */ |
| #define IOCTL_DEV_SCS_UPDATE_SCAN_STATS 53 |
| #define IOCTL_DEV_SET_SCANMODE_STA 54 |
| #define IOCTL_DEV_GET_MU_GRP 55 /* get MU groups other releated data */ |
| #define IOCTL_DEV_SET_RX_GAIN_PARAMS 56 /* Set RX gain params */ |
| #define IOCTL_DEV_GET_MU_ENABLE 57 /* get MU enable flag */ |
| #define IOCTL_DEV_GET_PRECODE_ENABLE 58 /* get MU precode enable flag */ |
| #define IOCTL_DEV_GET_MU_USE_EQ 59 /* get EQ enable flag */ |
| #define IOCTL_DEV_SET_CHAN_POWER_TABLE 60 /* Set MuC power table */ |
| #define IOCTL_DEV_ENABLE_VLAN 61 /* Set Global Vlan mode */ |
| #define IOCTL_DEV_NODE_UPDATE 62 /* Update node information again after association */ |
| #define IOCTL_DEV_AIRTIME_CONTROL 63 /* control node tx airtime accumulation start|stop */ |
| #define IOCTL_DEV_SUSPEND_OFF_CHANNEL 64 /* suspend/resume all off-channel mechanisms globally */ |
| |
| #define IOCTL_DEV_CMD_MEMDBG_DUMP 1 /* Dump MuC memory */ |
| #define IOCTL_DEV_CMD_MEMDBG_DUMPCFG 2 /* Configuration for dumping MuC memory */ |
| #define IOCTL_DEV_CMD_MEMDBG_DUMPNODES 3 /* Configuration for dumping MuC nodes */ |
| #define IOCTL_DEV_CMD_SET_DRV_DBG 4 /* Set MUC debug message level*/ |
| #define IOCTL_DEV_CMD_GET_DRV_DBG 5 /* Get MUC debug message level*/ |
| #define IOCTL_DEV_CMD_RF_REG_DUMP 6 /* Dump Rfic6 write fegister */ |
| |
| #define IOCTL_DEVATTACH_DEVFLAG_MASK 0xFFFF0000 |
| #define IOCTL_DEVATTACH_DEVFLAG_MASK_S 16 |
| #define IOCTL_DEVATTACH_DEVID_MASK 0x000000FF |
| #define IOCTL_DEVATTACH_DEV_RFCHIP_FREQID_MASK 0x00000F00 |
| #define IOCTL_DEVATTACH_DEV_RFCHIP_FREQID_MASK_S 8 |
| #define IOCTL_DEVATTACH_DEV_RFCHIP_VERID_MASK 0x0000F000 |
| #define IOCTL_DEVATTACH_DEV_RFCHIP_VERID_MASK_S 12 |
| #define IOCTL_DEVATTACH_IRQNUM 0x000000FF |
| #define IOCTL_DEVATTACH_IRQREG 0x00000F00 |
| #define IOCTL_DEVATTACH_IRQREG_S 8 |
| #define IOCTL_DEVATTACH_NMBOX_MASK 0x000000FF |
| |
| #define QTN_CHAN_IEEE (0xFF << 0) |
| #define QTN_CHAN_IEEE_S (0) |
| #define QTN_CHAN_PWR (0xFF << 8) |
| #define QTN_CHAN_PWR_S (8) |
| |
| #define QTNCHAN_TO_IEEENUM(chan) (MS(chan, QTN_CHAN_IEEE)) |
| |
| #define QTN_CHAN_FLG_DFS 0x20000000 |
| #define QTN_CHAN_FLG_HT40 0x40000000 |
| #define QTN_CHAN_FLG_PRI_HI 0x80000000 |
| #define QTN_CHAN_FLG_RSV01 0x01000000 |
| #define QTN_CHAN_FLG_RSV02 0x02000000 |
| #define QTN_CHAN_FLG_RSV04 0x04000000 |
| #define QTN_CHAN_FLG_RSV08 0x08000000 |
| #define QTN_CHAN_FLG_RSV10 0x10000000 |
| |
| #define QTN_CHAN_FLG_VHT80 0x00800000 |
| |
| #define QTN_BAND_FREQ (0xFF << 0) |
| #define QTN_BAND_FREQ_S (0) |
| |
| #define IOCTL_HLINK_DEVATTACH 1 /* Attach device */ |
| #define IOCTL_HLINK_DEVDETACH 2 /* Detach device */ |
| #define IOCTL_HLINK_DEVCHANGE 3 /* Change device state/flags */ |
| #define IOCTL_HLINK_LOGATTACH 4 /* Attach Log */ |
| #define IOCTL_HLINK_TEMP_ATTACH 5 /* Share temperature struct */ |
| #define IOCTL_HLINK_SVCERRATTACH 6 /* Attach svcerr */ |
| #define IOCTL_HLINK_RTNLEVENT 7 /* RTNL event */ |
| #define IOCTL_HLINK_NDP_FRAME 8 /* NDP frame */ |
| #define IOCTL_HLINK_FOPS_REQ 9 /* Recv File I/O req */ |
| #define IOCTL_HLINK_MIC_ERR 10 /* TKIP MIC failure detected */ |
| #define IOCTL_HLINK_BOOTED 11 /* MuC boot complete */ |
| #define IOCTL_HLINK_DROP_BA 12 /* drop BA */ |
| #define IOCTL_HLINK_DISASSOC_STA 13 /* disassociate station with a given aid */ |
| #define IOCTL_HLINK_RFIC_CAUSED_REBOOT 14 /* detected RFIC abnormal reset, reboot the system */ |
| #define IOCTL_HLINK_BA_ADD_START 15 /* start Tx ADDBA REQ sequence */ |
| #define IOCTL_HLINK_PEER_RTS 16 /* Peer RTS enable or disable */ |
| #define IOCTL_HLINK_DYN_WMM 17 /* Dynamic WMM enable or disable */ |
| #define IOCTL_HLINK_TDLS_EVENTS 18 /* TDLS Events from MuCfw */ |
| #define IOCTL_HLINK_RATE_TRAIN 19 /* Per-node rate training hash */ |
| |
| enum { |
| BW_INVALID = 0, |
| BW_HT20 = 20, |
| BW_HT40 = 40, |
| BW_HT80 = 80, |
| BW_HT160 = 160 |
| }; |
| |
| /* Fixed bw command offset */ |
| #define QTN_BW_FIXED_BW 0x3 |
| #define QTN_BW_FIXED_BW_S 0 |
| #define QTN_BW_FIXED_EN 0x10 |
| #define QTN_BW_FIXED_EN_S 4 |
| |
| struct qtn_csa_info { |
| uint64_t req_tsf; /* aim to change channels at this tsf */ |
| uint64_t switch_tsf; /* tsf just after channel change completed */ |
| uint32_t pre_notification_tu; /* pre-switch notification to lhost in TU */ |
| uint32_t post_notification_tu; /* post channel change notification */ |
| uint32_t freq_band; /* freqency band info */ |
| uint32_t channel; /* channel to switch to */ |
| |
| #define QTN_CSA_STATUS_MUC_SCHEDULED 0x00000001 |
| #define QTN_CSA_STATUS_MUC_ERROR_SCHED 0x00000010 |
| #define QTN_CSA_STATUS_MUC_PRE 0x00000002 |
| #define QTN_CSA_STATUS_MUC_SWITCHED 0x00000004 |
| #define QTN_CSA_STATUS_MUC_POST 0x00000008 |
| #define QTN_CSA_STATUS_MUC_ERROR_SW 0x00000010 |
| #define QTN_CSA_STATUS_MUC_CANCELLED 0x00000020 |
| #define QTN_CSA_STATUS_MUC_COMPLETE 0x00000040 |
| uint32_t muc_status; /* status written by MuC */ |
| |
| #define QTN_CSA_RESTART_QUEUE 0x00000001 |
| #define QTN_CSA_STATUS_LHOST_PRE_DONE 0x00000002 |
| #define QTN_CSA_STATUS_LHOST_SWITCH_DONE 0x00000004 |
| #define QTN_CSA_STATUS_LHOST_POST_DONE 0x00000008 |
| #define QTN_CSA_CANCEL 0x00000010 |
| #define QTN_CSA_STATUS_LHOST_ACTIVE 0x00000020 |
| #define QTN_CSA_STATUS_LHOST_UNITS_OFFSET 0x00000040 |
| uint32_t lhost_status; /* flags written by lhost */ |
| }; |
| |
| #define MEAS_RPI_HISTOGRAM_SIZE 8 |
| |
| enum meas_reason { |
| QTN_MEAS_REASON_SUCC = 0, |
| QTN_MEAS_REASON_OFF_CHANNEL_UNSUPPORT, |
| QTN_MEAS_REASON_DURATION_TOO_SHORT, |
| QTN_MEAS_REASON_TIMER_SCHED_FAIL, |
| QTN_MEAS_REASON_TYPE_UNSUPPORT, |
| QTN_MEAS_REASON_MAX, |
| }; |
| |
| enum meas_type { |
| QTN_MEAS_TYPE_BASIC = 0, |
| QTN_MEAS_TYPE_CCA, |
| QTN_MEAS_TYPE_RPI, |
| QTN_MEAS_TYPE_CHAN_LOAD, |
| QTN_MEAS_TYPE_NOISE_HIS, |
| QTN_MEAS_TYPE_MAX, |
| }; |
| |
| struct meas_time_slice { |
| uint32_t meas_slice; /* time slice */ |
| uint32_t meas_time_pri; /* prime time count based on meas_slice */ |
| uint32_t meas_time_sec; /* secondary time count based on meas_slice */ |
| }; |
| |
| struct qtn_meas_chan_info { |
| uint32_t work_channel; /* working channel to return to */ |
| int32_t meas_type; /* measurement type */ |
| int32_t meas_reason; /* measurement reason */ |
| struct meas_time_slice time_slice; /* time slice for measurement long duration */ |
| uint32_t meas_channel; |
| uint64_t meas_start_tsf; |
| uint32_t meas_dur_ms; |
| union { |
| struct { |
| uint32_t cca_busy_cnt; |
| uint32_t cca_try_cnt; |
| uint32_t cca_try_ms; |
| uint32_t cca_busy_ms; |
| } cca_and_chanload; |
| uint8_t rpi_counts[MEAS_RPI_HISTOGRAM_SIZE]; |
| int32_t basic_radar_num; |
| uint8_t basic; |
| } inter_data; |
| }; |
| |
| enum scs_lot_tsf_pos { |
| SCS_LOG_TSF_POS_LHOST_TASK_KICKOFF, |
| SCS_LOG_TSF_POS_LHOST_IOCTL2MUC, |
| SCS_LOG_TSF_POS_MUC_POLL_IOCTL_FROM_LHOST, |
| SCS_LOG_TSF_POS_MUC_QOSNULL_SENT, |
| SCS_LOG_TSF_POS_MUC_SMPL_START_BEFORE_CHAN_CHG, |
| SCS_LOG_TSF_POS_MUC_SMPL_START_AFTER_CHAN_CHG, |
| SCS_LOG_TSF_POS_MUC_SMPL_FINISH_BEFORE_CHAN_CHG, |
| SCS_LOG_TSF_POS_MUC_SMPL_FINISH_AFTER_CHAN_CHG, |
| SCS_LOG_TSF_POS_LHOST_CCA_INTR, |
| SCS_LOG_TSF_POS_LHOST_CCA_WORK, |
| SCS_LOG_TSF_POS_NUM |
| }; |
| |
| #define IEEE80211_SCS_LOG_TSF(_ic, _sample, _pos) ((_ic)->ic_get_tsf(&((_sample)->tsf[(_pos)]))) |
| #define QDRV_SCS_LOG_TSF(_sample, _pos) (hal_get_tsf(&((_sample)->tsf[(_pos)]))) |
| #define MUC_SCS_LOG_TSF(_qh, _sample, _pos) (hal_get_tsf((_qh), &((_sample)->tsf[(_pos)]))) |
| |
| struct qtn_samp_chan_info { |
| struct out_cca_info result; /* results structure for CCA measurement */ |
| uint32_t freq_band; |
| uint32_t samp_channel; /* The channel on which sample will be taken */ |
| uint32_t duration_msecs; /* Duration in milliseconds to stay on off channel */ |
| uint64_t start_tsf; /* tsf at which to start sampling */ |
| |
| #define QTN_CCA_STATUS_IDLE 0x0 |
| #define QTN_CCA_STATUS_HOST_IOCTL_SENT 0x1 |
| #define QTN_CCA_STATUS_MUC_SCHEDULED 0x2 |
| #define QTN_CCA_STATUS_MUC_STARTED 0x3 |
| #define QTN_CCA_STATUS_MUC_COMPLETE 0x4 |
| #define QTN_CCA_STATUS_MUC_CANCELLED 0x5 |
| uint32_t status; |
| |
| #define QTN_CCA_TYPE_BACKGROUND 0x1 |
| #define QTN_CCA_TYPE_DIRECTLY 0x2 |
| uint32_t type; |
| |
| uint32_t qosnull_txdesc_host; /* qosnull frame for channel sampling */ |
| uint32_t qosnull_txdesc_bus; /* qosnull frame in phyaddr */ |
| uint16_t qosnull_frame_len; /* the frame length of qosnull */ |
| uint16_t tx_node_idx; /* the node index that qosnull frame to */ |
| uint32_t qosnull_txtsf; /* the tsf_lo read from MAC on that qosnull frame was sent successfully */ |
| uint32_t qosnull_nav; /* the large NAV in qosnull frame */ |
| uint64_t tsf[SCS_LOG_TSF_POS_NUM]; /* timestamps used for precise time control and profiling */ |
| }; |
| |
| #define QTN_SCS_ASSOC_STA_MAX 12 |
| |
| struct qtn_scs_vsp_node_stats { |
| uint32_t ni_associd; |
| uint32_t tx_usecs; |
| uint32_t rx_usecs; |
| }; |
| |
| struct qtn_scs_vsp_info { |
| uint32_t num_of_assoc; |
| struct qtn_scs_vsp_node_stats scs_vsp_node_stats[QTN_SCS_ASSOC_STA_MAX]; |
| }; |
| |
| struct qtn_scs_scan_info { |
| uint32_t bw_sel; |
| uint32_t cca_idle; |
| uint32_t cca_busy; |
| uint32_t cca_tx; |
| uint32_t cca_intf; |
| uint32_t cca_try; |
| uint32_t bcn_rcvd; |
| uint32_t crc_err; |
| uint32_t lpre_err; |
| uint32_t spre_err; |
| }; |
| |
| #define QTN_SCS_MAX_OC_INFO 32 |
| struct qtn_scs_oc_info { |
| uint32_t off_channel; |
| uint32_t off_chan_bw_sel; |
| uint32_t off_chan_cca_busy; |
| uint32_t off_chan_cca_sample_cnt; |
| uint32_t off_chan_cca_try_cnt; |
| uint32_t off_chan_beacon_recvd; |
| uint32_t off_chan_crc_errs; |
| uint32_t off_chan_sp_errs; |
| uint32_t off_chan_lp_errs; |
| }; |
| /* Smart channel selection data shared between Lhost and MuC */ |
| struct qtn_scs_info { |
| uint32_t oc_info_count; |
| struct qtn_scs_oc_info oc_info[QTN_SCS_MAX_OC_INFO]; |
| uint32_t bw_sel; |
| uint32_t cca_try; |
| uint32_t cca_busy; |
| uint32_t cca_idle; |
| uint32_t cca_tx; |
| uint32_t cca_interference; |
| uint32_t beacon_recvd; |
| uint32_t tx_usecs; |
| uint32_t rx_usecs; |
| struct qtn_scs_vsp_info scs_vsp_info; |
| }; |
| |
| struct qtn_scs_info_set { |
| uint32_t valid_index; /* 0 or 1 */ |
| struct qtn_scs_info scs_info[2]; |
| struct qtn_scs_scan_info scan_info[IEEE80211_CHAN_MAX]; |
| }; |
| |
| struct qtn_remain_chan_info { |
| uint32_t chipid; |
| uint32_t data_channel; /* Data channel to return to */ |
| uint32_t off_channel; /* The required remain channel */ |
| uint32_t duration_usecs; /* Duration in microseconds to stay on remain channel */ |
| uint64_t start_tsf; /* tsf at which to switch to remain channel */ |
| |
| #define QTN_REM_CHAN_STATUS_IDLE 0x0 |
| #define QTN_REM_CHAN_STATUS_HOST_IOCTL_SENT 0x1 |
| #define QTN_REM_CHAN_STATUS_MUC_SCHEDULED 0x2 |
| #define QTN_REM_CHAN_STATUS_MUC_STARTED 0x3 |
| #define QTN_REM_CHAN_STATUS_MUC_COMPLETE 0x4 |
| #define QTN_REM_CHAN_STATUS_MUC_CANCELLED 0x5 |
| uint32_t status; /* channel switch status */ |
| |
| uint8_t peer_mac[IEEE80211_ADDR_LEN]; /* peer node mac address */ |
| }; |
| |
| |
| #define QTN_CCA_CNT2MS(_cnt) RUBY_TIMER_MUC_CCA_CNT2MS(_cnt) |
| #define QTN_CCA_INTV RUBY_TIMER_MUC_CCA_INTV |
| |
| enum scan_chan_tsf_pos { |
| SCAN_CHAN_TSF_LHOST_HOSTLINK_IOCTL = 0, |
| SCAN_CHAN_TSF_MUC_IOCTL_PROCESS, |
| SCAN_CHAN_TSF_MUC_SEND_START_FRM, |
| SCAN_CHAN_TSF_MUC_SEND_START_FRM_DONE, |
| SCAN_CHAN_TSF_MUC_GOTO_OFF_CHAN, |
| SCAN_CHAN_TSF_MUC_GOTO_OFF_CHAN_DONE, |
| SCAN_CHAN_TSF_MUC_SEND_PRBREQ_FRM, |
| SCAN_CHAN_TSF_MUC_SEND_PRBREQ_FRM_DONE, |
| SCAN_CHAN_TSF_MUC_GOTO_DATA_CHAN, |
| SCAN_CHAN_TSF_MUC_GOTO_DATA_CHAN_DONE, |
| SCAN_CHAN_TSF_MUC_SEND_FINISH_FRM, |
| SCAN_CHAN_TSF_MUC_SEND_FINISH_FRM_DONE, |
| SCAN_CHAN_TSF_LHOST_INTERRUPT, |
| SCAN_CHAN_TSF_LHOST_SCANWORK, |
| SCAN_CHAN_TSF_LOG_NUM |
| }; |
| |
| struct scan_chan_tsf_dbg { |
| int pos_index; |
| char *log_name; |
| }; |
| |
| #define QDRV_SCAN_LOG_TSF(_scan, _pos) (hal_get_tsf(&((_scan)->tsf[(_pos)]))) |
| #define MUC_SCAN_LOG_TSF(_qh, _scan, _pos) (hal_get_tsf((_qh), &((_scan)->tsf[(_pos)]))) |
| |
| struct qtn_scan_chan_info { |
| uint32_t freq_band; |
| uint32_t scan_channel; /* The channel on which sample will be taken */ |
| #define TIME_MARGIN_BEFORE_STARTFRM 3000 /* microseconds, time overhead for others before start frame is sent*/ |
| #define TIME_MARGIN_AFTER_STARTFRM 1000 /* microseconds, time overhead for others after start frame is sent*/ |
| #define TIME_OFFSET_SEND_PROBE_REQ 3000 /* microseconds, the time offset for sending probe_req frame |
| * after switching to off channel*/ |
| #define TIME_OFFSET_SEND_START_FRM 5000 /* microseconds, the time offset for sending start frame |
| * after set NETDEV_F_PAUSE_TX flag */ |
| #define TIME_DUR_FOR_ALL_BEACONS 25000 /* microseconds, the time duration for transmitting all beacons */ |
| #define TIME_MIN_WAIT_PROBE_REP 5000 /* microseconds, the minimal time for waiting for the probe |
| * response frame on scanning channel */ |
| uint32_t dwell_msecs; /* Duration in milliseconds to stay on scanning channel */ |
| #define QTN_SCAN_CHAN_MUC_IDLE 0x0 |
| #define QTN_SCAN_CHAN_MUC_STARTED 0x1 |
| #define QTN_SCAN_CHAN_MUC_PROBING 0x2 |
| #define QTN_SCAN_CHAN_MUC_COMPLETED 0x3 |
| #define QTN_SCAN_CHAN_MUC_FAILED 0x4 |
| #define QTN_SCAN_CHAN_MUC_SCHEDULED 0x5 |
| uint32_t muc_status; /* written only by MuC */ |
| #define QTN_SCAN_CHAN_FLAG_ACTIVE 0x00000001 |
| #define QTN_SCNA_CHAN_FLAG_PASSIVE_FAST 0x00000002 |
| #define QTN_SCNA_CHAN_FLAG_PASSIVE_NORMAL 0x00000004 |
| #define QTN_SCNA_CHAN_FLAG_PASSIVE_SLOW 0x00000008 |
| #define QTN_SCAN_CHAN_TURNOFF_RF 0x00000010 |
| uint32_t scan_flags; |
| uint32_t start_txdesc_host; /* The frame sent before go scan channel, |
| * e.g. pwrsav frame in STA mode */ |
| uint32_t start_txdesc_bus; /* Start frame in phyaddr */ |
| uint16_t start_node_idx; /* the node index that frame to */ |
| uint16_t start_frame_len; /* frame length */ |
| uint32_t prbreq_txdesc_host; /* probe request frame for active scanning */ |
| uint32_t prbreq_txdesc_bus; /* probe request frame in phyaddr */ |
| uint16_t prbreq_node_idx; /* the node index that frame to */ |
| uint16_t prbreq_frame_len; /* frame length */ |
| uint32_t finish_txdesc_host; /* The frame sent after back data channel, |
| * e.g. the frame to announce waking up in STA mode */ |
| uint32_t finish_txdesc_bus; /* Complete frame in phyaddr */ |
| uint16_t finish_node_idx; /* the node index that frame to */ |
| uint16_t finish_frame_len; /* frame length */ |
| uint64_t tsf[SCAN_CHAN_TSF_LOG_NUM]; |
| }; |
| |
| enum qtn_ocac_tsf_log { |
| OCAC_TSF_LOG_GOTO_OFF_CHAN = 0, |
| OCAC_TSF_LOG_GOTO_OFF_CHAN_DONE, |
| OCAC_TSF_LOG_GOTO_DATA_CHAN, |
| OCAC_TSF_LOG_GOTO_DATA_CHAN_DONE, |
| OCAC_TSF_LOG_NUM |
| }; |
| |
| struct qtn_ocac_info { |
| uint32_t freq_band; /* frequency band, written by lhost */ |
| uint32_t off_channel; /* The off channel, "0" means to stop ocac in MuC, written by lhost*/ |
| uint32_t qosnull_txdesc_host; /* qosnull frame in virtual address, written by lhost */ |
| uint32_t qosnull_txdesc_bus; /* qosnull frame in physical address, written by lhost */ |
| uint16_t qosnull_frame_len; /* the frame length of qosnull */ |
| uint16_t tx_node_idx; /* the node index that qosnull frame to */ |
| uint16_t dwell_time; /* the required time on off channel in one beacon interval, written by lhost */ |
| uint16_t secure_dwell; /* milliseconds, the time on off channel within on off-channel action, using |
| qosnull frame with large NAV to protect the traffic */ |
| uint16_t threshold_fat; /* the fat threshold to run off-channel CAC, written by lhost */ |
| uint16_t threshold_traffic; /* the traffic threshold to run off-channel CAC, written by lhost */ |
| uint16_t threshold_fat_dec; /* the threshold for consecutive fat decrease, written by lhost */ |
| uint16_t traffic_ctrl; /* whether to send qosnull or not, written by lhost */ |
| uint16_t offset_txhalt; /* milliseconds, the offset after beacon to halt tx, written by lhost */ |
| uint16_t offset_offchan; /* milliseconds, the offset after halt tx to switch off channel, written by lhost */ |
| |
| #define QTN_OCAC_ON_DATA_CHAN 0x1 |
| #define QTN_OCAC_ON_OFF_CHAN 0x2 |
| uint16_t chan_status; /* current on which channel, written by MuC */ |
| uint16_t actual_dwell_time; /* the actual time on off channel, written by MuC */ |
| uint64_t tsf_log[OCAC_TSF_LOG_NUM]; /* event tsf log, written by MuC */ |
| }; |
| |
| enum bmps_state_e { |
| BMPS_STATE_OFF = 0, /* STA exits BMPS mode */ |
| BMPS_STATE_WAKE = 1, /* in BMPS mode, and is fully powered on */ |
| /* with PM set to 0 */ |
| BMPS_STATE_SLEEP = 2, /* in BMPS mode, and is fully powered off */ |
| /* with PM set to 1 */ |
| BMPS_STATE_WAKE_TO_SLEEP = 3, /* in BMPS mode, and is transitting from */ |
| /* power-on to power-off by sending Null frame */ |
| /* with PM=1 to AP */ |
| BMPS_STATE_LEAK_WINDOW = 4, /* in BMPS mode, and Null frame with PM=1 */ |
| /* has been sent, TX path is paused, */ |
| /* but RX patgh is still running to */ |
| /* receive packets from leaky AP */ |
| BMPS_STATE_SLEEP_TO_WAKE = 5, /* in BMPS mode, and is transitting from */ |
| /* power-off to power-on by sending */ |
| /* Null frame with PM=0 to AP */ |
| BMPS_STATE_BEACON_SNOOP = 6, /* in BMPS mode, and RX chain is powered up */ |
| /* to receive beacon */ |
| BMPS_STATE_MAX = BMPS_STATE_BEACON_SNOOP, |
| }; |
| |
| struct qtn_bmps_info { |
| uint32_t null_txdesc_host; /* null frame in virtual address */ |
| uint32_t null_txdesc_bus; /* null frame in physical address */ |
| uint16_t null_frame_len; /* the frame length of null */ |
| uint16_t tx_node_idx; /* the node index that null frame to */ |
| enum bmps_state_e state; /* shared BMPS status */ |
| }; |
| |
| struct qtn_rf_rxgain_params |
| { |
| uint8_t lna_on_indx; |
| uint8_t max_gain_idx; |
| int16_t cs_thresh_dbm; |
| int16_t cca_prim_dbm; |
| int16_t cca_sec_scs_off_dbm; |
| int16_t cca_sec_scs_on_dbm; |
| }; |
| |
| /* MuC fops requst */ |
| #define MUC_FOPS_MAX_FNAME_SIZE (50) |
| enum { |
| MUC_FOPS_OPEN = 0, |
| MUC_FOPS_READ, |
| MUC_FOPS_WRITE, |
| MUC_FOPS_LSEEK, |
| MUC_FOPS_CLOSE, |
| }; |
| |
| enum { |
| MUC_FOPS_PENDING = 0x011ADDED, |
| MUC_FOPS_DONE = 0xF035D0DE, |
| }; |
| |
| enum { |
| MUC_FOPS_RDONLY = 0x0, |
| MUC_FOPS_WRONLY = 0x1, |
| MUC_FOPS_RDWR = 0x2, |
| MUC_FOPS_APPEND = 0x4, |
| }; |
| |
| struct muc_fops_req { |
| volatile int32_t ret_val; |
| volatile int32_t fd; |
| volatile uint32_t req_state; |
| volatile char *data_buff; |
| }; |
| |
| enum qdrv_cmd_muc_memdbgcnf_s { |
| QDRV_CMD_MUC_MEMDBG_STATUS, |
| QDRV_CMD_MUC_MEMDBG_FD_MAX, |
| QDRV_CMD_MUC_MEMDBG_NODE_MAX, |
| QDRV_CMD_MUC_MEMDBG_DUMP_MAX, |
| QDRV_CMD_MUC_MEMDBG_RATETBL, |
| QDRV_CMD_MUC_MEMDBG_MSG_SEND, |
| QDRV_CMD_MUC_MEMDBG_TRACE, |
| QDRV_CMD_MUC_MEMDBG_LAST |
| }; |
| |
| /* The following file indexes and file lists must all be kept in sync */ |
| #define FOPS_FD_EP_SAMPLES 9 |
| #define FOPS_FD_DCACHE_SAMPLES 10 |
| #ifdef PROFILE_MUC_SAMPLE_IPTR_AUC |
| #define FOPS_FD_IPTR_SAMPLES 15 |
| #else |
| #define FOPS_FD_IPTR_SAMPLES 11 |
| #endif |
| #define FOPS_FD_UBOOT_ENV 12 |
| |
| #ifdef TOPAZ_RFIC6_PLATFORM |
| #define LHOST_CAL_FILES { \ |
| NULL, \ |
| "/proc/bootcfg/bf_factor", \ |
| "/tmp/txpower.txt", \ |
| "/proc/bootcfg/txpower.cal", \ |
| "/proc/bootcfg/dc_iq.cal", \ |
| "/mnt/jffs2/mon.out", \ |
| "/mnt/jffs2/gmon.out", \ |
| "/mnt/jffs2/pecount.out", \ |
| "/proc/bootcfg/pdetector.cal", \ |
| "/mnt/jffs2/profile_ep_muc", \ |
| "/mnt/jffs2/profile_dcache_muc",\ |
| "/mnt/jffs2/profile_iptr_muc", \ |
| "/proc/bootcfg/env", \ |
| "/etc/mtest", \ |
| "/proc/bootcfg/rx_iq.cal", \ |
| "/mnt/jffs2/profile_iptr_auc", \ |
| "/proc/bootcfg/bf_factor_2g", \ |
| "/tmp/txpower_2g.txt", \ |
| "/proc/bootcfg/dc_iq_2g.cal", \ |
| "/proc/bootcfg/pdetector_2g.cal",\ |
| "/tmp/bond_opt.txt", \ |
| } |
| #else |
| #define LHOST_CAL_FILES { \ |
| NULL, \ |
| "/proc/bootcfg/bf_factor", \ |
| "/tmp/txpower.txt", \ |
| "/proc/bootcfg/txpower.cal", \ |
| "/proc/bootcfg/dc_iq.cal", \ |
| "/mnt/jffs2/mon.out", \ |
| "/mnt/jffs2/gmon.out", \ |
| "/mnt/jffs2/pecount.out", \ |
| "/proc/bootcfg/pdetector.cal", \ |
| "/mnt/jffs2/profile_ep_muc", \ |
| "/mnt/jffs2/profile_dcache_muc",\ |
| "/mnt/jffs2/profile_iptr_muc", \ |
| "/proc/bootcfg/env", \ |
| "/etc/mtest", \ |
| "/proc/bootcfg/rx_iq.cal", \ |
| "/mnt/jffs2/profile_iptr_auc", \ |
| } |
| #endif |
| |
| #define MUC_CAL_FILES { \ |
| NULL, \ |
| NULL, \ |
| NULL, \ |
| NULL, \ |
| NULL, \ |
| "mon.out", \ |
| "gmon.out", \ |
| NULL, \ |
| NULL, \ |
| NULL, \ |
| NULL, \ |
| NULL, \ |
| NULL, \ |
| } |
| |
| enum tdls_ioctl_params { |
| IOCTL_TDLS_STATUS = 1, |
| IOCTL_TDLS_UAPSD_IND_WND, |
| IOCTL_TDLS_PTI_CTRL, |
| IOCTL_TDLS_PTI, |
| IOCTL_TDLS_PTI_PENDING, |
| IOCTL_TDLS_DBG_LEVEL, |
| IOCTL_TDLS_PTI_DELAY, |
| IOCTL_TDLS_PTI_EVENT = 100 |
| }; |
| |
| struct qtn_tdls_args { |
| uint8_t ni_macaddr[IEEE80211_ADDR_LEN]; |
| uint16_t ni_ncidx; |
| uint32_t tdls_cmd; |
| uint32_t tdls_params; |
| }; |
| |
| struct qtn_node_args |
| { |
| /* header */ |
| uint8_t ni_macaddr[IEEE80211_ADDR_LEN]; |
| uint8_t ni_bssid[IEEE80211_ADDR_LEN]; |
| uint8_t ni_nrates; |
| uint8_t ni_rates[IEEE80211_RATE_MAXSIZE]; |
| uint8_t ni_htnrates; |
| uint8_t ni_htrates[IEEE80211_HT_RATE_MAXSIZE]; |
| uint16_t ni_associd; /* assoc response */ |
| uint16_t ni_node_idx; |
| uint16_t ni_flags; /* special-purpose state */ |
| struct wmm_params wmm_params[WME_NUM_AC]; |
| uint8_t ni_implicit_ba_rx; /* The RX side of the implicit BA. Zero for no implicit RX BA */ |
| uint8_t ni_implicit_ba_tx; /* The TX side of the implicit BA. Zero for no implicit TX BA */ |
| uint16_t ni_implicit_ba_size; /* Size of the implicit BAs */ |
| uint8_t ni_qtn_ie_flags; |
| uint8_t ni_vendor; |
| uint8_t ni_bbf_disallowed; /* flag to disallow BBF */ |
| uint8_t ni_std_bf_disallowed; /* flag to disallow standard BF */ |
| uint8_t ni_uapsd; /* U-APSD per-node flags matching WMM STA Qos Info field */ |
| uint8_t ni_htcap[sizeof(struct ieee80211_htcap)]; /* Processed HT capabilities */ |
| uint8_t ni_htinfo[sizeof(struct ieee80211_htinfo)]; /* Processed HT info */ |
| uint8_t ni_vhtcap[sizeof(struct ieee80211_vhtcap)]; /* Processed VHT capabilities */ |
| uint8_t ni_vhtop[sizeof(struct ieee80211_vhtop)]; /* Processed VHT operational info */ |
| struct qtn_node_shared_stats *ni_shared_stats; |
| uint32_t ni_ver_sw; |
| uint32_t ni_qtn_flags; |
| uint32_t ni_tdls_status; |
| uint8_t ni_mu_grp[sizeof(struct ieee80211_vht_mu_grp)]; |
| uint16_t ni_rsn_caps; /* optional rsn capabilities */ |
| uint8_t rsn_ucastcipher; /* selected unicast cipher */ |
| uint16_t tdls_peer_associd; /* tdls peer AID allocated by AP, unique in BSS */ |
| uint32_t ni_rate_train; |
| uint32_t ni_rate_train_peer; |
| }; |
| |
| struct qtn_beacon_args |
| { |
| uint32_t pkt_data; |
| struct wmm_params wmm_params[WME_NUM_AC]; |
| uint32_t bintval; |
| uint32_t bo_tim; |
| uint32_t bo_tim_len; |
| uint32_t bo_tpc_rep; |
| uint32_t bo_chanswitch; |
| uint32_t bo_htcap; |
| uint32_t bo_htinfo; |
| uint32_t bo_vhtcap; |
| uint32_t bo_vhtop; |
| }; |
| |
| struct qtn_key { |
| u_int8_t wk_keylen; /* key length in bytes */ |
| u_int8_t wk_flags; |
| #define IEEE80211_KEY_XMIT 0x01 /* key used for xmit */ |
| #define IEEE80211_KEY_RECV 0x02 /* key used for recv */ |
| #define IEEE80211_KEY_GROUP 0x04 /* key used for WPA group operation */ |
| #define IEEE80211_KEY_SWCRYPT 0x10 /* host-based encrypt/decrypt */ |
| #define IEEE80211_KEY_SWMIC 0x20 /* host-based enmic/demic */ |
| u_int16_t wk_keyix; /* key index */ |
| u_int8_t wk_key[IEEE80211_KEYBUF_SIZE + IEEE80211_MICBUF_SIZE]; |
| #define wk_txmic wk_key + IEEE80211_KEYBUF_SIZE + 0 /* XXX can't () right */ |
| #define wk_rxmic wk_key + IEEE80211_KEYBUF_SIZE + 8 /* XXX can't () right */ |
| u_int64_t wk_keyrsc[IEEE80211_TID_SIZE]; /* key receive sequence counter */ |
| u_int64_t wk_keytsc; /* key transmit sequence counter */ |
| u_int32_t wk_cipher; /* cipher */ |
| u_int32_t wk_ncidx; /* node cache index */ |
| }; |
| #define IEEE80211_KEY_COMMON /* common flags passed in by apps */\ |
| (IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV | IEEE80211_KEY_GROUP) |
| |
| struct qtn_key_args |
| { |
| struct qtn_key key; |
| uint8_t wk_addr[IEEE80211_ADDR_LEN]; |
| }; |
| |
| struct qtn_power_save_args |
| { |
| uint32_t enable; |
| uint8_t ni_addr[IEEE80211_ADDR_LEN]; |
| }; |
| |
| struct lhost_txdesc |
| { |
| struct host_txdesc hw_desc; /* shared between muc and lhost */ |
| struct sk_buff *skb; |
| struct lhost_txdesc *next; |
| }; |
| |
| #define MUC_TXSTATUS_READY 0x0 |
| #define MUC_TXSTATUS_DONE 0x1 |
| |
| #define MUC_RXSTATUS_DONE 0x1 |
| |
| struct qtn_link_margin_info { |
| uint32_t mcs; |
| uint32_t bw; |
| int rssi_avg; |
| int reason; |
| #define QTN_LINK_MARGIN_REASON_SUCC 0 |
| #define QTN_LINK_MARGIN_REASON_NOSUCHNODE 1 |
| uint8_t mac_addr[IEEE80211_ADDR_LEN]; |
| }; |
| |
| #define QTN_RESERVED_DEVIDS 2 |
| #define QTN_WLANID_FROM_DEVID(devid) \ |
| ((devid < QTN_RESERVED_DEVIDS)? 0 : (devid - QTN_RESERVED_DEVIDS)) |
| |
| struct qtn_mu_grp_args { |
| /* MU group ID. 0 means the group is not used and grp_ni is empty*/ |
| uint8_t grp_id; |
| /* mu QMat installation status */ |
| /* QMat is not installed and not used */ |
| #define MU_QMAT_DISABLED 0 |
| /* QMat is installed and used */ |
| #define MU_QMAT_ENABLED 1 |
| /* QMat is installed, used but not updated */ |
| #define MU_QMAT_FREEZED 2 |
| /* QMat is installed, not used and not updated */ |
| #define MU_QMAT_NOT_USED 3 |
| uint8_t qmat_installed; |
| /* the index of the grp_ni[], is also the user position */ |
| uint16_t aid[IEEE80211_MU_GRP_NODES_MAX]; |
| uint8_t ncidx[IEEE80211_MU_GRP_NODES_MAX]; |
| /* matrix addr offsets in sram */ |
| unsigned int u0_1ss_u1_1ss; |
| unsigned int u0_2ss_u1_1ss; |
| unsigned int u0_3ss_u1_1ss; |
| unsigned int u0_1ss_u1_2ss; |
| unsigned int u0_1ss_u1_3ss; |
| unsigned int u0_2ss_u1_2ss; |
| /* stats */ |
| uint32_t upd_cnt; |
| int32_t rank; |
| }; |
| #endif // _LHOST_MUC_COMM_H |
| |