1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. 4 * All rights reserved. 5 * 6 * File: rxtx.h 7 * 8 * Purpose: 9 * 10 * Author: Jerry Chen 11 * 12 * Date: Jun. 27, 2002 13 * 14 */ 15 16#ifndef __RXTX_H__ 17#define __RXTX_H__ 18 19#include "device.h" 20#include "wcmd.h" 21#include "baseband.h" 22 23#define DEFAULT_MGN_LIFETIME_RES_64us 125 /* 64us */ 24#define DEFAULT_MSDU_LIFETIME_RES_64us 8000 25 26/* MIC HDR data header */ 27struct vnt_mic_hdr { 28 u8 id; 29 u8 tx_priority; 30 u8 mic_addr2[6]; 31 u8 ccmp_pn[IEEE80211_CCMP_PN_LEN]; 32 __be16 payload_len; 33 __be16 hlen; 34 __le16 frame_control; 35 u8 addr1[6]; 36 u8 addr2[6]; 37 u8 addr3[6]; 38 __le16 seq_ctrl; 39 u8 addr4[6]; 40 u16 packing; /* packing to 48 bytes */ 41} __packed; 42 43/* RsvTime buffer header */ 44struct vnt_rrv_time_rts { 45 __le16 rts_rrv_time_ba; 46 __le16 rts_rrv_time_aa; 47 __le16 rts_rrv_time_bb; 48 u16 wReserved; 49 __le16 rrv_time_b; 50 __le16 rrv_time_a; 51} __packed; 52 53struct vnt_rrv_time_cts { 54 __le16 cts_rrv_time_ba; 55 u16 wReserved; 56 __le16 rrv_time_b; 57 __le16 rrv_time_a; 58} __packed; 59 60struct vnt_rrv_time_ab { 61 __le16 rts_rrv_time; 62 __le16 rrv_time; 63} __packed; 64 65/* TX data header */ 66struct vnt_tx_datahead_g { 67 struct vnt_phy_field b; 68 struct vnt_phy_field a; 69 __le16 duration_b; 70 __le16 duration_a; 71 __le16 time_stamp_off_b; 72 __le16 time_stamp_off_a; 73 struct ieee80211_hdr hdr; 74} __packed; 75 76struct vnt_tx_datahead_g_fb { 77 struct vnt_phy_field b; 78 struct vnt_phy_field a; 79 __le16 duration_b; 80 __le16 duration_a; 81 __le16 duration_a_f0; 82 __le16 duration_a_f1; 83 __le16 time_stamp_off_b; 84 __le16 time_stamp_off_a; 85 struct ieee80211_hdr hdr; 86} __packed; 87 88struct vnt_tx_datahead_ab { 89 struct vnt_phy_field ab; 90 __le16 duration; 91 __le16 time_stamp_off; 92 struct ieee80211_hdr hdr; 93} __packed; 94 95struct vnt_tx_datahead_a_fb { 96 struct vnt_phy_field a; 97 __le16 duration; 98 __le16 time_stamp_off; 99 __le16 duration_f0; 100 __le16 duration_f1; 101 struct ieee80211_hdr hdr; 102} __packed; 103 104/* RTS buffer header */ 105struct vnt_rts_g { 106 struct vnt_phy_field b; 107 struct vnt_phy_field a; 108 __le16 duration_ba; 109 __le16 duration_aa; 110 __le16 duration_bb; 111 u16 wReserved; 112 struct ieee80211_rts data; 113 struct vnt_tx_datahead_g data_head; 114} __packed; 115 116struct vnt_rts_g_fb { 117 struct vnt_phy_field b; 118 struct vnt_phy_field a; 119 __le16 duration_ba; 120 __le16 duration_aa; 121 __le16 duration_bb; 122 u16 wReserved; 123 __le16 rts_duration_ba_f0; 124 __le16 rts_duration_aa_f0; 125 __le16 rts_duration_ba_f1; 126 __le16 rts_duration_aa_f1; 127 struct ieee80211_rts data; 128 struct vnt_tx_datahead_g_fb data_head; 129} __packed; 130 131struct vnt_rts_ab { 132 struct vnt_phy_field ab; 133 __le16 duration; 134 u16 wReserved; 135 struct ieee80211_rts data; 136 struct vnt_tx_datahead_ab data_head; 137} __packed; 138 139struct vnt_rts_a_fb { 140 struct vnt_phy_field a; 141 __le16 duration; 142 u16 wReserved; 143 __le16 rts_duration_f0; 144 __le16 rts_duration_f1; 145 struct ieee80211_rts data; 146 struct vnt_tx_datahead_a_fb data_head; 147} __packed; 148 149/* CTS buffer header */ 150struct vnt_cts { 151 struct vnt_phy_field b; 152 __le16 duration_ba; 153 u16 wReserved; 154 struct ieee80211_cts data; 155 u16 reserved2; 156 struct vnt_tx_datahead_g data_head; 157} __packed; 158 159struct vnt_cts_fb { 160 struct vnt_phy_field b; 161 __le16 duration_ba; 162 u16 wReserved; 163 __le16 cts_duration_ba_f0; 164 __le16 cts_duration_ba_f1; 165 struct ieee80211_cts data; 166 u16 reserved2; 167 struct vnt_tx_datahead_g_fb data_head; 168} __packed; 169 170union vnt_tx_data_head { 171 /* rts g */ 172 struct vnt_rts_g rts_g; 173 struct vnt_rts_g_fb rts_g_fb; 174 /* rts a/b */ 175 struct vnt_rts_ab rts_ab; 176 struct vnt_rts_a_fb rts_a_fb; 177 /* cts g */ 178 struct vnt_cts cts_g; 179 struct vnt_cts_fb cts_g_fb; 180 /* no rts/cts */ 181 struct vnt_tx_datahead_a_fb data_head_a_fb; 182 struct vnt_tx_datahead_ab data_head_ab; 183}; 184 185struct vnt_tx_mic_hdr { 186 struct vnt_mic_hdr hdr; 187 union vnt_tx_data_head head; 188} __packed; 189 190union vnt_tx { 191 struct vnt_tx_mic_hdr mic; 192 union vnt_tx_data_head head; 193}; 194 195union vnt_tx_head { 196 struct { 197 struct vnt_rrv_time_rts rts; 198 union vnt_tx tx; 199 } __packed tx_rts; 200 struct { 201 struct vnt_rrv_time_cts cts; 202 union vnt_tx tx; 203 } __packed tx_cts; 204 struct { 205 struct vnt_rrv_time_ab ab; 206 union vnt_tx tx; 207 } __packed tx_ab; 208}; 209 210struct vnt_tx_fifo_head { 211 u8 tx_key[WLAN_KEY_LEN_CCMP]; 212 __le16 fifo_ctl; 213 __le16 time_stamp; 214 __le16 frag_ctl; 215 __le16 current_rate; 216} __packed; 217 218struct vnt_tx_buffer { 219 u8 type; 220 u8 pkt_no; 221 __le16 tx_byte_count; 222 struct vnt_tx_fifo_head fifo_head; 223 union vnt_tx_head tx_head; 224} __packed; 225 226struct vnt_tx_short_buf_head { 227 __le16 fifo_ctl; 228 u16 time_stamp; 229 struct vnt_phy_field ab; 230 __le16 duration; 231 __le16 time_stamp_off; 232} __packed; 233 234struct vnt_beacon_buffer { 235 u8 type; 236 u8 pkt_no; 237 __le16 tx_byte_count; 238 struct vnt_tx_short_buf_head short_head; 239 struct ieee80211_mgmt mgmt_hdr; 240} __packed; 241 242int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb); 243int vnt_beacon_make(struct vnt_private *priv, struct ieee80211_vif *vif); 244int vnt_beacon_enable(struct vnt_private *priv, struct ieee80211_vif *vif, 245 struct ieee80211_bss_conf *conf); 246 247#endif /* __RXTX_H__ */ 248