pci: introduce FMT_PCIBUS for printf format for pcibus_t.
[sdk/emulator/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, see <http://www.gnu.org/licenses/>.
22  */
23
24
25 #include "hw.h"
26 #include "pci.h"
27 #include "net.h"
28 #include "net/checksum.h"
29 #include "loader.h"
30
31 #include "e1000_hw.h"
32
33 #define DEBUG
34
35 #ifdef DEBUG
36 enum {
37     DEBUG_GENERAL,      DEBUG_IO,       DEBUG_MMIO,     DEBUG_INTERRUPT,
38     DEBUG_RX,           DEBUG_TX,       DEBUG_MDIC,     DEBUG_EEPROM,
39     DEBUG_UNKNOWN,      DEBUG_TXSUM,    DEBUG_TXERR,    DEBUG_RXERR,
40     DEBUG_RXFILTER,     DEBUG_NOTYET,
41 };
42 #define DBGBIT(x)       (1<<DEBUG_##x)
43 static int debugflags = DBGBIT(TXERR) | DBGBIT(GENERAL);
44
45 #define DBGOUT(what, fmt, ...) do { \
46     if (debugflags & DBGBIT(what)) \
47         fprintf(stderr, "e1000: " fmt, ## __VA_ARGS__); \
48     } while (0)
49 #else
50 #define DBGOUT(what, fmt, ...) do {} while (0)
51 #endif
52
53 #define IOPORT_SIZE       0x40
54 #define PNPMMIO_SIZE      0x20000
55
56 /*
57  * HW models:
58  *  E1000_DEV_ID_82540EM works with Windows and Linux
59  *  E1000_DEV_ID_82573L OK with windoze and Linux 2.6.22,
60  *      appears to perform better than 82540EM, but breaks with Linux 2.6.18
61  *  E1000_DEV_ID_82544GC_COPPER appears to work; not well tested
62  *  Others never tested
63  */
64 enum { E1000_DEVID = E1000_DEV_ID_82540EM };
65
66 /*
67  * May need to specify additional MAC-to-PHY entries --
68  * Intel's Windows driver refuses to initialize unless they match
69  */
70 enum {
71     PHY_ID2_INIT = E1000_DEVID == E1000_DEV_ID_82573L ?         0xcc2 :
72                    E1000_DEVID == E1000_DEV_ID_82544GC_COPPER ? 0xc30 :
73                    /* default to E1000_DEV_ID_82540EM */        0xc20
74 };
75
76 typedef struct E1000State_st {
77     PCIDevice dev;
78     VLANClientState *vc;
79     NICConf conf;
80     int mmio_index;
81
82     uint32_t mac_reg[0x8000];
83     uint16_t phy_reg[0x20];
84     uint16_t eeprom_data[64];
85
86     uint32_t rxbuf_size;
87     uint32_t rxbuf_min_shift;
88     int check_rxov;
89     struct e1000_tx {
90         unsigned char header[256];
91         unsigned char vlan_header[4];
92         unsigned char vlan[4];
93         unsigned char data[0x10000];
94         uint16_t size;
95         unsigned char sum_needed;
96         unsigned char vlan_needed;
97         uint8_t ipcss;
98         uint8_t ipcso;
99         uint16_t ipcse;
100         uint8_t tucss;
101         uint8_t tucso;
102         uint16_t tucse;
103         uint8_t hdr_len;
104         uint16_t mss;
105         uint32_t paylen;
106         uint16_t tso_frames;
107         char tse;
108         int8_t ip;
109         int8_t tcp;
110         char cptse;     // current packet tse bit
111     } tx;
112
113     struct {
114         uint32_t val_in;        // shifted in from guest driver
115         uint16_t bitnum_in;
116         uint16_t bitnum_out;
117         uint16_t reading;
118         uint32_t old_eecd;
119     } eecd_state;
120 } E1000State;
121
122 #define defreg(x)       x = (E1000_##x>>2)
123 enum {
124     defreg(CTRL),       defreg(EECD),   defreg(EERD),   defreg(GPRC),
125     defreg(GPTC),       defreg(ICR),    defreg(ICS),    defreg(IMC),
126     defreg(IMS),        defreg(LEDCTL), defreg(MANC),   defreg(MDIC),
127     defreg(MPC),        defreg(PBA),    defreg(RCTL),   defreg(RDBAH),
128     defreg(RDBAL),      defreg(RDH),    defreg(RDLEN),  defreg(RDT),
129     defreg(STATUS),     defreg(SWSM),   defreg(TCTL),   defreg(TDBAH),
130     defreg(TDBAL),      defreg(TDH),    defreg(TDLEN),  defreg(TDT),
131     defreg(TORH),       defreg(TORL),   defreg(TOTH),   defreg(TOTL),
132     defreg(TPR),        defreg(TPT),    defreg(TXDCTL), defreg(WUFC),
133     defreg(RA),         defreg(MTA),    defreg(CRCERRS),defreg(VFTA),
134     defreg(VET),
135 };
136
137 enum { PHY_R = 1, PHY_W = 2, PHY_RW = PHY_R | PHY_W };
138 static const char phy_regcap[0x20] = {
139     [PHY_STATUS] = PHY_R,       [M88E1000_EXT_PHY_SPEC_CTRL] = PHY_RW,
140     [PHY_ID1] = PHY_R,          [M88E1000_PHY_SPEC_CTRL] = PHY_RW,
141     [PHY_CTRL] = PHY_RW,        [PHY_1000T_CTRL] = PHY_RW,
142     [PHY_LP_ABILITY] = PHY_R,   [PHY_1000T_STATUS] = PHY_R,
143     [PHY_AUTONEG_ADV] = PHY_RW, [M88E1000_RX_ERR_CNTR] = PHY_R,
144     [PHY_ID2] = PHY_R,          [M88E1000_PHY_SPEC_STATUS] = PHY_R
145 };
146
147 static void
148 ioport_map(PCIDevice *pci_dev, int region_num, pcibus_t addr,
149            pcibus_t size, int type)
150 {
151     DBGOUT(IO, "e1000_ioport_map addr=0x%04"FMT_PCIBUS
152            " size=0x%08"FMT_PCIBUS"\n", addr, size);
153 }
154
155 static void
156 set_interrupt_cause(E1000State *s, int index, uint32_t val)
157 {
158     if (val)
159         val |= E1000_ICR_INT_ASSERTED;
160     s->mac_reg[ICR] = val;
161     s->mac_reg[ICS] = val;
162     qemu_set_irq(s->dev.irq[0], (s->mac_reg[IMS] & s->mac_reg[ICR]) != 0);
163 }
164
165 static void
166 set_ics(E1000State *s, int index, uint32_t val)
167 {
168     DBGOUT(INTERRUPT, "set_ics %x, ICR %x, IMR %x\n", val, s->mac_reg[ICR],
169         s->mac_reg[IMS]);
170     set_interrupt_cause(s, 0, val | s->mac_reg[ICR]);
171 }
172
173 static int
174 rxbufsize(uint32_t v)
175 {
176     v &= E1000_RCTL_BSEX | E1000_RCTL_SZ_16384 | E1000_RCTL_SZ_8192 |
177          E1000_RCTL_SZ_4096 | E1000_RCTL_SZ_2048 | E1000_RCTL_SZ_1024 |
178          E1000_RCTL_SZ_512 | E1000_RCTL_SZ_256;
179     switch (v) {
180     case E1000_RCTL_BSEX | E1000_RCTL_SZ_16384:
181         return 16384;
182     case E1000_RCTL_BSEX | E1000_RCTL_SZ_8192:
183         return 8192;
184     case E1000_RCTL_BSEX | E1000_RCTL_SZ_4096:
185         return 4096;
186     case E1000_RCTL_SZ_1024:
187         return 1024;
188     case E1000_RCTL_SZ_512:
189         return 512;
190     case E1000_RCTL_SZ_256:
191         return 256;
192     }
193     return 2048;
194 }
195
196 static void
197 set_ctrl(E1000State *s, int index, uint32_t val)
198 {
199     /* RST is self clearing */
200     s->mac_reg[CTRL] = val & ~E1000_CTRL_RST;
201 }
202
203 static void
204 set_rx_control(E1000State *s, int index, uint32_t val)
205 {
206     s->mac_reg[RCTL] = val;
207     s->rxbuf_size = rxbufsize(val);
208     s->rxbuf_min_shift = ((val / E1000_RCTL_RDMTS_QUAT) & 3) + 1;
209     DBGOUT(RX, "RCTL: %d, mac_reg[RCTL] = 0x%x\n", s->mac_reg[RDT],
210            s->mac_reg[RCTL]);
211 }
212
213 static void
214 set_mdic(E1000State *s, int index, uint32_t val)
215 {
216     uint32_t data = val & E1000_MDIC_DATA_MASK;
217     uint32_t addr = ((val & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT);
218
219     if ((val & E1000_MDIC_PHY_MASK) >> E1000_MDIC_PHY_SHIFT != 1) // phy #
220         val = s->mac_reg[MDIC] | E1000_MDIC_ERROR;
221     else if (val & E1000_MDIC_OP_READ) {
222         DBGOUT(MDIC, "MDIC read reg 0x%x\n", addr);
223         if (!(phy_regcap[addr] & PHY_R)) {
224             DBGOUT(MDIC, "MDIC read reg %x unhandled\n", addr);
225             val |= E1000_MDIC_ERROR;
226         } else
227             val = (val ^ data) | s->phy_reg[addr];
228     } else if (val & E1000_MDIC_OP_WRITE) {
229         DBGOUT(MDIC, "MDIC write reg 0x%x, value 0x%x\n", addr, data);
230         if (!(phy_regcap[addr] & PHY_W)) {
231             DBGOUT(MDIC, "MDIC write reg %x unhandled\n", addr);
232             val |= E1000_MDIC_ERROR;
233         } else
234             s->phy_reg[addr] = data;
235     }
236     s->mac_reg[MDIC] = val | E1000_MDIC_READY;
237     set_ics(s, 0, E1000_ICR_MDAC);
238 }
239
240 static uint32_t
241 get_eecd(E1000State *s, int index)
242 {
243     uint32_t ret = E1000_EECD_PRES|E1000_EECD_GNT | s->eecd_state.old_eecd;
244
245     DBGOUT(EEPROM, "reading eeprom bit %d (reading %d)\n",
246            s->eecd_state.bitnum_out, s->eecd_state.reading);
247     if (!s->eecd_state.reading ||
248         ((s->eeprom_data[(s->eecd_state.bitnum_out >> 4) & 0x3f] >>
249           ((s->eecd_state.bitnum_out & 0xf) ^ 0xf))) & 1)
250         ret |= E1000_EECD_DO;
251     return ret;
252 }
253
254 static void
255 set_eecd(E1000State *s, int index, uint32_t val)
256 {
257     uint32_t oldval = s->eecd_state.old_eecd;
258
259     s->eecd_state.old_eecd = val & (E1000_EECD_SK | E1000_EECD_CS |
260             E1000_EECD_DI|E1000_EECD_FWE_MASK|E1000_EECD_REQ);
261     if (!(E1000_EECD_SK & (val ^ oldval)))      // no clock edge
262         return;
263     if (!(E1000_EECD_SK & val)) {               // falling edge
264         s->eecd_state.bitnum_out++;
265         return;
266     }
267     if (!(val & E1000_EECD_CS)) {               // rising, no CS (EEPROM reset)
268         memset(&s->eecd_state, 0, sizeof s->eecd_state);
269         /*
270          * restore old_eecd's E1000_EECD_SK (known to be on)
271          * to avoid false detection of a clock edge
272          */
273         s->eecd_state.old_eecd = E1000_EECD_SK;
274         return;
275     }
276     s->eecd_state.val_in <<= 1;
277     if (val & E1000_EECD_DI)
278         s->eecd_state.val_in |= 1;
279     if (++s->eecd_state.bitnum_in == 9 && !s->eecd_state.reading) {
280         s->eecd_state.bitnum_out = ((s->eecd_state.val_in & 0x3f)<<4)-1;
281         s->eecd_state.reading = (((s->eecd_state.val_in >> 6) & 7) ==
282             EEPROM_READ_OPCODE_MICROWIRE);
283     }
284     DBGOUT(EEPROM, "eeprom bitnum in %d out %d, reading %d\n",
285            s->eecd_state.bitnum_in, s->eecd_state.bitnum_out,
286            s->eecd_state.reading);
287 }
288
289 static uint32_t
290 flash_eerd_read(E1000State *s, int x)
291 {
292     unsigned int index, r = s->mac_reg[EERD] & ~E1000_EEPROM_RW_REG_START;
293
294     if ((s->mac_reg[EERD] & E1000_EEPROM_RW_REG_START) == 0)
295         return (s->mac_reg[EERD]);
296
297     if ((index = r >> E1000_EEPROM_RW_ADDR_SHIFT) > EEPROM_CHECKSUM_REG)
298         return (E1000_EEPROM_RW_REG_DONE | r);
299
300     return ((s->eeprom_data[index] << E1000_EEPROM_RW_REG_DATA) |
301            E1000_EEPROM_RW_REG_DONE | r);
302 }
303
304 static void
305 putsum(uint8_t *data, uint32_t n, uint32_t sloc, uint32_t css, uint32_t cse)
306 {
307     uint32_t sum;
308
309     if (cse && cse < n)
310         n = cse + 1;
311     if (sloc < n-1) {
312         sum = net_checksum_add(n-css, data+css);
313         cpu_to_be16wu((uint16_t *)(data + sloc),
314                       net_checksum_finish(sum));
315     }
316 }
317
318 static inline int
319 vlan_enabled(E1000State *s)
320 {
321     return ((s->mac_reg[CTRL] & E1000_CTRL_VME) != 0);
322 }
323
324 static inline int
325 vlan_rx_filter_enabled(E1000State *s)
326 {
327     return ((s->mac_reg[RCTL] & E1000_RCTL_VFE) != 0);
328 }
329
330 static inline int
331 is_vlan_packet(E1000State *s, const uint8_t *buf)
332 {
333     return (be16_to_cpup((uint16_t *)(buf + 12)) ==
334                 le16_to_cpup((uint16_t *)(s->mac_reg + VET)));
335 }
336
337 static inline int
338 is_vlan_txd(uint32_t txd_lower)
339 {
340     return ((txd_lower & E1000_TXD_CMD_VLE) != 0);
341 }
342
343 static void
344 xmit_seg(E1000State *s)
345 {
346     uint16_t len, *sp;
347     unsigned int frames = s->tx.tso_frames, css, sofar, n;
348     struct e1000_tx *tp = &s->tx;
349
350     if (tp->tse && tp->cptse) {
351         css = tp->ipcss;
352         DBGOUT(TXSUM, "frames %d size %d ipcss %d\n",
353                frames, tp->size, css);
354         if (tp->ip) {           // IPv4
355             cpu_to_be16wu((uint16_t *)(tp->data+css+2),
356                           tp->size - css);
357             cpu_to_be16wu((uint16_t *)(tp->data+css+4),
358                           be16_to_cpup((uint16_t *)(tp->data+css+4))+frames);
359         } else                  // IPv6
360             cpu_to_be16wu((uint16_t *)(tp->data+css+4),
361                           tp->size - css);
362         css = tp->tucss;
363         len = tp->size - css;
364         DBGOUT(TXSUM, "tcp %d tucss %d len %d\n", tp->tcp, css, len);
365         if (tp->tcp) {
366             sofar = frames * tp->mss;
367             cpu_to_be32wu((uint32_t *)(tp->data+css+4), // seq
368                 be32_to_cpupu((uint32_t *)(tp->data+css+4))+sofar);
369             if (tp->paylen - sofar > tp->mss)
370                 tp->data[css + 13] &= ~9;               // PSH, FIN
371         } else  // UDP
372             cpu_to_be16wu((uint16_t *)(tp->data+css+4), len);
373         if (tp->sum_needed & E1000_TXD_POPTS_TXSM) {
374             // add pseudo-header length before checksum calculation
375             sp = (uint16_t *)(tp->data + tp->tucso);
376             cpu_to_be16wu(sp, be16_to_cpup(sp) + len);
377         }
378         tp->tso_frames++;
379     }
380
381     if (tp->sum_needed & E1000_TXD_POPTS_TXSM)
382         putsum(tp->data, tp->size, tp->tucso, tp->tucss, tp->tucse);
383     if (tp->sum_needed & E1000_TXD_POPTS_IXSM)
384         putsum(tp->data, tp->size, tp->ipcso, tp->ipcss, tp->ipcse);
385     if (tp->vlan_needed) {
386         memmove(tp->vlan, tp->data, 12);
387         memcpy(tp->data + 8, tp->vlan_header, 4);
388         qemu_send_packet(s->vc, tp->vlan, tp->size + 4);
389     } else
390         qemu_send_packet(s->vc, tp->data, tp->size);
391     s->mac_reg[TPT]++;
392     s->mac_reg[GPTC]++;
393     n = s->mac_reg[TOTL];
394     if ((s->mac_reg[TOTL] += s->tx.size) < n)
395         s->mac_reg[TOTH]++;
396 }
397
398 static void
399 process_tx_desc(E1000State *s, struct e1000_tx_desc *dp)
400 {
401     uint32_t txd_lower = le32_to_cpu(dp->lower.data);
402     uint32_t dtype = txd_lower & (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D);
403     unsigned int split_size = txd_lower & 0xffff, bytes, sz, op;
404     unsigned int msh = 0xfffff, hdr = 0;
405     uint64_t addr;
406     struct e1000_context_desc *xp = (struct e1000_context_desc *)dp;
407     struct e1000_tx *tp = &s->tx;
408
409     if (dtype == E1000_TXD_CMD_DEXT) {  // context descriptor
410         op = le32_to_cpu(xp->cmd_and_length);
411         tp->ipcss = xp->lower_setup.ip_fields.ipcss;
412         tp->ipcso = xp->lower_setup.ip_fields.ipcso;
413         tp->ipcse = le16_to_cpu(xp->lower_setup.ip_fields.ipcse);
414         tp->tucss = xp->upper_setup.tcp_fields.tucss;
415         tp->tucso = xp->upper_setup.tcp_fields.tucso;
416         tp->tucse = le16_to_cpu(xp->upper_setup.tcp_fields.tucse);
417         tp->paylen = op & 0xfffff;
418         tp->hdr_len = xp->tcp_seg_setup.fields.hdr_len;
419         tp->mss = le16_to_cpu(xp->tcp_seg_setup.fields.mss);
420         tp->ip = (op & E1000_TXD_CMD_IP) ? 1 : 0;
421         tp->tcp = (op & E1000_TXD_CMD_TCP) ? 1 : 0;
422         tp->tse = (op & E1000_TXD_CMD_TSE) ? 1 : 0;
423         tp->tso_frames = 0;
424         if (tp->tucso == 0) {   // this is probably wrong
425             DBGOUT(TXSUM, "TCP/UDP: cso 0!\n");
426             tp->tucso = tp->tucss + (tp->tcp ? 16 : 6);
427         }
428         return;
429     } else if (dtype == (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D)) {
430         // data descriptor
431         tp->sum_needed = le32_to_cpu(dp->upper.data) >> 8;
432         tp->cptse = ( txd_lower & E1000_TXD_CMD_TSE ) ? 1 : 0;
433     } else
434         // legacy descriptor
435         tp->cptse = 0;
436
437     if (vlan_enabled(s) && is_vlan_txd(txd_lower) &&
438         (tp->cptse || txd_lower & E1000_TXD_CMD_EOP)) {
439         tp->vlan_needed = 1;
440         cpu_to_be16wu((uint16_t *)(tp->vlan_header),
441                       le16_to_cpup((uint16_t *)(s->mac_reg + VET)));
442         cpu_to_be16wu((uint16_t *)(tp->vlan_header + 2),
443                       le16_to_cpu(dp->upper.fields.special));
444     }
445         
446     addr = le64_to_cpu(dp->buffer_addr);
447     if (tp->tse && tp->cptse) {
448         hdr = tp->hdr_len;
449         msh = hdr + tp->mss;
450         do {
451             bytes = split_size;
452             if (tp->size + bytes > msh)
453                 bytes = msh - tp->size;
454             cpu_physical_memory_read(addr, tp->data + tp->size, bytes);
455             if ((sz = tp->size + bytes) >= hdr && tp->size < hdr)
456                 memmove(tp->header, tp->data, hdr);
457             tp->size = sz;
458             addr += bytes;
459             if (sz == msh) {
460                 xmit_seg(s);
461                 memmove(tp->data, tp->header, hdr);
462                 tp->size = hdr;
463             }
464         } while (split_size -= bytes);
465     } else if (!tp->tse && tp->cptse) {
466         // context descriptor TSE is not set, while data descriptor TSE is set
467         DBGOUT(TXERR, "TCP segmentaion Error\n");
468     } else {
469         cpu_physical_memory_read(addr, tp->data + tp->size, split_size);
470         tp->size += split_size;
471     }
472
473     if (!(txd_lower & E1000_TXD_CMD_EOP))
474         return;
475     if (!(tp->tse && tp->cptse && tp->size < hdr))
476         xmit_seg(s);
477     tp->tso_frames = 0;
478     tp->sum_needed = 0;
479     tp->vlan_needed = 0;
480     tp->size = 0;
481     tp->cptse = 0;
482 }
483
484 static uint32_t
485 txdesc_writeback(target_phys_addr_t base, struct e1000_tx_desc *dp)
486 {
487     uint32_t txd_upper, txd_lower = le32_to_cpu(dp->lower.data);
488
489     if (!(txd_lower & (E1000_TXD_CMD_RS|E1000_TXD_CMD_RPS)))
490         return 0;
491     txd_upper = (le32_to_cpu(dp->upper.data) | E1000_TXD_STAT_DD) &
492                 ~(E1000_TXD_STAT_EC | E1000_TXD_STAT_LC | E1000_TXD_STAT_TU);
493     dp->upper.data = cpu_to_le32(txd_upper);
494     cpu_physical_memory_write(base + ((char *)&dp->upper - (char *)dp),
495                               (void *)&dp->upper, sizeof(dp->upper));
496     return E1000_ICR_TXDW;
497 }
498
499 static void
500 start_xmit(E1000State *s)
501 {
502     target_phys_addr_t base;
503     struct e1000_tx_desc desc;
504     uint32_t tdh_start = s->mac_reg[TDH], cause = E1000_ICS_TXQE;
505
506     if (!(s->mac_reg[TCTL] & E1000_TCTL_EN)) {
507         DBGOUT(TX, "tx disabled\n");
508         return;
509     }
510
511     while (s->mac_reg[TDH] != s->mac_reg[TDT]) {
512         base = ((uint64_t)s->mac_reg[TDBAH] << 32) + s->mac_reg[TDBAL] +
513                sizeof(struct e1000_tx_desc) * s->mac_reg[TDH];
514         cpu_physical_memory_read(base, (void *)&desc, sizeof(desc));
515
516         DBGOUT(TX, "index %d: %p : %x %x\n", s->mac_reg[TDH],
517                (void *)(intptr_t)desc.buffer_addr, desc.lower.data,
518                desc.upper.data);
519
520         process_tx_desc(s, &desc);
521         cause |= txdesc_writeback(base, &desc);
522
523         if (++s->mac_reg[TDH] * sizeof(desc) >= s->mac_reg[TDLEN])
524             s->mac_reg[TDH] = 0;
525         /*
526          * the following could happen only if guest sw assigns
527          * bogus values to TDT/TDLEN.
528          * there's nothing too intelligent we could do about this.
529          */
530         if (s->mac_reg[TDH] == tdh_start) {
531             DBGOUT(TXERR, "TDH wraparound @%x, TDT %x, TDLEN %x\n",
532                    tdh_start, s->mac_reg[TDT], s->mac_reg[TDLEN]);
533             break;
534         }
535     }
536     set_ics(s, 0, cause);
537 }
538
539 static int
540 receive_filter(E1000State *s, const uint8_t *buf, int size)
541 {
542     static uint8_t bcast[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
543     static int mta_shift[] = {4, 3, 2, 0};
544     uint32_t f, rctl = s->mac_reg[RCTL], ra[2], *rp;
545
546     if (is_vlan_packet(s, buf) && vlan_rx_filter_enabled(s)) {
547         uint16_t vid = be16_to_cpup((uint16_t *)(buf + 14));
548         uint32_t vfta = le32_to_cpup((uint32_t *)(s->mac_reg + VFTA) +
549                                      ((vid >> 5) & 0x7f));
550         if ((vfta & (1 << (vid & 0x1f))) == 0)
551             return 0;
552     }
553
554     if (rctl & E1000_RCTL_UPE)                  // promiscuous
555         return 1;
556
557     if ((buf[0] & 1) && (rctl & E1000_RCTL_MPE))        // promiscuous mcast
558         return 1;
559
560     if ((rctl & E1000_RCTL_BAM) && !memcmp(buf, bcast, sizeof bcast))
561         return 1;
562
563     for (rp = s->mac_reg + RA; rp < s->mac_reg + RA + 32; rp += 2) {
564         if (!(rp[1] & E1000_RAH_AV))
565             continue;
566         ra[0] = cpu_to_le32(rp[0]);
567         ra[1] = cpu_to_le32(rp[1]);
568         if (!memcmp(buf, (uint8_t *)ra, 6)) {
569             DBGOUT(RXFILTER,
570                    "unicast match[%d]: %02x:%02x:%02x:%02x:%02x:%02x\n",
571                    (int)(rp - s->mac_reg - RA)/2,
572                    buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
573             return 1;
574         }
575     }
576     DBGOUT(RXFILTER, "unicast mismatch: %02x:%02x:%02x:%02x:%02x:%02x\n",
577            buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
578
579     f = mta_shift[(rctl >> E1000_RCTL_MO_SHIFT) & 3];
580     f = (((buf[5] << 8) | buf[4]) >> f) & 0xfff;
581     if (s->mac_reg[MTA + (f >> 5)] & (1 << (f & 0x1f)))
582         return 1;
583     DBGOUT(RXFILTER,
584            "dropping, inexact filter mismatch: %02x:%02x:%02x:%02x:%02x:%02x MO %d MTA[%d] %x\n",
585            buf[0], buf[1], buf[2], buf[3], buf[4], buf[5],
586            (rctl >> E1000_RCTL_MO_SHIFT) & 3, f >> 5,
587            s->mac_reg[MTA + (f >> 5)]);
588
589     return 0;
590 }
591
592 static void
593 e1000_set_link_status(VLANClientState *vc)
594 {
595     E1000State *s = vc->opaque;
596     uint32_t old_status = s->mac_reg[STATUS];
597
598     if (vc->link_down)
599         s->mac_reg[STATUS] &= ~E1000_STATUS_LU;
600     else
601         s->mac_reg[STATUS] |= E1000_STATUS_LU;
602
603     if (s->mac_reg[STATUS] != old_status)
604         set_ics(s, 0, E1000_ICR_LSC);
605 }
606
607 static int
608 e1000_can_receive(VLANClientState *vc)
609 {
610     E1000State *s = vc->opaque;
611
612     return (s->mac_reg[RCTL] & E1000_RCTL_EN);
613 }
614
615 static ssize_t
616 e1000_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
617 {
618     E1000State *s = vc->opaque;
619     struct e1000_rx_desc desc;
620     target_phys_addr_t base;
621     unsigned int n, rdt;
622     uint32_t rdh_start;
623     uint16_t vlan_special = 0;
624     uint8_t vlan_status = 0, vlan_offset = 0;
625
626     if (!(s->mac_reg[RCTL] & E1000_RCTL_EN))
627         return -1;
628
629     if (size > s->rxbuf_size) {
630         DBGOUT(RX, "packet too large for buffers (%lu > %d)\n",
631                (unsigned long)size, s->rxbuf_size);
632         return -1;
633     }
634
635     if (!receive_filter(s, buf, size))
636         return size;
637
638     if (vlan_enabled(s) && is_vlan_packet(s, buf)) {
639         vlan_special = cpu_to_le16(be16_to_cpup((uint16_t *)(buf + 14)));
640         memmove((void *)(buf + 4), buf, 12);
641         vlan_status = E1000_RXD_STAT_VP;
642         vlan_offset = 4;
643         size -= 4;
644     }
645
646     rdh_start = s->mac_reg[RDH];
647     size += 4; // for the header
648     do {
649         if (s->mac_reg[RDH] == s->mac_reg[RDT] && s->check_rxov) {
650             set_ics(s, 0, E1000_ICS_RXO);
651             return -1;
652         }
653         base = ((uint64_t)s->mac_reg[RDBAH] << 32) + s->mac_reg[RDBAL] +
654                sizeof(desc) * s->mac_reg[RDH];
655         cpu_physical_memory_read(base, (void *)&desc, sizeof(desc));
656         desc.special = vlan_special;
657         desc.status |= (vlan_status | E1000_RXD_STAT_DD);
658         if (desc.buffer_addr) {
659             cpu_physical_memory_write(le64_to_cpu(desc.buffer_addr),
660                                       (void *)(buf + vlan_offset), size);
661             desc.length = cpu_to_le16(size);
662             desc.status |= E1000_RXD_STAT_EOP|E1000_RXD_STAT_IXSM;
663         } else // as per intel docs; skip descriptors with null buf addr
664             DBGOUT(RX, "Null RX descriptor!!\n");
665         cpu_physical_memory_write(base, (void *)&desc, sizeof(desc));
666
667         if (++s->mac_reg[RDH] * sizeof(desc) >= s->mac_reg[RDLEN])
668             s->mac_reg[RDH] = 0;
669         s->check_rxov = 1;
670         /* see comment in start_xmit; same here */
671         if (s->mac_reg[RDH] == rdh_start) {
672             DBGOUT(RXERR, "RDH wraparound @%x, RDT %x, RDLEN %x\n",
673                    rdh_start, s->mac_reg[RDT], s->mac_reg[RDLEN]);
674             set_ics(s, 0, E1000_ICS_RXO);
675             return -1;
676         }
677     } while (desc.buffer_addr == 0);
678
679     s->mac_reg[GPRC]++;
680     s->mac_reg[TPR]++;
681     n = s->mac_reg[TORL];
682     if ((s->mac_reg[TORL] += size) < n)
683         s->mac_reg[TORH]++;
684
685     n = E1000_ICS_RXT0;
686     if ((rdt = s->mac_reg[RDT]) < s->mac_reg[RDH])
687         rdt += s->mac_reg[RDLEN] / sizeof(desc);
688     if (((rdt - s->mac_reg[RDH]) * sizeof(desc)) <= s->mac_reg[RDLEN] >>
689         s->rxbuf_min_shift)
690         n |= E1000_ICS_RXDMT0;
691
692     set_ics(s, 0, n);
693
694     return size;
695 }
696
697 static uint32_t
698 mac_readreg(E1000State *s, int index)
699 {
700     return s->mac_reg[index];
701 }
702
703 static uint32_t
704 mac_icr_read(E1000State *s, int index)
705 {
706     uint32_t ret = s->mac_reg[ICR];
707
708     DBGOUT(INTERRUPT, "ICR read: %x\n", ret);
709     set_interrupt_cause(s, 0, 0);
710     return ret;
711 }
712
713 static uint32_t
714 mac_read_clr4(E1000State *s, int index)
715 {
716     uint32_t ret = s->mac_reg[index];
717
718     s->mac_reg[index] = 0;
719     return ret;
720 }
721
722 static uint32_t
723 mac_read_clr8(E1000State *s, int index)
724 {
725     uint32_t ret = s->mac_reg[index];
726
727     s->mac_reg[index] = 0;
728     s->mac_reg[index-1] = 0;
729     return ret;
730 }
731
732 static void
733 mac_writereg(E1000State *s, int index, uint32_t val)
734 {
735     s->mac_reg[index] = val;
736 }
737
738 static void
739 set_rdt(E1000State *s, int index, uint32_t val)
740 {
741     s->check_rxov = 0;
742     s->mac_reg[index] = val & 0xffff;
743 }
744
745 static void
746 set_16bit(E1000State *s, int index, uint32_t val)
747 {
748     s->mac_reg[index] = val & 0xffff;
749 }
750
751 static void
752 set_dlen(E1000State *s, int index, uint32_t val)
753 {
754     s->mac_reg[index] = val & 0xfff80;
755 }
756
757 static void
758 set_tctl(E1000State *s, int index, uint32_t val)
759 {
760     s->mac_reg[index] = val;
761     s->mac_reg[TDT] &= 0xffff;
762     start_xmit(s);
763 }
764
765 static void
766 set_icr(E1000State *s, int index, uint32_t val)
767 {
768     DBGOUT(INTERRUPT, "set_icr %x\n", val);
769     set_interrupt_cause(s, 0, s->mac_reg[ICR] & ~val);
770 }
771
772 static void
773 set_imc(E1000State *s, int index, uint32_t val)
774 {
775     s->mac_reg[IMS] &= ~val;
776     set_ics(s, 0, 0);
777 }
778
779 static void
780 set_ims(E1000State *s, int index, uint32_t val)
781 {
782     s->mac_reg[IMS] |= val;
783     set_ics(s, 0, 0);
784 }
785
786 #define getreg(x)       [x] = mac_readreg
787 static uint32_t (*macreg_readops[])(E1000State *, int) = {
788     getreg(PBA),        getreg(RCTL),   getreg(TDH),    getreg(TXDCTL),
789     getreg(WUFC),       getreg(TDT),    getreg(CTRL),   getreg(LEDCTL),
790     getreg(MANC),       getreg(MDIC),   getreg(SWSM),   getreg(STATUS),
791     getreg(TORL),       getreg(TOTL),   getreg(IMS),    getreg(TCTL),
792     getreg(RDH),        getreg(RDT),    getreg(VET),    getreg(ICS),
793
794     [TOTH] = mac_read_clr8,     [TORH] = mac_read_clr8, [GPRC] = mac_read_clr4,
795     [GPTC] = mac_read_clr4,     [TPR] = mac_read_clr4,  [TPT] = mac_read_clr4,
796     [ICR] = mac_icr_read,       [EECD] = get_eecd,      [EERD] = flash_eerd_read,
797     [CRCERRS ... MPC] = &mac_readreg,
798     [RA ... RA+31] = &mac_readreg,
799     [MTA ... MTA+127] = &mac_readreg,
800     [VFTA ... VFTA+127] = &mac_readreg,
801 };
802 enum { NREADOPS = ARRAY_SIZE(macreg_readops) };
803
804 #define putreg(x)       [x] = mac_writereg
805 static void (*macreg_writeops[])(E1000State *, int, uint32_t) = {
806     putreg(PBA),        putreg(EERD),   putreg(SWSM),   putreg(WUFC),
807     putreg(TDBAL),      putreg(TDBAH),  putreg(TXDCTL), putreg(RDBAH),
808     putreg(RDBAL),      putreg(LEDCTL), putreg(VET),
809     [TDLEN] = set_dlen, [RDLEN] = set_dlen,     [TCTL] = set_tctl,
810     [TDT] = set_tctl,   [MDIC] = set_mdic,      [ICS] = set_ics,
811     [TDH] = set_16bit,  [RDH] = set_16bit,      [RDT] = set_rdt,
812     [IMC] = set_imc,    [IMS] = set_ims,        [ICR] = set_icr,
813     [EECD] = set_eecd,  [RCTL] = set_rx_control, [CTRL] = set_ctrl,
814     [RA ... RA+31] = &mac_writereg,
815     [MTA ... MTA+127] = &mac_writereg,
816     [VFTA ... VFTA+127] = &mac_writereg,
817 };
818 enum { NWRITEOPS = ARRAY_SIZE(macreg_writeops) };
819
820 static void
821 e1000_mmio_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
822 {
823     E1000State *s = opaque;
824     unsigned int index = (addr & 0x1ffff) >> 2;
825
826 #ifdef TARGET_WORDS_BIGENDIAN
827     val = bswap32(val);
828 #endif
829     if (index < NWRITEOPS && macreg_writeops[index])
830         macreg_writeops[index](s, index, val);
831     else if (index < NREADOPS && macreg_readops[index])
832         DBGOUT(MMIO, "e1000_mmio_writel RO %x: 0x%04x\n", index<<2, val);
833     else
834         DBGOUT(UNKNOWN, "MMIO unknown write addr=0x%08x,val=0x%08x\n",
835                index<<2, val);
836 }
837
838 static void
839 e1000_mmio_writew(void *opaque, target_phys_addr_t addr, uint32_t val)
840 {
841     // emulate hw without byte enables: no RMW
842     e1000_mmio_writel(opaque, addr & ~3,
843                       (val & 0xffff) << (8*(addr & 3)));
844 }
845
846 static void
847 e1000_mmio_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
848 {
849     // emulate hw without byte enables: no RMW
850     e1000_mmio_writel(opaque, addr & ~3,
851                       (val & 0xff) << (8*(addr & 3)));
852 }
853
854 static uint32_t
855 e1000_mmio_readl(void *opaque, target_phys_addr_t addr)
856 {
857     E1000State *s = opaque;
858     unsigned int index = (addr & 0x1ffff) >> 2;
859
860     if (index < NREADOPS && macreg_readops[index])
861     {
862         uint32_t val = macreg_readops[index](s, index);
863 #ifdef TARGET_WORDS_BIGENDIAN
864         val = bswap32(val);
865 #endif
866         return val;
867     }
868     DBGOUT(UNKNOWN, "MMIO unknown read addr=0x%08x\n", index<<2);
869     return 0;
870 }
871
872 static uint32_t
873 e1000_mmio_readb(void *opaque, target_phys_addr_t addr)
874 {
875     return ((e1000_mmio_readl(opaque, addr & ~3)) >>
876             (8 * (addr & 3))) & 0xff;
877 }
878
879 static uint32_t
880 e1000_mmio_readw(void *opaque, target_phys_addr_t addr)
881 {
882     return ((e1000_mmio_readl(opaque, addr & ~3)) >>
883             (8 * (addr & 3))) & 0xffff;
884 }
885
886 static bool is_version_1(void *opaque, int version_id)
887 {
888     return version_id == 1;
889 }
890
891 static const VMStateDescription vmstate_e1000 = {
892     .name = "e1000",
893     .version_id = 2,
894     .minimum_version_id = 1,
895     .minimum_version_id_old = 1,
896     .fields      = (VMStateField []) {
897         VMSTATE_PCI_DEVICE(dev, E1000State),
898         VMSTATE_UNUSED_TEST(is_version_1, 4), /* was instance id */
899         VMSTATE_UNUSED(4), /* Was mmio_base.  */
900         VMSTATE_UINT32(rxbuf_size, E1000State),
901         VMSTATE_UINT32(rxbuf_min_shift, E1000State),
902         VMSTATE_UINT32(eecd_state.val_in, E1000State),
903         VMSTATE_UINT16(eecd_state.bitnum_in, E1000State),
904         VMSTATE_UINT16(eecd_state.bitnum_out, E1000State),
905         VMSTATE_UINT16(eecd_state.reading, E1000State),
906         VMSTATE_UINT32(eecd_state.old_eecd, E1000State),
907         VMSTATE_UINT8(tx.ipcss, E1000State),
908         VMSTATE_UINT8(tx.ipcso, E1000State),
909         VMSTATE_UINT16(tx.ipcse, E1000State),
910         VMSTATE_UINT8(tx.tucss, E1000State),
911         VMSTATE_UINT8(tx.tucso, E1000State),
912         VMSTATE_UINT16(tx.tucse, E1000State),
913         VMSTATE_UINT32(tx.paylen, E1000State),
914         VMSTATE_UINT8(tx.hdr_len, E1000State),
915         VMSTATE_UINT16(tx.mss, E1000State),
916         VMSTATE_UINT16(tx.size, E1000State),
917         VMSTATE_UINT16(tx.tso_frames, E1000State),
918         VMSTATE_UINT8(tx.sum_needed, E1000State),
919         VMSTATE_INT8(tx.ip, E1000State),
920         VMSTATE_INT8(tx.tcp, E1000State),
921         VMSTATE_BUFFER(tx.header, E1000State),
922         VMSTATE_BUFFER(tx.data, E1000State),
923         VMSTATE_UINT16_ARRAY(eeprom_data, E1000State, 64),
924         VMSTATE_UINT16_ARRAY(phy_reg, E1000State, 0x20),
925         VMSTATE_UINT32(mac_reg[CTRL], E1000State),
926         VMSTATE_UINT32(mac_reg[EECD], E1000State),
927         VMSTATE_UINT32(mac_reg[EERD], E1000State),
928         VMSTATE_UINT32(mac_reg[GPRC], E1000State),
929         VMSTATE_UINT32(mac_reg[GPTC], E1000State),
930         VMSTATE_UINT32(mac_reg[ICR], E1000State),
931         VMSTATE_UINT32(mac_reg[ICS], E1000State),
932         VMSTATE_UINT32(mac_reg[IMC], E1000State),
933         VMSTATE_UINT32(mac_reg[IMS], E1000State),
934         VMSTATE_UINT32(mac_reg[LEDCTL], E1000State),
935         VMSTATE_UINT32(mac_reg[MANC], E1000State),
936         VMSTATE_UINT32(mac_reg[MDIC], E1000State),
937         VMSTATE_UINT32(mac_reg[MPC], E1000State),
938         VMSTATE_UINT32(mac_reg[PBA], E1000State),
939         VMSTATE_UINT32(mac_reg[RCTL], E1000State),
940         VMSTATE_UINT32(mac_reg[RDBAH], E1000State),
941         VMSTATE_UINT32(mac_reg[RDBAL], E1000State),
942         VMSTATE_UINT32(mac_reg[RDH], E1000State),
943         VMSTATE_UINT32(mac_reg[RDLEN], E1000State),
944         VMSTATE_UINT32(mac_reg[RDT], E1000State),
945         VMSTATE_UINT32(mac_reg[STATUS], E1000State),
946         VMSTATE_UINT32(mac_reg[SWSM], E1000State),
947         VMSTATE_UINT32(mac_reg[TCTL], E1000State),
948         VMSTATE_UINT32(mac_reg[TDBAH], E1000State),
949         VMSTATE_UINT32(mac_reg[TDBAL], E1000State),
950         VMSTATE_UINT32(mac_reg[TDH], E1000State),
951         VMSTATE_UINT32(mac_reg[TDLEN], E1000State),
952         VMSTATE_UINT32(mac_reg[TDT], E1000State),
953         VMSTATE_UINT32(mac_reg[TORH], E1000State),
954         VMSTATE_UINT32(mac_reg[TORL], E1000State),
955         VMSTATE_UINT32(mac_reg[TOTH], E1000State),
956         VMSTATE_UINT32(mac_reg[TOTL], E1000State),
957         VMSTATE_UINT32(mac_reg[TPR], E1000State),
958         VMSTATE_UINT32(mac_reg[TPT], E1000State),
959         VMSTATE_UINT32(mac_reg[TXDCTL], E1000State),
960         VMSTATE_UINT32(mac_reg[WUFC], E1000State),
961         VMSTATE_UINT32(mac_reg[VET], E1000State),
962         VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, RA, 32),
963         VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, MTA, 128),
964         VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, VFTA, 128),
965         VMSTATE_END_OF_LIST()
966     }
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 * const e1000_mmio_write[] = {
1006     e1000_mmio_writeb,  e1000_mmio_writew,      e1000_mmio_writel
1007 };
1008
1009 static CPUReadMemoryFunc * const 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                 pcibus_t addr, pcibus_t size, int type)
1016 {
1017     E1000State *d = DO_UPCAST(E1000State, dev, 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%08"FMT_PCIBUS" 0x%08"FMT_PCIBUS"\n",
1026            addr, size);
1027
1028     cpu_register_physical_memory(addr, PNPMMIO_SIZE, d->mmio_index);
1029     qemu_register_coalesced_mmio(addr, excluded_regs[0]);
1030
1031     for (i = 0; excluded_regs[i] != PNPMMIO_SIZE; i++)
1032         qemu_register_coalesced_mmio(addr + excluded_regs[i] + 4,
1033                                      excluded_regs[i + 1] -
1034                                      excluded_regs[i] - 4);
1035 }
1036
1037 static void
1038 e1000_cleanup(VLANClientState *vc)
1039 {
1040     E1000State *d = vc->opaque;
1041
1042     d->vc = NULL;
1043 }
1044
1045 static int
1046 pci_e1000_uninit(PCIDevice *dev)
1047 {
1048     E1000State *d = DO_UPCAST(E1000State, dev, dev);
1049
1050     cpu_unregister_io_memory(d->mmio_index);
1051     qemu_del_vlan_client(d->vc);
1052     vmstate_unregister(&vmstate_e1000, d);
1053     return 0;
1054 }
1055
1056 static void e1000_reset(void *opaque)
1057 {
1058     E1000State *d = opaque;
1059
1060     memset(d->phy_reg, 0, sizeof d->phy_reg);
1061     memmove(d->phy_reg, phy_reg_init, sizeof phy_reg_init);
1062     memset(d->mac_reg, 0, sizeof d->mac_reg);
1063     memmove(d->mac_reg, mac_reg_init, sizeof mac_reg_init);
1064     d->rxbuf_min_shift = 1;
1065     memset(&d->tx, 0, sizeof d->tx);
1066 }
1067
1068 static int pci_e1000_init(PCIDevice *pci_dev)
1069 {
1070     E1000State *d = DO_UPCAST(E1000State, dev, pci_dev);
1071     uint8_t *pci_conf;
1072     uint16_t checksum = 0;
1073     int i;
1074     uint8_t *macaddr;
1075
1076     pci_conf = d->dev.config;
1077
1078     pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL);
1079     pci_config_set_device_id(pci_conf, E1000_DEVID);
1080     *(uint16_t *)(pci_conf+0x04) = cpu_to_le16(0x0407);
1081     *(uint16_t *)(pci_conf+0x06) = cpu_to_le16(0x0010);
1082     pci_conf[0x08] = 0x03;
1083     pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET);
1084     pci_conf[0x0c] = 0x10;
1085
1086     pci_conf[0x3d] = 1; // interrupt pin 0
1087
1088     d->mmio_index = cpu_register_io_memory(e1000_mmio_read,
1089             e1000_mmio_write, d);
1090
1091     pci_register_bar((PCIDevice *)d, 0, PNPMMIO_SIZE,
1092                            PCI_BASE_ADDRESS_SPACE_MEMORY, e1000_mmio_map);
1093
1094     pci_register_bar((PCIDevice *)d, 1, IOPORT_SIZE,
1095                            PCI_BASE_ADDRESS_SPACE_IO, ioport_map);
1096
1097     memmove(d->eeprom_data, e1000_eeprom_template,
1098         sizeof e1000_eeprom_template);
1099     qemu_macaddr_default_if_unset(&d->conf.macaddr);
1100     macaddr = d->conf.macaddr.a;
1101     for (i = 0; i < 3; i++)
1102         d->eeprom_data[i] = (macaddr[2*i+1]<<8) | macaddr[2*i];
1103     for (i = 0; i < EEPROM_CHECKSUM_REG; i++)
1104         checksum += d->eeprom_data[i];
1105     checksum = (uint16_t) EEPROM_SUM - checksum;
1106     d->eeprom_data[EEPROM_CHECKSUM_REG] = checksum;
1107
1108     d->vc = qemu_new_vlan_client(NET_CLIENT_TYPE_NIC,
1109                                  d->conf.vlan, d->conf.peer,
1110                                  d->dev.qdev.info->name, d->dev.qdev.id,
1111                                  e1000_can_receive, e1000_receive, NULL,
1112                                  NULL, e1000_cleanup, d);
1113     d->vc->link_status_changed = e1000_set_link_status;
1114
1115     qemu_format_nic_info_str(d->vc, macaddr);
1116
1117     vmstate_register(-1, &vmstate_e1000, d);
1118
1119     if (!pci_dev->qdev.hotplugged) {
1120         static int loaded = 0;
1121         if (!loaded) {
1122             rom_add_option("pxe-e1000.bin");
1123             loaded = 1;
1124         }
1125     }
1126     return 0;
1127 }
1128
1129 static void qdev_e1000_reset(DeviceState *dev)
1130 {
1131     E1000State *d = DO_UPCAST(E1000State, dev.qdev, dev);
1132     e1000_reset(d);
1133 }
1134
1135 static PCIDeviceInfo e1000_info = {
1136     .qdev.name  = "e1000",
1137     .qdev.desc  = "Intel Gigabit Ethernet",
1138     .qdev.size  = sizeof(E1000State),
1139     .qdev.reset = qdev_e1000_reset,
1140     .init       = pci_e1000_init,
1141     .exit       = pci_e1000_uninit,
1142     .qdev.props = (Property[]) {
1143         DEFINE_NIC_PROPERTIES(E1000State, conf),
1144         DEFINE_PROP_END_OF_LIST(),
1145     }
1146 };
1147
1148 static void e1000_register_devices(void)
1149 {
1150     pci_qdev_register(&e1000_info);
1151 }
1152
1153 device_init(e1000_register_devices)