Subversion Repositories HelenOS

Rev

Rev 4743 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4163 mejdrech 1
/*
2
 * Copyright (c) 2009 Lukas Mejdrech
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 *
9
 * - Redistributions of source code must retain the above copyright
10
 *   notice, this list of conditions and the following disclaimer.
11
 * - Redistributions in binary form must reproduce the above copyright
12
 *   notice, this list of conditions and the following disclaimer in the
13
 *   documentation and/or other materials provided with the distribution.
14
 * - The name of the author may not be used to endorse or promote products
15
 *   derived from this software without specific prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
 */
28
 
29
/** @addtogroup dp8390
30
 *  @{
31
 */
32
 
4723 mejdrech 33
/** @file
4756 mejdrech 34
 *  DP8390 network interface types and structures ports.
4723 mejdrech 35
 */
36
 
4163 mejdrech 37
#ifndef __NET_NETIF_DP8390_PORT_H__
38
#define __NET_NETIF_DP8390_PORT_H__
39
 
40
#include <errno.h>
4192 mejdrech 41
#include <mem.h>
4163 mejdrech 42
#include <stdio.h>
43
#include <libarch/ddi.h>
44
#include <sys/types.h>
45
 
4756 mejdrech 46
/** Macro for difining functions.
47
 *  @param[in] function The function type and name definition.
48
 *  @param[in] params The function parameters definition.
49
 */
4163 mejdrech 50
#define _PROTOTYPE( function, params ) function params
51
 
4756 mejdrech 52
/** Success error code.
53
 */
4163 mejdrech 54
#define OK	EOK
55
 
4756 mejdrech 56
/** Type definition of the unsigned byte.
57
 */
4163 mejdrech 58
typedef uint8_t u8_t;
4756 mejdrech 59
 
60
/** Type definition of the unsigned short.
61
 */
4163 mejdrech 62
typedef uint16_t u16_t;
63
 
4756 mejdrech 64
/** Compares two memory blocks.
65
 *  @param[in] first The first memory block.
66
 *  @param[in] second The second memory block.
67
 *  @param[in] size The blocks size in bytes.
68
 *  @returns 0 if equeal.
69
 *  @returns -1 if the first is greater than the second.
70
 *  @returns 1 if the second is greater than the first.
71
 */
4192 mejdrech 72
#define memcmp( first, second, size )	bcmp(( char * ) ( first ), ( char * ) ( second ), ( size ))
4163 mejdrech 73
 
4756 mejdrech 74
/** Reads 1 byte.
75
 *  @param[in] port The address to be read.
76
 *  @returns The read value.
77
 */
4163 mejdrech 78
#define inb( port )	pio_read_8(( ioport8_t * ) ( port ))
4756 mejdrech 79
 
80
/** Reads 1 word (2 bytes).
81
 *  @param[in] port The address to be read.
82
 *  @returns The read value.
83
 */
4163 mejdrech 84
#define inw( port )	pio_read_16(( ioport16_t * ) ( port ))
4756 mejdrech 85
 
86
/** Writes 1 byte.
87
 *  @param[in] port The address to be written.
88
 *  @param[in] value The value to be written.
89
 */
4163 mejdrech 90
#define outb( port, value )	pio_write_8(( ioport8_t * ) ( port ), ( value ))
4756 mejdrech 91
 
92
/** Writes 1 word (2 bytes).
93
 *  @param[in] port The address to be written.
94
 *  @param[in] value The value to be written.
95
 */
4163 mejdrech 96
#define outw( port, value )	pio_write_16(( ioport16_t * ) ( port ), ( value ))
97
 
4756 mejdrech 98
/** Prints out the driver critical error.
99
 *  Does not call the system panic().
100
 */
4192 mejdrech 101
#define panic( ... )	printf( "%s%s%d", __VA_ARGS__ )
4163 mejdrech 102
 
4756 mejdrech 103
/** Copies a memory block.
104
 *  @param proc The source process. Ignored parameter.
105
 *  @param src_s Ignored parameter.
106
 *  @param[in] src The source address.
107
 *  @param me The current proces. Ignored parameter.
108
 *  @param dst_s Ignored parameter.
109
 *  @param[in] dst The destination address.
110
 *  @param[in] bytes The block size in bytes.
111
 *  @returns EOK.
112
 */
4192 mejdrech 113
#define sys_vircopy( proc, src_s, src, me, dst_s, dst, bytes )	({ memcpy(( void * )( dst ), ( void * )( src ), ( bytes )); EOK; })
4756 mejdrech 114
 
115
/** Reads a memory block byte by byte.
116
 *  @param[in] port The address to be written.
117
 *  @param proc The source process. Ignored parameter.
118
 *  @param[in] dst The destination address.
119
 *  @param[in] bytes The block size in bytes.
120
 */
121
#define do_vir_insb( port, proc, dst, bytes )	insb(( port ), ( void * )( dst ), ( bytes ))
122
 
123
/** Reads a memory block word by word (2 bytes).
124
 *  @param[in] port The address to be written.
125
 *  @param proc The source process. Ignored parameter.
126
 *  @param[in] dst The destination address.
127
 *  @param[in] bytes The block size in bytes.
128
 */
129
#define do_vir_insw( port, proc, dst, bytes )	insw(( port ), ( void * )( dst ), ( bytes ))
130
 
