| /** @file mlan_main.h |
| * |
| * @brief This file defines the private and adapter data |
| * structures and declares global function prototypes used |
| * in MLAN module. |
| * |
| * |
| * Copyright 2008-2021 NXP |
| * |
| * This software file (the File) is distributed by NXP |
| * under the terms of the GNU General Public License Version 2, June 1991 |
| * (the License). You may use, redistribute and/or modify the File in |
| * accordance with the terms and conditions of the License, a copy of which |
| * is available by writing to the Free Software Foundation, Inc., |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the |
| * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. |
| * |
| * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE |
| * ARE EXPRESSLY DISCLAIMED. The License provides additional details about |
| * this warranty disclaimer. |
| * |
| */ |
| |
| /****************************************************** |
| Change log: |
| 10/13/2008: initial version |
| ******************************************************/ |
| |
| #ifndef _MLAN_MAIN_H_ |
| #define _MLAN_MAIN_H_ |
| |
| #ifdef DEBUG_LEVEL1 |
| extern t_void (*print_callback) (t_pvoid pmoal_handle, t_u32 level, |
| char *pformat, IN ...); |
| |
| extern mlan_status (*get_sys_time_callback) (t_void *pmoal_handle, |
| t_u32 *psec, t_u32 *pusec); |
| |
| extern t_u32 mlan_drvdbg; |
| |
| #ifdef DEBUG_LEVEL2 |
| #define PRINTM_MINFO(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MINFO) && (print_callback)) \ |
| print_callback(MNULL, MINFO, msg); \ |
| } while (0) |
| #define PRINTM_MWARN(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MWARN) && (print_callback)) \ |
| print_callback(MNULL, MWARN, msg); \ |
| } while (0) |
| #define PRINTM_MENTRY(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MENTRY) && (print_callback)) \ |
| print_callback(MNULL, MENTRY, msg); \ |
| } while (0) |
| #define PRINTM_GET_SYS_TIME(level, psec, pusec) \ |
| do { \ |
| if ((level & mlan_drvdbg) && (get_sys_time_callback)) \ |
| get_sys_time_callback(MNULL, psec, pusec); \ |
| } while (0) |
| |
| /** Hexdump for level-2 debugging */ |
| #define HEXDUMP(x, y, z) \ |
| do { \ |
| if ((mlan_drvdbg & (MHEX_DUMP | MINFO)) && (print_callback)) \ |
| print_callback(MNULL, MHEX_DUMP | MINFO, x, y, z); \ |
| } while (0) |
| |
| #else |
| |
| #define PRINTM_MINFO(msg...) \ |
| do { \ |
| } while (0) |
| #define PRINTM_MWARN(msg...) \ |
| do { \ |
| } while (0) |
| #define PRINTM_MENTRY(msg...) \ |
| do { \ |
| } while (0) |
| |
| #define PRINTM_GET_SYS_TIME(level, psec, pusec) \ |
| do { \ |
| if ((level & mlan_drvdbg) && (get_sys_time_callback) && \ |
| (level != MINFO) && (level != MWARN)) \ |
| get_sys_time_callback(MNULL, psec, pusec); \ |
| } while (0) |
| |
| /** Hexdump for debugging */ |
| #define HEXDUMP(x, y, z) \ |
| do { \ |
| } while (0) |
| |
| #endif /* DEBUG_LEVEL2 */ |
| |
| #define PRINTM_MFW_D(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MFW_D) && (print_callback)) \ |
| print_callback(MNULL, MFW_D, msg); \ |
| } while (0) |
| #define PRINTM_MCMD_D(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MCMD_D) && (print_callback)) \ |
| print_callback(MNULL, MCMD_D, msg); \ |
| } while (0) |
| #define PRINTM_MDAT_D(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MDAT_D) && (print_callback)) \ |
| print_callback(MNULL, MDAT_D, msg); \ |
| } while (0) |
| #define PRINTM_MIF_D(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MIF_D) && (print_callback)) \ |
| print_callback(MNULL, MIF_D, msg); \ |
| } while (0) |
| |
| #define PRINTM_MIOCTL(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MIOCTL) && (print_callback)) \ |
| print_callback(MNULL, MIOCTL, msg); \ |
| } while (0) |
| #define PRINTM_MINTR(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MINTR) && (print_callback)) \ |
| print_callback(MNULL, MINTR, msg); \ |
| } while (0) |
| #define PRINTM_MEVENT(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MEVENT) && (print_callback)) \ |
| print_callback(MNULL, MEVENT, msg); \ |
| } while (0) |
| #define PRINTM_MCMND(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MCMND) && (print_callback)) \ |
| print_callback(MNULL, MCMND, msg); \ |
| } while (0) |
| #define PRINTM_MDATA(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MDATA) && (print_callback)) \ |
| print_callback(MNULL, MDATA, msg); \ |
| } while (0) |
| #define PRINTM_MERROR(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MERROR) && (print_callback)) \ |
| print_callback(MNULL, MERROR, msg); \ |
| } while (0) |
| #define PRINTM_MFATAL(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MFATAL) && (print_callback)) \ |
| print_callback(MNULL, MFATAL, msg); \ |
| } while (0) |
| #define PRINTM_MMSG(msg...) \ |
| do { \ |
| if ((mlan_drvdbg & MMSG) && (print_callback)) \ |
| print_callback(MNULL, MMSG, msg); \ |
| } while (0) |
| |
| #define PRINTM(level, msg...) PRINTM_##level((char *)msg) |
| |
| /** Log debug message */ |
| #ifdef __GNUC__ |
| #define PRINTM_NETINTF(level, pmpriv) \ |
| do { \ |
| if ((mlan_drvdbg & level) && pmpriv && \ |
| pmpriv->adapter->callbacks.moal_print_netintf) \ |
| pmpriv->adapter->callbacks.moal_print_netintf( \ |
| pmpriv->adapter->pmoal_handle, \ |
| pmpriv->bss_index, level); \ |
| } while (0) |
| #endif /* __GNUC__ */ |
| |
| /** Max hex dump data length */ |
| #define MAX_DATA_DUMP_LEN 64 |
| |
| /** Debug hexdump for level-1 debugging */ |
| #define DBG_HEXDUMP(level, x, y, z) \ |
| do { \ |
| if ((mlan_drvdbg & level) && print_callback) \ |
| print_callback(MNULL, MHEX_DUMP | level, x, y, z); \ |
| } while (0) |
| |
| #else /* DEBUG_LEVEL1 */ |
| |
| #define PRINTM(level, msg...) \ |
| do { \ |
| } while (0) |
| |
| #define PRINTM_NETINTF(level, pmpriv) \ |
| do { \ |
| } while (0) |
| |
| /** Debug hexdump for level-1 debugging */ |
| #define DBG_HEXDUMP(level, x, y, z) \ |
| do { \ |
| } while (0) |
| |
| /** Hexdump for debugging */ |
| #define HEXDUMP(x, y, z) \ |
| do { \ |
| } while (0) |
| |
| #define PRINTM_GET_SYS_TIME(level, psec, pusec) \ |
| do { \ |
| } while (0) |
| |
| #endif /* DEBUG_LEVEL1 */ |
| |
| /* Reason Code 3: STA is leaving (or has left) IBSS or ESS */ |
| #define DEF_DEAUTH_REASON_CODE (0x3) |
| |
| /** Log entry point for debugging */ |
| #define ENTER() \ |
| do { \ |
| PRINTM(MENTRY, "Enter: %s\n", __func__); \ |
| } while (0) |
| |
| /** Log exit point for debugging */ |
| #define LEAVE() \ |
| do { \ |
| PRINTM(MENTRY, "Leave: %s\n", __func__); \ |
| } while (0) |
| |
| /** Find minimum */ |
| #ifndef MIN |
| #define MIN(a, b) ((a) < (b) ? (a) : (b)) |
| #endif |
| |
| /** Find maximum */ |
| #ifndef MAX |
| #define MAX(a, b) ((a) > (b) ? (a) : (b)) |
| #endif |
| |
| #ifdef memset |
| #undef memset |
| #endif |
| /** Memset routine */ |
| #define memset(adapter, s, c, len) \ |
| (adapter->callbacks.moal_memset(adapter->pmoal_handle, s, c, len)) |
| |
| #ifdef memmove |
| #undef memmove |
| #endif |
| /** Memmove routine */ |
| #define memmove(adapter, dest, src, len) \ |
| (adapter->callbacks.moal_memmove(adapter->pmoal_handle, dest, src, len)) |
| |
| #ifdef memcpy |
| #undef memcpy |
| #endif |
| /** Memcpy routine */ |
| #define memcpy(adapter, to, from, len) \ |
| (adapter->callbacks.moal_memcpy(adapter->pmoal_handle, to, from, len)) |
| /* memcpy_ext rountine */ |
| #define memcpy_ext(adapter, to, from, len, size) \ |
| (adapter->callbacks.moal_memcpy_ext(adapter->pmoal_handle, to, from, \ |
| len, size)) |
| |
| #ifdef memcmp |
| #undef memcmp |
| #endif |
| /** Memcmp routine */ |
| #define memcmp(adapter, s1, s2, len) \ |
| (adapter->callbacks.moal_memcmp(adapter->pmoal_handle, s1, s2, len)) |
| |
| /** Find number of elements */ |
| #ifndef NELEMENTS |
| #define NELEMENTS(x) (sizeof(x) / sizeof(x[0])) |
| #endif |
| |
| /** SWAP: swap t_u8 */ |
| #define SWAP_U8(a, b) \ |
| { \ |
| t_u8 t; \ |
| t = a; \ |
| a = b; \ |
| b = t; \ |
| } |
| |
| /** SWAP: swap t_u8 */ |
| #define SWAP_U16(a, b) \ |
| { \ |
| t_u16 t; \ |
| t = a; \ |
| a = b; \ |
| b = t; \ |
| } |
| |
| /** 16 bits byte swap */ |
| #define swap_byte_16(x) \ |
| ((t_u16)((((t_u16)(x)&0x00ffU) << 8) | (((t_u16)(x)&0xff00U) >> 8))) |
| |
| /** 32 bits byte swap */ |
| #define swap_byte_32(x) \ |
| ((t_u32)((((t_u32)(x)&0x000000ffUL) << 24) | \ |
| (((t_u32)(x)&0x0000ff00UL) << 8) | \ |
| (((t_u32)(x)&0x00ff0000UL) >> 8) | \ |
| (((t_u32)(x)&0xff000000UL) >> 24))) |
| |
| /** 64 bits byte swap */ |
| #define swap_byte_64(x) \ |
| ((t_u64)((t_u64)(((t_u64)(x)&0x00000000000000ffULL) << 56) | \ |
| (t_u64)(((t_u64)(x)&0x000000000000ff00ULL) << 40) | \ |
| (t_u64)(((t_u64)(x)&0x0000000000ff0000ULL) << 24) | \ |
| (t_u64)(((t_u64)(x)&0x00000000ff000000ULL) << 8) | \ |
| (t_u64)(((t_u64)(x)&0x000000ff00000000ULL) >> 8) | \ |
| (t_u64)(((t_u64)(x)&0x0000ff0000000000ULL) >> 24) | \ |
| (t_u64)(((t_u64)(x)&0x00ff000000000000ULL) >> 40) | \ |
| (t_u64)(((t_u64)(x)&0xff00000000000000ULL) >> 56))) |
| |
| #ifdef BIG_ENDIAN_SUPPORT |
| /** Convert ulong n/w to host */ |
| #define mlan_ntohl(x) x |
| /** Convert host ulong to n/w */ |
| #define mlan_htonl(x) x |
| /** Convert n/w to host */ |
| #define mlan_ntohs(x) x |
| /** Convert host to n/w */ |
| #define mlan_htons(x) x |
| /** Convert from 16 bit little endian format to CPU format */ |
| #define wlan_le16_to_cpu(x) swap_byte_16(x) |
| /** Convert from 32 bit little endian format to CPU format */ |
| #define wlan_le32_to_cpu(x) swap_byte_32(x) |
| /** Convert from 64 bit little endian format to CPU format */ |
| #define wlan_le64_to_cpu(x) swap_byte_64(x) |
| /** Convert to 16 bit little endian format from CPU format */ |
| #define wlan_cpu_to_le16(x) swap_byte_16(x) |
| /** Convert to 32 bit little endian format from CPU format */ |
| #define wlan_cpu_to_le32(x) swap_byte_32(x) |
| /** Convert to 64 bit little endian format from CPU format */ |
| #define wlan_cpu_to_le64(x) swap_byte_64(x) |
| |
| /** Convert TxPD to little endian format from CPU format */ |
| #define endian_convert_TxPD(x) \ |
| { \ |
| (x)->tx_pkt_length = wlan_cpu_to_le16((x)->tx_pkt_length); \ |
| (x)->tx_pkt_offset = wlan_cpu_to_le16((x)->tx_pkt_offset); \ |
| (x)->tx_pkt_type = wlan_cpu_to_le16((x)->tx_pkt_type); \ |
| (x)->tx_control = wlan_cpu_to_le32((x)->tx_control); \ |
| (x)->tx_control_1 = wlan_cpu_to_le32((x)->tx_control_1); \ |
| } |
| /** Convert RxPD from little endian format to CPU format */ |
| #define endian_convert_RxPD(x) \ |
| { \ |
| (x)->rx_pkt_length = wlan_le16_to_cpu((x)->rx_pkt_length); \ |
| (x)->rx_pkt_offset = wlan_le16_to_cpu((x)->rx_pkt_offset); \ |
| (x)->rx_pkt_type = wlan_le16_to_cpu((x)->rx_pkt_type); \ |
| (x)->seq_num = wlan_le16_to_cpu((x)->seq_num); \ |
| (x)->rx_info = wlan_le32_to_cpu((x)->rx_info); \ |
| |
| } |
| |
| #else |
| /** Convert ulong n/w to host */ |
| #define mlan_ntohl(x) swap_byte_32(x) |
| /** Convert host ulong to n/w */ |
| #define mlan_htonl(x) swap_byte_32(x) |
| /** Convert n/w to host */ |
| #define mlan_ntohs(x) swap_byte_16(x) |
| /** Convert host to n/w */ |
| #define mlan_htons(x) swap_byte_16(x) |
| /** Do nothing */ |
| #define wlan_le16_to_cpu(x) x |
| /** Do nothing */ |
| #define wlan_le32_to_cpu(x) x |
| /** Do nothing */ |
| #define wlan_le64_to_cpu(x) x |
| /** Do nothing */ |
| #define wlan_cpu_to_le16(x) x |
| /** Do nothing */ |
| #define wlan_cpu_to_le32(x) x |
| /** Do nothing */ |
| #define wlan_cpu_to_le64(x) x |
| |
| /** Convert TxPD to little endian format from CPU format */ |
| #define endian_convert_TxPD(x) \ |
| do { \ |
| } while (0) |
| /** Convert RxPD from little endian format to CPU format */ |
| #define endian_convert_RxPD(x) \ |
| do { \ |
| } while (0) |
| #endif /* BIG_ENDIAN_SUPPORT */ |
| |
| /** Global moal_assert_callback */ |
| extern t_void (*assert_callback) (t_void *pmoal_handle, t_u32 cond); |
| |
| /** Assertion */ |
| #define MASSERT(cond) \ |
| do { \ |
| if (!(cond)) { \ |
| PRINTM(MFATAL, "ASSERT: %s: %i\n", __func__, \ |
| __LINE__); \ |
| if (assert_callback) { \ |
| assert_callback(MNULL, (t_ptr)(cond)); \ |
| } else { \ |
| do { \ |
| } while (1); \ |
| } \ |
| } \ |
| } while (0) |
| |
| /** Maximum event buffer size */ |
| #define MAX_EVENT_SIZE (3 * 1024) |
| |
| #ifdef STA_SUPPORT |
| /** Maximum buffer size for ARP filter */ |
| #define ARP_FILTER_MAX_BUF_SIZE 68 |
| #endif /* STA_SUPPORT */ |
| |
| /** 60 seconds */ |
| #define MRVDRV_TIMER_60S 60000 |
| /** 10 seconds */ |
| #define MRVDRV_TIMER_10S 10000 |
| /** 5 seconds */ |
| #define MRVDRV_TIMER_5S 5000 |
| /** 3 seconds */ |
| #define MRVDRV_TIMER_3S 3000 |
| /** 1 second */ |
| #define MRVDRV_TIMER_1S 1000 |
| |
| /** Maximum size of multicast list */ |
| #define MRVDRV_MAX_MULTICAST_LIST_SIZE 32 |
| /** Maximum size of channel */ |
| #define MRVDRV_MAX_CHANNEL_SIZE 14 |
| /** Maximum length of SSID */ |
| #define MRVDRV_MAX_SSID_LENGTH 32 |
| /** WEP list macros & data structures */ |
| /** Size of key buffer in bytes */ |
| #define MRVL_KEY_BUFFER_SIZE_IN_BYTE 16 |
| /** Maximum length of WPA key */ |
| #define MRVL_MAX_KEY_WPA_KEY_LENGTH 32 |
| |
| /** Default listen interval */ |
| #define MLAN_DEFAULT_LISTEN_INTERVAL 20 |
| |
| /** Maximum number of region codes */ |
| #define MRVDRV_MAX_REGION_CODE 9 |
| |
| /** Maximum number of CFP codes for BG */ |
| #define MRVDRV_MAX_CFP_CODE_BG 0 |
| /** Maximum number of CFP codes for A */ |
| #define MRVDRV_MAX_CFP_CODE_A 5 |
| |
| /** high rx pending packets */ |
| #define HIGH_RX_PENDING 1000 |
| /** low rx pending packets */ |
| #define LOW_RX_PENDING 800 |
| |
| /** Default region code */ |
| #define MRVDRV_DEFAULT_REGION_CODE 0x10 |
| /** Default country code */ |
| #define MRVDRV_DEFAULT_COUNTRY_CODE "US" |
| |
| /** Japan country code */ |
| #define COUNTRY_CODE_JP_40 0x40 |
| /** Japan special country code */ |
| #define COUNTRY_CODE_JP_FF 0xFF |
| |
| /** Default factor for calculating beacon average */ |
| #define DEFAULT_BCN_AVG_FACTOR 8 |
| /** Default factor for calculating data average */ |
| #define DEFAULT_DATA_AVG_FACTOR 8 |
| |
| /** The first valid channel for use */ |
| #define FIRST_VALID_CHANNEL 0xff |
| /** Default Ad-Hoc channel */ |
| #define DEFAULT_AD_HOC_CHANNEL 6 |
| /** Default Ad-Hoc channel A */ |
| #define DEFAULT_AD_HOC_CHANNEL_A 36 |
| |
| /** Number of WEP keys */ |
| #define MRVL_NUM_WEP_KEY (4) |
| |
| /** Default multiple DTIM */ |
| #define MRVDRV_DEFAULT_MULTIPLE_DTIM 1 |
| |
| /** Default beacon missing timeout */ |
| #define DEFAULT_BCN_MISS_TIMEOUT 10 |
| |
| /** Maximum buffer space for beacons retrieved from scan responses */ |
| #define MAX_SCAN_BEACON_BUFFER 102400 |
| /** Default buffer space for beacons retrieved from scan responses */ |
| #define DEFAULT_SCAN_BEACON_BUFFER 4096 |
| |
| /** |
| * @brief Buffer pad space for newly allocated beacons/probe responses |
| * |
| * Beacons are typically 6 bytes longer than an equivalent probe response. |
| * For each scan response stored, allocate an extra byte pad at the end to |
| * allow easy expansion to store a beacon in the same memory a probe response |
| * previously contained |
| */ |
| #define SCAN_BEACON_ENTRY_PAD 6 |
| |
| /** Scan time specified in the channel TLV |
| * for each channel for passive scans |
| */ |
| #define MRVDRV_PASSIVE_SCAN_CHAN_TIME 200 |
| |
| /** Scan time specified in the channel TLV |
| * for each channel for active scans |
| */ |
| #define MRVDRV_ACTIVE_SCAN_CHAN_TIME 200 |
| |
| /** Scan time specified in the channel TLV |
| * for each channel for specific scans |
| */ |
| #define MRVDRV_SPECIFIC_SCAN_CHAN_TIME 110 |
| |
| /** |
| * Max total scan time in milliseconds |
| * The total scan time should be less than scan command timeout value (20s) |
| */ |
| #define MRVDRV_MAX_TOTAL_SCAN_TIME (MRVDRV_TIMER_10S * 2 - MRVDRV_TIMER_1S) |
| |
| /** Offset for GTK as it has version to skip past for GTK */ |
| #define RSN_GTK_OUI_OFFSET 2 |
| |
| /** If OUI is not found */ |
| #define MLAN_OUI_NOT_PRESENT 0 |
| /** If OUI is found */ |
| #define MLAN_OUI_PRESENT 1 |
| |
| /** Is cmd_resp, event or data packet received? */ |
| #define IS_CARD_RX_RCVD(adapter) \ |
| (adapter->cmd_resp_received || adapter->event_received || \ |
| adapter->data_received) |
| #ifdef USB |
| /** Type length */ |
| #define MLAN_TYPE_LEN 4 |
| /** Type Command */ |
| #define MLAN_USB_TYPE_CMD 0xF00DFACE |
| /** Type VDLL */ |
| #define MLAN_USB_TYPE_VDLL 0xF00DC0DE |
| /** Type Data */ |
| #define MLAN_USB_TYPE_DATA 0xBEADC0DE |
| /** Type Event */ |
| #define MLAN_USB_TYPE_EVENT 0xBEEFFACE |
| #endif /* USB */ |
| /** Type command */ |
| #define MLAN_TYPE_CMD 1 |
| /** Type data */ |
| #define MLAN_TYPE_DATA 0 |
| /** Type event */ |
| #define MLAN_TYPE_EVENT 3 |
| /** Type vdll */ |
| #define MLAN_TYPE_VDLL 4 |
| #ifdef SDIO |
| /** Type single port aggr data */ |
| #define MLAN_TYPE_SPA_DATA 10 |
| /** OFFSET of 512 block number */ |
| #define OFFSET_OF_BLOCK_NUMBER 15 |
| /** OFFSET of SDIO Header */ |
| #define OFFSET_OF_SDIO_HEADER 28 |
| /** sdio max rx size for cmd53, 255 * 256, reserve 1 block for DMA alignment */ |
| #define SDIO_CMD53_MAX_SIZE 65280 |
| #define MAX_SUPPORT_AMSDU_SIZE 4096 |
| /** Maximum numbfer of registers to read for multiple port */ |
| #if defined(SD8887) || defined(SD8997) || defined(SD8977) || defined(SD8987) || defined(SD9098) || defined(SD9097) || defined(SD8978) || defined(SD9177) |
| #define MAX_MP_REGS 196 |
| #else |
| /* upto 0xB7 */ |
| #define MAX_MP_REGS 184 |
| #endif |
| /** Maximum port */ |
| #define MAX_PORT 32 |
| /** Maximum port 16 */ |
| #define MAX_PORT_16 (16) |
| |
| /** max MP REGS */ |
| #define MAX_MP_REGS_MAX (196) |
| |
| /** Multi port TX aggregation buffer size */ |
| #define SDIO_MP_TX_AGGR_DEF_BUF_SIZE (65280) /* 64K - 256 */ |
| |
| /** Multi port RX aggregation buffer size */ |
| #define SDIO_MP_RX_AGGR_DEF_BUF_SIZE (65280) /* 64K - 256 */ |
| |
| #endif /* SDIO */ |
| |
| /** Minimum BA threshold */ |
| #define MIN_BA_THRESHOLD 16 |
| |
| /** High threshold at which to start drop packets */ |
| #define RX_HIGH_THRESHOLD 1024 |
| /** Low threshold to allow Rx BA */ |
| #define RX_LOW_THRESHOLD 128 |
| |
| #define MFG_CMD_SET_TEST_MODE 1 |
| #define MFG_CMD_UNSET_TEST_MODE 0 |
| #define MFG_CMD_TX_ANT 0x1004 |
| #define MFG_CMD_RX_ANT 0x1005 |
| #define MFG_CMD_TX_CONT 0x1009 |
| #define MFG_CMD_RF_CHAN 0x100A |
| #define MFG_CMD_CLR_RX_ERR 0x1010 |
| #define MFG_CMD_TX_FRAME 0x1021 |
| #define MFG_CMD_RF_BAND_AG 0x1034 |
| #define MFG_CMD_RF_CHANNELBW 0x1044 |
| #define MFG_CMD_RADIO_MODE_CFG 0x1211 |
| #define MFG_CMD_CONFIG_MAC_HE_TB_TX 0x110A |
| |
| /** Debug command number */ |
| #define DBG_CMD_NUM 10 |
| |
| /** Info for debug purpose */ |
| typedef struct _wlan_dbg { |
| /** Number of host to card command failures */ |
| t_u32 num_cmd_host_to_card_failure; |
| /** Number of host to card sleep confirm failures */ |
| t_u32 num_cmd_sleep_cfm_host_to_card_failure; |
| /** Number of host to card Tx failures */ |
| t_u32 num_tx_host_to_card_failure; |
| /** Number of card to host command/event failures */ |
| t_u32 num_cmdevt_card_to_host_failure; |
| /** Number of card to host Rx failures */ |
| t_u32 num_rx_card_to_host_failure; |
| /** Number of interrupt read failures */ |
| t_u32 num_int_read_failure; |
| /** Last interrupt status */ |
| t_u32 last_int_status; |
| /** Number of allocate buffer failure */ |
| t_u32 num_alloc_buffer_failure; |
| /** Number of pkt dropped */ |
| t_u32 num_pkt_dropped; |
| /** Number of deauthentication events */ |
| t_u32 num_event_deauth; |
| /** Number of disassosiation events */ |
| t_u32 num_event_disassoc; |
| /** Number of link lost events */ |
| t_u32 num_event_link_lost; |
| /** Number of deauthentication commands */ |
| t_u32 num_cmd_deauth; |
| /** Number of association comamnd successes */ |
| t_u32 num_cmd_assoc_success; |
| /** Number of association command failures */ |
| t_u32 num_cmd_assoc_failure; |
| /** Number of consecutive association command failures */ |
| t_u32 num_cons_assoc_failure; |
| |
| /** Timeout command ID */ |
| t_u16 timeout_cmd_id; |
| /** Timeout command action */ |
| t_u16 timeout_cmd_act; |
| /** List of last command IDs */ |
| t_u16 last_cmd_id[DBG_CMD_NUM]; |
| /** List of last command actions */ |
| t_u16 last_cmd_act[DBG_CMD_NUM]; |
| /** Last command index */ |
| t_u16 last_cmd_index; |
| /** List of last command response IDs */ |
| t_u16 last_cmd_resp_id[DBG_CMD_NUM]; |
| /** Last command response index */ |
| t_u16 last_cmd_resp_index; |
| /** List of last events */ |
| t_u16 last_event[DBG_CMD_NUM]; |
| /** Last event index */ |
| t_u16 last_event_index; |
| /** Number of no free command node */ |
| t_u16 num_no_cmd_node; |
| } wlan_dbg; |
| |
| /** Hardware status codes */ |
| typedef enum _WLAN_HARDWARE_STATUS { |
| WlanHardwareStatusReady, |
| WlanHardwareStatusGetHwSpec, |
| WlanHardwareStatusGetHwSpecdone, |
| WlanHardwareStatusInitializing, |
| WlanHardwareStatusInitdone, |
| WlanHardwareStatusReset, |
| WlanHardwareStatusClosing, |
| WlanHardwareStatusNotReady |
| } WLAN_HARDWARE_STATUS; |
| |
| /** WLAN_802_11_POWER_MODE */ |
| typedef enum _WLAN_802_11_POWER_MODE { |
| Wlan802_11PowerModeCAM, |
| Wlan802_11PowerModePSP |
| } WLAN_802_11_POWER_MODE; |
| |
| /** tx param */ |
| typedef struct _mlan_tx_param { |
| /** next packet length */ |
| t_u32 next_pkt_len; |
| } mlan_tx_param; |
| |
| /** PS_STATE */ |
| typedef enum _PS_STATE { |
| PS_STATE_AWAKE, |
| PS_STATE_PRE_SLEEP, |
| PS_STATE_SLEEP_CFM, |
| PS_STATE_SLEEP |
| } PS_STATE; |
| |
| /** Minimum flush timer for win size of 1 is 50 ms */ |
| #define MIN_FLUSH_TIMER_MS 50 |
| /** Minimum flush timer for win size of 1 is 15 ms */ |
| #define MIN_FLUSH_TIMER_15_MS 15 |
| |
| /** Tx BA stream table */ |
| typedef struct _TxBAStreamTbl TxBAStreamTbl; |
| |
| /** Add BA parameter data structure */ |
| typedef struct { |
| /** Window size for initiator */ |
| t_u32 tx_win_size; |
| /** Window size for receiver */ |
| t_u32 rx_win_size; |
| /** Block ack timeout */ |
| t_u32 timeout; |
| /** amsdu support for ADDBA request */ |
| t_u8 tx_amsdu; |
| /** amsdu support for ADDBA response */ |
| t_u8 rx_amsdu; |
| } add_ba_param_t; |
| |
| /** Tx aggregation data structure */ |
| typedef struct _txAggr_t { |
| /** AMPDU user */ |
| t_u8 ampdu_user; |
| /** AMPDU AP */ |
| t_u8 ampdu_ap; |
| /** AMSDU */ |
| t_u8 amsdu; |
| } tx_aggr_t; |
| |
| /** del ba threshold */ |
| #define DEL_BA_THRESHOLD 10 |
| /** BA stream status */ |
| typedef enum _baStatus_e { |
| BA_STREAM_NOT_SETUP = 0, |
| BA_STREAM_SETUP_INPROGRESS, |
| BA_STREAM_SETUP_COMPLETE |
| } baStatus_e; |
| |
| /** RA list table */ |
| typedef struct _raListTbl raListTbl, *praListTbl; |
| |
| /** RA list table */ |
| struct _raListTbl { |
| /** Pointer to previous node */ |
| raListTbl *pprev; |
| /** Pointer to next node */ |
| raListTbl *pnext; |
| /** Buffer list head */ |
| mlan_list_head buf_head; |
| /** RA list buffer */ |
| t_u8 ra[MLAN_MAC_ADDR_LENGTH]; |
| /** total packets in RA list */ |
| t_u16 total_pkts; |
| /** packets received */ |
| t_u16 packet_count; |
| /** packet count threshold to setup BA */ |
| t_u8 ba_packet_threshold; |
| /** is 11n enabled */ |
| t_u8 is_11n_enabled; |
| /** max amsdu size */ |
| t_u16 max_amsdu; |
| /** BA stream status */ |
| baStatus_e ba_status; |
| /** del ba count */ |
| t_u8 del_ba_count; |
| /** amsdu in ampdu flag */ |
| t_u8 amsdu_in_ampdu; |
| /** tdls flag */ |
| t_u8 is_tdls_link; |
| /** tx_pause flag */ |
| t_u8 tx_pause; |
| }; |
| |
| /** TID table */ |
| typedef struct _tidTbl { |
| /** RA list head */ |
| mlan_list_head ra_list; |
| /** Current RA list */ |
| raListTbl *ra_list_curr; |
| } tid_tbl_t; |
| |
| /** Highest priority setting for a packet (uses voice AC) */ |
| #define WMM_HIGHEST_PRIORITY 7 |
| /** Highest priority TID */ |
| #define HIGH_PRIO_TID 7 |
| /** Lowest priority TID */ |
| #define LOW_PRIO_TID 0 |
| /** No packet priority (< lowest) */ |
| #define NO_PKT_PRIO_TID -1 |
| |
| /** Max driver packet delay in msec */ |
| #define WMM_DRV_DELAY_MAX 510 |
| |
| /** Struct of WMM DESC */ |
| typedef struct _wmm_desc { |
| /** TID table */ |
| tid_tbl_t tid_tbl_ptr[MAX_NUM_TID]; |
| /** Packets out */ |
| t_u32 packets_out[MAX_NUM_TID]; |
| /** Packets queued */ |
| t_u32 pkts_queued[MAX_NUM_TID]; |
| /** Packets paused */ |
| t_u32 pkts_paused[MAX_NUM_TID]; |
| /** Spin lock to protect ra_list */ |
| t_void *ra_list_spinlock; |
| |
| /** AC status */ |
| WmmAcStatus_t ac_status[MAX_AC_QUEUES]; |
| /** AC downgraded values */ |
| mlan_wmm_ac_e ac_down_graded_vals[MAX_AC_QUEUES]; |
| |
| /** Max driver packet delay sent to the firmware for expiry eval */ |
| t_u32 drv_pkt_delay_max; |
| |
| /** WMM queue priority table */ |
| t_u8 queue_priority[MAX_AC_QUEUES]; |
| /** User priority packet transmission control */ |
| t_u32 user_pri_pkt_tx_ctrl[WMM_HIGHEST_PRIORITY + 1]; /* UP: 0 to 7 */ |
| |
| /** Number of transmit packets queued */ |
| mlan_scalar tx_pkts_queued; |
| /** Tracks highest priority with a packet queued */ |
| mlan_scalar highest_queued_prio; |
| } wmm_desc_t; |
| |
| /** Security structure */ |
| typedef struct _wlan_802_11_security_t { |
| /** WPA enabled flag */ |
| t_u8 wpa_enabled; |
| /** E-Supplicant enabled flag */ |
| t_u8 ewpa_enabled; |
| /** WPA2 enabled flag */ |
| t_u8 wpa2_enabled; |
| /** WAPI enabled flag */ |
| t_u8 wapi_enabled; |
| /** WAPI key on flag */ |
| t_u8 wapi_key_on; |
| /** WEP status */ |
| WLAN_802_11_WEP_STATUS wep_status; |
| /** Authentication mode */ |
| t_u32 authentication_mode; |
| /** Encryption mode */ |
| t_u32 encryption_mode; |
| /** Hotspot OSEN enabled */ |
| t_u8 osen_enabled; |
| } wlan_802_11_security_t; |
| |
| /** Current Basic Service Set State Structure */ |
| typedef struct { |
| /** BSS descriptor */ |
| BSSDescriptor_t bss_descriptor; |
| /** WMM enable? */ |
| t_u8 wmm_enabled; |
| /** Uapsd enable?*/ |
| t_u8 wmm_uapsd_enabled; |
| /** Band */ |
| t_u8 band; |
| /** Number of rates supported */ |
| t_u32 num_of_rates; |
| /** Supported rates*/ |
| t_u8 data_rates[WLAN_SUPPORTED_RATES]; |
| /** Host MLME flag*/ |
| t_u8 host_mlme; |
| mlan_802_11_mac_addr prev_bssid; |
| t_u8 use_mfp; |
| } current_bss_params_t; |
| |
| /** Sleep_params */ |
| typedef struct _sleep_params_t { |
| /** Sleep parameter error */ |
| t_u16 sp_error; |
| /** Sleep parameter offset */ |
| t_u16 sp_offset; |
| /** Sleep parameter stable time */ |
| t_u16 sp_stable_time; |
| /** Sleep parameter calibration control */ |
| t_u8 sp_cal_control; |
| /** Sleep parameter external sleep clock */ |
| t_u8 sp_ext_sleep_clk; |
| /** Sleep parameter reserved */ |
| t_u16 sp_reserved; |
| } sleep_params_t; |
| |
| /** Sleep_period */ |
| typedef struct sleep_period_t { |
| /** Sleep period */ |
| t_u16 period; |
| /** Reserved */ |
| t_u16 reserved; |
| } sleep_period_t; |
| |
| /** mrvl_wep_key_t */ |
| typedef struct _mrvl_wep_key_t { |
| /** Length */ |
| t_u32 length; |
| /** WEP key index */ |
| t_u32 key_index; |
| /** WEP key length */ |
| t_u32 key_length; |
| /** WEP keys */ |
| t_u8 key_material[MRVL_KEY_BUFFER_SIZE_IN_BYTE]; |
| } mrvl_wep_key_t; |
| |
| /** Maximum number of region channel */ |
| #define MAX_REGION_CHANNEL_NUM 2 |
| |
| /** Region-band mapping table */ |
| typedef struct _region_chan_t { |
| /** TRUE if this entry is valid */ |
| t_u8 valid; |
| /** Region code for US, Japan ... */ |
| t_u8 region; |
| /** Band B/G/A, used for BAND_CONFIG cmd */ |
| t_u8 band; |
| /** Actual No. of elements in the array below */ |
| t_u8 num_cfp; |
| /** chan-freq-txpower mapping table */ |
| chan_freq_power_t *pcfp; |
| } region_chan_t; |
| |
| /** State of 11d */ |
| typedef enum _state_11d_t { |
| DISABLE_11D = 0, |
| ENABLE_11D = 1, |
| } state_11d_t; |
| |
| #define DEFAULT_11D_STATE DISABLE_11D |
| |
| /** Domain regulatory information */ |
| typedef struct _wlan_802_11d_domain_reg { |
| /** Country Code */ |
| t_u8 country_code[COUNTRY_CODE_LEN]; |
| /** band that channels in sub_band belong to */ |
| t_u8 band; |
| /** No. of subband in below */ |
| t_u8 no_of_sub_band; |
| /** Subband data to send/last sent */ |
| IEEEtypes_SubbandSet_t sub_band[MRVDRV_MAX_SUBBAND_802_11D]; |
| } wlan_802_11d_domain_reg_t; |
| |
| /** Data for state machine */ |
| typedef struct _wlan_802_11d_state { |
| /** True for enabling 11D */ |
| state_11d_t enable_11d; |
| /** True for user enabling 11D */ |
| state_11d_t user_enable_11d; |
| } wlan_802_11d_state_t; |
| |
| /** 802.11h State information kept in the 'mlan_private' driver structure */ |
| typedef struct { |
| /** Indicate 11h is enabled from host */ |
| t_bool is_11h_host; |
| /** Indicates whether 11h is enabled in the driver */ |
| t_bool is_11h_enabled; |
| /** Indicates whether 11h is active in the firmware */ |
| t_bool is_11h_active; |
| /** Master device using automatic channel select */ |
| t_bool adhoc_auto_sel_chan; |
| /** Set when driver receives a STOP TX event from fw */ |
| t_bool tx_disabled; |
| /** Channel that ChanSwAnn was received for, non-zero = active */ |
| t_u8 dfs_slave_csa_chan; |
| /** Expiry for above variable, seconds in system time */ |
| t_u32 dfs_slave_csa_expire_at_sec; |
| } wlan_11h_interface_state_t; |
| |
| #if defined(UAP_SUPPORT) |
| /** UAP get info callback state kept in the 'mlan_private' driver structure */ |
| typedef struct { |
| /** UAP internal callback after wlan_uap_get_channel */ |
| /** (parameter is really pointer to mlan_private) */ |
| mlan_status (*get_chan_callback) (t_void *); |
| /** current ioctl_req (to be completed in callback) */ |
| pmlan_ioctl_req pioctl_req_curr; |
| /** band config from MrvlIEtypes_channel_band_t */ |
| Band_Config_t bandcfg; |
| /** channel from MrvlIEtypes_channel_band_t */ |
| t_u8 channel; |
| /** beacon period (in msec) from MrvlIEtypes_beacon_period_t */ |
| t_u16 beacon_period; |
| /** dtim period (no unit) from MrvlIEtypes_dtim_period_t */ |
| t_u8 dtim_period; |
| } wlan_uap_get_info_cb_t; |
| #endif |
| |
| /** Data structure for WPS information */ |
| typedef struct { |
| /** WPS IE */ |
| IEEEtypes_VendorSpecific_t wps_ie; |
| /** Session enable flag */ |
| t_u8 session_enable; |
| } wps_t; |
| |
| /** mlan_operations data structure */ |
| typedef struct _mlan_operations { |
| /** cmd init handler */ |
| mlan_status (*init_cmd) (t_void *priv, t_u8 first_bss); |
| /** ioctl handler */ |
| mlan_status (*ioctl) (t_void *adapter, pmlan_ioctl_req pioctl_req); |
| /** cmd handler */ |
| mlan_status (*prepare_cmd) (t_void *priv, t_u16 cmd_no, |
| t_u16 cmd_action, t_u32 cmd_oid, |
| t_void *pioctl_buf, t_void *pdata_buf, |
| t_void *pcmd_buf); |
| /** cmdresp handler */ |
| mlan_status (*process_cmdresp) (t_void *priv, t_u16 cmdresp_no, |
| t_void *pcmd_buf, t_void *pioctl); |
| /** rx handler */ |
| mlan_status (*process_rx_packet) (t_void *adapter, pmlan_buffer pmbuf); |
| /** event handler */ |
| mlan_status (*process_event) (t_void *priv); |
| /** txpd handler */ |
| t_void *(*process_txpd) (t_void *priv, pmlan_buffer pmbuf); |
| /** BSS role */ |
| mlan_bss_role bss_role; |
| } mlan_operations, *pmlan_operations; |
| |
| /** Private structure for MLAN */ |
| typedef struct _mlan_private { |
| /** Pointer to mlan_adapter */ |
| struct _mlan_adapter *adapter; |
| /** BSS index */ |
| t_u8 bss_index; |
| /** BSS type */ |
| t_u8 bss_type; |
| /** BSS role */ |
| t_u8 bss_role; |
| /** BSS virtual flag */ |
| t_u8 bss_virtual; |
| /** BSS Priority */ |
| t_u8 bss_priority; |
| /** BSS number */ |
| t_u8 bss_num; |
| /** Frame type */ |
| t_u8 frame_type; |
| /** MAC address information */ |
| t_u8 curr_addr[MLAN_MAC_ADDR_LENGTH]; |
| /** Media connection status */ |
| t_bool media_connected; |
| |
| /** Current packet filter */ |
| t_u32 curr_pkt_filter; |
| /** Infrastructure mode */ |
| t_u32 bss_mode; |
| |
| /** Tx packet control */ |
| t_u32 pkt_tx_ctrl; |
| |
| /** Tx power level */ |
| t_s16 tx_power_level; |
| /** Maximum Tx power level */ |
| t_s8 max_tx_power_level; |
| /** Minimum Tx power level */ |
| t_s8 min_tx_power_level; |
| /** Tx rate */ |
| t_u8 tx_rate; |
| t_u8 tx_rate_info; |
| /*HE tx tone mode and DCM info */ |
| t_u8 ext_tx_rate_info; |
| /*HE rx tone mode and DCM info */ |
| t_u8 rxpd_rx_info; |
| /** rxpd_htinfo */ |
| t_u8 rxpd_rate_info; |
| /** max amsdu size */ |
| t_u16 max_amsdu; |
| /** amsdu disable flag */ |
| t_u8 amsdu_disable; |
| /** 802.11n Device Capabilities for 2.4GHz */ |
| t_u32 usr_dot_11n_dev_cap_bg; |
| /** 802.11n Device Capabilities for 5GHz */ |
| t_u32 usr_dot_11n_dev_cap_a; |
| /** MIMO abstraction of MCSs supported by device */ |
| t_u8 usr_dev_mcs_support; |
| #ifdef UAP_SUPPORT |
| /** UAP 11n flag */ |
| t_u8 is_11n_enabled; |
| #endif /* UAP_SUPPORT */ |
| /** UAP 11ac flag */ |
| t_u8 is_11ac_enabled; |
| /** UAP 11ax flag */ |
| t_u8 is_11ax_enabled; |
| /** tx vht_info */ |
| t_u8 tx_vhtinfo; |
| /** rxpd_vhtinfo */ |
| t_u8 rxpd_vhtinfo; |
| /** 802.11ac Device Capabilities for 2.4GHz */ |
| t_u32 usr_dot_11ac_dev_cap_bg; |
| /** 802.11ac Device Capabilities for 5GHz */ |
| t_u32 usr_dot_11ac_dev_cap_a; |
| /** MIMO abstraction of MCSs supported by device */ |
| t_u32 usr_dot_11ac_mcs_support; |
| /** user dot 11ac_BW */ |
| t_u8 usr_dot_11ac_bw; |
| /** user dot 11ac_opermode_BW */ |
| t_u8 usr_dot_11ac_opermode_bw; |
| /** user dot 11ac_opermode_nss */ |
| t_u8 usr_dot_11ac_opermode_nss; |
| /** length of hw he capability */ |
| t_u8 user_hecap_len; |
| /** user configured 802.11ax HE capability */ |
| t_u8 user_he_cap[54]; |
| /** length of hw he capability */ |
| t_u8 user_2g_hecap_len; |
| /** user configured 802.11ax HE capability */ |
| t_u8 user_2g_he_cap[54]; |
| /** dropped pkts */ |
| t_u32 num_drop_pkts; |
| #ifdef UAP_SUPPORT |
| /** packet forward control */ |
| t_u8 pkt_fwd; |
| #endif |
| /** TX beamforming capability */ |
| t_u32 tx_bf_cap; |
| /** Rx PD rate */ |
| t_u8 rxpd_rate; |
| /** Bitmap rates */ |
| t_u16 bitmap_rates[MAX_BITMAP_RATES_SIZE]; |
| /** Data rate */ |
| t_u32 data_rate; |
| /** Automatic data rate flag */ |
| t_u8 is_data_rate_auto; |
| /** Factor for calculating beacon average */ |
| t_u16 bcn_avg_factor; |
| /** Factor for calculating data average */ |
| t_u16 data_avg_factor; |
| /** SNR */ |
| t_s8 snr; |
| /** Noise Floor */ |
| t_s8 nf; |
| /** Last data RSSI */ |
| t_s16 data_rssi_last; |
| /** Last data Noise Floor */ |
| t_s16 data_nf_last; |
| /** Average data RSSI */ |
| t_s16 data_rssi_avg; |
| /** Averag data Noise Floor */ |
| t_s16 data_nf_avg; |
| /** Last beacon RSSI */ |
| t_s16 bcn_rssi_last; |
| /** Last beacon Noise Floor */ |
| t_s16 bcn_nf_last; |
| /** Average beacon RSSI */ |
| t_s16 bcn_rssi_avg; |
| /** Average beacon Noise Floor */ |
| t_s16 bcn_nf_avg; |
| /** Attempted BSS descriptor */ |
| BSSDescriptor_t *pattempted_bss_desc; |
| |
| /** GTK rekey data*/ |
| mlan_ds_misc_gtk_rekey_data gtk_rekey; |
| |
| /** Current SSID/BSSID related parameters*/ |
| current_bss_params_t curr_bss_params; |
| /** current channel flags */ |
| t_u32 curr_chan_flags; |
| /** User selected bands */ |
| t_u16 config_bands; |
| |
| /** Beacon period */ |
| t_u16 beacon_period; |
| /** Listen interval */ |
| t_u16 listen_interval; |
| /** ATIM window */ |
| t_u16 atim_window; |
| |
| /** AdHoc channel */ |
| t_u8 adhoc_channel; |
| /** AdHoc link sensed flag */ |
| t_u8 adhoc_is_link_sensed; |
| /** AdHoc operating state */ |
| t_u8 adhoc_state; |
| #if defined(STA_SUPPORT) |
| /** AdHoc operating state backup */ |
| t_u8 adhoc_state_prev; |
| /** AdHoc previous ssid used for Start */ |
| mlan_802_11_ssid adhoc_last_start_ssid; |
| #endif |
| /** FSM variable for 11d support */ |
| wlan_802_11d_state_t state_11d; |
| /** FSM variable for 11h support */ |
| wlan_11h_interface_state_t intf_state_11h; |
| #ifdef UAP_SUPPORT |
| /** Whether UAP interface has started */ |
| t_bool uap_bss_started; |
| /** Whether UAP interface start from hostapd */ |
| t_bool uap_host_based; |
| /**UAP operating channel*/ |
| t_u8 uap_channel; |
| /** state variable for UAP Get Info callback */ |
| wlan_uap_get_info_cb_t uap_state_chan_cb; |
| #endif /* UAP_SUPPORT */ |
| |
| /** Security related */ |
| /** Encryption parameter */ |
| wlan_802_11_security_t sec_info; |
| /** WEP keys */ |
| mrvl_wep_key_t wep_key[MRVL_NUM_WEP_KEY]; |
| /** Current WEP key index */ |
| t_u16 wep_key_curr_index; |
| /** EWPA query 0: disable, 1: enable */ |
| t_u8 ewpa_query; |
| /** Encryption Key*/ |
| t_u8 wpa_ie[256]; |
| /** WPA IE length */ |
| t_u8 wpa_ie_len; |
| /** GTK set flag */ |
| t_u8 wpa_is_gtk_set; |
| /** AES key material */ |
| mlan_ds_encrypt_key aes_key; |
| #if defined(STA_SUPPORT) |
| /* Mgmt Frame Protection config */ |
| mlan_ds_misc_pmfcfg pmfcfg; |
| #endif |
| /** WAPI IE */ |
| t_u8 wapi_ie[256]; |
| /** WAPI IE length */ |
| t_u8 wapi_ie_len; |
| /** OSEN IE */ |
| t_u8 osen_ie[256]; |
| /** OSEN IE length */ |
| t_u8 osen_ie_len; |
| /** Pointer to the station table */ |
| mlan_list_head sta_list; |
| /** tdls pending queue */ |
| mlan_list_head tdls_pending_txq; |
| t_u16 tdls_idle_time; |
| |
| /** MGMT IE */ |
| custom_ie mgmt_ie[MAX_MGMT_IE_INDEX]; |
| /** mgmt frame passthru mask */ |
| t_u32 mgmt_frame_passthru_mask; |
| /** WMM required */ |
| t_u8 wmm_required; |
| /** WMM enabled */ |
| t_u8 wmm_enabled; |
| /** WMM qos info */ |
| t_u8 wmm_qosinfo; |
| /** saved WMM qos info */ |
| t_u8 saved_wmm_qosinfo; |
| /**host tdls uapsd support*/ |
| t_u8 host_tdls_uapsd_support; |
| /**host tdls channel switch support*/ |
| t_u8 host_tdls_cs_support; |
| /**supported channel IE len*/ |
| t_u8 chan_supp_len; |
| /**save channel support IE*/ |
| t_u8 chan_supp[MAX_IE_SIZE]; |
| /**supported regulatory classl IE len*/ |
| t_u8 supp_regulatory_class_len; |
| /**save support channel regulatory class IE*/ |
| t_u8 supp_regulatory_class[MAX_IE_SIZE]; |
| /**tdls cs off channel*/ |
| t_u8 tdls_cs_channel; |
| /** WMM related variable*/ |
| wmm_desc_t wmm; |
| |
| /** Pointer to the Transmit BA stream table*/ |
| mlan_list_head tx_ba_stream_tbl_ptr; |
| /** Pointer to the priorities for AMSDU/AMPDU table*/ |
| tx_aggr_t aggr_prio_tbl[MAX_NUM_TID]; |
| /** Pointer to the priorities for AMSDU/AMPDU table*/ |
| t_u8 addba_reject[MAX_NUM_TID]; |
| /** Pointer to the priorities for AMSDU/AMPDU table*/ |
| t_u8 ibss_ampdu[MAX_NUM_TID]; |
| /** Pointer to the priorities for AMSDU/AMPDU table*/ |
| t_u8 ibss_addba_reject[MAX_NUM_TID]; |
| /** Struct to store ADDBA parameters */ |
| add_ba_param_t add_ba_param; |
| /** user rx_win_size */ |
| t_u32 user_rxwinsize; |
| /** last rx_seq */ |
| t_u16 rx_seq[MAX_NUM_TID]; |
| /** Pointer to the Receive Reordering table*/ |
| mlan_list_head rx_reorder_tbl_ptr; |
| /** Lock for Rx packets */ |
| t_void *rx_pkt_lock; |
| |
| #ifdef STA_SUPPORT |
| /** Buffer to store the association response for application retrieval |
| */ |
| t_u8 assoc_rsp_buf[MRVDRV_ASSOC_RSP_BUF_SIZE]; |
| /** Length of the data stored in assoc_rsp_buf */ |
| t_u32 assoc_rsp_size; |
| |
| /** Generic IEEE IEs passed from the application to be inserted into the |
| * association request to firmware |
| */ |
| t_u8 gen_ie_buf[MRVDRV_GENIE_BUF_SIZE]; |
| /** Length of the data stored in gen_ie_buf */ |
| t_u8 gen_ie_buf_len; |
| |
| /** disconnect reason code*/ |
| t_u16 disconnect_reason_code; |
| t_u8 *pcurr_bcn_buf; |
| t_u32 curr_bcn_size; |
| t_void *curr_bcn_buf_lock; |
| |
| /** WPS */ |
| wps_t wps; |
| #endif /* STA_SUPPORT */ |
| |
| /** function table */ |
| mlan_operations ops; |
| /** tx pause flag */ |
| t_u8 tx_pause; |
| /** Port Control mode */ |
| t_u8 port_ctrl_mode; |
| |
| /** Port open flag */ |
| t_u8 port_open; |
| |
| /** Port open flag state at time of association attempt */ |
| t_u8 prior_port_status; |
| /** Bypass TX queue */ |
| mlan_list_head bypass_txq; |
| /** IP address operation */ |
| t_u32 op_code; |
| /** IP address */ |
| t_u8 ip_addr[IPADDR_LEN]; |
| t_u32 hotspot_cfg; |
| #ifdef STA_SUPPORT |
| ExtCap_t ext_cap; |
| ExtCap_t def_ext_cap; |
| #endif |
| /** interface header len */ |
| t_u8 intf_hr_len; |
| #ifdef USB |
| /** USB data port */ |
| t_u32 port; |
| #endif |
| /** Control TX AMPDU on infra link */ |
| t_u8 txaggrctrl; |
| #if defined(DRV_EMBEDDED_AUTHENTICATOR) || defined(DRV_EMBEDDED_SUPPLICANT) |
| t_void *psapriv; |
| #endif |
| /** rx per packet info */ |
| t_u8 rx_pkt_info; |
| /** received amsdu count*/ |
| t_u32 amsdu_rx_cnt; |
| /** received msdu count in amsdu*/ |
| t_u32 msdu_in_rx_amsdu_cnt; |
| /** tx amsdu count*/ |
| t_u32 amsdu_tx_cnt; |
| /** tx msdu count in amsdu*/ |
| t_u32 msdu_in_tx_amsdu_cnt; |
| } mlan_private, *pmlan_private; |
| |
| typedef struct _assoc_logger { |
| /** vendor specific */ |
| t_u8 oui[3]; |
| t_u8 bssid[MLAN_MAC_ADDR_LENGTH]; |
| t_u8 ssid[MLAN_MAX_SSID_LENGTH]; |
| t_s32 rssi; |
| t_u32 channel; |
| } assoc_logger_data; |
| |
| /** Tx BA stream table */ |
| struct _TxBAStreamTbl { |
| /** TxBAStreamTbl previous node */ |
| TxBAStreamTbl *pprev; |
| /** TxBAStreamTbl next node */ |
| TxBAStreamTbl *pnext; |
| /** TID */ |
| int tid; |
| /** RA */ |
| t_u8 ra[MLAN_MAC_ADDR_LENGTH]; |
| /** BA stream status */ |
| baStatus_e ba_status; |
| t_u8 amsdu; |
| }; |
| |
| /** RX reorder table */ |
| typedef struct _RxReorderTbl RxReorderTbl; |
| |
| typedef struct { |
| /** Timer for flushing */ |
| t_void *timer; |
| /** Timer set flag */ |
| t_u8 timer_is_set; |
| /** RxReorderTbl ptr */ |
| RxReorderTbl *ptr; |
| /** Priv pointer */ |
| mlan_private *priv; |
| } reorder_tmr_cnxt_t; |
| |
| /** RX reorder table */ |
| struct _RxReorderTbl { |
| /** RxReorderTbl previous node */ |
| RxReorderTbl *pprev; |
| /** RxReorderTbl next node */ |
| RxReorderTbl *pnext; |
| /** TID */ |
| int tid; |
| /** TA */ |
| t_u8 ta[MLAN_MAC_ADDR_LENGTH]; |
| /** Start window */ |
| int start_win; |
| /** last_seq */ |
| int last_seq; |
| /** Window size */ |
| int win_size; |
| /** Pointer to pointer to RxReorderTbl */ |
| t_void **rx_reorder_ptr; |
| /** Timer context */ |
| reorder_tmr_cnxt_t timer_context; |
| /** BA stream status */ |
| baStatus_e ba_status; |
| t_u8 amsdu; |
| /** no packet drop flag for rx_reorder_tbl */ |
| t_u8 force_no_drop; |
| /** flag for check start win */ |
| t_u8 check_start_win; |
| /** pkt receive after BA setup */ |
| t_u8 pkt_count; |
| /** flush data flag */ |
| t_u8 flush_data; |
| }; |
| |
| /** BSS priority node */ |
| typedef struct _mlan_bssprio_node mlan_bssprio_node; |
| |
| /** BSS priority node */ |
| struct _mlan_bssprio_node { |
| /** Pointer to previous node */ |
| mlan_bssprio_node *pprev; |
| /** Pointer to next node */ |
| mlan_bssprio_node *pnext; |
| /** Pointer to priv */ |
| pmlan_private priv; |
| }; |
| |
| /** BSS priority table */ |
| typedef struct _mlan_bssprio_tbl mlan_bssprio_tbl; |
| |
| /** BSS priority table */ |
| struct _mlan_bssprio_tbl { |
| /** BSS priority list head */ |
| mlan_list_head bssprio_head; |
| /** Current priority node */ |
| mlan_bssprio_node *bssprio_cur; |
| }; |
| |
| /** cmd_ctrl_node */ |
| typedef struct _cmd_ctrl_node cmd_ctrl_node; |
| |
| /** _cmd_ctrl_node */ |
| struct _cmd_ctrl_node { |
| /** Pointer to previous node */ |
| cmd_ctrl_node *pprev; |
| /** Pointer to next node */ |
| cmd_ctrl_node *pnext; |
| /** Pointer to priv */ |
| pmlan_private priv; |
| /** Command number */ |
| t_u32 cmd_no; |
| /** Command flag */ |
| t_u32 cmd_flag; |
| /** Pointer to mlan_buffer */ |
| mlan_buffer *cmdbuf; |
| /** Pointer to mlan_buffer */ |
| mlan_buffer *respbuf; |
| /** Command parameter */ |
| t_void *pdata_buf; |
| /** Pointer to mlan_ioctl_req if command is from IOCTL */ |
| t_void *pioctl_buf; |
| #if defined(PCIE) || defined(SDIO) |
| /** pre_allocated mlan_buffer for cmd */ |
| mlan_buffer *pmbuf; |
| #endif |
| }; |
| |
| /** default tdls wmm qosinfo */ |
| #define DEFAULT_TDLS_WMM_QOS_INFO 15 |
| /** default tdls sleep period */ |
| #define DEFAULT_TDLS_SLEEP_PERIOD 30 |
| |
| /** TDLS status */ |
| typedef enum _tdlsStatus_e { |
| TDLS_NOT_SETUP = 0, |
| TDLS_SETUP_INPROGRESS, |
| TDLS_SETUP_COMPLETE, |
| TDLS_SETUP_FAILURE, |
| TDLS_TEAR_DOWN, |
| TDLS_SWITCHING_CHANNEL, |
| TDLS_IN_BASE_CHANNEL, |
| TDLS_IN_OFF_CHANNEL, |
| } tdlsStatus_e; |
| /** station node */ |
| typedef struct _sta_node sta_node, *psta_node; |
| |
| /** station node*/ |
| struct _sta_node { |
| /** previous node */ |
| sta_node *pprev; |
| /** next node */ |
| sta_node *pnext; |
| /** station mac address */ |
| t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH]; |
| /** wmm flag */ |
| t_u8 is_wmm_enabled; |
| /** 11n flag */ |
| t_u8 is_11n_enabled; |
| /** AMPDU STA */ |
| t_u8 ampdu_sta[MAX_NUM_TID]; |
| /** last rx_seq */ |
| t_u16 rx_seq[MAX_NUM_TID]; |
| /** max amsdu size */ |
| t_u16 max_amsdu; |
| /** HT cap */ |
| IEEEtypes_HTCap_t HTcap; |
| /** 11ac flag */ |
| t_u8 is_11ac_enabled; |
| /** UAP 11ax flag */ |
| t_u8 is_11ax_enabled; |
| IEEEtypes_HECap_t he_cap; |
| /** SNR */ |
| t_s8 snr; |
| /** Noise Floor */ |
| t_s8 nf; |
| /** peer capability */ |
| t_u16 capability; |
| /** tdls status */ |
| tdlsStatus_e status; |
| /** flag for host based tdls */ |
| t_u8 external_tdls; |
| /** peer support rates */ |
| t_u8 support_rate[32]; |
| /** rate size */ |
| t_u8 rate_len; |
| /*Qos capability info */ |
| t_u8 qos_info; |
| /** HT info in TDLS setup confirm*/ |
| IEEEtypes_HTInfo_t HTInfo; |
| /** peer BSSCO_20_40*/ |
| IEEEtypes_2040BSSCo_t BSSCO_20_40; |
| /*Extended capability */ |
| IEEEtypes_ExtCap_t ExtCap; |
| /*RSN IE */ |
| IEEEtypes_Generic_t rsn_ie; |
| /**Link ID*/ |
| IEEEtypes_LinkIDElement_t link_ie; |
| /** AID info */ |
| IEEEtypes_AID_t aid_info; |
| /** VHT Capabilities IE */ |
| IEEEtypes_VHTCap_t vht_cap; |
| /** VHT Operations IE */ |
| IEEEtypes_VHTOprat_t vht_oprat; |
| /** wapi key on off flag */ |
| t_u8 wapi_key_on; |
| /** tx pause status */ |
| t_u8 tx_pause; |
| /** station band mode */ |
| t_u16 bandmode; |
| #if defined(DRV_EMBEDDED_AUTHENTICATOR) || defined(DRV_EMBEDDED_SUPPLICANT) |
| t_void *cm_connectioninfo; |
| #endif |
| sta_stats stats; |
| }; |
| |
| /** 802.11h State information kept in the 'mlan_adapter' driver structure */ |
| typedef struct { |
| /** Min TX Power capability sent to FW for 11h use and fw power control |
| */ |
| t_s8 min_tx_power_capability; |
| /** Max TX Power capability sent to FW for 11h use and fw power control |
| */ |
| t_s8 max_tx_power_capability; |
| /** User provisioned local power constraint sent in association requests |
| */ |
| t_s8 usr_def_power_constraint; |
| /** Received CHANNEL_SWITCH_ANN event */ |
| t_bool recvd_chanswann_event; |
| /** Indicates an interface wants to enable master radar detection */ |
| t_bool master_radar_det_enable_pending; |
| /** Indicates an interface wants to enable slave radar detection */ |
| t_bool slave_radar_det_enable_pending; |
| /** Indicates whether master radar detection active in the firmware */ |
| t_bool is_master_radar_det_active; |
| /** Indicates whether slave radar detection active in the firmware */ |
| t_bool is_slave_radar_det_active; |
| /** Quiet IE */ |
| IEEEtypes_Quiet_t quiet_ie; |
| } wlan_11h_device_state_t; |
| |
| /** Enumeration for DFS Timestamp represents field */ |
| enum _dfs_timestamp_repr_e { |
| /** Ignore entry */ |
| DFS_TS_REPR_NOT_IN_USE = 0, |
| /** NOP (Non-Occupancy Period) start time */ |
| DFS_TS_REPR_NOP_START = 1, |
| /** CAC (Channel Availability Check) completion time */ |
| DFS_TS_REPR_CAC_COMPLETION |
| }; |
| |
| /** DFS Timestamp type used for marking NOP/CAC events */ |
| typedef struct _wlan_dfs_timestamp_t wlan_dfs_timestamp_t; |
| |
| /** DFS Timestamp type used for marking NOP/CAC events */ |
| struct _wlan_dfs_timestamp_t { |
| /** Pointer to previous node */ |
| wlan_dfs_timestamp_t *pprev; |
| /** Pointer to next node */ |
| wlan_dfs_timestamp_t *pnext; |
| /** WLAN Channel number */ |
| t_u8 channel; |
| /** What this timestamp represents */ |
| t_u8 represents; |
| /** reserved field */ |
| t_u16 reserved; |
| /** timestamp - seconds */ |
| t_u32 ts_sec; |
| /** timestamp - microseconds */ |
| t_u32 ts_usec; |
| }; |
| |
| /** DFS State information kept in the 'mlan_adapter' driver structure */ |
| typedef struct { |
| /** Indicates whether DFS channel check is occurring in firmware */ |
| t_bool dfs_check_pending; |
| /** Indicates whether DFS channel check found radar */ |
| t_bool dfs_radar_found; |
| /** Channel radar is being checked on. BAND_A is assumed. */ |
| t_u8 dfs_check_channel; |
| /** point to the priv which start the DFS check */ |
| t_void *dfs_check_priv; |
| /** Timestamp when we got last report, |
| * to determine if data is old or not. |
| */ |
| t_u32 dfs_report_time_sec; |
| /** List for holding dfs_timestamps for NOP/CAC events */ |
| mlan_list_head dfs_ts_head; |
| } wlan_dfs_device_state_t; |
| |
| /** Enumeration for mlan_ds_11h_radar_det_hndlg stages */ |
| enum _mlan_ds_11h_rdh_stages { |
| RDH_OFF = 0, |
| RDH_CHK_INTFS = 1, |
| RDH_STOP_TRAFFIC, |
| RDH_GET_INFO_CHANNEL, |
| RDH_GET_INFO_BEACON_DTIM, |
| RDH_SET_CUSTOM_IE, |
| RDH_REM_CUSTOM_IE, |
| RDH_STOP_INTFS, |
| RDH_SET_NEW_CHANNEL, |
| RDH_RESTART_INTFS, |
| RDH_RESTART_TRAFFIC |
| }; |
| |
| /** State info for Radar Detected Handling kept in 'mlan_adapter' */ |
| typedef struct { |
| /** Stage (of Operation) */ |
| t_u8 stage; |
| /** Number of interfaces to handle */ |
| t_u8 priv_list_count; |
| /** Index of interface in process (used by some stages) */ |
| t_u8 priv_curr_idx; |
| /** Current Channel (to leave) */ |
| t_u8 curr_channel; |
| /** New Channel (to switch to) */ |
| t_u8 new_channel; |
| /** UAP band_config */ |
| Band_Config_t uap_band_cfg; |
| /** BEACON*DTIM period (in msec; max of STA/UAP) */ |
| t_u16 max_bcn_dtim_ms; |
| /** tx block flag */ |
| t_u8 tx_block; |
| /** List of interfaces to handle */ |
| mlan_private *priv_list[MLAN_MAX_BSS_NUM]; |
| } wlan_radar_det_hndlg_state_t; |
| |
| /** DFS/RDH testing exception settings kept in 'mlan_adapter' */ |
| typedef struct { |
| /** user-configured CAC period (in msec) */ |
| t_u32 user_cac_period_msec; |
| /** user-configured NOP period (in sec) */ |
| t_u16 user_nop_period_sec; |
| /** user-configured skip channel change on radar */ |
| t_bool no_channel_change_on_radar; |
| /** user-configured new channel to change to on radar */ |
| t_u8 fixed_new_channel_on_radar; |
| /** user-configured cac restart */ |
| t_u8 cac_restart; |
| /** cac channel */ |
| t_u8 chan; |
| /** band cfg */ |
| Band_Config_t bandcfg; |
| /** cac time */ |
| t_u32 millisec_dwell_time; |
| } wlan_dfs_testing_settings_t; |
| |
| /** |
| * @brief Driver measurement state held in 'mlan_adapter' structure |
| * |
| * Used to record a measurement request that the driver is pending on |
| * the result (received measurement report). |
| */ |
| typedef struct { |
| /** |
| * Dialog token of a pending measurement request/report. Used to |
| * block execution while waiting for the specific dialog token |
| */ |
| t_u8 meas_rpt_pend_on; |
| |
| /** |
| * Measurement report received from the firmware that we were pending on |
| */ |
| HostCmd_DS_MEASUREMENT_REPORT meas_rpt_returned; |
| |
| } wlan_meas_state_t; |
| |
| #ifdef SDIO |
| /** |
| * @brief Link buffer into aggregate head buffer |
| * |
| * @param pmbuf_aggr Pointer to aggregation buffer |
| * @param pmbuf Pointer to buffer to copy |
| */ |
| static inline t_void |
| wlan_link_buf_to_aggr(pmlan_buffer pmbuf_aggr, pmlan_buffer pmbuf) |
| { |
| /* link new buf at end of list */ |
| pmbuf->pnext = pmbuf_aggr; |
| pmbuf->pprev = pmbuf_aggr->pprev; |
| pmbuf->pparent = pmbuf_aggr; |
| pmbuf_aggr->pprev->pnext = pmbuf; |
| pmbuf_aggr->pprev = pmbuf; |
| pmbuf_aggr->use_count++; |
| } |
| |
| /** data structure for SDIO MPA TX */ |
| typedef struct _sdio_mpa_tx { |
| /** allocated buf for tx aggreation */ |
| t_u8 *head_ptr; |
| /** multiport tx aggregation buffer pointer */ |
| t_u8 *buf; |
| /** multiport tx aggregation buffer length */ |
| t_u32 buf_len; |
| /** multiport tx aggregation packet count */ |
| t_u32 pkt_cnt; |
| /** multiport tx aggregation ports */ |
| t_u32 ports; |
| /** multiport tx aggregation starting port */ |
| t_u16 start_port; |
| /** multiport tx aggregation enable/disable flag */ |
| t_u8 enabled; |
| /** multiport tx aggregation buffer size */ |
| t_u32 buf_size; |
| /** multiport tx aggregation pkt aggr limit */ |
| t_u32 pkt_aggr_limit; |
| /** multiport write info */ |
| t_u16 mp_wr_info[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX]; |
| /** multiport rx aggregation mbuf array */ |
| pmlan_buffer mbuf_arr[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX]; |
| } sdio_mpa_tx; |
| |
| /** data structure for SDIO MPA RX */ |
| typedef struct _sdio_mpa_rx { |
| /** allocated buf for rx aggreation */ |
| t_u8 *head_ptr; |
| /** multiport rx aggregation buffer pointer */ |
| t_u8 *buf; |
| /** multiport rx aggregation buffer length */ |
| t_u32 buf_len; |
| /** multiport rx aggregation packet count */ |
| t_u32 pkt_cnt; |
| /** multiport rx aggregation ports */ |
| t_u32 ports; |
| /** multiport rx aggregation starting port */ |
| t_u16 start_port; |
| |
| /** multiport rx aggregation mbuf array */ |
| pmlan_buffer mbuf_arr[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX]; |
| /** multiport rx aggregation pkt len array */ |
| t_u32 len_arr[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX]; |
| |
| /** multiport rx aggregation enable/disable flag */ |
| t_u8 enabled; |
| /** multiport rx aggregation buffer size */ |
| t_u32 buf_size; |
| /** multiport rx aggregation pkt aggr limit */ |
| t_u32 pkt_aggr_limit; |
| } sdio_mpa_rx; |
| #endif |
| |
| #ifdef USB |
| /** data structure for USB Rx Deaggregation */ |
| typedef struct _usb_rx_deaggr_params { |
| /** Rx aggregation control */ |
| usb_aggr_ctrl_cfg aggr_ctrl; |
| } usb_rx_deaggr_params; |
| |
| #define MAX_USB_TX_PORT_NUM 1 |
| /** data structure for USB Tx Aggregation */ |
| typedef struct _usb_tx_aggr_params { |
| /** Tx aggregation control */ |
| usb_aggr_ctrl_cfg aggr_ctrl; |
| /** allocated pmbuf for tx aggreation */ |
| pmlan_buffer pmbuf_aggr; |
| /** packet len used in pmbuf_aggr */ |
| t_u32 aggr_len; |
| /** usb_tx_aggr timer */ |
| t_void *paggr_hold_timer; |
| /** usb_tx_aggr timer set flag */ |
| t_u8 aggr_hold_timer_is_set; |
| /** Timeout duration in milliseconds to wait for aggregation */ |
| t_u32 hold_timeout_msec; |
| /** lock for transmission */ |
| t_void *paggr_lock; |
| /** port for data transmission */ |
| t_u32 port; |
| /** pointer to moal_adatper structure */ |
| t_void *phandle; |
| } usb_tx_aggr_params, *pusb_tx_aggr_params; |
| #endif |
| |
| /** Type definition of mef_entry*/ |
| typedef struct _mef_cfg_data { |
| /** criteria*/ |
| t_u32 criteria; |
| /** entry num*/ |
| t_u16 entry_num; |
| /** entry pointer*/ |
| mef_entry_t *pentry; |
| } mef_cfg_data; |
| |
| /** Type definition of mef_entry*/ |
| typedef struct _mef_entry { |
| /** Flag for auto arp entry*/ |
| int enable_autoarp_entry; |
| /** Num for wowlan entry*/ |
| int num_wowlan_entry; |
| /** Num for IPv6 neighbor solicitation message offload */ |
| int num_ipv6_ns_offload; |
| |
| /** criteria*/ |
| t_u32 criteria; |
| /** MEF CFG Array to store etted_entry_bitmap; |
| * Caution: 0-3 is for NVIDIA WHITE/BLACK list entries |
| * Caution: 4 is for NVIDIA ping entry |
| * Caution: 5 is for Auto Arp Entry |
| * Caution: 6 is for wowlan Entry |
| * Caution: 7 is for IPv6 Neighbor Solicitation offload Entry |
| */ |
| mef_entry_t entry[MAX_NUM_ENTRIES]; |
| } mef_entry; |
| |
| /** vdll_dnld_ctrl structure */ |
| typedef struct _vdll_dnld_ctrl { |
| /** pending VDLL block */ |
| t_u8 *pending_block; |
| /* pending VDLL block len */ |
| t_u16 pending_block_len; |
| /** memory for VDLL fw image */ |
| t_u8 *vdll_mem; |
| /** VDLL fw image len */ |
| t_u32 vdll_len; |
| #if defined(SDIO) || defined(PCIE) |
| /** mlan_buffer for VDLL download */ |
| mlan_buffer *cmd_buf; |
| #endif |
| } vdll_dnld_ctrl, *pvdll_dnld_ctrl; |
| |
| /** mlan_init_para structure */ |
| typedef struct _mlan_init_para { |
| #ifdef MFG_CMD_SUPPORT |
| /** MFG mode */ |
| t_u32 mfg_mode; |
| #endif |
| #ifdef SDIO |
| /** SDIO interrupt mode (0: INT_MODE_SDIO, 1: INT_MODE_GPIO) */ |
| t_u32 int_mode; |
| /** GPIO interrupt pin number */ |
| t_u32 gpio_pin; |
| /** SDIO MPA Tx */ |
| t_u32 mpa_tx_cfg; |
| /** SDIO MPA Rx */ |
| t_u32 mpa_rx_cfg; |
| #endif |
| /** Auto deep sleep */ |
| t_u32 auto_ds; |
| /** IEEE PS mode */ |
| t_u32 ps_mode; |
| /** Max Tx buffer size */ |
| t_u32 max_tx_buf; |
| /** 802.11d configuration */ |
| t_u32 cfg_11d; |
| /** 802.11H DFS Master Radar Detect */ |
| t_u32 dfs_master_radar_det_en; |
| /** 802.11H DFS Slave Radar Detect */ |
| t_u32 dfs_slave_radar_det_en; |
| /** dev cap mask */ |
| t_u32 dev_cap_mask; |
| /** oob independent reset mode */ |
| t_u32 indrstcfg; |
| /** passive to active scan */ |
| t_u8 passive_to_active_scan; |
| /** uap max sta */ |
| t_u8 uap_max_sta; |
| /** dfs w53 cfg */ |
| t_u8 dfs53cfg; |
| #ifdef PCIE |
| /** adma ring size */ |
| t_u16 ring_size; |
| #endif |
| t_u8 ext_scan; |
| } mlan_init_para, *pmlan_init_para; |
| |
| #ifdef SDIO |
| typedef struct _mlan_sdio_card_reg { |
| t_u8 start_rd_port; |
| t_u8 start_wr_port; |
| t_u8 base_0_reg; |
| t_u8 base_1_reg; |
| t_u8 poll_reg; |
| t_u8 host_int_enable; |
| t_u8 host_int_status; |
| t_u8 status_reg_0; |
| t_u8 status_reg_1; |
| t_u8 sdio_int_mask; |
| t_u32 data_port_mask; |
| t_u8 max_mp_regs; |
| t_u8 rd_bitmap_l; |
| t_u8 rd_bitmap_u; |
| t_u8 rd_bitmap_1l; |
| t_u8 rd_bitmap_1u; |
| t_u8 wr_bitmap_l; |
| t_u8 wr_bitmap_u; |
| t_u8 wr_bitmap_1l; |
| t_u8 wr_bitmap_1u; |
| t_u8 rd_len_p0_l; |
| t_u8 rd_len_p0_u; |
| t_u8 card_config_2_1_reg; |
| t_u8 cmd_config_0; |
| t_u8 cmd_config_1; |
| t_u8 cmd_config_2; |
| t_u8 cmd_config_3; |
| t_u8 cmd_rd_len_0; |
| t_u8 cmd_rd_len_1; |
| t_u8 cmd_rd_len_2; |
| t_u8 cmd_rd_len_3; |
| t_u8 io_port_0_reg; |
| t_u8 io_port_1_reg; |
| t_u8 io_port_2_reg; |
| t_u8 host_int_rsr_reg; |
| t_u8 host_int_mask_reg; |
| t_u8 host_int_status_reg; |
| t_u8 host_restart_reg; |
| t_u8 card_to_host_event_reg; |
| t_u8 host_interrupt_mask_reg; |
| t_u8 card_interrupt_status_reg; |
| t_u8 card_interrupt_rsr_reg; |
| t_u8 card_revision_reg; |
| t_u8 card_ocr_0_reg; |
| t_u8 card_ocr_1_reg; |
| t_u8 card_ocr_3_reg; |
| t_u8 card_config_reg; |
| t_u8 card_misc_cfg_reg; |
| t_u8 debug_0_reg; |
| t_u8 debug_1_reg; |
| t_u8 debug_2_reg; |
| t_u8 debug_3_reg; |
| t_u32 fw_reset_reg; |
| t_u8 fw_reset_val; |
| t_u8 fw_dnld_offset_0_reg; |
| t_u8 fw_dnld_offset_1_reg; |
| t_u8 fw_dnld_offset_2_reg; |
| t_u8 fw_dnld_offset_3_reg; |
| t_u8 fw_dnld_status_0_reg; |
| t_u8 fw_dnld_status_1_reg; |
| t_u8 winner_check_reg; |
| } mlan_sdio_card_reg, *pmlan_sdio_card_reg; |
| |
| typedef struct _mlan_sdio_card { |
| const mlan_sdio_card_reg *reg; |
| /** maximum ports */ |
| t_u8 max_ports; |
| /** mp aggregation packet limit */ |
| t_u8 mp_aggr_pkt_limit; |
| /** sdio new mode support */ |
| t_bool supports_sdio_new_mode; |
| /** max tx aggr buf size */ |
| t_u32 mp_tx_aggr_buf_size; |
| /** max rx aggr buf size */ |
| t_u32 mp_rx_aggr_buf_size; |
| /** IO port */ |
| t_u32 ioport; |
| /** number of interrupt receive */ |
| t_u32 num_of_irq; |
| /** max SDIO single port tx size */ |
| t_u16 max_sp_tx_size; |
| /** max SDIO single port rx size */ |
| t_u16 max_sp_rx_size; |
| /** SDIO multiple port read bitmap */ |
| t_u32 mp_rd_bitmap; |
| /** SDIO multiple port write bitmap */ |
| t_u32 mp_wr_bitmap; |
| /** SDIO end port from txbufcfg */ |
| t_u16 mp_end_port; |
| /** SDIO port mask calculated based on txbufcfg end port */ |
| t_u32 mp_data_port_mask; |
| /** Current available port for read */ |
| t_u8 curr_rd_port; |
| /** Current available port for write */ |
| t_u8 curr_wr_port; |
| /** FW update port number */ |
| t_u32 mp_update[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX * 2]; |
| /** Invalid port update count */ |
| t_u32 mp_invalid_update; |
| /** Array to store values of SDIO multiple port group registers */ |
| t_u8 *mp_regs; |
| /** allocated buf to read SDIO multiple port group registers */ |
| t_u8 *mp_regs_buf; |
| /** buffer to handle receive packet */ |
| t_u8 *rx_buf; |
| /** allocated buf for receive */ |
| t_u8 *rx_buffer; |
| /* see blk_queue_max_segment_size */ |
| t_u32 max_seg_size; |
| /* see blk_queue_max_segments */ |
| t_u16 max_segs; |
| |
| /** data structure for SDIO MPA TX */ |
| sdio_mpa_tx mpa_tx; |
| /** packet number for tx aggr */ |
| t_u32 mpa_tx_count[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX]; |
| /** no more packets count*/ |
| t_u32 mpa_sent_last_pkt; |
| /** no write_ports count */ |
| t_u32 mpa_sent_no_ports; |
| /** last wr_bitmap from FW */ |
| t_u32 last_recv_wr_bitmap; |
| /** last wr_bitmap from FW */ |
| t_u32 last_recv_rd_bitmap; |
| /** last mp_wr_bitmap */ |
| t_u32 last_mp_wr_bitmap[SDIO_MP_DBG_NUM]; |
| /** last ports for cmd53 write data */ |
| t_u32 last_mp_wr_ports[SDIO_MP_DBG_NUM]; |
| /** last length for cmd53 write data */ |
| t_u32 last_mp_wr_len[SDIO_MP_DBG_NUM]; |
| /** length info for cmd53 write data */ |
| t_u16 last_mp_wr_info[SDIO_MP_DBG_NUM * SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX]; |
| /** last curr_wr_port */ |
| t_u8 last_curr_wr_port[SDIO_MP_DBG_NUM]; |
| |
| /** buffer for mp debug */ |
| t_u8 *mpa_buf; |
| /** length info for mp buf size */ |
| t_u32 mpa_buf_size; |
| |
| /** last mp_index */ |
| t_u8 last_mp_index; |
| |
| /** data structure for SDIO MPA RX */ |
| sdio_mpa_rx mpa_rx; |
| /** packet number for tx aggr */ |
| t_u32 mpa_rx_count[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX]; |
| |
| /** SDIO interrupt mode (0: INT_MODE_SDIO, 1: INT_MODE_GPIO) */ |
| t_u32 int_mode; |
| /** GPIO interrupt pin number */ |
| t_u32 gpio_pin; |
| |
| /** flag for sdio rx aggr */ |
| t_bool sdio_rx_aggr_enable; |
| /** fw rx block size */ |
| t_u16 sdio_rx_block_size; |
| } mlan_sdio_card, *pmlan_sdio_card; |
| #endif |
| |
| #ifdef PCIE |
| #define MAX_TXRX_BD 32 |
| #define ADMA_MAX_TXRX_BD 512 |
| #define ADMA_DEF_TXRX_BD 128 |
| /** 128 entry will mapping to 7*/ |
| #define TXRX_DEF_NUM_DESC 7 |
| /** 8 entry will mapping to 3 */ |
| #define EVT_NUM_DESC 3 |
| #define MLAN_MAX_TXRX_BD MAX(ADMA_MAX_TXRX_BD, MAX_TXRX_BD) |
| /** 8 Event buffer ring */ |
| #define MLAN_MAX_EVT_BD 0x08 |
| typedef struct _mlan_pcie_card_reg { |
| /* TX buffer description rd pointer */ |
| t_u32 reg_txbd_rdptr; |
| /* TX buffer description wr pointer */ |
| t_u32 reg_txbd_wrptr; |
| /* RX buffer description rd pointer */ |
| t_u32 reg_rxbd_rdptr; |
| /* RX buffer description wr pointer */ |
| t_u32 reg_rxbd_wrptr; |
| /** evtbd rdptr register */ |
| t_u32 reg_evtbd_rdptr; |
| /** evtbd wrptr register */ |
| t_u32 reg_evtbd_wrptr; |
| /** host int mask register */ |
| t_u16 reg_host_int_mask; |
| /** host int status mask register*/ |
| t_u16 reg_host_int_status_mask; |
| /** host int status register */ |
| t_u16 reg_host_int_status; |
| /** host int status clr selection */ |
| t_u32 reg_host_int_clr_sel; |
| /** cpu int event register */ |
| t_u16 reg_cpu_int_event; |
| /** ip revision register */ |
| t_u16 reg_ip_rev; |
| /** revision id register */ |
| t_u32 reg_rev_id; |
| /** driver ready register */ |
| t_u16 reg_drv_ready; |
| /** cpu int status register */ |
| t_u16 reg_cpu_int_status; |
| /** scratch 0 register */ |
| t_u16 reg_scratch_0; |
| /** scratch 1 register */ |
| t_u16 reg_scratch_1; |
| /** scratch 2 register */ |
| t_u16 reg_scratch_2; |
| /** scratch 3 register */ |
| t_u16 reg_scratch_3; |
| /** scratch 6 register */ |
| t_u16 reg_scratch_6; |
| /** scratch 7 register */ |
| t_u16 reg_scratch_7; |
| /** host interrupt mask*/ |
| t_u32 host_intr_mask; |
| /** data send interrupt for host*/ |
| t_u32 host_intr_dnld_done; |
| /** Data receive interrupt for host */ |
| t_u32 host_intr_upld_rdy; |
| /** Command sent interrupt for host */ |
| t_u32 host_intr_cmd_done; |
| /** Event ready interrupt for host */ |
| t_u32 host_intr_event_rdy; |
| t_u32 host_intr_cmd_dnld; |
| /* TX/RX buffer description mask */ |
| t_u32 txrx_rw_ptr_mask; |
| /* TX/RX buffer description wrap mask */ |
| t_u32 txrx_rw_ptr_wrap_mask; |
| /* TX/RX buffer description indication */ |
| t_u32 txrx_rw_ptr_rollover_ind; |
| /** ADMA feature */ |
| t_u8 use_adma; |
| /** write to clear interrupt status flag */ |
| t_u8 msi_int_wr_clr; |
| } mlan_pcie_card_reg, *pmlan_pcie_card_reg; |
| |
| typedef struct _mlan_pcie_card { |
| const mlan_pcie_card_reg *reg; |
| /** PCIE interrupt modes 0: Legacy, 1: MSI, 2:MSI-X */ |
| t_u32 pcie_int_mode; |
| /** PCIE function number */ |
| t_u8 func_num; |
| /** pending num of tx ring buffer in firmware */ |
| t_u8 txbd_pending; |
| /** Write pointer for TXBD ring */ |
| t_u32 txbd_wrptr; |
| /** Shadow copy of TXBD read pointer */ |
| t_u32 txbd_rdptr; |
| /** TXBD ring size */ |
| t_u32 txbd_ring_size; |
| /** Lock for protecting the TX ring */ |
| t_void *tx_ring_lock; |
| /** Virtual base address of txbd_ring */ |
| t_u8 *txbd_ring_vbase; |
| /** Physical base address of txbd_ring */ |
| t_u64 txbd_ring_pbase; |
| /** Ring of buffer descriptors for TX */ |
| t_void *txbd_ring[MLAN_MAX_TXRX_BD]; |
| /** A list of mlan_buffer objects used for data tx */ |
| mlan_buffer *tx_buf_list[MLAN_MAX_TXRX_BD]; |
| /** Flush indicator for txbd_ring */ |
| t_bool txbd_flush; |
| /** txrx data dma ring size */ |
| t_u16 txrx_bd_size; |
| /** txrx num desc */ |
| t_u16 txrx_num_desc; |
| |
| /** Shadow copy of RXBD write pointer */ |
| t_u32 rxbd_wrptr; |
| /** RxBD read pointer */ |
| t_u32 rxbd_rdptr; |
| /** RXBD ring size */ |
| t_u32 rxbd_ring_size; |
| /** A spinlock for rxbd_ring */ |
| t_void *rx_ring_lock; |
| /** Virtual base address of rxbd_ring */ |
| t_u8 *rxbd_ring_vbase; |
| /** Physical base address of rxbd_ring */ |
| t_u64 rxbd_ring_pbase; |
| /** Ring of buffer descriptors for RX */ |
| t_void *rxbd_ring[MLAN_MAX_TXRX_BD]; |
| /** A list of mlan_buffer objects used for data rx */ |
| mlan_buffer *rx_buf_list[MLAN_MAX_TXRX_BD]; |
| |
| /** Shadow copy of cmdrsp/evt write pointer */ |
| t_u32 evtbd_wrptr; |
| /** Read pointer for cmdrsp/evt ring */ |
| t_u32 evtbd_rdptr; |
| /** Size of the cmdrsp/evt ring */ |
| t_u32 evtbd_ring_size; |
| /** Virtual base address of evtbd_bd_ring */ |
| t_u8 *evtbd_ring_vbase; |
| /** Physical base address of evtbd_bd_ring */ |
| t_u64 evtbd_ring_pbase; |
| /** Ring of buffer descriptors for EVENT */ |
| t_void *evtbd_ring[MLAN_MAX_EVT_BD]; |
| /** A list of mlan_buffer objects used for EVENT */ |
| mlan_buffer *evt_buf_list[MLAN_MAX_EVT_BD]; |
| |
| /** Command buffer */ |
| mlan_buffer *cmd_buf; |
| /** Command response buffer */ |
| mlan_buffer *cmdrsp_buf; |
| /** Command buffer */ |
| mlan_buffer *vdll_cmd_buf; |
| /** last tx_pkt_size */ |
| t_u32 last_tx_pkt_size[MLAN_MAX_TXRX_BD]; |
| } mlan_pcie_card, *pmlan_pcie_card; |
| #endif |
| |
| #ifdef USB |
| typedef struct _mlan_usb_card { |
| /** data structure for USB Rx Deaggregation */ |
| usb_rx_deaggr_params usb_rx_deaggr; |
| /** data structure for USB Tx Aggregation */ |
| usb_tx_aggr_params usb_tx_aggr[MAX_USB_TX_PORT_NUM]; |
| /** USB sggregation supported by FW */ |
| t_u8 fw_usb_aggr; |
| |
| } mlan_usb_card, *pmlan_usb_card; |
| |
| #endif |
| |
| typedef struct _mlan_card_info { |
| /** Max Tx buffer size */ |
| t_u32 max_tx_buf_size; |
| /** support V14_FW_API */ |
| t_u8 v14_fw_api; |
| /** support V16_FW_API */ |
| t_u8 v16_fw_api; |
| /** support V17_FW_API */ |
| t_u8 v17_fw_api; |
| /** suppress PS handshake */ |
| t_u8 supp_ps_handshake; |
| /** DEFAULT_11N_TX_BF_CAP */ |
| t_u32 default_11n_tx_bf_cap; |
| } mlan_card_info, *pmlan_card_info; |
| |
| typedef struct _mlan_adapter mlan_adapter, *pmlan_adapter; |
| |
| /**Adapter_operations data structure*/ |
| typedef struct _adapter_operations { |
| /**firmware download handler*/ |
| mlan_status (*dnld_fw) (pmlan_adapter pmadapter, pmlan_fw_image pmfw); |
| /**interrupt handler*/ |
| mlan_status (*interrupt) (t_u16 msg_id, pmlan_adapter pmadapter); |
| /**INT process handler*/ |
| mlan_status (*process_int_status) (pmlan_adapter pmadapter); |
| /**host to card handler*/ |
| mlan_status (*host_to_card) (pmlan_private pmpriv, t_u8 type, |
| mlan_buffer *pmbuf, |
| mlan_tx_param *tx_param); |
| /*wakeup card */ |
| mlan_status (*wakeup_card) (pmlan_adapter pmadapter, t_u8 timeout); |
| /*reset the PM setting of card */ |
| mlan_status (*reset_card) (pmlan_adapter adapter); |
| /** Handle event/cmd complete*/ |
| mlan_status (*event_complete) (mlan_adapter *pmlan_adapter, |
| pmlan_buffer pmbuf, mlan_status status); |
| /** Handle complete receiving data */ |
| mlan_status (*data_complete) (mlan_adapter *pmlan_adapter, |
| pmlan_buffer pmbuf, mlan_status status); |
| /** Handle command response complete */ |
| mlan_status (*cmdrsp_complete) (mlan_adapter *pmlan_adapter, |
| pmlan_buffer pmbuf, mlan_status status); |
| /** Handle rx packet */ |
| mlan_status (*handle_rx_packet) (mlan_adapter *pmadapter, |
| pmlan_buffer pmbuf); |
| /** handle dump interface specific info */ |
| mlan_status (*debug_dump) (mlan_adapter *pmadapter); |
| /** disable host interrupt */ |
| mlan_status (*disable_host_int) (mlan_adapter *pmadapter); |
| /** enable host interrupt */ |
| mlan_status (*enable_host_int) (mlan_adapter *pmadapter); |
| /**Interface header length*/ |
| t_u32 intf_header_len; |
| } mlan_adapter_operations; |
| |
| /** Adapter data structure for MLAN */ |
| typedef struct _mlan_adapter { |
| /** MOAL handle structure */ |
| t_void *pmoal_handle; |
| /** BSS Attributes */ |
| mlan_bss_attr bss_attr[MLAN_MAX_BSS_NUM]; |
| /** Private pointer */ |
| pmlan_private priv[MLAN_MAX_BSS_NUM]; |
| /** Total number of Priv number */ |
| t_u8 priv_num; |
| /** Priority table for bss */ |
| mlan_bssprio_tbl bssprio_tbl[MLAN_MAX_BSS_NUM]; |
| /** Callback table */ |
| mlan_callbacks callbacks; |
| /** Init parameters */ |
| mlan_init_para init_para; |
| /** mlan_lock for init/shutdown */ |
| t_void *pmlan_lock; |
| /** main_proc_lock for main_process */ |
| t_void *pmain_proc_lock; |
| /** mlan_processing */ |
| t_u32 mlan_processing; |
| /** main_process_cnt */ |
| t_u32 main_process_cnt; |
| /** mlan_rx_processing */ |
| t_u32 mlan_rx_processing; |
| /** rx_proc_lock for main_rx_process */ |
| t_void *prx_proc_lock; |
| /** more_rx_task_flag */ |
| t_u32 more_rx_task_flag; |
| /** rx work enable flag */ |
| t_u8 rx_work_flag; |
| /* number of rx pkts queued */ |
| t_u16 rx_pkts_queued; |
| /** more task flag */ |
| t_u32 more_task_flag; |
| /** delay task flag */ |
| t_u32 delay_task_flag; |
| /** Max tx buf size */ |
| t_u16 max_tx_buf_size; |
| /** Tx buf size */ |
| t_u16 tx_buf_size; |
| /** current tx buf size in fw */ |
| t_u16 curr_tx_buf_size; |
| /** flush data flag */ |
| t_u8 flush_data; |
| /** STATUS variables */ |
| WLAN_HARDWARE_STATUS hw_status; |
| /** PnP SUPPORT */ |
| t_u8 surprise_removed; |
| /** FW hang report */ |
| t_u8 fw_hang_report; |
| |
| /** ECSA support */ |
| t_u8 ecsa_enable; |
| |
| /** Get log support */ |
| t_u8 getlog_enable; |
| |
| /** Radio on flag */ |
| t_u16 radio_on; |
| |
| /** Firmware release number */ |
| t_u32 fw_release_number; |
| /** firmware version */ |
| t_u8 fw_ver; |
| /** firmware minor version */ |
| t_u8 fw_min_ver; |
| /** firmare hotfix version */ |
| t_u8 fw_hotfix_ver; |
| /** uap firmware version */ |
| t_u8 uap_fw_ver; |
| /** mac address retrun from get_hw_spec */ |
| t_u8 permanent_addr[MLAN_MAC_ADDR_LENGTH]; |
| /** Number of antenna used */ |
| t_u16 number_of_antenna; |
| /** antenna info */ |
| t_u8 antinfo; |
| /** Firmware capability information */ |
| t_u32 fw_cap_info; |
| /** Extended firmware capability information */ |
| t_u32 fw_cap_ext; |
| #if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || defined(PCIE9097) || defined(SD9097) || defined(USB9097) |
| /** High byte for 5G, low byte for 2G, like 0x2211 0x22 for 5G, 0x11 for |
| * 2G */ |
| t_u16 user_htstream; |
| #endif |
| /** vdll ctrl */ |
| vdll_dnld_ctrl vdll_ctrl; |
| #if defined(SDIO) || defined(PCIE) |
| /** pint_lock for interrupt handling */ |
| t_void *pint_lock; |
| /** Interrupt status */ |
| t_u32 ireg; |
| #endif |
| /** card type */ |
| t_u16 card_type; |
| /** card rev */ |
| t_u8 card_rev; |
| const mlan_card_info *pcard_info; |
| #ifdef SDIO |
| pmlan_sdio_card pcard_sd; |
| #endif |
| #ifdef PCIE |
| pmlan_pcie_card pcard_pcie; |
| #endif |
| #ifdef USB |
| pmlan_usb_card pcard_usb; |
| #endif |
| |
| /** Event cause */ |
| t_u32 event_cause; |
| /** Event buffer */ |
| pmlan_buffer pmlan_buffer_event; |
| /** Upload length */ |
| t_u32 upld_len; |
| /** Upload buffer*/ |
| t_u8 upld_buf[WLAN_UPLD_SIZE]; |
| /** Data sent: |
| * TRUE - Data is sent to fw, no Tx Done received |
| * FALSE - Tx done received for previous Tx |
| */ |
| t_u8 data_sent; |
| /** Data sent cnt */ |
| t_u32 data_sent_cnt; |
| /** CMD sent: |
| * TRUE - CMD is sent to fw, no CMD Done received |
| * FALSE - CMD done received for previous CMD |
| */ |
| t_u8 cmd_sent; |
| /** CMD Response received: |
| * TRUE - CMD is response is received from fw, and yet to process |
| * FALSE - No cmd response to process |
| */ |
| t_u8 cmd_resp_received; |
| /** Event received: |
| * TRUE - Event received from fw, and yet to process |
| * FALSE - No events to process |
| */ |
| t_u8 event_received; |
| |
| /** Data received: |
| * TRUE - Data received from fw |
| * FALSE - No Data received |
| */ |
| t_u8 data_received; |
| |
| /** Command-related variables */ |
| /** Command sequence number */ |
| t_u16 seq_num; |
| /** Command controller nodes */ |
| cmd_ctrl_node *cmd_pool; |
| /** Current Command */ |
| cmd_ctrl_node *curr_cmd; |
| /** mlan_lock for command */ |
| t_void *pmlan_cmd_lock; |
| /** Number of command timeouts */ |
| t_u32 num_cmd_timeout; |
| /** Last init fw command id */ |
| t_u16 last_init_cmd; |
| /** Command timer */ |
| t_void *pmlan_cmd_timer; |
| /** Command timer set flag */ |
| t_u8 cmd_timer_is_set; |
| /** time stamp for command dnld */ |
| t_u32 dnld_cmd_in_secs; |
| |
| /** Command Queues */ |
| /** Free command buffers */ |
| mlan_list_head cmd_free_q; |
| /** Pending command buffers */ |
| mlan_list_head cmd_pending_q; |
| /** Command queue for scanning */ |
| mlan_list_head scan_pending_q; |
| /** ioctl pending queue */ |
| mlan_list_head ioctl_pending_q; |
| /** pending_ioctl flag */ |
| t_u8 pending_ioctl; |
| pmlan_private pending_disconnect_priv; |
| /** mlan_processing */ |
| t_u32 scan_processing; |
| /** ext_scan enh support flag */ |
| t_u8 ext_scan_enh; |
| /** scan type: 0 legacy, 1: enhance scan*/ |
| t_u8 ext_scan_type; |
| /** ext scan timeout */ |
| t_u8 ext_scan_timeout; |
| /** coex scan flag */ |
| t_u8 coex_scan; |
| /** coex min scan time */ |
| t_u8 coex_min_scan_time; |
| /** coex max scan time */ |
| t_u8 coex_max_scan_time; |
| /** coex win size flag */ |
| t_u8 coex_win_size; |
| /** coex amdpdu tx win size */ |
| t_u8 coex_tx_win_size; |
| /** coex ampdu rx win size */ |
| t_u8 coex_rx_win_size; |
| /** Region code */ |
| t_u16 region_code; |
| /** Region Channel data */ |
| region_chan_t region_channel[MAX_REGION_CHANNEL_NUM]; |
| /** CFP table code for 2.4GHz */ |
| t_u8 cfp_code_bg; |
| /** CFP table code for 5GHz */ |
| t_u8 cfp_code_a; |
| wmm_ac_parameters_t ac_params[MAX_AC_QUEUES]; |
| /** Minimum BA Threshold */ |
| t_u8 min_ba_threshold; |
| #ifdef STA_SUPPORT |
| /** Universal Channel data */ |
| region_chan_t universal_channel[MAX_REGION_CHANNEL_NUM]; |
| /** Parsed region channel */ |
| parsed_region_chan_11d_t parsed_region_chan; |
| #endif /* STA_SUPPORT */ |
| /** 11D and Domain Regulatory Data */ |
| wlan_802_11d_domain_reg_t domain_reg; |
| /** Country Code */ |
| t_u8 country_code[COUNTRY_CODE_LEN]; |
| /** FSM variable for 11h support */ |
| wlan_11h_device_state_t state_11h; |
| /** FSM variable for DFS support */ |
| wlan_dfs_device_state_t state_dfs; |
| /** FSM variable for RDH support */ |
| wlan_radar_det_hndlg_state_t state_rdh; |
| /** variable to configure dfs channel switch count */ |
| t_s8 dfs_cs_count; |
| /** User configured settings for DFS testing */ |
| wlan_dfs_testing_settings_t dfs_test_params; |
| /** dfs w53 cfg */ |
| t_u8 dfs53cfg; |
| /** FSM variable for MEAS support */ |
| wlan_meas_state_t state_meas; |
| /** Scan table */ |
| BSSDescriptor_t *pscan_table; |
| /** scan age in secs */ |
| t_u32 age_in_secs; |
| /** Active scan for hidden ssid triggered */ |
| t_u8 active_scan_triggered; |
| /** channel statstics */ |
| ChanStatistics_t *pchan_stats; |
| /** Number of records in the chan_stats */ |
| t_u32 num_in_chan_stats; |
| /** index of chan stats */ |
| t_u32 idx_chan_stats; |
| t_u8 bgscan_reported; |
| |
| /** Number of records in the scan table */ |
| t_u32 num_in_scan_table; |
| /** Scan probes */ |
| t_u16 scan_probes; |
| |
| /** Scan type */ |
| t_u8 scan_type; |
| /** Scan mode */ |
| t_u32 scan_mode; |
| /** Specific scan time */ |
| t_u16 specific_scan_time; |
| /** Active scan time */ |
| t_u16 active_scan_time; |
| /** Passive scan time */ |
| t_u16 passive_scan_time; |
| /** Passive scan to active scan */ |
| t_u8 passive_to_active_scan; |
| /** scan channel gap time */ |
| t_u16 scan_chan_gap; |
| /** Scan block flag */ |
| t_u8 scan_block; |
| /** Extended scan or legacy scan */ |
| t_u8 ext_scan; |
| t_u32 bcn_buf_size; |
| /** Beacon buffer */ |
| t_u8 *bcn_buf; |
| /** Pointer to valid beacon buffer end */ |
| t_u8 *pbcn_buf_end; |
| /** allocate fixed scan beacon buffer size*/ |
| t_u32 fixed_beacon_buffer; |
| |
| /** F/W supported bands */ |
| t_u16 fw_bands; |
| /** User selected band to start adhoc network */ |
| t_u16 adhoc_start_band; |
| /** User selected bands */ |
| t_u16 config_bands; |
| /** Pointer to channel list last sent to the firmware for scanning */ |
| ChanScanParamSet_t *pscan_channels; |
| |
| /** Tx lock flag */ |
| t_u8 tx_lock_flag; |
| /** Rx lock flag */ |
| t_u8 rx_lock_flag; |
| /** main lock flag */ |
| t_u8 main_lock_flag; |
| #ifdef USB |
| /** Tx CMD endpoint address */ |
| t_u8 tx_cmd_ep; |
| /** Rx CMD/EVT endpoint address */ |
| t_u8 rx_cmd_ep; |
| /** Rx data endpoint address */ |
| t_u8 rx_data_ep; |
| /** Tx data endpoint address */ |
| t_u8 tx_data_ep; |
| #endif |
| |
| /** sleep_params_t */ |
| sleep_params_t sleep_params; |
| /** sleep_period_t (Enhanced Power Save) */ |
| sleep_period_t sleep_period; |
| /** saved sleep_period_t (Enhanced Power Save) */ |
| sleep_period_t saved_sleep_period; |
| |
| /** Power Save mode */ |
| /** |
| * Wlan802_11PowerModeCAM = disable |
| * Wlan802_11PowerModePSP = enable |
| */ |
| t_u16 ps_mode; |
| /** Power Save state */ |
| t_u32 ps_state; |
| /** Need to wakeup flag */ |
| t_u8 need_to_wakeup; |
| /** keep_wakeup */ |
| t_u8 keep_wakeup; |
| |
| /** Multiple DTIM */ |
| t_u16 multiple_dtim; |
| /** Local listen interval */ |
| t_u16 local_listen_interval; |
| /** Null packet interval */ |
| t_u16 null_pkt_interval; |
| |
| /** IEEE ps inactivity timout value */ |
| t_u16 inact_tmo; |
| /** Power save confirm sleep command buffer */ |
| pmlan_buffer psleep_cfm; |
| /** Beacon miss timeout */ |
| t_u16 bcn_miss_time_out; |
| |
| /** Deep Sleep flag */ |
| t_u8 is_deep_sleep; |
| /** Idle time */ |
| t_u16 idle_time; |
| /** Auto Deep Sleep enabled at init time */ |
| t_u8 init_auto_ds; |
| |
| /** delay null pkt flag */ |
| t_u8 delay_null_pkt; |
| /** Delay to PS in milliseconds */ |
| t_u16 delay_to_ps; |
| /** Enhanced PS mode */ |
| t_u16 enhanced_ps_mode; |
| /** Device wakeup required flag */ |
| t_u8 pm_wakeup_card_req; |
| |
| /** Gen NULL pkg */ |
| t_u16 gen_null_pkt; |
| |
| /** PPS/UAPSD mode flag */ |
| t_u16 pps_uapsd_mode; |
| /** Number of wakeup tries */ |
| t_u32 pm_wakeup_fw_try; |
| /** time stamp when host try to wake up firmware */ |
| t_u32 pm_wakeup_in_secs; |
| /** Card wakeup timer */ |
| t_void *pwakeup_fw_timer; |
| /** Card wakeup timer */ |
| t_u8 wakeup_fw_timer_is_set; |
| /** Number of wake up timeouts */ |
| t_u32 pm_wakeup_timeout; |
| |
| /** Host Sleep configured flag */ |
| t_u8 is_hs_configured; |
| /** Host Sleep configuration */ |
| hs_config_param hs_cfg; |
| /** Host Sleep activated flag */ |
| t_u8 hs_activated; |
| /** mef_flt_cfg_mef configuration */ |
| mef_entry entry_cfg; |
| /** Event body */ |
| t_u8 event_body[MAX_EVENT_SIZE]; |
| /** 802.11n device capabilities */ |
| t_u32 hw_dot_11n_dev_cap; |
| /** Device support for MIMO abstraction of MCSs */ |
| t_u8 hw_dev_mcs_support; |
| #ifdef STA_SUPPORT |
| /** Adhoc Secondary Channel Bandwidth */ |
| t_u8 chan_bandwidth; |
| #endif /* STA_SUPPORT */ |
| |
| /** 802.11ac device capabilities */ |
| t_u32 hw_dot_11ac_dev_cap; |
| /** 802.11ac device support for MIMO abstraction of MCSs */ |
| t_u32 hw_dot_11ac_mcs_support; |
| /** length of hw he capability */ |
| t_u8 hw_hecap_len; |
| /** 802.11ax HE capability */ |
| t_u8 hw_he_cap[54]; |
| /** length of hw 2.4G he capability */ |
| t_u8 hw_2g_hecap_len; |
| /** 802.11ax 2.4G HE capability */ |
| t_u8 hw_2g_he_cap[54]; |
| /** max mgmt IE index in device */ |
| t_u16 max_mgmt_ie_index; |
| /** Head of Rx data queue */ |
| mlan_list_head rx_data_queue; |
| #ifdef MFG_CMD_SUPPORT |
| t_u32 mfg_mode; |
| #endif |
| /** Debug */ |
| wlan_dbg dbg; |
| |
| /** RX pending for forwarding packets */ |
| mlan_scalar pending_bridge_pkts; |
| |
| #ifdef STA_SUPPORT |
| /** ARP filter buffer */ |
| t_u8 arp_filter[ARP_FILTER_MAX_BUF_SIZE]; |
| /** ARP filter buffer size */ |
| t_u32 arp_filter_size; |
| #endif /* STA_SUPPORT */ |
| /** Minimum delay between HsActive and HostWake (in msec) */ |
| t_u16 min_wake_holdoff; |
| /** Host sleep wake interval(in msec) */ |
| t_u32 hs_wake_interval; |
| /** Host sleep inactivity timeout (in msec) */ |
| t_u32 hs_inactivity_timeout; |
| /** Parameter type for indication gpio*/ |
| t_u8 param_type_ind; |
| /** GPIO pin for indication wakeup source */ |
| t_u32 ind_gpio; |
| /** Level on ind_gpio pin for indication normal wakeup source */ |
| t_u32 level; |
| /** Parameter type for extend hscfg*/ |
| t_u8 param_type_ext; |
| /** Events that will be forced ignore */ |
| t_u32 event_force_ignore; |
| /** Events that will use extend gap to inform host*/ |
| t_u32 event_use_ext_gap; |
| /** Extend gap*/ |
| t_u8 ext_gap; |
| /** GPIO wave level for extend hscfg */ |
| t_u8 gpio_wave; |
| /** Dynamic MIMO-SISO switch for hscfg*/ |
| t_u8 hs_mimo_switch; |
| /** management frame wakeup filter config */ |
| mlan_mgmt_frame_wakeup mgmt_filter[MAX_MGMT_FRAME_FILTER]; |
| /** Bypass TX queue pkt count */ |
| t_u32 bypass_pkt_count; |
| #ifdef STA_SUPPORT |
| /** warm-reset IOCTL request buffer pointer */ |
| pmlan_ioctl_req pwarm_reset_ioctl_req; |
| #endif |
| /** SCAN IOCTL request buffer pointer */ |
| pmlan_ioctl_req pscan_ioctl_req; |
| /** DPD data pointer */ |
| t_u8 *pdpd_data; |
| /** DPD data length */ |
| t_u32 dpd_data_len; |
| /** region txpowerlimit cfg data buf pointer */ |
| t_u8 *ptxpwr_data; |
| /** region txpowerlimit cfg data len */ |
| t_u32 txpwr_data_len; |
| /** Cal data pointer */ |
| t_u8 *pcal_data; |
| /** Cal data length */ |
| t_u32 cal_data_len; |
| /** tdls status */ |
| /* TDLS_NOT_SETUP|TDLS_SWITCHING_CHANNEL|TDLS_IN_BASE_CHANNEL|TDLS_IN_SWITCH_CHANNEL */ |
| tdlsStatus_e tdls_status; |
| /** Feature control bitmask */ |
| t_u32 feature_control; |
| |
| /** Control coex RX window size configuration */ |
| t_u8 coex_rx_winsize; |
| t_bool dfs_repeater; |
| t_u32 dfsr_channel; |
| t_u8 chanrpt_param_bandcfg; |
| #if defined(PCIE) |
| mlan_buffer *ssu_buf; |
| #endif |
| /** maximum sta connection */ |
| t_u8 max_sta_conn; |
| otp_region_info_t *otp_region; |
| chan_freq_power_t *cfp_otp_bg; |
| t_u8 *tx_power_table_bg; |
| t_u32 tx_power_table_bg_size; |
| t_u8 tx_power_table_bg_rows; |
| t_u8 tx_power_table_bg_cols; |
| chan_freq_power_t *cfp_otp_a; |
| t_u8 *tx_power_table_a; |
| t_u32 tx_power_table_a_size; |
| t_u8 tx_power_table_a_rows; |
| t_u8 tx_power_table_a_cols; |
| /**mlan adapter operations*/ |
| mlan_adapter_operations ops; |
| #ifdef DRV_EMBEDDED_AUTHENTICATOR |
| /** authenticator_priv */ |
| pmlan_private authenticator_priv; |
| #endif |
| /** TP accounting mode 1-enable 0-disable */ |
| t_u32 tp_state_on; |
| /** Packet drop point */ |
| t_u32 tp_state_drop_point; |
| } mlan_adapter, *pmlan_adapter; |
| |
| /** Check if stream 2X2 enabled */ |
| #define IS_STREAM_2X2(x) ((x)&FEATURE_CTRL_STREAM_2X2) |
| /** Check if DFS support enabled */ |
| #define IS_DFS_SUPPORT(x) ((x)&FEATURE_CTRL_DFS_SUPPORT) |
| #ifdef USB |
| /** Check if winner check & not wait for FW ready event */ |
| #define IS_USB_NEW_INIT(x) ((x)&FEATURE_CTRL_USB_NEW_INIT) |
| #endif |
| |
| /** Ethernet packet type for EAPOL */ |
| #define MLAN_ETHER_PKT_TYPE_EAPOL (0x888E) |
| #define MLAN_ETHER_PKT_TYPE_ARP (0x0806) |
| /** Ethernet packet type for WAPI */ |
| #define MLAN_ETHER_PKT_TYPE_WAPI (0x88B4) |
| /** Ethernet packet type offset */ |
| #define MLAN_ETHER_PKT_TYPE_OFFSET (12) |
| |
| mlan_status wlan_init_lock_list(pmlan_adapter pmadapter); |
| mlan_status wlan_init_priv_lock_list(pmlan_adapter pmadapter, t_u8 start_index); |
| t_void wlan_free_lock_list(pmlan_adapter pmadapter); |
| mlan_status wlan_init_timer(pmlan_adapter pmadapter); |
| t_void wlan_free_timer(pmlan_adapter pmadapter); |
| |
| /* Function prototype */ |
| /** Initialize firmware */ |
| mlan_status wlan_init_fw(pmlan_adapter pmadapter); |
| |
| /** get hw spec complete */ |
| mlan_status wlan_get_hw_spec_complete(pmlan_adapter pmadapter); |
| |
| /** Initialize firmware complete */ |
| mlan_status wlan_init_fw_complete(pmlan_adapter pmadapter); |
| |
| /** Shutdown firmware complete */ |
| mlan_status wlan_shutdown_fw_complete(pmlan_adapter pmadapter); |
| |
| /** Receive event */ |
| mlan_status wlan_recv_event(pmlan_private priv, mlan_event_id event_id, |
| t_void *pmevent); |
| |
| /** Initialize mlan_adapter structure */ |
| t_void wlan_init_adapter(pmlan_adapter pmadapter); |
| |
| /** Initialize mlan_private structure */ |
| mlan_status wlan_init_priv(pmlan_private priv); |
| #ifdef USB |
| /** get pcie device from card type */ |
| mlan_status wlan_get_usb_device(pmlan_adapter pmadapter); |
| #endif |
| mlan_status wlan_download_vdll_block(mlan_adapter *pmadapter, t_u8 *block, |
| t_u16 block_len); |
| mlan_status wlan_process_vdll_event(pmlan_private pmpriv, pmlan_buffer pevent); |
| /** Process event */ |
| mlan_status wlan_process_event(pmlan_adapter pmadapter); |
| |
| /** Prepare command */ |
| mlan_status wlan_prepare_cmd(pmlan_private priv, t_u16 cmd_no, |
| t_u16 cmd_action, t_u32 cmd_oid, |
| t_void *pioctl_buf, t_void *pdata_buf); |
| |
| /** cmd timeout handler */ |
| t_void wlan_cmd_timeout_func(t_void *function_context); |
| |
| /** |
| * @brief check if Tx pending |
| * |
| * @param pmadapter Pointer to mlan_adapter |
| * @return MTRUE/MFALSE; |
| */ |
| static inline t_u8 |
| wlan_is_tx_pending(mlan_adapter *pmadapter) |
| { |
| #ifdef PCIE |
| if (IS_PCIE(pmadapter->card_type) && |
| pmadapter->pcard_pcie->txbd_pending) |
| return MTRUE; |
| #endif |
| return MFALSE; |
| } |
| |
| /** process host cmd */ |
| mlan_status wlan_misc_ioctl_host_cmd(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| /** process init/shutdown cmd*/ |
| mlan_status wlan_misc_ioctl_init_shutdown(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| /** process debug info */ |
| mlan_status wlan_get_info_debug_info(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| #if defined(STA_SUPPORT) && defined(UAP_SUPPORT) |
| extern pmlan_operations mlan_ops[]; |
| /** Set/Get BSS role */ |
| mlan_status wlan_bss_ioctl_bss_role(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| #endif |
| |
| #if defined(PCIE) |
| mlan_status wlan_misc_ssu(pmlan_adapter pmadapter, pmlan_ioctl_req pioctl_req); |
| #endif |
| |
| mlan_status wlan_misc_hal_phy_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_set_ewpa_mode(mlan_private *priv, pmlan_ds_passphrase psec_pp); |
| mlan_status wlan_find_bss(mlan_private *pmpriv, pmlan_ioctl_req pioctl_req); |
| |
| /* block main process */ |
| void mlan_block_main_process(mlan_adapter *pmadapter, t_u8 block); |
| /* block rx process */ |
| void mlan_block_rx_process(mlan_adapter *pmadapter, t_u8 block); |
| /** check pending command */ |
| int wlan_check_pending_cmd(mlan_adapter *pmadapter); |
| /** Allocate memory for adapter structure members */ |
| mlan_status wlan_allocate_adapter(pmlan_adapter pmadapter); |
| /** Free adapter */ |
| t_void wlan_free_adapter(pmlan_adapter pmadapter); |
| /** Free priv */ |
| t_void wlan_free_priv(mlan_private *pmpriv); |
| /** Allocate command buffer */ |
| mlan_status wlan_alloc_cmd_buffer(mlan_adapter *pmadapter); |
| /** Free command buffer */ |
| mlan_status wlan_free_cmd_buffer(mlan_adapter *pmadapter); |
| /** Request command lock */ |
| t_void wlan_request_cmd_lock(mlan_adapter *pmadapter); |
| /** Release command lock */ |
| t_void wlan_release_cmd_lock(mlan_adapter *pmadapter); |
| #ifdef STA_SUPPORT |
| /** Flush the scan pending queue */ |
| t_void wlan_flush_scan_queue(pmlan_adapter pmadapter); |
| t_void wlan_move_cmd_to_cmd_pending_q(pmlan_adapter pmadapter); |
| mlan_status wlan_cancel_pending_scan_cmd(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| #endif |
| /**Cancel pending command */ |
| t_void wlan_cancel_all_pending_cmd(pmlan_adapter pmadapter, t_u8 flag); |
| /**Cancel pending ioctl */ |
| t_void wlan_cancel_pending_ioctl(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| /**Cancel bss pending ioctl */ |
| t_void wlan_cancel_bss_pending_cmd(pmlan_adapter pmadapter, t_u32 bss_index); |
| |
| /** Insert command to free queue */ |
| t_void wlan_insert_cmd_to_free_q(mlan_adapter *pmadapter, |
| cmd_ctrl_node *pcmd_node); |
| |
| /** Insert command to pending queue */ |
| t_void wlan_insert_cmd_to_pending_q(mlan_adapter *pmadapter, |
| cmd_ctrl_node *pcmd_node, t_u32 addtail); |
| |
| /** Execute next command */ |
| mlan_status wlan_exec_next_cmd(mlan_adapter *pmadapter); |
| /** Proecess command response */ |
| mlan_status wlan_process_cmdresp(mlan_adapter *pmadapter); |
| /** Handle received packet, has extra handling for aggregate packets */ |
| mlan_status wlan_handle_rx_packet(pmlan_adapter pmadapter, pmlan_buffer pmbuf); |
| /** Process transmission */ |
| mlan_status wlan_process_tx(pmlan_private priv, pmlan_buffer pmbuf, |
| mlan_tx_param *tx_param); |
| /** Transmit a null data packet */ |
| mlan_status wlan_send_null_packet(pmlan_private priv, t_u8 flags); |
| |
| #ifdef SDIO |
| mlan_status wlan_alloc_sdio_mpa_buffers(mlan_adapter *pmadapter, |
| t_u32 mpa_tx_buf_size, |
| t_u32 mpa_rx_buf_size); |
| |
| mlan_status wlan_free_sdio_mpa_buffers(mlan_adapter *pmadapter); |
| #endif |
| |
| /** Process write data complete */ |
| mlan_status wlan_write_data_complete(pmlan_adapter pmlan_adapter, |
| pmlan_buffer pmbuf, mlan_status status); |
| |
| #ifdef USB |
| mlan_status wlan_usb_deaggr_rx_pkt(pmlan_adapter pmadapter, pmlan_buffer pmbuf); |
| |
| /** |
| * @brief This function resets USB Tx Aggregation buffers |
| * |
| * @param pmadapter A pointer to mlan_adapter |
| * |
| * @return N/A |
| */ |
| static INLINE t_void |
| wlan_reset_usb_tx_aggr(pmlan_adapter pmadapter) |
| { |
| t_s32 i = 0; |
| pmlan_callbacks pcb = &pmadapter->callbacks; |
| ENTER(); |
| for (i = 0; i < MAX_USB_TX_PORT_NUM; i++) { |
| pcb->moal_spin_lock(pmadapter->pmoal_handle, |
| pmadapter->pcard_usb->usb_tx_aggr[i]. |
| paggr_lock); |
| if (pmadapter->pcard_usb->usb_tx_aggr[i].aggr_hold_timer_is_set) { |
| pcb->moal_stop_timer(pmadapter->pmoal_handle, |
| pmadapter->pcard_usb-> |
| usb_tx_aggr[i] |
| .paggr_hold_timer); |
| pmadapter->pcard_usb->usb_tx_aggr[i] |
| .aggr_hold_timer_is_set = MFALSE; |
| } |
| if (pmadapter->pcard_usb->usb_tx_aggr[i].aggr_ctrl.enable && |
| pmadapter->pcard_usb->usb_tx_aggr[i].pmbuf_aggr != MNULL) { |
| wlan_write_data_complete(pmadapter, pmadapter->pcard_usb->usb_tx_aggr[i].pmbuf_aggr, MLAN_STATUS_FAILURE); /* did not get sent */ |
| pmadapter->pcard_usb->usb_tx_aggr[i].pmbuf_aggr = MNULL; |
| pmadapter->pcard_usb->usb_tx_aggr[i].aggr_len = 0; |
| } |
| pcb->moal_spin_unlock(pmadapter->pmoal_handle, |
| pmadapter->pcard_usb->usb_tx_aggr[i]. |
| paggr_lock); |
| } |
| LEAVE(); |
| } |
| |
| /** |
| * @brief This function get usb_tx_aggr_params |
| * |
| * @param pmadapter A pointer to mlan_adapter |
| * @param port port for TX |
| * |
| * @return A pointer to usb_tx_aggr_params |
| */ |
| static INLINE usb_tx_aggr_params * |
| wlan_get_usb_tx_aggr_params(pmlan_adapter pmadapter, t_u32 port) |
| { |
| int i; |
| ENTER(); |
| for (i = 0; i < MAX_USB_TX_PORT_NUM; i++) { |
| if (pmadapter->pcard_usb->usb_tx_aggr[i].aggr_ctrl.enable && |
| pmadapter->pcard_usb->usb_tx_aggr[i].port == port) |
| return &pmadapter->pcard_usb->usb_tx_aggr[i]; |
| } |
| LEAVE(); |
| return MNULL; |
| } |
| |
| t_void wlan_usb_tx_aggr_timeout_func(t_void *function_context); |
| mlan_status wlan_usb_host_to_card_aggr(pmlan_adapter pmadapter, |
| pmlan_buffer pmbuf, |
| mlan_tx_param *tx_param, |
| usb_tx_aggr_params *aggr_params); |
| #endif |
| |
| /** Process receive packet complete */ |
| mlan_status wlan_recv_packet_complete(pmlan_adapter pmadapter, |
| pmlan_buffer pmbuf, mlan_status status); |
| /** Clean Tx Rx queues */ |
| t_void wlan_clean_txrx(pmlan_private priv); |
| |
| t_void wlan_add_buf_bypass_txqueue(mlan_adapter *pmadapter, pmlan_buffer pmbuf); |
| t_void wlan_process_bypass_tx(mlan_adapter *pmadapter); |
| t_void wlan_cleanup_bypass_txq(pmlan_private priv); |
| t_u8 wlan_bypass_tx_list_empty(mlan_adapter *pmadapter); |
| |
| /** Check if this is the last packet */ |
| t_u8 wlan_check_last_packet_indication(pmlan_private priv); |
| |
| #define MOAL_ALLOC_MLAN_BUFFER (0) |
| #define MOAL_MALLOC_BUFFER (1) |
| |
| #ifdef PCIE |
| /* This defines the direction arg to the DMA mapping routines. */ |
| #define PCI_DMA_BIDIRECTIONAL 0 |
| #define PCI_DMA_TODEVICE 1 |
| #define PCI_DMA_FROMDEVICE 2 |
| #define PCI_DMA_NONE 3 |
| #endif |
| |
| /** function to allocate a mlan_buffer */ |
| pmlan_buffer wlan_alloc_mlan_buffer(mlan_adapter *pmadapter, t_u32 data_len, |
| t_u32 head_room, t_u32 malloc_flag); |
| /** function to free a mlan_buffer */ |
| t_void wlan_free_mlan_buffer(mlan_adapter *pmadapter, pmlan_buffer pmbuf); |
| |
| /** command resp handler for version ext */ |
| mlan_status wlan_ret_ver_ext(pmlan_private pmpriv, HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| /** command resp handler for rx mgmt forward registration */ |
| mlan_status wlan_ret_rx_mgmt_ind(pmlan_private pmpriv, HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| /** Check Power Save condition */ |
| t_void wlan_check_ps_cond(mlan_adapter *pmadapter); |
| |
| /** handle command for enhanced power save mode */ |
| mlan_status wlan_cmd_enh_power_mode(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_u16 ps_bitmap, |
| t_void *pdata_buf); |
| /** handle command resp for enhanced power save mode */ |
| mlan_status wlan_ret_enh_power_mode(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| /** handle commnand for cfg data */ |
| mlan_status wlan_cmd_cfg_data(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *pcmd, t_u16 cmd_action, |
| t_u32 cmd_oid, t_void *pdata_buf); |
| /** handle command resp for cfg data */ |
| mlan_status wlan_ret_cfg_data(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, t_void *pioctl_buf); |
| |
| /** Process sleep confirm command response */ |
| void wlan_process_sleep_confirm_resp(pmlan_adapter pmadapter, t_u8 *pbuf, |
| t_u32 len); |
| |
| /** Perform hs related activities on receving the power up interrupt */ |
| void wlan_process_hs_config(pmlan_adapter pmadapter); |
| |
| t_void wlan_wakeup_card_timeout_func(void *function_context); |
| |
| mlan_status wlan_process_802dot11_mgmt_pkt(mlan_private *priv, t_u8 *payload, |
| t_u32 payload_len, RxPD *prx_pd); |
| |
| mlan_status wlan_pm_ioctl_hscfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_radio_ioctl_remain_chan_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_cmd_remain_on_channel(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_remain_on_channel(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| #ifdef WIFI_DIRECT_SUPPORT |
| mlan_status wlan_bss_ioctl_wifi_direct_mode(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_cmd_wifi_direct_mode(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_wifi_direct_mode(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_cmd_p2p_params_config(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_p2p_params_config(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_misc_p2p_config(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| #endif |
| mlan_status wlan_cmd_gpio_tsf_latch(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, |
| mlan_ioctl_req *pioctl_buf, |
| t_void *pdata_buf); |
| mlan_status wlan_ret_gpio_tsf_latch(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_misc_gpio_tsf_latch_config(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_misc_get_tsf_info(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| /** get ralist info */ |
| int wlan_get_ralist_info(mlan_private *priv, pralist_info buf); |
| /** dump ralist */ |
| void wlan_dump_ralist(mlan_private *priv); |
| |
| /** get pm info */ |
| mlan_status wlan_get_pm_info(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_bss_ioctl_bss_remove(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_radio_ioctl_mimo_switch_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_cmd_802_11_mimo_switch(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_void *pdata_buf); |
| |
| mlan_status wlan_misc_per_pkt_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_config_mgmt_filter(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_get_hs_wakeup_reason(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_cmd_hs_wakeup_reason(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_void *pdata_buf); |
| |
| mlan_status wlan_ret_hs_wakeup_reason(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_get_tx_rx_histogram(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_cmd_tx_rx_pkt_stats(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| pmlan_ioctl_req pioctl_buf, |
| t_void *pdata_buf); |
| mlan_status wlan_ret_tx_rx_pkt_stats(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_radio_ioctl_radio_ctl(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_radio_ioctl_ant_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_cmd_tx_rate_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_ret_tx_rate_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_rate_ioctl_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_ret_802_11_tx_rate_query(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_rate_ioctl_get_data_rate(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| t_void wlan_host_sleep_activated_event(pmlan_private priv, t_u8 activated); |
| /** Handles the command response of hs_cfg */ |
| mlan_status wlan_ret_802_11_hs_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| /** Sends HS_WAKEUP event to applications */ |
| t_void wlan_host_sleep_wakeup_event(pmlan_private priv); |
| |
| /** Prepares command of robustcoex */ |
| mlan_status wlan_cmd_robustcoex(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, t_u16 cmd_action, |
| t_u16 *pdata_buf); |
| /** Set Robustcoex gpiocfg */ |
| mlan_status wlan_misc_robustcoex(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| /** Set mapping policy/get DMCS status */ |
| mlan_status wlan_misc_dmcs_config(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| /** Prepares command of DMCS config */ |
| mlan_status wlan_cmd_dmcs_config(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| /** Handles command response of DMCS config */ |
| mlan_status wlan_ret_dmcs_config(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| #if defined(PCIE) |
| mlan_status wlan_cmd_ssu(pmlan_private pmpriv, HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_u16 *pdata_buf); |
| #endif |
| |
| /** send get hw spec command to firmware */ |
| mlan_status wlan_adapter_get_hw_spec(pmlan_adapter pmadapter); |
| /** send adapter specific init cmd to firmware */ |
| mlan_status wlan_adapter_init_cmd(pmlan_adapter pmadapter); |
| /** get/set bandcfg */ |
| mlan_status wlan_radio_ioctl_band_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| #ifdef RX_PACKET_COALESCE |
| mlan_status wlan_cmd_rx_pkt_coalesce_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_rx_pkt_coalesce_cfg(pmlan_private pmpriv, |
| const HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| #endif |
| |
| #ifdef STA_SUPPORT |
| /** warm reset */ |
| mlan_status wlan_misc_ioctl_warm_reset(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| /** Process received packet */ |
| mlan_status wlan_process_rx_packet(pmlan_adapter pmadapter, pmlan_buffer pmbuf); |
| /** ioctl handler for station mode */ |
| mlan_status wlan_ops_sta_ioctl(t_void *adapter, pmlan_ioctl_req pioctl_req); |
| |
| /** cmd handler for station mode */ |
| mlan_status wlan_ops_sta_prepare_cmd(t_void *priv, t_u16 cmd_no, |
| t_u16 cmd_action, t_u32 cmd_oid, |
| t_void *pioctl_buf, |
| t_void *pdata_buf, t_void *pcmd_buf); |
| |
| /** cmdresp handler for station mode */ |
| mlan_status wlan_ops_sta_process_cmdresp(t_void *priv, t_u16 cmdresp_no, |
| t_void *pcmd_buf, t_void *pioctl); |
| |
| /** rx handler for station mode */ |
| mlan_status wlan_ops_sta_process_rx_packet(t_void *adapter, pmlan_buffer pmbuf); |
| |
| /** event handler for station mode */ |
| mlan_status wlan_ops_sta_process_event(t_void *priv); |
| |
| /** fill txpd for station mode */ |
| t_void *wlan_ops_sta_process_txpd(t_void *priv, pmlan_buffer pmbuf); |
| |
| /** send init cmd to firmware for station mode */ |
| mlan_status wlan_ops_sta_init_cmd(t_void *priv, t_u8 first_bss); |
| |
| /** Flush the scan table */ |
| mlan_status wlan_flush_scan_table(pmlan_adapter pmadapter); |
| |
| /** Scan for networks */ |
| mlan_status wlan_scan_networks(mlan_private *pmpriv, t_void *pioctl_buf, |
| wlan_user_scan_cfg *puser_scan_in); |
| |
| /** Scan for specific SSID */ |
| mlan_status wlan_scan_specific_ssid(mlan_private *pmpriv, |
| t_void *pioctl_buf, |
| mlan_802_11_ssid *preq_ssid); |
| |
| /** Scan command handler */ |
| mlan_status wlan_cmd_802_11_scan(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *pcmd, t_void *pdata_buf); |
| |
| /** Handler for scan command response */ |
| mlan_status wlan_ret_802_11_scan(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, t_void *pioctl_buf); |
| |
| /** Extended scan command handler */ |
| mlan_status wlan_cmd_802_11_scan_ext(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *pcmd, |
| t_void *pdata_buf); |
| /** Handler for extended scan command response */ |
| mlan_status wlan_ret_802_11_scan_ext(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| t_void *pioctl_buf); |
| /** Handler event for extended scan report */ |
| mlan_status wlan_handle_event_ext_scan_report(mlan_private *pmpriv, |
| mlan_buffer *pmbuf); |
| mlan_status wlan_handle_event_ext_scan_status(mlan_private *pmpriv, |
| mlan_buffer *pmbuf); |
| |
| /** check network compatibility */ |
| t_s32 wlan_is_network_compatible(mlan_private *pmpriv, t_u32 index, t_u32 mode); |
| |
| /** Find an SSID in a list */ |
| t_s32 wlan_find_ssid_in_list(pmlan_private pmpriv, mlan_802_11_ssid *ssid, |
| t_u8 *bssid, t_u32 mode); |
| |
| /** Find a BSSID in a list */ |
| t_s32 wlan_find_bssid_in_list(mlan_private *pmpriv, t_u8 *bssid, t_u32 mode); |
| |
| /** Find best network */ |
| mlan_status wlan_find_best_network(mlan_private *pmpriv, |
| mlan_ssid_bssid *preq_ssid_bssid); |
| |
| /** Compare two SSIDs */ |
| t_s32 wlan_ssid_cmp(pmlan_adapter pmadapter, mlan_802_11_ssid *ssid1, |
| mlan_802_11_ssid *ssid2); |
| |
| /** Associate */ |
| mlan_status wlan_associate(mlan_private *pmpriv, IN t_void *pioctl_buf, |
| IN BSSDescriptor_t *pBSSDesc); |
| |
| /** Associate command handler */ |
| mlan_status wlan_cmd_802_11_associate(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_void *pdata_buf); |
| |
| /** Handler for association command response */ |
| mlan_status wlan_ret_802_11_associate(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| t_void *pioctl_buf); |
| |
| /** Reset connected state */ |
| t_void wlan_reset_connect_state(pmlan_private priv, t_u8 drv_disconnect); |
| |
| t_void wlan_2040_coex_event(pmlan_private pmpriv); |
| |
| /** convert band to radio type */ |
| t_u8 wlan_band_to_radio_type(t_u8 band); |
| /** convert radio_type to band */ |
| t_u8 radio_type_to_band(t_u8 chanBand); |
| |
| /** Disconnect */ |
| mlan_status wlan_disconnect(mlan_private *pmpriv, |
| mlan_ioctl_req *pioctl_req, |
| mlan_deauth_param *deauth_param); |
| |
| /** Ad-Hoc start */ |
| mlan_status wlan_adhoc_start(mlan_private *pmpriv, t_void *pioctl_buf, |
| mlan_802_11_ssid *padhoc_ssid); |
| |
| /** Ad-Hoc join */ |
| mlan_status wlan_adhoc_join(mlan_private *pmpriv, t_void *pioctl_buf, |
| BSSDescriptor_t *pBSSDesc); |
| |
| /** Ad-Hoc start command handler */ |
| mlan_status wlan_cmd_802_11_ad_hoc_start(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_void *pdata_buf); |
| |
| /** Ad-Hoc command handler */ |
| mlan_status wlan_cmd_802_11_ad_hoc_join(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_void *pdata_buf); |
| |
| /** Handler for Ad-Hoc commands */ |
| mlan_status wlan_ret_802_11_ad_hoc(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| t_void *pioctl_buf); |
| |
| /** Handler for bgscan query commands */ |
| mlan_status wlan_cmd_802_11_bg_scan_query(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *pcmd, |
| t_void *pdata_buf); |
| /** Handler for bgscan config command */ |
| mlan_status wlan_cmd_bgscan_config(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *pcmd, t_void *pdata_buf); |
| /** Hander for bgscan config command response */ |
| mlan_status wlan_ret_bgscan_config(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_ret_802_11_bgscan_query(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| /** Get Channel-Frequency-Power by band and channel */ |
| chan_freq_power_t *wlan_get_cfp_by_band_and_channel(pmlan_adapter pmadapter, |
| t_u8 band, t_u16 channel, |
| region_chan_t |
| *region_channel); |
| /** Find Channel-Frequency-Power by band and channel */ |
| chan_freq_power_t *wlan_find_cfp_by_band_and_channel(mlan_adapter *pmadapter, |
| t_u8 band, t_u16 channel); |
| /** Find Channel-Frequency-Power by band and frequency */ |
| chan_freq_power_t *wlan_find_cfp_by_band_and_freq(mlan_adapter *pmadapter, |
| t_u8 band, t_u32 freq); |
| /** Get Tx power of channel from Channel-Frequency-Power */ |
| t_u8 wlan_get_txpwr_of_chan_from_cfp(mlan_private *pmpriv, t_u8 channel); |
| /** find frequency from band and channel */ |
| t_u32 wlan_find_freq_from_band_chan(t_u8, t_u8); |
| |
| /* Save a beacon buffer of the current bss descriptor */ |
| t_void wlan_save_curr_bcn(mlan_private *pmpriv); |
| /* Free a beacon buffer of the current bss descriptor */ |
| t_void wlan_free_curr_bcn(mlan_private *pmpriv); |
| |
| #endif /* STA_SUPPORT */ |
| |
| /* Rate related functions */ |
| t_u8 wlan_convert_v14_tx_rate_info(pmlan_private pmpriv, t_u8 v14_rate_info); |
| t_u8 wlan_convert_v14_rx_rate_info(pmlan_private pmpriv, t_u8 v14_rate_info); |
| /** Convert index into data rate */ |
| t_u32 wlan_index_to_data_rate(pmlan_adapter pmadapter, t_u8 index, |
| t_u8 rate_info, t_u8 ext_rate_info); |
| /** Get active data rates */ |
| t_u32 wlan_get_active_data_rates(mlan_private *pmpriv, t_u32 bss_mode, |
| t_u16 config_bands, WLAN_802_11_RATES rates); |
| /** Get supported data rates */ |
| t_u32 wlan_get_supported_rates(mlan_private *pmpriv, t_u32 bss_mode, |
| t_u16 config_bands, WLAN_802_11_RATES rates); |
| /** Convert data rate to index */ |
| t_u8 wlan_data_rate_to_index(pmlan_adapter pmadapter, t_u32 rate); |
| /** Check if rate is auto */ |
| t_u8 wlan_is_rate_auto(mlan_private *pmpriv); |
| /** Get rate index */ |
| int wlan_get_rate_index(pmlan_adapter pmadapter, t_u16 *rateBitmap, int size); |
| mlan_status wlan_cmd_rxabortcfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, t_u16 cmd_action, |
| t_void *pdata_buf); |
| mlan_status wlan_ret_rxabortcfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_cmd_rxabortcfg_ext(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_rxabortcfg_ext(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_cmd_tx_ampdu_prot_mode(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_tx_ampdu_prot_mode(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_cmd_dot11mc_unassoc_ftm_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, |
| t_void *pdata_buf); |
| mlan_status wlan_ret_dot11mc_unassoc_ftm_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_cmd_hal_phy_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_u16 *pdata_buf); |
| mlan_status wlan_ret_hal_phy_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_cmd_rate_adapt_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_rate_adapt_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_cmd_cck_desense_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| |
| mlan_status wlan_ret_cck_desense_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_cmd_arb_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, t_u16 cmd_action, |
| t_void *pdata_buf); |
| mlan_status wlan_ret_arb_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_misc_ioctl_rxabortcfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_misc_ioctl_rxabortcfg_ext(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_misc_ioctl_tx_ampdu_prot_mode(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_misc_ioctl_dot11mc_unassoc_ftm_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_misc_ioctl_rate_adapt_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_misc_ioctl_cck_desense_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_cmd_mfg(pmlan_private pmpriv, pHostCmd_DS_COMMAND cmd, |
| t_u16 cmd_action, t_pvoid pdata_buf); |
| mlan_status wlan_ret_mfg(pmlan_private pmpriv, HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_misc_ioctl_rf_test_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_misc_ioctl_range_ext(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_misc_ioctl_arb_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_misc_ioctl_tp_state(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| /* CFP related functions */ |
| /** Region code index table */ |
| extern t_u16 region_code_index[MRVDRV_MAX_REGION_CODE]; |
| /** The table to keep CFP code for BG */ |
| extern t_u16 cfp_code_index_bg[MRVDRV_MAX_CFP_CODE_BG]; |
| /** The table to keep CFP code for A */ |
| extern t_u16 cfp_code_index_a[MRVDRV_MAX_CFP_CODE_A]; |
| |
| /** Set region table */ |
| mlan_status wlan_set_regiontable(mlan_private *pmpriv, t_u8 region, t_u8 band); |
| /** Get radar detection requirements*/ |
| t_bool wlan_get_cfp_radar_detect(mlan_private *priv, t_u8 chnl); |
| /** check if scan type is passive for b/g band*/ |
| t_bool wlan_bg_scan_type_is_passive(mlan_private *priv, t_u8 chnl); |
| /** check if channel is NO_IR (passive) */ |
| t_bool wlan_is_chan_passive(mlan_private *priv, t_u8 band, t_u8 chan); |
| /** check if channel is disabled */ |
| t_bool wlan_is_chan_disabled(mlan_private *priv, t_u8 band, t_u8 chan); |
| /** check if channel is blacklisted */ |
| t_bool wlan_is_chan_blacklisted(mlan_private *priv, t_u8 band, t_u8 chan); |
| /** set blacklist setting for a channel */ |
| t_bool wlan_set_chan_blacklist(mlan_private *priv, t_u8 band, t_u8 chan, |
| t_bool bl); |
| |
| /* 802.11D related functions */ |
| /** Initialize 11D */ |
| t_void wlan_11d_priv_init(mlan_private *pmpriv); |
| /** Initialize 11D */ |
| t_void wlan_11d_init(mlan_adapter *pmadapter); |
| /** Enable 11D */ |
| mlan_status wlan_11d_enable(mlan_private *pmpriv, t_void *pioctl_buf, |
| state_11d_t flag); |
| /** Get if 11D is enabled */ |
| t_bool wlan_11d_is_enabled(mlan_private *pmpriv); |
| /** Get if FW 11D is enabled */ |
| t_bool wlan_fw_11d_is_enabled(mlan_private *pmpriv); |
| /** Get if priv is station */ |
| t_bool wlan_is_station(mlan_private *pmpriv); |
| /** Command handler for 11D country info */ |
| mlan_status wlan_cmd_802_11d_domain_info(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *pcmd, |
| t_u16 cmd_action); |
| /** Handler for 11D country info command response */ |
| mlan_status wlan_ret_802_11d_domain_info(mlan_private *pmpriv, |
| HostCmd_DS_COMMAND *resp); |
| /** Convert channel to frequency */ |
| t_u32 wlan_11d_chan_2_freq(pmlan_adapter pmadapter, t_u8 chan, t_u8 band); |
| #ifdef STA_SUPPORT |
| /** Set 11D universal table */ |
| mlan_status wlan_11d_set_universaltable(mlan_private *pmpriv, t_u8 band); |
| /** Clear 11D region table */ |
| mlan_status wlan_11d_clear_parsedtable(mlan_private *pmpriv); |
| /** Create 11D country information for downloading */ |
| mlan_status wlan_11d_create_dnld_countryinfo(mlan_private *pmpriv, t_u8 band); |
| /** Get scan type from 11D info */ |
| t_u8 wlan_11d_get_scan_type(pmlan_adapter pmadapter, t_u8 band, t_u8 chan, |
| parsed_region_chan_11d_t *parsed_region_chan); |
| /** Parse 11D country info */ |
| mlan_status wlan_11d_parse_dnld_countryinfo(mlan_private *pmpriv, |
| BSSDescriptor_t *pBSSDesc); |
| /** Prepare 11D domain information for download */ |
| mlan_status wlan_11d_prepare_dnld_domain_info_cmd(mlan_private *pmpriv); |
| /** Parse 11D country information into domain info */ |
| mlan_status wlan_11d_parse_domain_info(pmlan_adapter pmadapter, |
| IEEEtypes_CountryInfoFullSet_t |
| *country_info, t_u8 band, |
| parsed_region_chan_11d_t |
| *parsed_region_chan); |
| #endif /* STA_SUPPORT */ |
| #ifdef UAP_SUPPORT |
| /** Handle 11D domain information from UAP */ |
| mlan_status wlan_11d_handle_uap_domain_info(mlan_private *pmpriv, t_u8 band, |
| t_u8 *domain_tlv, |
| t_void *pioctl_buf); |
| #endif |
| /** Configure 11D domain info command */ |
| mlan_status wlan_11d_cfg_domain_info(pmlan_adapter pmadapter, |
| mlan_ioctl_req *pioctl_req); |
| |
| /** This function converts region string to CFP table code */ |
| mlan_status wlan_misc_country_2_cfp_table_code(pmlan_adapter pmadapter, |
| t_u8 *country_code, |
| t_u8 *cfp_bg, t_u8 *cfp_a); |
| |
| /** This function finds if given country code is in EU table */ |
| t_bool wlan_is_etsi_country(pmlan_adapter pmadapter, t_u8 *country_code); |
| |
| /** check if station list is empty */ |
| t_u8 wlan_is_station_list_empty(mlan_private *priv); |
| /** get station node */ |
| sta_node *wlan_get_station_entry(mlan_private *priv, t_u8 *mac); |
| /** delete station list */ |
| t_void wlan_delete_station_list(pmlan_private priv); |
| /** delete station entry */ |
| t_void wlan_delete_station_entry(mlan_private *priv, t_u8 *mac); |
| /** add station entry */ |
| sta_node *wlan_add_station_entry(mlan_private *priv, t_u8 *mac); |
| /** process uap rx packet */ |
| |
| void wlan_check_sta_capability(pmlan_private priv, pmlan_buffer pevent, |
| sta_node *sta_ptr); |
| /** find specific ie */ |
| t_u8 *wlan_get_specific_ie(pmlan_private priv, t_u8 *ie_buf, t_u8 ie_len, |
| IEEEtypes_ElementId_e id, t_u8 ext_id); |
| t_u8 wlan_is_wmm_ie_present(pmlan_adapter pmadapter, t_u8 *pbuf, t_u16 buf_len); |
| |
| /** |
| * @brief This function checks whether a station TDLS link is enabled or not |
| * |
| * @param priv A pointer to mlan_private |
| * @param mac station mac address |
| * @return |
| * TDLS_NOT_SETUP/TDLS_SETUP_INPROGRESS/TDLS_SETUP_COMPLETE/TDLS_SETUP_FAILURE/TDLS_TEAR_DOWN |
| */ |
| static INLINE tdlsStatus_e |
| wlan_get_tdls_link_status(mlan_private *priv, t_u8 *mac) |
| { |
| sta_node *sta_ptr = MNULL; |
| sta_ptr = wlan_get_station_entry(priv, mac); |
| if (sta_ptr) |
| return sta_ptr->status; |
| return TDLS_NOT_SETUP; |
| } |
| |
| /** |
| * @brief This function checks if TDLS link is in channel switching |
| * |
| * @param status tdls link status |
| * @return MTRUE/MFALSE |
| */ |
| static INLINE int |
| wlan_is_tdls_link_chan_switching(tdlsStatus_e status) |
| { |
| return (status == TDLS_SWITCHING_CHANNEL) ? MTRUE : MFALSE; |
| } |
| |
| /** |
| * @brief This function checks if send command to firmware is allowed |
| * |
| * @param status tdls link status |
| * @return MTRUE/MFALSE |
| */ |
| static INLINE int |
| wlan_is_send_cmd_allowed(tdlsStatus_e status) |
| { |
| int ret = MTRUE; |
| switch (status) { |
| case TDLS_SWITCHING_CHANNEL: |
| case TDLS_IN_OFF_CHANNEL: |
| ret = MFALSE; |
| break; |
| default: |
| break; |
| } |
| return ret; |
| } |
| |
| /** |
| * @brief This function checks if TDLS link is setup |
| * |
| * @param status tdls link status |
| * @return MTRUE/MFALSE |
| */ |
| static INLINE int |
| wlan_is_tdls_link_setup(tdlsStatus_e status) |
| { |
| int ret = MFALSE; |
| switch (status) { |
| case TDLS_SWITCHING_CHANNEL: |
| case TDLS_IN_OFF_CHANNEL: |
| case TDLS_IN_BASE_CHANNEL: |
| case TDLS_SETUP_COMPLETE: |
| ret = MTRUE; |
| break; |
| default: |
| break; |
| } |
| return ret; |
| } |
| |
| /** |
| * @brief This function checks tx_pause flag for peer |
| * |
| * @param priv A pointer to mlan_private |
| * @param ra Address of the receiver STA |
| * |
| * @return MTRUE or MFALSE |
| */ |
| static INLINE int |
| wlan_is_tx_pause(mlan_private *priv, t_u8 *ra) |
| { |
| sta_node *sta_ptr = MNULL; |
| sta_ptr = wlan_get_station_entry(priv, ra); |
| if (sta_ptr) |
| return sta_ptr->tx_pause; |
| return MFALSE; |
| } |
| |
| t_u16 wlan_update_ralist_tx_pause(pmlan_private priv, t_u8 *mac, t_u8 tx_pause); |
| |
| #ifdef UAP_SUPPORT |
| mlan_status wlan_process_uap_rx_packet(mlan_private *priv, pmlan_buffer pmbuf); |
| t_void wlan_drop_tx_pkts(pmlan_private priv); |
| #endif /* UAP_SUPPORT */ |
| |
| #ifdef UAP_SUPPORT |
| /* process the recevied packet and bridge the packet */ |
| mlan_status wlan_uap_recv_packet(mlan_private *priv, pmlan_buffer pmbuf); |
| #endif /* UAP_SUPPORT */ |
| |
| mlan_status wlan_misc_ioctl_custom_ie_list(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req, |
| t_bool send_ioctl); |
| |
| mlan_status wlan_cmd_get_hw_spec(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *pcmd); |
| mlan_status wlan_ret_get_hw_spec(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, t_void *pioctl_buf); |
| #ifdef SDIO |
| mlan_status wlan_cmd_sdio_rx_aggr_cfg(HostCmd_DS_COMMAND *pcmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_sdio_rx_aggr_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp); |
| #endif |
| |
| mlan_status wlan_misc_ioctl_mac_control(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_cmd_mac_control(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *pcmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_mac_control(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_cmd_cw_mode_ctrl(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_cw_mode_ctrl(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_cmd_802_11_radio_control(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_802_11_radio_control(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_cmd_802_11_rf_antenna(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_802_11_rf_antenna(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_ret_reg_access(mlan_adapter *pmadapter, t_u16 type, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_ret_mem_access(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_reg_mem_ioctl_reg_rw(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_reg_mem_ioctl_read_eeprom(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_reg_mem_ioctl_mem_rw(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_cmd_reg_access(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, t_u16 cmd_action, |
| t_void *pdata_buf); |
| mlan_status wlan_cmd_mem_access(HostCmd_DS_COMMAND *cmd, t_u16 cmd_action, |
| t_void *pdata_buf); |
| mlan_status wlan_cmd_802_11_mac_address(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action); |
| mlan_status wlan_ret_802_11_mac_address(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| int wlan_get_tdls_list(mlan_private *priv, tdls_peer_info *buf); |
| t_void wlan_hold_tdls_packets(pmlan_private priv, t_u8 *mac); |
| t_void wlan_restore_tdls_packets(pmlan_private priv, t_u8 *mac, |
| tdlsStatus_e status); |
| t_void wlan_update_non_tdls_ralist(mlan_private *priv, t_u8 *mac, |
| t_u8 tx_pause); |
| mlan_status wlan_misc_ioctl_tdls_config(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| void wlan_11n_send_delba_to_peer(mlan_private *priv, t_u8 *ra); |
| void wlan_process_tdls_action_frame(pmlan_private priv, t_u8 *pbuf, t_u32 len); |
| mlan_status wlan_misc_ioctl_tdls_oper(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_misc_ioctl_tdls_get_ies(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_misc_ioctl_tdls_idle_time(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| t_void wlan_tdls_config(pmlan_private pmpriv, t_u8 enable); |
| mlan_status wlan_misc_ioctl_tdls_cs_channel(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_get_info_ver_ext(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_ioctl_link_statistic(mlan_private *pmpriv, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_cmd_802_11_link_statistic(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_ret_get_link_statistic(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_reg_rx_mgmt_ind(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| #ifdef DEBUG_LEVEL1 |
| mlan_status wlan_set_drvdbg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| #endif |
| |
| mlan_status wlan_misc_hotspot_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| #ifdef STA_SUPPORT |
| mlan_status wlan_misc_ext_capa_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| t_u32 wlan_is_ext_capa_support(mlan_private *pmpriv); |
| #endif |
| |
| #ifdef STA_SUPPORT |
| void wlan_add_ext_capa_info_ie(mlan_private *pmpriv, |
| BSSDescriptor_t *pbss_desc, t_u8 **pptlv_out); |
| #endif |
| |
| mlan_status wlan_cmd_boot_sleep(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, t_u16 cmd_action, |
| t_void *pdata_buf); |
| |
| mlan_status wlan_ret_boot_sleep(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| #if defined(DRV_EMBEDDED_AUTHENTICATOR) || defined(DRV_EMBEDDED_SUPPLICANT) |
| mlan_status wlan_cmd_crypto(pmlan_private pmpriv, HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_u16 *pdata_buf); |
| |
| mlan_status wlan_ret_crypto(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| #endif |
| |
| #define BW_20MHZ 0 |
| #define BW_40MHZ 1 |
| #define BW_80MHZ 2 |
| #define BW_160MHZ 3 |
| int wlan_add_supported_oper_class_ie(mlan_private *pmpriv, |
| t_u8 **pptlv_out, t_u8 curr_oper_class); |
| mlan_status wlan_get_curr_oper_class(mlan_private *pmpriv, t_u8 channel, |
| t_u8 bw, t_u8 *oper_class); |
| mlan_status wlan_check_operclass_validation(mlan_private *pmpriv, t_u8 channel, |
| t_u8 oper_class); |
| mlan_status wlan_misc_ioctl_operclass_validation(pmlan_adapter pmadapter, |
| mlan_ioctl_req *pioctl_req); |
| mlan_status wlan_misc_ioctl_oper_class(pmlan_adapter pmadapter, |
| mlan_ioctl_req *pioctl_req); |
| |
| t_u16 wlan_adjust_data_rate(mlan_private *priv, t_u8 rx_rate, t_u8 rate_info); |
| t_u8 wlan_adjust_antenna(pmlan_private priv, RxPD *prx_pd); |
| |
| mlan_status wlan_misc_otp_user_data(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| #ifdef USB |
| extern mlan_adapter_operations mlan_usb_ops; |
| |
| mlan_status wlan_misc_ioctl_usb_aggr_ctrl(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| #endif |
| |
| mlan_status wlan_misc_ioctl_aggr_ctrl(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_cmd_packet_aggr_ctrl(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_packet_aggr_ctrl(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| mlan_status wlan_misc_ioctl_txcontrol(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_misc_ioctl_region(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| #ifdef RX_PACKET_COALESCE |
| mlan_status |
| |
| wlan_misc_ioctl_rx_pkt_coalesce_config(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| #endif |
| |
| void wlan_bt_coex_wlan_param_update_event(pmlan_private priv, |
| pmlan_buffer pevent); |
| |
| mlan_status wlan_misc_ioctl_dfs_repeater_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| t_bool wlan_check_interface_active(mlan_adapter *pmadapter); |
| |
| mlan_status wlan_misc_ioctl_coalesce_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_misc_ioctl_low_pwr_mode(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_misc_ioctl_pmic_configure(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_misc_ioctl_cwmode_ctrl(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_set_mef_entry(mlan_private *pmpriv, |
| pmlan_adapter pmadapter, mef_cfg_data * pmef); |
| mlan_status wlan_process_mef_cfg_cmd(mlan_private *pmpriv, |
| pmlan_adapter pmadapter); |
| mlan_status wlan_misc_ioctl_mef_flt_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_misc_ioctl_ind_rst_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_cmd_ind_rst_cfg(HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_ind_rst_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_cmd_802_11_supplicant_pmk(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| |
| mlan_status wlan_ret_802_11_supplicant_pmk(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_sec_ioctl_passphrase(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_misc_ioctl_get_tsf(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| void wlan_add_fw_cfp_tables(pmlan_private pmpriv, t_u8 *buf, t_u16 buf_left); |
| |
| void wlan_free_fw_cfp_tables(mlan_adapter *pmadapter); |
| |
| mlan_status wlan_misc_chan_reg_cfg(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_get_cfp_table(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_get_cfpinfo(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_cmd_get_tsf(pmlan_private pmpriv, HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action); |
| mlan_status wlan_ret_get_tsf(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| t_u8 wlan_ft_akm_is_used(mlan_private *pmpriv, t_u8 *rsn_ie); |
| |
| mlan_status wlan_get_rgchnpwr_cfg(pmlan_adapter pmadapter, |
| mlan_ioctl_req *pioctl_req); |
| mlan_status wlan_get_chan_trpc_cfg(pmlan_adapter pmadapter, |
| mlan_ioctl_req *pioctl_req); |
| mlan_status wlan_cmd_get_chan_trpc_config(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_get_chan_trpc_config(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_cmd_ps_inactivity_timeout(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| |
| t_u8 wlan_ieee_rateid_to_mrvl_rateid(mlan_private *priv, |
| t_u16 IeeeMacRate, t_u8 *dst_mac); |
| t_u8 wlan_mrvl_rateid_to_ieee_rateid(t_u8 rate); |
| |
| t_u8 wlan_get_center_freq_idx(mlan_private *pmpriv, t_u16 band, |
| t_u32 pri_chan, t_u8 chan_bw); |
| |
| mlan_status wlan_ret_chan_region_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_misc_ioctl_fw_dump_event(pmlan_adapter pmadapter, |
| mlan_ioctl_req *pioctl_req); |
| mlan_status wlan_cmd_fw_dump_event(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| |
| mlan_status wlan_misc_bootsleep(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| |
| mlan_status wlan_misc_ioctl_dyn_bw(pmlan_adapter pmadapter, |
| mlan_ioctl_req *pioctl_req); |
| mlan_status wlan_cmd_config_dyn_bw(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_dyn_bw(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| #ifdef UAP_SUPPORT |
| /** wacp mode misc ioctl */ |
| mlan_status wlan_misc_ioctl_wacp_mode(pmlan_adapter pmadapter, |
| mlan_ioctl_req *pioctl_req); |
| #endif |
| |
| mlan_status wlan_power_ioctl_set_get_lpm(pmlan_adapter pmadapter, |
| pmlan_ioctl_req pioctl_req); |
| mlan_status wlan_cmd_set_get_low_power_mode_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, |
| t_void *pdata_buf); |
| mlan_status wlan_ret_set_get_low_power_mode_cfg(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| mlan_status wlan_cmd_range_ext(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *cmd, |
| t_u16 cmd_action, t_void *pdata_buf); |
| mlan_status wlan_ret_range_ext(pmlan_private pmpriv, |
| HostCmd_DS_COMMAND *resp, |
| mlan_ioctl_req *pioctl_buf); |
| |
| /** |
| * @brief RA based queueing |
| * |
| * @param priv A pointer to mlan_private structure |
| * |
| * @return MTRUE or MFALSE |
| */ |
| static INLINE t_u8 |
| queuing_ra_based(pmlan_private priv) |
| { |
| /* |
| * Currently we assume if we are in Infra, then DA=RA. This might not be |
| * true in the future |
| */ |
| if ((priv->bss_mode == MLAN_BSS_MODE_INFRA) && |
| (GET_BSS_ROLE(priv) == MLAN_BSS_ROLE_STA)) |
| return MFALSE; |
| |
| return MTRUE; |
| } |
| |
| /** |
| * @brief Copy Rates |
| * |
| * @param dest A pointer to Dest Buf |
| * @param pos The position for copy |
| * @param src A pointer to Src Buf |
| * @param len The len of Src Buf |
| * |
| * @return Number of Rates copied |
| */ |
| static INLINE t_u32 |
| wlan_copy_rates(t_u8 *dest, t_u32 pos, t_u8 *src, int len) |
| { |
| int i; |
| |
| for (i = 0; i < len && src[i]; i++, pos++) { |
| if (pos >= sizeof(WLAN_802_11_RATES)) |
| break; |
| dest[pos] = src[i]; |
| } |
| |
| return pos; |
| } |
| |
| /** |
| * @brief strlen |
| * |
| * @param str A pointer to string |
| * |
| * @return Length of string |
| */ |
| static INLINE t_u32 |
| wlan_strlen(const char *str) |
| { |
| t_u32 i; |
| |
| for (i = 0; str[i] != 0; i++) ; |
| |
| return i; |
| } |
| |
| /** |
| * @brief iscdigit |
| * |
| * @param chr A char |
| * |
| * @return Non zero if chr is a hex, else 0 |
| */ |
| static INLINE t_u32 |
| wlan_isxdigit(t_u8 chr) |
| { |
| return (chr <= 'f' && chr >= 'a') || (chr <= 'F' && chr >= 'A') || |
| (chr <= '9' && chr >= '0'); |
| } |
| |
| /** |
| * @brief isspace |
| * |
| * @param A chr |
| * |
| * @return Non zero if chr is space etc, else 0 |
| */ |
| static INLINE t_u32 |
| wlan_isspace(t_u8 chr) |
| { |
| return chr <= ' ' && (chr == ' ' || (chr <= 13 && chr >= 9)); |
| } |
| |
| /** delay unit */ |
| typedef enum _delay_unit { |
| USEC, |
| MSEC, |
| SEC, |
| } t_delay_unit; |
| |
| /** delay function */ |
| t_void wlan_delay_func(mlan_adapter *pmadapter, t_u32 delay, t_delay_unit u); |
| |
| /** delay function wrapper */ |
| #define wlan_delay(p, n) wlan_delay_func(p, n, SEC) |
| /** delay function wrapper */ |
| #define wlan_mdelay(p, n) wlan_delay_func(p, n, MSEC) |
| /** delay function wrapper */ |
| #define wlan_udelay(p, n) wlan_delay_func(p, n, USEC) |
| |
| /** |
| * @brief This function check if there are pending cmd |
| * in cmd pending Q |
| * |
| * @param pmadapter A pointer to mlan_adapter structure |
| * |
| * @return MTRUE -- cmd pending |
| * MFALSE -- no pending cmd |
| */ |
| static INLINE int |
| wlan_is_cmd_pending(mlan_adapter *pmadapter) |
| { |
| int ret; |
| cmd_ctrl_node *pcmd_node = MNULL; |
| wlan_request_cmd_lock(pmadapter); |
| pcmd_node = (cmd_ctrl_node *)util_peek_list(pmadapter->pmoal_handle, |
| &pmadapter->cmd_pending_q, |
| MNULL, MNULL); |
| if (pcmd_node) |
| ret = MTRUE; |
| else |
| ret = MFALSE; |
| wlan_release_cmd_lock(pmadapter); |
| return ret; |
| } |
| |
| /** Get BSS number from priv */ |
| #define GET_BSS_NUM(priv) ((priv)->bss_num) |
| |
| /** |
| * @brief This function returns priv based on the BSS num and BSS type |
| * |
| * @param pmadapter A pointer to mlan_adapter |
| * @param bss_num BSS number |
| * @param bss_type BSS type |
| * |
| * @return Pointer to mlan_private |
| */ |
| static INLINE mlan_private * |
| wlan_get_priv_by_id(mlan_adapter *pmadapter, t_u32 bss_num, t_u32 bss_type) |
| { |
| int i; |
| |
| for (i = 0; i < MIN(pmadapter->priv_num, MLAN_MAX_BSS_NUM); i++) { |
| if (pmadapter->priv[i]) { |
| if ((pmadapter->priv[i]->bss_num == bss_num) && |
| (pmadapter->priv[i]->bss_type == bss_type)) |
| return pmadapter->priv[i]; |
| } |
| } |
| return MNULL; |
| } |
| |
| /** |
| * @brief This function returns first available priv |
| * based on the BSS role |
| * |
| * @param pmadapter A pointer to mlan_adapter |
| * @param bss_role BSS role or MLAN_BSS_ROLE_ANY |
| * |
| * @return Pointer to mlan_private |
| */ |
| static INLINE mlan_private * |
| wlan_get_priv(mlan_adapter *pmadapter, mlan_bss_role bss_role) |
| { |
| int i; |
| |
| for (i = 0; i < MIN(pmadapter->priv_num, MLAN_MAX_BSS_NUM); i++) { |
| if (pmadapter->priv[i]) { |
| if (bss_role == MLAN_BSS_ROLE_ANY || |
| GET_BSS_ROLE(pmadapter->priv[i]) == bss_role) |
| return pmadapter->priv[i]; |
| } |
| } |
| return MNULL; |
| } |
| |
| /** |
| * @brief This function counts the number of occurences for a certain |
| * condition among privs. Which privs are checked can be configured |
| * via a second condition. |
| * |
| * @param pmadapter A pointer to mlan_adapter |
| * @param count_cond Function pointer to condition to count on privs |
| * @param check_cond Function pointer to condition to decide whether priv |
| * should be counted or not. Use MNULL to check all privs. |
| * |
| * @return Count of privs where count_cond returned MTRUE. |
| */ |
| static INLINE int |
| wlan_count_priv_cond(mlan_adapter *pmadapter, |
| t_bool (*count_cond) (pmlan_private pmpriv), |
| t_bool (*check_cond) (pmlan_private pmpriv)) |
| { |
| pmlan_private pmpriv; |
| int count = 0; |
| int i; |
| |
| if (pmadapter == MNULL || count_cond == MNULL) |
| return 0; |
| |
| for (i = 0; i < pmadapter->priv_num; i++) { |
| pmpriv = pmadapter->priv[i]; |
| if (pmpriv) { |
| if ((check_cond == MNULL) || |
| (check_cond && check_cond(pmpriv))) { |
| if (count_cond(pmpriv)) |
| count++; |
| } |
| } |
| } |
| |
| return count; |
| } |
| |
| /** |
| * @brief This function runs a procedure on each priv. |
| * Which privs it is run on can be configured via a condition. |
| * |
| * @param pmadapter A pointer to mlan_adapter |
| * @param operation Function pointer to produedure to operate on priv |
| * @param check_cond Function pointer to condition to decide whether priv |
| * operated on or not. Use MNULL to run on all privs. |
| * |
| * @return Number of privs that operation was run on. |
| */ |
| static INLINE int |
| wlan_do_task_on_privs(mlan_adapter *pmadapter, |
| t_void (*operation) (pmlan_private pmpriv), |
| t_bool (*check_cond) (pmlan_private pmpriv)) |
| { |
| pmlan_private pmpriv; |
| int count = 0; |
| int i; |
| |
| if (pmadapter == MNULL || operation == MNULL) |
| return 0; |
| |
| for (i = 0; i < pmadapter->priv_num; i++) { |
| pmpriv = pmadapter->priv[i]; |
| if (pmpriv) { |
| if ((check_cond == MNULL) || |
| (check_cond && check_cond(pmpriv))) { |
| operation(pmpriv); |
| count++; |
| } |
| } |
| } |
| |
| return count; |
| } |
| |
| /** |
| * @brief This function builds a list of privs that test for a condition |
| * This is useful if you need to do a number of operations on the same set |
| * of privs. For one-off tasks, the above two functions might be better. |
| * |
| * @param pmadapter A pointer to mlan_adapter |
| * @param check_cond Function pointer to condition to decide whether priv |
| * should be placed in the list. |
| * @param ppriv_list Output param. Externally supplied array of mlan_private* |
| * to hold priv's that test positive with check_cond. |
| * Array size should be at least pmadapter->priv_num. |
| * |
| * @return Number of privs in ppriv_list |
| * |
| * @sa wlan_count_priv_cond |
| */ |
| static INLINE int |
| wlan_get_privs_by_cond(mlan_adapter *pmadapter, |
| t_bool (*check_cond) (pmlan_private pmpriv), |
| mlan_private **ppriv_list) |
| { |
| pmlan_private pmpriv; |
| int count = 0; |
| int i; |
| |
| if (pmadapter == MNULL || check_cond == MNULL || ppriv_list == MNULL) |
| return 0; |
| |
| for (i = 0; i < pmadapter->priv_num; i++) { |
| pmpriv = pmadapter->priv[i]; |
| if (pmpriv) { |
| if (check_cond(pmpriv)) |
| ppriv_list[count++] = pmpriv; |
| } |
| } |
| |
| return count; |
| } |
| |
| /** |
| * @brief This function builds a list of privs that test against two conditions |
| * This is useful if you need to do a number of operations on the same set |
| * of privs. Can choose whether both conditions (AND) or either condition (OR) |
| * is required. |
| * |
| * @param pmadapter A pointer to mlan_adapter |
| * @param check_cond Function pointer to condition to decide whether priv |
| * should be placed in the list. |
| * @param check_cond_2 Function pointer to second condition to check. |
| * @param and_conditions If MTRUE, both conditions must be met (AND), |
| * else either condition can be met (OR). |
| * @param ppriv_list Output param. Externally supplied array of |
| * mlan_private* to hold priv's that test positive with check_cond. Array size |
| * should be at least pmadapter->priv_num. |
| * |
| * @return Number of privs in ppriv_list |
| * |
| * @sa wlan_count_priv_cond, wlan_get_privs_by_cond |
| */ |
| static INLINE int |
| wlan_get_privs_by_two_cond(mlan_adapter *pmadapter, |
| t_bool (*check_cond) (pmlan_private pmpriv), |
| t_bool (*check_cond_2) (pmlan_private pmpriv), |
| t_bool and_conditions, mlan_private **ppriv_list) |
| { |
| pmlan_private pmpriv; |
| int count = 0; |
| int i; |
| |
| if (pmadapter == MNULL || check_cond == MNULL || |
| check_cond_2 == MNULL || ppriv_list == MNULL) |
| return 0; |
| |
| for (i = 0; i < pmadapter->priv_num; i++) { |
| pmpriv = pmadapter->priv[i]; |
| if (pmpriv) { |
| if (and_conditions) { |
| if (check_cond(pmpriv) && check_cond_2(pmpriv)) |
| ppriv_list[count++] = pmpriv; |
| } else { |
| if (check_cond(pmpriv) || check_cond_2(pmpriv)) |
| ppriv_list[count++] = pmpriv; |
| } |
| } |
| } |
| |
| return count; |
| } |
| #endif /* !_MLAN_MAIN_H_ */ |