250 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ */2/*3 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.4 * All rights reserved.5 *6 * Purpose:The header file of descriptor7 *8 * Revision History:9 *10 * Author: Tevin Chen11 *12 * Date: May 21, 199613 *14 */15 16#ifndef __DESC_H__17#define __DESC_H__18 19#include <linux/types.h>20#include <linux/mm.h>21#include "linux/ieee80211.h"22 23#define B_OWNED_BY_CHIP 124#define B_OWNED_BY_HOST 025 26/* Bits in the RSR register */27#define RSR_ADDRBROAD 0x8028#define RSR_ADDRMULTI 0x4029#define RSR_ADDRUNI 0x0030#define RSR_IVLDTYP 0x2031#define RSR_IVLDLEN 0x10 /* invalid len (> 2312 byte) */32#define RSR_BSSIDOK 0x0833#define RSR_CRCOK 0x0434#define RSR_BCNSSIDOK 0x0235#define RSR_ADDROK 0x0136 37/* Bits in the new RSR register */38#define NEWRSR_DECRYPTOK 0x1039#define NEWRSR_CFPIND 0x0840#define NEWRSR_HWUTSF 0x0441#define NEWRSR_BCNHITAID 0x0242#define NEWRSR_BCNHITAID0 0x0143 44/* Bits in the TSR0 register */45#define TSR0_PWRSTS1_2 0xC046#define TSR0_PWRSTS7 0x2047#define TSR0_NCR 0x1F48 49/* Bits in the TSR1 register */50#define TSR1_TERR 0x8051#define TSR1_PWRSTS4_6 0x7052#define TSR1_RETRYTMO 0x0853#define TSR1_TMO 0x0454#define TSR1_PWRSTS3 0x0255#define ACK_DATA 0x0156 57/* Bits in the TCR register */58#define EDMSDU 0x04 /* end of sdu */59#define TCR_EDP 0x02 /* end of packet */60#define TCR_STP 0x01 /* start of packet */61 62/* max transmit or receive buffer size */63#define CB_MAX_BUF_SIZE 2900U64 /* NOTE: must be multiple of 4 */65#define CB_MAX_TX_BUF_SIZE CB_MAX_BUF_SIZE66#define CB_MAX_RX_BUF_SIZE_NORMAL CB_MAX_BUF_SIZE67 68#define CB_BEACON_BUF_SIZE 512U69 70#define CB_MAX_RX_DESC 12871#define CB_MIN_RX_DESC 1672#define CB_MAX_TX_DESC 6473#define CB_MIN_TX_DESC 1674 75#define CB_MAX_RECEIVED_PACKETS 1676 /*77 * limit our receive routine to indicating78 * this many at a time for 2 reasons:79 * 1. driver flow control to protocol layer80 * 2. limit the time used in ISR routine81 */82 83#define CB_EXTRA_RD_NUM 3284#define CB_RD_NUM 3285#define CB_TD_NUM 3286 87/*88 * max number of physical segments in a single NDIS packet. Above this89 * threshold, the packet is copied into a single physically contiguous buffer90 */91#define CB_MAX_SEGMENT 492 93#define CB_MIN_MAP_REG_NUM 494#define CB_MAX_MAP_REG_NUM CB_MAX_TX_DESC95 96#define CB_PROTOCOL_RESERVED_SECTION 1697 98/*99 * if retrys excess 15 times , tx will abort, and if tx fifo underflow,100 * tx will fail, we should try to resend it101 */102#define CB_MAX_TX_ABORT_RETRY 3103 104/* WMAC definition FIFO Control */105#define FIFOCTL_AUTO_FB_1 0x1000106#define FIFOCTL_AUTO_FB_0 0x0800107#define FIFOCTL_GRPACK 0x0400108#define FIFOCTL_11GA 0x0300109#define FIFOCTL_11GB 0x0200110#define FIFOCTL_11B 0x0100111#define FIFOCTL_11A 0x0000112#define FIFOCTL_RTS 0x0080113#define FIFOCTL_ISDMA0 0x0040114#define FIFOCTL_GENINT 0x0020115#define FIFOCTL_TMOEN 0x0010116#define FIFOCTL_LRETRY 0x0008117#define FIFOCTL_CRCDIS 0x0004118#define FIFOCTL_NEEDACK 0x0002119#define FIFOCTL_LHEAD 0x0001120 121/* WMAC definition Frag Control */122#define FRAGCTL_AES 0x0300123#define FRAGCTL_TKIP 0x0200124#define FRAGCTL_LEGACY 0x0100125#define FRAGCTL_NONENCRYPT 0x0000126#define FRAGCTL_ENDFRAG 0x0003127#define FRAGCTL_MIDFRAG 0x0002128#define FRAGCTL_STAFRAG 0x0001129#define FRAGCTL_NONFRAG 0x0000130 131#define TYPE_TXDMA0 0132#define TYPE_AC0DMA 1133#define TYPE_ATIMDMA 2134#define TYPE_SYNCDMA 3135#define TYPE_MAXTD 2136 137#define TYPE_BEACONDMA 4138 139#define TYPE_RXDMA0 0140#define TYPE_RXDMA1 1141#define TYPE_MAXRD 2142 143/* TD_INFO flags control bit */144#define TD_FLAGS_NETIF_SKB 0x01 /* check if need release skb */145/* check if called from private skb (hostap) */146#define TD_FLAGS_PRIV_SKB 0x02147#define TD_FLAGS_PS_RETRY 0x04 /* check if PS STA frame re-transmit */148 149/*150 * ref_sk_buff is used for mapping the skb structure between pre-built151 * driver-obj & running kernel. Since different kernel version (2.4x) may152 * change skb structure, i.e. pre-built driver-obj may link to older skb that153 * leads error.154 */155 156struct vnt_rd_info {157 struct sk_buff *skb;158 dma_addr_t skb_dma;159};160 161struct vnt_rdes0 {162 volatile __le16 res_count;163#ifdef __BIG_ENDIAN164 union {165 volatile u16 f15_reserved;166 struct {167 volatile u8 f8_reserved1;168 volatile u8 owner:1;169 volatile u8 f7_reserved:7;170 } __packed;171 } __packed;172#else173 u16 f15_reserved:15;174 u16 owner:1;175#endif176} __packed;177 178struct vnt_rdes1 {179 __le16 req_count;180 u16 reserved;181} __packed;182 183/* Rx descriptor*/184struct vnt_rx_desc {185 volatile struct vnt_rdes0 rd0;186 volatile struct vnt_rdes1 rd1;187 volatile __le32 buff_addr;188 volatile __le32 next_desc;189 struct vnt_rx_desc *next __aligned(8);190 struct vnt_rd_info *rd_info __aligned(8);191} __packed;192 193struct vnt_tdes0 {194 volatile u8 tsr0;195 volatile u8 tsr1;196#ifdef __BIG_ENDIAN197 union {198 volatile u16 f15_txtime;199 struct {200 volatile u8 f8_reserved;201 volatile u8 owner:1;202 volatile u8 f7_reserved:7;203 } __packed;204 } __packed;205#else206 volatile u16 f15_txtime:15;207 volatile u16 owner:1;208#endif209} __packed;210 211struct vnt_tdes1 {212 volatile __le16 req_count;213 volatile u8 tcr;214 volatile u8 reserved;215} __packed;216 217struct vnt_td_info {218 void *mic_hdr;219 struct sk_buff *skb;220 unsigned char *buf;221 dma_addr_t buf_dma;222 u16 req_count;223 u8 flags;224};225 226/* transmit descriptor */227struct vnt_tx_desc {228 volatile struct vnt_tdes0 td0;229 volatile struct vnt_tdes1 td1;230 volatile __le32 buff_addr;231 volatile __le32 next_desc;232 struct vnt_tx_desc *next __aligned(8);233 struct vnt_td_info *td_info __aligned(8);234} __packed;235 236/* Length, Service, and Signal fields of Phy for Tx */237struct vnt_phy_field {238 u8 signal;239 u8 service;240 __le16 len;241} __packed;242 243union vnt_phy_field_swap {244 struct vnt_phy_field field_read;245 u16 swap[2];246 u32 field_write;247};248 249#endif /* __DESC_H__ */250