aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/winbond/mds_s.h
blob: 2972d66c9436dd503019eb13a457caa7b235e6b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#ifndef __WINBOND_MDS_H
#define __WINBOND_MDS_H

#include <linux/timer.h>
#include <linux/types.h>
#include <linux/atomic.h>

#include "localpara.h"
#include "mac_structures.h"

/* Preamble_Type, see <SFS-802.11G-MIB-203> */
enum {
	WLAN_PREAMBLE_TYPE_SHORT,
	WLAN_PREAMBLE_TYPE_LONG,
};

/*****************************************************************************/
#define MAX_USB_TX_DESCRIPTOR		15	/* IS89C35 ability */
#define MAX_USB_TX_BUFFER_NUMBER	4	/* Virtual pre-buffer number of MAX_USB_TX_BUFFER */
#define MAX_USB_TX_BUFFER		4096	/* IS89C35 ability 4n alignment is required for hardware */

#define AUTH_REQUEST_PAIRWISE_ERROR	0	/* _F flag setting */
#define AUTH_REQUEST_GROUP_ERROR	1	/* _F flag setting */

#define CURRENT_FRAGMENT_THRESHOLD	(adapter->Mds.TxFragmentThreshold & ~0x1)
#define CURRENT_PREAMBLE_MODE		(psLOCAL->boShortPreamble ? WLAN_PREAMBLE_TYPE_SHORT : WLAN_PREAMBLE_TYPE_LONG)
#define CURRENT_TX_RATE_FOR_MNG		(adapter->sLocalPara.CurrentTxRateForMng)
#define CURRENT_PROTECT_MECHANISM	(psLOCAL->boProtectMechanism)
#define CURRENT_RTS_THRESHOLD		(adapter->Mds.TxRTSThreshold)

#define MIB_GS_XMIT_OK_INC		(adapter->sLocalPara.GS_XMIT_OK++)
#define MIB_GS_RCV_OK_INC		(adapter->sLocalPara.GS_RCV_OK++)
#define MIB_GS_XMIT_ERROR_INC		(adapter->sLocalPara.GS_XMIT_ERROR)

/* ---------- TX ----------------------------------- */
#define ETHERNET_TX_DESCRIPTORS         MAX_USB_TX_BUFFER_NUMBER

/* ---------- RX ----------------------------------- */
#define ETHERNET_RX_DESCRIPTORS		8	/* It's not necessary to allocate more than 2 in sync indicate */

/*
 * ================================================================
 * Configuration default value
 * ================================================================
 */
#define DEFAULT_MULTICASTLISTMAX	32	/* standard */
#define DEFAULT_TX_BURSTLENGTH		3	/* 32 Longwords */
#define DEFAULT_RX_BURSTLENGTH		3	/* 32 Longwords */
#define DEFAULT_TX_THRESHOLD		0	/* Full Packet */
#define DEFAULT_RX_THRESHOLD		0	/* Full Packet */
#define DEFAULT_MAXTXRATE		6	/* 11 Mbps (Long) */
#define DEFAULT_CHANNEL			3	/* Chennel 3 */
#define DEFAULT_RTSThreshold		2347	/* Disable RTS */
#define DEFAULT_PME			0	/* Disable */
#define DEFAULT_SIFSTIME		10
#define DEFAULT_ACKTIME_1ML             304	/* 148 + 44 + 112 */
#define DEFAULT_ACKTIME_2ML             248	/* 148 + 44 + 56 */
#define DEFAULT_FRAGMENT_THRESHOLD      2346	/* No fragment */
#define DEFAULT_PREAMBLE_LENGTH		72
#define DEFAULT_PLCPHEADERTIME_LENGTH	24

/*
 * ------------------------------------------------------------------------
 * 0.96 sec since time unit of the R03 for the current, W89C32 is about 60ns
 * instead of 960 ns. This shall be fixed in the future W89C32
 * -------------------------------------------------------------------------
 */
#define DEFAULT_MAX_RECEIVE_TIME	16440000

#define RX_BUF_SIZE			2352	/* 600 - For 301 must be multiple of 8 */
#define MAX_RX_DESCRIPTORS		18	/* Rx Layer 2 */

/* For brand-new rx system */
#define MDS_ID_IGNORE			ETHERNET_RX_DESCRIPTORS

/* For Tx Packet status classify */
#define PACKET_FREE_TO_USE		0
#define PACKET_COME_FROM_NDIS		0x08
#define PACKET_COME_FROM_MLME		0x80
#define PACKET_SEND_COMPLETE		0xff

struct wb35_mds {
	/* For Tx usage */
	u8	TxOwner[((MAX_USB_TX_BUFFER_NUMBER + 3) & ~0x03)];
	u8	*pTxBuffer;
	u16	TxBufferSize[((MAX_USB_TX_BUFFER_NUMBER + 1) & ~0x01)];
	u8	TxDesFrom[((MAX_USB_TX_DESCRIPTOR + 3) & ~0x03)];/* 1: MLME 2: NDIS control 3: NDIS data */
	u8	TxCountInBuffer[((MAX_USB_TX_DESCRIPTOR + 3) & ~0x03)];

	u8	TxFillIndex;	/* the next index of TxBuffer can be used */
	u8	TxDesIndex;	/* The next index of TxDes can be used */
	u8	ScanTxPause;	/* data Tx pause because the scanning is progressing, but probe request Tx won't. */
	u8	TxPause;	/*For pause the Mds_Tx modult */

	atomic_t	TxThreadCount;	/* For thread counting */

	u16	TxResult[((MAX_USB_TX_DESCRIPTOR + 1) & ~0x01)];/* Collect the sending result of Mpdu */

	u8	MicRedundant[8]; /* For tmp use */
	u8	*MicWriteAddress[2]; /* The start address to fill the Mic, use 2 point due to Mic maybe fragment */

	u16	MicWriteSize[2];

	u16	MicAdd; /* If want to add the Mic, this variable equal to 8 */
	u16	MicWriteIndex; /* The number of MicWriteAddress */

	u8	TxRate[((MAX_USB_TX_DESCRIPTOR + 1) & ~0x01)][2]; /* [0] current tx rate, [1] fall back rate */
	u8	TxInfo[((MAX_USB_TX_DESCRIPTOR + 1) & ~0x01)]; /*Store information for callback function */

	/* ---- for Tx Parameter */
	u16	TxFragmentThreshold;	/* For frame body only */
	u16	TxRTSThreshold;

	u32	MaxReceiveTime;

	/* depend on OS, */
	u32	MulticastListNo;
	u32	PacketFilter; /* Setting by NDIS, the current packet filter in use. */
	u8	MulticastAddressesArray[DEFAULT_MULTICASTLISTMAX][MAC_ADDR_LENGTH];

	/* COUNTERMEASURE */
	u8	bMICfailCount;
	u8	boCounterMeasureBlock;
	u8	reserved_4[2];

	u32	TxTsc;
	u32	TxTsc_2;
};

#endif