target-i386: cpu: fix --disable-kvm compilation
[qemu/kevin.git] / hw / e1000.c
blobcb7e7e83661767a1a34bbb1f65601abbda7ffd61
1 /*
2 * QEMU e1000 emulation
4 * Software developer's manual:
5 * http://download.intel.com/design/network/manuals/8254x_GBe_SDM.pdf
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
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.
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.
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/>.
28 #include "hw.h"
29 #include "pci.h"
30 #include "net.h"
31 #include "net/checksum.h"
32 #include "loader.h"
33 #include "sysemu.h"
34 #include "dma.h"
36 #include "e1000_hw.h"
38 #define E1000_DEBUG
40 #ifdef E1000_DEBUG
41 enum {
42 DEBUG_GENERAL, DEBUG_IO, DEBUG_MMIO, DEBUG_INTERRUPT,
43 DEBUG_RX, DEBUG_TX, DEBUG_MDIC, DEBUG_EEPROM,
44 DEBUG_UNKNOWN, DEBUG_TXSUM, DEBUG_TXERR, DEBUG_RXERR,
45 DEBUG_RXFILTER, DEBUG_PHY, DEBUG_NOTYET,
47 #define DBGBIT(x) (1<<DEBUG_##x)
48 static int debugflags = DBGBIT(TXERR) | DBGBIT(GENERAL);
50 #define DBGOUT(what, fmt, ...) do { \
51 if (debugflags & DBGBIT(what)) \
52 fprintf(stderr, "e1000: " fmt, ## __VA_ARGS__); \
53 } while (0)
54 #else
55 #define DBGOUT(what, fmt, ...) do {} while (0)
56 #endif
58 #define IOPORT_SIZE 0x40
59 #define PNPMMIO_SIZE 0x20000
60 #define MIN_BUF_SIZE 60 /* Min. octets in an ethernet frame sans FCS */
63 * HW models:
64 * E1000_DEV_ID_82540EM works with Windows and Linux
65 * E1000_DEV_ID_82573L OK with windoze and Linux 2.6.22,
66 * appears to perform better than 82540EM, but breaks with Linux 2.6.18
67 * E1000_DEV_ID_82544GC_COPPER appears to work; not well tested
68 * Others never tested
70 enum { E1000_DEVID = E1000_DEV_ID_82540EM };
73 * May need to specify additional MAC-to-PHY entries --
74 * Intel's Windows driver refuses to initialize unless they match
76 enum {
77 PHY_ID2_INIT = E1000_DEVID == E1000_DEV_ID_82573L ? 0xcc2 :
78 E1000_DEVID == E1000_DEV_ID_82544GC_COPPER ? 0xc30 :
79 /* default to E1000_DEV_ID_82540EM */ 0xc20
82 typedef struct E1000State_st {
83 PCIDevice dev;
84 NICState *nic;
85 NICConf conf;
86 MemoryRegion mmio;
87 MemoryRegion io;
89 uint32_t mac_reg[0x8000];
90 uint16_t phy_reg[0x20];
91 uint16_t eeprom_data[64];
93 uint32_t rxbuf_size;
94 uint32_t rxbuf_min_shift;
95 struct e1000_tx {
96 unsigned char header[256];
97 unsigned char vlan_header[4];
98 /* Fields vlan and data must not be reordered or separated. */
99 unsigned char vlan[4];
100 unsigned char data[0x10000];
101 uint16_t size;
102 unsigned char sum_needed;
103 unsigned char vlan_needed;
104 uint8_t ipcss;
105 uint8_t ipcso;
106 uint16_t ipcse;
107 uint8_t tucss;
108 uint8_t tucso;
109 uint16_t tucse;
110 uint8_t hdr_len;
111 uint16_t mss;
112 uint32_t paylen;
113 uint16_t tso_frames;
114 char tse;
115 int8_t ip;
116 int8_t tcp;
117 char cptse; // current packet tse bit
118 } tx;
120 struct {
121 uint32_t val_in; // shifted in from guest driver
122 uint16_t bitnum_in;
123 uint16_t bitnum_out;
124 uint16_t reading;
125 uint32_t old_eecd;
126 } eecd_state;
128 QEMUTimer *autoneg_timer;
129 } E1000State;
131 #define defreg(x) x = (E1000_##x>>2)
132 enum {
133 defreg(CTRL), defreg(EECD), defreg(EERD), defreg(GPRC),
134 defreg(GPTC), defreg(ICR), defreg(ICS), defreg(IMC),
135 defreg(IMS), defreg(LEDCTL), defreg(MANC), defreg(MDIC),
136 defreg(MPC), defreg(PBA), defreg(RCTL), defreg(RDBAH),
137 defreg(RDBAL), defreg(RDH), defreg(RDLEN), defreg(RDT),
138 defreg(STATUS), defreg(SWSM), defreg(TCTL), defreg(TDBAH),
139 defreg(TDBAL), defreg(TDH), defreg(TDLEN), defreg(TDT),
140 defreg(TORH), defreg(TORL), defreg(TOTH), defreg(TOTL),
141 defreg(TPR), defreg(TPT), defreg(TXDCTL), defreg(WUFC),
142 defreg(RA), defreg(MTA), defreg(CRCERRS),defreg(VFTA),
143 defreg(VET),
146 static void
147 e1000_link_down(E1000State *s)
149 s->mac_reg[STATUS] &= ~E1000_STATUS_LU;
150 s->phy_reg[PHY_STATUS] &= ~MII_SR_LINK_STATUS;
153 static void
154 e1000_link_up(E1000State *s)
156 s->mac_reg[STATUS] |= E1000_STATUS_LU;
157 s->phy_reg[PHY_STATUS] |= MII_SR_LINK_STATUS;
160 static void
161 set_phy_ctrl(E1000State *s, int index, uint16_t val)
163 if ((val & MII_CR_AUTO_NEG_EN) && (val & MII_CR_RESTART_AUTO_NEG)) {
164 s->nic->nc.link_down = true;
165 e1000_link_down(s);
166 s->phy_reg[PHY_STATUS] &= ~MII_SR_AUTONEG_COMPLETE;
167 DBGOUT(PHY, "Start link auto negotiation\n");
168 qemu_mod_timer(s->autoneg_timer, qemu_get_clock_ms(vm_clock) + 500);
172 static void
173 e1000_autoneg_timer(void *opaque)
175 E1000State *s = opaque;
176 s->nic->nc.link_down = false;
177 e1000_link_up(s);
178 s->phy_reg[PHY_STATUS] |= MII_SR_AUTONEG_COMPLETE;
179 DBGOUT(PHY, "Auto negotiation is completed\n");
182 static void (*phyreg_writeops[])(E1000State *, int, uint16_t) = {
183 [PHY_CTRL] = set_phy_ctrl,
186 enum { NPHYWRITEOPS = ARRAY_SIZE(phyreg_writeops) };
188 enum { PHY_R = 1, PHY_W = 2, PHY_RW = PHY_R | PHY_W };
189 static const char phy_regcap[0x20] = {
190 [PHY_STATUS] = PHY_R, [M88E1000_EXT_PHY_SPEC_CTRL] = PHY_RW,
191 [PHY_ID1] = PHY_R, [M88E1000_PHY_SPEC_CTRL] = PHY_RW,
192 [PHY_CTRL] = PHY_RW, [PHY_1000T_CTRL] = PHY_RW,
193 [PHY_LP_ABILITY] = PHY_R, [PHY_1000T_STATUS] = PHY_R,
194 [PHY_AUTONEG_ADV] = PHY_RW, [M88E1000_RX_ERR_CNTR] = PHY_R,
195 [PHY_ID2] = PHY_R, [M88E1000_PHY_SPEC_STATUS] = PHY_R
198 static const uint16_t phy_reg_init[] = {
199 [PHY_CTRL] = 0x1140,
200 [PHY_STATUS] = 0x794d, /* link initially up with not completed autoneg */
201 [PHY_ID1] = 0x141, [PHY_ID2] = PHY_ID2_INIT,
202 [PHY_1000T_CTRL] = 0x0e00, [M88E1000_PHY_SPEC_CTRL] = 0x360,
203 [M88E1000_EXT_PHY_SPEC_CTRL] = 0x0d60, [PHY_AUTONEG_ADV] = 0xde1,
204 [PHY_LP_ABILITY] = 0x1e0, [PHY_1000T_STATUS] = 0x3c00,
205 [M88E1000_PHY_SPEC_STATUS] = 0xac00,
208 static const uint32_t mac_reg_init[] = {
209 [PBA] = 0x00100030,
210 [LEDCTL] = 0x602,
211 [CTRL] = E1000_CTRL_SWDPIN2 | E1000_CTRL_SWDPIN0 |
212 E1000_CTRL_SPD_1000 | E1000_CTRL_SLU,
213 [STATUS] = 0x80000000 | E1000_STATUS_GIO_MASTER_ENABLE |
214 E1000_STATUS_ASDV | E1000_STATUS_MTXCKOK |
215 E1000_STATUS_SPEED_1000 | E1000_STATUS_FD |
216 E1000_STATUS_LU,
217 [MANC] = E1000_MANC_EN_MNG2HOST | E1000_MANC_RCV_TCO_EN |
218 E1000_MANC_ARP_EN | E1000_MANC_0298_EN |
219 E1000_MANC_RMCP_EN,
222 static void
223 set_interrupt_cause(E1000State *s, int index, uint32_t val)
225 if (val && (E1000_DEVID >= E1000_DEV_ID_82547EI_MOBILE)) {
226 /* Only for 8257x */
227 val |= E1000_ICR_INT_ASSERTED;
229 s->mac_reg[ICR] = val;
230 s->mac_reg[ICS] = val;
231 qemu_set_irq(s->dev.irq[0], (s->mac_reg[IMS] & s->mac_reg[ICR]) != 0);
234 static void
235 set_ics(E1000State *s, int index, uint32_t val)
237 DBGOUT(INTERRUPT, "set_ics %x, ICR %x, IMR %x\n", val, s->mac_reg[ICR],
238 s->mac_reg[IMS]);
239 set_interrupt_cause(s, 0, val | s->mac_reg[ICR]);
242 static int
243 rxbufsize(uint32_t v)
245 v &= E1000_RCTL_BSEX | E1000_RCTL_SZ_16384 | E1000_RCTL_SZ_8192 |
246 E1000_RCTL_SZ_4096 | E1000_RCTL_SZ_2048 | E1000_RCTL_SZ_1024 |
247 E1000_RCTL_SZ_512 | E1000_RCTL_SZ_256;
248 switch (v) {
249 case E1000_RCTL_BSEX | E1000_RCTL_SZ_16384:
250 return 16384;
251 case E1000_RCTL_BSEX | E1000_RCTL_SZ_8192:
252 return 8192;
253 case E1000_RCTL_BSEX | E1000_RCTL_SZ_4096:
254 return 4096;
255 case E1000_RCTL_SZ_1024:
256 return 1024;
257 case E1000_RCTL_SZ_512:
258 return 512;
259 case E1000_RCTL_SZ_256:
260 return 256;
262 return 2048;
265 static void e1000_reset(void *opaque)
267 E1000State *d = opaque;
268 uint8_t *macaddr = d->conf.macaddr.a;
269 int i;
271 qemu_del_timer(d->autoneg_timer);
272 memset(d->phy_reg, 0, sizeof d->phy_reg);
273 memmove(d->phy_reg, phy_reg_init, sizeof phy_reg_init);
274 memset(d->mac_reg, 0, sizeof d->mac_reg);
275 memmove(d->mac_reg, mac_reg_init, sizeof mac_reg_init);
276 d->rxbuf_min_shift = 1;
277 memset(&d->tx, 0, sizeof d->tx);
279 if (d->nic->nc.link_down) {
280 e1000_link_down(d);
283 /* Some guests expect pre-initialized RAH/RAL (AddrValid flag + MACaddr) */
284 d->mac_reg[RA] = 0;
285 d->mac_reg[RA + 1] = E1000_RAH_AV;
286 for (i = 0; i < 4; i++) {
287 d->mac_reg[RA] |= macaddr[i] << (8 * i);
288 d->mac_reg[RA + 1] |= (i < 2) ? macaddr[i + 4] << (8 * i) : 0;
292 static void
293 set_ctrl(E1000State *s, int index, uint32_t val)
295 /* RST is self clearing */
296 s->mac_reg[CTRL] = val & ~E1000_CTRL_RST;
299 static void
300 set_rx_control(E1000State *s, int index, uint32_t val)
302 s->mac_reg[RCTL] = val;
303 s->rxbuf_size = rxbufsize(val);
304 s->rxbuf_min_shift = ((val / E1000_RCTL_RDMTS_QUAT) & 3) + 1;
305 DBGOUT(RX, "RCTL: %d, mac_reg[RCTL] = 0x%x\n", s->mac_reg[RDT],
306 s->mac_reg[RCTL]);
307 qemu_flush_queued_packets(&s->nic->nc);
310 static void
311 set_mdic(E1000State *s, int index, uint32_t val)
313 uint32_t data = val & E1000_MDIC_DATA_MASK;
314 uint32_t addr = ((val & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT);
316 if ((val & E1000_MDIC_PHY_MASK) >> E1000_MDIC_PHY_SHIFT != 1) // phy #
317 val = s->mac_reg[MDIC] | E1000_MDIC_ERROR;
318 else if (val & E1000_MDIC_OP_READ) {
319 DBGOUT(MDIC, "MDIC read reg 0x%x\n", addr);
320 if (!(phy_regcap[addr] & PHY_R)) {
321 DBGOUT(MDIC, "MDIC read reg %x unhandled\n", addr);
322 val |= E1000_MDIC_ERROR;
323 } else
324 val = (val ^ data) | s->phy_reg[addr];
325 } else if (val & E1000_MDIC_OP_WRITE) {
326 DBGOUT(MDIC, "MDIC write reg 0x%x, value 0x%x\n", addr, data);
327 if (!(phy_regcap[addr] & PHY_W)) {
328 DBGOUT(MDIC, "MDIC write reg %x unhandled\n", addr);
329 val |= E1000_MDIC_ERROR;
330 } else {
331 if (addr < NPHYWRITEOPS && phyreg_writeops[addr]) {
332 phyreg_writeops[addr](s, index, data);
334 s->phy_reg[addr] = data;
337 s->mac_reg[MDIC] = val | E1000_MDIC_READY;
339 if (val & E1000_MDIC_INT_EN) {
340 set_ics(s, 0, E1000_ICR_MDAC);
344 static uint32_t
345 get_eecd(E1000State *s, int index)
347 uint32_t ret = E1000_EECD_PRES|E1000_EECD_GNT | s->eecd_state.old_eecd;
349 DBGOUT(EEPROM, "reading eeprom bit %d (reading %d)\n",
350 s->eecd_state.bitnum_out, s->eecd_state.reading);
351 if (!s->eecd_state.reading ||
352 ((s->eeprom_data[(s->eecd_state.bitnum_out >> 4) & 0x3f] >>
353 ((s->eecd_state.bitnum_out & 0xf) ^ 0xf))) & 1)
354 ret |= E1000_EECD_DO;
355 return ret;
358 static void
359 set_eecd(E1000State *s, int index, uint32_t val)
361 uint32_t oldval = s->eecd_state.old_eecd;
363 s->eecd_state.old_eecd = val & (E1000_EECD_SK | E1000_EECD_CS |
364 E1000_EECD_DI|E1000_EECD_FWE_MASK|E1000_EECD_REQ);
365 if (!(E1000_EECD_CS & val)) // CS inactive; nothing to do
366 return;
367 if (E1000_EECD_CS & (val ^ oldval)) { // CS rise edge; reset state
368 s->eecd_state.val_in = 0;
369 s->eecd_state.bitnum_in = 0;
370 s->eecd_state.bitnum_out = 0;
371 s->eecd_state.reading = 0;
373 if (!(E1000_EECD_SK & (val ^ oldval))) // no clock edge
374 return;
375 if (!(E1000_EECD_SK & val)) { // falling edge
376 s->eecd_state.bitnum_out++;
377 return;
379 s->eecd_state.val_in <<= 1;
380 if (val & E1000_EECD_DI)
381 s->eecd_state.val_in |= 1;
382 if (++s->eecd_state.bitnum_in == 9 && !s->eecd_state.reading) {
383 s->eecd_state.bitnum_out = ((s->eecd_state.val_in & 0x3f)<<4)-1;
384 s->eecd_state.reading = (((s->eecd_state.val_in >> 6) & 7) ==
385 EEPROM_READ_OPCODE_MICROWIRE);
387 DBGOUT(EEPROM, "eeprom bitnum in %d out %d, reading %d\n",
388 s->eecd_state.bitnum_in, s->eecd_state.bitnum_out,
389 s->eecd_state.reading);
392 static uint32_t
393 flash_eerd_read(E1000State *s, int x)
395 unsigned int index, r = s->mac_reg[EERD] & ~E1000_EEPROM_RW_REG_START;
397 if ((s->mac_reg[EERD] & E1000_EEPROM_RW_REG_START) == 0)
398 return (s->mac_reg[EERD]);
400 if ((index = r >> E1000_EEPROM_RW_ADDR_SHIFT) > EEPROM_CHECKSUM_REG)
401 return (E1000_EEPROM_RW_REG_DONE | r);
403 return ((s->eeprom_data[index] << E1000_EEPROM_RW_REG_DATA) |
404 E1000_EEPROM_RW_REG_DONE | r);
407 static void
408 putsum(uint8_t *data, uint32_t n, uint32_t sloc, uint32_t css, uint32_t cse)
410 uint32_t sum;
412 if (cse && cse < n)
413 n = cse + 1;
414 if (sloc < n-1) {
415 sum = net_checksum_add(n-css, data+css);
416 cpu_to_be16wu((uint16_t *)(data + sloc),
417 net_checksum_finish(sum));
421 static inline int
422 vlan_enabled(E1000State *s)
424 return ((s->mac_reg[CTRL] & E1000_CTRL_VME) != 0);
427 static inline int
428 vlan_rx_filter_enabled(E1000State *s)
430 return ((s->mac_reg[RCTL] & E1000_RCTL_VFE) != 0);
433 static inline int
434 is_vlan_packet(E1000State *s, const uint8_t *buf)
436 return (be16_to_cpup((uint16_t *)(buf + 12)) ==
437 le16_to_cpup((uint16_t *)(s->mac_reg + VET)));
440 static inline int
441 is_vlan_txd(uint32_t txd_lower)
443 return ((txd_lower & E1000_TXD_CMD_VLE) != 0);
446 /* FCS aka Ethernet CRC-32. We don't get it from backends and can't
447 * fill it in, just pad descriptor length by 4 bytes unless guest
448 * told us to strip it off the packet. */
449 static inline int
450 fcs_len(E1000State *s)
452 return (s->mac_reg[RCTL] & E1000_RCTL_SECRC) ? 0 : 4;
455 static void
456 e1000_send_packet(E1000State *s, const uint8_t *buf, int size)
458 if (s->phy_reg[PHY_CTRL] & MII_CR_LOOPBACK) {
459 s->nic->nc.info->receive(&s->nic->nc, buf, size);
460 } else {
461 qemu_send_packet(&s->nic->nc, buf, size);
465 static void
466 xmit_seg(E1000State *s)
468 uint16_t len, *sp;
469 unsigned int frames = s->tx.tso_frames, css, sofar, n;
470 struct e1000_tx *tp = &s->tx;
472 if (tp->tse && tp->cptse) {
473 css = tp->ipcss;
474 DBGOUT(TXSUM, "frames %d size %d ipcss %d\n",
475 frames, tp->size, css);
476 if (tp->ip) { // IPv4
477 cpu_to_be16wu((uint16_t *)(tp->data+css+2),
478 tp->size - css);
479 cpu_to_be16wu((uint16_t *)(tp->data+css+4),
480 be16_to_cpup((uint16_t *)(tp->data+css+4))+frames);
481 } else // IPv6
482 cpu_to_be16wu((uint16_t *)(tp->data+css+4),
483 tp->size - css);
484 css = tp->tucss;
485 len = tp->size - css;
486 DBGOUT(TXSUM, "tcp %d tucss %d len %d\n", tp->tcp, css, len);
487 if (tp->tcp) {
488 sofar = frames * tp->mss;
489 cpu_to_be32wu((uint32_t *)(tp->data+css+4), // seq
490 be32_to_cpupu((uint32_t *)(tp->data+css+4))+sofar);
491 if (tp->paylen - sofar > tp->mss)
492 tp->data[css + 13] &= ~9; // PSH, FIN
493 } else // UDP
494 cpu_to_be16wu((uint16_t *)(tp->data+css+4), len);
495 if (tp->sum_needed & E1000_TXD_POPTS_TXSM) {
496 unsigned int phsum;
497 // add pseudo-header length before checksum calculation
498 sp = (uint16_t *)(tp->data + tp->tucso);
499 phsum = be16_to_cpup(sp) + len;
500 phsum = (phsum >> 16) + (phsum & 0xffff);
501 cpu_to_be16wu(sp, phsum);
503 tp->tso_frames++;
506 if (tp->sum_needed & E1000_TXD_POPTS_TXSM)
507 putsum(tp->data, tp->size, tp->tucso, tp->tucss, tp->tucse);
508 if (tp->sum_needed & E1000_TXD_POPTS_IXSM)
509 putsum(tp->data, tp->size, tp->ipcso, tp->ipcss, tp->ipcse);
510 if (tp->vlan_needed) {
511 memmove(tp->vlan, tp->data, 4);
512 memmove(tp->data, tp->data + 4, 8);
513 memcpy(tp->data + 8, tp->vlan_header, 4);
514 e1000_send_packet(s, tp->vlan, tp->size + 4);
515 } else
516 e1000_send_packet(s, tp->data, tp->size);
517 s->mac_reg[TPT]++;
518 s->mac_reg[GPTC]++;
519 n = s->mac_reg[TOTL];
520 if ((s->mac_reg[TOTL] += s->tx.size) < n)
521 s->mac_reg[TOTH]++;
524 static void
525 process_tx_desc(E1000State *s, struct e1000_tx_desc *dp)
527 uint32_t txd_lower = le32_to_cpu(dp->lower.data);
528 uint32_t dtype = txd_lower & (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D);
529 unsigned int split_size = txd_lower & 0xffff, bytes, sz, op;
530 unsigned int msh = 0xfffff, hdr = 0;
531 uint64_t addr;
532 struct e1000_context_desc *xp = (struct e1000_context_desc *)dp;
533 struct e1000_tx *tp = &s->tx;
535 if (dtype == E1000_TXD_CMD_DEXT) { // context descriptor
536 op = le32_to_cpu(xp->cmd_and_length);
537 tp->ipcss = xp->lower_setup.ip_fields.ipcss;
538 tp->ipcso = xp->lower_setup.ip_fields.ipcso;
539 tp->ipcse = le16_to_cpu(xp->lower_setup.ip_fields.ipcse);
540 tp->tucss = xp->upper_setup.tcp_fields.tucss;
541 tp->tucso = xp->upper_setup.tcp_fields.tucso;
542 tp->tucse = le16_to_cpu(xp->upper_setup.tcp_fields.tucse);
543 tp->paylen = op & 0xfffff;
544 tp->hdr_len = xp->tcp_seg_setup.fields.hdr_len;
545 tp->mss = le16_to_cpu(xp->tcp_seg_setup.fields.mss);
546 tp->ip = (op & E1000_TXD_CMD_IP) ? 1 : 0;
547 tp->tcp = (op & E1000_TXD_CMD_TCP) ? 1 : 0;
548 tp->tse = (op & E1000_TXD_CMD_TSE) ? 1 : 0;
549 tp->tso_frames = 0;
550 if (tp->tucso == 0) { // this is probably wrong
551 DBGOUT(TXSUM, "TCP/UDP: cso 0!\n");
552 tp->tucso = tp->tucss + (tp->tcp ? 16 : 6);
554 return;
555 } else if (dtype == (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D)) {
556 // data descriptor
557 if (tp->size == 0) {
558 tp->sum_needed = le32_to_cpu(dp->upper.data) >> 8;
560 tp->cptse = ( txd_lower & E1000_TXD_CMD_TSE ) ? 1 : 0;
561 } else {
562 // legacy descriptor
563 tp->cptse = 0;
566 if (vlan_enabled(s) && is_vlan_txd(txd_lower) &&
567 (tp->cptse || txd_lower & E1000_TXD_CMD_EOP)) {
568 tp->vlan_needed = 1;
569 cpu_to_be16wu((uint16_t *)(tp->vlan_header),
570 le16_to_cpup((uint16_t *)(s->mac_reg + VET)));
571 cpu_to_be16wu((uint16_t *)(tp->vlan_header + 2),
572 le16_to_cpu(dp->upper.fields.special));
575 addr = le64_to_cpu(dp->buffer_addr);
576 if (tp->tse && tp->cptse) {
577 hdr = tp->hdr_len;
578 msh = hdr + tp->mss;
579 do {
580 bytes = split_size;
581 if (tp->size + bytes > msh)
582 bytes = msh - tp->size;
584 bytes = MIN(sizeof(tp->data) - tp->size, bytes);
585 pci_dma_read(&s->dev, addr, tp->data + tp->size, bytes);
586 if ((sz = tp->size + bytes) >= hdr && tp->size < hdr)
587 memmove(tp->header, tp->data, hdr);
588 tp->size = sz;
589 addr += bytes;
590 if (sz == msh) {
591 xmit_seg(s);
592 memmove(tp->data, tp->header, hdr);
593 tp->size = hdr;
595 } while (split_size -= bytes);
596 } else if (!tp->tse && tp->cptse) {
597 // context descriptor TSE is not set, while data descriptor TSE is set
598 DBGOUT(TXERR, "TCP segmentation error\n");
599 } else {
600 split_size = MIN(sizeof(tp->data) - tp->size, split_size);
601 pci_dma_read(&s->dev, addr, tp->data + tp->size, split_size);
602 tp->size += split_size;
605 if (!(txd_lower & E1000_TXD_CMD_EOP))
606 return;
607 if (!(tp->tse && tp->cptse && tp->size < hdr))
608 xmit_seg(s);
609 tp->tso_frames = 0;
610 tp->sum_needed = 0;
611 tp->vlan_needed = 0;
612 tp->size = 0;
613 tp->cptse = 0;
616 static uint32_t
617 txdesc_writeback(E1000State *s, dma_addr_t base, struct e1000_tx_desc *dp)
619 uint32_t txd_upper, txd_lower = le32_to_cpu(dp->lower.data);
621 if (!(txd_lower & (E1000_TXD_CMD_RS|E1000_TXD_CMD_RPS)))
622 return 0;
623 txd_upper = (le32_to_cpu(dp->upper.data) | E1000_TXD_STAT_DD) &
624 ~(E1000_TXD_STAT_EC | E1000_TXD_STAT_LC | E1000_TXD_STAT_TU);
625 dp->upper.data = cpu_to_le32(txd_upper);
626 pci_dma_write(&s->dev, base + ((char *)&dp->upper - (char *)dp),
627 &dp->upper, sizeof(dp->upper));
628 return E1000_ICR_TXDW;
631 static uint64_t tx_desc_base(E1000State *s)
633 uint64_t bah = s->mac_reg[TDBAH];
634 uint64_t bal = s->mac_reg[TDBAL] & ~0xf;
636 return (bah << 32) + bal;
639 static void
640 start_xmit(E1000State *s)
642 dma_addr_t base;
643 struct e1000_tx_desc desc;
644 uint32_t tdh_start = s->mac_reg[TDH], cause = E1000_ICS_TXQE;
646 if (!(s->mac_reg[TCTL] & E1000_TCTL_EN)) {
647 DBGOUT(TX, "tx disabled\n");
648 return;
651 while (s->mac_reg[TDH] != s->mac_reg[TDT]) {
652 base = tx_desc_base(s) +
653 sizeof(struct e1000_tx_desc) * s->mac_reg[TDH];
654 pci_dma_read(&s->dev, base, &desc, sizeof(desc));
656 DBGOUT(TX, "index %d: %p : %x %x\n", s->mac_reg[TDH],
657 (void *)(intptr_t)desc.buffer_addr, desc.lower.data,
658 desc.upper.data);
660 process_tx_desc(s, &desc);
661 cause |= txdesc_writeback(s, base, &desc);
663 if (++s->mac_reg[TDH] * sizeof(desc) >= s->mac_reg[TDLEN])
664 s->mac_reg[TDH] = 0;
666 * the following could happen only if guest sw assigns
667 * bogus values to TDT/TDLEN.
668 * there's nothing too intelligent we could do about this.
670 if (s->mac_reg[TDH] == tdh_start) {
671 DBGOUT(TXERR, "TDH wraparound @%x, TDT %x, TDLEN %x\n",
672 tdh_start, s->mac_reg[TDT], s->mac_reg[TDLEN]);
673 break;
676 set_ics(s, 0, cause);
679 static int
680 receive_filter(E1000State *s, const uint8_t *buf, int size)
682 static const uint8_t bcast[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
683 static const int mta_shift[] = {4, 3, 2, 0};
684 uint32_t f, rctl = s->mac_reg[RCTL], ra[2], *rp;
686 if (is_vlan_packet(s, buf) && vlan_rx_filter_enabled(s)) {
687 uint16_t vid = be16_to_cpup((uint16_t *)(buf + 14));
688 uint32_t vfta = le32_to_cpup((uint32_t *)(s->mac_reg + VFTA) +
689 ((vid >> 5) & 0x7f));
690 if ((vfta & (1 << (vid & 0x1f))) == 0)
691 return 0;
694 if (rctl & E1000_RCTL_UPE) // promiscuous
695 return 1;
697 if ((buf[0] & 1) && (rctl & E1000_RCTL_MPE)) // promiscuous mcast
698 return 1;
700 if ((rctl & E1000_RCTL_BAM) && !memcmp(buf, bcast, sizeof bcast))
701 return 1;
703 for (rp = s->mac_reg + RA; rp < s->mac_reg + RA + 32; rp += 2) {
704 if (!(rp[1] & E1000_RAH_AV))
705 continue;
706 ra[0] = cpu_to_le32(rp[0]);
707 ra[1] = cpu_to_le32(rp[1]);
708 if (!memcmp(buf, (uint8_t *)ra, 6)) {
709 DBGOUT(RXFILTER,
710 "unicast match[%d]: %02x:%02x:%02x:%02x:%02x:%02x\n",
711 (int)(rp - s->mac_reg - RA)/2,
712 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
713 return 1;
716 DBGOUT(RXFILTER, "unicast mismatch: %02x:%02x:%02x:%02x:%02x:%02x\n",
717 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
719 f = mta_shift[(rctl >> E1000_RCTL_MO_SHIFT) & 3];
720 f = (((buf[5] << 8) | buf[4]) >> f) & 0xfff;
721 if (s->mac_reg[MTA + (f >> 5)] & (1 << (f & 0x1f)))
722 return 1;
723 DBGOUT(RXFILTER,
724 "dropping, inexact filter mismatch: %02x:%02x:%02x:%02x:%02x:%02x MO %d MTA[%d] %x\n",
725 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5],
726 (rctl >> E1000_RCTL_MO_SHIFT) & 3, f >> 5,
727 s->mac_reg[MTA + (f >> 5)]);
729 return 0;
732 static void
733 e1000_set_link_status(NetClientState *nc)
735 E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
736 uint32_t old_status = s->mac_reg[STATUS];
738 if (nc->link_down) {
739 e1000_link_down(s);
740 } else {
741 e1000_link_up(s);
744 if (s->mac_reg[STATUS] != old_status)
745 set_ics(s, 0, E1000_ICR_LSC);
748 static bool e1000_has_rxbufs(E1000State *s, size_t total_size)
750 int bufs;
751 /* Fast-path short packets */
752 if (total_size <= s->rxbuf_size) {
753 return s->mac_reg[RDH] != s->mac_reg[RDT];
755 if (s->mac_reg[RDH] < s->mac_reg[RDT]) {
756 bufs = s->mac_reg[RDT] - s->mac_reg[RDH];
757 } else if (s->mac_reg[RDH] > s->mac_reg[RDT]) {
758 bufs = s->mac_reg[RDLEN] / sizeof(struct e1000_rx_desc) +
759 s->mac_reg[RDT] - s->mac_reg[RDH];
760 } else {
761 return false;
763 return total_size <= bufs * s->rxbuf_size;
766 static int
767 e1000_can_receive(NetClientState *nc)
769 E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
771 return (s->mac_reg[RCTL] & E1000_RCTL_EN) && e1000_has_rxbufs(s, 1);
774 static uint64_t rx_desc_base(E1000State *s)
776 uint64_t bah = s->mac_reg[RDBAH];
777 uint64_t bal = s->mac_reg[RDBAL] & ~0xf;
779 return (bah << 32) + bal;
782 static ssize_t
783 e1000_receive(NetClientState *nc, const uint8_t *buf, size_t size)
785 E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
786 struct e1000_rx_desc desc;
787 dma_addr_t base;
788 unsigned int n, rdt;
789 uint32_t rdh_start;
790 uint16_t vlan_special = 0;
791 uint8_t vlan_status = 0, vlan_offset = 0;
792 uint8_t min_buf[MIN_BUF_SIZE];
793 size_t desc_offset;
794 size_t desc_size;
795 size_t total_size;
797 if (!(s->mac_reg[RCTL] & E1000_RCTL_EN))
798 return -1;
800 /* Pad to minimum Ethernet frame length */
801 if (size < sizeof(min_buf)) {
802 memcpy(min_buf, buf, size);
803 memset(&min_buf[size], 0, sizeof(min_buf) - size);
804 buf = min_buf;
805 size = sizeof(min_buf);
808 if (!receive_filter(s, buf, size))
809 return size;
811 if (vlan_enabled(s) && is_vlan_packet(s, buf)) {
812 vlan_special = cpu_to_le16(be16_to_cpup((uint16_t *)(buf + 14)));
813 memmove((uint8_t *)buf + 4, buf, 12);
814 vlan_status = E1000_RXD_STAT_VP;
815 vlan_offset = 4;
816 size -= 4;
819 rdh_start = s->mac_reg[RDH];
820 desc_offset = 0;
821 total_size = size + fcs_len(s);
822 if (!e1000_has_rxbufs(s, total_size)) {
823 set_ics(s, 0, E1000_ICS_RXO);
824 return -1;
826 do {
827 desc_size = total_size - desc_offset;
828 if (desc_size > s->rxbuf_size) {
829 desc_size = s->rxbuf_size;
831 base = rx_desc_base(s) + sizeof(desc) * s->mac_reg[RDH];
832 pci_dma_read(&s->dev, base, &desc, sizeof(desc));
833 desc.special = vlan_special;
834 desc.status |= (vlan_status | E1000_RXD_STAT_DD);
835 if (desc.buffer_addr) {
836 if (desc_offset < size) {
837 size_t copy_size = size - desc_offset;
838 if (copy_size > s->rxbuf_size) {
839 copy_size = s->rxbuf_size;
841 pci_dma_write(&s->dev, le64_to_cpu(desc.buffer_addr),
842 buf + desc_offset + vlan_offset, copy_size);
844 desc_offset += desc_size;
845 desc.length = cpu_to_le16(desc_size);
846 if (desc_offset >= total_size) {
847 desc.status |= E1000_RXD_STAT_EOP | E1000_RXD_STAT_IXSM;
848 } else {
849 /* Guest zeroing out status is not a hardware requirement.
850 Clear EOP in case guest didn't do it. */
851 desc.status &= ~E1000_RXD_STAT_EOP;
853 } else { // as per intel docs; skip descriptors with null buf addr
854 DBGOUT(RX, "Null RX descriptor!!\n");
856 pci_dma_write(&s->dev, base, &desc, sizeof(desc));
858 if (++s->mac_reg[RDH] * sizeof(desc) >= s->mac_reg[RDLEN])
859 s->mac_reg[RDH] = 0;
860 /* see comment in start_xmit; same here */
861 if (s->mac_reg[RDH] == rdh_start) {
862 DBGOUT(RXERR, "RDH wraparound @%x, RDT %x, RDLEN %x\n",
863 rdh_start, s->mac_reg[RDT], s->mac_reg[RDLEN]);
864 set_ics(s, 0, E1000_ICS_RXO);
865 return -1;
867 } while (desc_offset < total_size);
869 s->mac_reg[GPRC]++;
870 s->mac_reg[TPR]++;
871 /* TOR - Total Octets Received:
872 * This register includes bytes received in a packet from the <Destination
873 * Address> field through the <CRC> field, inclusively.
875 n = s->mac_reg[TORL] + size + /* Always include FCS length. */ 4;
876 if (n < s->mac_reg[TORL])
877 s->mac_reg[TORH]++;
878 s->mac_reg[TORL] = n;
880 n = E1000_ICS_RXT0;
881 if ((rdt = s->mac_reg[RDT]) < s->mac_reg[RDH])
882 rdt += s->mac_reg[RDLEN] / sizeof(desc);
883 if (((rdt - s->mac_reg[RDH]) * sizeof(desc)) <= s->mac_reg[RDLEN] >>
884 s->rxbuf_min_shift)
885 n |= E1000_ICS_RXDMT0;
887 set_ics(s, 0, n);
889 return size;
892 static uint32_t
893 mac_readreg(E1000State *s, int index)
895 return s->mac_reg[index];
898 static uint32_t
899 mac_icr_read(E1000State *s, int index)
901 uint32_t ret = s->mac_reg[ICR];
903 DBGOUT(INTERRUPT, "ICR read: %x\n", ret);
904 set_interrupt_cause(s, 0, 0);
905 return ret;
908 static uint32_t
909 mac_read_clr4(E1000State *s, int index)
911 uint32_t ret = s->mac_reg[index];
913 s->mac_reg[index] = 0;
914 return ret;
917 static uint32_t
918 mac_read_clr8(E1000State *s, int index)
920 uint32_t ret = s->mac_reg[index];
922 s->mac_reg[index] = 0;
923 s->mac_reg[index-1] = 0;
924 return ret;
927 static void
928 mac_writereg(E1000State *s, int index, uint32_t val)
930 s->mac_reg[index] = val;
933 static void
934 set_rdt(E1000State *s, int index, uint32_t val)
936 s->mac_reg[index] = val & 0xffff;
937 if (e1000_has_rxbufs(s, 1)) {
938 qemu_flush_queued_packets(&s->nic->nc);
942 static void
943 set_16bit(E1000State *s, int index, uint32_t val)
945 s->mac_reg[index] = val & 0xffff;
948 static void
949 set_dlen(E1000State *s, int index, uint32_t val)
951 s->mac_reg[index] = val & 0xfff80;
954 static void
955 set_tctl(E1000State *s, int index, uint32_t val)
957 s->mac_reg[index] = val;
958 s->mac_reg[TDT] &= 0xffff;
959 start_xmit(s);
962 static void
963 set_icr(E1000State *s, int index, uint32_t val)
965 DBGOUT(INTERRUPT, "set_icr %x\n", val);
966 set_interrupt_cause(s, 0, s->mac_reg[ICR] & ~val);
969 static void
970 set_imc(E1000State *s, int index, uint32_t val)
972 s->mac_reg[IMS] &= ~val;
973 set_ics(s, 0, 0);
976 static void
977 set_ims(E1000State *s, int index, uint32_t val)
979 s->mac_reg[IMS] |= val;
980 set_ics(s, 0, 0);
983 #define getreg(x) [x] = mac_readreg
984 static uint32_t (*macreg_readops[])(E1000State *, int) = {
985 getreg(PBA), getreg(RCTL), getreg(TDH), getreg(TXDCTL),
986 getreg(WUFC), getreg(TDT), getreg(CTRL), getreg(LEDCTL),
987 getreg(MANC), getreg(MDIC), getreg(SWSM), getreg(STATUS),
988 getreg(TORL), getreg(TOTL), getreg(IMS), getreg(TCTL),
989 getreg(RDH), getreg(RDT), getreg(VET), getreg(ICS),
990 getreg(TDBAL), getreg(TDBAH), getreg(RDBAH), getreg(RDBAL),
991 getreg(TDLEN), getreg(RDLEN),
993 [TOTH] = mac_read_clr8, [TORH] = mac_read_clr8, [GPRC] = mac_read_clr4,
994 [GPTC] = mac_read_clr4, [TPR] = mac_read_clr4, [TPT] = mac_read_clr4,
995 [ICR] = mac_icr_read, [EECD] = get_eecd, [EERD] = flash_eerd_read,
996 [CRCERRS ... MPC] = &mac_readreg,
997 [RA ... RA+31] = &mac_readreg,
998 [MTA ... MTA+127] = &mac_readreg,
999 [VFTA ... VFTA+127] = &mac_readreg,
1001 enum { NREADOPS = ARRAY_SIZE(macreg_readops) };
1003 #define putreg(x) [x] = mac_writereg
1004 static void (*macreg_writeops[])(E1000State *, int, uint32_t) = {
1005 putreg(PBA), putreg(EERD), putreg(SWSM), putreg(WUFC),
1006 putreg(TDBAL), putreg(TDBAH), putreg(TXDCTL), putreg(RDBAH),
1007 putreg(RDBAL), putreg(LEDCTL), putreg(VET),
1008 [TDLEN] = set_dlen, [RDLEN] = set_dlen, [TCTL] = set_tctl,
1009 [TDT] = set_tctl, [MDIC] = set_mdic, [ICS] = set_ics,
1010 [TDH] = set_16bit, [RDH] = set_16bit, [RDT] = set_rdt,
1011 [IMC] = set_imc, [IMS] = set_ims, [ICR] = set_icr,
1012 [EECD] = set_eecd, [RCTL] = set_rx_control, [CTRL] = set_ctrl,
1013 [RA ... RA+31] = &mac_writereg,
1014 [MTA ... MTA+127] = &mac_writereg,
1015 [VFTA ... VFTA+127] = &mac_writereg,
1018 enum { NWRITEOPS = ARRAY_SIZE(macreg_writeops) };
1020 static void
1021 e1000_mmio_write(void *opaque, hwaddr addr, uint64_t val,
1022 unsigned size)
1024 E1000State *s = opaque;
1025 unsigned int index = (addr & 0x1ffff) >> 2;
1027 if (index < NWRITEOPS && macreg_writeops[index]) {
1028 macreg_writeops[index](s, index, val);
1029 } else if (index < NREADOPS && macreg_readops[index]) {
1030 DBGOUT(MMIO, "e1000_mmio_writel RO %x: 0x%04"PRIx64"\n", index<<2, val);
1031 } else {
1032 DBGOUT(UNKNOWN, "MMIO unknown write addr=0x%08x,val=0x%08"PRIx64"\n",
1033 index<<2, val);
1037 static uint64_t
1038 e1000_mmio_read(void *opaque, hwaddr addr, unsigned size)
1040 E1000State *s = opaque;
1041 unsigned int index = (addr & 0x1ffff) >> 2;
1043 if (index < NREADOPS && macreg_readops[index])
1045 return macreg_readops[index](s, index);
1047 DBGOUT(UNKNOWN, "MMIO unknown read addr=0x%08x\n", index<<2);
1048 return 0;
1051 static const MemoryRegionOps e1000_mmio_ops = {
1052 .read = e1000_mmio_read,
1053 .write = e1000_mmio_write,
1054 .endianness = DEVICE_LITTLE_ENDIAN,
1055 .impl = {
1056 .min_access_size = 4,
1057 .max_access_size = 4,
1061 static uint64_t e1000_io_read(void *opaque, hwaddr addr,
1062 unsigned size)
1064 E1000State *s = opaque;
1066 (void)s;
1067 return 0;
1070 static void e1000_io_write(void *opaque, hwaddr addr,
1071 uint64_t val, unsigned size)
1073 E1000State *s = opaque;
1075 (void)s;
1078 static const MemoryRegionOps e1000_io_ops = {
1079 .read = e1000_io_read,
1080 .write = e1000_io_write,
1081 .endianness = DEVICE_LITTLE_ENDIAN,
1084 static bool is_version_1(void *opaque, int version_id)
1086 return version_id == 1;
1089 static int e1000_post_load(void *opaque, int version_id)
1091 E1000State *s = opaque;
1093 /* nc.link_down can't be migrated, so infer link_down according
1094 * to link status bit in mac_reg[STATUS] */
1095 s->nic->nc.link_down = (s->mac_reg[STATUS] & E1000_STATUS_LU) == 0;
1097 return 0;
1100 static const VMStateDescription vmstate_e1000 = {
1101 .name = "e1000",
1102 .version_id = 2,
1103 .minimum_version_id = 1,
1104 .minimum_version_id_old = 1,
1105 .post_load = e1000_post_load,
1106 .fields = (VMStateField []) {
1107 VMSTATE_PCI_DEVICE(dev, E1000State),
1108 VMSTATE_UNUSED_TEST(is_version_1, 4), /* was instance id */
1109 VMSTATE_UNUSED(4), /* Was mmio_base. */
1110 VMSTATE_UINT32(rxbuf_size, E1000State),
1111 VMSTATE_UINT32(rxbuf_min_shift, E1000State),
1112 VMSTATE_UINT32(eecd_state.val_in, E1000State),
1113 VMSTATE_UINT16(eecd_state.bitnum_in, E1000State),
1114 VMSTATE_UINT16(eecd_state.bitnum_out, E1000State),
1115 VMSTATE_UINT16(eecd_state.reading, E1000State),
1116 VMSTATE_UINT32(eecd_state.old_eecd, E1000State),
1117 VMSTATE_UINT8(tx.ipcss, E1000State),
1118 VMSTATE_UINT8(tx.ipcso, E1000State),
1119 VMSTATE_UINT16(tx.ipcse, E1000State),
1120 VMSTATE_UINT8(tx.tucss, E1000State),
1121 VMSTATE_UINT8(tx.tucso, E1000State),
1122 VMSTATE_UINT16(tx.tucse, E1000State),
1123 VMSTATE_UINT32(tx.paylen, E1000State),
1124 VMSTATE_UINT8(tx.hdr_len, E1000State),
1125 VMSTATE_UINT16(tx.mss, E1000State),
1126 VMSTATE_UINT16(tx.size, E1000State),
1127 VMSTATE_UINT16(tx.tso_frames, E1000State),
1128 VMSTATE_UINT8(tx.sum_needed, E1000State),
1129 VMSTATE_INT8(tx.ip, E1000State),
1130 VMSTATE_INT8(tx.tcp, E1000State),
1131 VMSTATE_BUFFER(tx.header, E1000State),
1132 VMSTATE_BUFFER(tx.data, E1000State),
1133 VMSTATE_UINT16_ARRAY(eeprom_data, E1000State, 64),
1134 VMSTATE_UINT16_ARRAY(phy_reg, E1000State, 0x20),
1135 VMSTATE_UINT32(mac_reg[CTRL], E1000State),
1136 VMSTATE_UINT32(mac_reg[EECD], E1000State),
1137 VMSTATE_UINT32(mac_reg[EERD], E1000State),
1138 VMSTATE_UINT32(mac_reg[GPRC], E1000State),
1139 VMSTATE_UINT32(mac_reg[GPTC], E1000State),
1140 VMSTATE_UINT32(mac_reg[ICR], E1000State),
1141 VMSTATE_UINT32(mac_reg[ICS], E1000State),
1142 VMSTATE_UINT32(mac_reg[IMC], E1000State),
1143 VMSTATE_UINT32(mac_reg[IMS], E1000State),
1144 VMSTATE_UINT32(mac_reg[LEDCTL], E1000State),
1145 VMSTATE_UINT32(mac_reg[MANC], E1000State),
1146 VMSTATE_UINT32(mac_reg[MDIC], E1000State),
1147 VMSTATE_UINT32(mac_reg[MPC], E1000State),
1148 VMSTATE_UINT32(mac_reg[PBA], E1000State),
1149 VMSTATE_UINT32(mac_reg[RCTL], E1000State),
1150 VMSTATE_UINT32(mac_reg[RDBAH], E1000State),
1151 VMSTATE_UINT32(mac_reg[RDBAL], E1000State),
1152 VMSTATE_UINT32(mac_reg[RDH], E1000State),
1153 VMSTATE_UINT32(mac_reg[RDLEN], E1000State),
1154 VMSTATE_UINT32(mac_reg[RDT], E1000State),
1155 VMSTATE_UINT32(mac_reg[STATUS], E1000State),
1156 VMSTATE_UINT32(mac_reg[SWSM], E1000State),
1157 VMSTATE_UINT32(mac_reg[TCTL], E1000State),
1158 VMSTATE_UINT32(mac_reg[TDBAH], E1000State),
1159 VMSTATE_UINT32(mac_reg[TDBAL], E1000State),
1160 VMSTATE_UINT32(mac_reg[TDH], E1000State),
1161 VMSTATE_UINT32(mac_reg[TDLEN], E1000State),
1162 VMSTATE_UINT32(mac_reg[TDT], E1000State),
1163 VMSTATE_UINT32(mac_reg[TORH], E1000State),
1164 VMSTATE_UINT32(mac_reg[TORL], E1000State),
1165 VMSTATE_UINT32(mac_reg[TOTH], E1000State),
1166 VMSTATE_UINT32(mac_reg[TOTL], E1000State),
1167 VMSTATE_UINT32(mac_reg[TPR], E1000State),
1168 VMSTATE_UINT32(mac_reg[TPT], E1000State),
1169 VMSTATE_UINT32(mac_reg[TXDCTL], E1000State),
1170 VMSTATE_UINT32(mac_reg[WUFC], E1000State),
1171 VMSTATE_UINT32(mac_reg[VET], E1000State),
1172 VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, RA, 32),
1173 VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, MTA, 128),
1174 VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, VFTA, 128),
1175 VMSTATE_END_OF_LIST()
1179 static const uint16_t e1000_eeprom_template[64] = {
1180 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,
1181 0x3000, 0x1000, 0x6403, E1000_DEVID, 0x8086, E1000_DEVID, 0x8086, 0x3040,
1182 0x0008, 0x2000, 0x7e14, 0x0048, 0x1000, 0x00d8, 0x0000, 0x2700,
1183 0x6cc9, 0x3150, 0x0722, 0x040b, 0x0984, 0x0000, 0xc000, 0x0706,
1184 0x1008, 0x0000, 0x0f04, 0x7fff, 0x4d01, 0xffff, 0xffff, 0xffff,
1185 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
1186 0x0100, 0x4000, 0x121c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
1187 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000,
1190 /* PCI interface */
1192 static void
1193 e1000_mmio_setup(E1000State *d)
1195 int i;
1196 const uint32_t excluded_regs[] = {
1197 E1000_MDIC, E1000_ICR, E1000_ICS, E1000_IMS,
1198 E1000_IMC, E1000_TCTL, E1000_TDT, PNPMMIO_SIZE
1201 memory_region_init_io(&d->mmio, &e1000_mmio_ops, d, "e1000-mmio",
1202 PNPMMIO_SIZE);
1203 memory_region_add_coalescing(&d->mmio, 0, excluded_regs[0]);
1204 for (i = 0; excluded_regs[i] != PNPMMIO_SIZE; i++)
1205 memory_region_add_coalescing(&d->mmio, excluded_regs[i] + 4,
1206 excluded_regs[i+1] - excluded_regs[i] - 4);
1207 memory_region_init_io(&d->io, &e1000_io_ops, d, "e1000-io", IOPORT_SIZE);
1210 static void
1211 e1000_cleanup(NetClientState *nc)
1213 E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
1215 s->nic = NULL;
1218 static void
1219 pci_e1000_uninit(PCIDevice *dev)
1221 E1000State *d = DO_UPCAST(E1000State, dev, dev);
1223 qemu_del_timer(d->autoneg_timer);
1224 qemu_free_timer(d->autoneg_timer);
1225 memory_region_destroy(&d->mmio);
1226 memory_region_destroy(&d->io);
1227 qemu_del_net_client(&d->nic->nc);
1230 static NetClientInfo net_e1000_info = {
1231 .type = NET_CLIENT_OPTIONS_KIND_NIC,
1232 .size = sizeof(NICState),
1233 .can_receive = e1000_can_receive,
1234 .receive = e1000_receive,
1235 .cleanup = e1000_cleanup,
1236 .link_status_changed = e1000_set_link_status,
1239 static int pci_e1000_init(PCIDevice *pci_dev)
1241 E1000State *d = DO_UPCAST(E1000State, dev, pci_dev);
1242 uint8_t *pci_conf;
1243 uint16_t checksum = 0;
1244 int i;
1245 uint8_t *macaddr;
1247 pci_conf = d->dev.config;
1249 /* TODO: RST# value should be 0, PCI spec 6.2.4 */
1250 pci_conf[PCI_CACHE_LINE_SIZE] = 0x10;
1252 pci_conf[PCI_INTERRUPT_PIN] = 1; /* interrupt pin A */
1254 e1000_mmio_setup(d);
1256 pci_register_bar(&d->dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &d->mmio);
1258 pci_register_bar(&d->dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &d->io);
1260 memmove(d->eeprom_data, e1000_eeprom_template,
1261 sizeof e1000_eeprom_template);
1262 qemu_macaddr_default_if_unset(&d->conf.macaddr);
1263 macaddr = d->conf.macaddr.a;
1264 for (i = 0; i < 3; i++)
1265 d->eeprom_data[i] = (macaddr[2*i+1]<<8) | macaddr[2*i];
1266 for (i = 0; i < EEPROM_CHECKSUM_REG; i++)
1267 checksum += d->eeprom_data[i];
1268 checksum = (uint16_t) EEPROM_SUM - checksum;
1269 d->eeprom_data[EEPROM_CHECKSUM_REG] = checksum;
1271 d->nic = qemu_new_nic(&net_e1000_info, &d->conf,
1272 object_get_typename(OBJECT(d)), d->dev.qdev.id, d);
1274 qemu_format_nic_info_str(&d->nic->nc, macaddr);
1276 add_boot_device_path(d->conf.bootindex, &pci_dev->qdev, "/ethernet-phy@0");
1278 d->autoneg_timer = qemu_new_timer_ms(vm_clock, e1000_autoneg_timer, d);
1280 return 0;
1283 static void qdev_e1000_reset(DeviceState *dev)
1285 E1000State *d = DO_UPCAST(E1000State, dev.qdev, dev);
1286 e1000_reset(d);
1289 static Property e1000_properties[] = {
1290 DEFINE_NIC_PROPERTIES(E1000State, conf),
1291 DEFINE_PROP_END_OF_LIST(),
1294 static void e1000_class_init(ObjectClass *klass, void *data)
1296 DeviceClass *dc = DEVICE_CLASS(klass);
1297 PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
1299 k->init = pci_e1000_init;
1300 k->exit = pci_e1000_uninit;
1301 k->romfile = "pxe-e1000.rom";
1302 k->vendor_id = PCI_VENDOR_ID_INTEL;
1303 k->device_id = E1000_DEVID;
1304 k->revision = 0x03;
1305 k->class_id = PCI_CLASS_NETWORK_ETHERNET;
1306 dc->desc = "Intel Gigabit Ethernet";
1307 dc->reset = qdev_e1000_reset;
1308 dc->vmsd = &vmstate_e1000;
1309 dc->props = e1000_properties;
1312 static TypeInfo e1000_info = {
1313 .name = "e1000",
1314 .parent = TYPE_PCI_DEVICE,
1315 .instance_size = sizeof(E1000State),
1316 .class_init = e1000_class_init,
1319 static void e1000_register_types(void)
1321 type_register_static(&e1000_info);
1324 type_init(e1000_register_types)