]> git.proxmox.com Git - mirror_qemu.git/blob - hw/e1000.c
f07936fdc1d04b8687b101e1bd2d71d007a5b845
[mirror_qemu.git] / hw / e1000.c
1 /*
2 * QEMU e1000 emulation
3 *
4 * Nir Peleg, Tutis Systems Ltd. for Qumranet Inc.
5 * Copyright (c) 2008 Qumranet
6 * Based on work done by:
7 * Copyright (c) 2007 Dan Aloni
8 * Copyright (c) 2004 Antony T Curtis
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 */
24
25
26 #include "hw.h"
27 #include "pci.h"
28 #include "net.h"
29
30 #include "e1000_hw.h"
31
32 #define DEBUG
33
34 #ifdef DEBUG
35 enum {
36 DEBUG_GENERAL, DEBUG_IO, DEBUG_MMIO, DEBUG_INTERRUPT,
37 DEBUG_RX, DEBUG_TX, DEBUG_MDIC, DEBUG_EEPROM,
38 DEBUG_UNKNOWN, DEBUG_TXSUM, DEBUG_TXERR, DEBUG_RXERR,
39 DEBUG_RXFILTER, DEBUG_NOTYET,
40 };
41 #define DBGBIT(x) (1<<DEBUG_##x)
42 static int debugflags = DBGBIT(TXERR) | DBGBIT(GENERAL);
43
44 #define DBGOUT(what, fmt, params...) do { \
45 if (debugflags & DBGBIT(what)) \
46 fprintf(stderr, "e1000: " fmt, ##params); \
47 } while (0)
48 #else
49 #define DBGOUT(what, fmt, params...) do {} while (0)
50 #endif
51
52 #define IOPORT_SIZE 0x40
53 #define PNPMMIO_SIZE 0x20000
54
55 /*
56 * HW models:
57 * E1000_DEV_ID_82540EM works with Windows and Linux
58 * E1000_DEV_ID_82573L OK with windoze and Linux 2.6.22,
59 * appears to perform better than 82540EM, but breaks with Linux 2.6.18
60 * E1000_DEV_ID_82544GC_COPPER appears to work; not well tested
61 * Others never tested
62 */
63 enum { E1000_DEVID = E1000_DEV_ID_82540EM };
64
65 /*
66 * May need to specify additional MAC-to-PHY entries --
67 * Intel's Windows driver refuses to initialize unless they match
68 */
69 enum {
70 PHY_ID2_INIT = E1000_DEVID == E1000_DEV_ID_82573L ? 0xcc2 :
71 E1000_DEVID == E1000_DEV_ID_82544GC_COPPER ? 0xc30 :
72 /* default to E1000_DEV_ID_82540EM */ 0xc20
73 };
74
75 typedef struct E1000State_st {
76 PCIDevice dev;
77 VLANClientState *vc;
78 NICInfo *nd;
79 int mmio_index;
80
81 uint32_t mac_reg[0x8000];
82 uint16_t phy_reg[0x20];
83 uint16_t eeprom_data[64];
84
85 uint32_t rxbuf_size;
86 uint32_t rxbuf_min_shift;
87 int check_rxov;
88 struct e1000_tx {
89 unsigned char header[256];
90 unsigned char vlan_header[4];
91 unsigned char vlan[4];
92 unsigned char data[0x10000];
93 uint16_t size;
94 unsigned char sum_needed;
95 unsigned char vlan_needed;
96 uint8_t ipcss;
97 uint8_t ipcso;
98 uint16_t ipcse;
99 uint8_t tucss;
100 uint8_t tucso;
101 uint16_t tucse;
102 uint8_t hdr_len;
103 uint16_t mss;
104 uint32_t paylen;
105 uint16_t tso_frames;
106 char tse;
107 int8_t ip;
108 int8_t tcp;
109 char cptse; // current packet tse bit
110 } tx;
111
112 struct {
113 uint32_t val_in; // shifted in from guest driver
114 uint16_t bitnum_in;
115 uint16_t bitnum_out;
116 uint16_t reading;
117 uint32_t old_eecd;
118 } eecd_state;
119 } E1000State;
120
121 #define defreg(x) x = (E1000_##x>>2)
122 enum {
123 defreg(CTRL), defreg(EECD), defreg(EERD), defreg(GPRC),
124 defreg(GPTC), defreg(ICR), defreg(ICS), defreg(IMC),
125 defreg(IMS), defreg(LEDCTL), defreg(MANC), defreg(MDIC),
126 defreg(MPC), defreg(PBA), defreg(RCTL), defreg(RDBAH),
127 defreg(RDBAL), defreg(RDH), defreg(RDLEN), defreg(RDT),
128 defreg(STATUS), defreg(SWSM), defreg(TCTL), defreg(TDBAH),
129 defreg(TDBAL), defreg(TDH), defreg(TDLEN), defreg(TDT),
130 defreg(TORH), defreg(TORL), defreg(TOTH), defreg(TOTL),
131 defreg(TPR), defreg(TPT), defreg(TXDCTL), defreg(WUFC),
132 defreg(RA), defreg(MTA), defreg(CRCERRS),defreg(VFTA),
133 defreg(VET),
134 };
135
136 enum { PHY_R = 1, PHY_W = 2, PHY_RW = PHY_R | PHY_W };
137 static const char phy_regcap[0x20] = {
138 [PHY_STATUS] = PHY_R, [M88E1000_EXT_PHY_SPEC_CTRL] = PHY_RW,
139 [PHY_ID1] = PHY_R, [M88E1000_PHY_SPEC_CTRL] = PHY_RW,
140 [PHY_CTRL] = PHY_RW, [PHY_1000T_CTRL] = PHY_RW,
141 [PHY_LP_ABILITY] = PHY_R, [PHY_1000T_STATUS] = PHY_R,
142 [PHY_AUTONEG_ADV] = PHY_RW, [M88E1000_RX_ERR_CNTR] = PHY_R,
143 [PHY_ID2] = PHY_R, [M88E1000_PHY_SPEC_STATUS] = PHY_R
144 };
145
146 static void
147 ioport_map(PCIDevice *pci_dev, int region_num, uint32_t addr,
148 uint32_t size, int type)
149 {
150 DBGOUT(IO, "e1000_ioport_map addr=0x%04x size=0x%08x\n", addr, size);
151 }
152
153 static void
154 set_interrupt_cause(E1000State *s, int index, uint32_t val)
155 {
156 if (val)
157 val |= E1000_ICR_INT_ASSERTED;
158 s->mac_reg[ICR] = val;
159 qemu_set_irq(s->dev.irq[0], (s->mac_reg[IMS] & s->mac_reg[ICR]) != 0);
160 }
161
162 static void
163 set_ics(E1000State *s, int index, uint32_t val)
164 {
165 DBGOUT(INTERRUPT, "set_ics %x, ICR %x, IMR %x\n", val, s->mac_reg[ICR],
166 s->mac_reg[IMS]);
167 set_interrupt_cause(s, 0, val | s->mac_reg[ICR]);
168 }
169
170 static int
171 rxbufsize(uint32_t v)
172 {
173 v &= E1000_RCTL_BSEX | E1000_RCTL_SZ_16384 | E1000_RCTL_SZ_8192 |
174 E1000_RCTL_SZ_4096 | E1000_RCTL_SZ_2048 | E1000_RCTL_SZ_1024 |
175 E1000_RCTL_SZ_512 | E1000_RCTL_SZ_256;
176 switch (v) {
177 case E1000_RCTL_BSEX | E1000_RCTL_SZ_16384:
178 return 16384;
179 case E1000_RCTL_BSEX | E1000_RCTL_SZ_8192:
180 return 8192;
181 case E1000_RCTL_BSEX | E1000_RCTL_SZ_4096:
182 return 4096;
183 case E1000_RCTL_SZ_1024:
184 return 1024;
185 case E1000_RCTL_SZ_512:
186 return 512;
187 case E1000_RCTL_SZ_256:
188 return 256;
189 }
190 return 2048;
191 }
192
193 static void
194 set_rx_control(E1000State *s, int index, uint32_t val)
195 {
196 s->mac_reg[RCTL] = val;
197 s->rxbuf_size = rxbufsize(val);
198 s->rxbuf_min_shift = ((val / E1000_RCTL_RDMTS_QUAT) & 3) + 1;
199 DBGOUT(RX, "RCTL: %d, mac_reg[RCTL] = 0x%x\n", s->mac_reg[RDT],
200 s->mac_reg[RCTL]);
201 }
202
203 static void
204 set_mdic(E1000State *s, int index, uint32_t val)
205 {
206 uint32_t data = val & E1000_MDIC_DATA_MASK;
207 uint32_t addr = ((val & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT);
208
209 if ((val & E1000_MDIC_PHY_MASK) >> E1000_MDIC_PHY_SHIFT != 1) // phy #
210 val = s->mac_reg[MDIC] | E1000_MDIC_ERROR;
211 else if (val & E1000_MDIC_OP_READ) {
212 DBGOUT(MDIC, "MDIC read reg 0x%x\n", addr);
213 if (!(phy_regcap[addr] & PHY_R)) {
214 DBGOUT(MDIC, "MDIC read reg %x unhandled\n", addr);
215 val |= E1000_MDIC_ERROR;
216 } else
217 val = (val ^ data) | s->phy_reg[addr];
218 } else if (val & E1000_MDIC_OP_WRITE) {
219 DBGOUT(MDIC, "MDIC write reg 0x%x, value 0x%x\n", addr, data);
220 if (!(phy_regcap[addr] & PHY_W)) {
221 DBGOUT(MDIC, "MDIC write reg %x unhandled\n", addr);
222 val |= E1000_MDIC_ERROR;
223 } else
224 s->phy_reg[addr] = data;
225 }
226 s->mac_reg[MDIC] = val | E1000_MDIC_READY;
227 set_ics(s, 0, E1000_ICR_MDAC);
228 }
229
230 static uint32_t
231 get_eecd(E1000State *s, int index)
232 {
233 uint32_t ret = E1000_EECD_PRES|E1000_EECD_GNT | s->eecd_state.old_eecd;
234
235 DBGOUT(EEPROM, "reading eeprom bit %d (reading %d)\n",
236 s->eecd_state.bitnum_out, s->eecd_state.reading);
237 if (!s->eecd_state.reading ||
238 ((s->eeprom_data[(s->eecd_state.bitnum_out >> 4) & 0x3f] >>
239 ((s->eecd_state.bitnum_out & 0xf) ^ 0xf))) & 1)
240 ret |= E1000_EECD_DO;
241 return ret;
242 }
243
244 static void
245 set_eecd(E1000State *s, int index, uint32_t val)
246 {
247 uint32_t oldval = s->eecd_state.old_eecd;
248
249 s->eecd_state.old_eecd = val & (E1000_EECD_SK | E1000_EECD_CS |
250 E1000_EECD_DI|E1000_EECD_FWE_MASK|E1000_EECD_REQ);
251 if (!(E1000_EECD_SK & (val ^ oldval))) // no clock edge
252 return;
253 if (!(E1000_EECD_SK & val)) { // falling edge
254 s->eecd_state.bitnum_out++;
255 return;
256 }
257 if (!(val & E1000_EECD_CS)) { // rising, no CS (EEPROM reset)
258 memset(&s->eecd_state, 0, sizeof s->eecd_state);
259 return;
260 }
261 s->eecd_state.val_in <<= 1;
262 if (val & E1000_EECD_DI)
263 s->eecd_state.val_in |= 1;
264 if (++s->eecd_state.bitnum_in == 9 && !s->eecd_state.reading) {
265 s->eecd_state.bitnum_out = ((s->eecd_state.val_in & 0x3f)<<4)-1;
266 s->eecd_state.reading = (((s->eecd_state.val_in >> 6) & 7) ==
267 EEPROM_READ_OPCODE_MICROWIRE);
268 }
269 DBGOUT(EEPROM, "eeprom bitnum in %d out %d, reading %d\n",
270 s->eecd_state.bitnum_in, s->eecd_state.bitnum_out,
271 s->eecd_state.reading);
272 }
273
274 static uint32_t
275 flash_eerd_read(E1000State *s, int x)
276 {
277 unsigned int index, r = s->mac_reg[EERD] & ~E1000_EEPROM_RW_REG_START;
278
279 if ((index = r >> E1000_EEPROM_RW_ADDR_SHIFT) > EEPROM_CHECKSUM_REG)
280 return 0;
281 return (s->eeprom_data[index] << E1000_EEPROM_RW_REG_DATA) |
282 E1000_EEPROM_RW_REG_DONE | r;
283 }
284
285 static void
286 putsum(uint8_t *data, uint32_t n, uint32_t sloc, uint32_t css, uint32_t cse)
287 {
288 uint32_t sum;
289
290 if (cse && cse < n)
291 n = cse + 1;
292 if (sloc < n-1) {
293 sum = net_checksum_add(n-css, data+css);
294 cpu_to_be16wu((uint16_t *)(data + sloc),
295 net_checksum_finish(sum));
296 }
297 }
298
299 static inline int
300 vlan_enabled(E1000State *s)
301 {
302 return ((s->mac_reg[CTRL] & E1000_CTRL_VME) != 0);
303 }
304
305 static inline int
306 vlan_rx_filter_enabled(E1000State *s)
307 {
308 return ((s->mac_reg[RCTL] & E1000_RCTL_VFE) != 0);
309 }
310
311 static inline int
312 is_vlan_packet(E1000State *s, const uint8_t *buf)
313 {
314 return (be16_to_cpup((uint16_t *)(buf + 12)) ==
315 le16_to_cpup((uint16_t *)(s->mac_reg + VET)));
316 }
317
318 static inline int
319 is_vlan_txd(uint32_t txd_lower)
320 {
321 return ((txd_lower & E1000_TXD_CMD_VLE) != 0);
322 }
323
324 static void
325 xmit_seg(E1000State *s)
326 {
327 uint16_t len, *sp;
328 unsigned int frames = s->tx.tso_frames, css, sofar, n;
329 struct e1000_tx *tp = &s->tx;
330
331 if (tp->tse && tp->cptse) {
332 css = tp->ipcss;
333 DBGOUT(TXSUM, "frames %d size %d ipcss %d\n",
334 frames, tp->size, css);
335 if (tp->ip) { // IPv4
336 cpu_to_be16wu((uint16_t *)(tp->data+css+2),
337 tp->size - css);
338 cpu_to_be16wu((uint16_t *)(tp->data+css+4),
339 be16_to_cpup((uint16_t *)(tp->data+css+4))+frames);
340 } else // IPv6
341 cpu_to_be16wu((uint16_t *)(tp->data+css+4),
342 tp->size - css);
343 css = tp->tucss;
344 len = tp->size - css;
345 DBGOUT(TXSUM, "tcp %d tucss %d len %d\n", tp->tcp, css, len);
346 if (tp->tcp) {
347 sofar = frames * tp->mss;
348 cpu_to_be32wu((uint32_t *)(tp->data+css+4), // seq
349 be32_to_cpupu((uint32_t *)(tp->data+css+4))+sofar);
350 if (tp->paylen - sofar > tp->mss)
351 tp->data[css + 13] &= ~9; // PSH, FIN
352 } else // UDP
353 cpu_to_be16wu((uint16_t *)(tp->data+css+4), len);
354 if (tp->sum_needed & E1000_TXD_POPTS_TXSM) {
355 // add pseudo-header length before checksum calculation
356 sp = (uint16_t *)(tp->data + tp->tucso);
357 cpu_to_be16wu(sp, be16_to_cpup(sp) + len);
358 }
359 tp->tso_frames++;
360 }
361
362 if (tp->sum_needed & E1000_TXD_POPTS_TXSM)
363 putsum(tp->data, tp->size, tp->tucso, tp->tucss, tp->tucse);
364 if (tp->sum_needed & E1000_TXD_POPTS_IXSM)
365 putsum(tp->data, tp->size, tp->ipcso, tp->ipcss, tp->ipcse);
366 if (tp->vlan_needed) {
367 memmove(tp->vlan, tp->data, 12);
368 memcpy(tp->data + 8, tp->vlan_header, 4);
369 qemu_send_packet(s->vc, tp->vlan, tp->size + 4);
370 } else
371 qemu_send_packet(s->vc, tp->data, tp->size);
372 s->mac_reg[TPT]++;
373 s->mac_reg[GPTC]++;
374 n = s->mac_reg[TOTL];
375 if ((s->mac_reg[TOTL] += s->tx.size) < n)
376 s->mac_reg[TOTH]++;
377 }
378
379 static void
380 process_tx_desc(E1000State *s, struct e1000_tx_desc *dp)
381 {
382 uint32_t txd_lower = le32_to_cpu(dp->lower.data);
383 uint32_t dtype = txd_lower & (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D);
384 unsigned int split_size = txd_lower & 0xffff, bytes, sz, op;
385 unsigned int msh = 0xfffff, hdr = 0;
386 uint64_t addr;
387 struct e1000_context_desc *xp = (struct e1000_context_desc *)dp;
388 struct e1000_tx *tp = &s->tx;
389
390 if (dtype == E1000_TXD_CMD_DEXT) { // context descriptor
391 op = le32_to_cpu(xp->cmd_and_length);
392 tp->ipcss = xp->lower_setup.ip_fields.ipcss;
393 tp->ipcso = xp->lower_setup.ip_fields.ipcso;
394 tp->ipcse = le16_to_cpu(xp->lower_setup.ip_fields.ipcse);
395 tp->tucss = xp->upper_setup.tcp_fields.tucss;
396 tp->tucso = xp->upper_setup.tcp_fields.tucso;
397 tp->tucse = le16_to_cpu(xp->upper_setup.tcp_fields.tucse);
398 tp->paylen = op & 0xfffff;
399 tp->hdr_len = xp->tcp_seg_setup.fields.hdr_len;
400 tp->mss = le16_to_cpu(xp->tcp_seg_setup.fields.mss);
401 tp->ip = (op & E1000_TXD_CMD_IP) ? 1 : 0;
402 tp->tcp = (op & E1000_TXD_CMD_TCP) ? 1 : 0;
403 tp->tse = (op & E1000_TXD_CMD_TSE) ? 1 : 0;
404 tp->tso_frames = 0;
405 if (tp->tucso == 0) { // this is probably wrong
406 DBGOUT(TXSUM, "TCP/UDP: cso 0!\n");
407 tp->tucso = tp->tucss + (tp->tcp ? 16 : 6);
408 }
409 return;
410 } else if (dtype == (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D)) {
411 // data descriptor
412 tp->sum_needed = le32_to_cpu(dp->upper.data) >> 8;
413 tp->cptse = ( txd_lower & E1000_TXD_CMD_TSE ) ? 1 : 0;
414 } else
415 // legacy descriptor
416 tp->cptse = 0;
417
418 if (vlan_enabled(s) && is_vlan_txd(txd_lower) &&
419 (tp->cptse || txd_lower & E1000_TXD_CMD_EOP)) {
420 tp->vlan_needed = 1;
421 cpu_to_be16wu((uint16_t *)(tp->vlan_header),
422 le16_to_cpup((uint16_t *)(s->mac_reg + VET)));
423 cpu_to_be16wu((uint16_t *)(tp->vlan_header + 2),
424 le16_to_cpu(dp->upper.fields.special));
425 }
426
427 addr = le64_to_cpu(dp->buffer_addr);
428 if (tp->tse && tp->cptse) {
429 hdr = tp->hdr_len;
430 msh = hdr + tp->mss;
431 do {
432 bytes = split_size;
433 if (tp->size + bytes > msh)
434 bytes = msh - tp->size;
435 cpu_physical_memory_read(addr, tp->data + tp->size, bytes);
436 if ((sz = tp->size + bytes) >= hdr && tp->size < hdr)
437 memmove(tp->header, tp->data, hdr);
438 tp->size = sz;
439 addr += bytes;
440 if (sz == msh) {
441 xmit_seg(s);
442 memmove(tp->data, tp->header, hdr);
443 tp->size = hdr;
444 }
445 } while (split_size -= bytes);
446 } else if (!tp->tse && tp->cptse) {
447 // context descriptor TSE is not set, while data descriptor TSE is set
448 DBGOUT(TXERR, "TCP segmentaion Error\n");
449 } else {
450 cpu_physical_memory_read(addr, tp->data + tp->size, split_size);
451 tp->size += split_size;
452 }
453
454 if (!(txd_lower & E1000_TXD_CMD_EOP))
455 return;
456 if (!(tp->tse && tp->cptse && tp->size < hdr))
457 xmit_seg(s);
458 tp->tso_frames = 0;
459 tp->sum_needed = 0;
460 tp->vlan_needed = 0;
461 tp->size = 0;
462 tp->cptse = 0;
463 }
464
465 static uint32_t
466 txdesc_writeback(target_phys_addr_t base, struct e1000_tx_desc *dp)
467 {
468 uint32_t txd_upper, txd_lower = le32_to_cpu(dp->lower.data);
469
470 if (!(txd_lower & (E1000_TXD_CMD_RS|E1000_TXD_CMD_RPS)))
471 return 0;
472 txd_upper = (le32_to_cpu(dp->upper.data) | E1000_TXD_STAT_DD) &
473 ~(E1000_TXD_STAT_EC | E1000_TXD_STAT_LC | E1000_TXD_STAT_TU);
474 dp->upper.data = cpu_to_le32(txd_upper);
475 cpu_physical_memory_write(base + ((char *)&dp->upper - (char *)dp),
476 (void *)&dp->upper, sizeof(dp->upper));
477 return E1000_ICR_TXDW;
478 }
479
480 static void
481 start_xmit(E1000State *s)
482 {
483 target_phys_addr_t base;
484 struct e1000_tx_desc desc;
485 uint32_t tdh_start = s->mac_reg[TDH], cause = E1000_ICS_TXQE;
486
487 if (!(s->mac_reg[TCTL] & E1000_TCTL_EN)) {
488 DBGOUT(TX, "tx disabled\n");
489 return;
490 }
491
492 while (s->mac_reg[TDH] != s->mac_reg[TDT]) {
493 base = ((uint64_t)s->mac_reg[TDBAH] << 32) + s->mac_reg[TDBAL] +
494 sizeof(struct e1000_tx_desc) * s->mac_reg[TDH];
495 cpu_physical_memory_read(base, (void *)&desc, sizeof(desc));
496
497 DBGOUT(TX, "index %d: %p : %x %x\n", s->mac_reg[TDH],
498 (void *)(intptr_t)desc.buffer_addr, desc.lower.data,
499 desc.upper.data);
500
501 process_tx_desc(s, &desc);
502 cause |= txdesc_writeback(base, &desc);
503
504 if (++s->mac_reg[TDH] * sizeof(desc) >= s->mac_reg[TDLEN])
505 s->mac_reg[TDH] = 0;
506 /*
507 * the following could happen only if guest sw assigns
508 * bogus values to TDT/TDLEN.
509 * there's nothing too intelligent we could do about this.
510 */
511 if (s->mac_reg[TDH] == tdh_start) {
512 DBGOUT(TXERR, "TDH wraparound @%x, TDT %x, TDLEN %x\n",
513 tdh_start, s->mac_reg[TDT], s->mac_reg[TDLEN]);
514 break;
515 }
516 }
517 set_ics(s, 0, cause);
518 }
519
520 static int
521 receive_filter(E1000State *s, const uint8_t *buf, int size)
522 {
523 static uint8_t bcast[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
524 static int mta_shift[] = {4, 3, 2, 0};
525 uint32_t f, rctl = s->mac_reg[RCTL], ra[2], *rp;
526
527 if (is_vlan_packet(s, buf) && vlan_rx_filter_enabled(s)) {
528 uint16_t vid = be16_to_cpup((uint16_t *)(buf + 14));
529 uint32_t vfta = le32_to_cpup((uint32_t *)(s->mac_reg + VFTA) +
530 ((vid >> 5) & 0x7f));
531 if ((vfta & (1 << (vid & 0x1f))) == 0)
532 return 0;
533 }
534
535 if (rctl & E1000_RCTL_UPE) // promiscuous
536 return 1;
537
538 if ((buf[0] & 1) && (rctl & E1000_RCTL_MPE)) // promiscuous mcast
539 return 1;
540
541 if ((rctl & E1000_RCTL_BAM) && !memcmp(buf, bcast, sizeof bcast))
542 return 1;
543
544 for (rp = s->mac_reg + RA; rp < s->mac_reg + RA + 32; rp += 2) {
545 if (!(rp[1] & E1000_RAH_AV))
546 continue;
547 ra[0] = cpu_to_le32(rp[0]);
548 ra[1] = cpu_to_le32(rp[1]);
549 if (!memcmp(buf, (uint8_t *)ra, 6)) {
550 DBGOUT(RXFILTER,
551 "unicast match[%d]: %02x:%02x:%02x:%02x:%02x:%02x\n",
552 (int)(rp - s->mac_reg - RA)/2,
553 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
554 return 1;
555 }
556 }
557 DBGOUT(RXFILTER, "unicast mismatch: %02x:%02x:%02x:%02x:%02x:%02x\n",
558 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
559
560 f = mta_shift[(rctl >> E1000_RCTL_MO_SHIFT) & 3];
561 f = (((buf[5] << 8) | buf[4]) >> f) & 0xfff;
562 if (s->mac_reg[MTA + (f >> 5)] & (1 << (f & 0x1f)))
563 return 1;
564 DBGOUT(RXFILTER,
565 "dropping, inexact filter mismatch: %02x:%02x:%02x:%02x:%02x:%02x MO %d MTA[%d] %x\n",
566 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5],
567 (rctl >> E1000_RCTL_MO_SHIFT) & 3, f >> 5,
568 s->mac_reg[MTA + (f >> 5)]);
569
570 return 0;
571 }
572
573 static int
574 e1000_can_receive(void *opaque)
575 {
576 E1000State *s = opaque;
577
578 return (s->mac_reg[RCTL] & E1000_RCTL_EN);
579 }
580
581 static void
582 e1000_receive(void *opaque, const uint8_t *buf, int size)
583 {
584 E1000State *s = opaque;
585 struct e1000_rx_desc desc;
586 target_phys_addr_t base;
587 unsigned int n, rdt;
588 uint32_t rdh_start;
589 uint16_t vlan_special = 0;
590 uint8_t vlan_status = 0, vlan_offset = 0;
591
592 if (!(s->mac_reg[RCTL] & E1000_RCTL_EN))
593 return;
594
595 if (size > s->rxbuf_size) {
596 DBGOUT(RX, "packet too large for buffers (%d > %d)\n", size,
597 s->rxbuf_size);
598 return;
599 }
600
601 if (!receive_filter(s, buf, size))
602 return;
603
604 if (vlan_enabled(s) && is_vlan_packet(s, buf)) {
605 vlan_special = cpu_to_le16(be16_to_cpup((uint16_t *)(buf + 14)));
606 memmove((void *)(buf + 4), buf, 12);
607 vlan_status = E1000_RXD_STAT_VP;
608 vlan_offset = 4;
609 size -= 4;
610 }
611
612 rdh_start = s->mac_reg[RDH];
613 size += 4; // for the header
614 do {
615 if (s->mac_reg[RDH] == s->mac_reg[RDT] && s->check_rxov) {
616 set_ics(s, 0, E1000_ICS_RXO);
617 return;
618 }
619 base = ((uint64_t)s->mac_reg[RDBAH] << 32) + s->mac_reg[RDBAL] +
620 sizeof(desc) * s->mac_reg[RDH];
621 cpu_physical_memory_read(base, (void *)&desc, sizeof(desc));
622 desc.special = vlan_special;
623 desc.status |= (vlan_status | E1000_RXD_STAT_DD);
624 if (desc.buffer_addr) {
625 cpu_physical_memory_write(le64_to_cpu(desc.buffer_addr),
626 (void *)(buf + vlan_offset), size);
627 desc.length = cpu_to_le16(size);
628 desc.status |= E1000_RXD_STAT_EOP|E1000_RXD_STAT_IXSM;
629 } else // as per intel docs; skip descriptors with null buf addr
630 DBGOUT(RX, "Null RX descriptor!!\n");
631 cpu_physical_memory_write(base, (void *)&desc, sizeof(desc));
632
633 if (++s->mac_reg[RDH] * sizeof(desc) >= s->mac_reg[RDLEN])
634 s->mac_reg[RDH] = 0;
635 s->check_rxov = 1;
636 /* see comment in start_xmit; same here */
637 if (s->mac_reg[RDH] == rdh_start) {
638 DBGOUT(RXERR, "RDH wraparound @%x, RDT %x, RDLEN %x\n",
639 rdh_start, s->mac_reg[RDT], s->mac_reg[RDLEN]);
640 set_ics(s, 0, E1000_ICS_RXO);
641 return;
642 }
643 } while (desc.buffer_addr == 0);
644
645 s->mac_reg[GPRC]++;
646 s->mac_reg[TPR]++;
647 n = s->mac_reg[TORL];
648 if ((s->mac_reg[TORL] += size) < n)
649 s->mac_reg[TORH]++;
650
651 n = E1000_ICS_RXT0;
652 if ((rdt = s->mac_reg[RDT]) < s->mac_reg[RDH])
653 rdt += s->mac_reg[RDLEN] / sizeof(desc);
654 if (((rdt - s->mac_reg[RDH]) * sizeof(desc)) << s->rxbuf_min_shift >=
655 s->mac_reg[RDLEN])
656 n |= E1000_ICS_RXDMT0;
657
658 set_ics(s, 0, n);
659 }
660
661 static uint32_t
662 mac_readreg(E1000State *s, int index)
663 {
664 return s->mac_reg[index];
665 }
666
667 static uint32_t
668 mac_icr_read(E1000State *s, int index)
669 {
670 uint32_t ret = s->mac_reg[ICR];
671
672 DBGOUT(INTERRUPT, "ICR read: %x\n", ret);
673 set_interrupt_cause(s, 0, 0);
674 return ret;
675 }
676
677 static uint32_t
678 mac_read_clr4(E1000State *s, int index)
679 {
680 uint32_t ret = s->mac_reg[index];
681
682 s->mac_reg[index] = 0;
683 return ret;
684 }
685
686 static uint32_t
687 mac_read_clr8(E1000State *s, int index)
688 {
689 uint32_t ret = s->mac_reg[index];
690
691 s->mac_reg[index] = 0;
692 s->mac_reg[index-1] = 0;
693 return ret;
694 }
695
696 static void
697 mac_writereg(E1000State *s, int index, uint32_t val)
698 {
699 s->mac_reg[index] = val;
700 }
701
702 static void
703 set_rdt(E1000State *s, int index, uint32_t val)
704 {
705 s->check_rxov = 0;
706 s->mac_reg[index] = val & 0xffff;
707 }
708
709 static void
710 set_16bit(E1000State *s, int index, uint32_t val)
711 {
712 s->mac_reg[index] = val & 0xffff;
713 }
714
715 static void
716 set_dlen(E1000State *s, int index, uint32_t val)
717 {
718 s->mac_reg[index] = val & 0xfff80;
719 }
720
721 static void
722 set_tctl(E1000State *s, int index, uint32_t val)
723 {
724 s->mac_reg[index] = val;
725 s->mac_reg[TDT] &= 0xffff;
726 start_xmit(s);
727 }
728
729 static void
730 set_icr(E1000State *s, int index, uint32_t val)
731 {
732 DBGOUT(INTERRUPT, "set_icr %x\n", val);
733 set_interrupt_cause(s, 0, s->mac_reg[ICR] & ~val);
734 }
735
736 static void
737 set_imc(E1000State *s, int index, uint32_t val)
738 {
739 s->mac_reg[IMS] &= ~val;
740 set_ics(s, 0, 0);
741 }
742
743 static void
744 set_ims(E1000State *s, int index, uint32_t val)
745 {
746 s->mac_reg[IMS] |= val;
747 set_ics(s, 0, 0);
748 }
749
750 #define getreg(x) [x] = mac_readreg
751 static uint32_t (*macreg_readops[])(E1000State *, int) = {
752 getreg(PBA), getreg(RCTL), getreg(TDH), getreg(TXDCTL),
753 getreg(WUFC), getreg(TDT), getreg(CTRL), getreg(LEDCTL),
754 getreg(MANC), getreg(MDIC), getreg(SWSM), getreg(STATUS),
755 getreg(TORL), getreg(TOTL), getreg(IMS), getreg(TCTL),
756 getreg(RDH), getreg(RDT), getreg(VET),
757
758 [TOTH] = mac_read_clr8, [TORH] = mac_read_clr8, [GPRC] = mac_read_clr4,
759 [GPTC] = mac_read_clr4, [TPR] = mac_read_clr4, [TPT] = mac_read_clr4,
760 [ICR] = mac_icr_read, [EECD] = get_eecd, [EERD] = flash_eerd_read,
761 [CRCERRS ... MPC] = &mac_readreg,
762 [RA ... RA+31] = &mac_readreg,
763 [MTA ... MTA+127] = &mac_readreg,
764 [VFTA ... VFTA+127] = &mac_readreg,
765 };
766 enum { NREADOPS = sizeof(macreg_readops) / sizeof(*macreg_readops) };
767
768 #define putreg(x) [x] = mac_writereg
769 static void (*macreg_writeops[])(E1000State *, int, uint32_t) = {
770 putreg(PBA), putreg(EERD), putreg(SWSM), putreg(WUFC),
771 putreg(TDBAL), putreg(TDBAH), putreg(TXDCTL), putreg(RDBAH),
772 putreg(RDBAL), putreg(LEDCTL), putreg(CTRL), putreg(VET),
773 [TDLEN] = set_dlen, [RDLEN] = set_dlen, [TCTL] = set_tctl,
774 [TDT] = set_tctl, [MDIC] = set_mdic, [ICS] = set_ics,
775 [TDH] = set_16bit, [RDH] = set_16bit, [RDT] = set_rdt,
776 [IMC] = set_imc, [IMS] = set_ims, [ICR] = set_icr,
777 [EECD] = set_eecd, [RCTL] = set_rx_control,
778 [RA ... RA+31] = &mac_writereg,
779 [MTA ... MTA+127] = &mac_writereg,
780 [VFTA ... VFTA+127] = &mac_writereg,
781 };
782 enum { NWRITEOPS = sizeof(macreg_writeops) / sizeof(*macreg_writeops) };
783
784 static void
785 e1000_mmio_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
786 {
787 E1000State *s = opaque;
788 unsigned int index = (addr & 0x1ffff) >> 2;
789
790 #ifdef TARGET_WORDS_BIGENDIAN
791 val = bswap32(val);
792 #endif
793 if (index < NWRITEOPS && macreg_writeops[index])
794 macreg_writeops[index](s, index, val);
795 else if (index < NREADOPS && macreg_readops[index])
796 DBGOUT(MMIO, "e1000_mmio_writel RO %x: 0x%04x\n", index<<2, val);
797 else
798 DBGOUT(UNKNOWN, "MMIO unknown write addr=0x%08x,val=0x%08x\n",
799 index<<2, val);
800 }
801
802 static void
803 e1000_mmio_writew(void *opaque, target_phys_addr_t addr, uint32_t val)
804 {
805 // emulate hw without byte enables: no RMW
806 e1000_mmio_writel(opaque, addr & ~3,
807 (val & 0xffff) << (8*(addr & 3)));
808 }
809
810 static void
811 e1000_mmio_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
812 {
813 // emulate hw without byte enables: no RMW
814 e1000_mmio_writel(opaque, addr & ~3,
815 (val & 0xff) << (8*(addr & 3)));
816 }
817
818 static uint32_t
819 e1000_mmio_readl(void *opaque, target_phys_addr_t addr)
820 {
821 E1000State *s = opaque;
822 unsigned int index = (addr & 0x1ffff) >> 2;
823
824 if (index < NREADOPS && macreg_readops[index])
825 {
826 uint32_t val = macreg_readops[index](s, index);
827 #ifdef TARGET_WORDS_BIGENDIAN
828 val = bswap32(val);
829 #endif
830 return val;
831 }
832 DBGOUT(UNKNOWN, "MMIO unknown read addr=0x%08x\n", index<<2);
833 return 0;
834 }
835
836 static uint32_t
837 e1000_mmio_readb(void *opaque, target_phys_addr_t addr)
838 {
839 return ((e1000_mmio_readl(opaque, addr & ~3)) >>
840 (8 * (addr & 3))) & 0xff;
841 }
842
843 static uint32_t
844 e1000_mmio_readw(void *opaque, target_phys_addr_t addr)
845 {
846 return ((e1000_mmio_readl(opaque, addr & ~3)) >>
847 (8 * (addr & 3))) & 0xffff;
848 }
849
850 static const int mac_regtosave[] = {
851 CTRL, EECD, EERD, GPRC, GPTC, ICR, ICS, IMC, IMS,
852 LEDCTL, MANC, MDIC, MPC, PBA, RCTL, RDBAH, RDBAL, RDH,
853 RDLEN, RDT, STATUS, SWSM, TCTL, TDBAH, TDBAL, TDH, TDLEN,
854 TDT, TORH, TORL, TOTH, TOTL, TPR, TPT, TXDCTL, WUFC,
855 VET,
856 };
857 enum { MAC_NSAVE = sizeof mac_regtosave/sizeof *mac_regtosave };
858
859 static const struct {
860 int size;
861 int array0;
862 } mac_regarraystosave[] = { {32, RA}, {128, MTA}, {128, VFTA} };
863 enum { MAC_NARRAYS = sizeof mac_regarraystosave/sizeof *mac_regarraystosave };
864
865 static void
866 nic_save(QEMUFile *f, void *opaque)
867 {
868 E1000State *s = (E1000State *)opaque;
869 int i, j;
870
871 pci_device_save(&s->dev, f);
872 qemu_put_be32(f, 0);
873 qemu_put_be32s(f, &s->rxbuf_size);
874 qemu_put_be32s(f, &s->rxbuf_min_shift);
875 qemu_put_be32s(f, &s->eecd_state.val_in);
876 qemu_put_be16s(f, &s->eecd_state.bitnum_in);
877 qemu_put_be16s(f, &s->eecd_state.bitnum_out);
878 qemu_put_be16s(f, &s->eecd_state.reading);
879 qemu_put_be32s(f, &s->eecd_state.old_eecd);
880 qemu_put_8s(f, &s->tx.ipcss);
881 qemu_put_8s(f, &s->tx.ipcso);
882 qemu_put_be16s(f, &s->tx.ipcse);
883 qemu_put_8s(f, &s->tx.tucss);
884 qemu_put_8s(f, &s->tx.tucso);
885 qemu_put_be16s(f, &s->tx.tucse);
886 qemu_put_be32s(f, &s->tx.paylen);
887 qemu_put_8s(f, &s->tx.hdr_len);
888 qemu_put_be16s(f, &s->tx.mss);
889 qemu_put_be16s(f, &s->tx.size);
890 qemu_put_be16s(f, &s->tx.tso_frames);
891 qemu_put_8s(f, &s->tx.sum_needed);
892 qemu_put_s8s(f, &s->tx.ip);
893 qemu_put_s8s(f, &s->tx.tcp);
894 qemu_put_buffer(f, s->tx.header, sizeof s->tx.header);
895 qemu_put_buffer(f, s->tx.data, sizeof s->tx.data);
896 for (i = 0; i < 64; i++)
897 qemu_put_be16s(f, s->eeprom_data + i);
898 for (i = 0; i < 0x20; i++)
899 qemu_put_be16s(f, s->phy_reg + i);
900 for (i = 0; i < MAC_NSAVE; i++)
901 qemu_put_be32s(f, s->mac_reg + mac_regtosave[i]);
902 for (i = 0; i < MAC_NARRAYS; i++)
903 for (j = 0; j < mac_regarraystosave[i].size; j++)
904 qemu_put_be32s(f,
905 s->mac_reg + mac_regarraystosave[i].array0 + j);
906 }
907
908 static int
909 nic_load(QEMUFile *f, void *opaque, int version_id)
910 {
911 E1000State *s = (E1000State *)opaque;
912 int i, j, ret;
913
914 if ((ret = pci_device_load(&s->dev, f)) < 0)
915 return ret;
916 if (version_id == 1)
917 qemu_get_sbe32s(f, &i); /* once some unused instance id */
918 qemu_get_be32(f); /* Ignored. Was mmio_base. */
919 qemu_get_be32s(f, &s->rxbuf_size);
920 qemu_get_be32s(f, &s->rxbuf_min_shift);
921 qemu_get_be32s(f, &s->eecd_state.val_in);
922 qemu_get_be16s(f, &s->eecd_state.bitnum_in);
923 qemu_get_be16s(f, &s->eecd_state.bitnum_out);
924 qemu_get_be16s(f, &s->eecd_state.reading);
925 qemu_get_be32s(f, &s->eecd_state.old_eecd);
926 qemu_get_8s(f, &s->tx.ipcss);
927 qemu_get_8s(f, &s->tx.ipcso);
928 qemu_get_be16s(f, &s->tx.ipcse);
929 qemu_get_8s(f, &s->tx.tucss);
930 qemu_get_8s(f, &s->tx.tucso);
931 qemu_get_be16s(f, &s->tx.tucse);
932 qemu_get_be32s(f, &s->tx.paylen);
933 qemu_get_8s(f, &s->tx.hdr_len);
934 qemu_get_be16s(f, &s->tx.mss);
935 qemu_get_be16s(f, &s->tx.size);
936 qemu_get_be16s(f, &s->tx.tso_frames);
937 qemu_get_8s(f, &s->tx.sum_needed);
938 qemu_get_s8s(f, &s->tx.ip);
939 qemu_get_s8s(f, &s->tx.tcp);
940 qemu_get_buffer(f, s->tx.header, sizeof s->tx.header);
941 qemu_get_buffer(f, s->tx.data, sizeof s->tx.data);
942 for (i = 0; i < 64; i++)
943 qemu_get_be16s(f, s->eeprom_data + i);
944 for (i = 0; i < 0x20; i++)
945 qemu_get_be16s(f, s->phy_reg + i);
946 for (i = 0; i < MAC_NSAVE; i++)
947 qemu_get_be32s(f, s->mac_reg + mac_regtosave[i]);
948 for (i = 0; i < MAC_NARRAYS; i++)
949 for (j = 0; j < mac_regarraystosave[i].size; j++)
950 qemu_get_be32s(f,
951 s->mac_reg + mac_regarraystosave[i].array0 + j);
952 return 0;
953 }
954
955 static const uint16_t e1000_eeprom_template[64] = {
956 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000,
957 0x3000, 0x1000, 0x6403, E1000_DEVID, 0x8086, E1000_DEVID, 0x8086, 0x3040,
958 0x0008, 0x2000, 0x7e14, 0x0048, 0x1000, 0x00d8, 0x0000, 0x2700,
959 0x6cc9, 0x3150, 0x0722, 0x040b, 0x0984, 0x0000, 0xc000, 0x0706,
960 0x1008, 0x0000, 0x0f04, 0x7fff, 0x4d01, 0xffff, 0xffff, 0xffff,
961 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
962 0x0100, 0x4000, 0x121c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
963 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000,
964 };
965
966 static const uint16_t phy_reg_init[] = {
967 [PHY_CTRL] = 0x1140, [PHY_STATUS] = 0x796d, // link initially up
968 [PHY_ID1] = 0x141, [PHY_ID2] = PHY_ID2_INIT,
969 [PHY_1000T_CTRL] = 0x0e00, [M88E1000_PHY_SPEC_CTRL] = 0x360,
970 [M88E1000_EXT_PHY_SPEC_CTRL] = 0x0d60, [PHY_AUTONEG_ADV] = 0xde1,
971 [PHY_LP_ABILITY] = 0x1e0, [PHY_1000T_STATUS] = 0x3c00,
972 [M88E1000_PHY_SPEC_STATUS] = 0xac00,
973 };
974
975 static const uint32_t mac_reg_init[] = {
976 [PBA] = 0x00100030,
977 [LEDCTL] = 0x602,
978 [CTRL] = E1000_CTRL_SWDPIN2 | E1000_CTRL_SWDPIN0 |
979 E1000_CTRL_SPD_1000 | E1000_CTRL_SLU,
980 [STATUS] = 0x80000000 | E1000_STATUS_GIO_MASTER_ENABLE |
981 E1000_STATUS_ASDV | E1000_STATUS_MTXCKOK |
982 E1000_STATUS_SPEED_1000 | E1000_STATUS_FD |
983 E1000_STATUS_LU,
984 [MANC] = E1000_MANC_EN_MNG2HOST | E1000_MANC_RCV_TCO_EN |
985 E1000_MANC_ARP_EN | E1000_MANC_0298_EN |
986 E1000_MANC_RMCP_EN,
987 };
988
989 /* PCI interface */
990
991 static CPUWriteMemoryFunc *e1000_mmio_write[] = {
992 e1000_mmio_writeb, e1000_mmio_writew, e1000_mmio_writel
993 };
994
995 static CPUReadMemoryFunc *e1000_mmio_read[] = {
996 e1000_mmio_readb, e1000_mmio_readw, e1000_mmio_readl
997 };
998
999 static void
1000 e1000_mmio_map(PCIDevice *pci_dev, int region_num,
1001 uint32_t addr, uint32_t size, int type)
1002 {
1003 E1000State *d = (E1000State *)pci_dev;
1004
1005 DBGOUT(MMIO, "e1000_mmio_map addr=0x%08x 0x%08x\n", addr, size);
1006
1007 cpu_register_physical_memory(addr, PNPMMIO_SIZE, d->mmio_index);
1008 }
1009
1010 void
1011 pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn)
1012 {
1013 E1000State *d;
1014 uint8_t *pci_conf;
1015 uint16_t checksum = 0;
1016 static const char info_str[] = "e1000";
1017 int i;
1018
1019 d = (E1000State *)pci_register_device(bus, "e1000",
1020 sizeof(E1000State), devfn, NULL, NULL);
1021
1022 pci_conf = d->dev.config;
1023 memset(pci_conf, 0, 256);
1024
1025 *(uint16_t *)(pci_conf+0x00) = cpu_to_le16(0x8086);
1026 *(uint16_t *)(pci_conf+0x02) = cpu_to_le16(E1000_DEVID);
1027 *(uint16_t *)(pci_conf+0x04) = cpu_to_le16(0x0407);
1028 *(uint16_t *)(pci_conf+0x06) = cpu_to_le16(0x0010);
1029 pci_conf[0x08] = 0x03;
1030 pci_conf[0x0a] = 0x00; // ethernet network controller
1031 pci_conf[0x0b] = 0x02;
1032 pci_conf[0x0c] = 0x10;
1033
1034 pci_conf[0x3d] = 1; // interrupt pin 0
1035
1036 d->mmio_index = cpu_register_io_memory(0, e1000_mmio_read,
1037 e1000_mmio_write, d);
1038
1039 pci_register_io_region((PCIDevice *)d, 0, PNPMMIO_SIZE,
1040 PCI_ADDRESS_SPACE_MEM, e1000_mmio_map);
1041
1042 pci_register_io_region((PCIDevice *)d, 1, IOPORT_SIZE,
1043 PCI_ADDRESS_SPACE_IO, ioport_map);
1044
1045 d->nd = nd;
1046 memmove(d->eeprom_data, e1000_eeprom_template,
1047 sizeof e1000_eeprom_template);
1048 for (i = 0; i < 3; i++)
1049 d->eeprom_data[i] = (nd->macaddr[2*i+1]<<8) | nd->macaddr[2*i];
1050 for (i = 0; i < EEPROM_CHECKSUM_REG; i++)
1051 checksum += d->eeprom_data[i];
1052 checksum = (uint16_t) EEPROM_SUM - checksum;
1053 d->eeprom_data[EEPROM_CHECKSUM_REG] = checksum;
1054
1055 memset(d->phy_reg, 0, sizeof d->phy_reg);
1056 memmove(d->phy_reg, phy_reg_init, sizeof phy_reg_init);
1057 memset(d->mac_reg, 0, sizeof d->mac_reg);
1058 memmove(d->mac_reg, mac_reg_init, sizeof mac_reg_init);
1059 d->rxbuf_min_shift = 1;
1060 memset(&d->tx, 0, sizeof d->tx);
1061
1062 d->vc = qemu_new_vlan_client(nd->vlan, e1000_receive,
1063 e1000_can_receive, d);
1064
1065 snprintf(d->vc->info_str, sizeof(d->vc->info_str),
1066 "%s macaddr=%02x:%02x:%02x:%02x:%02x:%02x", info_str,
1067 d->nd->macaddr[0], d->nd->macaddr[1], d->nd->macaddr[2],
1068 d->nd->macaddr[3], d->nd->macaddr[4], d->nd->macaddr[5]);
1069
1070 register_savevm(info_str, -1, 2, nic_save, nic_load, d);
1071 }