131
/** Writes a memory block byte by byte.
132
 *  @param[in] port The address to be written.
133
 *  @param proc The source process. Ignored parameter.
134
 *  @param[in] src The source address.
135
 *  @param[in] bytes The block size in bytes.
136
 */
4192 mejdrech 137
#define do_vir_outsb( port, proc, src, bytes )	outsb(( port ), ( void * )( src ), ( bytes ))
4756 mejdrech 138
 
139
/** Writes a memory block word by word (2 bytes).
140
 *  @param[in] port The address to be written.
141
 *  @param proc The source process. Ignored parameter.
142
 *  @param[in] src The source address.
143
 *  @param[in] bytes The block size in bytes.
144
 */
4192 mejdrech 145
#define do_vir_outsw( port, proc, src, bytes )	outsw(( port ), ( void * )( src ), ( bytes ))
146
 
4163 mejdrech 147
/* com.h */
148
/* Bits in 'DL_MODE' field of DL requests. */
149
#  define DL_NOMODE		0x0
150
#  define DL_PROMISC_REQ	0x2
151
#  define DL_MULTI_REQ		0x4
152
#  define DL_BROAD_REQ		0x8
153
 
154
/* const.h */
4756 mejdrech 155
/** True value.
156
 */
4163 mejdrech 157
#define TRUE               1	/* used for turning integers into Booleans */
4756 mejdrech 158
 
159
/** False value.
160
 */
4163 mejdrech 161
#define FALSE              0	/* used for turning integers into Booleans */
4756 mejdrech 162
 
163
/** No number value.
164
 */
4163 mejdrech 165
#define NO_NUM        0x8000	/* used as numerical argument to panic() */
166
 
167
/* devio.h */
4192 mejdrech 168
//typedef u16_t port_t;
4756 mejdrech 169
/** Type definition of a port.
170
 */
4192 mejdrech 171
typedef int port_t;
4163 mejdrech 172
 
173
/* dl_eth.h */
4756 mejdrech 174
/** Ethernet statistics.
175
 */
4163 mejdrech 176
typedef struct eth_stat
177
{
4756 mejdrech 178
	/** Number of receive errors.
179
	 */
180
	unsigned long ets_recvErr;
181
	/** Number of send error.
182
	 */
183
	unsigned long ets_sendErr;
184
	/** Number of buffer overwrite warnings.
185
	 */
186
	unsigned long ets_OVW;
187
	/** Number of crc errors of read.
188
	 */
189
	unsigned long ets_CRCerr;
190
	/** Number of frames not alligned (number of bits % 8 != 0).
191
	 */
192
	unsigned long ets_frameAll;
193
	/** Number of packets missed due to slow processing.
194
	 */
195
	unsigned long ets_missedP;
196
	/** Number of packets received.
197
	 */
198
	unsigned long ets_packetR;
199
	/** Number of packets transmitted.
200
	 */
201
	unsigned long ets_packetT;
202
	/** Number of transmission defered (Tx was busy).
203
	 */
204
	unsigned long ets_transDef;
205
	/** Number of collissions.
206
	 */
207
	unsigned long ets_collision;
208
	/** Number of Tx aborted due to excess collisions.
209
	 */
210
	unsigned long ets_transAb;
211
	/** Number of carrier sense lost.
212
	 */
213
	unsigned long ets_carrSense;
214
	/** Number of FIFO underruns (processor too busy).
215
	 */
216
	unsigned long ets_fifoUnder;
217
	/** Number of FIFO overruns (processor too busy).
218
	 */
219
	unsigned long ets_fifoOver;
220
	/** Number of times unable to transmit collision sig.
221
	 */
222
	unsigned long ets_CDheartbeat;
223
	/** Number of times out of window collision.
224
	 */
225
	unsigned long ets_OWC;
4163 mejdrech 226
} eth_stat_t;
227
 
228
/* errno.h */
4756 mejdrech 229
/** Generic error.
230
 */
4163 mejdrech 231
#define EGENERIC     EINVAL
232
 
233
/* ether.h */
4756 mejdrech 234
/** Minimum Ethernet packet size in bytes.
235
 */
4163 mejdrech 236
#define ETH_MIN_PACK_SIZE		  60
4756 mejdrech 237
 
238
/** Maximum Ethernet packet size in bytes.
239
 */
4163 mejdrech 240
#define ETH_MAX_PACK_SIZE_TAGGED	1518
241
 
4756 mejdrech 242
/** Ethernet address type definition.
243
 */
4163 mejdrech 244
typedef struct ether_addr
245
{
4756 mejdrech 246
	/** Address data.
247
	 */
4163 mejdrech 248
	u8_t ea_addr[6];
249
} ether_addr_t;
250
 
251
/* type.h */
4756 mejdrech 252
/** Type definition of the physical addresses and lengths in bytes.
253
 */
254
typedef unsigned long phys_bytes;
4163 mejdrech 255
 
4756 mejdrech 256
/** Type definition of the virtual addresses and lengths in bytes.
257
 */
258
typedef unsigned int vir_bytes;
259
 
260
/** Type definition of the input/output vector.
261
 */
4163 mejdrech 262
typedef struct {
4756 mejdrech 263
	/** Address of an I/O buffer.
264
	 */
265
	vir_bytes iov_addr;
266
	/** Sizeof an I/O buffer.
267
	 */
268
	vir_bytes iov_size;
4163 mejdrech 269
} iovec_t;
270
 
271
#endif
272
 
273
/** @}
274
 */