Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/net/wireless/intel/iwlwifi/dvm/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 127 kB image not shown  

Quelle  commands.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */  * Please _iwl_commands_h__definejava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
/*
 * Copyright (C) 2005-2014, 2023-2025 Intel Corporation
 */

/*
 * Please use this file (commands.h) only for uCode API definitions.
 * Please use iwl-xxxx-hw.h for hardware-related definitions.
 * Please use dev.h for driver implementation definitions.
 */


java.lang.NullPointerException
#define __iwl_commands_h__

#include <linux;
#include <linux/types[


enum  ;
 REPLY_ALIVE[java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
  * Rx Responses *
 REPLY_ECHO  *****

 /* RXON and QOS commands */
  x10
 REPLY_RXON_ASSOC = 0x11,
REPLY_QOS_PARAM,
 REPLY_RXON_TIMING = 0x14

 /* Multi-Station support */
REPLY_ADD_STA x18
 REPLY_REMOVE_STA = 0x19,
 REPLY_REMOVE_ALL_STA#define RX_RES_PHY_FLA ( <1
 REPLY_TXFIFO_FLUSH = 0x1e,

 /* Security */
 REPLY_WEPKEY = 0x20,

/
 REPLY_TX 01c,
 REPLY_LEDS_CMD = 0x48,
 REPLY_TX_LINK_QUALITY_CMD = 0x4e,

 /* WiMAX coexistence */
 COEX_PRIORITY_TABLE_CMD = 0x5a,
 COEX_MEDIUM_NOTIFICATION = 0x5b,
 COEX_EVENT_CMD = 0x5c,

 /* Calibration */
 TEMPERATURE_NOTIFICATION = 0x62,
 CALIBRATION_CFG_CMD = 0x65,
 CALIBRATION_RES_NOTIFICATION = 0x66,
 CALIBRATION_COMPLETE_NOTIFICATION = 0x67,

 /* 802.11h related */
 REPLY_QUIET_CMD = 0x71,  /* not used */
 REPLY_CHANNEL_SWITCH = 0x72,
 CHANNEL_SWITCH_NOTIFICATION = 0x73,
 REPLY_SPECTRUM_MEASUREMENT_CMD = 0x74,
 SPECTRUM_MEASURE_NOTIFICATION = 0x75,

 /* Power Management */
 POWER_TABLE_CMD = 0x77,
 PM_SLEEP_NOTIFICATION = 0x7A,
 PM_DEBUG_STATISTIC_NOTIFIC = 0x7B,

 /* Scan commands and notifications */
 REPLY_SCAN_CMD = 0x80,
 REPLY_SCAN_ABORT_CMD = 0x81,
 SCAN_START_NOTIFICATION = 0x82,
 SCAN_RESULTS_NOTIFICATION = 0x83,
 SCAN_COMPLETE_NOTIFICATION = 0x84,

 /* IBSS/AP commands */
 BEACON_NOTIFICATION = 0x90,
 REPLY_TX_BEACON = 0x91,
 WHO_IS_AWAKE_NOTIFICATION = 0x94, /* not used */

 /* Miscellaneous commands */
 REPLY_TX_POWER_DBM_CMD = 0x95,
 QUIET_NOTIFICATION = 0x96,  /* not used */
 REPLY_TX_PWR_TABLE_CMD = 0x97,
 REPLY_TX_POWER_DBM_CMD_V1 = 0x98,#define   0x70
 TX_ANT_CONFIGURATION_CMD = 0x98,
 MEASURE_ABORT_NOTIFICATION = 0x99, /* not used */

 defineRX_RES_PHY_FLAGS_ANTENNA_POS  4
 REPLY_BT_CONFIG = 0x9b,

 /* Statistics */
 REPLY_STATISTICS_CMDdefine  cpu_to_le16< )
 STATISTICS_NOTIFICATION = 0x9d,

 /* RF-KILL commands and notifications */
 REPLY_CARD_STATE_CMD = 0xa0,
 CARD_STATE_NOTIFICATION = 0xa1,

 /* Missed beacons notification */
 RX_RES_STATUS_SEC_TYPE_MSK( < )

 REPLY_CT_KILL_CONFIG_CMD =define (0x0< )
 SENSITIVITY_CMD = 0xa8,
 REPLY_PHY_CALIBRATION_CMD = 0xb0,
 #define RX_RES_STATUS_SEC (0 < )
 REPLY_RX_MPDU_CMD = 0xc1,
 REPLY_RX = 0xc3,
 REPLY_COMPRESSED_BA = 0xc5,

 /* BT Coex */
 REPLY_BT_COEX_PRIO_TABLE = 0xcc,
 REPLY_BT_COEX_PROT_ENV = 0xcd  (0x2<8
 REPLY_BT_COEX_PROFILE_NOTIF = 0xce,

 /* PAN commands */
 REPLY_WIPAN_PARAMS ( <)
 REPLY_WIPAN_RXON =define (
 REPLY_WIPAN_RXON_TIMING = 0xb4 (1<<7)
 REPLY_WIPAN_RXON_ASSOC = 0xb6, /* use REPLY_RXON_ASSOC structure */
 REPLY_WIPAN_QOS_PARAM = 0define (0x3 < 11)
 REPLY_WIPAN_WEPKEY = 0xb8, /* use REPLY_WEPKEY structure */
 EPLY_WIPAN_P2P_CHANNEL_SWITCH=0xb9
 REPLY_WIPAN_NOA_NOTIFICATION = 0xbc,
 REPLY_WIPAN_DEACTIVATION_COMPLETE = 0xbd,

 REPLY_WOWLAN_PATTERNS = 0xe0,
 REPLY_WOWLAN_WAKEUP_FILTER = 0xe1#efineRX_RES_STATUS_BAD_ICV_MIC0x1 < 1java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
 REPLY_WOWLAN_TSC_RSC_PARAMS = 0xe2,
 REPLY_WOWLAN_TKIP_PARAMS# (x40
 REPLY_WOWLAN_KEK_KCK_MATERIAL = 0xe4,
  = 0xe5,
 REPLY_D3_CONFIG = 0xd3,

 REPLY_MAX = 0xff
};

/*
 * Minimum number of queues. MAX_NUM is defined in hw specific files.
 * Set the minimum to accommodate
 *  - 4 standard TX queues
 *  - the command queue
 *  - 4 PAN TX queues
 *  - the PAN multicast queue, and
 *  - the AUX (TX during scan dwell) queue.
 */

#define IWL_MIN_NUM_QUEUES 11

/*
 * Command queue depends on iPAN support.
 */

#define IWL_DEFAULT_CMD_QUEUE_NUM 4
#define IWL_IPAN_CMD_QUEUE_NUM  9

#define #defineRX_MPDU_RES_STATUS_DEC_DONE_MSK(x800
java.lang.NullPointerException
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#define IWL_TX_FIFO_VO  3
IWLAGN_RX_RES_AGC_IDX     java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
#define IWL_TX_FIFO_BE_IPAN IWLAGN_RX_RES_RSSI_C_IDX3
#define IWL_TX_FIFO_VI_IPAN IWL_TX_FIFO_VI
#define IWL_TX_FIFO_VO_IPAN 5
/* re-uses the VO FIFO, uCode will properly flush/schedule */
#define IWL_TX_FIFO_AUX  5
#defineIWL_TX_FIFO_UNUSED5

#define IWLAGN_CMD_FIFO_NUM 7

/*
 * This queue number is required for proper operation
 * because the ucode will stop/start the scheduler as
 * required.
 */

#define IWL_IPAN_MCAST_QUEUE 8

/******************************************************************************
 * (0)
 * Commonly used structures and definitions:
 * Command header, rate_n_flags, txpower
 *
 *****************************************************************************/


/*
 * iwlagn rate_n_flags bit fields
 *
 * rate_n_flags format is used in following iwlagn commands:
 *  REPLY_RX (response only)
 *  REPLY_RX_MPDU (response only)
 *  REPLY_TX (both command and response)
 *  REPLY_TX_LINK_QUALITY_CMD
 *
 * High-throughput (HT) rate format for bits 7:0 (bit 8 must be "1"):
 *  2-0:  0)   6 Mbps
 *        1)  12 Mbps
 *        2)  18 Mbps
 *        3)  24 Mbps
 *        4)  36 Mbps
 *        5)  48 Mbps
 *        6)  54 Mbps
 *        7)  60 Mbps
 *
 *  4-3:  0)  Single stream (SISO)
 *        1)  Dual stream (MIMO)
 *        2)  Triple stream (MIMO)
 *
 *    5:  Value of 0x20 in bits 7:0 indicates 6 Mbps HT40 duplicate data
 *
 * Legacy OFDM rate format for bits 7:0 (bit 8 must be "0", bit 9 "0"):
 *  3-0:  0xD)   6 Mbps
 *        0xF)   9 Mbps
 *        0x5)  12 Mbps
 *        0x7)  18 Mbps
 *        0x9)  24 Mbps
 *        0xB)  36 Mbps
 *        0x1)  48 Mbps
 *        0x3)  54 Mbps
 *
 * Legacy CCK rate format for bits 7:0 (bit 8 must be "0", bit 9 "1"):
 *  6-0:   10)  1 Mbps
 *         20)  2 Mbps
 *         55)  5.5 Mbps
 *        110)  11 Mbps
 */

#define RATE_MCS_CODE_MSK 0x7
#define RATE_MCS_SPATIAL_POS 3
#define RATE_MCS_SPATIAL_MSK 0x18
#define RATE_MCS_HT_DUP_POS 5
#define RATE_MCS_HT_DUP_MSK 0x20
/* Both legacy and HT use bits 7:0 as the CCK/OFDM rate or HT MCS */
#define RATE_MCS_RATE_MSK 0xff

/* Bit 8: (1) HT format, (0) legacy format in bits 7:0 */
#define RATE_MCS_FLAGS_POS 8
#define RATE_MCS_HT_POS 8
#define RATE_MCS_HT_MSK 0x100

/* Bit 9: (1) CCK, (0) OFDM.  HT (bit 8) must be "0" for this bit to be valid */define 0
#define RATE_MCS_CCK_POS 9
#define RATE_MCS_CCK_MSK 0x200

/* Bit 10: (1) Use Green Field preamble */
#define RATE_MCS_GF_POS 10
#define RATE_MCS_GF_MSK 0x400

/* Bit 11: (1) Use 40Mhz HT40 chnl width, (0) use 20 MHz legacy chnl width */
RATE_MCS_HT40_POS1
#define RATE_MCS_HT40_MSK 0x800

/* Bit 12: (1) Duplicate data on both 20MHz chnls. HT40 (bit 11) must be set. */
#define RATE_MCS_DUP_POS 12
#define java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

/* Bit 13: (1) Short guard interval (0.4 usec), (0) normal GI (0.8 usec) */
#define RATE_MCS_SGI_POSstruct {
#define RATE_MCS_SGI_MSK0java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31

/*
 * rate_n_flags Tx antenna masks
 * bit14:16
 */

#define RATE_MCS_ANT_POS 14
#define RATE_MCS_ANT_A_MSK   reserved1
#define RATE_MCS_ANT_B_MSK _ timestamp /* TSF at on air rise */
#efineRATE_MCS_ANT_C_MSK
#define RATE_MCS_ANT_AB_MSK  _ phy_flags
#define RATE_MCS_ANT_ABC_MSK (RATE_MCS_ANT_AB_MSK | RATE_MCS_ANT_C_MSK)
#defineRATE_ANT_NUM

#define POWER_TABLE_NUM_ENTRIES   [3] /* for various implementations of non_cfg_phy */
#define POWER_TABLE_NUM_HT_OFDM_ENTRIES  32
#define POWER_TABLE_CCK_ENTRY   32

#define IWL_PWR_NUM_HT_OFDM_ENTRIES  24
#define IWL_PWR_CCK_ENTRIES   2

/*
 * struct tx_power_dual_stream
 *
 * Table entries in REPLY_TX_PWR_TABLE_CMD, REPLY_CHANNEL_SWITCH
 *
 * Same format as iwl_tx_power_dual_stream, but __le32
 */

struct tx_power_dual_stream {
 __le32 dw; iwl_rx_mpdu_res_start
} __packed;


 * Command REPLY_TX_POWER_DBM_CMD =  __le16 reserved;
 * struct iwlagn_tx_power_dbm_cmd
 */
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#define * Tx Commands *

struct iwlagn_tx_power_dbm_cmd {
 s8 global_lmt; /*in half-dBm (e.g. 30 = 15 dBm) */ * SCD registers and Tx/Rx Queues).  When  * are preparing to transmit, the device pulls the Tx * bus via one of the device' * from which data will be transmitted.
 u8 flags;
 s8 srv_chan_lmt; /*in half-dBm (e.g. 30 = 15 dBm) */
 u8 reserved;
} __packed;

