1 |
1626 |
jcastillo |
/*
|
2 |
|
|
** *************************************************************************
|
3 |
|
|
**
|
4 |
|
|
**
|
5 |
|
|
** R C L A N M T L . H $Revision: 1.1 $
|
6 |
|
|
**
|
7 |
|
|
**
|
8 |
|
|
** RedCreek I2O LAN Message Transport Layer header file.
|
9 |
|
|
**
|
10 |
|
|
** ---------------------------------------------------------------------
|
11 |
|
|
** --- Copyright (c) 1997-1999, RedCreek Communications Inc. ---
|
12 |
|
|
** --- All rights reserved. ---
|
13 |
|
|
** ---------------------------------------------------------------------
|
14 |
|
|
**
|
15 |
|
|
** File Description:
|
16 |
|
|
**
|
17 |
|
|
** Header file for host I2O (Intelligent I/O) LAN message transport layer
|
18 |
|
|
** API and data types.
|
19 |
|
|
**
|
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.
|
24 |
|
|
|
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.
|
29 |
|
|
|
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 |
|
|
**
|
34 |
|
|
** *************************************************************************
|
35 |
|
|
*/
|
36 |
|
|
|
37 |
|
|
#ifndef RCLANMTL_H
|
38 |
|
|
#define RCLANMTL_H
|
39 |
|
|
|
40 |
|
|
/* Linux specific includes */
|
41 |
|
|
#define kprintf printk
|
42 |
|
|
#ifdef RC_LINUX_MODULE /* linux modules need non-library version of string functions */
|
43 |
|
|
#include <linux/string.h>
|
44 |
|
|
#else
|
45 |
|
|
#include <string.h>
|
46 |
|
|
#endif
|
47 |
|
|
|
48 |
|
|
/* PCI/45 Configuration space values */
|
49 |
|
|
#define RC_PCI45_VENDOR_ID 0x4916
|
50 |
|
|
#define RC_PCI45_DEVICE_ID 0x1960
|
51 |
|
|
|
52 |
|
|
|
53 |
|
|
/* RedCreek API function return values */
|
54 |
|
|
#define RC_RTN_NO_ERROR 0
|
55 |
|
|
#define RC_RTN_I2O_NOT_INIT 1
|
56 |
|
|
#define RC_RTN_FREE_Q_EMPTY 2
|
57 |
|
|
#define RC_RTN_TCB_ERROR 3
|
58 |
|
|
#define RC_RTN_TRANSACTION_ERROR 4
|
59 |
|
|
#define RC_RTN_ADAPTER_ALREADY_INIT 5
|
60 |
|
|
#define RC_RTN_MALLOC_ERROR 6
|
61 |
|
|
#define RC_RTN_ADPTR_NOT_REGISTERED 7
|
62 |
|
|
#define RC_RTN_MSG_REPLY_TIMEOUT 8
|
63 |
|
|
#define RC_RTN_NO_I2O_STATUS 9
|
64 |
|
|
#define RC_RTN_NO_FIRM_VER 10
|
65 |
|
|
#define RC_RTN_NO_LINK_SPEED 11
|
66 |
|
|
|
67 |
|
|
/* Driver capability flags */
|
68 |
|
|
#define WARM_REBOOT_CAPABLE 0x01
|
69 |
|
|
|
70 |
|
|
/* scalar data types */
|
71 |
|
|
typedef unsigned char U8;
|
72 |
|
|
typedef unsigned char* PU8;
|
73 |
|
|
typedef unsigned short U16;
|
74 |
|
|
typedef unsigned short* PU16;
|
75 |
|
|
typedef unsigned long U32;
|
76 |
|
|
typedef unsigned long* PU32;
|
77 |
|
|
typedef unsigned long BF;
|
78 |
|
|
typedef int RC_RETURN;
|
79 |
|
|
|
80 |
|
|
|
81 |
|
|
/*
|
82 |
|
|
** type PFNWAITCALLBACK
|
83 |
|
|
**
|
84 |
|
|
** pointer to void function - type used for WaitCallback in some functions
|
85 |
|
|
*/
|
86 |
|
|
typedef void (*PFNWAITCALLBACK)(void); /* void argument avoids compiler complaint */
|
87 |
|
|
|
88 |
|
|
/*
|
89 |
|
|
** type PFNTXCALLBACK
|
90 |
|
|
**
|
91 |
|
|
** Pointer to user's transmit callback function. This user function is
|
92 |
|
|
** called from RCProcI2OMsgQ() when packet have been transmitted from buffers
|
93 |
|
|
** given in the RCI2OSendPacket() function. BufferContext is a pointer to
|
94 |
|
|
** an array of 32 bit context values. These are the values the user assigned
|
95 |
|
|
** and passed in the TCB to the RCI2OSendPacket() function. PcktCount
|
96 |
|
|
** indicates the number of buffer context values in the BufferContext[] array.
|
97 |
|
|
** The User's TransmitCallbackFunction should recover (put back in free queue)
|
98 |
|
|
** the packet buffers associated with the buffer context values.
|
99 |
|
|
*/
|
100 |
|
|
typedef void (*PFNTXCALLBACK)(U32 Status,
|
101 |
|
|
U16 PcktCount,
|
102 |
|
|
PU32 BufferContext,
|
103 |
|
|
U16 AdaterID);
|
104 |
|
|
|
105 |
|
|
/*
|
106 |
|
|
** type PFNRXCALLBACK
|
107 |
|
|
**
|
108 |
|
|
** Pointer to user's receive callback function. This user function
|
109 |
|
|
** is called from RCProcI2OMsgQ() when packets have been received into
|
110 |
|
|
** previously posted packet buffers throught the RCPostRecvBuffers() function.
|
111 |
|
|
** The received callback function should process the Packet Descriptor Block
|
112 |
|
|
** pointed to by PacketDescBlock. See Packet Decription Block below.
|
113 |
|
|
*/
|
114 |
|
|
typedef void (*PFNRXCALLBACK)(U32 Status,
|
115 |
|
|
U8 PktCount,
|
116 |
|
|
U32 BucketsRemain,
|
117 |
|
|
PU32 PacketDescBlock,
|
118 |
|
|
U16 AdapterID);
|
119 |
|
|
|
120 |
|
|
/*
|
121 |
|
|
** type PFNCALLBACK
|
122 |
|
|
**
|
123 |
|
|
** Pointer to user's generic callback function. This user function
|
124 |
|
|
** can be passed to LANReset or LANShutdown and is called when the
|
125 |
|
|
** the reset or shutdown is complete.
|
126 |
|
|
** Param1 and Param2 are invalid for LANReset and LANShutdown.
|
127 |
|
|
*/
|
128 |
|
|
typedef void (*PFNCALLBACK)(U32 Status,
|
129 |
|
|
U32 Param1,
|
130 |
|
|
U32 Param2,
|
131 |
|
|
U16 AdapterID);
|
132 |
|
|
|
133 |
|
|
/*
|
134 |
|
|
** Status - Transmit and Receive callback status word
|
135 |
|
|
**
|
136 |
|
|
** A 32 bit Status is returned to the TX and RX callback functions. This value
|
137 |
|
|
** contains both the reply status and the detailed status as follows:
|
138 |
|
|
**
|
139 |
|
|
** 32 24 16 0
|
140 |
|
|
** +------+------+------------+
|
141 |
|
|
** | Reply| | Detailed |
|
142 |
|
|
** |Status| 0 | Status |
|
143 |
|
|
** +------+------+------------+
|
144 |
|
|
**
|
145 |
|
|
** Reply Status and Detailed Status of zero indicates No Errors.
|
146 |
|
|
*/
|
147 |
|
|
/* reply message status defines */
|
148 |
|
|
#define I2O_REPLY_STATUS_SUCCESS 0x00
|
149 |
|
|
#define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER 0x02
|
150 |
|
|
#define I2O_REPLY_STATUS_TRANSACTION_ERROR 0x0A
|
151 |
|
|
|
152 |
|
|
|
153 |
|
|
/* DetailedStatusCode defines */
|
154 |
|
|
#define I2O_LAN_DSC_SUCCESS 0x0000
|
155 |
|
|
#define I2O_LAN_DSC_DEVICE_FAILURE 0x0001
|
156 |
|
|
#define I2O_LAN_DSC_DESTINATION_NOT_FOUND 0x0002
|
157 |
|
|
#define I2O_LAN_DSC_TRANSMIT_ERROR 0x0003
|
158 |
|
|
#define I2O_LAN_DSC_TRANSMIT_ABORTED 0x0004
|
159 |
|
|
#define I2O_LAN_DSC_RECEIVE_ERROR 0x0005
|
160 |
|
|
#define I2O_LAN_DSC_RECEIVE_ABORTED 0x0006
|
161 |
|
|
#define I2O_LAN_DSC_DMA_ERROR 0x0007
|
162 |
|
|
#define I2O_LAN_DSC_BAD_PACKET_DETECTED 0x0008
|
163 |
|
|
#define I2O_LAN_DSC_OUT_OF_MEMORY 0x0009
|
164 |
|
|
#define I2O_LAN_DSC_BUCKET_OVERRUN 0x000A
|
165 |
|
|
#define I2O_LAN_DSC_IOP_INTERNAL_ERROR 0x000B
|
166 |
|
|
#define I2O_LAN_DSC_CANCELED 0x000C
|
167 |
|
|
#define I2O_LAN_DSC_INVALID_TRANSACTION_CONTEXT 0x000D
|
168 |
|
|
#define I2O_LAN_DSC_DESTINATION_ADDRESS_DETECTED 0x000E
|
169 |
|
|
#define I2O_LAN_DSC_DESTINATION_ADDRESS_OMITTED 0x000F
|
170 |
|
|
#define I2O_LAN_DSC_PARTIAL_PACKET_RETURNED 0x0010
|
171 |
|
|
|
172 |
|
|
|
173 |
|
|
/*
|
174 |
|
|
** Packet Description Block (Received packets)
|
175 |
|
|
**
|
176 |
|
|
** A pointer to this block structure is returned to the ReceiveCallback
|
177 |
|
|
** function. It contains the list of packet buffers which have either been
|
178 |
|
|
** filled with a packet or returned to host due to a LANReset function.
|
179 |
|
|
** Currently there will only be one packet per receive bucket (buffer) posted.
|
180 |
|
|
**
|
181 |
|
|
** 32 24 0
|
182 |
|
|
** +-----------------------+ -\
|
183 |
|
|
** | Buffer 1 Context | \
|
184 |
|
|
** +-----------------------+ \
|
185 |
|
|
** | 0xC0000000 | / First Bucket Descriptor
|
186 |
|
|
** +-----+-----------------+ /
|
187 |
|
|
** | 0 | packet 1 length | /
|
188 |
|
|
** +-----------------------+ -\
|
189 |
|
|
** | Buffer 2 Context | \
|
190 |
|
|
** +-----------------------+ \
|
191 |
|
|
** | 0xC0000000 | / Second Bucket Descriptor
|
192 |
|
|
** +-----+-----------------+ /
|
193 |
|
|
** | 0 | packet 2 length | /
|
194 |
|
|
** +-----+-----------------+ -
|
195 |
|
|
** | ... | ----- more bucket descriptors
|
196 |
|
|
** +-----------------------+ -\
|
197 |
|
|
** | Buffer n Context | \
|
198 |
|
|
** +-----------------------+ \
|
199 |
|
|
** | 0xC0000000 | / Last Bucket Descriptor
|
200 |
|
|
** +-----+-----------------+ /
|
201 |
|
|
** | 0 | packet n length | /
|
202 |
|
|
** +-----+-----------------+ -
|
203 |
|
|
**
|
204 |
|
|
** Buffer Context values are those given to adapter in the TCB on calls to
|
205 |
|
|
** RCPostRecvBuffers().
|
206 |
|
|
**
|
207 |
|
|
*/
|
208 |
|
|
|
209 |
|
|
|
210 |
|
|
|
211 |
|
|
/*
|
212 |
|
|
** Transaction Control Block (TCB) structure
|
213 |
|
|
**
|
214 |
|
|
** A structure like this is filled in by the user and passed by reference to
|
215 |
|
|
** RCI2OSendPacket() and RCPostRecvBuffers() functions. Minimum size is five
|
216 |
|
|
** 32-bit words for one buffer with one segment descriptor.
|
217 |
|
|
** MAX_NMBR_POST_BUFFERS_PER_MSG defines the maximum single segment buffers
|
218 |
|
|
** that can be described in a given TCB.
|
219 |
|
|
**
|
220 |
|
|
** 32 0
|
221 |
|
|
** +-----------------------+
|
222 |
|
|
** | Buffer Count | Number of buffers in the TCB
|
223 |
|
|
** +-----------------------+
|
224 |
|
|
** | Buffer 1 Context | first buffer reference
|
225 |
|
|
** +-----------------------+
|
226 |
|
|
** | Buffer 1 Seg Count | number of segments in buffer
|
227 |
|
|
** +-----------------------+
|
228 |
|
|
** | Buffer 1 Seg Desc 1 | first segment descriptor (size, physical address)
|
229 |
|
|
** +-----------------------+
|
230 |
|
|
** | ... | more segment descriptors (size, physical address)
|
231 |
|
|
** +-----------------------+
|
232 |
|
|
** | Buffer 1 Seg Desc n | last segment descriptor (size, physical address)
|
233 |
|
|
** +-----------------------+
|
234 |
|
|
** | Buffer 2 Context | second buffer reference
|
235 |
|
|
** +-----------------------+
|
236 |
|
|
** | Buffer 2 Seg Count | number of segments in buffer
|
237 |
|
|
** +-----------------------+
|
238 |
|
|
** | Buffer 2 Seg Desc 1 | segment descriptor (size, physical address)
|
239 |
|
|
** +-----------------------+
|
240 |
|
|
** | ... | more segment descriptors (size, physical address)
|
241 |
|
|
** +-----------------------+
|
242 |
|
|
** | Buffer 2 Seg Desc n |
|
243 |
|
|
** +-----------------------+
|
244 |
|
|
** | ... | more buffer descriptor blocks ...
|
245 |
|
|
** +-----------------------+
|
246 |
|
|
** | Buffer n Context |
|
247 |
|
|
** +-----------------------+
|
248 |
|
|
** | Buffer n Seg Count |
|
249 |
|
|
** +-----------------------+
|
250 |
|
|
** | Buffer n Seg Desc 1 |
|
251 |
|
|
** +-----------------------+
|
252 |
|
|
** | ... |
|
253 |
|
|
** +-----------------------+
|
254 |
|
|
** | Buffer n Seg Desc n |
|
255 |
|
|
** +-----------------------+
|
256 |
|
|
**
|
257 |
|
|
**
|
258 |
|
|
** A TCB for one contigous packet buffer would look like the following:
|
259 |
|
|
**
|
260 |
|
|
** 32 0
|
261 |
|
|
** +-----------------------+
|
262 |
|
|
** | 1 | one buffer in the TCB
|
263 |
|
|
** +-----------------------+
|
264 |
|
|
** | <user's Context> | user's buffer reference
|
265 |
|
|
** +-----------------------+
|
266 |
|
|
** | 1 | one segment buffer
|
267 |
|
|
** +-----------------------+ _
|
268 |
|
|
** | <buffer size> | size \
|
269 |
|
|
** +-----------------------+ \ segment descriptor
|
270 |
|
|
** | <physical address> | physical address of buffer /
|
271 |
|
|
** +-----------------------+ _/
|
272 |
|
|
**
|
273 |
|
|
*/
|
274 |
|
|
|
275 |
|
|
/* Buffer Segment Descriptor */
|
276 |
|
|
typedef struct
|
277 |
|
|
{
|
278 |
|
|
U32 size;
|
279 |
|
|
U32 phyAddress;
|
280 |
|
|
}
|
281 |
|
|
BSD, *PBSD;
|
282 |
|
|
|
283 |
|
|
typedef PU32 PRCTCB;
|
284 |
|
|
/*
|
285 |
|
|
** -------------------------------------------------------------------------
|
286 |
|
|
** Exported functions comprising the API to the LAN I2O message transport layer
|
287 |
|
|
** -------------------------------------------------------------------------
|
288 |
|
|
*/
|
289 |
|
|
|
290 |
|
|
|
291 |
|
|
/*
|
292 |
|
|
** InitRCI2OMsgLayer()
|
293 |
|
|
**
|
294 |
|
|
** Called once prior to using the I2O LAN message transport layer. User
|
295 |
|
|
** provides both the physical and virual address of a locked page buffer
|
296 |
|
|
** that is used as a private buffer for the RedCreek I2O message
|
297 |
|
|
** transport layer. This buffer must be a contigous memory block of a
|
298 |
|
|
** minimum of 16K bytes and long word aligned. The user also must provide
|
299 |
|
|
** the base address of the RedCreek PCI adapter assigned by BIOS or operating
|
300 |
|
|
** system. The user provided value AdapterID is a zero based index of the
|
301 |
|
|
** Ravlin 45/PCI adapter. This interface number is used in all subsequent API
|
302 |
|
|
** calls to identify which adpapter for which the function is intended.
|
303 |
|
|
** Up to sixteen interfaces are supported with this API.
|
304 |
|
|
**
|
305 |
|
|
** Inputs: AdapterID - interface number from 0 to 15
|
306 |
|
|
** pciBaseAddr - virual base address of PCI (set by BIOS)
|
307 |
|
|
** p_msgbuf - virual address to private message block (min. 16K)
|
308 |
|
|
** p_phymsgbuf - physical address of private message block
|
309 |
|
|
** TransmitCallbackFunction - address of user's TX callback function
|
310 |
|
|
** ReceiveCallbackFunction - address of user's RX callback function
|
311 |
|
|
**
|
312 |
|
|
*/
|
313 |
|
|
RC_RETURN RCInitI2OMsgLayer(U16 AdapterID, U32 pciBaseAddr,
|
314 |
|
|
PU8 p_msgbuf, PU8 p_phymsgbuf,
|
315 |
|
|
PFNTXCALLBACK TransmitCallbackFunction,
|
316 |
|
|
PFNRXCALLBACK ReceiveCallbackFunction,
|
317 |
|
|
PFNCALLBACK RebootCallbackFunction);
|
318 |
|
|
|
319 |
|
|
/*
|
320 |
|
|
** RCSetRavlinIPandMask()
|
321 |
|
|
**
|
322 |
|
|
** Set the Ravlin 45/PCI cards IP address and network mask.
|
323 |
|
|
**
|
324 |
|
|
** IP address and mask must be in network byte order.
|
325 |
|
|
** For example, IP address 1.2.3.4 and mask 255.255.255.0 would be
|
326 |
|
|
** 0x04030201 and 0x00FFFFFF on a little endian machine.
|
327 |
|
|
**
|
328 |
|
|
*/
|
329 |
|
|
RC_RETURN RCSetRavlinIPandMask(U16 AdapterID, U32 ipAddr, U32 netMask);
|
330 |
|
|
|
331 |
|
|
|
332 |
|
|
/*
|
333 |
|
|
** =========================================================================
|
334 |
|
|
** RCGetRavlinIPandMask()
|
335 |
|
|
**
|
336 |
|
|
** get the IP address and MASK from the card
|
337 |
|
|
**
|
338 |
|
|
** =========================================================================
|
339 |
|
|
*/
|
340 |
|
|
RC_RETURN
|
341 |
|
|
RCGetRavlinIPandMask(U16 AdapterID, PU32 pIpAddr, PU32 pNetMask,
|
342 |
|
|
PFNWAITCALLBACK WaitCallback);
|
343 |
|
|
|
344 |
|
|
/*
|
345 |
|
|
** RCProcI2OMsgQ()
|
346 |
|
|
**
|
347 |
|
|
** Called from user's polling loop or Interrupt Service Routine for a PCI
|
348 |
|
|
** interrupt from the RedCreek PCI adapter. User responsible for determining
|
349 |
|
|
** and hooking the PCI interrupt. This function will call the registered
|
350 |
|
|
** callback functions, TransmitCallbackFunction or ReceiveCallbackFunction,
|
351 |
|
|
** if a TX or RX transaction has completed.
|
352 |
|
|
*/
|
353 |
|
|
void RCProcI2OMsgQ(U16 AdapterID);
|
354 |
|
|
|
355 |
|
|
|
356 |
|
|
/*
|
357 |
|
|
** Disable and Enable I2O interrupts. I2O interrupts are enabled at Init time
|
358 |
|
|
** but can be disabled and re-enabled through these two function calls.
|
359 |
|
|
** Packets will still be put into any posted recieved buffers and packets will
|
360 |
|
|
** be sent through RCI2OSendPacket() functions. Disabling I2O interrupts
|
361 |
|
|
** will prevent hardware interrupt to host even though the outbound I2O msg
|
362 |
|
|
** queue is not emtpy.
|
363 |
|
|
*/
|
364 |
|
|
RC_RETURN RCEnableI2OInterrupts(U16 adapterID);
|
365 |
|
|
RC_RETURN RCDisableI2OInterrupts(U16 AdapterID);
|
366 |
|
|
|
367 |
|
|
|
368 |
|
|
/*
|
369 |
|
|
** RCPostRecvBuffers()
|
370 |
|
|
**
|
371 |
|
|
** Post user's page locked buffers for use by the PCI adapter to
|
372 |
|
|
** return ethernet packets received from the LAN. Transaction Control Block,
|
373 |
|
|
** provided by user, contains buffer descriptor(s) which includes a buffer
|
374 |
|
|
** context number along with buffer size and physical address. See TCB above.
|
375 |
|
|
** The buffer context and actual packet length are returned to the
|
376 |
|
|
** ReceiveCallbackFunction when packets have been received. Buffers posted
|
377 |
|
|
** to the RedCreek adapter are considered owned by the adapter until the
|
378 |
|
|
** context is return to user through the ReceiveCallbackFunction.
|
379 |
|
|
*/
|
380 |
|
|
RC_RETURN RCPostRecvBuffers(U16 AdapterID, PRCTCB pTransactionCtrlBlock);
|
381 |
|
|
#define MAX_NMBR_POST_BUFFERS_PER_MSG 32
|
382 |
|
|
|
383 |
|
|
/*
|
384 |
|
|
** RCI2OSendPacket()
|
385 |
|
|
**
|
386 |
|
|
** Send user's ethernet packet from a locked page buffer.
|
387 |
|
|
** Packet must have full MAC header, however without a CRC.
|
388 |
|
|
** Initiator context is a user provided value that is returned
|
389 |
|
|
** to the TransmitCallbackFunction when packet buffer is free.
|
390 |
|
|
** Transmit buffer are considered owned by the adapter until context's
|
391 |
|
|
** returned to user through the TransmitCallbackFunction.
|
392 |
|
|
*/
|
393 |
|
|
RC_RETURN RCI2OSendPacket(U16 AdapterID,
|
394 |
|
|
U32 context,
|
395 |
|
|
PRCTCB pTransactionCtrlBlock);
|
396 |
|
|
|
397 |
|
|
|
398 |
|
|
/* Ethernet Link Statistics structure */
|
399 |
|
|
typedef struct tag_RC_link_stats
|
400 |
|
|
{
|
401 |
|
|
U32 TX_good; /* good transmit frames */
|
402 |
|
|
U32 TX_maxcol; /* frames not TX due to MAX collisions */
|
403 |
|
|
U32 TX_latecol; /* frames not TX due to late collisions */
|
404 |
|
|
U32 TX_urun; /* frames not TX due to DMA underrun */
|
405 |
|
|
U32 TX_crs; /* frames TX with lost carrier sense */
|
406 |
|
|
U32 TX_def; /* frames deferred due to activity on link */
|
407 |
|
|
U32 TX_singlecol; /* frames TX with one and only on collision */
|
408 |
|
|
U32 TX_multcol; /* frames TX with more than one collision */
|
409 |
|
|
U32 TX_totcol; /* total collisions detected during TX */
|
410 |
|
|
U32 Rcv_good; /* good frames received */
|
411 |
|
|
U32 Rcv_CRCerr; /* frames RX and discarded with CRC errors */
|
412 |
|
|
U32 Rcv_alignerr; /* frames RX with alignment and CRC errors */
|
413 |
|
|
U32 Rcv_reserr; /* good frames discarded due to no RX buffer */
|
414 |
|
|
U32 Rcv_orun; /* RX frames lost due to FIFO overrun */
|
415 |
|
|
U32 Rcv_cdt; /* RX frames with collision during RX */
|
416 |
|
|
U32 Rcv_runt; /* RX frames shorter than 64 bytes */
|
417 |
|
|
}
|
418 |
|
|
RCLINKSTATS, *P_RCLINKSTATS;
|
419 |
|
|
|
420 |
|
|
/*
|
421 |
|
|
** RCGetLinkStatistics()
|
422 |
|
|
**
|
423 |
|
|
** Returns link statistics in user's structure at address StatsReturnAddr
|
424 |
|
|
** If given, not NULL, the function WaitCallback is called during the wait
|
425 |
|
|
** loop while waiting for the adapter to respond.
|
426 |
|
|
*/
|
427 |
|
|
RC_RETURN RCGetLinkStatistics(U16 AdapterID,
|
428 |
|
|
P_RCLINKSTATS StatsReturnAddr,
|
429 |
|
|
PFNWAITCALLBACK WaitCallback);
|
430 |
|
|
|
431 |
|
|
/*
|
432 |
|
|
** RCGetLinkStatus()
|
433 |
|
|
**
|
434 |
|
|
** Return link status, up or down, to user's location addressed by ReturnAddr.
|
435 |
|
|
** If given, not NULL, the function WaitCallback is called during the wait
|
436 |
|
|
** loop while waiting for the adapter to respond.
|
437 |
|
|
*/
|
438 |
|
|
RC_RETURN RCGetLinkStatus(U16 AdapterID,
|
439 |
|
|
PU32 pReturnStatus,
|
440 |
|
|
PFNWAITCALLBACK WaitCallback);
|
441 |
|
|
|
442 |
|
|
/* Link Status defines - value returned in pReturnStatus */
|
443 |
|
|
#define RC_LAN_LINK_STATUS_DOWN 0
|
444 |
|
|
#define RC_LAN_LINK_STATUS_UP 1
|
445 |
|
|
|
446 |
|
|
/*
|
447 |
|
|
** RCGetMAC()
|
448 |
|
|
**
|
449 |
|
|
** Get the current MAC address assigned to user. RedCreek Ravlin 45/PCI
|
450 |
|
|
** has two MAC addresses. One which is private to the PCI Card, and
|
451 |
|
|
** another MAC which is given to the user as its link layer MAC address. The
|
452 |
|
|
** adapter runs in promiscous mode because of the dual address requirement.
|
453 |
|
|
** The MAC address is returned to the unsigned char array pointer to by mac.
|
454 |
|
|
*/
|
455 |
|
|
RC_RETURN RCGetMAC(U16 AdapterID, PU8 mac, PFNWAITCALLBACK WaitCallback);
|
456 |
|
|
|
457 |
|
|
/*
|
458 |
|
|
** RCSetMAC()
|
459 |
|
|
**
|
460 |
|
|
** Set a new user port MAC address. This address will be returned on
|
461 |
|
|
** subsequent RCGetMAC() calls.
|
462 |
|
|
*/
|
463 |
|
|
RC_RETURN RCSetMAC(U16 AdapterID, PU8 mac);
|
464 |
|
|
|
465 |
|
|
/*
|
466 |
|
|
** RCSetLinkSpeed()
|
467 |
|
|
**
|
468 |
|
|
** set adapter's link speed based on given input code.
|
469 |
|
|
*/
|
470 |
|
|
RC_RETURN RCSetLinkSpeed(U16 AdapterID, U16 LinkSpeedCode);
|
471 |
|
|
/* Set link speed codes */
|
472 |
|
|
#define LNK_SPD_AUTO_NEG_NWAY 0
|
473 |
|
|
#define LNK_SPD_100MB_FULL 1
|
474 |
|
|
#define LNK_SPD_100MB_HALF 2
|
475 |
|
|
#define LNK_SPD_10MB_FULL 3
|
476 |
|
|
#define LNK_SPD_10MB_HALF 4
|
477 |
|
|
|
478 |
|
|
|
479 |
|
|
|
480 |
|
|
|
481 |
|
|
/*
|
482 |
|
|
** RCGetLinkSpeed()
|
483 |
|
|
**
|
484 |
|
|
** Return link speed code.
|
485 |
|
|
*/
|
486 |
|
|
/* Return link speed codes */
|
487 |
|
|
#define LNK_SPD_UNKNOWN 0
|
488 |
|
|
#define LNK_SPD_100MB_FULL 1
|
489 |
|
|
#define LNK_SPD_100MB_HALF 2
|
490 |
|
|
#define LNK_SPD_10MB_FULL 3
|
491 |
|
|
#define LNK_SPD_10MB_HALF 4
|
492 |
|
|
|
493 |
|
|
RC_RETURN
|
494 |
|
|
RCGetLinkSpeed(U16 AdapterID, PU32 pLinkSpeedCode, PFNWAITCALLBACK WaitCallback);
|
495 |
|
|
/*
|
496 |
|
|
** =========================================================================
|
497 |
|
|
** RCSetPromiscuousMode(U16 AdapterID, U16 Mode)
|
498 |
|
|
**
|
499 |
|
|
** Defined values for Mode:
|
500 |
|
|
** 0 - turn off promiscuous mode
|
501 |
|
|
** 1 - turn on promiscuous mode
|
502 |
|
|
**
|
503 |
|
|
** =========================================================================
|
504 |
|
|
*/
|
505 |
|
|
#define PROMISCUOUS_MODE_OFF 0
|
506 |
|
|
#define PROMISCUOUS_MODE_ON 1
|
507 |
|
|
RC_RETURN
|
508 |
|
|
RCSetPromiscuousMode(U16 AdapterID, U16 Mode);
|
509 |
|
|
/*
|
510 |
|
|
** =========================================================================
|
511 |
|
|
** RCGetPromiscuousMode(U16 AdapterID, PU32 pMode, PFNWAITCALLBACK WaitCallback)
|
512 |
|
|
**
|
513 |
|
|
** get promiscuous mode setting
|
514 |
|
|
**
|
515 |
|
|
** Possible return values placed in pMode:
|
516 |
|
|
** 0 = promisuous mode not set
|
517 |
|
|
** 1 = promisuous mode is set
|
518 |
|
|
**
|
519 |
|
|
** =========================================================================
|
520 |
|
|
*/
|
521 |
|
|
RC_RETURN
|
522 |
|
|
RCGetPromiscuousMode(U16 AdapterID, PU32 pMode, PFNWAITCALLBACK WaitCallback);
|
523 |
|
|
|
524 |
|
|
/*
|
525 |
|
|
** =========================================================================
|
526 |
|
|
** RCSetBroadcastMode(U16 AdapterID, U16 Mode)
|
527 |
|
|
**
|
528 |
|
|
** Defined values for Mode:
|
529 |
|
|
** 0 - turn off promiscuous mode
|
530 |
|
|
** 1 - turn on promiscuous mode
|
531 |
|
|
**
|
532 |
|
|
** =========================================================================
|
533 |
|
|
*/
|
534 |
|
|
#define BROADCAST_MODE_OFF 0
|
535 |
|
|
#define BROADCAST_MODE_ON 1
|
536 |
|
|
RC_RETURN
|
537 |
|
|
RCSetBroadcastMode(U16 AdapterID, U16 Mode);
|
538 |
|
|
/*
|
539 |
|
|
** =========================================================================
|
540 |
|
|
** RCGetBroadcastMode(U16 AdapterID, PU32 pMode, PFNWAITCALLBACK WaitCallback)
|
541 |
|
|
**
|
542 |
|
|
** get broadcast mode setting
|
543 |
|
|
**
|
544 |
|
|
** Possible return values placed in pMode:
|
545 |
|
|
** 0 = broadcast mode not set
|
546 |
|
|
** 1 = broadcast mode is set
|
547 |
|
|
**
|
548 |
|
|
** =========================================================================
|
549 |
|
|
*/
|
550 |
|
|
RC_RETURN
|
551 |
|
|
RCGetBroadcastMode(U16 AdapterID, PU32 pMode, PFNWAITCALLBACK WaitCallback);
|
552 |
|
|
/*
|
553 |
|
|
** =========================================================================
|
554 |
|
|
** RCReportDriverCapability(U16 AdapterID, U32 capability)
|
555 |
|
|
**
|
556 |
|
|
** Currently defined bits:
|
557 |
|
|
** WARM_REBOOT_CAPABLE 0x01
|
558 |
|
|
**
|
559 |
|
|
** =========================================================================
|
560 |
|
|
*/
|
561 |
|
|
RC_RETURN
|
562 |
|
|
RCReportDriverCapability(U16 AdapterID, U32 capability);
|
563 |
|
|
|
564 |
|
|
/*
|
565 |
|
|
** RCGetFirmwareVer()
|
566 |
|
|
**
|
567 |
|
|
** Return firmware version in the form "SoftwareVersion : Bt BootVersion"
|
568 |
|
|
**
|
569 |
|
|
** WARNING: user's space pointed to by pFirmString should be at least 60 bytes.
|
570 |
|
|
*/
|
571 |
|
|
RC_RETURN
|
572 |
|
|
RCGetFirmwareVer(U16 AdapterID, PU8 pFirmString, PFNWAITCALLBACK WaitCallback);
|
573 |
|
|
|
574 |
|
|
/*
|
575 |
|
|
** ----------------------------------------------
|
576 |
|
|
** LAN adapter Reset and Shutdown functions
|
577 |
|
|
** ----------------------------------------------
|
578 |
|
|
*/
|
579 |
|
|
/* resource flag bit assignments for RCResetLANCard() & RCShutdownLANCard() */
|
580 |
|
|
#define RC_RESOURCE_RETURN_POSTED_RX_BUCKETS 0x0001
|
581 |
|
|
#define RC_RESOURCE_RETURN_PEND_TX_BUFFERS 0x0002
|
582 |
|
|
|
583 |
|
|
/*
|
584 |
|
|
** RCResetLANCard()
|
585 |
|
|
**
|
586 |
|
|
** Reset LAN card operation. Causes a software reset of the ethernet
|
587 |
|
|
** controller and restarts the command and receive units. Depending on
|
588 |
|
|
** the ResourceFlags given, the buffers are either returned to the
|
589 |
|
|
** host with reply status of I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER and
|
590 |
|
|
** detailed status of I2O_LAN_DSC_CANCELED (new receive buffers must be
|
591 |
|
|
** posted after issuing this) OR the buffers are kept and reused by
|
592 |
|
|
** the ethernet controller. If CallbackFunction is not NULL, the function
|
593 |
|
|
** will be called when the reset is complete. If the CallbackFunction is
|
594 |
|
|
** NULL,a 1 will be put into the ReturnAddr after waiting for the reset
|
595 |
|
|
** to complete (please disable I2O interrupts during this method).
|
596 |
|
|
** Any outstanding transmit or receive buffers that are complete will be
|
597 |
|
|
** returned via the normal reply messages before the requested resource
|
598 |
|
|
** buffers are returned.
|
599 |
|
|
** A call to RCPostRecvBuffers() is needed to return the ethernet to full
|
600 |
|
|
** operation if the receive buffers were returned during LANReset.
|
601 |
|
|
** Note: The IOP status is not affected by a LAN reset.
|
602 |
|
|
*/
|
603 |
|
|
RC_RETURN RCResetLANCard(U16 AdapterID, U16 ResourceFlags, PU32 ReturnAddr, PFNCALLBACK CallbackFunction);
|
604 |
|
|
|
605 |
|
|
|
606 |
|
|
/*
|
607 |
|
|
** RCShutdownLANCard()
|
608 |
|
|
**
|
609 |
|
|
** Shutdown LAN card operation and put into an idle (suspended) state.
|
610 |
|
|
** The LAN card is restarted with RCResetLANCard() function.
|
611 |
|
|
** Depending on the ResourceFlags given, the buffers are either returned
|
612 |
|
|
** to the host with reply status of I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER
|
613 |
|
|
** and detailed status of I2O_LAN_DSC_CANCELED (new receive buffers must be
|
614 |
|
|
** posted after issuing this) OR the buffers are kept and reused by
|
615 |
|
|
** the ethernet controller. If CallbackFunction is not NULL, the function
|
616 |
|
|
** will be called when the reset is complete. If the CallbackFunction is
|
617 |
|
|
** NULL,a 1 will be put into the ReturnAddr after waiting for the reset
|
618 |
|
|
** to complete (please disable I2O interrupts during this method).
|
619 |
|
|
** Any outstanding transmit or receive buffers that are complete will be
|
620 |
|
|
** returned via the normal reply messages before the requested resource
|
621 |
|
|
** buffers are returned.
|
622 |
|
|
** Note: The IOP status is not affected by a LAN shutdown.
|
623 |
|
|
*/
|
624 |
|
|
RC_RETURN
|
625 |
|
|
RCShutdownLANCard(U16 AdapterID, U16 ResourceFlags, PU32 ReturnAddr, PFNCALLBACK CallbackFunction);
|
626 |
|
|
|
627 |
|
|
/*
|
628 |
|
|
** RCResetIOP();
|
629 |
|
|
** Initializes IOPState to I2O_IOP_STATE_RESET.
|
630 |
|
|
** Stops access to outbound message Q.
|
631 |
|
|
** Discards any outstanding transmit or posted receive buffers.
|
632 |
|
|
** Clears outbound message Q.
|
633 |
|
|
*/
|
634 |
|
|
RC_RETURN
|
635 |
|
|
RCResetIOP(U16 AdapterID);
|
636 |
|
|
|
637 |
|
|
#endif /* RCLANMTL_H */
|