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