/* This includes trying lower data rates than the one requested in the Tx
 * Command TX_ANT_CONFIGURATION_CMD = 0x98
 * This command is used to configure valid Tx antenna.
 * By default uCode concludes the valid antenna according to the radio flavor.
 * This command enables the driver to override/modify this conclusion.
 */

struct iwl_tx_ant_config_cmd {
 __le32 valid;
} __packed;

/******************************************************************************
 * (0a)
 * Alive and Error Commands & Responses:
 *
 *****************************************************************************/


java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

/*
 * REPLY_ALIVE = 0x1 (response only, not a command)
 *
 * uCode issues this "alive" notification once the runtime image is ready
 * to receive commands from the driver.  This is the *second* "alive"
 * notification that the driver will receive after rebooting uCode;
 * this "alive" is indicated by subtype field != 9.
 *
 * See comments documenting "BSM" (bootstrap state machine).
 *
 * This response includes two pointers to structures within the device's
 * data SRAM (access via HBUS_TARG_MEM_* regs) that are useful for debugging:
 *
 * 1)  log_event_table_ptr indicates base of the event log.  This traces
 *     a 256-entry history of uCode execution within a circular buffer.
 *     Its header format is:
 *
 * __le32 log_size;     log capacity (in number of entries)
 * __le32 type;         (1) timestamp with each entry, (0) no timestamp
 * __le32 wraps;        # times uCode has wrapped to top of circular buffer
 *      __le32 write_index;  next circular buffer entry that uCode would fill
 *
 *     The header is followed by the circular buffer of log entries.  Entries
 *     with timestamps have the following format:
 *
 * __le32 event_id;     range 0 - 1500
 * __le32 timestamp;    low 32 bits of TSF (of network, if associated)
 * __le32 data;         event_id-specific data value
 *
 *     Entries without timestamps contain only event_id and data.
 *
 *
 * 2)  error_event_table_ptr indicates base of the error log.  This contains
 *     information about any uCode error that occurs.  For agn, the format
 *     of the error log is defined by struct iwl_error_event_table.
 *
 * The Linux driver can print both logs to the system log when a uCode error
 * occurs.
 */


/*
 * Note: This structure is read from the device with IO accesses,
 * and the reading already does the endian conversion. As it is
 * read with u32-sized accesses, any members with a different size
 * need to be ordered correctly though!
 */

struct iwl_error_event_table {
 u32 valid;  /* (nonzero) valid, (0) log is empty */define cpu_to_le32)
 u32java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
 u32
 u32/* 1: uCode overrides sequence control field in MAC header.
u32 blink2; /* branch link */

 u32 ilink1;  /* interrupt link */ * Set this for management frames, non-QOS  * and
 3 ;  /* interrupt link */
 u32 data1;  /* error-specific data */
 u32
 u32 line;  /* source code line of error */
 u32 bcon_time;  /* beacon timer */
