* add p cc
[mascara-docs.git] / i386 / linux / linux-2.3.21 / drivers / net / rcif.h
bloba41f05aac20d5ca84c8a830d2585cec9ac899432
1 /*
2 ** *************************************************************************
3 **
4 **
5 ** R C I F . H
6 **
7 **
8 ** RedCreek InterFace include file.
9 **
10 ** ---------------------------------------------------------------------
11 ** --- Copyright (c) 1998-1999, RedCreek Communications Inc. ---
12 ** --- All rights reserved. ---
13 ** ---------------------------------------------------------------------
15 ** File Description:
17 ** Header file private ioctl commands.
20 ** This program is free software; you can redistribute it and/or modify
21 ** it under the terms of the GNU General Public License as published by
22 ** the Free Software Foundation; either version 2 of the License, or
23 ** (at your option) any later version.
25 ** This program is distributed in the hope that it will be useful,
26 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
27 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 ** GNU General Public License for more details.
30 ** You should have received a copy of the GNU General Public License
31 ** along with this program; if not, write to the Free Software
32 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
33 ** *************************************************************************
36 #ifndef RCIF_H
37 #define RCIF_H
39 /* The following protocol revision # should be incremented every time
40 a new protocol or new structures are used in this file. */
41 int USER_PROTOCOL_REV = 2; /* used to track different protocol revisions */
43 /* define a single TCB & buffer */
44 typedef struct /* a single buffer */
46 U32 context; /* context */
47 U32 scount; /* segment count */
48 U32 size; /* segment size */
49 U32 addr; /* segment physical address */
51 __attribute__((packed))
52 singleB, *psingleB ;
53 typedef struct /* a single TCB */
56 ** +-----------------------+
57 ** | 1 | one buffer in the TCB
58 ** +-----------------------+
59 ** | <user's Context> | user's buffer reference
60 ** +-----------------------+
61 ** | 1 | one segment buffer
62 ** +-----------------------+ _
63 ** | <buffer size> | size \
64 ** +-----------------------+ \ segment descriptor
65 ** | <physical address> | physical address of buffer /
66 ** +-----------------------+ _/
68 U32 bcount; /* buffer count */
69 singleB b; /* buffer */
72 __attribute__((packed))
73 singleTCB, *psingleTCB;
76 When adding new entries, please add all 5 related changes, since
77 it helps keep everything consistent:
78 1) User structure entry
79 2) User data entry
80 3) Structure short-cut entry
81 4) Data short-cut entry
82 5) Command identifier entry
84 For Example ("GETSPEED"):
85 1) struct RCgetspeed_tag { U32 LinkSpeedCode; } RCgetspeed;
86 2) struct RCgetspeed_tag *getspeed;
87 3) #define RCUS_GETSPEED data.RCgetspeed;
88 4) #define RCUD_GETSPEED _RC_user_data.getspeed
89 5) #define RCUC_GETSPEED 0x02
91 Notes for the "GETSPEED" entry, above:
92 1) RCgetspeed - RC{name}
93 RCgetspeed_tag - RC{name}_tag
94 LinkSpeedCode - create any structure format desired (not too large,
95 since memory will be unioned with all other entries)
96 2) RCgetspeed_tag - RC{name}_tag chosen in #1
97 getspeed - arbitrary name (ptr to structure in #1)
98 3) RCUS_GETSPEED - RCUS_{NAME} ("NAME" & "name" do not have to the same)
99 data.RCgetspeed - data.RC{name} ("RC{name}" from #1)
100 4) RCUD_GETSPEED - _RC_user_data.getspeed ("getspeed" from #2)
101 5) RCUC_GETSPEED - unique hex identifier entry.
104 typedef struct RC_user_tag RCuser_struct;
106 /* 1) User structure entry */
107 struct RC_user_tag
109 int cmd;
110 union
112 /* GETINFO structure */
113 struct RCgetinfo_tag {
114 unsigned long int mem_start;
115 unsigned long int mem_end;
116 unsigned long int base_addr;
117 unsigned char irq;
118 unsigned char dma;
119 unsigned char port;
120 } RCgetinfo; /* <---- RCgetinfo */
122 /* GETSPEED structure */
123 struct RCgetspeed_tag {
124 U32 LinkSpeedCode;
125 } RCgetspeed; /* <---- RCgetspeed */
127 /* SETSPEED structure */
128 struct RCsetspeed_tag {
129 U16 LinkSpeedCode;
130 } RCsetspeed; /* <---- RCsetspeed */
132 /* GETPROM structure */
133 struct RCgetprom_tag {
134 U32 PromMode;
135 } RCgetprom; /* <---- RCgetprom */
137 /* SETPROM structure */
138 struct RCsetprom_tag {
139 U16 PromMode;
140 } RCsetprom; /* <---- RCsetprom */
142 /* GETBROADCAST structure */
143 struct RCgetbroadcast_tag {
144 U32 BroadcastMode;
145 } RCgetbroadcast; /* <---- RCgetbroadcast */
147 /* SETBROADCAST structure */
148 struct RCsetbroadcast_tag {
149 U16 BroadcastMode;
150 } RCsetbroadcast; /* <---- RCsetbroadcast */
152 /* GETFIRMWAREVER structure */
153 #define FirmStringLen 80
154 struct RCgetfwver_tag {
155 U8 FirmString[FirmStringLen];
156 } RCgetfwver; /* <---- RCgetfwver */
158 /* GETIPANDMASK structure */
159 struct RCgetipnmask_tag {
160 U32 IpAddr;
161 U32 NetMask;
162 } RCgetipandmask; /* <---- RCgetipandmask */
164 /* SETIPANDMASK structure */
165 struct RCsetipnmask_tag {
166 U32 IpAddr;
167 U32 NetMask;
168 } RCsetipandmask; /* <---- RCsetipandmask */
170 /* GETMAC structure */
171 #define MAC_SIZE 10
172 struct RCgetmac_tag {
173 U8 mac[MAC_SIZE];
174 } RCgetmac; /* <---- RCgetmac */
176 /* SETMAC structure */
177 struct RCsetmac_tag {
178 U8 mac[MAC_SIZE];
179 } RCsetmac; /* <---- RCsetmac */
181 /* GETLINKSTATUS structure */
182 struct RCgetlnkstatus_tag {
183 U32 ReturnStatus;
184 } RCgetlnkstatus; /* <---- RCgetlnkstatus */
186 /* GETLINKSTATISTICS structure */
187 struct RCgetlinkstats_tag {
188 RCLINKSTATS StatsReturn;
189 } RCgetlinkstats; /* <---- RCgetlinkstats */
191 /* DEFAULT structure (when no command was recognized) */
192 struct RCdefault_tag {
193 int rc;
194 } RCdefault; /* <---- RCdefault */
196 } data;
198 }; /* struct RC_user_tag { ... } */
200 /* 2) User data entry */
201 /* RCUD = RedCreek User Data */
202 union RC_user_data_tag { /* structure tags used are taken from RC_user_tag structure above */
203 struct RCgetinfo_tag *getinfo;
204 struct RCgetspeed_tag *getspeed;
205 struct RCgetprom_tag *getprom;
206 struct RCgetbroadcast_tag *getbroadcast;
207 struct RCgetfwver_tag *getfwver;
208 struct RCgetipnmask_tag *getipandmask;
209 struct RCgetmac_tag *getmac;
210 struct RCgetlnkstatus_tag *getlinkstatus;
211 struct RCgetlinkstats_tag *getlinkstatistics;
212 struct RCdefault_tag *rcdefault;
213 struct RCsetspeed_tag *setspeed;
214 struct RCsetprom_tag *setprom;
215 struct RCsetbroadcast_tag *setbroadcast;
216 struct RCsetipnmask_tag *setipandmask;
217 struct RCsetmac_tag *setmac;
218 } _RC_user_data; /* declare as a global, so the defines below will work */
220 /* 3) Structure short-cut entry */
221 /* define structure short-cuts */ /* structure names are taken from RC_user_tag structure above */
222 #define RCUS_GETINFO data.RCgetinfo;
223 #define RCUS_GETSPEED data.RCgetspeed;
224 #define RCUS_GETPROM data.RCgetprom;
225 #define RCUS_GETBROADCAST data.RCgetbroadcast;
226 #define RCUS_GETFWVER data.RCgetfwver;
227 #define RCUS_GETIPANDMASK data.RCgetipandmask;
228 #define RCUS_GETMAC data.RCgetmac;
229 #define RCUS_GETLINKSTATUS data.RCgetlnkstatus;
230 #define RCUS_GETLINKSTATISTICS data.RCgetlinkstats;
231 #define RCUS_DEFAULT data.RCdefault;
232 #define RCUS_SETSPEED data.RCsetspeed;
233 #define RCUS_SETPROM data.RCsetprom;
234 #define RCUS_SETBROADCAST data.RCsetbroadcast;
235 #define RCUS_SETIPANDMASK data.RCsetipandmask;
236 #define RCUS_SETMAC data.RCsetmac;
238 /* 4) Data short-cut entry */
239 /* define data short-cuts */ /* pointer names are from RC_user_data_tag union (just below RC_user_tag) */
240 #define RCUD_GETINFO _RC_user_data.getinfo
241 #define RCUD_GETSPEED _RC_user_data.getspeed
242 #define RCUD_GETPROM _RC_user_data.getprom
243 #define RCUD_GETBROADCAST _RC_user_data.getbroadcast
244 #define RCUD_GETFWVER _RC_user_data.getfwver
245 #define RCUD_GETIPANDMASK _RC_user_data.getipandmask
246 #define RCUD_GETMAC _RC_user_data.getmac
247 #define RCUD_GETLINKSTATUS _RC_user_data.getlinkstatus
248 #define RCUD_GETLINKSTATISTICS _RC_user_data.getlinkstatistics
249 #define RCUD_DEFAULT _RC_user_data.rcdefault
250 #define RCUD_SETSPEED _RC_user_data.setspeed
251 #define RCUD_SETPROM _RC_user_data.setprom
252 #define RCUD_SETBROADCAST _RC_user_data.setbroadcast
253 #define RCUD_SETIPANDMASK _RC_user_data.setipandmask
254 #define RCUD_SETMAC _RC_user_data.setmac
256 /* 5) Command identifier entry */
257 /* define command identifiers */
258 #define RCUC_GETINFO 0x01
259 #define RCUC_GETSPEED 0x02
260 #define RCUC_GETFWVER 0x03
261 #define RCUC_GETIPANDMASK 0x04
262 #define RCUC_GETMAC 0x05
263 #define RCUC_GETLINKSTATUS 0x06
264 #define RCUC_GETLINKSTATISTICS 0x07
265 #define RCUC_GETPROM 0x14
266 #define RCUC_GETBROADCAST 0x15
267 #define RCUC_DEFAULT 0xff
268 #define RCUC_SETSPEED 0x08
269 #define RCUC_SETIPANDMASK 0x09
270 #define RCUC_SETMAC 0x0a
271 #define RCUC_SETPROM 0x16
272 #define RCUC_SETBROADCAST 0x17
274 /* define ioctl commands to use, when talking to RC 45/PCI driver */
275 #define RCU_PROTOCOL_REV SIOCDEVPRIVATE
276 #define RCU_COMMAND SIOCDEVPRIVATE+1
279 Intended use for the above defines is shown below (GETINFO, as this example):
281 RCuser_struct RCuser; // declare RCuser structure
282 struct ifreq ifr; // declare an interface request structure
284 RCuser.cmd = RCUC_GETINFO; // set user command to GETINFO
285 ifr->ifr_data = (caddr_t) &RCuser; // set point to user structure
287 sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); // get a socket
288 ioctl(sock, RCU_COMMAND, &ifr); // do ioctl on socket
290 RCUD_GETINFO = &RCuser.RCUS_GETINFO; // set data pointer for GETINFO
292 // print results
293 printf("memory 0x%lx-0x%lx, base address 0x%x, irq 0x%x\n",
294 RCUD_GETINFO->mem_start, RCUD_GETINFO->mem_end,
295 RCUD_GETINFO->base_addr, RCUD_GETINFO->irq);
298 #endif /* RCIF_H */