iPXE
rdc.h
Go to the documentation of this file.
1#ifndef _RDC_H
2#define _RDC_H
3
4/** @file
5 *
6 * RDC R6040 network driver
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11
12#include <stdint.h>
13#include <ipxe/if_ether.h>
14#include <ipxe/mii.h>
15
16/** RDC BAR size */
17#define RDC_BAR_SIZE 256
18
19/** An RDC descriptor */
21 /** Flags */
23 /** Length */
25 /** Address */
27 /** Next descriptor */
29 /** Reserved */
31} __attribute__ (( packed ));
32
33/** Descriptor is owned by NIC */
34#define RDC_FL_OWNED 0x8000
35
36/** Packet OK */
37#define RDC_FL_OK 0x4000
38
39/** MAC control register 0 */
40#define RDC_MCR0 0x00
41#define RDC_MCR0_FD 0x8000 /**< Full duplex */
42#define RDC_MCR0_TXEN 0x1000 /**< Transmit enable */
43#define RDC_MCR0_PROMISC 0x0020 /**< Promiscuous mode */
44#define RDC_MCR0_RXEN 0x0002 /**< Receive enable */
45
46/** MAC control register 1 */
47#define RDC_MCR1 0x04
48#define RDC_MCR1_RST 0x0001 /**< MAC reset */
49
50/** Maximum time to wait for reset */
51#define RDC_RESET_MAX_WAIT_MS 10
52
53/** MAC transmit poll command register */
54#define RDC_MTPR 0x14
55#define RDC_MTPR_TM2TX 0x0001 /**< Trigger MAC to transmit */
56
57/** MAC receive buffer size register */
58#define RDC_MRBSR 0x18
59
60/** MAC MDIO control register */
61#define RDC_MMDIO 0x20
62#define RDC_MMDIO_MIIWR 0x4000 /**< MDIO write */
63#define RDC_MMDIO_MIIRD 0x2000 /**< MDIO read */
64#define RDC_MMDIO_PHYAD(x) ( (x) << 8 ) /**< PHY address */
65#define RDC_MMDIO_REGAD(x) ( (x) << 0 ) /**< Register address */
66
67/** Maximum time to wait for an MII read or write */
68#define RDC_MII_MAX_WAIT_US 2048
69
70/** MAC MDIO read data register */
71#define RDC_MMRD 0x24
72
73/** MAC MDIO write data register */
74#define RDC_MMWD 0x28
75
76/** MAC transmit descriptor start address */
77#define RDC_MTDSA 0x2c
78
79/** MAC receive descriptor start address */
80#define RDC_MRDSA 0x34
81
82/** MAC descriptor start address low half */
83#define RDC_MxDSA_LO 0x0
84
85/** MAC descriptor start address low half */
86#define RDC_MxDSA_HI 0x4
87
88/** MAC interrupt status register */
89#define RDC_MISR 0x3c
90#define RDC_MIRQ_LINK 0x0200 /**< Link status changed */
91#define RDC_MIRQ_TX 0x0010 /**< Transmit complete */
92#define RDC_MIRQ_RX_EARLY 0x0008 /**< Receive early interrupt */
93#define RDC_MIRQ_RX_EMPTY 0x0002 /**< Receive descriptor unavailable */
94#define RDC_MIRQ_RX 0x0001 /**< Receive complete */
95
96/** MAC interrupt enable register */
97#define RDC_MIER 0x40
98
99/** MAC address word 0 */
100#define RDC_MID0 0x68
101
102/** MAC address word 1 */
103#define RDC_MID1 0x6a
104
105/** MAC address word 2 */
106#define RDC_MID2 0x6c
107
108/** MAC PHY status change configuration register */
109#define RDC_MPSCCR 0x88
110#define RDC_MPSCCR_EN 0x8000 /**< PHY status change enable */
111#define RDC_MPSCCR_PHYAD(x) ( (x) << 8 ) /**< PHY address */
112#define RDC_MPSCCR_SLOW 0x0007 /**< Poll slowly */
113
114/** MAC state machine register */
115#define RDC_MACSM 0xac
116#define RDC_MACSM_RST 0x0002 /**< Reset state machine */
117
118/** Time to wait after resetting MAC state machine */
119#define RDC_MACSM_RESET_DELAY_MS 10
120
121/** A MAC address */
122union rdc_mac {
123 /** Raw bytes */
125 /** MIDx registers */
127};
128
129/** A descriptor ring */
130struct rdc_ring {
131 /** Descriptors */
133 /** Descriptor ring DMA mapping */
135 /** Producer index */
136 unsigned int prod;
137 /** Consumer index */
138 unsigned int cons;
139
140 /** Number of descriptors */
141 unsigned int count;
142 /** Start address register 0 */
143 unsigned int reg;
144};
145
146/**
147 * Initialise descriptor ring
148 *
149 * @v ring Descriptor ring
150 * @v count Number of descriptors
151 * @v reg Start address register 0
152 */
153static inline __attribute__ (( always_inline )) void
154rdc_init_ring ( struct rdc_ring *ring, unsigned int count, unsigned int reg ) {
155
156 ring->count = count;
157 ring->reg = reg;
158}
159
160/** Number of transmit descriptors
161 *
162 * This is a policy decision.
163 */
164#define RDC_NUM_TX_DESC 16
165
166/** Number of receive descriptors
167 *
168 * This is a policy decision.
169 */
170#define RDC_NUM_RX_DESC 8
171
172/** Receive buffer length */
173#define RDC_RX_MAX_LEN ( ETH_FRAME_LEN + 4 /* VLAN */ + 4 /* CRC */ )
174
175/** An RDC network card */
176struct rdc_nic {
177 /** Registers */
178 void *regs;
179 /** DMA device */
181 /** MII interface */
183 /** MII device */
185
186 /** Transmit descriptor ring */
187 struct rdc_ring tx;
188 /** Receive descriptor ring */
189 struct rdc_ring rx;
190 /** Receive I/O buffers */
192};
193
194#endif /* _RDC_H */
unsigned short uint16_t
Definition stdint.h:11
unsigned int uint32_t
Definition stdint.h:12
unsigned char uint8_t
Definition stdint.h:10
static unsigned int count
Number of entries.
Definition dwmac.h:220
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define ETH_ALEN
Definition if_ether.h:9
#define __attribute__(x)
Definition compiler.h:10
Media Independent Interface.
static unsigned int unsigned int reg
Definition myson.h:162
static void rdc_init_ring(struct rdc_ring *ring, unsigned int count, unsigned int reg)
Initialise descriptor ring.
Definition rdc.h:154
#define RDC_NUM_RX_DESC
Number of receive descriptors.
Definition rdc.h:170
A DMA-capable device.
Definition dma.h:48
A DMA mapping.
Definition dma.h:33
A persistent I/O buffer.
Definition iobuf.h:38
An MII device.
Definition mii.h:50
An MII interface.
Definition mii.h:44
An RDC descriptor.
Definition rdc.h:20
uint32_t reserved
Reserved.
Definition rdc.h:30
uint16_t len
Length.
Definition rdc.h:24
uint16_t flags
Flags.
Definition rdc.h:22
uint32_t next
Next descriptor.
Definition rdc.h:28
uint32_t addr
Address.
Definition rdc.h:26
An RDC network card.
Definition rdc.h:176
struct mii_device mii
MII device.
Definition rdc.h:184
struct mii_interface mdio
MII interface.
Definition rdc.h:182
void * regs
Registers.
Definition rdc.h:178
struct io_buffer * rx_iobuf[RDC_NUM_RX_DESC]
Receive I/O buffers.
Definition rdc.h:191
struct rdc_ring tx
Transmit descriptor ring.
Definition rdc.h:187
struct rdc_ring rx
Receive descriptor ring.
Definition rdc.h:189
struct dma_device * dma
DMA device.
Definition rdc.h:180
A descriptor ring.
Definition rdc.h:130
struct dma_mapping map
Descriptor ring DMA mapping.
Definition rdc.h:134
unsigned int cons
Consumer index.
Definition rdc.h:138
unsigned int reg
Start address register 0.
Definition rdc.h:143
unsigned int count
Number of descriptors.
Definition rdc.h:141
struct rdc_descriptor * desc
Descriptors.
Definition rdc.h:132
unsigned int prod
Producer index.
Definition rdc.h:136
A MAC address.
Definition rdc.h:122
uint16_t mid[ETH_ALEN/2]
MIDx registers.
Definition rdc.h:126
uint8_t raw[ETH_ALEN]
Raw bytes.
Definition rdc.h:124