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
 */