aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-4965-commands.h
diff options
context:
space:
mode:
authorBen Cahill <ben.m.cahill@intel.com>2007-11-28 22:10:11 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:05:34 -0500
commit529699815b79f15a6644786dc4d6e9dd5153a447 (patch)
tree434b6493483bc5cb8075cc8c1529e59b369a8ea8 /drivers/net/wireless/iwlwifi/iwl-4965-commands.h
parent2054a00bb83409345d14a944e25c15e6ea317651 (diff)
iwlwifi: add comments to Tx commands
Add comments to Tx commands Clean up unused definitions in iwl-3945-commands.h Signed-off-by: Ben Cahill <ben.m.cahill@intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-4965-commands.h')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965-commands.h201
1 files changed, 175 insertions, 26 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-commands.h b/drivers/net/wireless/iwlwifi/iwl-4965-commands.h
index 44addea5062b..cbe91dbe760c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965-commands.h
+++ b/drivers/net/wireless/iwlwifi/iwl-4965-commands.h
@@ -937,8 +937,8 @@ struct iwl4965_rx_phy_res {
937 __le16 channel; /* channel number */ 937 __le16 channel; /* channel number */
938 __le16 non_cfg_phy[RX_RES_PHY_CNT]; /* upto 14 phy entries */ 938 __le16 non_cfg_phy[RX_RES_PHY_CNT]; /* upto 14 phy entries */
939 __le32 reserved2; 939 __le32 reserved2;
940 __le32 rate_n_flags; 940 __le32 rate_n_flags; /* RATE_MCS_* */
941 __le16 byte_count; /* frame's byte-count */ 941 __le16 byte_count; /* frame's byte-count */
942 __le16 reserved3; 942 __le16 reserved3;
943} __attribute__ ((packed)); 943} __attribute__ ((packed));
944 944
@@ -952,41 +952,96 @@ struct iwl4965_rx_mpdu_res_start {
952 * (5) 952 * (5)
953 * Tx Commands & Responses: 953 * Tx Commands & Responses:
954 * 954 *
955 * Driver must place each REPLY_TX command into one of the prioritized Tx
956 * queues in host DRAM, shared between driver and device (see comments for
957 * SCD registers and Tx/Rx Queues). When the device's Tx scheduler and uCode
958 * are preparing to transmit, the device pulls the Tx command over the PCI
959 * bus via one of the device's Tx DMA channels, to fill an internal FIFO
960 * from which data will be transmitted.
961 *
962 * uCode handles all timing and protocol related to control frames
963 * (RTS/CTS/ACK), based on flags in the Tx command. uCode and Tx scheduler
964 * handle reception of block-acks; uCode updates the host driver via
965 * REPLY_COMPRESSED_BA (4965).
966 *
967 * uCode handles retrying Tx when an ACK is expected but not received.
968 * This includes trying lower data rates than the one requested in the Tx
969 * command, as set up by the REPLY_RATE_SCALE (for 3945) or
970 * REPLY_TX_LINK_QUALITY_CMD (4965).
971 *
972 * Driver sets up transmit power for various rates via REPLY_TX_PWR_TABLE_CMD.
973 * This command must be executed after every RXON command, before Tx can occur.
955 *****************************************************************************/ 974 *****************************************************************************/
956 975
957/* Tx flags */ 976/* REPLY_TX Tx flags field */
977
978/* 1: Use Request-To-Send protocol before this frame.
979 * Mutually exclusive vs. TX_CMD_FLG_CTS_MSK. */
958#define TX_CMD_FLG_RTS_MSK __constant_cpu_to_le32(1 << 1) 980#define TX_CMD_FLG_RTS_MSK __constant_cpu_to_le32(1 << 1)
981
982/* 1: Transmit Clear-To-Send to self before this frame.
983 * Driver should set this for AUTH/DEAUTH/ASSOC-REQ/REASSOC mgmnt frames.
984 * Mutually exclusive vs. TX_CMD_FLG_RTS_MSK. */
959#define TX_CMD_FLG_CTS_MSK __constant_cpu_to_le32(1 << 2) 985#define TX_CMD_FLG_CTS_MSK __constant_cpu_to_le32(1 << 2)
986
987/* 1: Expect ACK from receiving station
988 * 0: Don't expect ACK (MAC header's duration field s/b 0)
989 * Set this for unicast frames, but not broadcast/multicast. */
960#define TX_CMD_FLG_ACK_MSK __constant_cpu_to_le32(1 << 3) 990#define TX_CMD_FLG_ACK_MSK __constant_cpu_to_le32(1 << 3)
991
992/* For 4965:
993 * 1: Use rate scale table (see REPLY_TX_LINK_QUALITY_CMD).
994 * Tx command's initial_rate_index indicates first rate to try;
995 * uCode walks through table for additional Tx attempts.
996 * 0: Use Tx rate/MCS from Tx command's rate_n_flags field.
997 * This rate will be used for all Tx attempts; it will not be scaled. */
961#define TX_CMD_FLG_STA_RATE_MSK __constant_cpu_to_le32(1 << 4) 998#define TX_CMD_FLG_STA_RATE_MSK __constant_cpu_to_le32(1 << 4)
999
1000/* 1: Expect immediate block-ack.
1001 * Set when Txing a block-ack request frame. Also set TX_CMD_FLG_ACK_MSK. */
962#define TX_CMD_FLG_IMM_BA_RSP_MASK __constant_cpu_to_le32(1 << 6) 1002#define TX_CMD_FLG_IMM_BA_RSP_MASK __constant_cpu_to_le32(1 << 6)
1003
1004/* 1: Frame requires full Tx-Op protection.
1005 * Set this if either RTS or CTS Tx Flag gets set. */
963#define TX_CMD_FLG_FULL_TXOP_PROT_MSK __constant_cpu_to_le32(1 << 7) 1006#define TX_CMD_FLG_FULL_TXOP_PROT_MSK __constant_cpu_to_le32(1 << 7)
1007
1008/* Tx antenna selection field; used only for 3945, reserved (0) for 4965.
1009 * Set field to "0" to allow 3945 uCode to select antenna (normal usage). */
964#define TX_CMD_FLG_ANT_SEL_MSK __constant_cpu_to_le32(0xf00) 1010#define TX_CMD_FLG_ANT_SEL_MSK __constant_cpu_to_le32(0xf00)
965#define TX_CMD_FLG_ANT_A_MSK __constant_cpu_to_le32(1 << 8) 1011#define TX_CMD_FLG_ANT_A_MSK __constant_cpu_to_le32(1 << 8)
966#define TX_CMD_FLG_ANT_B_MSK __constant_cpu_to_le32(1 << 9) 1012#define TX_CMD_FLG_ANT_B_MSK __constant_cpu_to_le32(1 << 9)
967 1013
968/* ucode ignores BT priority for this frame */ 1014/* 1: Ignore Bluetooth priority for this frame.
1015 * 0: Delay Tx until Bluetooth device is done (normal usage). */
969#define TX_CMD_FLG_BT_DIS_MSK __constant_cpu_to_le32(1 << 12) 1016#define TX_CMD_FLG_BT_DIS_MSK __constant_cpu_to_le32(1 << 12)
970 1017
971/* ucode overrides sequence control */ 1018/* 1: uCode overrides sequence control field in MAC header.
1019 * 0: Driver provides sequence control field in MAC header.
1020 * Set this for management frames, non-QOS data frames, non-unicast frames,
1021 * and also in Tx command embedded in REPLY_SCAN_CMD for active scans. */
972#define TX_CMD_FLG_SEQ_CTL_MSK __constant_cpu_to_le32(1 << 13) 1022#define TX_CMD_FLG_SEQ_CTL_MSK __constant_cpu_to_le32(1 << 13)
973 1023
974/* signal that this frame is non-last MPDU */ 1024/* 1: This frame is non-last MPDU; more fragments are coming.
1025 * 0: Last fragment, or not using fragmentation. */
975#define TX_CMD_FLG_MORE_FRAG_MSK __constant_cpu_to_le32(1 << 14) 1026#define TX_CMD_FLG_MORE_FRAG_MSK __constant_cpu_to_le32(1 << 14)
976 1027
977/* calculate TSF in outgoing frame */ 1028/* 1: uCode calculates and inserts Timestamp Function (TSF) in outgoing frame.
1029 * 0: No TSF required in outgoing frame.
1030 * Set this for transmitting beacons and probe responses. */
978#define TX_CMD_FLG_TSF_MSK __constant_cpu_to_le32(1 << 16) 1031#define TX_CMD_FLG_TSF_MSK __constant_cpu_to_le32(1 << 16)
979 1032
980/* activate TX calibration. */ 1033/* 1: Driver inserted 2 bytes pad after the MAC header, for (required) dword
981#define TX_CMD_FLG_CALIB_MSK __constant_cpu_to_le32(1 << 17) 1034 * alignment of frame's payload data field.
982 1035 * 0: No pad
983/* signals that 2 bytes pad was inserted 1036 * Set this for MAC headers with 26 or 30 bytes, i.e. those with QOS or ADDR4
984 after the MAC header */ 1037 * field (but not both). Driver must align frame data (i.e. data following
1038 * MAC header) to DWORD boundary. */
985#define TX_CMD_FLG_MH_PAD_MSK __constant_cpu_to_le32(1 << 20) 1039#define TX_CMD_FLG_MH_PAD_MSK __constant_cpu_to_le32(1 << 20)
986 1040
987/* HCCA-AP - disable duration overwriting. */ 1041/* HCCA-AP - disable duration overwriting. */
988#define TX_CMD_FLG_DUR_MSK __constant_cpu_to_le32(1 << 25) 1042#define TX_CMD_FLG_DUR_MSK __constant_cpu_to_le32(1 << 25)
989 1043
1044
990/* 1045/*
991 * TX command security control 1046 * TX command security control
992 */ 1047 */
@@ -998,12 +1053,13 @@ struct iwl4965_rx_mpdu_res_start {
998#define TX_CMD_SEC_KEY128 0x08 1053#define TX_CMD_SEC_KEY128 0x08
999 1054
1000/* 1055/*
1001 * TX command Frame life time 1056 * 4965 uCode updates these Tx attempt count values in host DRAM.
1057 * Used for managing Tx retries when expecting block-acks.
1058 * Driver should set these fields to 0.
1002 */ 1059 */
1003
1004struct iwl4965_dram_scratch { 1060struct iwl4965_dram_scratch {
1005 u8 try_cnt; 1061 u8 try_cnt; /* Tx attempts */
1006 u8 bt_kill_cnt; 1062 u8 bt_kill_cnt; /* Tx attempts blocked by Bluetooth device */
1007 __le16 reserved; 1063 __le16 reserved;
1008} __attribute__ ((packed)); 1064} __attribute__ ((packed));
1009 1065
@@ -1011,13 +1067,47 @@ struct iwl4965_dram_scratch {
1011 * REPLY_TX = 0x1c (command) 1067 * REPLY_TX = 0x1c (command)
1012 */ 1068 */
1013struct iwl4965_tx_cmd { 1069struct iwl4965_tx_cmd {
1070 /*
1071 * MPDU byte count:
1072 * MAC header (24/26/30/32 bytes) + 2 bytes pad if 26/30 header size,
1073 * + 8 byte IV for CCM or TKIP (not used for WEP)
1074 * + Data payload
1075 * + 8-byte MIC (not used for CCM/WEP)
1076 * NOTE: Does not include Tx command bytes, post-MAC pad bytes,
1077 * MIC (CCM) 8 bytes, ICV (WEP/TKIP/CKIP) 4 bytes, CRC 4 bytes.i
1078 * Range: 14-2342 bytes.
1079 */
1014 __le16 len; 1080 __le16 len;
1081
1082 /*
1083 * MPDU or MSDU byte count for next frame.
1084 * Used for fragmentation and bursting, but not 11n aggregation.
1085 * Same as "len", but for next frame. Set to 0 if not applicable.
1086 */
1015 __le16 next_frame_len; 1087 __le16 next_frame_len;
1016 __le32 tx_flags; 1088
1089 __le32 tx_flags; /* TX_CMD_FLG_* */
1090
1091 /* 4965's uCode may modify this field of the Tx command (in host DRAM!).
1092 * Driver must also set dram_lsb_ptr and dram_msb_ptr in this cmd. */
1017 struct iwl4965_dram_scratch scratch; 1093 struct iwl4965_dram_scratch scratch;
1018 __le32 rate_n_flags; 1094
1095 /* Rate for *all* Tx attempts, if TX_CMD_FLG_STA_RATE_MSK is cleared. */
1096 __le32 rate_n_flags; /* RATE_MCS_* */
1097
1098 /* Index of destination station in uCode's station table */
1019 u8 sta_id; 1099 u8 sta_id;
1020 u8 sec_ctl; 1100
1101 /* Type of security encryption: CCM or TKIP */
1102 u8 sec_ctl; /* TX_CMD_SEC_* */
1103
1104 /*
1105 * Index into rate table (see REPLY_TX_LINK_QUALITY_CMD) for initial
1106 * Tx attempt, if TX_CMD_FLG_STA_RATE_MSK is set. Normally "0" for
1107 * data frames, this field may be used to selectively reduce initial
1108 * rate (via non-0 value) for special frames (e.g. management), while
1109 * still supporting rate scaling for all frames.
1110 */
1021 u8 initial_rate_index; 1111 u8 initial_rate_index;
1022 u8 reserved; 1112 u8 reserved;
1023 u8 key[16]; 1113 u8 key[16];
@@ -1027,8 +1117,12 @@ struct iwl4965_tx_cmd {
1027 __le32 life_time; 1117 __le32 life_time;
1028 __le32 attempt; 1118 __le32 attempt;
1029 } stop_time; 1119 } stop_time;
1120
1121 /* Host DRAM physical address pointer to "scratch" in this command.
1122 * Must be dword aligned. "0" in dram_lsb_ptr disables usage. */
1030 __le32 dram_lsb_ptr; 1123 __le32 dram_lsb_ptr;
1031 u8 dram_msb_ptr; 1124 u8 dram_msb_ptr;
1125
1032 u8 rts_retry_limit; /*byte 50 */ 1126 u8 rts_retry_limit; /*byte 50 */
1033 u8 data_retry_limit; /*byte 51 */ 1127 u8 data_retry_limit; /*byte 51 */
1034 u8 tid_tspec; 1128 u8 tid_tspec;
@@ -1036,7 +1130,17 @@ struct iwl4965_tx_cmd {
1036 __le16 pm_frame_timeout; 1130 __le16 pm_frame_timeout;
1037 __le16 attempt_duration; 1131 __le16 attempt_duration;
1038 } timeout; 1132 } timeout;
1133
1134 /*
1135 * Duration of EDCA burst Tx Opportunity, in 32-usec units.
1136 * Set this if txop time is not specified by HCCA protocol (e.g. by AP).
1137 */
1039 __le16 driver_txop; 1138 __le16 driver_txop;
1139
1140 /*
1141 * MAC header goes here, followed by 2 bytes padding if MAC header
1142 * length is 26 or 30 bytes, followed by payload data
1143 */
1040 u8 payload[0]; 1144 u8 payload[0];
1041 struct ieee80211_hdr hdr[0]; 1145 struct ieee80211_hdr hdr[0];
1042} __attribute__ ((packed)); 1146} __attribute__ ((packed));
@@ -1109,7 +1213,7 @@ enum {
1109}; 1213};
1110 1214
1111/* ******************************* 1215/* *******************************
1112 * TX aggregation state 1216 * TX aggregation status
1113 ******************************* */ 1217 ******************************* */
1114 1218
1115enum { 1219enum {
@@ -1133,35 +1237,80 @@ enum {
1133 AGG_TX_STATE_LAST_SENT_TRY_CNT_MSK | \ 1237 AGG_TX_STATE_LAST_SENT_TRY_CNT_MSK | \
1134 AGG_TX_STATE_LAST_SENT_BT_KILL_MSK) 1238 AGG_TX_STATE_LAST_SENT_BT_KILL_MSK)
1135 1239
1240/* # tx attempts for first frame in aggregation */
1136#define AGG_TX_STATE_TRY_CNT_POS 12 1241#define AGG_TX_STATE_TRY_CNT_POS 12
1137#define AGG_TX_STATE_TRY_CNT_MSK 0xf000 1242#define AGG_TX_STATE_TRY_CNT_MSK 0xf000
1138 1243
1244/* Command ID and sequence number of Tx command for this frame */
1139#define AGG_TX_STATE_SEQ_NUM_POS 16 1245#define AGG_TX_STATE_SEQ_NUM_POS 16
1140#define AGG_TX_STATE_SEQ_NUM_MSK 0xffff0000 1246#define AGG_TX_STATE_SEQ_NUM_MSK 0xffff0000
1141 1247
1142/* 1248/*
1143 * REPLY_TX = 0x1c (response) 1249 * REPLY_TX = 0x1c (response)
1250 *
1251 * This response may be in one of two slightly different formats, indicated
1252 * by the frame_count field:
1253 *
1254 * 1) No aggregation (frame_count == 1). This reports Tx results for
1255 * a single frame. Multiple attempts, at various bit rates, may have
1256 * been made for this frame.
1257 *
1258 * 2) Aggregation (frame_count > 1). This reports Tx results for
1259 * 2 or more frames that used block-acknowledge. All frames were
1260 * transmitted at same rate. Rate scaling may have been used if first
1261 * frame in this new agg block failed in previous agg block(s).
1262 *
1263 * Note that, for aggregation, ACK (block-ack) status is not delivered here;
1264 * block-ack has not been received by the time the 4965 records this status.
1265 * This status relates to reasons the tx might have been blocked or aborted
1266 * within the sending station (this 4965), rather than whether it was
1267 * received successfully by the destination station.
1144 */ 1268 */
1145struct iwl4965_tx_resp { 1269struct iwl4965_tx_resp {
1146 u8 frame_count; /* 1 no aggregation, >1 aggregation */ 1270 u8 frame_count; /* 1 no aggregation, >1 aggregation */
1147 u8 bt_kill_count; 1271 u8 bt_kill_count; /* # blocked by bluetooth (unused for agg) */
1148 u8 failure_rts; 1272 u8 failure_rts; /* # failures due to unsuccessful RTS */
1149 u8 failure_frame; 1273 u8 failure_frame; /* # failures due to no ACK (unused for agg) */
1150 __le32 rate_n_flags; 1274
1151 __le16 wireless_media_time; 1275 /* For non-agg: Rate at which frame was successful.
1276 * For agg: Rate at which all frames were transmitted. */
1277 __le32 rate_n_flags; /* RATE_MCS_* */
1278
1279 /* For non-agg: RTS + CTS + frame tx attempts time + ACK.
1280 * For agg: RTS + CTS + aggregation tx time + block-ack time. */
1281 __le16 wireless_media_time; /* uSecs */
1282
1152 __le16 reserved; 1283 __le16 reserved;
1153 __le32 pa_power1; 1284 __le32 pa_power1; /* RF power amplifier measurement (not used) */
1154 __le32 pa_power2; 1285 __le32 pa_power2;
1286
1287 /*
1288 * For non-agg: frame status TX_STATUS_*
1289 * For agg: status of 1st frame, AGG_TX_STATE_*; other frame status
1290 * fields follow this one, up to frame_count.
1291 * Bit fields:
1292 * 11- 0: AGG_TX_STATE_* status code
1293 * 15-12: Retry count for 1st frame in aggregation (retries
1294 * occur if tx failed for this frame when it was a
1295 * member of a previous aggregation block). If rate
1296 * scaling is used, retry count indicates the rate
1297 * table entry used for all frames in the new agg.
1298 * 31-16: Sequence # for this frame's Tx cmd (not SSN!)
1299 */
1155 __le32 status; /* TX status (for aggregation status of 1st frame) */ 1300 __le32 status; /* TX status (for aggregation status of 1st frame) */
1156} __attribute__ ((packed)); 1301} __attribute__ ((packed));
1157 1302
1158/* 1303/*
1159 * REPLY_COMPRESSED_BA = 0xc5 (response only, not a command) 1304 * REPLY_COMPRESSED_BA = 0xc5 (response only, not a command)
1305 *
1306 * Reports Block-Acknowledge from recipient station
1160 */ 1307 */
1161struct iwl4965_compressed_ba_resp { 1308struct iwl4965_compressed_ba_resp {
1162 __le32 sta_addr_lo32; 1309 __le32 sta_addr_lo32;
1163 __le16 sta_addr_hi16; 1310 __le16 sta_addr_hi16;
1164 __le16 reserved; 1311 __le16 reserved;
1312
1313 /* Index of recipient (BA-sending) station in uCode's station table */
1165 u8 sta_id; 1314 u8 sta_id;
1166 u8 tid; 1315 u8 tid;
1167 __le16 ba_seq_ctl; 1316 __le16 ba_seq_ctl;