OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_47/] [or1ksim/] [peripheral/] [ethernet_i.h] - Blame information for rev 1146

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 346 erez
/* ethernet_i.h -- Definition of internal types and structures for Ethernet MAC
2
   Copyright (C) 2001 Erez Volk, erez@mailandnews.comopencores.org
3
 
4
   This file is part of OpenRISC 1000 Architectural Simulator.
5
 
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 2 of the License, or
9
   (at your option) any later version.
10
 
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
 
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
*/
20
 
21
#ifndef __OR1KSIM_PERIPHERAL_ETHERNET_I_H
22
#define __OR1KSIM_PERIPHERAL_ETHERNET_I_H
23
 
24
#include "ethernet.h"
25
#include "config.h"
26 849 markom
 
27 867 markom
#if HAVE_ETH_PHY
28 702 ivang
#include <netpacket/packet.h>
29 849 markom
#endif /* HAVE_ETH_PHY */
30 702 ivang
#include <sys/ioctl.h>
31
#include <sys/socket.h>
32
#include <net/if.h>
33 346 erez
 
34
/*
35
 * Ethernet protocol definitions
36
 */
37
#if HAVE_NET_ETHERNET_H
38
# include <net/ethernet.h>
39
#else /* !HAVE_NET_ETHERNET_H -*/
40
 
41
#include <sys/types.h>
42
 
43 1146 phoenix
#ifdef __CYGWIN__
44
/* define some missing cygwin defines.
45
 *
46
 * NOTE! there is no nonblocking socket option implemented in cygwin.dll
47
 *       so defining MSG_DONTWAIT is just (temporary) workaround !!!
48
 */
49
#define MSG_DONTWAIT  0x40
50
#define ETH_HLEN      14
51
#endif /* __CYGWIN__ */
52
 
53 702 ivang
#define ETH_ALEN    6
54 346 erez
 
55
struct ether_addr
56
{
57
  u_int8_t ether_addr_octet[ETH_ALEN];
58
};
59
 
60
struct ether_header
61
{
62
  u_int8_t  ether_dhost[ETH_ALEN];      /* destination eth addr */
63
  u_int8_t  ether_shost[ETH_ALEN];      /* source ether addr    */
64
  u_int16_t ether_type;                 /* packet type ID field */
65
};
66
 
67
/* Ethernet protocol ID's */
68
#define ETHERTYPE_PUP           0x0200          /* Xerox PUP */
69
#define ETHERTYPE_IP            0x0800          /* IP */
70
#define ETHERTYPE_ARP           0x0806          /* Address resolution */
71
#define ETHERTYPE_REVARP        0x8035          /* Reverse ARP */
72
 
73
#define ETHER_ADDR_LEN  ETH_ALEN                 /* size of ethernet addr */
74
#define ETHER_TYPE_LEN  2                        /* bytes in type field */
75
#define ETHER_CRC_LEN   4                        /* bytes in CRC field */
76
#define ETHER_HDR_LEN   ETH_HLEN                 /* total octets in header */
77
#define ETHER_MIN_LEN   (ETH_ZLEN + ETHER_CRC_LEN) /* min packet length */
78
#define ETHER_MAX_LEN   (ETH_FRAME_LEN + ETHER_CRC_LEN) /* max packet length */
79
 
80
/* make sure ethenet length is valid */
81
#define ETHER_IS_VALID_LEN(foo) \
82
        ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)
83
 
84
/*
85
 * The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have
86
 * (type-ETHERTYPE_TRAIL)*512 bytes of data followed
87
 * by an ETHER type (as given above) and then the (variable-length) header.
88
 */
89
#define ETHERTYPE_TRAIL         0x1000          /* Trailer packet */
90
#define ETHERTYPE_NTRAILER      16
91
 
92
#define ETHERMTU        ETH_DATA_LEN
93
#define ETHERMIN        (ETHER_MIN_LEN-ETHER_HDR_LEN-ETHER_CRC_LEN)
94
 
95
#endif /* HAVE_NET_ETHERNET_H */
96
 
97
 
98
/*
99
 * Implementatino of Ethernet MAC Registers and State
100
 */
