summaryrefslogtreecommitdiffstats
path: root/drivers/net/wavelan.h
blob: 4e1f514fff63059f36244eea9e7c38a75ff80783 (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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
#if	defined(CONFIG_WAVELAN)
#define WAVELAN_ADDR_SIZE	6	/* Size of a MAC address */
#define SA_ADDR0		0x08	/* First octet of WaveLAN MAC addresses */
#define SA_ADDR1		0x00	/* Second octet of WaveLAN MAC addresses */
#define SA_ADDR2		0x0E	/* Third octet of WaveLAN MAC addresses */
#define WAVELAN_MTU		1500	/* Maximum size of WaveLAN packet */

/*
 * Parameter Storage Area (PSA).
 */
typedef struct psa_t	psa_t;
struct psa_t
{
	unsigned char	psa_io_base_addr_1;	/* Base address 1 ??? */
	unsigned char	psa_io_base_addr_2;	/* Base address 2 */
	unsigned char	psa_io_base_addr_3;	/* Base address 3 */
	unsigned char	psa_io_base_addr_4;	/* Base address 4 */
	unsigned char	psa_rem_boot_addr_1;	/* Remote Boot Address 1 */
	unsigned char	psa_rem_boot_addr_2;	/* Remote Boot Address 2 */
	unsigned char	psa_rem_boot_addr_3;	/* Remote Boot Address 3 */
	unsigned char	psa_holi_params;	/* HOst Lan Interface (HOLI) Parameters */
	unsigned char	psa_int_req_no;		/* Interrupt Request Line */
	unsigned char	psa_unused0[7];		/* unused */
	unsigned char	psa_univ_mac_addr[WAVELAN_ADDR_SIZE];	/* Universal (factory) MAC Address */
	unsigned char	psa_local_mac_addr[WAVELAN_ADDR_SIZE];	/* Local MAC Address */
	unsigned char	psa_univ_local_sel;	/* Universal Local Selection */
#define		PSA_UNIVERSAL	0		/* Universal (factory) */
#define		PSA_LOCAL	1		/* Local */
	unsigned char	psa_comp_number;	/* Compatibility Number: */
#define		PSA_COMP_PC_AT_915	0 	/* PC-AT 915 MHz	*/
#define		PSA_COMP_PC_MC_915	1 	/* PC-MC 915 MHz	*/
#define		PSA_COMP_PC_AT_2400	2 	/* PC-AT 2.4 GHz	*/
#define		PSA_COMP_PC_MC_2400	3 	/* PC-MC 2.4 GHz	*/
#define		PSA_COMP_PCMCIA_915	4 	/* PCMCIA 915 MHz	*/
	unsigned char	psa_thr_pre_set;	/* Modem Threshold Preset */
	unsigned char	psa_feature_select;	/* ??? */
#if	0
	<alias for above>
	unsigned char	psa_decay_prm;		/* Modem Decay */
#endif	/* 0 */
	unsigned char	psa_subband;		/* Subband	*/
#define		PSA_SUBBAND_915		0	/* 915 MHz	*/
#define		PSA_SUBBAND_2425	1	/* 2425 MHz	*/
#define		PSA_SUBBAND_2460	2	/* 2460 MHz	*/
#define		PSA_SUBBAND_2484	3	/* 2484 MHz	*/
#define		PSA_SUBBAND_2430_5	4	/* 2430.5 MHz	*/
#if	0
	<alias for above>
	unsigned char	psa_decay_updat_prm;	/* Modem Decay Update ??? */
#endif	/* 0 */
	unsigned char	psa_quality_thr;	/* Modem Quality Threshold */
	unsigned char	psa_mod_delay;		/* Modem Delay ??? */
	unsigned char	psa_nwid[2];		/* Network ID */
	unsigned char	psa_undefined;		/* undefined */
	unsigned char	psa_encryption_select;	/* Encryption On Off */
	unsigned char	psa_encryption_key[8];	/* Encryption Key */
	unsigned char	psa_databus_width;	/* 8/16 bit bus width */
	unsigned char	psa_call_code;		/* ??? */
#if	0
	<alias for above>
	unsigned char	psa_auto_squelch;	/* Automatic Squelch level On off ??? */
#endif	/* 0 */
	unsigned char	psa_no_of_retries;	/* LAN Cont. No of retries */
	unsigned char	psa_acr;		/* LAN Cont. ACR */
	unsigned char	psa_dump_count;		/* number of Dump Commands in TFB */
	unsigned char	psa_unused1[4];		/* unused */
	unsigned char	psa_nwid_prefix;	/* ??? */
	unsigned char	psa_unused2[3];		/* unused */
	unsigned char	psa_conf_status;	/* Card Configuration Status */
	unsigned char	psa_crc[2];		/* CRC over PSA */
	unsigned char	psa_crc_status;		/* CRC Valid Flag */
};
#if	STRUCT_CHECK == 1
#define	PSA_SIZE	64
#endif	/* STRUCT_CHECK == 1 */

/*
 * Modem Management Controller (MMC) write structure.
 */
typedef struct mmw_t	mmw_t;
struct mmw_t
{
	unsigned char	mmw_encr_key[8];	/* encryption key */
	unsigned char	mmw_encr_enable;	/* enable/disable encryption */
	unsigned char	mmw_unused0[1];		/* unused */
	unsigned char	mmw_des_io_invert;	/* ??? */
	unsigned char	mmw_unused1[5];		/* unused */
	unsigned char	mmw_loopt_sel;		/* looptest selection */
#define		MMW_LOOPT_SEL_UNDEFINED	0x40	/* undefined */
#define		MMW_LOOPT_SEL_INT	0x20	/* activate Attention Request */
#define		MMW_LOOPT_SEL_LS	0x10	/* looptest without collision avoidance */
#define		MMW_LOOPT_SEL_LT3A	0x08	/* looptest 3a */
#define		MMW_LOOPT_SEL_LT3B	0x04	/* looptest 3b */
#define		MMW_LOOPT_SEL_LT3C	0x02	/* looptest 3c */
#define		MMW_LOOPT_SEL_LT3D	0x01	/* looptest 3d */
	unsigned char	mmw_jabber_enable;	/* jabber timer enable */
	unsigned char	mmw_freeze;		/* freeze / unfreeze signal level */
	unsigned char	mmw_anten_sel;		/* antenna selection */
#define		MMW_ANTEN_SEL_SEL	0x01	/* direct antenna selection */
#define		MMW_ANTEN_SEL_ALG_EN	0x02	/* antenna selection algorithm enable */
	unsigned char	mmw_ifs;		/* inter frame spacing */
	unsigned char	mmw_mod_delay;	 	/* modem delay */
	unsigned char	mmw_jam_time;		/* jamming time */
	unsigned char	mmw_unused2[1];		/* unused */
	unsigned char	mmw_thr_pre_set;	/* level threshold preset */
	unsigned char	mmw_decay_prm;		/* decay parameters */
	unsigned char	mmw_decay_updat_prm;	/* decay update parameters */
	unsigned char	mmw_quality_thr;	/* quality (z-quotient) threshold */
	unsigned char	mmw_netw_id_l;		/* NWID low order byte */
	unsigned char	mmw_netw_id_h;		/* NWID high order byte */
};
#if	STRUCT_CHECK == 1
#define	MMW_SIZE	30
#endif	/* STRUCT_CHECK == 1 */

#define	mmwoff(p,f) 	(unsigned short)((void *)(&((mmw_t *)((void *)0 + (p)))->f) - (void *)0)

/*
 * Modem Management Controller (MMC) read structure.
 */
typedef struct mmr_t	mmr_t;
struct mmr_t
{
	unsigned char	mmr_unused0[8];		/* unused */
	unsigned char	mmr_des_status;		/* encryption status */
	unsigned char	mmr_des_avail;		/* encryption available (0x55 read) */
	unsigned char	mmr_des_io_invert;	/* des I/O invert register */
	unsigned char	mmr_unused1[5];		/* unused */
	unsigned char	mmr_dce_status;		/* DCE status */
#define		MMR_DCE_STATUS_ENERG_DET	0x01	/* energy detected */
#define		MMR_DCE_STATUS_LOOPT_IND	0x02	/* loop test indicated */
#define		MMR_DCE_STATUS_XMTITR_IND	0x04	/* transmitter on */
#define		MMR_DCE_STATUS_JBR_EXPIRED	0x08	/* jabber timer expired */
	unsigned char	mmr_unused2[3];		/* unused */
	unsigned char	mmr_correct_nwid_l;	/* no. of correct NWID's rxd (low) */
	unsigned char	mmr_correct_nwid_h;	/* no. of correct NWID's rxd (high) */
	unsigned char	mmr_wrong_nwid_l;	/* count of wrong NWID's received (low) */
	unsigned char	mmr_wrong_nwid_h;	/* count of wrong NWID's received (high) */
	unsigned char	mmr_thr_pre_set;	/* level threshold preset */
	unsigned char	mmr_signal_lvl;		/* signal level */
	unsigned char	mmr_silence_lvl;	/* silence level */
	unsigned char	mmr_sgnl_qual;		/* signal quality */
#define		MMR_SGNL_QUAL_0		0x01	/* signal quality 0 */
#define		MMR_SGNL_QUAL_1		0x02	/* signal quality 1 */
#define		MMR_SGNL_QUAL_2		0x04	/* signal quality 2 */
#define		MMR_SGNL_QUAL_3		0x08	/* signal quality 3 */
#define		MMR_SGNL_QUAL_S_A	0x80	/* currently selected antenna */
	unsigned char	mmr_netw_id_l;		/* NWID low order byte ??? */
	unsigned char	mmr_unused3[1];		/* unused */
};
#if	STRUCT_CHECK == 1
#define	MMR_SIZE	30
#endif	/* STRUCT_CHECK == 1 */

#define	MMR_LEVEL_MASK	0x3F

#define	mmroff(p,f) 	(unsigned short)((void *)(&((mmr_t *)((void *)0 + (p)))->f) - (void *)0)

/*
 * Host Adaptor structure.
 * (base is board port address).
 */
typedef union hacs_u	hacs_u;
union hacs_u
{
	unsigned short	hu_command;		/* Command register */
#define		HACR_RESET		0x0001	/* Reset board */
#define		HACR_CA			0x0002	/* Set Channel Attention for 82586 */
#define		HACR_16BITS		0x0004	/* 16 bits operation (0 => 8bits) */
#define		HACR_OUT0		0x0008	/* General purpose output pin 0 */
						/* not used - must be 1 */
#define		HACR_OUT1		0x0010	/* General purpose output pin 1 */
						/* not used - must be 1 */
#define		HACR_82586_INT_ENABLE	0x0020	/* Enable 82586 interrupts */
#define		HACR_MMC_INT_ENABLE	0x0040	/* Enable MMC interrupts */
#define		HACR_INTR_CLR_ENABLE	0x0080	/* Enable interrupt status read/clear */
	unsigned short	hu_status;		/* Status Register */
#define		HASR_82586_INTR		0x0001	/* Interrupt request from 82586 */
#define		HASR_MMC_INTR		0x0002	/* Interrupt request from MMC */
#define		HASR_MMC_BUSY		0x0004	/* MMC busy indication */
#define		HASR_PSA_BUSY		0x0008	/* LAN parameter storage area busy */
};

typedef struct ha_t	ha_t;
struct ha_t
{
	hacs_u		ha_cs;		/* Command and status registers */
#define 		ha_command	ha_cs.hu_command
#define 		ha_status	ha_cs.hu_status
	unsigned short	ha_mmcr;	/* Modem Management Ctrl Register */
	unsigned short	ha_pior0;	/* Program I/O Address Register Port 0 */
	unsigned short	ha_piop0;	/* Program I/O Port 0 */
	unsigned short	ha_pior1;	/* Program I/O Address Register Port 1 */
	unsigned short	ha_piop1;	/* Program I/O Port 1 */
	unsigned short	ha_pior2;	/* Program I/O Address Register Port 2 */
	unsigned short	ha_piop2;	/* Program I/O Port 2 */
};
#if	STRUCT_CHECK == 1
#define HA_SIZE		16
#endif	/* STRUCT_CHECK == 1 */

#define	hoff(p,f) 	(unsigned short)((void *)(&((ha_t *)((void *)0 + (p)))->f) - (void *)0)
#define	HACR(p)		hoff(p, ha_command)
#define	HASR(p)		hoff(p, ha_status)
#define	MMCR(p)		hoff(p, ha_mmcr)
#define	PIOR0(p)	hoff(p, ha_pior0)
#define	PIOP0(p)	hoff(p, ha_piop0)
#define	PIOR1(p)	hoff(p, ha_pior1)
#define	PIOP1(p)	hoff(p, ha_piop1)
#define	PIOR2(p)	hoff(p, ha_pior2)
#define	PIOP2(p)	hoff(p, ha_piop2)

/*
 * Program I/O Mode Register values.
 */
#define STATIC_PIO		0	/* Mode 1: static mode */
					/* RAM access ??? */
#define AUTOINCR_PIO		1	/* Mode 2: auto increment mode */
					/* RAM access ??? */
#define AUTODECR_PIO		2	/* Mode 3: auto decrement mode */
					/* RAM access ??? */
#define PARAM_ACCESS_PIO	3	/* Mode 4: LAN parameter access mode */
					/* Parameter access. */
#define PIO_MASK		3	/* register mask */
#define PIOM(cmd,piono)		((u_short)cmd << 10 << (piono * 2))

#define	HACR_DEFAULT		(HACR_OUT0 | HACR_OUT1 | HACR_16BITS | PIOM(STATIC_PIO, 0) | PIOM(AUTOINCR_PIO, 1) | PIOM(PARAM_ACCESS_PIO, 2))
#define	HACR_INTRON		(HACR_82586_INT_ENABLE | HACR_MMC_INT_ENABLE | HACR_INTR_CLR_ENABLE)

#define	MAXDATAZ		(WAVELAN_ADDR_SIZE + WAVELAN_ADDR_SIZE + 2 + WAVELAN_MTU)

/*
 * Onboard 64k RAM layout.
 * (Offsets from 0x0000.)
 */
#define OFFSET_RU		0x0000
#define OFFSET_CU		0x8000
#define OFFSET_SCB		(OFFSET_ISCP - sizeof(scb_t))
#define OFFSET_ISCP		(OFFSET_SCP - sizeof(iscp_t))
#define OFFSET_SCP		I82586_SCP_ADDR

#define	RXBLOCKZ		(sizeof(fd_t) + sizeof(rbd_t) + MAXDATAZ)
#define	TXBLOCKZ		(sizeof(ac_tx_t) + sizeof(ac_nop_t) + sizeof(tbd_t) + MAXDATAZ)

#define	NRXBLOCKS		((OFFSET_CU - OFFSET_RU) / RXBLOCKZ)
#define	NTXBLOCKS		((OFFSET_SCB - OFFSET_CU) / TXBLOCKZ)

/*
 * This software may only be used and distributed
 * according to the terms of the GNU Public License.
 *
 * For more details, see wavelan.c.
 */
#endif	/* defined(CONFIG_WAVELAN) */