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/* Length, Service, and Signal fields of Phy for Tx */ 27struct vnt_phy_field { 28 u8 signal; 29 u8 service; 30 __le16 len; 31} __packed; 32 33/* MIC HDR data header */ 34struct vnt_mic_hdr { 35 u8 id; 36 u8 tx_priority; 37 u8 mic_addr2[6]; 38 u8 ccmp_pn[IEEE80211_CCMP_PN_LEN]; 39 __be16 payload_len; 40 __be16 hlen; 41 __le16 frame_control; 42 u8 addr1[6]; 43 u8 addr2[6]; 44 u8 addr3[6]; 45 __le16 seq_ctrl; 46 u8 addr4[6]; 47 u16 packing; /* packing to 48 bytes */ 48} __packed; 49 50/* RsvTime buffer header */ 51struct vnt_rrv_time_rts { 52 __le16 rts_rrv_time_ba; 53 __le16 rts_rrv_time_aa; 54 __le16 rts_rrv_time_bb; 55 u16 wReserved; 56 __le16 rrv_time_b; 57 __le16 rrv_time_a; 58} __packed; 59 60struct vnt_rrv_time_cts { 61 __le16 cts_rrv_time_ba; 62 u16 wReserved; 63 __le16 rrv_time_b; 64 __le16 rrv_time_a; 65} __packed; 66 67struct vnt_rrv_time_ab { 68 __le16 rts_rrv_time; 69 __le16 rrv_time; 70} __packed; 71 72/* TX data header */ 73struct vnt_tx_datahead_g { 74 struct vnt_phy_field b; 75 struct vnt_phy_field a; 76 __le16 duration_b; 77 __le16 duration_a; 78 __le16 time_stamp_off_b; 79 __le16 time_stamp_off_a; 80} __packed; 81 82struct vnt_tx_datahead_ab { 83 struct vnt_phy_field ab; 84 __le16 duration; 85 __le16 time_stamp_off; 86} __packed; 87 88/* RTS buffer header */ 89struct vnt_rts_g { 90 struct vnt_phy_field b; 91 struct vnt_phy_field a; 92 __le16 duration_ba; 93 __le16 duration_aa; 94 __le16 duration_bb; 95 u16 wReserved; 96 struct ieee80211_rts data; 97 struct vnt_tx_datahead_g data_head; 98} __packed __aligned(2); 99 100struct vnt_rts_ab { 101 struct vnt_phy_field ab; 102 __le16 duration; 103 u16 wReserved; 104 struct ieee80211_rts data; 105 struct vnt_tx_datahead_ab data_head; 106} __packed __aligned(2); 107 108/* CTS buffer header */ 109struct vnt_cts { 110 struct vnt_phy_field b; 111 __le16 duration_ba; 112 u16 wReserved; 113 struct ieee80211_cts data; 114 u16 reserved2; 115 struct vnt_tx_datahead_g data_head; 116} __packed __aligned(2); 117 118union vnt_tx_data_head { 119 /* rts g */ 120 struct vnt_rts_g rts_g; 121 /* rts a/b */ 122 struct vnt_rts_ab rts_ab; 123 /* cts g */ 124 struct vnt_cts cts_g; 125 /* no rts/cts */ 126 struct vnt_tx_datahead_ab data_head_ab; 127}; 128 129struct vnt_tx_mic_hdr { 130 struct vnt_mic_hdr hdr; 131 union vnt_tx_data_head head; 132} __packed; 133 134union vnt_tx { 135 struct vnt_tx_mic_hdr mic; 136 union vnt_tx_data_head head; 137}; 138 139union vnt_tx_head { 140 struct { 141 struct vnt_rrv_time_rts rts; 142 union vnt_tx tx; 143 } __packed tx_rts; 144 struct { 145 struct vnt_rrv_time_cts cts; 146 union vnt_tx tx; 147 } __packed tx_cts; 148 struct { 149 struct vnt_rrv_time_ab ab; 150 union vnt_tx tx; 151 } __packed tx_ab; 152}; 153 154struct vnt_tx_fifo_head { 155 u8 tx_key[WLAN_KEY_LEN_CCMP]; 156 __le16 fifo_ctl; 157 __le16 time_stamp; 158 __le16 frag_ctl; 159 __le16 current_rate; 160} __packed; 161 162struct vnt_tx_buffer { 163 struct vnt_tx_fifo_head fifo_head; 164 union vnt_tx_head tx_head; 165} __packed; 166 167struct vnt_tx_short_buf_head { 168 __le16 fifo_ctl; 169 u16 time_stamp; 170 struct vnt_phy_field ab; 171 __le16 duration; 172 __le16 time_stamp_off; 173} __packed; 174 175int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb); 176int vnt_beacon_make(struct vnt_private *priv, struct ieee80211_vif *vif); 177int vnt_beacon_enable(struct vnt_private *priv, struct ieee80211_vif *vif, 178 struct ieee80211_bss_conf *conf); 179 180#endif /* __RXTX_H__ */ 181