101 695 ivang
#define ETH_TXSTATE_IDLE        0
102
#define ETH_TXSTATE_WAIT4BD     10
103
#define ETH_TXSTATE_READFIFO    20
104
#define ETH_TXSTATE_TRANSMIT    30
105
 
106
#define ETH_RXSTATE_IDLE        0
107
#define ETH_RXSTATE_WAIT4BD     10
108
#define ETH_RXSTATE_RECV        20
109
#define ETH_RXSTATE_WRITEFIFO   30
110 702 ivang
 
111
#define ETH_RTX_FILE    0
112
#define ETH_RTX_SOCK    1
113 889 ivang
#define ETH_RTX_VAPI    2
114 702 ivang
 
115
#define ETH_MAXPL   0x10000
116
 
117 889 ivang
enum { ETH_VAPI_DATA = 0,
118
       ETH_VAPI_CTRL,
119
       ETH_NUM_VAPI_IDS };
120
 
121 346 erez
struct eth_device
122
{
123
  /* Base address in memory */
124
  unsigned long baseaddr;
125
 
126
  /* Which Ethernet MAC is this? */
127
  unsigned eth_number;
128
 
129
  /* Which DMA controller is this MAC connected to */
130
  unsigned dma;
131
        unsigned tx_channel;
132
        unsigned rx_channel;
133
 
134 702 ivang
  /* Our address */
135
  unsigned char mac_address[ETH_ALEN];
136
 
137
  /* interrupt line */
138
  unsigned long mac_int;
139 346 erez
 
140 889 ivang
  /* VAPI ID */
141
  unsigned long base_vapi_id;
142
 
143 346 erez
  /* RX and TX file names and handles */
144
  const char *rxfile, *txfile;
145
        int txfd;
146
        int rxfd;
147
        off_t loopback_offset;
148
 
149 702 ivang
    int rtx_sock;
150
    int rtx_type;
151
    struct ifreq ifr;
152
    fd_set rfds, wfds;
153
 
154 346 erez
        /* Current TX state */
155
        struct
156
        {
157 695 ivang
            unsigned long state;
158
            unsigned long bd_index;
159
            unsigned long bd;
160
            unsigned long bd_addr;
161
            unsigned working, waiting_for_dma, error;
162 702 ivang
            long packet_length;
163 695 ivang
            unsigned minimum_length, maximum_length;
164
            unsigned add_crc;
165 702 ivang
            unsigned crc_dly;
166 695 ivang
            unsigned long crc_value;
167 702 ivang
            long bytes_left, bytes_sent;
168 346 erez
        } tx;
169
 
170
        /* Current RX state */
171
        struct
172
        {
173 695 ivang
            unsigned long state;
174
            unsigned long bd_index;
175
            unsigned long bd;
176 702 ivang
            unsigned long bd_addr;
177 695 ivang
            int fd;
178
            off_t *offset;
179
            unsigned working, error, waiting_for_dma;
180 702 ivang
            long packet_length, bytes_read, bytes_left;
181 346 erez
        } rx;
182
 
183
  /* Visible registers */
184
  struct
185
  {
186
    unsigned long moder;
187
    unsigned long int_source;
188
    unsigned long int_mask;
189
    unsigned long ipgt;
190
    unsigned long ipgr1;
191
    unsigned long ipgr2;
192
    unsigned long packetlen;
193
    unsigned long collconf;
194 418 erez
    unsigned long tx_bd_num;
195 346 erez
    unsigned long controlmoder;
196
    unsigned long miimoder;
197
    unsigned long miicommand;
198
    unsigned long miiaddress;
199
    unsigned long miitx_data;
200
    unsigned long miirx_data;
201
    unsigned long miistatus;
202 744 simons
    unsigned long hash0;
203
    unsigned long hash1;
204 346 erez
 
205 695 ivang
    /* Buffer descriptors */
206
    unsigned long bd_ram[ETH_BD_SPACE / 4];
207 346 erez
  } regs;
208 695 ivang
 
209 702 ivang
    unsigned char rx_buff[ETH_MAXPL];
210
    unsigned char tx_buff[ETH_MAXPL];
211
    unsigned char lo_buff[ETH_MAXPL];
212 346 erez
};
213
 
214
#endif /* __OR1KSIM_PERIPHERAL_ETHERNET_I_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.