xref: /openbmc/qemu/hw/net/e1000.c (revision 3aff6c2f)
1 /*
2  * QEMU e1000 emulation
3  *
4  * Software developer's manual:
5  * http://download.intel.com/design/network/manuals/8254x_GBe_SDM.pdf
6  *
7  * Nir Peleg, Tutis Systems Ltd. for Qumranet Inc.
8  * Copyright (c) 2008 Qumranet
9  * Based on work done by:
10  * Copyright (c) 2007 Dan Aloni
11  * Copyright (c) 2004 Antony T Curtis
12  *
13  * This library is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU Lesser General Public
15  * License as published by the Free Software Foundation; either
16  * version 2 of the License, or (at your option) any later version.
17  *
18  * This library is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21  * Lesser General Public License for more details.
22  *
23  * You should have received a copy of the GNU Lesser General Public
24  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
25  */
26 
27 
28 #include "hw/hw.h"
29 #include "hw/pci/pci.h"
30 #include "net/net.h"
31 #include "net/checksum.h"
32 #include "hw/loader.h"
33 #include "sysemu/sysemu.h"
34 #include "sysemu/dma.h"
35 #include "qemu/iov.h"
36 
37 #include "e1000_regs.h"
38 
39 #define E1000_DEBUG
40 
41 #ifdef E1000_DEBUG
42 enum {
43     DEBUG_GENERAL,	DEBUG_IO,	DEBUG_MMIO,	DEBUG_INTERRUPT,
44     DEBUG_RX,		DEBUG_TX,	DEBUG_MDIC,	DEBUG_EEPROM,
45     DEBUG_UNKNOWN,	DEBUG_TXSUM,	DEBUG_TXERR,	DEBUG_RXERR,
46     DEBUG_RXFILTER,     DEBUG_PHY,      DEBUG_NOTYET,
47 };
48 #define DBGBIT(x)	(1<<DEBUG_##x)
49 static int debugflags = DBGBIT(TXERR) | DBGBIT(GENERAL);
50 
51 #define	DBGOUT(what, fmt, ...) do { \
52     if (debugflags & DBGBIT(what)) \
53         fprintf(stderr, "e1000: " fmt, ## __VA_ARGS__); \
54     } while (0)
55 #else
56 #define	DBGOUT(what, fmt, ...) do {} while (0)
57 #endif
58 
59 #define IOPORT_SIZE       0x40
60 #define PNPMMIO_SIZE      0x20000
61 #define MIN_BUF_SIZE      60 /* Min. octets in an ethernet frame sans FCS */
62 
63 /* this is the size past which hardware will drop packets when setting LPE=0 */
64 #define MAXIMUM_ETHERNET_VLAN_SIZE 1522
65 /* this is the size past which hardware will drop packets when setting LPE=1 */
66 #define MAXIMUM_ETHERNET_LPE_SIZE 16384
67 
68 #define MAXIMUM_ETHERNET_HDR_LEN (14+4)
69 
70 /*
71  * HW models:
72  *  E1000_DEV_ID_82540EM works with Windows, Linux, and OS X <= 10.8
73  *  E1000_DEV_ID_82544GC_COPPER appears to work; not well tested
74  *  E1000_DEV_ID_82545EM_COPPER works with Linux and OS X >= 10.6
75  *  Others never tested
76  */
77 
78 typedef struct E1000State_st {
79     /*< private >*/
80     PCIDevice parent_obj;
81     /*< public >*/
82 
83     NICState *nic;
84     NICConf conf;
85     MemoryRegion mmio;
86     MemoryRegion io;
87 
88     uint32_t mac_reg[0x8000];
89     uint16_t phy_reg[0x20];
90     uint16_t eeprom_data[64];
91 
92     uint32_t rxbuf_size;
93     uint32_t rxbuf_min_shift;
94     struct e1000_tx {
95         unsigned char header[256];
96         unsigned char vlan_header[4];
97         /* Fields vlan and data must not be reordered or separated. */
98         unsigned char vlan[4];
99         unsigned char data[0x10000];
100         uint16_t size;
101         unsigned char sum_needed;
102         unsigned char vlan_needed;
103         uint8_t ipcss;
104         uint8_t ipcso;
105         uint16_t ipcse;
106         uint8_t tucss;
107         uint8_t tucso;
108         uint16_t tucse;
109         uint8_t hdr_len;
110         uint16_t mss;
111         uint32_t paylen;
112         uint16_t tso_frames;
113         char tse;
114         int8_t ip;
115         int8_t tcp;
116         char cptse;     // current packet tse bit
117     } tx;
118 
119     struct {
120         uint32_t val_in;	// shifted in from guest driver
121         uint16_t bitnum_in;
122         uint16_t bitnum_out;
123         uint16_t reading;
124         uint32_t old_eecd;
125     } eecd_state;
126 
127     QEMUTimer *autoneg_timer;
128 
129     QEMUTimer *mit_timer;      /* Mitigation timer. */
130     bool mit_timer_on;         /* Mitigation timer is running. */
131     bool mit_irq_level;        /* Tracks interrupt pin level. */
132     uint32_t mit_ide;          /* Tracks E1000_TXD_CMD_IDE bit. */
133 
134 /* Compatibility flags for migration to/from qemu 1.3.0 and older */
135 #define E1000_FLAG_AUTONEG_BIT 0
136 #define E1000_FLAG_MIT_BIT 1
137 #define E1000_FLAG_AUTONEG (1 << E1000_FLAG_AUTONEG_BIT)
138 #define E1000_FLAG_MIT (1 << E1000_FLAG_MIT_BIT)
139     uint32_t compat_flags;
140 } E1000State;
141 
142 typedef struct E1000BaseClass {
143     PCIDeviceClass parent_class;
144     uint16_t phy_id2;
145 } E1000BaseClass;
146 
147 #define TYPE_E1000_BASE "e1000-base"
148 
149 #define E1000(obj) \
150     OBJECT_CHECK(E1000State, (obj), TYPE_E1000_BASE)
151 
152 #define E1000_DEVICE_CLASS(klass) \
153      OBJECT_CLASS_CHECK(E1000BaseClass, (klass), TYPE_E1000_BASE)
154 #define E1000_DEVICE_GET_CLASS(obj) \
155     OBJECT_GET_CLASS(E1000BaseClass, (obj), TYPE_E1000_BASE)
156 
157 #define	defreg(x)	x = (E1000_##x>>2)
158 enum {
159     defreg(CTRL),	defreg(EECD),	defreg(EERD),	defreg(GPRC),
160     defreg(GPTC),	defreg(ICR),	defreg(ICS),	defreg(IMC),
161     defreg(IMS),	defreg(LEDCTL),	defreg(MANC),	defreg(MDIC),
162     defreg(MPC),	defreg(PBA),	defreg(RCTL),	defreg(RDBAH),
163     defreg(RDBAL),	defreg(RDH),	defreg(RDLEN),	defreg(RDT),
164     defreg(STATUS),	defreg(SWSM),	defreg(TCTL),	defreg(TDBAH),
165     defreg(TDBAL),	defreg(TDH),	defreg(TDLEN),	defreg(TDT),
166     defreg(TORH),	defreg(TORL),	defreg(TOTH),	defreg(TOTL),
167     defreg(TPR),	defreg(TPT),	defreg(TXDCTL),	defreg(WUFC),
168     defreg(RA),		defreg(MTA),	defreg(CRCERRS),defreg(VFTA),
169     defreg(VET),        defreg(RDTR),   defreg(RADV),   defreg(TADV),
170     defreg(ITR),
171 };
172 
173 static void
174 e1000_link_down(E1000State *s)
175 {
176     s->mac_reg[STATUS] &= ~E1000_STATUS_LU;
177     s->phy_reg[PHY_STATUS] &= ~MII_SR_LINK_STATUS;
178 }
179 
180 static void
181 e1000_link_up(E1000State *s)
182 {
183     s->mac_reg[STATUS] |= E1000_STATUS_LU;
184     s->phy_reg[PHY_STATUS] |= MII_SR_LINK_STATUS;
185 }
186 
187 static void
188 set_phy_ctrl(E1000State *s, int index, uint16_t val)
189 {
190     /*
191      * QEMU 1.3 does not support link auto-negotiation emulation, so if we
192      * migrate during auto negotiation, after migration the link will be
193      * down.
194      */
195     if (!(s->compat_flags & E1000_FLAG_AUTONEG)) {
196         return;
197     }
198     if ((val & MII_CR_AUTO_NEG_EN) && (val & MII_CR_RESTART_AUTO_NEG)) {
199         e1000_link_down(s);
200         s->phy_reg[PHY_STATUS] &= ~MII_SR_AUTONEG_COMPLETE;
201         DBGOUT(PHY, "Start link auto negotiation\n");
202         timer_mod(s->autoneg_timer, qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 500);
203     }
204 }
205 
206 static void
207 e1000_autoneg_timer(void *opaque)
208 {
209     E1000State *s = opaque;
210     if (!qemu_get_queue(s->nic)->link_down) {
211         e1000_link_up(s);
212     }
213     s->phy_reg[PHY_STATUS] |= MII_SR_AUTONEG_COMPLETE;
214     DBGOUT(PHY, "Auto negotiation is completed\n");
215 }
216 
217 static void (*phyreg_writeops[])(E1000State *, int, uint16_t) = {
218     [PHY_CTRL] = set_phy_ctrl,
219 };
220 
221 enum { NPHYWRITEOPS = ARRAY_SIZE(phyreg_writeops) };
222 
223 enum { PHY_R = 1, PHY_W = 2, PHY_RW = PHY_R | PHY_W };
224 static const char phy_regcap[0x20] = {
225     [PHY_STATUS] = PHY_R,	[M88E1000_EXT_PHY_SPEC_CTRL] = PHY_RW,
226     [PHY_ID1] = PHY_R,		[M88E1000_PHY_SPEC_CTRL] = PHY_RW,
227     [PHY_CTRL] = PHY_RW,	[PHY_1000T_CTRL] = PHY_RW,
228     [PHY_LP_ABILITY] = PHY_R,	[PHY_1000T_STATUS] = PHY_R,
229     [PHY_AUTONEG_ADV] = PHY_RW,	[M88E1000_RX_ERR_CNTR] = PHY_R,
230     [PHY_ID2] = PHY_R,		[M88E1000_PHY_SPEC_STATUS] = PHY_R
231 };
232 
233 /* PHY_ID2 documented in 8254x_GBe_SDM.pdf, pp. 250 */
234 static const uint16_t phy_reg_init[] = {
235     [PHY_CTRL] = 0x1140,
236     [PHY_STATUS] = 0x794d, /* link initially up with not completed autoneg */
237     [PHY_ID1] = 0x141, /* [PHY_ID2] configured per DevId, from e1000_reset() */
238     [PHY_1000T_CTRL] = 0x0e00,			[M88E1000_PHY_SPEC_CTRL] = 0x360,
239     [M88E1000_EXT_PHY_SPEC_CTRL] = 0x0d60,	[PHY_AUTONEG_ADV] = 0xde1,
240     [PHY_LP_ABILITY] = 0x1e0,			[PHY_1000T_STATUS] = 0x3c00,
241     [M88E1000_PHY_SPEC_STATUS] = 0xac00,
242 };
243 
244 static const uint32_t mac_reg_init[] = {
245     [PBA] =     0x00100030,
246     [LEDCTL] =  0x602,
247     [CTRL] =    E1000_CTRL_SWDPIN2 | E1000_CTRL_SWDPIN0 |
248                 E1000_CTRL_SPD_1000 | E1000_CTRL_SLU,
249     [STATUS] =  0x80000000 | E1000_STATUS_GIO_MASTER_ENABLE |
250                 E1000_STATUS_ASDV | E1000_STATUS_MTXCKOK |
251                 E1000_STATUS_SPEED_1000 | E1000_STATUS_FD |
252                 E1000_STATUS_LU,
253     [MANC] =    E1000_MANC_EN_MNG2HOST | E1000_MANC_RCV_TCO_EN |
254                 E1000_MANC_ARP_EN | E1000_MANC_0298_EN |
255                 E1000_MANC_RMCP_EN,
256 };
257 
258 /* Helper function, *curr == 0 means the value is not set */
259 static inline void
260 mit_update_delay(uint32_t *curr, uint32_t value)
261 {
262     if (value && (*curr == 0 || value < *curr)) {
263         *curr = value;
264     }
265 }
266 
267 static void
268 set_interrupt_cause(E1000State *s, int index, uint32_t val)
269 {
270     PCIDevice *d = PCI_DEVICE(s);
271     uint32_t pending_ints;
272     uint32_t mit_delay;
273 
274     s->mac_reg[ICR] = val;
275 
276     /*
277      * Make sure ICR and ICS registers have the same value.
278      * The spec says that the ICS register is write-only.  However in practice,
279      * on real hardware ICS is readable, and for reads it has the same value as
280      * ICR (except that ICS does not have the clear on read behaviour of ICR).
281      *
282      * The VxWorks PRO/1000 driver uses this behaviour.
283      */
284     s->mac_reg[ICS] = val;
285 
286     pending_ints = (s->mac_reg[IMS] & s->mac_reg[ICR]);
287     if (!s->mit_irq_level && pending_ints) {
288         /*
289          * Here we detect a potential raising edge. We postpone raising the
290          * interrupt line if we are inside the mitigation delay window
291          * (s->mit_timer_on == 1).
292          * We provide a partial implementation of interrupt mitigation,
293          * emulating only RADV, TADV and ITR (lower 16 bits, 1024ns units for
294          * RADV and TADV, 256ns units for ITR). RDTR is only used to enable
295          * RADV; relative timers based on TIDV and RDTR are not implemented.
296          */
297         if (s->mit_timer_on) {
298             return;
299         }
300         if (s->compat_flags & E1000_FLAG_MIT) {
301             /* Compute the next mitigation delay according to pending
302              * interrupts and the current values of RADV (provided
303              * RDTR!=0), TADV and ITR.
304              * Then rearm the timer.
305              */
306             mit_delay = 0;
307             if (s->mit_ide &&
308                     (pending_ints & (E1000_ICR_TXQE | E1000_ICR_TXDW))) {
309                 mit_update_delay(&mit_delay, s->mac_reg[TADV] * 4);
310             }
311             if (s->mac_reg[RDTR] && (pending_ints & E1000_ICS_RXT0)) {
312                 mit_update_delay(&mit_delay, s->mac_reg[RADV] * 4);
313             }
314             mit_update_delay(&mit_delay, s->mac_reg[ITR]);
315 
316             if (mit_delay) {
317                 s->mit_timer_on = 1;
318                 timer_mod(s->mit_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
319                           mit_delay * 256);
320             }
321             s->mit_ide = 0;
322         }
323     }
324 
325     s->mit_irq_level = (pending_ints != 0);
326     pci_set_irq(d, s->mit_irq_level);
327 }
328 
329 static void
330 e1000_mit_timer(void *opaque)
331 {
332     E1000State *s = opaque;
333 
334     s->mit_timer_on = 0;
335     /* Call set_interrupt_cause to update the irq level (if necessary). */
336     set_interrupt_cause(s, 0, s->mac_reg[ICR]);
337 }
338 
339 static void
340 set_ics(E1000State *s, int index, uint32_t val)
341 {
342     DBGOUT(INTERRUPT, "set_ics %x, ICR %x, IMR %x\n", val, s->mac_reg[ICR],
343         s->mac_reg[IMS]);
344     set_interrupt_cause(s, 0, val | s->mac_reg[ICR]);
345 }
346 
347 static int
348 rxbufsize(uint32_t v)
349 {
350     v &= E1000_RCTL_BSEX | E1000_RCTL_SZ_16384 | E1000_RCTL_SZ_8192 |
351          E1000_RCTL_SZ_4096 | E1000_RCTL_SZ_2048 | E1000_RCTL_SZ_1024 |
352          E1000_RCTL_SZ_512 | E1000_RCTL_SZ_256;
353     switch (v) {
354     case E1000_RCTL_BSEX | E1000_RCTL_SZ_16384:
355         return 16384;
356     case E1000_RCTL_BSEX | E1000_RCTL_SZ_8192:
357         return 8192;
358     case E1000_RCTL_BSEX | E1000_RCTL_SZ_4096:
359         return 4096;
360     case E1000_RCTL_SZ_1024:
361         return 1024;
362     case E1000_RCTL_SZ_512:
363         return 512;
364     case E1000_RCTL_SZ_256:
365         return 256;
366     }
367     return 2048;
368 }
369 
370 static void e1000_reset(void *opaque)
371 {
372     E1000State *d = opaque;
373     E1000BaseClass *edc = E1000_DEVICE_GET_CLASS(d);
374     uint8_t *macaddr = d->conf.macaddr.a;
375     int i;
376 
377     timer_del(d->autoneg_timer);
378     timer_del(d->mit_timer);
379     d->mit_timer_on = 0;
380     d->mit_irq_level = 0;
381     d->mit_ide = 0;
382     memset(d->phy_reg, 0, sizeof d->phy_reg);
383     memmove(d->phy_reg, phy_reg_init, sizeof phy_reg_init);
384     d->phy_reg[PHY_ID2] = edc->phy_id2;
385     memset(d->mac_reg, 0, sizeof d->mac_reg);
386     memmove(d->mac_reg, mac_reg_init, sizeof mac_reg_init);
387     d->rxbuf_min_shift = 1;
388     memset(&d->tx, 0, sizeof d->tx);
389 
390     if (qemu_get_queue(d->nic)->link_down) {
391         e1000_link_down(d);
392     }
393 
394     /* Some guests expect pre-initialized RAH/RAL (AddrValid flag + MACaddr) */
395     d->mac_reg[RA] = 0;
396     d->mac_reg[RA + 1] = E1000_RAH_AV;
397     for (i = 0; i < 4; i++) {
398         d->mac_reg[RA] |= macaddr[i] << (8 * i);
399         d->mac_reg[RA + 1] |= (i < 2) ? macaddr[i + 4] << (8 * i) : 0;
400     }
401     qemu_format_nic_info_str(qemu_get_queue(d->nic), macaddr);
402 }
403 
404 static void
405 set_ctrl(E1000State *s, int index, uint32_t val)
406 {
407     /* RST is self clearing */
408     s->mac_reg[CTRL] = val & ~E1000_CTRL_RST;
409 }
410 
411 static void
412 set_rx_control(E1000State *s, int index, uint32_t val)
413 {
414     s->mac_reg[RCTL] = val;
415     s->rxbuf_size = rxbufsize(val);
416     s->rxbuf_min_shift = ((val / E1000_RCTL_RDMTS_QUAT) & 3) + 1;
417     DBGOUT(RX, "RCTL: %d, mac_reg[RCTL] = 0x%x\n", s->mac_reg[RDT],
418            s->mac_reg[RCTL]);
419     qemu_flush_queued_packets(qemu_get_queue(s->nic));
420 }
421 
422 static void
423 set_mdic(E1000State *s, int index, uint32_t val)
424 {
425     uint32_t data = val & E1000_MDIC_DATA_MASK;
426     uint32_t addr = ((val & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT);
427 
428     if ((val & E1000_MDIC_PHY_MASK) >> E1000_MDIC_PHY_SHIFT != 1) // phy #
429         val = s->mac_reg[MDIC] | E1000_MDIC_ERROR;
430     else if (val & E1000_MDIC_OP_READ) {
431         DBGOUT(MDIC, "MDIC read reg 0x%x\n", addr);
432         if (!(phy_regcap[addr] & PHY_R)) {
433             DBGOUT(MDIC, "MDIC read reg %x unhandled\n", addr);
434             val |= E1000_MDIC_ERROR;
435         } else
436             val = (val ^ data) | s->phy_reg[addr];
437     } else if (val & E1000_MDIC_OP_WRITE) {
438         DBGOUT(MDIC, "MDIC write reg 0x%x, value 0x%x\n", addr, data);
439         if (!(phy_regcap[addr] & PHY_W)) {
440             DBGOUT(MDIC, "MDIC write reg %x unhandled\n", addr);
441             val |= E1000_MDIC_ERROR;
442         } else {
443             if (addr < NPHYWRITEOPS && phyreg_writeops[addr]) {
444                 phyreg_writeops[addr](s, index, data);
445             }
446             s->phy_reg[addr] = data;
447         }
448     }
449     s->mac_reg[MDIC] = val | E1000_MDIC_READY;
450 
451     if (val & E1000_MDIC_INT_EN) {
452         set_ics(s, 0, E1000_ICR_MDAC);
453     }
454 }
455 
456 static uint32_t
457 get_eecd(E1000State *s, int index)
458 {
459     uint32_t ret = E1000_EECD_PRES|E1000_EECD_GNT | s->eecd_state.old_eecd;
460 
461     DBGOUT(EEPROM, "reading eeprom bit %d (reading %d)\n",
462            s->eecd_state.bitnum_out, s->eecd_state.reading);
463     if (!s->eecd_state.reading ||
464         ((s->eeprom_data[(s->eecd_state.bitnum_out >> 4) & 0x3f] >>
465           ((s->eecd_state.bitnum_out & 0xf) ^ 0xf))) & 1)
466         ret |= E1000_EECD_DO;
467     return ret;
468 }
469 
470 static void
471 set_eecd(E1000State *s, int index, uint32_t val)
472 {
473     uint32_t oldval = s->eecd_state.old_eecd;
474 
475     s->eecd_state.old_eecd = val & (E1000_EECD_SK | E1000_EECD_CS |
476             E1000_EECD_DI|E1000_EECD_FWE_MASK|E1000_EECD_REQ);
477     if (!(E1000_EECD_CS & val))			// CS inactive; nothing to do
478 	return;
479     if (E1000_EECD_CS & (val ^ oldval)) {	// CS rise edge; reset state
480 	s->eecd_state.val_in = 0;
481 	s->eecd_state.bitnum_in = 0;
482 	s->eecd_state.bitnum_out = 0;
483 	s->eecd_state.reading = 0;
484     }
485     if (!(E1000_EECD_SK & (val ^ oldval)))	// no clock edge
486         return;
487     if (!(E1000_EECD_SK & val)) {		// falling edge
488         s->eecd_state.bitnum_out++;
489         return;
490     }
491     s->eecd_state.val_in <<= 1;
492     if (val & E1000_EECD_DI)
493         s->eecd_state.val_in |= 1;
494     if (++s->eecd_state.bitnum_in == 9 && !s->eecd_state.reading) {
495         s->eecd_state.bitnum_out = ((s->eecd_state.val_in & 0x3f)<<4)-1;
496         s->eecd_state.reading = (((s->eecd_state.val_in >> 6) & 7) ==
497             EEPROM_READ_OPCODE_MICROWIRE);
498     }
499     DBGOUT(EEPROM, "eeprom bitnum in %d out %d, reading %d\n",
500            s->eecd_state.bitnum_in, s->eecd_state.bitnum_out,
501            s->eecd_state.reading);
502 }
503 
504 static uint32_t
505 flash_eerd_read(E1000State *s, int x)
506 {
507     unsigned int index, r = s->mac_reg[EERD] & ~E1000_EEPROM_RW_REG_START;
508 
509     if ((s->mac_reg[EERD] & E1000_EEPROM_RW_REG_START) == 0)
510         return (s->mac_reg[EERD]);
511 
512     if ((index = r >> E1000_EEPROM_RW_ADDR_SHIFT) > EEPROM_CHECKSUM_REG)
513         return (E1000_EEPROM_RW_REG_DONE | r);
514 
515     return ((s->eeprom_data[index] << E1000_EEPROM_RW_REG_DATA) |
516            E1000_EEPROM_RW_REG_DONE | r);
517 }
518 
519 static void
520 putsum(uint8_t *data, uint32_t n, uint32_t sloc, uint32_t css, uint32_t cse)
521 {
522     uint32_t sum;
523 
524     if (cse && cse < n)
525         n = cse + 1;
526     if (sloc < n-1) {
527         sum = net_checksum_add(n-css, data+css);
528         stw_be_p(data + sloc, net_checksum_finish(sum));
529     }
530 }
531 
532 static inline int
533 vlan_enabled(E1000State *s)
534 {
535     return ((s->mac_reg[CTRL] & E1000_CTRL_VME) != 0);
536 }
537 
538 static inline int
539 vlan_rx_filter_enabled(E1000State *s)
540 {
541     return ((s->mac_reg[RCTL] & E1000_RCTL_VFE) != 0);
542 }
543 
544 static inline int
545 is_vlan_packet(E1000State *s, const uint8_t *buf)
546 {
547     return (be16_to_cpup((uint16_t *)(buf + 12)) ==
548                 le16_to_cpup((uint16_t *)(s->mac_reg + VET)));
549 }
550 
551 static inline int
552 is_vlan_txd(uint32_t txd_lower)
553 {
554     return ((txd_lower & E1000_TXD_CMD_VLE) != 0);
555 }
556 
557 /* FCS aka Ethernet CRC-32. We don't get it from backends and can't
558  * fill it in, just pad descriptor length by 4 bytes unless guest
559  * told us to strip it off the packet. */
560 static inline int
561 fcs_len(E1000State *s)
562 {
563     return (s->mac_reg[RCTL] & E1000_RCTL_SECRC) ? 0 : 4;
564 }
565 
566 static void
567 e1000_send_packet(E1000State *s, const uint8_t *buf, int size)
568 {
569     NetClientState *nc = qemu_get_queue(s->nic);
570     if (s->phy_reg[PHY_CTRL] & MII_CR_LOOPBACK) {
571         nc->info->receive(nc, buf, size);
572     } else {
573         qemu_send_packet(nc, buf, size);
574     }
575 }
576 
577 static void
578 xmit_seg(E1000State *s)
579 {
580     uint16_t len, *sp;
581     unsigned int frames = s->tx.tso_frames, css, sofar, n;
582     struct e1000_tx *tp = &s->tx;
583 
584     if (tp->tse && tp->cptse) {
585         css = tp->ipcss;
586         DBGOUT(TXSUM, "frames %d size %d ipcss %d\n",
587                frames, tp->size, css);
588         if (tp->ip) {		// IPv4
589             stw_be_p(tp->data+css+2, tp->size - css);
590             stw_be_p(tp->data+css+4,
591                           be16_to_cpup((uint16_t *)(tp->data+css+4))+frames);
592         } else			// IPv6
593             stw_be_p(tp->data+css+4, tp->size - css);
594         css = tp->tucss;
595         len = tp->size - css;
596         DBGOUT(TXSUM, "tcp %d tucss %d len %d\n", tp->tcp, css, len);
597         if (tp->tcp) {
598             sofar = frames * tp->mss;
599             stl_be_p(tp->data+css+4, ldl_be_p(tp->data+css+4)+sofar); /* seq */
600             if (tp->paylen - sofar > tp->mss)
601                 tp->data[css + 13] &= ~9;		// PSH, FIN
602         } else	// UDP
603             stw_be_p(tp->data+css+4, len);
604         if (tp->sum_needed & E1000_TXD_POPTS_TXSM) {
605             unsigned int phsum;
606             // add pseudo-header length before checksum calculation
607             sp = (uint16_t *)(tp->data + tp->tucso);
608             phsum = be16_to_cpup(sp) + len;
609             phsum = (phsum >> 16) + (phsum & 0xffff);
610             stw_be_p(sp, phsum);
611         }
612         tp->tso_frames++;
613     }
614 
615     if (tp->sum_needed & E1000_TXD_POPTS_TXSM)
616         putsum(tp->data, tp->size, tp->tucso, tp->tucss, tp->tucse);
617     if (tp->sum_needed & E1000_TXD_POPTS_IXSM)
618         putsum(tp->data, tp->size, tp->ipcso, tp->ipcss, tp->ipcse);
619     if (tp->vlan_needed) {
620         memmove(tp->vlan, tp->data, 4);
621         memmove(tp->data, tp->data + 4, 8);
622         memcpy(tp->data + 8, tp->vlan_header, 4);
623         e1000_send_packet(s, tp->vlan, tp->size + 4);
624     } else
625         e1000_send_packet(s, tp->data, tp->size);
626     s->mac_reg[TPT]++;
627     s->mac_reg[GPTC]++;
628     n = s->mac_reg[TOTL];
629     if ((s->mac_reg[TOTL] += s->tx.size) < n)
630         s->mac_reg[TOTH]++;
631 }
632 
633 static void
634 process_tx_desc(E1000State *s, struct e1000_tx_desc *dp)
635 {
636     PCIDevice *d = PCI_DEVICE(s);
637     uint32_t txd_lower = le32_to_cpu(dp->lower.data);
638     uint32_t dtype = txd_lower & (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D);
639     unsigned int split_size = txd_lower & 0xffff, bytes, sz, op;
640     unsigned int msh = 0xfffff;
641     uint64_t addr;
642     struct e1000_context_desc *xp = (struct e1000_context_desc *)dp;
643     struct e1000_tx *tp = &s->tx;
644 
645     s->mit_ide |= (txd_lower & E1000_TXD_CMD_IDE);
646     if (dtype == E1000_TXD_CMD_DEXT) {	// context descriptor
647         op = le32_to_cpu(xp->cmd_and_length);
648         tp->ipcss = xp->lower_setup.ip_fields.ipcss;
649         tp->ipcso = xp->lower_setup.ip_fields.ipcso;
650         tp->ipcse = le16_to_cpu(xp->lower_setup.ip_fields.ipcse);
651         tp->tucss = xp->upper_setup.tcp_fields.tucss;
652         tp->tucso = xp->upper_setup.tcp_fields.tucso;
653         tp->tucse = le16_to_cpu(xp->upper_setup.tcp_fields.tucse);
654         tp->paylen = op & 0xfffff;
655         tp->hdr_len = xp->tcp_seg_setup.fields.hdr_len;
656         tp->mss = le16_to_cpu(xp->tcp_seg_setup.fields.mss);
657         tp->ip = (op & E1000_TXD_CMD_IP) ? 1 : 0;
658         tp->tcp = (op & E1000_TXD_CMD_TCP) ? 1 : 0;
659         tp->tse = (op & E1000_TXD_CMD_TSE) ? 1 : 0;
660         tp->tso_frames = 0;
661         if (tp->tucso == 0) {	// this is probably wrong
662             DBGOUT(TXSUM, "TCP/UDP: cso 0!\n");
663             tp->tucso = tp->tucss + (tp->tcp ? 16 : 6);
664         }
665         return;
666     } else if (dtype == (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D)) {
667         // data descriptor
668         if (tp->size == 0) {
669             tp->sum_needed = le32_to_cpu(dp->upper.data) >> 8;
670         }
671         tp->cptse = ( txd_lower & E1000_TXD_CMD_TSE ) ? 1 : 0;
672     } else {
673         // legacy descriptor
674         tp->cptse = 0;
675     }
676 
677     if (vlan_enabled(s) && is_vlan_txd(txd_lower) &&
678         (tp->cptse || txd_lower & E1000_TXD_CMD_EOP)) {
679         tp->vlan_needed = 1;
680         stw_be_p(tp->vlan_header,
681                       le16_to_cpup((uint16_t *)(s->mac_reg + VET)));
682         stw_be_p(tp->vlan_header + 2,
683                       le16_to_cpu(dp->upper.fields.special));
684     }
685 
686     addr = le64_to_cpu(dp->buffer_addr);
687     if (tp->tse && tp->cptse) {
688         msh = tp->hdr_len + tp->mss;
689         do {
690             bytes = split_size;
691             if (tp->size + bytes > msh)
692                 bytes = msh - tp->size;
693 
694             bytes = MIN(sizeof(tp->data) - tp->size, bytes);
695             pci_dma_read(d, addr, tp->data + tp->size, bytes);
696             sz = tp->size + bytes;
697             if (sz >= tp->hdr_len && tp->size < tp->hdr_len) {
698                 memmove(tp->header, tp->data, tp->hdr_len);
699             }
700             tp->size = sz;
701             addr += bytes;
702             if (sz == msh) {
703                 xmit_seg(s);
704                 memmove(tp->data, tp->header, tp->hdr_len);
705                 tp->size = tp->hdr_len;
706             }
707         } while (split_size -= bytes);
708     } else if (!tp->tse && tp->cptse) {
709         // context descriptor TSE is not set, while data descriptor TSE is set
710         DBGOUT(TXERR, "TCP segmentation error\n");
711     } else {
712         split_size = MIN(sizeof(tp->data) - tp->size, split_size);
713         pci_dma_read(d, addr, tp->data + tp->size, split_size);
714         tp->size += split_size;
715     }
716 
717     if (!(txd_lower & E1000_TXD_CMD_EOP))
718         return;
719     if (!(tp->tse && tp->cptse && tp->size < tp->hdr_len)) {
720         xmit_seg(s);
721     }
722     tp->tso_frames = 0;
723     tp->sum_needed = 0;
724     tp->vlan_needed = 0;
725     tp->size = 0;
726     tp->cptse = 0;
727 }
728 
729 static uint32_t
730 txdesc_writeback(E1000State *s, dma_addr_t base, struct e1000_tx_desc *dp)
731 {
732     PCIDevice *d = PCI_DEVICE(s);
733     uint32_t txd_upper, txd_lower = le32_to_cpu(dp->lower.data);
734 
735     if (!(txd_lower & (E1000_TXD_CMD_RS|E1000_TXD_CMD_RPS)))
736         return 0;
737     txd_upper = (le32_to_cpu(dp->upper.data) | E1000_TXD_STAT_DD) &
738                 ~(E1000_TXD_STAT_EC | E1000_TXD_STAT_LC | E1000_TXD_STAT_TU);
739     dp->upper.data = cpu_to_le32(txd_upper);
740     pci_dma_write(d, base + ((char *)&dp->upper - (char *)dp),
741                   &dp->upper, sizeof(dp->upper));
742     return E1000_ICR_TXDW;
743 }
744 
745 static uint64_t tx_desc_base(E1000State *s)
746 {
747     uint64_t bah = s->mac_reg[TDBAH];
748     uint64_t bal = s->mac_reg[TDBAL] & ~0xf;
749 
750     return (bah << 32) + bal;
751 }
752 
753 static void
754 start_xmit(E1000State *s)
755 {
756     PCIDevice *d = PCI_DEVICE(s);
757     dma_addr_t base;
758     struct e1000_tx_desc desc;
759     uint32_t tdh_start = s->mac_reg[TDH], cause = E1000_ICS_TXQE;
760 
761     if (!(s->mac_reg[TCTL] & E1000_TCTL_EN)) {
762         DBGOUT(TX, "tx disabled\n");
763         return;
764     }
765 
766     while (s->mac_reg[TDH] != s->mac_reg[TDT]) {
767         base = tx_desc_base(s) +
768                sizeof(struct e1000_tx_desc) * s->mac_reg[TDH];
769         pci_dma_read(d, base, &desc, sizeof(desc));
770 
771         DBGOUT(TX, "index %d: %p : %x %x\n", s->mac_reg[TDH],
772                (void *)(intptr_t)desc.buffer_addr, desc.lower.data,
773                desc.upper.data);
774 
775         process_tx_desc(s, &desc);
776         cause |= txdesc_writeback(s, base, &desc);
777 
778         if (++s->mac_reg[TDH] * sizeof(desc) >= s->mac_reg[TDLEN])
779             s->mac_reg[TDH] = 0;
780         /*
781          * the following could happen only if guest sw assigns
782          * bogus values to TDT/TDLEN.
783          * there's nothing too intelligent we could do about this.
784          */
785         if (s->mac_reg[TDH] == tdh_start) {
786             DBGOUT(TXERR, "TDH wraparound @%x, TDT %x, TDLEN %x\n",
787                    tdh_start, s->mac_reg[TDT], s->mac_reg[TDLEN]);
788             break;
789         }
790     }
791     set_ics(s, 0, cause);
792 }
793 
794 static int
795 receive_filter(E1000State *s, const uint8_t *buf, int size)
796 {
797     static const uint8_t bcast[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
798     static const int mta_shift[] = {4, 3, 2, 0};
799     uint32_t f, rctl = s->mac_reg[RCTL], ra[2], *rp;
800 
801     if (is_vlan_packet(s, buf) && vlan_rx_filter_enabled(s)) {
802         uint16_t vid = be16_to_cpup((uint16_t *)(buf + 14));
803         uint32_t vfta = le32_to_cpup((uint32_t *)(s->mac_reg + VFTA) +
804                                      ((vid >> 5) & 0x7f));
805         if ((vfta & (1 << (vid & 0x1f))) == 0)
806             return 0;
807     }
808 
809     if (rctl & E1000_RCTL_UPE)			// promiscuous
810         return 1;
811 
812     if ((buf[0] & 1) && (rctl & E1000_RCTL_MPE))	// promiscuous mcast
813         return 1;
814 
815     if ((rctl & E1000_RCTL_BAM) && !memcmp(buf, bcast, sizeof bcast))
816         return 1;
817 
818     for (rp = s->mac_reg + RA; rp < s->mac_reg + RA + 32; rp += 2) {
819         if (!(rp[1] & E1000_RAH_AV))
820             continue;
821         ra[0] = cpu_to_le32(rp[0]);
822         ra[1] = cpu_to_le32(rp[1]);
823         if (!memcmp(buf, (uint8_t *)ra, 6)) {
824             DBGOUT(RXFILTER,
825                    "unicast match[%d]: %02x:%02x:%02x:%02x:%02x:%02x\n",
826                    (int)(rp - s->mac_reg - RA)/2,
827                    buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
828             return 1;
829         }
830     }
831     DBGOUT(RXFILTER, "unicast mismatch: %02x:%02x:%02x:%02x:%02x:%02x\n",
832            buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
833 
834     f = mta_shift[(rctl >> E1000_RCTL_MO_SHIFT) & 3];
835     f = (((buf[5] << 8) | buf[4]) >> f) & 0xfff;
836     if (s->mac_reg[MTA + (f >> 5)] & (1 << (f & 0x1f)))
837         return 1;
838     DBGOUT(RXFILTER,
839            "dropping, inexact filter mismatch: %02x:%02x:%02x:%02x:%02x:%02x MO %d MTA[%d] %x\n",
840            buf[0], buf[1], buf[2], buf[3], buf[4], buf[5],
841            (rctl >> E1000_RCTL_MO_SHIFT) & 3, f >> 5,
842            s->mac_reg[MTA + (f >> 5)]);
843 
844     return 0;
845 }
846 
847 static void
848 e1000_set_link_status(NetClientState *nc)
849 {
850     E1000State *s = qemu_get_nic_opaque(nc);
851     uint32_t old_status = s->mac_reg[STATUS];
852 
853     if (nc->link_down) {
854         e1000_link_down(s);
855     } else {
856         e1000_link_up(s);
857     }
858 
859     if (s->mac_reg[STATUS] != old_status)
860         set_ics(s, 0, E1000_ICR_LSC);
861 }
862 
863 static bool e1000_has_rxbufs(E1000State *s, size_t total_size)
864 {
865     int bufs;
866     /* Fast-path short packets */
867     if (total_size <= s->rxbuf_size) {
868         return s->mac_reg[RDH] != s->mac_reg[RDT];
869     }
870     if (s->mac_reg[RDH] < s->mac_reg[RDT]) {
871         bufs = s->mac_reg[RDT] - s->mac_reg[RDH];
872     } else if (s->mac_reg[RDH] > s->mac_reg[RDT]) {
873         bufs = s->mac_reg[RDLEN] /  sizeof(struct e1000_rx_desc) +
874             s->mac_reg[RDT] - s->mac_reg[RDH];
875     } else {
876         return false;
877     }
878     return total_size <= bufs * s->rxbuf_size;
879 }
880 
881 static int
882 e1000_can_receive(NetClientState *nc)
883 {
884     E1000State *s = qemu_get_nic_opaque(nc);
885 
886     return (s->mac_reg[STATUS] & E1000_STATUS_LU) &&
887         (s->mac_reg[RCTL] & E1000_RCTL_EN) && e1000_has_rxbufs(s, 1);
888 }
889 
890 static uint64_t rx_desc_base(E1000State *s)
891 {
892     uint64_t bah = s->mac_reg[RDBAH];
893     uint64_t bal = s->mac_reg[RDBAL] & ~0xf;
894 
895     return (bah << 32) + bal;
896 }
897 
898 static ssize_t
899 e1000_receive_iov(NetClientState *nc, const struct iovec *iov, int iovcnt)
900 {
901     E1000State *s = qemu_get_nic_opaque(nc);
902     PCIDevice *d = PCI_DEVICE(s);
903     struct e1000_rx_desc desc;
904     dma_addr_t base;
905     unsigned int n, rdt;
906     uint32_t rdh_start;
907     uint16_t vlan_special = 0;
908     uint8_t vlan_status = 0;
909     uint8_t min_buf[MIN_BUF_SIZE];
910     struct iovec min_iov;
911     uint8_t *filter_buf = iov->iov_base;
912     size_t size = iov_size(iov, iovcnt);
913     size_t iov_ofs = 0;
914     size_t desc_offset;
915     size_t desc_size;
916     size_t total_size;
917 
918     if (!(s->mac_reg[STATUS] & E1000_STATUS_LU)) {
919         return -1;
920     }
921 
922     if (!(s->mac_reg[RCTL] & E1000_RCTL_EN)) {
923         return -1;
924     }
925 
926     /* Pad to minimum Ethernet frame length */
927     if (size < sizeof(min_buf)) {
928         iov_to_buf(iov, iovcnt, 0, min_buf, size);
929         memset(&min_buf[size], 0, sizeof(min_buf) - size);
930         min_iov.iov_base = filter_buf = min_buf;
931         min_iov.iov_len = size = sizeof(min_buf);
932         iovcnt = 1;
933         iov = &min_iov;
934     } else if (iov->iov_len < MAXIMUM_ETHERNET_HDR_LEN) {
935         /* This is very unlikely, but may happen. */
936         iov_to_buf(iov, iovcnt, 0, min_buf, MAXIMUM_ETHERNET_HDR_LEN);
937         filter_buf = min_buf;
938     }
939 
940     /* Discard oversized packets if !LPE and !SBP. */
941     if ((size > MAXIMUM_ETHERNET_LPE_SIZE ||
942         (size > MAXIMUM_ETHERNET_VLAN_SIZE
943         && !(s->mac_reg[RCTL] & E1000_RCTL_LPE)))
944         && !(s->mac_reg[RCTL] & E1000_RCTL_SBP)) {
945         return size;
946     }
947 
948     if (!receive_filter(s, filter_buf, size)) {
949         return size;
950     }
951 
952     if (vlan_enabled(s) && is_vlan_packet(s, filter_buf)) {
953         vlan_special = cpu_to_le16(be16_to_cpup((uint16_t *)(filter_buf
954                                                                 + 14)));
955         iov_ofs = 4;
956         if (filter_buf == iov->iov_base) {
957             memmove(filter_buf + 4, filter_buf, 12);
958         } else {
959             iov_from_buf(iov, iovcnt, 4, filter_buf, 12);
960             while (iov->iov_len <= iov_ofs) {
961                 iov_ofs -= iov->iov_len;
962                 iov++;
963             }
964         }
965         vlan_status = E1000_RXD_STAT_VP;
966         size -= 4;
967     }
968 
969     rdh_start = s->mac_reg[RDH];
970     desc_offset = 0;
971     total_size = size + fcs_len(s);
972     if (!e1000_has_rxbufs(s, total_size)) {
973             set_ics(s, 0, E1000_ICS_RXO);
974             return -1;
975     }
976     do {
977         desc_size = total_size - desc_offset;
978         if (desc_size > s->rxbuf_size) {
979             desc_size = s->rxbuf_size;
980         }
981         base = rx_desc_base(s) + sizeof(desc) * s->mac_reg[RDH];
982         pci_dma_read(d, base, &desc, sizeof(desc));
983         desc.special = vlan_special;
984         desc.status |= (vlan_status | E1000_RXD_STAT_DD);
985         if (desc.buffer_addr) {
986             if (desc_offset < size) {
987                 size_t iov_copy;
988                 hwaddr ba = le64_to_cpu(desc.buffer_addr);
989                 size_t copy_size = size - desc_offset;
990                 if (copy_size > s->rxbuf_size) {
991                     copy_size = s->rxbuf_size;
992                 }
993                 do {
994                     iov_copy = MIN(copy_size, iov->iov_len - iov_ofs);
995                     pci_dma_write(d, ba, iov->iov_base + iov_ofs, iov_copy);
996                     copy_size -= iov_copy;
997                     ba += iov_copy;
998                     iov_ofs += iov_copy;
999                     if (iov_ofs == iov->iov_len) {
1000                         iov++;
1001                         iov_ofs = 0;
1002                     }
1003                 } while (copy_size);
1004             }
1005             desc_offset += desc_size;
1006             desc.length = cpu_to_le16(desc_size);
1007             if (desc_offset >= total_size) {
1008                 desc.status |= E1000_RXD_STAT_EOP | E1000_RXD_STAT_IXSM;
1009             } else {
1010                 /* Guest zeroing out status is not a hardware requirement.
1011                    Clear EOP in case guest didn't do it. */
1012                 desc.status &= ~E1000_RXD_STAT_EOP;
1013             }
1014         } else { // as per intel docs; skip descriptors with null buf addr
1015             DBGOUT(RX, "Null RX descriptor!!\n");
1016         }
1017         pci_dma_write(d, base, &desc, sizeof(desc));
1018 
1019         if (++s->mac_reg[RDH] * sizeof(desc) >= s->mac_reg[RDLEN])
1020             s->mac_reg[RDH] = 0;
1021         /* see comment in start_xmit; same here */
1022         if (s->mac_reg[RDH] == rdh_start) {
1023             DBGOUT(RXERR, "RDH wraparound @%x, RDT %x, RDLEN %x\n",
1024                    rdh_start, s->mac_reg[RDT], s->mac_reg[RDLEN]);
1025             set_ics(s, 0, E1000_ICS_RXO);
1026             return -1;
1027         }
1028     } while (desc_offset < total_size);
1029 
1030     s->mac_reg[GPRC]++;
1031     s->mac_reg[TPR]++;
1032     /* TOR - Total Octets Received:
1033      * This register includes bytes received in a packet from the <Destination
1034      * Address> field through the <CRC> field, inclusively.
1035      */
1036     n = s->mac_reg[TORL] + size + /* Always include FCS length. */ 4;
1037     if (n < s->mac_reg[TORL])
1038         s->mac_reg[TORH]++;
1039     s->mac_reg[TORL] = n;
1040 
1041     n = E1000_ICS_RXT0;
1042     if ((rdt = s->mac_reg[RDT]) < s->mac_reg[RDH])
1043         rdt += s->mac_reg[RDLEN] / sizeof(desc);
1044     if (((rdt - s->mac_reg[RDH]) * sizeof(desc)) <= s->mac_reg[RDLEN] >>
1045         s->rxbuf_min_shift)
1046         n |= E1000_ICS_RXDMT0;
1047 
1048     set_ics(s, 0, n);
1049 
1050     return size;
1051 }
1052 
1053 static ssize_t
1054 e1000_receive(NetClientState *nc, const uint8_t *buf, size_t size)
1055 {
1056     const struct iovec iov = {
1057         .iov_base = (uint8_t *)buf,
1058         .iov_len = size
1059     };
1060 
1061     return e1000_receive_iov(nc, &iov, 1);
1062 }
1063 
1064 static uint32_t
1065 mac_readreg(E1000State *s, int index)
1066 {
1067     return s->mac_reg[index];
1068 }
1069 
1070 static uint32_t
1071 mac_icr_read(E1000State *s, int index)
1072 {
1073     uint32_t ret = s->mac_reg[ICR];
1074 
1075     DBGOUT(INTERRUPT, "ICR read: %x\n", ret);
1076     set_interrupt_cause(s, 0, 0);
1077     return ret;
1078 }
1079 
1080 static uint32_t
1081 mac_read_clr4(E1000State *s, int index)
1082 {
1083     uint32_t ret = s->mac_reg[index];
1084 
1085     s->mac_reg[index] = 0;
1086     return ret;
1087 }
1088 
1089 static uint32_t
1090 mac_read_clr8(E1000State *s, int index)
1091 {
1092     uint32_t ret = s->mac_reg[index];
1093 
1094     s->mac_reg[index] = 0;
1095     s->mac_reg[index-1] = 0;
1096     return ret;
1097 }
1098 
1099 static void
1100 mac_writereg(E1000State *s, int index, uint32_t val)
1101 {
1102     uint32_t macaddr[2];
1103 
1104     s->mac_reg[index] = val;
1105 
1106     if (index == RA + 1) {
1107         macaddr[0] = cpu_to_le32(s->mac_reg[RA]);
1108         macaddr[1] = cpu_to_le32(s->mac_reg[RA + 1]);
1109         qemu_format_nic_info_str(qemu_get_queue(s->nic), (uint8_t *)macaddr);
1110     }
1111 }
1112 
1113 static void
1114 set_rdt(E1000State *s, int index, uint32_t val)
1115 {
1116     s->mac_reg[index] = val & 0xffff;
1117     if (e1000_has_rxbufs(s, 1)) {
1118         qemu_flush_queued_packets(qemu_get_queue(s->nic));
1119     }
1120 }
1121 
1122 static void
1123 set_16bit(E1000State *s, int index, uint32_t val)
1124 {
1125     s->mac_reg[index] = val & 0xffff;
1126 }
1127 
1128 static void
1129 set_dlen(E1000State *s, int index, uint32_t val)
1130 {
1131     s->mac_reg[index] = val & 0xfff80;
1132 }
1133 
1134 static void
1135 set_tctl(E1000State *s, int index, uint32_t val)
1136 {
1137     s->mac_reg[index] = val;
1138     s->mac_reg[TDT] &= 0xffff;
1139     start_xmit(s);
1140 }
1141 
1142 static void
1143 set_icr(E1000State *s, int index, uint32_t val)
1144 {
1145     DBGOUT(INTERRUPT, "set_icr %x\n", val);
1146     set_interrupt_cause(s, 0, s->mac_reg[ICR] & ~val);
1147 }
1148 
1149 static void
1150 set_imc(E1000State *s, int index, uint32_t val)
1151 {
1152     s->mac_reg[IMS] &= ~val;
1153     set_ics(s, 0, 0);
1154 }
1155 
1156 static void
1157 set_ims(E1000State *s, int index, uint32_t val)
1158 {
1159     s->mac_reg[IMS] |= val;
1160     set_ics(s, 0, 0);
1161 }
1162 
1163 #define getreg(x)	[x] = mac_readreg
1164 static uint32_t (*macreg_readops[])(E1000State *, int) = {
1165     getreg(PBA),	getreg(RCTL),	getreg(TDH),	getreg(TXDCTL),
1166     getreg(WUFC),	getreg(TDT),	getreg(CTRL),	getreg(LEDCTL),
1167     getreg(MANC),	getreg(MDIC),	getreg(SWSM),	getreg(STATUS),
1168     getreg(TORL),	getreg(TOTL),	getreg(IMS),	getreg(TCTL),
1169     getreg(RDH),	getreg(RDT),	getreg(VET),	getreg(ICS),
1170     getreg(TDBAL),	getreg(TDBAH),	getreg(RDBAH),	getreg(RDBAL),
1171     getreg(TDLEN),      getreg(RDLEN),  getreg(RDTR),   getreg(RADV),
1172     getreg(TADV),       getreg(ITR),
1173 
1174     [TOTH] = mac_read_clr8,	[TORH] = mac_read_clr8,	[GPRC] = mac_read_clr4,
1175     [GPTC] = mac_read_clr4,	[TPR] = mac_read_clr4,	[TPT] = mac_read_clr4,
1176     [ICR] = mac_icr_read,	[EECD] = get_eecd,	[EERD] = flash_eerd_read,
1177     [CRCERRS ... MPC] = &mac_readreg,
1178     [RA ... RA+31] = &mac_readreg,
1179     [MTA ... MTA+127] = &mac_readreg,
1180     [VFTA ... VFTA+127] = &mac_readreg,
1181 };
1182 enum { NREADOPS = ARRAY_SIZE(macreg_readops) };
1183 
1184 #define putreg(x)	[x] = mac_writereg
1185 static void (*macreg_writeops[])(E1000State *, int, uint32_t) = {
1186     putreg(PBA),	putreg(EERD),	putreg(SWSM),	putreg(WUFC),
1187     putreg(TDBAL),	putreg(TDBAH),	putreg(TXDCTL),	putreg(RDBAH),
1188     putreg(RDBAL),	putreg(LEDCTL), putreg(VET),
1189     [TDLEN] = set_dlen,	[RDLEN] = set_dlen,	[TCTL] = set_tctl,
1190     [TDT] = set_tctl,	[MDIC] = set_mdic,	[ICS] = set_ics,
1191     [TDH] = set_16bit,	[RDH] = set_16bit,	[RDT] = set_rdt,
1192     [IMC] = set_imc,	[IMS] = set_ims,	[ICR] = set_icr,
1193     [EECD] = set_eecd,	[RCTL] = set_rx_control, [CTRL] = set_ctrl,
1194     [RDTR] = set_16bit, [RADV] = set_16bit,     [TADV] = set_16bit,
1195     [ITR] = set_16bit,
1196     [RA ... RA+31] = &mac_writereg,
1197     [MTA ... MTA+127] = &mac_writereg,
1198     [VFTA ... VFTA+127] = &mac_writereg,
1199 };
1200 
1201 enum { NWRITEOPS = ARRAY_SIZE(macreg_writeops) };
1202 
1203 static void
1204 e1000_mmio_write(void *opaque, hwaddr addr, uint64_t val,
1205                  unsigned size)
1206 {
1207     E1000State *s = opaque;
1208     unsigned int index = (addr & 0x1ffff) >> 2;
1209 
1210     if (index < NWRITEOPS && macreg_writeops[index]) {
1211         macreg_writeops[index](s, index, val);
1212     } else if (index < NREADOPS && macreg_readops[index]) {
1213         DBGOUT(MMIO, "e1000_mmio_writel RO %x: 0x%04"PRIx64"\n", index<<2, val);
1214     } else {
1215         DBGOUT(UNKNOWN, "MMIO unknown write addr=0x%08x,val=0x%08"PRIx64"\n",
1216                index<<2, val);
1217     }
1218 }
1219 
1220 static uint64_t
1221 e1000_mmio_read(void *opaque, hwaddr addr, unsigned size)
1222 {
1223     E1000State *s = opaque;
1224     unsigned int index = (addr & 0x1ffff) >> 2;
1225 
1226     if (index < NREADOPS && macreg_readops[index])
1227     {
1228         return macreg_readops[index](s, index);
1229     }
1230     DBGOUT(UNKNOWN, "MMIO unknown read addr=0x%08x\n", index<<2);
1231     return 0;
1232 }
1233 
1234 static const MemoryRegionOps e1000_mmio_ops = {
1235     .read = e1000_mmio_read,
1236     .write = e1000_mmio_write,
1237     .endianness = DEVICE_LITTLE_ENDIAN,
1238     .impl = {
1239         .min_access_size = 4,
1240         .max_access_size = 4,
1241     },
1242 };
1243 
1244 static uint64_t e1000_io_read(void *opaque, hwaddr addr,
1245                               unsigned size)
1246 {
1247     E1000State *s = opaque;
1248 
1249     (void)s;
1250     return 0;
1251 }
1252 
1253 static void e1000_io_write(void *opaque, hwaddr addr,
1254                            uint64_t val, unsigned size)
1255 {
1256     E1000State *s = opaque;
1257 
1258     (void)s;
1259 }
1260 
1261 static const MemoryRegionOps e1000_io_ops = {
1262     .read = e1000_io_read,
1263     .write = e1000_io_write,
1264     .endianness = DEVICE_LITTLE_ENDIAN,
1265 };
1266 
1267 static bool is_version_1(void *opaque, int version_id)
1268 {
1269     return version_id == 1;
1270 }
1271 
1272 static void e1000_pre_save(void *opaque)
1273 {
1274     E1000State *s = opaque;
1275     NetClientState *nc = qemu_get_queue(s->nic);
1276 
1277     /* If the mitigation timer is active, emulate a timeout now. */
1278     if (s->mit_timer_on) {
1279         e1000_mit_timer(s);
1280     }
1281 
1282     if (!(s->compat_flags & E1000_FLAG_AUTONEG)) {
1283         return;
1284     }
1285 
1286     /*
1287      * If link is down and auto-negotiation is ongoing, complete
1288      * auto-negotiation immediately.  This allows is to look at
1289      * MII_SR_AUTONEG_COMPLETE to infer link status on load.
1290      */
1291     if (nc->link_down &&
1292         s->phy_reg[PHY_CTRL] & MII_CR_AUTO_NEG_EN &&
1293         s->phy_reg[PHY_CTRL] & MII_CR_RESTART_AUTO_NEG) {
1294          s->phy_reg[PHY_STATUS] |= MII_SR_AUTONEG_COMPLETE;
1295     }
1296 }
1297 
1298 static int e1000_post_load(void *opaque, int version_id)
1299 {
1300     E1000State *s = opaque;
1301     NetClientState *nc = qemu_get_queue(s->nic);
1302 
1303     if (!(s->compat_flags & E1000_FLAG_MIT)) {
1304         s->mac_reg[ITR] = s->mac_reg[RDTR] = s->mac_reg[RADV] =
1305             s->mac_reg[TADV] = 0;
1306         s->mit_irq_level = false;
1307     }
1308     s->mit_ide = 0;
1309     s->mit_timer_on = false;
1310 
1311     /* nc.link_down can't be migrated, so infer link_down according
1312      * to link status bit in mac_reg[STATUS].
1313      * Alternatively, restart link negotiation if it was in progress. */
1314     nc->link_down = (s->mac_reg[STATUS] & E1000_STATUS_LU) == 0;
1315 
1316     if (!(s->compat_flags & E1000_FLAG_AUTONEG)) {
1317         return 0;
1318     }
1319 
1320     if (s->phy_reg[PHY_CTRL] & MII_CR_AUTO_NEG_EN &&
1321         s->phy_reg[PHY_CTRL] & MII_CR_RESTART_AUTO_NEG &&
1322         !(s->phy_reg[PHY_STATUS] & MII_SR_AUTONEG_COMPLETE)) {
1323         nc->link_down = false;
1324         timer_mod(s->autoneg_timer, qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 500);
1325     }
1326 
1327     return 0;
1328 }
1329 
1330 static bool e1000_mit_state_needed(void *opaque)
1331 {
1332     E1000State *s = opaque;
1333 
1334     return s->compat_flags & E1000_FLAG_MIT;
1335 }
1336 
1337 static const VMStateDescription vmstate_e1000_mit_state = {
1338     .name = "e1000/mit_state",
1339     .version_id = 1,
1340     .minimum_version_id = 1,
1341     .minimum_version_id_old = 1,
1342     .fields    = (VMStateField[]) {
1343         VMSTATE_UINT32(mac_reg[RDTR], E1000State),
1344         VMSTATE_UINT32(mac_reg[RADV], E1000State),
1345         VMSTATE_UINT32(mac_reg[TADV], E1000State),
1346         VMSTATE_UINT32(mac_reg[ITR], E1000State),
1347         VMSTATE_BOOL(mit_irq_level, E1000State),
1348         VMSTATE_END_OF_LIST()
1349     }
1350 };
1351 
1352 static const VMStateDescription vmstate_e1000 = {
1353     .name = "e1000",
1354     .version_id = 2,
1355     .minimum_version_id = 1,
1356     .minimum_version_id_old = 1,
1357     .pre_save = e1000_pre_save,
1358     .post_load = e1000_post_load,
1359     .fields      = (VMStateField []) {
1360         VMSTATE_PCI_DEVICE(parent_obj, E1000State),
1361         VMSTATE_UNUSED_TEST(is_version_1, 4), /* was instance id */
1362         VMSTATE_UNUSED(4), /* Was mmio_base.  */
1363         VMSTATE_UINT32(rxbuf_size, E1000State),
1364         VMSTATE_UINT32(rxbuf_min_shift, E1000State),
1365         VMSTATE_UINT32(eecd_state.val_in, E1000State),
1366         VMSTATE_UINT16(eecd_state.bitnum_in, E1000State),
1367         VMSTATE_UINT16(eecd_state.bitnum_out, E1000State),
1368         VMSTATE_UINT16(eecd_state.reading, E1000State),
1369         VMSTATE_UINT32(eecd_state.old_eecd, E1000State),
1370         VMSTATE_UINT8(tx.ipcss, E1000State),
1371         VMSTATE_UINT8(tx.ipcso, E1000State),
1372         VMSTATE_UINT16(tx.ipcse, E1000State),
1373         VMSTATE_UINT8(tx.tucss, E1000State),
1374         VMSTATE_UINT8(tx.tucso, E1000State),
1375         VMSTATE_UINT16(tx.tucse, E1000State),
1376         VMSTATE_UINT32(tx.paylen, E1000State),
1377         VMSTATE_UINT8(tx.hdr_len, E1000State),
1378         VMSTATE_UINT16(tx.mss, E1000State),
1379         VMSTATE_UINT16(tx.size, E1000State),
1380         VMSTATE_UINT16(tx.tso_frames, E1000State),
1381         VMSTATE_UINT8(tx.sum_needed, E1000State),
1382         VMSTATE_INT8(tx.ip, E1000State),
1383         VMSTATE_INT8(tx.tcp, E1000State),
1384         VMSTATE_BUFFER(tx.header, E1000State),
1385         VMSTATE_BUFFER(tx.data, E1000State),
1386         VMSTATE_UINT16_ARRAY(eeprom_data, E1000State, 64),
1387         VMSTATE_UINT16_ARRAY(phy_reg, E1000State, 0x20),
1388         VMSTATE_UINT32(mac_reg[CTRL], E1000State),
1389         VMSTATE_UINT32(mac_reg[EECD], E1000State),
1390         VMSTATE_UINT32(mac_reg[EERD], E1000State),
1391         VMSTATE_UINT32(mac_reg[GPRC], E1000State),
1392         VMSTATE_UINT32(mac_reg[GPTC], E1000State),
1393         VMSTATE_UINT32(mac_reg[ICR], E1000State),
1394         VMSTATE_UINT32(mac_reg[ICS], E1000State),
1395         VMSTATE_UINT32(mac_reg[IMC], E1000State),
1396         VMSTATE_UINT32(mac_reg[IMS], E1000State),
1397         VMSTATE_UINT32(mac_reg[LEDCTL], E1000State),
1398         VMSTATE_UINT32(mac_reg[MANC], E1000State),
1399         VMSTATE_UINT32(mac_reg[MDIC], E1000State),
1400         VMSTATE_UINT32(mac_reg[MPC], E1000State),
1401         VMSTATE_UINT32(mac_reg[PBA], E1000State),
1402         VMSTATE_UINT32(mac_reg[RCTL], E1000State),
1403         VMSTATE_UINT32(mac_reg[RDBAH], E1000State),
1404         VMSTATE_UINT32(mac_reg[RDBAL], E1000State),
1405         VMSTATE_UINT32(mac_reg[RDH], E1000State),
1406         VMSTATE_UINT32(mac_reg[RDLEN], E1000State),
1407         VMSTATE_UINT32(mac_reg[RDT], E1000State),
1408         VMSTATE_UINT32(mac_reg[STATUS], E1000State),
1409         VMSTATE_UINT32(mac_reg[SWSM], E1000State),
1410         VMSTATE_UINT32(mac_reg[TCTL], E1000State),
1411         VMSTATE_UINT32(mac_reg[TDBAH], E1000State),
1412         VMSTATE_UINT32(mac_reg[TDBAL], E1000State),
1413         VMSTATE_UINT32(mac_reg[TDH], E1000State),
1414         VMSTATE_UINT32(mac_reg[TDLEN], E1000State),
1415         VMSTATE_UINT32(mac_reg[TDT], E1000State),
1416         VMSTATE_UINT32(mac_reg[TORH], E1000State),
1417         VMSTATE_UINT32(mac_reg[TORL], E1000State),
1418         VMSTATE_UINT32(mac_reg[TOTH], E1000State),
1419         VMSTATE_UINT32(mac_reg[TOTL], E1000State),
1420         VMSTATE_UINT32(mac_reg[TPR], E1000State),
1421         VMSTATE_UINT32(mac_reg[TPT], E1000State),
1422         VMSTATE_UINT32(mac_reg[TXDCTL], E1000State),
1423         VMSTATE_UINT32(mac_reg[WUFC], E1000State),
1424         VMSTATE_UINT32(mac_reg[VET], E1000State),
1425         VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, RA, 32),
1426         VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, MTA, 128),
1427         VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, VFTA, 128),
1428         VMSTATE_END_OF_LIST()
1429     },
1430     .subsections = (VMStateSubsection[]) {
1431         {
1432             .vmsd = &vmstate_e1000_mit_state,
1433             .needed = e1000_mit_state_needed,
1434         }, {
1435             /* empty */
1436         }
1437     }
1438 };
1439 
1440 /*
1441  * EEPROM contents documented in Tables 5-2 and 5-3, pp. 98-102.
1442  * Note: A valid DevId will be inserted during pci_e1000_init().
1443  */
1444 static const uint16_t e1000_eeprom_template[64] = {
1445     0x0000, 0x0000, 0x0000, 0x0000,      0xffff, 0x0000,      0x0000, 0x0000,
1446     0x3000, 0x1000, 0x6403, 0 /*DevId*/, 0x8086, 0 /*DevId*/, 0x8086, 0x3040,
1447     0x0008, 0x2000, 0x7e14, 0x0048,      0x1000, 0x00d8,      0x0000, 0x2700,
1448     0x6cc9, 0x3150, 0x0722, 0x040b,      0x0984, 0x0000,      0xc000, 0x0706,
1449     0x1008, 0x0000, 0x0f04, 0x7fff,      0x4d01, 0xffff,      0xffff, 0xffff,
1450     0xffff, 0xffff, 0xffff, 0xffff,      0xffff, 0xffff,      0xffff, 0xffff,
1451     0x0100, 0x4000, 0x121c, 0xffff,      0xffff, 0xffff,      0xffff, 0xffff,
1452     0xffff, 0xffff, 0xffff, 0xffff,      0xffff, 0xffff,      0xffff, 0x0000,
1453 };
1454 
1455 /* PCI interface */
1456 
1457 static void
1458 e1000_mmio_setup(E1000State *d)
1459 {
1460     int i;
1461     const uint32_t excluded_regs[] = {
1462         E1000_MDIC, E1000_ICR, E1000_ICS, E1000_IMS,
1463         E1000_IMC, E1000_TCTL, E1000_TDT, PNPMMIO_SIZE
1464     };
1465 
1466     memory_region_init_io(&d->mmio, OBJECT(d), &e1000_mmio_ops, d,
1467                           "e1000-mmio", PNPMMIO_SIZE);
1468     memory_region_add_coalescing(&d->mmio, 0, excluded_regs[0]);
1469     for (i = 0; excluded_regs[i] != PNPMMIO_SIZE; i++)
1470         memory_region_add_coalescing(&d->mmio, excluded_regs[i] + 4,
1471                                      excluded_regs[i+1] - excluded_regs[i] - 4);
1472     memory_region_init_io(&d->io, OBJECT(d), &e1000_io_ops, d, "e1000-io", IOPORT_SIZE);
1473 }
1474 
1475 static void
1476 e1000_cleanup(NetClientState *nc)
1477 {
1478     E1000State *s = qemu_get_nic_opaque(nc);
1479 
1480     s->nic = NULL;
1481 }
1482 
1483 static void
1484 pci_e1000_uninit(PCIDevice *dev)
1485 {
1486     E1000State *d = E1000(dev);
1487 
1488     timer_del(d->autoneg_timer);
1489     timer_free(d->autoneg_timer);
1490     timer_del(d->mit_timer);
1491     timer_free(d->mit_timer);
1492     memory_region_destroy(&d->mmio);
1493     memory_region_destroy(&d->io);
1494     qemu_del_nic(d->nic);
1495 }
1496 
1497 static NetClientInfo net_e1000_info = {
1498     .type = NET_CLIENT_OPTIONS_KIND_NIC,
1499     .size = sizeof(NICState),
1500     .can_receive = e1000_can_receive,
1501     .receive = e1000_receive,
1502     .receive_iov = e1000_receive_iov,
1503     .cleanup = e1000_cleanup,
1504     .link_status_changed = e1000_set_link_status,
1505 };
1506 
1507 static int pci_e1000_init(PCIDevice *pci_dev)
1508 {
1509     DeviceState *dev = DEVICE(pci_dev);
1510     E1000State *d = E1000(pci_dev);
1511     PCIDeviceClass *pdc = PCI_DEVICE_GET_CLASS(pci_dev);
1512     uint8_t *pci_conf;
1513     uint16_t checksum = 0;
1514     int i;
1515     uint8_t *macaddr;
1516 
1517     pci_conf = pci_dev->config;
1518 
1519     /* TODO: RST# value should be 0, PCI spec 6.2.4 */
1520     pci_conf[PCI_CACHE_LINE_SIZE] = 0x10;
1521 
1522     pci_conf[PCI_INTERRUPT_PIN] = 1; /* interrupt pin A */
1523 
1524     e1000_mmio_setup(d);
1525 
1526     pci_register_bar(pci_dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &d->mmio);
1527 
1528     pci_register_bar(pci_dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &d->io);
1529 
1530     memmove(d->eeprom_data, e1000_eeprom_template,
1531         sizeof e1000_eeprom_template);
1532     qemu_macaddr_default_if_unset(&d->conf.macaddr);
1533     macaddr = d->conf.macaddr.a;
1534     for (i = 0; i < 3; i++)
1535         d->eeprom_data[i] = (macaddr[2*i+1]<<8) | macaddr[2*i];
1536     d->eeprom_data[11] = d->eeprom_data[13] = pdc->device_id;
1537     for (i = 0; i < EEPROM_CHECKSUM_REG; i++)
1538         checksum += d->eeprom_data[i];
1539     checksum = (uint16_t) EEPROM_SUM - checksum;
1540     d->eeprom_data[EEPROM_CHECKSUM_REG] = checksum;
1541 
1542     d->nic = qemu_new_nic(&net_e1000_info, &d->conf,
1543                           object_get_typename(OBJECT(d)), dev->id, d);
1544 
1545     qemu_format_nic_info_str(qemu_get_queue(d->nic), macaddr);
1546 
1547     add_boot_device_path(d->conf.bootindex, dev, "/ethernet-phy@0");
1548 
1549     d->autoneg_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL, e1000_autoneg_timer, d);
1550     d->mit_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, e1000_mit_timer, d);
1551 
1552     return 0;
1553 }
1554 
1555 static void qdev_e1000_reset(DeviceState *dev)
1556 {
1557     E1000State *d = E1000(dev);
1558     e1000_reset(d);
1559 }
1560 
1561 static Property e1000_properties[] = {
1562     DEFINE_NIC_PROPERTIES(E1000State, conf),
1563     DEFINE_PROP_BIT("autonegotiation", E1000State,
1564                     compat_flags, E1000_FLAG_AUTONEG_BIT, true),
1565     DEFINE_PROP_BIT("mitigation", E1000State,
1566                     compat_flags, E1000_FLAG_MIT_BIT, true),
1567     DEFINE_PROP_END_OF_LIST(),
1568 };
1569 
1570 typedef struct E1000Info {
1571     const char *name;
1572     uint16_t   device_id;
1573     uint8_t    revision;
1574     uint16_t   phy_id2;
1575 } E1000Info;
1576 
1577 static void e1000_class_init(ObjectClass *klass, void *data)
1578 {
1579     DeviceClass *dc = DEVICE_CLASS(klass);
1580     PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
1581     E1000BaseClass *e = E1000_DEVICE_CLASS(klass);
1582     const E1000Info *info = data;
1583 
1584     k->init = pci_e1000_init;
1585     k->exit = pci_e1000_uninit;
1586     k->romfile = "efi-e1000.rom";
1587     k->vendor_id = PCI_VENDOR_ID_INTEL;
1588     k->device_id = info->device_id;
1589     k->revision = info->revision;
1590     e->phy_id2 = info->phy_id2;
1591     k->class_id = PCI_CLASS_NETWORK_ETHERNET;
1592     set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
1593     dc->desc = "Intel Gigabit Ethernet";
1594     dc->reset = qdev_e1000_reset;
1595     dc->vmsd = &vmstate_e1000;
1596     dc->props = e1000_properties;
1597 }
1598 
1599 static const TypeInfo e1000_base_info = {
1600     .name          = TYPE_E1000_BASE,
1601     .parent        = TYPE_PCI_DEVICE,
1602     .instance_size = sizeof(E1000State),
1603     .class_size    = sizeof(E1000BaseClass),
1604     .abstract      = true,
1605 };
1606 
1607 static const E1000Info e1000_devices[] = {
1608     {
1609         .name      = "e1000-82540em",
1610         .device_id = E1000_DEV_ID_82540EM,
1611         .revision  = 0x03,
1612         .phy_id2   = E1000_PHY_ID2_8254xx_DEFAULT,
1613     },
1614     {
1615         .name      = "e1000-82544gc",
1616         .device_id = E1000_DEV_ID_82544GC_COPPER,
1617         .revision  = 0x03,
1618         .phy_id2   = E1000_PHY_ID2_82544x,
1619     },
1620     {
1621         .name      = "e1000-82545em",
1622         .device_id = E1000_DEV_ID_82545EM_COPPER,
1623         .revision  = 0x03,
1624         .phy_id2   = E1000_PHY_ID2_8254xx_DEFAULT,
1625     },
1626 };
1627 
1628 static const TypeInfo e1000_default_info = {
1629     .name          = "e1000",
1630     .parent        = "e1000-82540em",
1631 };
1632 
1633 static void e1000_register_types(void)
1634 {
1635     int i;
1636 
1637     type_register_static(&e1000_base_info);
1638     for (i = 0; i < ARRAY_SIZE(e1000_devices); i++) {
1639         const E1000Info *info = &e1000_devices[i];
1640         TypeInfo type_info = {};
1641 
1642         type_info.name = info->name;
1643         type_info.parent = TYPE_E1000_BASE;
1644         type_info.class_data = (void *)info;
1645         type_info.class_init = e1000_class_init;
1646 
1647         type_register(&type_info);
1648     }
1649     type_register_static(&e1000_default_info);
1650 }
1651 
1652 type_init(e1000_register_types)
1653