summaryrefslogtreecommitdiff
path: root/sys/dev/ic/rlncmd.h
blob: efaed3dcde1e604fb66831c1cfb3f1873164944d (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
/*	$OpenBSD: rlncmd.h,v 1.1 1999/07/30 13:43:36 d Exp $	*/
/*
 * David Leonard <d@openbsd.org>, 1999. Public Domain.
 *
 * RangeLAN2 host-to-card message protocol.
 */

/* Micro-message command header. */
struct rln_mm_cmd {
	u_int8_t	cmd_letter;	/* Command letter */
	u_int8_t	cmd_seq;	/* Incremented on each command */
#define RLN_MAXSEQ		0x7c
	u_int8_t	cmd_fn;		/* Function number */
	u_int8_t	cmd_error;	/* Reserved */
};
#define RLN_MM_CMD(l,n)		((((unsigned int)l)<<8) | ((unsigned int)n))
#define RLN_MM_CMD_LETTER(cmd)	((unsigned char)(((cmd) & 0xff00)>>8))
#define RLN_MM_CMD_FUNCTION(cmd) ((unsigned char)((cmd) & 0xff))
#define RLN_CMDCODE(letter, num) ((((letter) & 0xff) << 8) | ((num) & 0xff))

/* Initialise card, and set operational parameters. */
struct rln_mm_init {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_INIT 			{ 'A', 0, 0, 0 }
	u_int8_t	enaddr[6];
	u_int8_t	opmode;
#define RLN_MM_INIT_OPMODE_NORMAL		0
#define RLN_MM_INIT_OPMODE_PROMISC		1
#define RLN_MM_INIT_OPMODE_PROTOCOL		2
	u_int8_t	stationtype;		/* RLN_STATIONTYPE_... */
	u_int8_t	hop_period;
	u_int8_t	bfreq;
	u_int8_t	sfreq;
	u_char		channel    : 4;		/* lower bits */
	u_char		subchannel : 4;		/* upper bits */
	char		mastername[11];
	u_char		sec1       : 4;		/* default 3 */
	u_char		domain     : 4;		/* default 0 */
	u_int8_t	sec2;			/* default 2 */
	u_int8_t	sec3;			/* default 1 */
	u_int8_t	sync_to;		/* 1 if roaming */
	u_int8_t	xxx_pad;		/* zero */
	char		syncname[11];
};

/* Result of initialisation. */
struct rln_mm_initted {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_INITTED 			{ 'a', 0, 0, 0 }
	u_int8_t	xxx;
};

/* Start searching for other masters. */
struct rln_mm_search {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_SEARCH			{ 'A', 0, 1, 0 }
	u_int8_t	xxx1[23];
	u_char		xxx2       : 4;
	u_char		domain     : 4;
	u_int8_t	roaming;
	u_int8_t	xxx3;			/* default 0 */
	u_int8_t	xxx4;			/* default 1 */
	u_int8_t	xxx5;			/* default 0 */
	u_int8_t	xxx6[11];
};

/* Notification that searching has started. */
struct rln_mm_searching {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_SEARCHING		{ 'a', 0, 1, 0 }
	u_int8_t	xxx;
};

/* Terminate search. */
#define RLN_MM_ABORTSEARCH		{ 'A', 0, 3, 0 }

/* Station synchronised to a master. */
struct rln_mm_synchronised {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_SYNCHRONISED		{ 'a', 0, 4, 0 }
	u_char		channel    : 4;		/* lower bits */
	u_char		subchannel : 4;		/* upper bits */
	char		mastername[11];
	u_int8_t	enaddr[6];
};

/* Station lost synchronisation with a master. */
#define RLN_MM_UNSYNCHRONISED		{ 'a', 0, 5, 0 }

/* Send card to sleep. (See rln_wakeup().) */
struct rln_mm_standby {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_STANDBY			{ 'A', 0, 6, 0 }
	u_int8_t	xxx;			/* default 0 */
};

/* Set ITO (inactivity timeout timer). */
struct rln_mm_setito {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_SETITO			{ 'A', 0, 7, 0 }
	u_int8_t	xxx;			/* default 3 */
	u_int8_t	timeout;
	u_char		bd_wakeup : 1;
	u_char		pm_sync : 7;
	u_int8_t	sniff_time;
};

/* ITO acknowledgment */
#define RLN_MM_GOTITO			{ 'a', 0, 7, 0 }

/* Send keepalive protocol message (?). */
#define RLN_MM_SENDKEEPALIVE		{ 'A', 0, 8, 0 }

/* Set multicast mode. */
struct rln_mm_multicast {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_MULTICAST		{ 'A', 0, 9, 0 }
	u_int8_t	enable;
};

/* Ack multicast mode change. */
#define RLN_MM_MULTICASTING		{ 'a', 0, 9, 0 }

/* Request statistics. */
#define RLN_MM_GETSTATS			{ 'A', 0, 11, 0 }

/* Statistics results. */
#define RLN_MM_GOTSTATS			{ 'a', 0, 11, 0 }

/* Set security ID used in channel. */
struct rln_mm_setsecurity {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_SETSECURITY		{ 'A', 0, 12, 0 }
	u_int8_t	sec1;
	u_int8_t	sec2;
	u_int8_t	sec3;
};

/* Ack set security ID. */
#define RLN_MM_GOTSECURITY		{ 'a', 0, 12, 0 }

/* Request firmware version. */
#define RLN_MM_GETPROMVERSION		{ 'A', 0, 13, 0 }

/* Reply with firmware version. */
struct rln_mm_gotpromversion {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_GOTPROMVERSION		{ 'a', 0, 13, 0 }
	u_int8_t	xxx;			/* sizeof version? */
	char		version[7];
};

/* Request station's MAC address (same as ethernet). */
#define RLN_MM_GETENADDR		{ 'A', 0, 14, 0 }

/* Reply with station's MAC address. */
struct rln_mm_gotenaddr {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_GOTENADDR		{ 'a', 0, 14, 0 }
	u_int8_t	xxx;
	u_int8_t	enaddr[6];
};

/* Tune various channel parameters. */
struct rln_mm_setmagic {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_SETMAGIC			{ 'A', 0, 16, 0 }
	u_char		fairness_slot : 3;
	u_char		deferral_slot : 5;
	u_int8_t	regular_mac_retry;	/* default 0x07 */
	u_int8_t	frag_mac_retry;		/* default 0x0a */
	u_int8_t	regular_mac_qfsk;	/* default 0x02 */
	u_int8_t	frag_mac_qfsk;		/* default 0x05 */
	u_int8_t	xxx1;			/* default 0xff */
	u_int8_t	xxx2;			/* default 0xff */
	u_int8_t	xxx3;			/* default 0xff */
	u_int8_t	xxx4;			/* zero */
};

/* Ack channel tuning. */
#define RLN_MM_GOTMAGIC			{ 'a', 0, 16, 0 }

/* Set roaming parameters - used when multiple masters available. */
struct rln_mm_setroaming {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_SETROAMING		{ 'A', 0, 17, 0 }
	u_int8_t	sync_alarm;
	u_int8_t	retry_thresh;
	u_int8_t	rssi_threshold;
	u_int8_t	xxx1;			/* default 0x5a */
	u_int8_t	sync_rssi_threshold;
	u_int8_t	xxx2;			/* default 0xa5 */
	u_int8_t	missed_sync;
};

/* Ack roaming parameter change. */
#define RLN_MM_GOTROAMING		{ 'a', 0, 17, 0 }

#define RLN_MM_ROAMING			{ 'a', 0, 18, 0 }
#define RLN_MM_ROAM			{ 'A', 0, 19, 0 }

/* Hardware fault notification. (Usually the antenna.) */
#define RLN_MM_FAULT			{ 'a', 0, 20, 0 }

#define RLN_MM_EEPROM_PROTECT		{ 'A', 0, 23, 0 }
#define RLN_MM_EEPROM_PROTECTED		{ 'a', 0, 23, 0 }
#define RLN_MM_EEPROM_UNPROTECT		{ 'A', 0, 24, 0 }
#define RLN_MM_EEPROM_UNPROTECTED	{ 'a', 0, 24, 0 }

/* Receive hop statistics. */
#define RLN_MM_HOP_STATISTICS		{ 'a', 0, 35, 0 }

/* Transmit a frame on the channel. */
struct rln_mm_sendpacket {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_SENDPACKET		{ 'B', 0, 0, 0 }
	u_int8_t	mode;
#define RLN_MM_SENDPACKET_MODE_BIT7	0x80
#define RLN_MM_SENDPACKET_MODE_ZFIRST	0x20
#define RLN_MM_SENDPACKET_MODE_QFSK	0x03
	u_int8_t	power;			/* default 0x70 */
	u_int8_t	length_lo;
	u_int8_t	length_hi;
	u_int8_t	xxx1;			/* default 0 */
	u_int8_t	xxx2;			/* default 0 */
	u_int8_t	sequence;		/* must increment */
	u_int8_t	xxx3;			/* default 0 */
};

/* Ack packet transmission. */
#define RLN_MM_SENTPACKET		{ 'b', 0, 0, 0 }

/* Notification of frame received from channel. */
struct rln_mm_recvpacket {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_RECVPACKET		{ 'b', 0, 1, 0 }
	u_int8_t	xxx[8];
};

/* Disable hopping. (?) */
struct rln_mm_disablehopping {
	struct		rln_mm_cmd mm_cmd;
#define RLN_MM_DISABLEHOPPING		{ 'C', 0, 9, 0 }
	u_int8_t	hopflag;
#define RLN_MM_DISABLEHOPPING_HOPFLAG_DISABLE	0x52
};