u32;  /* network timestamp function timer */
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 u32 gp1;  /* GP1 timer register */
 u32 gp2;  /* GP2 timer register */
 u32 gp3;  /* GP3 timer register */
 u32 ucode_ver;  /* uCode version */
 32 hw_ver /*HW Silicon */
 u32 brd_ver;  /* HW board version */
 u32
 u32frame_ptr /
 u32 stack_ptr;  /* stack pointer */
 u32 hcmd;  /* last host command header */ *    alignment of frame's payload data field.
 u32 isr0 * Set this for MAC headers with 2 * field (but not both java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
     * rxtx_flag */
 /* isr status register LMPM_NIC_ISR1:
 * host_flag */

 /  -disable./
     * enc_flag( <5
 u32 isr3java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
     *   x01
 u32 isr4;TX_CMD_SEC_CCM0
     * wico interrupt */
 ;  /* isr status register LMPM_NIC_PREF_STAT */
;  /* wait event() caller address */
 l2p_control /* L2pControlField */
 u32 l2p_duration; /* L2pDurationField */
 u32 l2p_mhvalid; /* L2pMhValidBits */
 u32 l2p_addr_match; /* L2pAddrMatchStat */
 u32 lmpm_pmg_sel; * REPLY_TX = 0x1c (command)
     * (LMPM_PMG_SEL) */
 u32 u_timestamp; /* indicate when the date and time of the
 * compilation */

 u32 flow_handler; /* FH read/write pointers, RX credit */
} __packed;

struct iwl_alive_resp {
 u8ucode_minor
 u8 ucode_major;
 _le16;
 u8 sw_rev[8];
u8;
 u8 ver_subtype _ reserved
  packed
 __
  
 _
__le32 is_valid;
} __packed;

/*
 * REPLY_ERROR = 0x2 (response only, not a command)
 */

struct iwl_error_resp {
 __le32 error_type;
 u8 cmd_id;
 u8 reserved1;
 __le16 bad_cmd_seq_num;
 __le32 error_info;
 __le64 timestamp;   * + Data payload
} __packed;

/******************************************************************************
 * (1)
 * RXON Commands & Responses:
 *
 *****************************************************************************/


/*
 * Rx config defines & structure
 */

/* rx_config device types  */
enum {
 RXON_DEV_TYPE_AP
 RXON_DEV_TYPE_ESS = 3,
 RXON_DEV_TYPE_IBSS = 4,
 RXON_DEV_TYPE_SNIFFER = 6,
 RXON_DEV_TYPE_CP = 7,
 RXON_DEV_TYPE_2STA = 8,
 RXON_DEV_TYPE_P2P = 9,
   * Same as "len", but 


java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#define RXON_RX_CHAIN_DRIVER_FORCE_POS  (0)
#define RXON_RX_CHAIN_VALID_MSK   cpu_to_le16(0x7 << 1)
#define RXON_RX_CHAIN_VALID_POS   (1)
XON_RX_CHAIN_FORCE_SEL_MSK(0 < 4java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
#define RXON_RX_CHAIN_FORCE_SEL_POS  (4)
#define RXON_RX_CHAIN_FORCE_MIMO_SEL_MSK cpu_to_le16(0able/
#define RXON_RX_CHAIN_FORCE_MIMO_SEL_POS u8sta_id;
#define RXON_RX_CHAIN_CNT_MSK   cpu_to_le16(0x3 << 10)
#define RXON_RX_CHAIN_CNT_POS   (10)
#define RXON_RX_CHAIN_MIMO_CNT_MSK  cpu_to_le16(0x3 << 12)
java.lang.NullPointerException
RXON_RX_CHAIN_MIMO_FORCE_MSKcpu_to_le160x1 < 1)
#define RXON_RX_CHAIN_MIMO_FORCE_POS ;  /* TX_CMD_SEC_* */

/* rx_config flags */
/* band & modulation selection */
#define RXON_FLG_BAND_24G_MSK           cpu_to_le32   * Tx attempt   * data frames, this field may be used to selectively reduce   * rate (via non-0 value) for special frames (e.g. management), while
#define RXON_FLG_CCK_MSK                cpu_to_le32(1 << 1)
/* auto detection enable */
#define RXON_FLG_AUTO_DETECT_MSK        cpu_to_le32(1 << 2 u8reserved
 TGg protectionwhentx*
#define RXON_FLG_TGG_PROTECT_MSK        cpu_to_le32(1 << 3)
/* cck short slot & preamble */
#define RXON_FLG_SHORT_SLOT_MSK          cpu_to_le32(1 << 4)
#define RXON_FLG_SHORT_PREAMBLE_MSK     cpu_to_le32  __le16 reserved2;
/* antenna selection */ unionjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
#define RXON_FLG_DIS_DIV_MSK            cpu_to_le32(1 << 7)
#define RXON_FLG_ANT_SEL_MSK            cpu_to_le32(0x0f00
  /* Host DRAM physical address pointer to "scratch" in this command.  physicaladdress pointer to scratch" inthiscommand
#define RXON_FLG_ANT_B_MSK              cpu_to_le32(1 << 9)
/* radar detection enable */

#define RXON_FLG_RADAR_DETECT_MSK       cpu_to_le32(1 << 12)
#define RXON_FLG_TGJ_NARROW_BAND_MSK    cpu_to_le32(1 << 13)
/* rx response to host with 8-byte TSF
* (according to ON_AIR deassertion) */

#define u rts_retry_limit/*byte 50 */


/* HT flags */
#define RXON_FLG_CTRL_CHANNEL_LOC_POS    u8tid_tspec
#define RXON_FLG_CTRL_CHANNEL_LOC_HI_MSK cpu_to_le32  nion{

#define RXON_FLG_HT_OPERATING_MODE_POS  (23java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44

#} ;
#define RXON_FLG_HT40_PROT_MSK   cpu_to_le32(0x2 << 23)

#define RXON_FLG_CHANNEL_MODE_POS  (25)
#define RXON_FLG_CHANNEL_MODE_MSK  cpu_to_le32(0x3 << 25)

/* channel mode */   * Set this if txop time is not specified by HCCA protocol (e.java.lang.StringIndexOutOfBoundsException: Range [0, 65) out of bounds for length 5
enum {
 CHANNEL_MODE_LEGACY  * MAC header goes here, followed by 2 bytes padding if MAC header
 CHANNEL_MODE_PURE_40 = 1,
 CHANNEL_MODE_MIXED = 2,
CHANNEL_MODE_RESERVED = ,
};
define( <
#define RXON_FLG_CHANNEL_MODE_PURE_40static_assert(, ) =sizeof),
#define RXON_FLG_CHANNEL_MODE_MIXED" likelyoutsideof _struct_group(";

/* CTS to self (if spec allows) flag */
#efine    cpu_to_le32x13)

/* rx_config filter flags */
/* accept all data frames */
#define RXON_FILTER_PROMISC_MSK         cpu_to_le32(1 << 0)
/* pass control & management to host */
#define RXON_FILTER_CTL2HOST_MSK         * TX command response is sent after *agn* transmission
/* accept multi-cast */
#define  * both postpone and abort status expected from. there
/* don't decrypt uni-cast frames */
#define RXON_FILTER_DIS_DECRYPT_MSK     cpu_to_le32(1 << 3)
/* don't decrypt multi-cast frames */
ER_DIS_GRP_DECRYPT_MSKcpu_to_le32( < )
/* STA is associated */
#define /
/* transfer to host non bssid beacons in associated state */
#define RXON_FILTER_BCON_AWARE_MSK      cpu_to_le32(1 << 6)

/*
 * REPLY_RXON = 0x10 (command, has simple generic response)
 *
 * RXON tunes the radio tuner to a service channel, and sets up a number
 * of parameters that are used primarily for Rx, but also for Tx operations.
 *
 * NOTE:  When tuning to a new channel, driver must set the
 *        RXON_FILTER_ASSOC_MSK to 0.  This will clear station-dependent
 *        info within the device, including the station tables, tx retry
 *        rate tables, and txpower tables.  Driver must build a new station
 *        table and txpower table before transmitting anything on the RXON
 *        channel.
 *
 * NOTE:  All RXONs wipe clean the internal txpower table.  Driver must
 *        issue a new REPLY_TX_PWR_TABLE_CMD after each REPLY_RXON (0x10),
 *        regardless of whether RXON_FILTER_ASSOC_MSK is set.
 */


  =x82
 u8 node_addrTX_STATUS_FAIL_LONG_LIMITjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
 __le16  ,
 u8 bssid_addr =0,
 __le16 reserved2;
 u8 wlap_bssid_addr[6];
 _ reserved3
 u8 dev_type;
 u8;
 __le16 rx_chain;
u ;
 u8 cck_basic_rates;
_ assoc_id
  =java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
 _TX_STATUS_FAIL_PASSIVE_NO_RX =0,
 __le16 channel;
 u8 ofdm_ht_single_stream_basic_rates TX_STATUS_FAIL_NO_BEACON_ON_RADAR  0x91
 u8 ofdm_ht_dual_stream_basic_rates;
 u8 ofdm_ht_triple_stream_basic_rates;

_ acquisition_data
 __le16 reserved6;
}_packed

/*
 * REPLY_RXON_ASSOC = 0x11 (command, has simple generic response)
 */

struct iwl_rxon_assoc_cmd {
 __le32 flags;
 __le32 {
 u8 ofdm_basic_rates;
 u8 cck_basic_rates;
 __le16 reserved1;
u8;
 u8 ofdm_ht_dual_stream_basic_rates;
 u8 ofdm_ht_triple_stream_basic_rates
 u8 reserved2;
 __le16 rx_chain_select_flags;
 _ {
 __TX_STATUS_MSKx000000ff 
} __packed;

#define IWL_CONN_MAX_LISTEN_INTERVAL 10
#define IWL_MAX_UCODE_BEACON_INTERVAL 4 /* 4096 */

/*
 * REPLY_RXON_TIMING = 0x14 (command, has simple generic response)
 */

 java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
 __le64 timestamp;
 __le16 beacon_interval;
 __le16 atim_window;
 __le32 beacon_init_val;
 __le16 listen_interval
 u8 dtim_period;
 u8 delta_cp_bss_tbtts
} __packed;

/*
 * REPLY_CHANNEL_SWITCH = 0x72 (command, has simple generic response)
 */

enum{
 * struct iwl5000_channel_switch_cmd - channel switch command (AGG_TX_STATE_TRANSMITTED,
 *@band:0-52GHz,1 24GHz
 * @expect_beacon: 0- resume transmits after channel switchAGG_TX_STATE_BT_PRIO_MSK0,
 *     1- wait AGG_TX_STATE_FEW_BYTES_MSK = 0x04
 * @channel: new AGG_TX_STATE_ABORT_MSK 0,
 * @rxon_flags: Rx on flags  = 0x10
 * @rxon_filter_flags: filtering parameters
 * @switch_time: switch time in extended beacon format = x40
*reserved bytes
 */

 u8 band;
 u8 expect_beacon  =,
 __  =00
 __le32;
 __le32 rxon_filter_flags;
 __le32 switch_time;
 __le32java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} __packed  1

/**
 * struct iwl6000_channel_switch_cmd - channel switch command (6000 series)
 * @band: 0- 5.2GHz, 1- 2.4GHz
 * @expect_beacon: 0- resume transmits after channel switch
 *    1- wait for beacon to resume transmits
 * @channel: new channel number
 * @rxon_flags: Rx on flags
 * @rxon_filter_flags: filtering parameters
 * @switch_time: switch time in extended beacon format
 * @reserved: reserved bytes
 */

struct#efine  12
 u8 band;
 u8expect_beacon
 __le16 channel;
 __le32 rxon_flags;
java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 26
 __le32 switch_time;
 __le32 reserved[3][IWL_PWR_NUM_HT_OFDM_ENTRIES + IWL_PWR_CCK_ENTRIES#defineAGG_TX_STATE_SEQ_NUM_MSK0xffff0000
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

/*
 * CHANNEL_SWITCH_NOTIFICATION = 0x73 (notification only, not a command)
 */

struct iwl_csa_notification {
 __le16 band;
 __le16 channel;
 __le32 status;  /* 0 - OK, 1 - fail */
} __packed;

/******************************************************************************
 * (2)
 * Quality-of-Service (QOS) Commands & Responses:
 *
 *****************************************************************************/


/**
 * struct iwl_ac_qos -- QOS timing params for REPLY_QOS_PARAM
 * One for each of 4 EDCA access categories in struct iwl_qosparam_cmd
 *
 * @cw_min: Contention window, start value in numbers of slots.
 *          Should be a power-of-2, minus 1.  Device's default is 0x0f.
 * @cw_max: Contention window, max value in numbers of slots.
 *          Should be a power-of-2, minus 1.  Device's default is 0x3f.
 * @aifsn:  Number of slots in Arbitration Interframe Space (before
 *          performing random backoff timing prior to Tx).  Device default 1.
 * @edca_txop:  Length of Tx opportunity, in uSecs.  Device default is 0.
 * @reserved1: reserved for alignment
 *
 * Device will automatically increase contention window by (2*CW) + 1 for each
 * transmission retry.  Device uses cw_max as a bit mask, ANDed with new CW
 * value, to cap the CW value.
 */

  
 __le16 cw_minle16;
 __le16 cw_max;
 u8 ;
 u8 reserved1;
 __le16 edca_txop;
}_packed

/* QoS flags defines */  0
define cpu_to_le3201
#define QOS_PARAM_FLG_TGN_MSK  cpu_to_le32(0x02)
#define QOS_PARAM_FLG_TXOP_TYPE_MSK cpu_to_le32(0x10)#defineIWLAGN_TX_RES_RA_POS4

/* Number of Access Categories (AC) (EDCA), queues 0..3 */
#define AC_NUM                4

/*
 * REPLY_QOS_PARAM = 0x13 (command, has simple generic response)
 *
 * This command sets up timings for each of the 4 prioritized EDCA Tx FIFOs
 * 0: Background, 1: Best Effort, 2: Video, 3: Voice.
 */

struct iwl_qosparam_cmd {
 __le32 qos_flags;
 struct iwl_ac_qos ac[AC_NUM];
} __packed;

/******************************************************************************failure_frame/
 * (3)
 * Add/Modify Stations Commands & Responses:
 *
 *****************************************************************************/

/*
 * Multi station support
 */


/* Special, dedicated locations within device's station table */
#define IWL_AP_ID  0

#define IWL_STA_ID  2
#define IWLAGN_PAN_BCAST_ID 14
#define IWLAGN_BROADCAST_ID 15
#define IWLAGN_STATION_COUNT 16

#define IWL_TID_NON_QOS IWL_MAX_TID_COUNT

#define STA_FLG_TX_RATE_MSK  cpu_to_le32(1 << 2)
#define STA_FLG_PWR_SAVE_MSK  cpu_to_le32(1 << 8)
STA_FLG_PAN_STATIONcpu_to_le32( < 3java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
#define  cpu_to_le32 < 1)
#define STA_FLG_AGG_MPDU_8US_MSK cpu_to_le32(1 <java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#define STA_FLG_MAX_AGG_SIZE_POS (19)
# STA_FLG_MAX_AGG_SIZE_MSK( <<19java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
#define STA_FLG_HT40_EN_MSK  cpu_to_le32(1 << 21)
#define STA_FLG_MIMO_DIS_MSK  cpu_to_le32(1 << 22)
#define STA_FLG_AGG_MPDU_DENSITY_POS (23)
define cpu_to_le32<23

/* Use in mode field.  1: modify existing entry, 0: add new station entry */
#define  * For agg:  status of 1st frameone, up to frame_count.

/* key flags __le16*/
#define STA_KEY_FLG_ENCRYPT_MSK cpu_to_le16(0x0007)
#define STA_KEY_FLG_NO_ENC cpu_to_le16(0x0000)
#define STA_KEY_FLG_WEP  cpu_to_le16(0x0001)
#define STA_KEY_FLG_CCMP cpu_to_le16(0x0002)
#define STA_KEY_FLG_TKIP cpu_to_le16(0x0003)

#define STA_KEY_FLG_KEYID_POS 8
#define STA_KEY_FLG_INVALID  cpu_to_le16(0x0800)
/* wep key is either from global key (0) or from station info array (1) */
#define STA_KEY_FLG_MAP_KEY_MSK cpu_to_le16(0x0008)

/* wep key in STA: 5-bytes (0) or 13-bytes (1) */
#define STA_KEY_FLG_KEY_SIZE_MSK      java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#define STA_KEY_MULTICAST_MSK        cpu_to_le16(0x4000)
#define STA_KEY_MAX_NUM  8
#define }_packed
/* must not match WEP_INVALID_OFFSET */
#define IWLAGN_HW_KEY_DEFAULT 0xfe

/* Flags indicate whether to modify vs. don't change various station params */
#define STA_MODIFY_KEY_MASK  0x01
#define STA_MODIFY_TID_DISABLE_TX 0x02
#define  *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
#define STA_MODIFY_ADDBA_TID_MSK 0x08
#defineSTA_MODIFY_DELBA_TID_MSK
#define STA_MODIFY_SLEEP_TX_COUNT_MSK 0x20 _le16;

/* agn */
struct iwl_keyinfo {
 __le16 key_flags;
 u8 tkip_rx_tsc_byte2 /* TSC[2] for key mix ph1 detection */
 u8 reserved1sta_id
_ tkip_rx_ttak5;/
 u8 key_offset;
 u8 reserved2 u8; /* number of frames acked */
 u8 key[16 _le16;
 __le64 tx_secur_seq_cnt;
 __le64 hw_tkip_mic_rx_key;
 __le64
} __packed;

/**
 * struct sta_id_modify - station modify command
 * @addr: station's MAC address
 * @reserved1: reserved for alignment
 * @sta_id: index of station in uCode's station table
 * @modify_mask: STA_MODIFY_*, 1: modify, 0: don't change
 * @reserved2: reserved for alignment
 *
 * Driver selects unused table index when adding new station,
 * or the index to a pre-existing station entry when modifying that station.
 * Some indexes have special purposes (IWL_AP_ID, index 0, is for AP).
 *
 * modify_mask flags select which parameters to modify vs. leave alone.
 */

 sta_id_modify
 u8 addr[ETH_ALEN];
 __le16 reserved1;
 u8 sta_id
 u8 modify_mask;
 __le16 reserved2;
} __packed;

/*efine   16
 * REPLY_ADD_STA = 0x18 (command)
 *
 * The device contains an internal table of per-station information,
 * with info on security keys, aggregation parameters, and Tx rates for
 * initial Tx attempt and any retries (agn devices uses
 * REPLY_TX_LINK_QUALITY_CMD,
 *
 * REPLY_ADD_STA sets up the table entry for one station, either creating
 * a new entry, or modifying a pre-existing one.
 *
 * NOTE:  RXON command (without "associated" bit set) wipes the station table
 *        clean.  Moving into RF_KILL state does this also.  Driver must set up
 *        new station table before transmitting anything on the RXON channel
 *        (except active scans or active measurements; those commands carry
 *        their own txpower/rate setup data).
 *
 *        When getting started on a new channel, driver must set up the
 *        IWL_BROADCAST_ID entry (last entry in the table).  For a client
 *        station in a BSS, once an AP is selected, driver sets up the AP STA
 *        in the IWL_AP_ID entry (1st entry in the table).  BROADCAST and AP
 *        are all that are needed for a BSS client station.  If the device is
 *        used as AP, or in an IBSS network, driver must set up station table
 *        entries for all STAs in network, starting with index IWL_STA_ID.
 */


struct iwl_addsta_cmd {
 u8 mode;   mimo_delimiter
 u8 reserved[3];
 struct sta_id_modify sta;
 structiwl_keyinfokey
 __le32 station_flags;  /* STA_FLG_* */
_le32station_flags_msk /* STA_FLG_* */

 /* bit field to disable (1) or enable (0) Tx for Traffic ID (TID)
 * corresponding to bit (e.g. bit 5 controls TID 5).
 * Set modify_mask bit STA_MODIFY_TID_DISABLE_TX to use this field. */

 __le16 tid_disable_tx;
 __le16 legacy_reserved;

 /* TID for which to add block-ack support.
 * Set modify_mask bit STA_MODIFY_ADDBA_TID_MSK to use this field. */

 u8 add_immediate_ba_tid;

  * this table will set that up, by indicating the indexes in the
  * Set modify_mask bit STA_MODIFY_DELBA_TID_MSK to use this field. */
 u8 remove_immediate_ba_tid;

 /* Starting Sequence Number for added block-ack support.
 * Set modify_mask bit STA_MODIFY_ADDBA_TID_MSK to use this field. */

 __le16 add_immediate_ba_ssn;

 /*
 * Number of packets OK to transmit to station even though
 * it is asleep -- used to synchronise PS-poll and u-APSD
 * responses while ucode keeps track of STA sleep state.
 */

 __le16 _packed;

 __le16
} __packed;


#defineLINK_QUAL_AGG_TIME_LIMIT_MAX800java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
#define ADD_STA_NO_ROOM_IN_TABLE0x2
#define ADD_STA_NO_BLOCK_ACK_RESOURCE 0x4
#define ADD_STA_MODIFY_NON_EXIST_STA 0x8
/*
 * REPLY_ADD_STA = 0x18 (response)
 */

struct iwl_add_sta_resp {
 u8 status; /* ADD_STA_* */
} __packed;

#define REM_STA_SUCCESS_MSK              0x1
/*
 *  REPLY_REM_STA = 0x19 (response)
 */

struct iwl_rem_sta_resp {
 u8 status;
} __# LINK_QUAL_AGG_FRAME_LIMIT_MIN

/*
 *  REPLY_REM_STA = 0x19 (command)
 */

struct iwl_rem_sta_cmd  * struct iwl_link_qual_agg_params
 u8 num_sta;     /* number of removed stations */
 u8 reserved[3 
 u8 addr iwl_link_qual_agg_params
 u8 reserved2[2];
} __packed;


/* WiFi queues mask */
#define IWL_SCD_BK_MSK   BIT(0)
#define IWL_SCD_BE_MSK   BIT(1)
#define IWL_SCD_VI_MSK   BIT(2)
#define IWL_SCD_VO_MSK   BIT(3)
#define IWL_SCD_MGMT_MSK   * default set to 4000 (4 milliseconds) if not configured in .cfg

/* PAN queues mask */
#define IWL_PAN_SCD_BK_MSK  BIT(4)
#define IWL_PAN_SCD_BE_MSK  BIT(5)
#define IWL_PAN_SCD_VI_MSK  BIT(6)
#define IWL_PAN_SCD_VO_MSK  BIT(7)
#define IWL_PAN_SCD_MGMT_MSK  BIT(7)
#define IWL_PAN_SCD_MULTICAST_MSK BIT(8)

#define IWL_AGG_TX_QUEUE_MSK  0xffc00

#define IWL_DROP_ALL u8agg_dis_start_th

/*
 * REPLY_TXFIFO_FLUSH = 0x1e(command and response)
 *
 * When using full FIFO flush this command checks the scheduler HW block WR/RD
 * pointers to check if all the frames were transferred by DMA into the
 * relevant TX FIFO queue. Only when the DMA is finished and the queue is
 * empty the command can finish.
 * This command is used to flush the TXFIFO from transmit commands, it may
 * operate on single or multiple queues, the command queue can't be flushed by
 * this command. The command response is returned when all the queue flush
 * operations are done. Each TX command flushed return response with the FLUSH
 * status set in the TX response status. When FIFO flush operation is used,
 * the flush operation ends when both the scheduler DMA done and TXFIFO empty
 * are set.
 *
 * @queue_control: bit mask for which queues to flush
 * @flush_control: flush controls
 * 0: Dump single MSDU
 * 1: Dump multiple MSDU according to PS, INVALID STA, TTL, TID disable.
 * 2: Dump all FIFO
 */

struct iwl_txfifo_flush_cmd_v3 {
__ queue_control
 __le16 flush_control;
 __le16 reserved;
} __packed;

struct iwl_txfifo_flush_cmd_v2 {
 __le16 queue_control;
 __le16 flush_control;
} *

/*
 * REPLY_WEP_KEY = 0x20
 */

struct iwl_wep_key {
 u8 key_index;
 u8 key_offset;
 u8 reserved1[2];
 u8 key_size * of 16
 u8 reserved2[3];
 u8 key[16];
} __packed;

struct iwl_wep_cmd {
 u8 num_keys;
 u8 global_key_type;
 u8 flags;
 u8 reserved;
 struct  *
} __packed;

#define WEP_KEY_WEP_TYPE 1
#define WEP_KEYS_MAX 4
*   Use REPLY_ADD_STA.
#define WEP_KEY_LEN_64 5
#define WEP_KEY_LEN_128 13

/******************************************************************************
 * (4)
 * Rx Responses:
 *
 *****************************************************************************/


#define RX_RES_STATUS_NO_CRC32_ERROR * FILLING THE RATE TABLE
#define RX_RES_STATUS_NO_RXE_OVERFLOW cpu_to_le32(1 << 1)

#define RX_RES_PHY_FLAGS_BAND_24_MSK cpu_to_le16(1 << 0)
#define RX_RES_PHY_FLAGS_MOD_CCK_MSK  cpu_to_le16(1 << 1)
#define RX_RES_PHY_FLAGS_SHORT_PREAMBLE_MSK cpu_to_le16(1 << 2)
#define RX_RES_PHY_FLAGS_NARROW_BAND_MSK cpu_to_le16(1 << 3) * Link Quality command:
#define RX_RES_PHY_FLAGS_ANTENNA_MSK  0x70
#define RX_RES_PHY_FLAGS_ANTENNA_POS  4
#define RX_RES_PHY_FLAGS_AGG_MSK  cpu_to_le16(1 << 7)

#define RX_RES_STATUS_SEC_TYPE_MSK (0x7 << 8)
#define RX_RES_STATUS_SEC_TYPE_NONE *     b) Find next lower available rate using same mode (SISor MIMO),
#define RX_RES_STATUS_SEC_TYPE_WEP (0x1 << 8)
#define RX_RES_STATUS_SEC_TYPE_CCMP (0x2 *        legacy mode (no HT40 channel, no MIMO, no short guard interval).
#define RX_RES_STATUS_SEC_TYPE_TKIP (0x3 << 8)
#define RX_RES_STATUS_SEC_TYPE_ERR (0x7 << 8)

#define RX_RES_STATUS_STATION_FOUND (1<<6)
#define RX_RES_STATUS_NO_STATION_INFO_MISMATCH (1<<7)

#define RX_RES_STATUS_DECRYPT_TYPE_MSK (0x3 << 11)
#define RX_RES_STATUS_NOT_DECRYPT (0x0 << 11)
#define RX_RES_STATUS_DECRYPT_OK (0x3 << 11)
#define RX_RES_STATUS_BAD_ICV_MIC (0x1 << 11)
#define RX_RES_STATUS_BAD_KEY_TTAK (0 * 2)  If using legacy initial rate:

#define RX_MPDU_RES_STATUS_ICV_OK (0x20)
#define RX_MPDU_RES_STATUS_MIC_OK (0x40)
#define RX_MPDU_RES_STATUS_TTAK_OK (1 << 7)
#define RX_MPDU_RES_STATUS_DEC_DONE_MSK (0 *     c) When reducing rate, also switch antenna selection.


#define IWLAGN_RX_RES_PHY_CNT 8
#define IWLAGN_RX_RES_AGC_IDX     1
#define IWLAGN_RX_RES_RSSI_AB_IDX * ACCUMULATING HISTORY
#define IWLAGN_RX_RES_RSSI_C_IDX  3
#define IWLAGN_OFDM_AGC_MSK 0xfe00
#define IWLAGN_OFDM_AGC_BIT_POS 9
#define IWLAGN_OFDM_RSSI_INBAND_A_BITMSK 0x00ff
#define IWLAGN_OFDM_RSSI_ALLBAND_A_BITMSK 0xff00
#define IWLAGN_OFDM_RSSI_A_BIT_POS 0
#define IWLAGN_OFDM_RSSI_INBAND_B_BITMSK 0xff0000
#define IWLAGN_OFDM_RSSI_ALLBAND_B_BITMSK 0xff000000
#define IWLAGN_OFDM_RSSI_B_BIT_POS 16
#define IWLAGN_OFDM_RSSI_INBAND_C_BITMSK 0x00ff
#define IWLAGN_OFDM_RSSI_ALLBAND_C_BITMSK 0xff00
#define IWLAGN_OFDM_RSSI_C_BIT_POS 0

struct iwlagn_non_cfg_phy {
 __le32 non_cfg_phy[IWLAGN_RX_RES_PHY_CNT];  /* up to 8 phy entries */
} __packed;


/*
 * REPLY_RX = 0xc3 (response only, not a command)
 * Used only for legacy (non 11n) frames.
 */

struct iwl_rx_phy_res {
 u8 non_cfg_phy_cnt;     /* non configurable DSP phy data byte count */
 u8 cfg_phy_cnt;  /* configurable DSP phy data byte count */
 u8 stat_id;  /* configurable DSP phy data set ID */
 u8 reserved1;
 __le64 timestamp; /* TSF at on air rise */
 __le32 beacon_time_stamp; /* beacon at on-air rise */
 __le16 * which rate-specific history to update, and record only those attempts that
 __le16 channel;  /* channel number */
 u8 non_cfg_phy_buf[a* When using block-ack (aggregation), all frames are transmitted at the same
 __le32 rate_n_flags; /* RATE_MCS_* */
 __le16 byte_count; /* frame's byte-count */
 __le16 frame_timee* rate_n_flags field.  After receiving a block-ack, the driver can update
} __packed;

struct iwl_rx_mpdu_res_start {
 __le16 byte_count;
 * FINDING BEST STARTING RATE:
} __packed;


/******************************************************************************
 * (5)
 * Tx Commands & Responses:
 *
 * Driver must place each REPLY_TX command into one of the prioritized Tx
 * queues in host DRAM, shared between driver and device (see comments for
 * SCD registers and Tx/Rx Queues).  When the device's Tx scheduler and uCode
 * are preparing to transmit, the device pulls the Tx command over the PCI
 * bus via one of the device's Tx DMA channels, to fill an internal FIFO
 * from which data will be transmitted.
 *
 * uCode handles all timing and protocol related to control frames
 * (RTS/CTS/ACK), based on flags in the Tx command.  uCode and Tx scheduler
 * handle reception of block-acks; uCode updates the host driver via
 * REPLY_COMPRESSED_BA.
 *
 * uCode handles retrying Tx when an ACK is expected but not received.
 * This includes trying lower data rates than the one requested in the Tx
 * command, as set up by the REPLY_TX_LINK_QUALITY_CMD (agn).
 *
 * Driver sets up transmit power for various rates via REPLY_TX_PWR_TABLE_CMD.
 * This command must be executed after every RXON command, before Tx can occur.
 *****************************************************************************/


/* REPLY_TX Tx flags field */

/*
 * 1: Use RTS/CTS protocol or CTS-to-self if spec allows it
 * before this frame. if CTS-to-self required check
 * RXON_FLG_SELF_CTS_EN status.
 */

#define TX_CMD_FLG_PROT_REQUIRE_MSK cpu_to_le32(1 << 0)

/* 1: Expect ACK from receiving station
 * 0: Don't expect ACK (MAC header's duration field s/b 0)
 * Set this for unicast frames, but not broadcast/multicast. */

#define TX_CMD_FLG_ACK_MSK cpu_to_le32(1 << 3)

/* For agn devices:
 * 1: Use rate scale table (see REPLY_TX_LINK_QUALITY_CMD).
 *    Tx command's initial_rate_index indicates first rate to try;
 *    uCode walks through table for additional Tx attempts.
 * 0: Use Tx rate/MCS from Tx command's rate_n_flags field.
 *    This rate will be used for all Tx attempts; it will not be scaled. */

*     a)  success ratio is < 15% ||

/* 1: Expect immediate block-ack.
 * Set when Txing a block-ack request frame.  Also set TX_CMD_FLG_ACK_MSK. */

#define TX_CMD_FLG_IMM_BA_RSP_MASK  cpu_to_le32(1 << 6)

/* Tx antenna selection field; reserved (0) for agn devices. */
#define TX_CMD_FLG_ANT_SEL_MSK cpu_to_le32(0xf00)

/* 1: Ignore Bluetooth priority for this frame.
 * 0: Delay Tx until Bluetooth device is done (normal usage). */

#define TX_CMD_FLG_IGNORE_BT cpu_to_le32(1 << 12*

/* 1: uCode overrides sequence control field in MAC header.
 * 0: Driver provides sequence control field in MAC header.
 * Set this for management frames, non-QOS data frames, non-unicast frames,
 * and also in Tx command embedded in REPLY_SCAN_CMD for active scans. */

#define TX_CMD_FLG_SEQ_CTL_MSK cpu_to_le32(1 << 13)

/* 1: This frame is non-last MPDU; more fragments are coming.
 * 0: Last fragment, or not using fragmentation. */

#define TX_CMD_FLG_MORE_FRAG_MSK cpu_to_le32(1 << 14)

/* 1: uCode calculates and inserts Timestamp Function (TSF) in outgoing frame.
 * 0: No TSF required in outgoing frame.
 * Set this for transmitting beacons and probe responses. */

#define TX_CMD_FLG_TSF_MSK cpu_to_le32(1 << 16)

/* 1: Driver inserted 2 bytes pad after the MAC header, for (required) dword
 *    alignment of frame's payload data field.
 * 0: No pad
 * Set this for MAC headers with 26 or 30 bytes, i.e. those with QOS or ADDR4
 * field (but not both).  Driver must align frame data (i.e. data following
 * MAC header) to DWORD boundary. */

#define TX_CMD_FLG_MH_PAD_MSK cpu_to_le32(1 << 20)

/* accelerate aggregation support
 * 0 - no CCMP encryption; 1 - CCMP encryption */

#define TX_CMD_FLG_AGG_CCMP_MSK cpu_to_le32(1 << 22)

/* HCCA-AP - disable duration overwriting. */
#define TX_CMD_FLG_DUR_MSK cpu_to_le32(1 << 25)


/*
 * TX command security control
 */

#define TX_CMD_SEC_WEP   0x01
#define TX_CMD_SEC_CCM   0x02
#define TX_CMD_SEC_TKIP  0x03
#define TX_CMD_SEC_MSK  0x03
#define TX_CMD_SEC_SHIFT 6
#define TX_CMD_SEC_KEY128 0x08

/*
 * REPLY_TX = 0x1c (command)
 */


/*
 * Used for managing Tx retries when expecting block-acks.
 * Driver should set these fields to 0.
 */

struct iwl_dram_scratch {
 u8 try_cnt * by the success ratio (successful / attempted tx frames).  Frame size is
 u8 bt_kill_cnt;  /* Tx attempts blocked by Bluetooth device */
 __le16 reserved;
} __packed;

struct iwl_tx_cmd {
 /* New members MUST be added within the __struct_group() macro below. */
 __struct_group(iwl_tx_cmd_hdr, __hdr, __packed,
  /*
 * MPDU byte count:
 * MAC header (24/26/30/32 bytes) + 2 bytes pad if 26/30 header size,
 * + 8 byte IV for CCM or TKIP (not used for WEP)
 * + Data payload
 * + 8-byte MIC (not used for CCM/WEP)
 * NOTE:  Does not include Tx command bytes, post-MAC pad bytes,
 *        MIC (CCM) 8 bytes, ICV (WEP/TKIP/CKIP) 4 bytes, CRC 4 bytes.i
 * Range: 14-2342 bytes.
 */

  __le16 len;

  /*
 * MPDU or MSDU byte count for next frame.
 * Used for fragmentation and bursting, but not 11n aggregation.
 * Same as "len", but for next frame.  Set to 0 if not applicable.
 */

  __le16 next_frame_len;

  __le32 tx_flags; /* TX_CMD_FLG_* */  46  46   82  110  132  168  192  202  211

  /* uCode may modify this field of the Tx command (in host DRAM!).
 * Driver must also set dram_lsb_ptr and dram_msb_ptr in this cmd. */

  struct iwl_dram_scratch scratch;

 *     SISO 40MHz:  0    0    0    0   77  77  127  160  184  220  242  250  257
  __le32 rate_n_flags; /* RATE_MCS_* */

  /* Index of destination station in uCode's station table */
  u8 sta_id;

  /* Type of security encryption:  CCM or TKIP */
  u8 sec_ctl;  /* TX_CMD_SEC_* */

  /*
 * Index into rate table (see REPLY_TX_LINK_QUALITY_CMD) for initial
 * Tx attempt, if TX_CMD_FLG_STA_RATE_MSK is set.  Normally "0" for
 * data frames, this field may be used to selectively reduce initial
 * rate (via non-0 value) for special frames (e.g. management), while
 * still supporting rate scaling for all frames.
 */

  u8 initial_rate_index;
  u8 reserved;
  u8 key[1e comparing modes until all 3 possibilities have been tried.
  __ * If moving from legacy to HT, try all 3 possibilities from the new HT
  __le16 reserved2;
  union {
   __le32 life_time;
   __le32 attempt;
  } stop_time;

  /* Host DRAM physical address pointer to "scratch" in this command.
 * Must be dword aligned.  "0" in dram_lsb_ptr disables usage. */

  __le32 dram_lsb_ptr;
  u8 dram_msb_ptr;

  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  u8 data_retry_limit; /*byte 51 */
  u8 tid_tspec;
  union {
   __le16 pm_frame_timeout;
   __le16 attempt_duration;
  } timeout;

  /*
 * Duration of EDCA burst Tx Opportunity, in 32-usec units.
 * Set this if txop time is not specified by HCCA protocol (e.g. by AP).
 */

  __le16 driver_txop;

 );
 /*
 * MAC header goes here, followed by 2 bytes padding if MAC header
 * length is 26 or 30 bytes, followed by payload data
 */

 struct ieee80211_hdr hdr[];
} __packed;
static_assert(offsetof(struct iwl_tx_cmd, hdr) == sizeof(struct iwl_tx_cmd_hdr),
       "struct member likely outside of __struct_group struct {

/*
 * TX command response is sent after *agn* transmission attempts.
 *
 * both postpone and abort status are expected behavior from uCode. there is
 * no special operation required from driver; except for RFKILL_FLUSH,
 * which required tx flush host command to flush all the tx frames in queues
 */

enum {
 TX_STATUS_SUCCESS = 0x01,
 TX_STATUS_DIRECT_DONE = 0x02,
 /* postpone TX */
 TX_STATUS_POSTPONE_DELAY = 0x40,
 TX_STATUS_POSTPONE_FEW_BYTES = 0x41,
  }rs_tableLINK_QUAL_MAX_RETRY_NUM];
 TX_STATUS_POSTPONE_QUIET_PERIOD = 0x43,
 TX_STATUS_POSTPONE_CALC_TTAK 0x44,
 /* abort TX */
 TX_STATUS_FAIL_INTERNAL_CROSSED_RETRY x81
 TX_STATUS_FAIL_SHORT_LIMIT = 0x82,
 TX_STATUS_FAIL_LONG_LIMIT = 0x83,
 TX_STATUS_FAIL_FIFO_UNDERRUN = 0x84,
 TX_STATUS_FAIL_DRAIN_FLOW = 0x85,
 TX_STATUS_FAIL_RFKILL_FLUSH = 0x86,
 TX_STATUS_FAIL_LIFE_EXPIRE = 0x87,
 TX_STATUS_FAIL_DEST_PS = 0x88,
 TX_STATUS_FAIL_HOST_ABORTED = 0x89,
 TX_STATUS_FAIL_BT_RETRY = 0x8a,
 TX_STATUS_FAIL_STA_INVALID = 0x8b,
 TX_STATUS_FAIL_FRAG_DROPPED = 0x8c,
 TX_STATUS_FAIL_TID_DISABLE = 0x8d,
  *   bit 2 - 1: BT 2 wire support enabled
  *           0: disable
 TX_STATUS_FAIL_PASSIVE_NO_RX = 0x90,
 TX_STATUS_FAIL_NO_BEACON_ON_RADAR = 0x91,
};

#define TX_PACKET_MODE_REGULAR  0x0000
#define TX_PACKET_MODE_BURST_SEQ 0x0100
#define TX_PACKET_MODE_BURST_FIRST 0x0200

enum {
 TX_POWER_PA_NOT_ACTIVE 0,
};

enum {
 TX_STATUS_MSK = 0x000000ff,  /* bits 0:7 */
 TX_STATUS_DELAY_MSK = 0x00000040,
 TX_STATUS_ABORT_MSK 0,
 TX_PACKET_MODE_MSK = 0x0000ff00, /* bits 8:15 */
TX_FIFO_NUMBER_MSK 0, /* bits 16:18 */
 TX_RESERVED = 0x00780000definex1E
 = x7f800000/* bits 23:30 */
 TX_ABORT_REQUIRED_MSK = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
};

********java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
 * TX aggregation status
 *******************************#efineBT_ON_THRESHOLD_DEF java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29

enum {
 AGG_TX_STATE_TRANSMITTED = 0x00,
 AGG_TX_STATE_UNDERRUN_MSK = 0x01,
 AGG_TX_STATE_BT_PRIO_MSK = 0x02,
 AGG_TX_STATE_FEW_BYTES_MSK = 0x04,
 AGG_TX_STATE_ABORT_MSK = 0x08,
 AGG_TX_STATE_LAST_SENT_TTL_MSK = 0x10,
 AGG_TX_STATE_LAST_SENT_TRY_CNT_MSK = 0x20,
 AGG_TX_STATE_LAST_SENT_BT_KILL_MSK = 0x40,
 AGG_TX_STATE_SCD_QUERY_MSK = 0x80,
 AGG_TX_STATE_TEST_BAD_CRC32_MSK = 0java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
define 0
 AGG_TX_STATE_DUMP_TX_MSK = 0x200,
 AGG_TX_STATE_DELAY_TX_MSK = 0x400
};

#define AGG_TX_STATUS_MSK 0x00000fff /* bits 0:11 */
#define AGG_TX_TRY_MSK  0x0000f000 /* bits 12:15 */
#define AGG_TX_TRY_POS  12

#define AGG_TX_STATE_LAST_SENT_MSK  (AGG_TX_STATE_LAST_SENT_TTL_MSK | \
        AGG_TX_STATE_LAST_SENT_TRY_CNT_MSK \
         AGG_TX_STATE_LAST_SENT_BT_KILL_MSK)

/* # tx attempts for first frame in aggregation */
#define AGG_TX_STATE_TRY_CNT_POS 12
#define AGG_TX_STATE_TRY_CNT_MSK 0xf000

/* Command ID and sequence number of Tx command for this frame */
#define AGG_TX_STATE_SEQ_NUM_POS 16
#define AGG_TX_STATE_SEQ_NUM_MSK 0xffff0000

/* *
 * REPLY_TX = 0x1c (response)
 *
 * This response may be in one of two slightly different formats, indicated
 * by the frame_count field:
 *
 * 1)  No aggregation (frame_count == 1).  This reports Tx results for
 *     a single frame.  Multiple attempts, at various bit rates, may have
 *     been made for this frame.
 *
 * 2)  Aggregation (frame_count > 1).  This reports Tx results for
 *     2 or more frames that used block-acknowledge.  All frames were
 *     transmitted at same rate.  Rate scaling may have been used if first
 *     frame in this new agg block failed in previous agg block(s).
 *
 *     Note that, for aggregation, ACK (block-ack) status is not delivered here;
 *     block-ack has not been received by the time the agn device records
 *     this status.
 *     This status relates to reasons the tx might have been blocked or aborted
 *     within the sending station (this agn device), rather than whether it was
 *     received successfully by the destination station.
 */

 agg_tx_status
 __le16 status;
 __le16 sequence;
}_packed

/* refer to ra_tid */
#define IWLAGN_TX_RES_TID_POS 0
#define IWLAGN_TX_RES_TID_MSK 0x0f
#define IWLAGN_TX_RES_RA_POS 4
#define IWLAGN_TX_RES_RA_MSK 0xf0

struct iwlagn_tx_resp {
 u8 frame_count;  /* 1 no aggregation, >1 aggregation */
IWLAGN_BT_FLAG_COEX_MODE_3W 2
 u8 failure_rts;  /* # failures due to unsuccessful RTS */
 u8 failure_frame; /* # failures due to no ACK (unused for agg) */

/* For non-agg:  Rate at which frame was successful.
 * For agg:  Rate at which all frames were transmitted. */

 __le32java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 /* For non-agg:  RTS + CTS + frame tx attempts time + ACK.
 * For agg:  RTS + CTS + aggregation tx time + block-ack time. */

 __le16; /* uSecs */

 u8 pa_status;  /* RF power amplifier measurement (not used) */
 u8pa_integ_res_a3;
 u8 pa_integ_res_b[3];
 u8 pa_integ_res_C[3];

 __le32 tfd_info;
_le16seq_ctl
 __le16 byte_cnt;
u8;
 u8 ra_tid;  /* tid (0:3), sta_id (4:7) */
 __le16frame_ctrl
 /*
 * For non-agg:  frame status TX_STATUS_*
 * For agg:  status of 1st frame, AGG_TX_STATE_*; other frame status
 *           fields follow this one, up to frame_count.
 *           Bit fields:
 *           11- 0:  AGG_TX_STATE_* status code
 *           15-12:  Retry count for 1st frame in aggregation (retries
 *                   occur if tx failed for this frame when it was a
 *                   member of a previous aggregation block).  If rate
 *                   scaling is used, retry count indicates the rate
 *                   table entry used for all frames in the new agg.
 *           31-16:  Sequence # for this frame's Tx cmd (not SSN!)
 */

 struct agg_tx_status status; /* TX status (in aggregation -
 * status of 1st frame) */

} __packed;
/*
 * REPLY_COMPRESSED_BA = 0xc5 (response only, not a command)
 *
 * Reports Block-Acknowledge from recipient station
 */

struct iwl_compressed_ba_resp {
 __le32 sta_addr_lo32;
 __le16 sta_addr_hi16
# IWLAGN_BT_VALID_ENABLE_FLAGS((0)java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56

 /* Index of recipient (BA-sending) station in uCode's station table */
 u8 sta_id
 u8 tid;
_le16;
 __le64 bitmap;
 __le16 scd_flow;
 __le16 scd_ssn;
 u8 txed; /* number of frames sent */
 u8 txed_2_done; /* number of frames acked */
 __le16 reserved1;
}__packed

/* IWLAGN_BT_VALID_3W_LUT cpu_to_le16(BIT())
 * REPLY_TX_PWR_TABLE_CMD = 0x97 (command, has simple generic response)
 *
 */


/*RS_NEW_API: only TLC_RTS remains and moved to bit 0 */
define (1 < )

* prioritizedtx fifos *
#define  LINK_QUAL_AC_NUM AC_NUM  IWLAGN_BT_VALID_3W_TIMERS |\

/* # entries in rate scale table to support Tx retries */
#  LINK_QUAL_MAX_RETRY_NUM 1

/* Tx antenna selection values */
#define  LINK_QUAL_ANT_A_MSK (1 << 0)
#define  LINK_QUAL_ANT_B_MSK (1 << 1)
define   (LINK_QUAL_ANT_A_MSKLINK_QUAL_ANT_B_MSK


/*
 * struct iwl_link_qual_general_params
 *
 * Used in REPLY_TX_LINK_QUALITY_CMD
 */

structiwl_link_qual_general_params
 u8 flags  ledtime /* unused */

 /* No entries at or above this (driver chosen) index contain MIMO */
 u8_le32 kill_ack_mask

 /* Best single antenna to use for single stream (legacy, SISO). */
 single_stream_ant_msk/

 /* Best antennas to use for MIMO */_ bt4_reaction_time /* unused */
u8;  /* LINK_QUAL_ANT_* */

 /*
 * If driver needs to use different initial rates for different
 * EDCA QOS access categories (as implemented by tx fifos 0-3),
 * this table will set that up, by indicating the indexes in the
 * rs_table[LINK_QUAL_MAX_RETRY_NUM] rate table at which to start.
 * Otherwise, driver should set all entries to 0.
 *
 * Entry usage:
 * 0 = Background, 1 = Best Effort (normal), 2 = Video, 3 = Voice
 * TX FIFOs above 3 use same value (typically 0) as TX FIFO 3.
 */

 u8 start_rate_index[s iwl_basic_bt_cmd;
} __packed;

*
#define LINK_QUAL_AGG_TIME_LIMIT_MAX (8000)
#define LINK_QUAL_AGG_TIME_LIMIT_MIN (100)

#define LINK_QUAL_AGG_DISABLE_START_DEF (3)
#define LINK_QUAL_AGG_DISABLE_START_MAX (255)
#define LINK_QUAL_AGG_DISABLE_START_MIN (0)

#define LINK_QUAL_AGG_FRAME_LIMIT_DEF (63)
#define LINK_QUAL_AGG_FRAME_LIMIT_MAX (63)
#define LINK_QUAL_AGG_FRAME_LIMIT_MIN (0)

/*
 * struct iwl_link_qual_agg_params
 *
 * Used in REPLY_TX_LINK_QUALITY_CMD
 */

struct iwl_link_qual_agg_params iwl_basic_bt_cmdbasic;

 /*
 *Maximum number of uSec in aggregation.
 * default set to 4000 (4 milliseconds) if not configured in .cfg
 */

 __le16 agg_time_limit

 /*
 * Number of Tx retries allowed for a frame, before that frame will
 * no longer be considered for the start of an aggregation sequence
 * (scheduler will then try to tx it as single frame).
 * Driver should set this to 3.
 */

 u8 agg_dis_start_th;

 /*
 * Maximum number of frames in aggregation.
 * 0 = no limit (default).  1 = no aggregation.
 * Other values = max # frames in aggregation.
 */

  u8

 __le32 reserved;
} __packed;

/*
 * REPLY_TX_LINK_QUALITY_CMD = 0x4e (command, has simple generic response)
 *
 * For agn devices
 *
 * Each station in the agn device's internal station table has its own table
 * of 16
 * Tx rates and modulation modes (e.g. legacy/SISO/MIMO) for retrying Tx when
 * an ACK is not received.  This command replaces the entire table for
 * one station.
 *
 * NOTE:  Station must already be in agn device's station table.
 *   Use REPLY_ADD_STA.
 *
 * The rate scaling procedures described below work well.  Of course, other
 * procedures are possible, and may work better for particular environments.
 *
 *
 * FILLING THE RATE TABLE
 *
 * Given a particular initial rate and mode, as determined by the rate
 * scaling algorithm described below, the Linux driver uses the following
 * formula to fill the rs_table[LINK_QUAL_MAX_RETRY_NUM] rate table in the
 * Link Quality command:
 *
 *
 * 1)  If using High-throughput (HT) (SISO or MIMO) initial rate:
 *     a) Use this same initial rate for first 3 entries.
 *     b) Find next lower available rate using same mode (SISO or MIMO),
 *        use for next 3 entries.  If no lower rate available, switch to
 *        legacy mode (no HT40 channel, no MIMO, no short guard interval).
 *     c) If using MIMO, set command's mimo_delimiter to number of entries
 *        using MIMO (3 or 6).
 *     d) After trying 2 HT rates, switch to legacy mode (no HT40 channel,
 *        no MIMO, no short guard interval), at the next lower bit rate
 *        (e.g. if second HT bit rate was 54, try 48 legacy), and follow
 *        legacy procedure for remaining table entries.
 *
 * 2)  If using legacy initial rate:
 *     a) Use the initial rate for only one entry.
 *     b) For each following entry, reduce the rate to next lower available
 *        rate, until reaching the lowest available rate.
 *     c) When reducing rate, also switch antenna selection.
 *     d) Once lowest available rate is reached, repeat this rate until
 *        rate table is filled (16 entries), switching antenna each entry.
 *
 *
 * ACCUMULATING HISTORY
 *
 * The rate scaling algorithm for agn devices, as implemented in Linux driver,
 * uses two sets of frame Tx success history:  One for the current/active
 * modulation mode, and one for a speculative/search mode that is being
 * attempted. If the speculative mode turns out to be more effective (i.e.
 * actual transfer rate is better), then the driver continues to use the
 * speculative mode as the new current active mode.
 *
 * Each history set contains, separately for each possible rate, data for a
 * sliding window of the 62 most recent tx attempts at that rate.  The data
 * includes a shifting bitmap of success(1)/failure(0), and sums of successful
 * and attempted frames, from which the driver can additionally calculate a
 * success ratio (success / attempted) and number of failures
 * (attempted - success), and control the size of the window (attempted).
 * The driver uses the bit map to remove successes from the success sum, as
 * the oldest tx attempts fall out of the window.
 *
 * When the agn device makes multiple tx attempts for a given frame, each
 * attempt might be at a different rate, and have different modulation
 * characteristics (e.g. antenna, fat channel, short guard interval), as set
 * up in the rate scaling table in the Link Quality command.  The driver must
 * determine which rate table entry was used for each tx attempt, to determine
 * which rate-specific history to update, and record only those attempts that
 * match the modulation characteristics of the history set.
 *
 * When using block-ack (aggregation), all frames are transmitted at the same
 * rate, since there is no per-attempt acknowledgment from the destination
 * station.  The Tx response struct iwl_tx_resp indicates the Tx rate in
 * rate_n_flags field.  After receiving a block-ack, the driver can update
 * history for the entire block all at once.
 *
 *
 * FINDING BEST STARTING RATE:
 *
 * When working with a selected initial modulation mode (see below), the
 * driver attempts to find a best initial rate.  The initial rate is the
 * first entry in the Link Quality command's rate table.
 *
 * 1)  Calculate actual throughput (success ratio * expected throughput, see
 *     table below) for current initial rate.  Do this only if enough frames
 *     have been attempted to make the value meaningful:  at least 6 failed
 *     tx attempts, or at least 8 successes.  If not enough, don't try rate
 *     scaling yet.
 *
 * 2)  Find available rates adjacent to current initial rate.  Available means:
 *     a)  supported by hardware &&
 *     b)  supported by association &&
 *     c)  within any constraints selected by user
 *
 * 3)  Gather measured throughputs for adjacent rates.  These might not have
 *     enough history to calculate a throughput.  That's okay, we might try
 *     using one of them anyway!
 *
 * 4)  Try decreasing rate if, for current rate:
 *     a)  success ratio is < 15% ||
 *     b)  lower adjacent rate has better measured throughput ||
 *     c)  higher adjacent rate has worse throughput, and lower is unmeasured
 *
 *     As a sanity check, if decrease was determined above, leave rate
 *     unchanged if:
 *     a)  lower rate unavailable
 *     b)  success ratio at current rate > 85% (very good)
 *     c)  current measured throughput is better than expected throughput
 *         of lower rate (under perfect 100% tx conditions, see table below)
 *
 * 5)  Try increasing rate if, for current rate:
 *     a)  success ratio is < 15% ||
 *     b)  both adjacent rates' throughputs are unmeasured (try it!) ||
 *     b)  higher adjacent rate has better measured throughput ||
 *     c)  lower adjacent rate has worse throughput, and higher is unmeasured
 *
 *     As a sanity check, if increase was determined above, leave rate
 *     unchanged if:
 *     a)  success ratio at current rate < 70%.  This is not particularly
 *         good performance; higher rate is sure to have poorer success.
 *
 * 6)  Re-evaluate the rate after each tx frame.  If working with block-
 *     acknowledge, history and statistics may be calculated for the entire
 *     block (including prior history that fits within the history windows),
 *     before re-evaluation.
 *
 * FINDING BEST STARTING MODULATION MODE:
 *
 * After working with a modulation mode for a "while" (and doing rate scaling),
 * the driver searches for a new initial mode in an attempt to improve
 * throughput.  The "while" is measured by numbers of attempted frames:
 *
 * For legacy mode, search for new mode after:
 *   480 successful frames, or 160 failed frames
 * For high-throughput modes (SISO or MIMO), search for new mode after:
 *   4500 successful frames, or 400 failed frames
 *
 * Mode switch possibilities are (3 for each mode):
 *
 * For legacy:
 *   Change antenna, try SISO (if HT association), try MIMO (if HT association)
 * For SISO:
 *   Change antenna, try MIMO, try shortened guard interval (SGI)
 * For MIMO:
 *   Try SISO antenna A, SISO antenna B, try shortened guard interval (SGI)
 *
 * When trying a new mode, use the same bit rate as the old/current mode when
 * trying antenna switches and shortened guard interval.  When switching to
 * SISO from MIMO or legacy, or to MIMO from SISO or legacy, use a rate
 * for which the expected throughput (under perfect conditions) is about the
 * same or slightly better than the actual measured throughput delivered by
 * the old/current mode.
 *
 * Actual throughput can be estimated by multiplying the expected throughput
 * by the success ratio (successful / attempted tx frames).  Frame size is
 * not considered in this calculation; it assumes that frame size will average
 * out to be fairly consistent over several samples.  The following are
 * metric values for expected throughput assuming 100% success ratio.
 * Only G band has support for CCK rates:
 *
 *           RATE:  1    2    5   11    6   9   12   18   24   36   48   54   60
 *
 *              G:  7   13   35   58   40  57   72   98  121  154  177  186  186
 *              A:  0    0    0    0   40  57   72   98  121  154  177  186  186
 *     SISO 20MHz:  0    0    0    0   42  42   76  102  124  159  183  193  202
 * SGI SISO 20MHz:  0    0    0    0   46  46   82  110  132  168  192  202  211
 *     MIMO 20MHz:  0    0    0    0   74  74  123  155  179  214  236  244  251
 * SGI MIMO 20MHz:  0    0    0    0   81  81  131  164  188  222  243  251  257
 *     SISO 40MHz:  0    0    0    0   77  77  127  160  184  220  242  250  257
 * SGI SISO 40MHz:  0    0    0    0   83  83  135  169  193  229  250  257  264
 *     MIMO 40MHz:  0    0    0    0  123 123  182  214  235  264  279  285  289
 * SGI MIMO 40MHz:  0    0    0    0  131 131  191  222  242  270  284  289  293
 *
 * After the new mode has been tried for a short while (minimum of 6 failed
 * frames or 8 successful frames), compare success ratio and actual throughput
 * estimate of the new mode with the old.  If either is better with the new
 * mode, continue to use the new mode.
 *
 * Continue comparing modes until all 3 possibilities have been tried.
 * If moving from legacy to HT, try all 3 possibilities from the new HT
 * mode.  After trying all 3, a best mode is found.  Continue to use this mode
 * for the longer "while" described above (e.g. 480 successful frames for
 * legacy), and then repeat the search process.
 *
 */

struct iwl_link_quality_cmd {

 /* Index of destination/recipient station in uCode's station table */
 u8 sta_id;
 u8 reserved1;
 __le16 control;  /* not used */
 struct iwl_link_qual_general_params general_params;
 struct iwl_link_qual_agg_params agg_params;

 /*
 * Rate info; when using rate-scaling, Tx command's initial_rate_index
 * specifies 1st Tx rate attempted, via index into this table.
 * agn devices works its way through table when retrying Tx.
 */

 struct {
  __le32 rate_n_flags; /* RATE_MCS_*, IWL_RATE_* */
 } rs_table[LINK_QUAL_MAX_RETRY_NUM];
 __le32 reserved2;
} __packed;

/*
 * BT configuration enable flags:
 *   bit 0 - 1: BT channel announcement enabled
 *           0: disable
 *   bit 1 - 1: priority of BT device enabled
 *           0: disable
 *   bit 2 - 1: BT 2 wire support enabled
 *           0: disable
 */

#define BT_COEX_DISABLE (0x0)
#define BT_ENABLE_CHANNEL_ANNOUNCE BIT(0)
#define BT_ENABLE_PRIORITY    BIT(1)
#define BT_ENABLE_2_WIRE    BIT(2)

#define BT_COEX_DISABLE (0x0)
#define BT_COEX_ENABLE  (BT_ENABLE_CHANNEL_ANNOUNCE | BT_ENABLE_PRIORITY)

#define BT_LEAD_TIME_MIN (0x0)
#define BT_LEAD_TIME_DEF (0x1E)
#define BT_LEAD_TIME_MAX (0xFF)

#define BT_MAX_KILL_MIN (0x1)
#define BT_MAX_KILL_DEF (0x5)
#define BT_MAX_KILL_MAX (0xFF)

#define BT_DURATION_LIMIT_DEF 625
#define BT_DURATION_LIMIT_MAX 1250
#define BT_DURATION_LIMIT_MIN 625

#define BT_ON_THRESHOLD_DEF 4
#define BT_ON_THRESHOLD_MAX 1000
#define BT_ON_THRESHOLD_MIN 1

#define BT_FRAG_THRESHOLD_DEF 0
#define BT_FRAG_THRESHOLD_MAX 0
#define BT_FRAG_THRESHOLD_MIN 0

#define BT_AGG_THRESHOLD_DEF 1200
#define BT_AGG_THRESHOLD_MAX 8000
#define BT_AGG_THRESHOLD_MIN 400

/*
 * REPLY_BT_CONFIG = 0x9b (command, has simple generic response)
 *
 * agn devices support hardware handshake with Bluetooth device on
 * same platform.  Bluetooth device alerts wireless device when it will Tx;
 * wireless device can delay or kill its own Tx to accommodate.
 */

struct iwl_bt_cmd {
 u8 flags;
 u8 lead_time;
 u8 max_kill;
 u8 reserved;
 __le32 kill_ack_mask;
 __le32 kill_cts_mask;
} __packed;

#define IWLAGN_BT_FLAG_CHANNEL_INHIBITION BIT(0)

#define IWLAGN_BT_FLAG_COEX_MODE_MASK  (BIT(3)|BIT(4)|BIT(5))
#define IWLAGN_BT_FLAG_COEX_MODE_SHIFT  3
#define IWLAGN_BT_FLAG_COEX_MODE_DISABLED 0
#define IWLAGN_BT_FLAG_COEX_MODE_LEGACY_2W 1
#define IWLAGN_BT_FLAG_COEX_MODE_3W  2
#define IWLAGN_BT_FLAG_COEX_MODE_4W  3

#define IWLAGN_BT_FLAG_UCODE_DEFAULT  BIT(6)
/* Disable Sync PSPoll on SCO/eSCO */
#define IWLAGN_BT_FLAG_SYNC_2_BT_DISABLE BIT(7)

#define IWLAGN_BT_PSP_MIN_RSSI_THRESHOLD -75 /* dBm */
#define IWLAGN_BT_PSP_MAX_RSSI_THRESHOLD -65 /* dBm */

#define IWLAGN_BT_PRIO_BOOST_MAX 0xFF
#define IWLAGN_BT_PRIO_BOOST_MIN 0x00
#define IWLAGN_BT_PRIO_BOOST_DEFAULT 0xF0
#define IWLAGN_BT_PRIO_BOOST_DEFAULT32 0xF0F0F0F0

#define IWLAGN_BT_MAX_KILL_DEFAULT 5

#define IWLAGN_BT3_T7_DEFAULT  1

enum iwl_bt_kill_idx {
 IWL_BT_KILL_DEFAULT = 0,
 IWL_BT_KILL_OVERRIDE = 1,
 IWL_BT_KILL_REDUCE = 2,
};

#define IWLAGN_BT_KILL_ACK_MASK_DEFAULT cpu_to_le32(0xffff0000)
#define IWLAGN_BT_KILL_CTS_MASK_DEFAULT cpu_to_le32(0xffff0000)
#define IWLAGN_BT_KILL_ACK_CTS_MASK_SCO cpu_to_le32(0xffffffff)
#define IWLAGN_BT_KILL_ACK_CTS_MASK_REDUCE cpu_to_le32(0)

#define IWLAGN_BT3_PRIO_SAMPLE_DEFAULT 2

#define IWLAGN_BT3_T2_DEFAULT  0xc

#define IWLAGN_BT_VALID_ENABLE_FLAGS cpu_to_le16(BIT(0))
#define IWLAGN_BT_VALID_BOOST  cpu_to_le16(BIT(1))
#define IWLAGN_BT_VALID_MAX_KILL cpu_to_le16(BIT(2))
#define IWLAGN_BT_VALID_3W_TIMERS cpu_to_le16(BIT(3))
#define IWLAGN_BT_VALID_KILL_ACK_MASK cpu_to_le16(BIT(4))
#define IWLAGN_BT_VALID_KILL_CTS_MASK cpu_to_le16(BIT(5))
#define IWLAGN_BT_VALID_REDUCED_TX_PWR cpu_to_le16(BIT(6))
#define IWLAGN_BT_VALID_3W_LUT  cpu_to_le16(BIT(7))

#define IWLAGN_BT_ALL_VALID_MSK  (IWLAGN_BT_VALID_ENABLE_FLAGS | \
     IWLAGN_BT_VALID_BOOST | \
     IWLAGN_BT_VALID_MAX_KILL | \
     IWLAGN_BT_VALID_3W_TIMERS | \
     IWLAGN_BT_VALID_KILL_ACK_MASK | \
     IWLAGN_BT_VALID_KILL_CTS_MASK | \
     IWLAGN_BT_VALID_REDUCED_TX_PWR | \
     IWLAGN_BT_VALID_3W_LUT)

#define IWLAGN_BT_REDUCED_TX_PWR BIT(0)

#define IWLAGN_BT_DECISION_LUT_SIZE 12

struct iwl_basic_bt_cmd {
 u8 flags;
 u8 ledtime; /* unused */
 u8 max_kill;
 u8 bt3_timer_t7_value;
 __le32 kill_ack_mask;
 __le32 kill_cts_mask;
 u8 bt3_prio_sample_time;
 u8 bt3_timer_t2_value;
 __le16 bt4_reaction_time; /* unused */
 __le32 bt3_lookup_table[IWLAGN_BT_DECISION_LUT_SIZE];
 /*
 * bit 0: use reduced tx power for control frame
 * bit 1 - 7: reserved
 */

 u8 reduce_txpower;
 u8 reserved;
 __le16 valid;
};

struct iwl_bt_cmd_v1 {
 struct iwl_basic_bt_cmd basic;
 u8 prio_boost;
 /*
 * set IWLAGN_BT_VALID_BOOST to "1" in "valid" bitmask
 * if configure the following patterns
 */

 u8 tx_prio_boost; /* SW boost of WiFi tx priority */
 __le16 rx_prio_boost; /* SW boost of WiFi rx priority */
};

struct iwl_bt_cmd_v2 {
 struct iwl_basic_bt_cmd basic;
 __le32 prio_boost;
 /*
 * set IWLAGN_BT_VALID_BOOST to "1" in "valid" bitmask
 * if configure the following patterns
 */

 u8 reserved;
 u8 tx_prio_boost; /* SW boost of WiFi tx priority */
 __le16 rx_prio_boost; /* SW boost of WiFi rx priority */
};

#define IWLAGN_BT_SCO_ACTIVE cpu_to_le32(BIT(0))

struct iwlagn_bt_sco_cmd {
 __le32 flags;
};

/******************************************************************************
 * (6)
 * Spectrum Management (802.11h) Commands, Responses, Notifications:
 *
 *****************************************************************************/


/*
 * Spectrum Management
 */

#define MEASUREMENT_FILTER_FLAG (RXON_FILTER_PROMISC_MSK         | \
     RXON_FILTER_CTL2HOST_MSK        | \
     RXON_FILTER_ACCEPT_GRP_MSK      | \
     RXON_FILTER_DIS_DECRYPT_MSK     | \
     RXON_FILTER_DIS_GRP_DECRYPT_MSK | \
     RXON_FILTER_ASSOC_MSK           | \
     RXON_FILTER_BCON_AWARE_MSK)

struct iwl_measure_channel {
 __le32 duration; /* measurement duration in extended beacon
 * format */

 u8 channel;  /* channel to measure */
 u8 type;  /* see enum iwl_measure_type */
 __le16 reserved;
} __packed;

/*
 * REPLY_SPECTRUM_MEASUREMENT_CMD = 0x74 (command)
 */

struct iwl_spectrum_cmd {
 __le16 len;  /* number of bytes starting from token */
 u8 token;  /* token id */
 u8 id;   /* measurement id -- 0 or 1 */
 u8 origin;  /* 0 = TGh, 1 = other, 2 = TGk */
 u8 periodic;  /* 1 = periodic */
 __le16 path_loss_timeout;
--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5
C=88 H=87 G=87

¤ Dauer der Verarbeitung: 0.20 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.