linux/drivers/staging/vt6655/desc.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
   3 * All rights reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License as published by
   7 * the Free Software Foundation; either version 2 of the License, or
   8 * (at your option) any later version.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License along
  16 * with this program; if not, write to the Free Software Foundation, Inc.,
  17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  18 *
  19 * File: desc.h
  20 *
  21 * Purpose:The header file of descriptor
  22 *
  23 * Revision History:
  24 *
  25 * Author: Tevin Chen
  26 *
  27 * Date: May 21, 1996
  28 *
  29 */
  30
  31#ifndef __DESC_H__
  32#define __DESC_H__
  33
  34#include <linux/types.h>
  35#include <linux/mm.h>
  36#include "linux/ieee80211.h"
  37
  38#define B_OWNED_BY_CHIP     1
  39#define B_OWNED_BY_HOST     0
  40
  41/* Bits in the RSR register */
  42#define RSR_ADDRBROAD       0x80
  43#define RSR_ADDRMULTI       0x40
  44#define RSR_ADDRUNI         0x00
  45#define RSR_IVLDTYP         0x20
  46#define RSR_IVLDLEN         0x10        /* invalid len (> 2312 byte) */
  47#define RSR_BSSIDOK         0x08
  48#define RSR_CRCOK           0x04
  49#define RSR_BCNSSIDOK       0x02
  50#define RSR_ADDROK          0x01
  51
  52/* Bits in the new RSR register */
  53#define NEWRSR_DECRYPTOK    0x10
  54#define NEWRSR_CFPIND       0x08
  55#define NEWRSR_HWUTSF       0x04
  56#define NEWRSR_BCNHITAID    0x02
  57#define NEWRSR_BCNHITAID0   0x01
  58
  59/* Bits in the TSR0 register */
  60#define TSR0_PWRSTS1_2      0xC0
  61#define TSR0_PWRSTS7        0x20
  62#define TSR0_NCR            0x1F
  63
  64/* Bits in the TSR1 register */
  65#define TSR1_TERR           0x80
  66#define TSR1_PWRSTS4_6      0x70
  67#define TSR1_RETRYTMO       0x08
  68#define TSR1_TMO            0x04
  69#define TSR1_PWRSTS3        0x02
  70#define ACK_DATA            0x01
  71
  72/* Bits in the TCR register */
  73#define EDMSDU              0x04        /* end of sdu */
  74#define TCR_EDP             0x02        /* end of packet */
  75#define TCR_STP             0x01        /* start of packet */
  76
  77/* max transmit or receive buffer size */
  78#define CB_MAX_BUF_SIZE     2900U
  79                                        /* NOTE: must be multiple of 4 */
  80#define CB_MAX_TX_BUF_SIZE          CB_MAX_BUF_SIZE
  81#define CB_MAX_RX_BUF_SIZE_NORMAL   CB_MAX_BUF_SIZE
  82
  83#define CB_BEACON_BUF_SIZE  512U
  84
  85#define CB_MAX_RX_DESC      128
  86#define CB_MIN_RX_DESC      16
  87#define CB_MAX_TX_DESC      64
  88#define CB_MIN_TX_DESC      16
  89
  90#define CB_MAX_RECEIVED_PACKETS     16
  91                                /*
  92                                 * limit our receive routine to indicating
  93                                 * this many at a time for 2 reasons:
  94                                 * 1. driver flow control to protocol layer
  95                                 * 2. limit the time used in ISR routine
  96                                 */
  97
  98#define CB_EXTRA_RD_NUM     32
  99#define CB_RD_NUM           32
 100#define CB_TD_NUM           32
 101
 102/*
 103 * max number of physical segments in a single NDIS packet. Above this
 104 * threshold, the packet is copied into a single physically contiguous buffer
 105 */
 106#define CB_MAX_SEGMENT      4
 107
 108#define CB_MIN_MAP_REG_NUM  4
 109#define CB_MAX_MAP_REG_NUM  CB_MAX_TX_DESC
 110
 111#define CB_PROTOCOL_RESERVED_SECTION    16
 112
 113/*
 114 * if retrys excess 15 times , tx will abort, and if tx fifo underflow,
 115 * tx will fail, we should try to resend it
 116 */
 117#define CB_MAX_TX_ABORT_RETRY   3
 118
 119/* WMAC definition FIFO Control */
 120#define FIFOCTL_AUTO_FB_1   0x1000
 121#define FIFOCTL_AUTO_FB_0   0x0800
 122#define FIFOCTL_GRPACK      0x0400
 123#define FIFOCTL_11GA        0x0300
 124#define FIFOCTL_11GB        0x0200
 125#define FIFOCTL_11B         0x0100
 126#define FIFOCTL_11A         0x0000
 127#define FIFOCTL_RTS         0x0080
 128#define FIFOCTL_ISDMA0      0x0040
 129#define FIFOCTL_GENINT      0x0020
 130#define FIFOCTL_TMOEN       0x0010
 131#define FIFOCTL_LRETRY      0x0008
 132#define FIFOCTL_CRCDIS      0x0004
 133#define FIFOCTL_NEEDACK     0x0002
 134#define FIFOCTL_LHEAD       0x0001
 135
 136/* WMAC definition Frag Control */
 137#define FRAGCTL_AES         0x0300
 138#define FRAGCTL_TKIP        0x0200
 139#define FRAGCTL_LEGACY      0x0100
 140#define FRAGCTL_NONENCRYPT  0x0000
 141#define FRAGCTL_ENDFRAG     0x0003
 142#define FRAGCTL_MIDFRAG     0x0002
 143#define FRAGCTL_STAFRAG     0x0001
 144#define FRAGCTL_NONFRAG     0x0000
 145
 146#define TYPE_TXDMA0     0
 147#define TYPE_AC0DMA     1
 148#define TYPE_ATIMDMA    2
 149#define TYPE_SYNCDMA    3
 150#define TYPE_MAXTD      2
 151
 152#define TYPE_BEACONDMA  4
 153
 154#define TYPE_RXDMA0     0
 155#define TYPE_RXDMA1     1
 156#define TYPE_MAXRD      2
 157
 158/* TD_INFO flags control bit */
 159#define TD_FLAGS_NETIF_SKB      0x01    /* check if need release skb */
 160#define TD_FLAGS_PRIV_SKB       0x02    /* check if called from private skb (hostap) */
 161#define TD_FLAGS_PS_RETRY       0x04    /* check if PS STA frame re-transmit */
 162
 163/*
 164 * ref_sk_buff is used for mapping the skb structure between pre-built
 165 * driver-obj & running kernel. Since different kernel version (2.4x) may
 166 * change skb structure, i.e. pre-built driver-obj may link to older skb that
 167 * leads error.
 168 */
 169
 170struct vnt_rd_info {
 171        struct sk_buff *skb;
 172        dma_addr_t  skb_dma;
 173};
 174
 175struct vnt_rdes0 {
 176        volatile __le16 res_count;
 177#ifdef __BIG_ENDIAN
 178        union {
 179                volatile u16 f15_reserved;
 180                struct {
 181                        volatile u8 f8_reserved1;
 182                        volatile u8 owner:1;
 183                        volatile u8 f7_reserved:7;
 184                } __packed;
 185        } __packed;
 186#else
 187        u16 f15_reserved:15;
 188        u16 owner:1;
 189#endif
 190} __packed;
 191
 192struct vnt_rdes1 {
 193        __le16 req_count;
 194        u16 reserved;
 195} __packed;
 196
 197/* Rx descriptor*/
 198struct vnt_rx_desc {
 199        volatile struct vnt_rdes0 rd0;
 200        volatile struct vnt_rdes1 rd1;
 201        volatile __le32 buff_addr;
 202        volatile __le32 next_desc;
 203        struct vnt_rx_desc *next __aligned(8);
 204        struct vnt_rd_info *rd_info __aligned(8);
 205} __packed;
 206
 207struct vnt_tdes0 {
 208        volatile u8 tsr0;
 209        volatile u8 tsr1;
 210#ifdef __BIG_ENDIAN
 211        union {
 212                volatile u16 f15_txtime;
 213                struct {
 214                        volatile u8 f8_reserved;
 215                        volatile u8 owner:1;
 216                        volatile u8 f7_reserved:7;
 217                } __packed;
 218        } __packed;
 219#else
 220        volatile u16 f15_txtime:15;
 221        volatile u16 owner:1;
 222#endif
 223} __packed;
 224
 225struct vnt_tdes1 {
 226        volatile __le16 req_count;
 227        volatile u8 tcr;
 228        volatile u8 reserved;
 229} __packed;
 230
 231struct vnt_td_info {
 232        void *mic_hdr;
 233        struct sk_buff *skb;
 234        unsigned char *buf;
 235        dma_addr_t buf_dma;
 236        u16 req_count;
 237        u8 flags;
 238};
 239
 240/* transmit descriptor */
 241struct vnt_tx_desc {
 242        volatile struct vnt_tdes0 td0;
 243        volatile struct vnt_tdes1 td1;
 244        volatile __le32 buff_addr;
 245        volatile __le32 next_desc;
 246        struct vnt_tx_desc *next __aligned(8);
 247        struct vnt_td_info *td_info __aligned(8);
 248} __packed;
 249
 250/* Length, Service, and Signal fields of Phy for Tx */
 251struct vnt_phy_field {
 252        u8 signal;
 253        u8 service;
 254        __le16 len;
 255} __packed;
 256
 257union vnt_phy_field_swap {
 258        struct vnt_phy_field field_read;
 259        u16 swap[2];
 260        u32 field_write;
 261};
 262
 263#endif /* __DESC_H__ */
 264