Statistics
| Branch: | Revision:

root / hw / e1000.c @ ee912ccf

History | View | Annotate | Download (38.9 kB)

1
/*
2
 * QEMU e1000 emulation
3
 *
4
 * Software developer's manual:
5
 * http://download.intel.com/design/network/manuals/8254x_GBe_SDM.pdf
6
 *
7
 * Nir Peleg, Tutis Systems Ltd. for Qumranet Inc.
8
 * Copyright (c) 2008 Qumranet
9
 * Based on work done by:
10
 * Copyright (c) 2007 Dan Aloni
11
 * Copyright (c) 2004 Antony T Curtis
12
 *
13
 * This library is free software; you can redistribute it and/or
14
 * modify it under the terms of the GNU Lesser General Public
15
 * License as published by the Free Software Foundation; either
16
 * version 2 of the License, or (at your option) any later version.
17
 *
18
 * This library is distributed in the hope that it will be useful,
19
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21
 * Lesser General Public License for more details.
22
 *
23
 * You should have received a copy of the GNU Lesser General Public
24
 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
25
 */
26

    
27

    
28
#include "hw.h"
29
#include "pci.h"
30
#include "net.h"
31
#include "net/checksum.h"
32
#include "loader.h"
33
#include "sysemu.h"
34

    
35
#include "e1000_hw.h"
36

    
37
#define E1000_DEBUG
38

    
39
#ifdef E1000_DEBUG
40
enum {
41
    DEBUG_GENERAL,        DEBUG_IO,        DEBUG_MMIO,        DEBUG_INTERRUPT,
42
    DEBUG_RX,                DEBUG_TX,        DEBUG_MDIC,        DEBUG_EEPROM,
43
    DEBUG_UNKNOWN,        DEBUG_TXSUM,        DEBUG_TXERR,        DEBUG_RXERR,
44
    DEBUG_RXFILTER,        DEBUG_NOTYET,
45
};
46
#define DBGBIT(x)        (1<<DEBUG_##x)
47
static int debugflags = DBGBIT(TXERR) | DBGBIT(GENERAL);
48

    
49
#define        DBGOUT(what, fmt, ...) do { \
50
    if (debugflags & DBGBIT(what)) \
51
        fprintf(stderr, "e1000: " fmt, ## __VA_ARGS__); \
52
    } while (0)
53
#else
54
#define        DBGOUT(what, fmt, ...) do {} while (0)
55
#endif
56

    
57
#define IOPORT_SIZE       0x40
58
#define PNPMMIO_SIZE      0x20000
59
#define MIN_BUF_SIZE      60 /* Min. octets in an ethernet frame sans FCS */
60

    
61
/*
62
 * HW models:
63
 *  E1000_DEV_ID_82540EM works with Windows and Linux
64
 *  E1000_DEV_ID_82573L OK with windoze and Linux 2.6.22,
65
 *        appears to perform better than 82540EM, but breaks with Linux 2.6.18
66
 *  E1000_DEV_ID_82544GC_COPPER appears to work; not well tested
67
 *  Others never tested
68
 */
69
enum { E1000_DEVID = E1000_DEV_ID_82540EM };
70

    
71
/*
72
 * May need to specify additional MAC-to-PHY entries --
73
 * Intel's Windows driver refuses to initialize unless they match
74
 */
75
enum {
76
    PHY_ID2_INIT = E1000_DEVID == E1000_DEV_ID_82573L ?                0xcc2 :
77
                   E1000_DEVID == E1000_DEV_ID_82544GC_COPPER ?        0xc30 :
78
                   /* default to E1000_DEV_ID_82540EM */        0xc20
79
};
80

    
81
typedef struct E1000State_st {
82
    PCIDevice dev;
83
    NICState *nic;
84
    NICConf conf;
85
    int mmio_index;
86

    
87
    uint32_t mac_reg[0x8000];
88
    uint16_t phy_reg[0x20];
89
    uint16_t eeprom_data[64];
90

    
91
    uint32_t rxbuf_size;
92
    uint32_t rxbuf_min_shift;
93
    int check_rxov;
94
    struct e1000_tx {
95
        unsigned char header[256];
96
        unsigned char vlan_header[4];
97
        /* Fields vlan and data must not be reordered or separated. */
98
        unsigned char vlan[4];
99
        unsigned char data[0x10000];
100
        uint16_t size;
101
        unsigned char sum_needed;
102
        unsigned char vlan_needed;
103
        uint8_t ipcss;
104
        uint8_t ipcso;
105
        uint16_t ipcse;
106
        uint8_t tucss;
107
        uint8_t tucso;
108
        uint16_t tucse;
109
        uint8_t hdr_len;
110
        uint16_t mss;
111
        uint32_t paylen;
112
        uint16_t tso_frames;
113
        char tse;
114
        int8_t ip;
115
        int8_t tcp;
116
        char cptse;     // current packet tse bit
117
    } tx;
118

    
119
    struct {
120
        uint32_t val_in;        // shifted in from guest driver
121
        uint16_t bitnum_in;
122
        uint16_t bitnum_out;
123
        uint16_t reading;
124
        uint32_t old_eecd;
125
    } eecd_state;
126
} E1000State;
127

    
128
#define        defreg(x)        x = (E1000_##x>>2)
129
enum {
130
    defreg(CTRL),        defreg(EECD),        defreg(EERD),        defreg(GPRC),
131
    defreg(GPTC),        defreg(ICR),        defreg(ICS),        defreg(IMC),
132
    defreg(IMS),        defreg(LEDCTL),        defreg(MANC),        defreg(MDIC),
133
    defreg(MPC),        defreg(PBA),        defreg(RCTL),        defreg(RDBAH),
134
    defreg(RDBAL),        defreg(RDH),        defreg(RDLEN),        defreg(RDT),
135
    defreg(STATUS),        defreg(SWSM),        defreg(TCTL),        defreg(TDBAH),
136
    defreg(TDBAL),        defreg(TDH),        defreg(TDLEN),        defreg(TDT),
137
    defreg(TORH),        defreg(TORL),        defreg(TOTH),        defreg(TOTL),
138
    defreg(TPR),        defreg(TPT),        defreg(TXDCTL),        defreg(WUFC),
139
    defreg(RA),                defreg(MTA),        defreg(CRCERRS),defreg(VFTA),
140
    defreg(VET),
141
};
142

    
143
enum { PHY_R = 1, PHY_W = 2, PHY_RW = PHY_R | PHY_W };
144
static const char phy_regcap[0x20] = {
145
    [PHY_STATUS] = PHY_R,        [M88E1000_EXT_PHY_SPEC_CTRL] = PHY_RW,
146
    [PHY_ID1] = PHY_R,                [M88E1000_PHY_SPEC_CTRL] = PHY_RW,
147
    [PHY_CTRL] = PHY_RW,        [PHY_1000T_CTRL] = PHY_RW,
148
    [PHY_LP_ABILITY] = PHY_R,        [PHY_1000T_STATUS] = PHY_R,
149
    [PHY_AUTONEG_ADV] = PHY_RW,        [M88E1000_RX_ERR_CNTR] = PHY_R,
150
    [PHY_ID2] = PHY_R,                [M88E1000_PHY_SPEC_STATUS] = PHY_R
151
};
152

    
153
static void
154
ioport_map(PCIDevice *pci_dev, int region_num, pcibus_t addr,
155
           pcibus_t size, int type)
156
{
157
    DBGOUT(IO, "e1000_ioport_map addr=0x%04"FMT_PCIBUS
158
           " size=0x%08"FMT_PCIBUS"\n", addr, size);
159
}
160

    
161
static void
162
set_interrupt_cause(E1000State *s, int index, uint32_t val)
163
{
164
    if (val)
165
        val |= E1000_ICR_INT_ASSERTED;
166
    s->mac_reg[ICR] = val;
167
    s->mac_reg[ICS] = val;
168
    qemu_set_irq(s->dev.irq[0], (s->mac_reg[IMS] & s->mac_reg[ICR]) != 0);
169
}
170

    
171
static void
172
set_ics(E1000State *s, int index, uint32_t val)
173
{
174
    DBGOUT(INTERRUPT, "set_ics %x, ICR %x, IMR %x\n", val, s->mac_reg[ICR],
175
        s->mac_reg[IMS]);
176
    set_interrupt_cause(s, 0, val | s->mac_reg[ICR]);
177
}
178

    
179
static int
180
rxbufsize(uint32_t v)
181
{
182
    v &= E1000_RCTL_BSEX | E1000_RCTL_SZ_16384 | E1000_RCTL_SZ_8192 |
183
         E1000_RCTL_SZ_4096 | E1000_RCTL_SZ_2048 | E1000_RCTL_SZ_1024 |
184
         E1000_RCTL_SZ_512 | E1000_RCTL_SZ_256;
185
    switch (v) {
186
    case E1000_RCTL_BSEX | E1000_RCTL_SZ_16384:
187
        return 16384;
188
    case E1000_RCTL_BSEX | E1000_RCTL_SZ_8192:
189
        return 8192;
190
    case E1000_RCTL_BSEX | E1000_RCTL_SZ_4096:
191
        return 4096;
192
    case E1000_RCTL_SZ_1024:
193
        return 1024;
194
    case E1000_RCTL_SZ_512:
195
        return 512;
196
    case E1000_RCTL_SZ_256:
197
        return 256;
198
    }
199
    return 2048;
200
}
201

    
202
static void
203
set_ctrl(E1000State *s, int index, uint32_t val)
204
{
205
    /* RST is self clearing */
206
    s->mac_reg[CTRL] = val & ~E1000_CTRL_RST;
207
}
208

    
209
static void
210
set_rx_control(E1000State *s, int index, uint32_t val)
211
{
212
    s->mac_reg[RCTL] = val;
213
    s->rxbuf_size = rxbufsize(val);
214
    s->rxbuf_min_shift = ((val / E1000_RCTL_RDMTS_QUAT) & 3) + 1;
215
    DBGOUT(RX, "RCTL: %d, mac_reg[RCTL] = 0x%x\n", s->mac_reg[RDT],
216
           s->mac_reg[RCTL]);
217
}
218

    
219
static void
220
set_mdic(E1000State *s, int index, uint32_t val)
221
{
222
    uint32_t data = val & E1000_MDIC_DATA_MASK;
223
    uint32_t addr = ((val & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT);
224

    
225
    if ((val & E1000_MDIC_PHY_MASK) >> E1000_MDIC_PHY_SHIFT != 1) // phy #
226
        val = s->mac_reg[MDIC] | E1000_MDIC_ERROR;
227
    else if (val & E1000_MDIC_OP_READ) {
228
        DBGOUT(MDIC, "MDIC read reg 0x%x\n", addr);
229
        if (!(phy_regcap[addr] & PHY_R)) {
230
            DBGOUT(MDIC, "MDIC read reg %x unhandled\n", addr);
231
            val |= E1000_MDIC_ERROR;
232
        } else
233
            val = (val ^ data) | s->phy_reg[addr];
234
    } else if (val & E1000_MDIC_OP_WRITE) {
235
        DBGOUT(MDIC, "MDIC write reg 0x%x, value 0x%x\n", addr, data);
236
        if (!(phy_regcap[addr] & PHY_W)) {
237
            DBGOUT(MDIC, "MDIC write reg %x unhandled\n", addr);
238
            val |= E1000_MDIC_ERROR;
239
        } else
240
            s->phy_reg[addr] = data;
241
    }
242
    s->mac_reg[MDIC] = val | E1000_MDIC_READY;
243
    set_ics(s, 0, E1000_ICR_MDAC);
244
}
245

    
246
static uint32_t
247
get_eecd(E1000State *s, int index)
248
{
249
    uint32_t ret = E1000_EECD_PRES|E1000_EECD_GNT | s->eecd_state.old_eecd;
250

    
251
    DBGOUT(EEPROM, "reading eeprom bit %d (reading %d)\n",
252
           s->eecd_state.bitnum_out, s->eecd_state.reading);
253
    if (!s->eecd_state.reading ||
254
        ((s->eeprom_data[(s->eecd_state.bitnum_out >> 4) & 0x3f] >>
255
          ((s->eecd_state.bitnum_out & 0xf) ^ 0xf))) & 1)
256
        ret |= E1000_EECD_DO;
257
    return ret;
258
}
259

    
260
static void
261
set_eecd(E1000State *s, int index, uint32_t val)
262
{
263
    uint32_t oldval = s->eecd_state.old_eecd;
264

    
265
    s->eecd_state.old_eecd = val & (E1000_EECD_SK | E1000_EECD_CS |
266
            E1000_EECD_DI|E1000_EECD_FWE_MASK|E1000_EECD_REQ);
267
    if (!(E1000_EECD_CS & val))                        // CS inactive; nothing to do
268
        return;
269
    if (E1000_EECD_CS & (val ^ oldval)) {        // CS rise edge; reset state
270
        s->eecd_state.val_in = 0;
271
        s->eecd_state.bitnum_in = 0;
272
        s->eecd_state.bitnum_out = 0;
273
        s->eecd_state.reading = 0;
274
    }
275
    if (!(E1000_EECD_SK & (val ^ oldval)))        // no clock edge
276
        return;
277
    if (!(E1000_EECD_SK & val)) {                // falling edge
278
        s->eecd_state.bitnum_out++;
279
        return;
280
    }
281
    s->eecd_state.val_in <<= 1;
282
    if (val & E1000_EECD_DI)
283
        s->eecd_state.val_in |= 1;
284
    if (++s->eecd_state.bitnum_in == 9 && !s->eecd_state.reading) {
285
        s->eecd_state.bitnum_out = ((s->eecd_state.val_in & 0x3f)<<4)-1;
286
        s->eecd_state.reading = (((s->eecd_state.val_in >> 6) & 7) ==
287
            EEPROM_READ_OPCODE_MICROWIRE);
288
    }
289
    DBGOUT(EEPROM, "eeprom bitnum in %d out %d, reading %d\n",
290
           s->eecd_state.bitnum_in, s->eecd_state.bitnum_out,
291
           s->eecd_state.reading);
292
}
293

    
294
static uint32_t
295
flash_eerd_read(E1000State *s, int x)
296
{
297
    unsigned int index, r = s->mac_reg[EERD] & ~E1000_EEPROM_RW_REG_START;
298

    
299
    if ((s->mac_reg[EERD] & E1000_EEPROM_RW_REG_START) == 0)
300
        return (s->mac_reg[EERD]);
301

    
302
    if ((index = r >> E1000_EEPROM_RW_ADDR_SHIFT) > EEPROM_CHECKSUM_REG)
303
        return (E1000_EEPROM_RW_REG_DONE | r);
304

    
305
    return ((s->eeprom_data[index] << E1000_EEPROM_RW_REG_DATA) |
306
           E1000_EEPROM_RW_REG_DONE | r);
307
}
308

    
309
static void
310
putsum(uint8_t *data, uint32_t n, uint32_t sloc, uint32_t css, uint32_t cse)
311
{
312
    uint32_t sum;
313

    
314
    if (cse && cse < n)
315
        n = cse + 1;
316
    if (sloc < n-1) {
317
        sum = net_checksum_add(n-css, data+css);
318
        cpu_to_be16wu((uint16_t *)(data + sloc),
319
                      net_checksum_finish(sum));
320
    }
321
}
322

    
323
static inline int
324
vlan_enabled(E1000State *s)
325
{
326
    return ((s->mac_reg[CTRL] & E1000_CTRL_VME) != 0);
327
}
328

    
329
static inline int
330
vlan_rx_filter_enabled(E1000State *s)
331
{
332
    return ((s->mac_reg[RCTL] & E1000_RCTL_VFE) != 0);
333
}
334

    
335
static inline int
336
is_vlan_packet(E1000State *s, const uint8_t *buf)
337
{
338
    return (be16_to_cpup((uint16_t *)(buf + 12)) ==
339
                le16_to_cpup((uint16_t *)(s->mac_reg + VET)));
340
}
341

    
342
static inline int
343
is_vlan_txd(uint32_t txd_lower)
344
{
345
    return ((txd_lower & E1000_TXD_CMD_VLE) != 0);
346
}
347

    
348
/* FCS aka Ethernet CRC-32. We don't get it from backends and can't
349
 * fill it in, just pad descriptor length by 4 bytes unless guest
350
 * told us to strip it off the packet. */
351
static inline int
352
fcs_len(E1000State *s)
353
{
354
    return (s->mac_reg[RCTL] & E1000_RCTL_SECRC) ? 0 : 4;
355
}
356

    
357
static void
358
xmit_seg(E1000State *s)
359
{
360
    uint16_t len, *sp;
361
    unsigned int frames = s->tx.tso_frames, css, sofar, n;
362
    struct e1000_tx *tp = &s->tx;
363

    
364
    if (tp->tse && tp->cptse) {
365
        css = tp->ipcss;
366
        DBGOUT(TXSUM, "frames %d size %d ipcss %d\n",
367
               frames, tp->size, css);
368
        if (tp->ip) {                // IPv4
369
            cpu_to_be16wu((uint16_t *)(tp->data+css+2),
370
                          tp->size - css);
371
            cpu_to_be16wu((uint16_t *)(tp->data+css+4),
372
                          be16_to_cpup((uint16_t *)(tp->data+css+4))+frames);
373
        } else                        // IPv6
374
            cpu_to_be16wu((uint16_t *)(tp->data+css+4),
375
                          tp->size - css);
376
        css = tp->tucss;
377
        len = tp->size - css;
378
        DBGOUT(TXSUM, "tcp %d tucss %d len %d\n", tp->tcp, css, len);
379
        if (tp->tcp) {
380
            sofar = frames * tp->mss;
381
            cpu_to_be32wu((uint32_t *)(tp->data+css+4),        // seq
382
                be32_to_cpupu((uint32_t *)(tp->data+css+4))+sofar);
383
            if (tp->paylen - sofar > tp->mss)
384
                tp->data[css + 13] &= ~9;                // PSH, FIN
385
        } else        // UDP
386
            cpu_to_be16wu((uint16_t *)(tp->data+css+4), len);
387
        if (tp->sum_needed & E1000_TXD_POPTS_TXSM) {
388
            unsigned int phsum;
389
            // add pseudo-header length before checksum calculation
390
            sp = (uint16_t *)(tp->data + tp->tucso);
391
            phsum = be16_to_cpup(sp) + len;
392
            phsum = (phsum >> 16) + (phsum & 0xffff);
393
            cpu_to_be16wu(sp, phsum);
394
        }
395
        tp->tso_frames++;
396
    }
397

    
398
    if (tp->sum_needed & E1000_TXD_POPTS_TXSM)
399
        putsum(tp->data, tp->size, tp->tucso, tp->tucss, tp->tucse);
400
    if (tp->sum_needed & E1000_TXD_POPTS_IXSM)
401
        putsum(tp->data, tp->size, tp->ipcso, tp->ipcss, tp->ipcse);
402
    if (tp->vlan_needed) {
403
        memmove(tp->vlan, tp->data, 4);
404
        memmove(tp->data, tp->data + 4, 8);
405
        memcpy(tp->data + 8, tp->vlan_header, 4);
406
        qemu_send_packet(&s->nic->nc, tp->vlan, tp->size + 4);
407
    } else
408
        qemu_send_packet(&s->nic->nc, tp->data, tp->size);
409
    s->mac_reg[TPT]++;
410
    s->mac_reg[GPTC]++;
411
    n = s->mac_reg[TOTL];
412
    if ((s->mac_reg[TOTL] += s->tx.size) < n)
413
        s->mac_reg[TOTH]++;
414
}
415

    
416
static void
417
process_tx_desc(E1000State *s, struct e1000_tx_desc *dp)
418
{
419
    uint32_t txd_lower = le32_to_cpu(dp->lower.data);
420
    uint32_t dtype = txd_lower & (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D);
421
    unsigned int split_size = txd_lower & 0xffff, bytes, sz, op;
422
    unsigned int msh = 0xfffff, hdr = 0;
423
    uint64_t addr;
424
    struct e1000_context_desc *xp = (struct e1000_context_desc *)dp;
425
    struct e1000_tx *tp = &s->tx;
426

    
427
    if (dtype == E1000_TXD_CMD_DEXT) {        // context descriptor
428
        op = le32_to_cpu(xp->cmd_and_length);
429
        tp->ipcss = xp->lower_setup.ip_fields.ipcss;
430
        tp->ipcso = xp->lower_setup.ip_fields.ipcso;
431
        tp->ipcse = le16_to_cpu(xp->lower_setup.ip_fields.ipcse);
432
        tp->tucss = xp->upper_setup.tcp_fields.tucss;
433
        tp->tucso = xp->upper_setup.tcp_fields.tucso;
434
        tp->tucse = le16_to_cpu(xp->upper_setup.tcp_fields.tucse);
435
        tp->paylen = op & 0xfffff;
436
        tp->hdr_len = xp->tcp_seg_setup.fields.hdr_len;
437
        tp->mss = le16_to_cpu(xp->tcp_seg_setup.fields.mss);
438
        tp->ip = (op & E1000_TXD_CMD_IP) ? 1 : 0;
439
        tp->tcp = (op & E1000_TXD_CMD_TCP) ? 1 : 0;
440
        tp->tse = (op & E1000_TXD_CMD_TSE) ? 1 : 0;
441
        tp->tso_frames = 0;
442
        if (tp->tucso == 0) {        // this is probably wrong
443
            DBGOUT(TXSUM, "TCP/UDP: cso 0!\n");
444
            tp->tucso = tp->tucss + (tp->tcp ? 16 : 6);
445
        }
446
        return;
447
    } else if (dtype == (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D)) {
448
        // data descriptor
449
        tp->sum_needed = le32_to_cpu(dp->upper.data) >> 8;
450
        tp->cptse = ( txd_lower & E1000_TXD_CMD_TSE ) ? 1 : 0;
451
    } else {
452
        // legacy descriptor
453
        tp->cptse = 0;
454
    }
455

    
456
    if (vlan_enabled(s) && is_vlan_txd(txd_lower) &&
457
        (tp->cptse || txd_lower & E1000_TXD_CMD_EOP)) {
458
        tp->vlan_needed = 1;
459
        cpu_to_be16wu((uint16_t *)(tp->vlan_header),
460
                      le16_to_cpup((uint16_t *)(s->mac_reg + VET)));
461
        cpu_to_be16wu((uint16_t *)(tp->vlan_header + 2),
462
                      le16_to_cpu(dp->upper.fields.special));
463
    }
464
        
465
    addr = le64_to_cpu(dp->buffer_addr);
466
    if (tp->tse && tp->cptse) {
467
        hdr = tp->hdr_len;
468
        msh = hdr + tp->mss;
469
        do {
470
            bytes = split_size;
471
            if (tp->size + bytes > msh)
472
                bytes = msh - tp->size;
473
            cpu_physical_memory_read(addr, tp->data + tp->size, bytes);
474
            if ((sz = tp->size + bytes) >= hdr && tp->size < hdr)
475
                memmove(tp->header, tp->data, hdr);
476
            tp->size = sz;
477
            addr += bytes;
478
            if (sz == msh) {
479
                xmit_seg(s);
480
                memmove(tp->data, tp->header, hdr);
481
                tp->size = hdr;
482
            }
483
        } while (split_size -= bytes);
484
    } else if (!tp->tse && tp->cptse) {
485
        // context descriptor TSE is not set, while data descriptor TSE is set
486
        DBGOUT(TXERR, "TCP segmentaion Error\n");
487
    } else {
488
        cpu_physical_memory_read(addr, tp->data + tp->size, split_size);
489
        tp->size += split_size;
490
    }
491

    
492
    if (!(txd_lower & E1000_TXD_CMD_EOP))
493
        return;
494
    if (!(tp->tse && tp->cptse && tp->size < hdr))
495
        xmit_seg(s);
496
    tp->tso_frames = 0;
497
    tp->sum_needed = 0;
498
    tp->vlan_needed = 0;
499
    tp->size = 0;
500
    tp->cptse = 0;
501
}
502

    
503
static uint32_t
504
txdesc_writeback(target_phys_addr_t base, struct e1000_tx_desc *dp)
505
{
506
    uint32_t txd_upper, txd_lower = le32_to_cpu(dp->lower.data);
507

    
508
    if (!(txd_lower & (E1000_TXD_CMD_RS|E1000_TXD_CMD_RPS)))
509
        return 0;
510
    txd_upper = (le32_to_cpu(dp->upper.data) | E1000_TXD_STAT_DD) &
511
                ~(E1000_TXD_STAT_EC | E1000_TXD_STAT_LC | E1000_TXD_STAT_TU);
512
    dp->upper.data = cpu_to_le32(txd_upper);
513
    cpu_physical_memory_write(base + ((char *)&dp->upper - (char *)dp),
514
                              (void *)&dp->upper, sizeof(dp->upper));
515
    return E1000_ICR_TXDW;
516
}
517

    
518
static void
519
start_xmit(E1000State *s)
520
{
521
    target_phys_addr_t base;
522
    struct e1000_tx_desc desc;
523
    uint32_t tdh_start = s->mac_reg[TDH], cause = E1000_ICS_TXQE;
524

    
525
    if (!(s->mac_reg[TCTL] & E1000_TCTL_EN)) {
526
        DBGOUT(TX, "tx disabled\n");
527
        return;
528
    }
529

    
530
    while (s->mac_reg[TDH] != s->mac_reg[TDT]) {
531
        base = ((uint64_t)s->mac_reg[TDBAH] << 32) + s->mac_reg[TDBAL] +
532
               sizeof(struct e1000_tx_desc) * s->mac_reg[TDH];
533
        cpu_physical_memory_read(base, (void *)&desc, sizeof(desc));
534

    
535
        DBGOUT(TX, "index %d: %p : %x %x\n", s->mac_reg[TDH],
536
               (void *)(intptr_t)desc.buffer_addr, desc.lower.data,
537
               desc.upper.data);
538

    
539
        process_tx_desc(s, &desc);
540
        cause |= txdesc_writeback(base, &desc);
541

    
542
        if (++s->mac_reg[TDH] * sizeof(desc) >= s->mac_reg[TDLEN])
543
            s->mac_reg[TDH] = 0;
544
        /*
545
         * the following could happen only if guest sw assigns
546
         * bogus values to TDT/TDLEN.
547
         * there's nothing too intelligent we could do about this.
548
         */
549
        if (s->mac_reg[TDH] == tdh_start) {
550
            DBGOUT(TXERR, "TDH wraparound @%x, TDT %x, TDLEN %x\n",
551
                   tdh_start, s->mac_reg[TDT], s->mac_reg[TDLEN]);
552
            break;
553
        }
554
    }
555
    set_ics(s, 0, cause);
556
}
557

    
558
static int
559
receive_filter(E1000State *s, const uint8_t *buf, int size)
560
{
561
    static const uint8_t bcast[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
562
    static const int mta_shift[] = {4, 3, 2, 0};
563
    uint32_t f, rctl = s->mac_reg[RCTL], ra[2], *rp;
564

    
565
    if (is_vlan_packet(s, buf) && vlan_rx_filter_enabled(s)) {
566
        uint16_t vid = be16_to_cpup((uint16_t *)(buf + 14));
567
        uint32_t vfta = le32_to_cpup((uint32_t *)(s->mac_reg + VFTA) +
568
                                     ((vid >> 5) & 0x7f));
569
        if ((vfta & (1 << (vid & 0x1f))) == 0)
570
            return 0;
571
    }
572

    
573
    if (rctl & E1000_RCTL_UPE)                        // promiscuous
574
        return 1;
575

    
576
    if ((buf[0] & 1) && (rctl & E1000_RCTL_MPE))        // promiscuous mcast
577
        return 1;
578

    
579
    if ((rctl & E1000_RCTL_BAM) && !memcmp(buf, bcast, sizeof bcast))
580
        return 1;
581

    
582
    for (rp = s->mac_reg + RA; rp < s->mac_reg + RA + 32; rp += 2) {
583
        if (!(rp[1] & E1000_RAH_AV))
584
            continue;
585
        ra[0] = cpu_to_le32(rp[0]);
586
        ra[1] = cpu_to_le32(rp[1]);
587
        if (!memcmp(buf, (uint8_t *)ra, 6)) {
588
            DBGOUT(RXFILTER,
589
                   "unicast match[%d]: %02x:%02x:%02x:%02x:%02x:%02x\n",
590
                   (int)(rp - s->mac_reg - RA)/2,
591
                   buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
592
            return 1;
593
        }
594
    }
595
    DBGOUT(RXFILTER, "unicast mismatch: %02x:%02x:%02x:%02x:%02x:%02x\n",
596
           buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
597

    
598
    f = mta_shift[(rctl >> E1000_RCTL_MO_SHIFT) & 3];
599
    f = (((buf[5] << 8) | buf[4]) >> f) & 0xfff;
600
    if (s->mac_reg[MTA + (f >> 5)] & (1 << (f & 0x1f)))
601
        return 1;
602
    DBGOUT(RXFILTER,
603
           "dropping, inexact filter mismatch: %02x:%02x:%02x:%02x:%02x:%02x MO %d MTA[%d] %x\n",
604
           buf[0], buf[1], buf[2], buf[3], buf[4], buf[5],
605
           (rctl >> E1000_RCTL_MO_SHIFT) & 3, f >> 5,
606
           s->mac_reg[MTA + (f >> 5)]);
607

    
608
    return 0;
609
}
610

    
611
static void
612
e1000_set_link_status(VLANClientState *nc)
613
{
614
    E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
615
    uint32_t old_status = s->mac_reg[STATUS];
616

    
617
    if (nc->link_down)
618
        s->mac_reg[STATUS] &= ~E1000_STATUS_LU;
619
    else
620
        s->mac_reg[STATUS] |= E1000_STATUS_LU;
621

    
622
    if (s->mac_reg[STATUS] != old_status)
623
        set_ics(s, 0, E1000_ICR_LSC);
624
}
625

    
626
static int
627
e1000_can_receive(VLANClientState *nc)
628
{
629
    E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
630

    
631
    return (s->mac_reg[RCTL] & E1000_RCTL_EN);
632
}
633

    
634
static ssize_t
635
e1000_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
636
{
637
    E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
638
    struct e1000_rx_desc desc;
639
    target_phys_addr_t base;
640
    unsigned int n, rdt;
641
    uint32_t rdh_start;
642
    uint16_t vlan_special = 0;
643
    uint8_t vlan_status = 0, vlan_offset = 0;
644
    uint8_t min_buf[MIN_BUF_SIZE];
645
    size_t desc_offset;
646
    size_t desc_size;
647
    size_t total_size;
648

    
649
    if (!(s->mac_reg[RCTL] & E1000_RCTL_EN))
650
        return -1;
651

    
652
    /* Pad to minimum Ethernet frame length */
653
    if (size < sizeof(min_buf)) {
654
        memcpy(min_buf, buf, size);
655
        memset(&min_buf[size], 0, sizeof(min_buf) - size);
656
        buf = min_buf;
657
        size = sizeof(min_buf);
658
    }
659

    
660
    if (!receive_filter(s, buf, size))
661
        return size;
662

    
663
    if (vlan_enabled(s) && is_vlan_packet(s, buf)) {
664
        vlan_special = cpu_to_le16(be16_to_cpup((uint16_t *)(buf + 14)));
665
        memmove((uint8_t *)buf + 4, buf, 12);
666
        vlan_status = E1000_RXD_STAT_VP;
667
        vlan_offset = 4;
668
        size -= 4;
669
    }
670

    
671
    rdh_start = s->mac_reg[RDH];
672
    desc_offset = 0;
673
    total_size = size + fcs_len(s);
674
    do {
675
        desc_size = total_size - desc_offset;
676
        if (desc_size > s->rxbuf_size) {
677
            desc_size = s->rxbuf_size;
678
        }
679
        if (s->mac_reg[RDH] == s->mac_reg[RDT] && s->check_rxov) {
680
            /* Discard all data written so far */
681
            s->mac_reg[RDH] = rdh_start;
682
            set_ics(s, 0, E1000_ICS_RXO);
683
            return -1;
684
        }
685
        base = ((uint64_t)s->mac_reg[RDBAH] << 32) + s->mac_reg[RDBAL] +
686
               sizeof(desc) * s->mac_reg[RDH];
687
        cpu_physical_memory_read(base, (void *)&desc, sizeof(desc));
688
        desc.special = vlan_special;
689
        desc.status |= (vlan_status | E1000_RXD_STAT_DD);
690
        if (desc.buffer_addr) {
691
            if (desc_offset < size) {
692
                size_t copy_size = size - desc_offset;
693
                if (copy_size > s->rxbuf_size) {
694
                    copy_size = s->rxbuf_size;
695
                }
696
                cpu_physical_memory_write(le64_to_cpu(desc.buffer_addr),
697
                                          (void *)(buf + desc_offset + vlan_offset),
698
                                          copy_size);
699
            }
700
            desc_offset += desc_size;
701
            desc.length = cpu_to_le16(desc_size);
702
            if (desc_offset >= total_size) {
703
                desc.status |= E1000_RXD_STAT_EOP | E1000_RXD_STAT_IXSM;
704
            } else {
705
                /* Guest zeroing out status is not a hardware requirement.
706
                   Clear EOP in case guest didn't do it. */
707
                desc.status &= ~E1000_RXD_STAT_EOP;
708
            }
709
        } else { // as per intel docs; skip descriptors with null buf addr
710
            DBGOUT(RX, "Null RX descriptor!!\n");
711
        }
712
        cpu_physical_memory_write(base, (void *)&desc, sizeof(desc));
713

    
714
        if (++s->mac_reg[RDH] * sizeof(desc) >= s->mac_reg[RDLEN])
715
            s->mac_reg[RDH] = 0;
716
        s->check_rxov = 1;
717
        /* see comment in start_xmit; same here */
718
        if (s->mac_reg[RDH] == rdh_start) {
719
            DBGOUT(RXERR, "RDH wraparound @%x, RDT %x, RDLEN %x\n",
720
                   rdh_start, s->mac_reg[RDT], s->mac_reg[RDLEN]);
721
            set_ics(s, 0, E1000_ICS_RXO);
722
            return -1;
723
        }
724
    } while (desc_offset < total_size);
725

    
726
    s->mac_reg[GPRC]++;
727
    s->mac_reg[TPR]++;
728
    /* TOR - Total Octets Received:
729
     * This register includes bytes received in a packet from the <Destination
730
     * Address> field through the <CRC> field, inclusively.
731
     */
732
    n = s->mac_reg[TORL] + size + /* Always include FCS length. */ 4;
733
    if (n < s->mac_reg[TORL])
734
        s->mac_reg[TORH]++;
735
    s->mac_reg[TORL] = n;
736

    
737
    n = E1000_ICS_RXT0;
738
    if ((rdt = s->mac_reg[RDT]) < s->mac_reg[RDH])
739
        rdt += s->mac_reg[RDLEN] / sizeof(desc);
740
    if (((rdt - s->mac_reg[RDH]) * sizeof(desc)) <= s->mac_reg[RDLEN] >>
741
        s->rxbuf_min_shift)
742
        n |= E1000_ICS_RXDMT0;
743

    
744
    set_ics(s, 0, n);
745

    
746
    return size;
747
}
748

    
749
static uint32_t
750
mac_readreg(E1000State *s, int index)
751
{
752
    return s->mac_reg[index];
753
}
754

    
755
static uint32_t
756
mac_icr_read(E1000State *s, int index)
757
{
758
    uint32_t ret = s->mac_reg[ICR];
759

    
760
    DBGOUT(INTERRUPT, "ICR read: %x\n", ret);
761
    set_interrupt_cause(s, 0, 0);
762
    return ret;
763
}
764

    
765
static uint32_t
766
mac_read_clr4(E1000State *s, int index)
767
{
768
    uint32_t ret = s->mac_reg[index];
769

    
770
    s->mac_reg[index] = 0;
771
    return ret;
772
}
773

    
774
static uint32_t
775
mac_read_clr8(E1000State *s, int index)
776
{
777
    uint32_t ret = s->mac_reg[index];
778

    
779
    s->mac_reg[index] = 0;
780
    s->mac_reg[index-1] = 0;
781
    return ret;
782
}
783

    
784
static void
785
mac_writereg(E1000State *s, int index, uint32_t val)
786
{
787
    s->mac_reg[index] = val;
788
}
789

    
790
static void
791
set_rdt(E1000State *s, int index, uint32_t val)
792
{
793
    s->check_rxov = 0;
794
    s->mac_reg[index] = val & 0xffff;
795
}
796

    
797
static void
798
set_16bit(E1000State *s, int index, uint32_t val)
799
{
800
    s->mac_reg[index] = val & 0xffff;
801
}
802

    
803
static void
804
set_dlen(E1000State *s, int index, uint32_t val)
805
{
806
    s->mac_reg[index] = val & 0xfff80;
807
}
808

    
809
static void
810
set_tctl(E1000State *s, int index, uint32_t val)
811
{
812
    s->mac_reg[index] = val;
813
    s->mac_reg[TDT] &= 0xffff;
814
    start_xmit(s);
815
}
816

    
817
static void
818
set_icr(E1000State *s, int index, uint32_t val)
819
{
820
    DBGOUT(INTERRUPT, "set_icr %x\n", val);
821
    set_interrupt_cause(s, 0, s->mac_reg[ICR] & ~val);
822
}
823

    
824
static void
825
set_imc(E1000State *s, int index, uint32_t val)
826
{
827
    s->mac_reg[IMS] &= ~val;
828
    set_ics(s, 0, 0);
829
}
830

    
831
static void
832
set_ims(E1000State *s, int index, uint32_t val)
833
{
834
    s->mac_reg[IMS] |= val;
835
    set_ics(s, 0, 0);
836
}
837

    
838
#define getreg(x)        [x] = mac_readreg
839
static uint32_t (*macreg_readops[])(E1000State *, int) = {
840
    getreg(PBA),        getreg(RCTL),        getreg(TDH),        getreg(TXDCTL),
841
    getreg(WUFC),        getreg(TDT),        getreg(CTRL),        getreg(LEDCTL),
842
    getreg(MANC),        getreg(MDIC),        getreg(SWSM),        getreg(STATUS),
843
    getreg(TORL),        getreg(TOTL),        getreg(IMS),        getreg(TCTL),
844
    getreg(RDH),        getreg(RDT),        getreg(VET),        getreg(ICS),
845
    getreg(TDBAL),        getreg(TDBAH),        getreg(RDBAH),        getreg(RDBAL),
846
    getreg(TDLEN),        getreg(RDLEN),
847

    
848
    [TOTH] = mac_read_clr8,        [TORH] = mac_read_clr8,        [GPRC] = mac_read_clr4,
849
    [GPTC] = mac_read_clr4,        [TPR] = mac_read_clr4,        [TPT] = mac_read_clr4,
850
    [ICR] = mac_icr_read,        [EECD] = get_eecd,        [EERD] = flash_eerd_read,
851
    [CRCERRS ... MPC] = &mac_readreg,
852
    [RA ... RA+31] = &mac_readreg,
853
    [MTA ... MTA+127] = &mac_readreg,
854
    [VFTA ... VFTA+127] = &mac_readreg,
855
};
856
enum { NREADOPS = ARRAY_SIZE(macreg_readops) };
857

    
858
#define putreg(x)        [x] = mac_writereg
859
static void (*macreg_writeops[])(E1000State *, int, uint32_t) = {
860
    putreg(PBA),        putreg(EERD),        putreg(SWSM),        putreg(WUFC),
861
    putreg(TDBAL),        putreg(TDBAH),        putreg(TXDCTL),        putreg(RDBAH),
862
    putreg(RDBAL),        putreg(LEDCTL), putreg(VET),
863
    [TDLEN] = set_dlen,        [RDLEN] = set_dlen,        [TCTL] = set_tctl,
864
    [TDT] = set_tctl,        [MDIC] = set_mdic,        [ICS] = set_ics,
865
    [TDH] = set_16bit,        [RDH] = set_16bit,        [RDT] = set_rdt,
866
    [IMC] = set_imc,        [IMS] = set_ims,        [ICR] = set_icr,
867
    [EECD] = set_eecd,        [RCTL] = set_rx_control, [CTRL] = set_ctrl,
868
    [RA ... RA+31] = &mac_writereg,
869
    [MTA ... MTA+127] = &mac_writereg,
870
    [VFTA ... VFTA+127] = &mac_writereg,
871
};
872
enum { NWRITEOPS = ARRAY_SIZE(macreg_writeops) };
873

    
874
static void
875
e1000_mmio_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
876
{
877
    E1000State *s = opaque;
878
    unsigned int index = (addr & 0x1ffff) >> 2;
879

    
880
    if (index < NWRITEOPS && macreg_writeops[index]) {
881
        macreg_writeops[index](s, index, val);
882
    } else if (index < NREADOPS && macreg_readops[index]) {
883
        DBGOUT(MMIO, "e1000_mmio_writel RO %x: 0x%04x\n", index<<2, val);
884
    } else {
885
        DBGOUT(UNKNOWN, "MMIO unknown write addr=0x%08x,val=0x%08x\n",
886
               index<<2, val);
887
    }
888
}
889

    
890
static void
891
e1000_mmio_writew(void *opaque, target_phys_addr_t addr, uint32_t val)
892
{
893
    // emulate hw without byte enables: no RMW
894
    e1000_mmio_writel(opaque, addr & ~3,
895
                      (val & 0xffff) << (8*(addr & 3)));
896
}
897

    
898
static void
899
e1000_mmio_writeb(void *opaque, target_phys_addr_t addr, uint32_t val)
900
{
901
    // emulate hw without byte enables: no RMW
902
    e1000_mmio_writel(opaque, addr & ~3,
903
                      (val & 0xff) << (8*(addr & 3)));
904
}
905

    
906
static uint32_t
907
e1000_mmio_readl(void *opaque, target_phys_addr_t addr)
908
{
909
    E1000State *s = opaque;
910
    unsigned int index = (addr & 0x1ffff) >> 2;
911

    
912
    if (index < NREADOPS && macreg_readops[index])
913
    {
914
        return macreg_readops[index](s, index);
915
    }
916
    DBGOUT(UNKNOWN, "MMIO unknown read addr=0x%08x\n", index<<2);
917
    return 0;
918
}
919

    
920
static uint32_t
921
e1000_mmio_readb(void *opaque, target_phys_addr_t addr)
922
{
923
    return ((e1000_mmio_readl(opaque, addr & ~3)) >>
924
            (8 * (addr & 3))) & 0xff;
925
}
926

    
927
static uint32_t
928
e1000_mmio_readw(void *opaque, target_phys_addr_t addr)
929
{
930
    return ((e1000_mmio_readl(opaque, addr & ~3)) >>
931
            (8 * (addr & 3))) & 0xffff;
932
}
933

    
934
static bool is_version_1(void *opaque, int version_id)
935
{
936
    return version_id == 1;
937
}
938

    
939
static const VMStateDescription vmstate_e1000 = {
940
    .name = "e1000",
941
    .version_id = 2,
942
    .minimum_version_id = 1,
943
    .minimum_version_id_old = 1,
944
    .fields      = (VMStateField []) {
945
        VMSTATE_PCI_DEVICE(dev, E1000State),
946
        VMSTATE_UNUSED_TEST(is_version_1, 4), /* was instance id */
947
        VMSTATE_UNUSED(4), /* Was mmio_base.  */
948
        VMSTATE_UINT32(rxbuf_size, E1000State),
949
        VMSTATE_UINT32(rxbuf_min_shift, E1000State),
950
        VMSTATE_UINT32(eecd_state.val_in, E1000State),
951
        VMSTATE_UINT16(eecd_state.bitnum_in, E1000State),
952
        VMSTATE_UINT16(eecd_state.bitnum_out, E1000State),
953
        VMSTATE_UINT16(eecd_state.reading, E1000State),
954
        VMSTATE_UINT32(eecd_state.old_eecd, E1000State),
955
        VMSTATE_UINT8(tx.ipcss, E1000State),
956
        VMSTATE_UINT8(tx.ipcso, E1000State),
957
        VMSTATE_UINT16(tx.ipcse, E1000State),
958
        VMSTATE_UINT8(tx.tucss, E1000State),
959
        VMSTATE_UINT8(tx.tucso, E1000State),
960
        VMSTATE_UINT16(tx.tucse, E1000State),
961
        VMSTATE_UINT32(tx.paylen, E1000State),
962
        VMSTATE_UINT8(tx.hdr_len, E1000State),
963
        VMSTATE_UINT16(tx.mss, E1000State),
964
        VMSTATE_UINT16(tx.size, E1000State),
965
        VMSTATE_UINT16(tx.tso_frames, E1000State),
966
        VMSTATE_UINT8(tx.sum_needed, E1000State),
967
        VMSTATE_INT8(tx.ip, E1000State),
968
        VMSTATE_INT8(tx.tcp, E1000State),
969
        VMSTATE_BUFFER(tx.header, E1000State),
970
        VMSTATE_BUFFER(tx.data, E1000State),
971
        VMSTATE_UINT16_ARRAY(eeprom_data, E1000State, 64),
972
        VMSTATE_UINT16_ARRAY(phy_reg, E1000State, 0x20),
973
        VMSTATE_UINT32(mac_reg[CTRL], E1000State),
974
        VMSTATE_UINT32(mac_reg[EECD], E1000State),
975
        VMSTATE_UINT32(mac_reg[EERD], E1000State),
976
        VMSTATE_UINT32(mac_reg[GPRC], E1000State),
977
        VMSTATE_UINT32(mac_reg[GPTC], E1000State),
978
        VMSTATE_UINT32(mac_reg[ICR], E1000State),
979
        VMSTATE_UINT32(mac_reg[ICS], E1000State),
980
        VMSTATE_UINT32(mac_reg[IMC], E1000State),
981
        VMSTATE_UINT32(mac_reg[IMS], E1000State),
982
        VMSTATE_UINT32(mac_reg[LEDCTL], E1000State),
983
        VMSTATE_UINT32(mac_reg[MANC], E1000State),
984
        VMSTATE_UINT32(mac_reg[MDIC], E1000State),
985
        VMSTATE_UINT32(mac_reg[MPC], E1000State),
986
        VMSTATE_UINT32(mac_reg[PBA], E1000State),
987
        VMSTATE_UINT32(mac_reg[RCTL], E1000State),
988
        VMSTATE_UINT32(mac_reg[RDBAH], E1000State),
989
        VMSTATE_UINT32(mac_reg[RDBAL], E1000State),
990
        VMSTATE_UINT32(mac_reg[RDH], E1000State),
991
        VMSTATE_UINT32(mac_reg[RDLEN], E1000State),
992
        VMSTATE_UINT32(mac_reg[RDT], E1000State),
993
        VMSTATE_UINT32(mac_reg[STATUS], E1000State),
994
        VMSTATE_UINT32(mac_reg[SWSM], E1000State),
995
        VMSTATE_UINT32(mac_reg[TCTL], E1000State),
996
        VMSTATE_UINT32(mac_reg[TDBAH], E1000State),
997
        VMSTATE_UINT32(mac_reg[TDBAL], E1000State),
998
        VMSTATE_UINT32(mac_reg[TDH], E1000State),
999
        VMSTATE_UINT32(mac_reg[TDLEN], E1000State),
1000
        VMSTATE_UINT32(mac_reg[TDT], E1000State),
1001
        VMSTATE_UINT32(mac_reg[TORH], E1000State),
1002
        VMSTATE_UINT32(mac_reg[TORL], E1000State),
1003
        VMSTATE_UINT32(mac_reg[TOTH], E1000State),
1004
        VMSTATE_UINT32(mac_reg[TOTL], E1000State),
1005
        VMSTATE_UINT32(mac_reg[TPR], E1000State),
1006
        VMSTATE_UINT32(mac_reg[TPT], E1000State),
1007
        VMSTATE_UINT32(mac_reg[TXDCTL], E1000State),
1008
        VMSTATE_UINT32(mac_reg[WUFC], E1000State),
1009
        VMSTATE_UINT32(mac_reg[VET], E1000State),
1010
        VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, RA, 32),
1011
        VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, MTA, 128),
1012
        VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, VFTA, 128),
1013
        VMSTATE_END_OF_LIST()
1014
    }
1015
};
1016

    
1017
static const uint16_t e1000_eeprom_template[64] = {
1018
    0x0000, 0x0000, 0x0000, 0x0000,      0xffff, 0x0000,      0x0000, 0x0000,
1019
    0x3000, 0x1000, 0x6403, E1000_DEVID, 0x8086, E1000_DEVID, 0x8086, 0x3040,
1020
    0x0008, 0x2000, 0x7e14, 0x0048,      0x1000, 0x00d8,      0x0000, 0x2700,
1021
    0x6cc9, 0x3150, 0x0722, 0x040b,      0x0984, 0x0000,      0xc000, 0x0706,
1022
    0x1008, 0x0000, 0x0f04, 0x7fff,      0x4d01, 0xffff,      0xffff, 0xffff,
1023
    0xffff, 0xffff, 0xffff, 0xffff,      0xffff, 0xffff,      0xffff, 0xffff,
1024
    0x0100, 0x4000, 0x121c, 0xffff,      0xffff, 0xffff,      0xffff, 0xffff,
1025
    0xffff, 0xffff, 0xffff, 0xffff,      0xffff, 0xffff,      0xffff, 0x0000,
1026
};
1027

    
1028
static const uint16_t phy_reg_init[] = {
1029
    [PHY_CTRL] = 0x1140,                        [PHY_STATUS] = 0x796d, // link initially up
1030
    [PHY_ID1] = 0x141,                                [PHY_ID2] = PHY_ID2_INIT,
1031
    [PHY_1000T_CTRL] = 0x0e00,                        [M88E1000_PHY_SPEC_CTRL] = 0x360,
1032
    [M88E1000_EXT_PHY_SPEC_CTRL] = 0x0d60,        [PHY_AUTONEG_ADV] = 0xde1,
1033
    [PHY_LP_ABILITY] = 0x1e0,                        [PHY_1000T_STATUS] = 0x3c00,
1034
    [M88E1000_PHY_SPEC_STATUS] = 0xac00,
1035
};
1036

    
1037
static const uint32_t mac_reg_init[] = {
1038
    [PBA] =     0x00100030,
1039
    [LEDCTL] =  0x602,
1040
    [CTRL] =    E1000_CTRL_SWDPIN2 | E1000_CTRL_SWDPIN0 |
1041
                E1000_CTRL_SPD_1000 | E1000_CTRL_SLU,
1042
    [STATUS] =  0x80000000 | E1000_STATUS_GIO_MASTER_ENABLE |
1043
                E1000_STATUS_ASDV | E1000_STATUS_MTXCKOK |
1044
                E1000_STATUS_SPEED_1000 | E1000_STATUS_FD |
1045
                E1000_STATUS_LU,
1046
    [MANC] =    E1000_MANC_EN_MNG2HOST | E1000_MANC_RCV_TCO_EN |
1047
                E1000_MANC_ARP_EN | E1000_MANC_0298_EN |
1048
                E1000_MANC_RMCP_EN,
1049
};
1050

    
1051
/* PCI interface */
1052

    
1053
static CPUWriteMemoryFunc * const e1000_mmio_write[] = {
1054
    e1000_mmio_writeb,        e1000_mmio_writew,        e1000_mmio_writel
1055
};
1056

    
1057
static CPUReadMemoryFunc * const e1000_mmio_read[] = {
1058
    e1000_mmio_readb,        e1000_mmio_readw,        e1000_mmio_readl
1059
};
1060

    
1061
static void
1062
e1000_mmio_map(PCIDevice *pci_dev, int region_num,
1063
                pcibus_t addr, pcibus_t size, int type)
1064
{
1065
    E1000State *d = DO_UPCAST(E1000State, dev, pci_dev);
1066
    int i;
1067
    const uint32_t excluded_regs[] = {
1068
        E1000_MDIC, E1000_ICR, E1000_ICS, E1000_IMS,
1069
        E1000_IMC, E1000_TCTL, E1000_TDT, PNPMMIO_SIZE
1070
    };
1071

    
1072

    
1073
    DBGOUT(MMIO, "e1000_mmio_map addr=0x%08"FMT_PCIBUS" 0x%08"FMT_PCIBUS"\n",
1074
           addr, size);
1075

    
1076
    cpu_register_physical_memory(addr, PNPMMIO_SIZE, d->mmio_index);
1077
    qemu_register_coalesced_mmio(addr, excluded_regs[0]);
1078

    
1079
    for (i = 0; excluded_regs[i] != PNPMMIO_SIZE; i++)
1080
        qemu_register_coalesced_mmio(addr + excluded_regs[i] + 4,
1081
                                     excluded_regs[i + 1] -
1082
                                     excluded_regs[i] - 4);
1083
}
1084

    
1085
static void
1086
e1000_cleanup(VLANClientState *nc)
1087
{
1088
    E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
1089

    
1090
    s->nic = NULL;
1091
}
1092

    
1093
static int
1094
pci_e1000_uninit(PCIDevice *dev)
1095
{
1096
    E1000State *d = DO_UPCAST(E1000State, dev, dev);
1097

    
1098
    cpu_unregister_io_memory(d->mmio_index);
1099
    qemu_del_vlan_client(&d->nic->nc);
1100
    return 0;
1101
}
1102

    
1103
static void e1000_reset(void *opaque)
1104
{
1105
    E1000State *d = opaque;
1106

    
1107
    memset(d->phy_reg, 0, sizeof d->phy_reg);
1108
    memmove(d->phy_reg, phy_reg_init, sizeof phy_reg_init);
1109
    memset(d->mac_reg, 0, sizeof d->mac_reg);
1110
    memmove(d->mac_reg, mac_reg_init, sizeof mac_reg_init);
1111
    d->rxbuf_min_shift = 1;
1112
    memset(&d->tx, 0, sizeof d->tx);
1113
}
1114

    
1115
static NetClientInfo net_e1000_info = {
1116
    .type = NET_CLIENT_TYPE_NIC,
1117
    .size = sizeof(NICState),
1118
    .can_receive = e1000_can_receive,
1119
    .receive = e1000_receive,
1120
    .cleanup = e1000_cleanup,
1121
    .link_status_changed = e1000_set_link_status,
1122
};
1123

    
1124
static int pci_e1000_init(PCIDevice *pci_dev)
1125
{
1126
    E1000State *d = DO_UPCAST(E1000State, dev, pci_dev);
1127
    uint8_t *pci_conf;
1128
    uint16_t checksum = 0;
1129
    int i;
1130
    uint8_t *macaddr;
1131

    
1132
    pci_conf = d->dev.config;
1133

    
1134
    pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL);
1135
    pci_config_set_device_id(pci_conf, E1000_DEVID);
1136
    /* TODO: we have no capabilities, so why is this bit set? */
1137
    pci_set_word(pci_conf + PCI_STATUS, PCI_STATUS_CAP_LIST);
1138
    pci_conf[PCI_REVISION_ID] = 0x03;
1139
    pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET);
1140
    /* TODO: RST# value should be 0, PCI spec 6.2.4 */
1141
    pci_conf[PCI_CACHE_LINE_SIZE] = 0x10;
1142

    
1143
    /* TODO: RST# value should be 0 if programmable, PCI spec 6.2.4 */
1144
    pci_conf[PCI_INTERRUPT_PIN] = 1; // interrupt pin 0
1145

    
1146
    d->mmio_index = cpu_register_io_memory(e1000_mmio_read,
1147
            e1000_mmio_write, d, DEVICE_LITTLE_ENDIAN);
1148

    
1149
    pci_register_bar(&d->dev, 0, PNPMMIO_SIZE,
1150
                           PCI_BASE_ADDRESS_SPACE_MEMORY, e1000_mmio_map);
1151

    
1152
    pci_register_bar(&d->dev, 1, IOPORT_SIZE,
1153
                           PCI_BASE_ADDRESS_SPACE_IO, ioport_map);
1154

    
1155
    memmove(d->eeprom_data, e1000_eeprom_template,
1156
        sizeof e1000_eeprom_template);
1157
    qemu_macaddr_default_if_unset(&d->conf.macaddr);
1158
    macaddr = d->conf.macaddr.a;
1159
    for (i = 0; i < 3; i++)
1160
        d->eeprom_data[i] = (macaddr[2*i+1]<<8) | macaddr[2*i];
1161
    for (i = 0; i < EEPROM_CHECKSUM_REG; i++)
1162
        checksum += d->eeprom_data[i];
1163
    checksum = (uint16_t) EEPROM_SUM - checksum;
1164
    d->eeprom_data[EEPROM_CHECKSUM_REG] = checksum;
1165

    
1166
    d->nic = qemu_new_nic(&net_e1000_info, &d->conf,
1167
                          d->dev.qdev.info->name, d->dev.qdev.id, d);
1168

    
1169
    qemu_format_nic_info_str(&d->nic->nc, macaddr);
1170

    
1171
    add_boot_device_path(d->conf.bootindex, &pci_dev->qdev, "/ethernet-phy@0");
1172

    
1173
    return 0;
1174
}
1175

    
1176
static void qdev_e1000_reset(DeviceState *dev)
1177
{
1178
    E1000State *d = DO_UPCAST(E1000State, dev.qdev, dev);
1179
    e1000_reset(d);
1180
}
1181

    
1182
static PCIDeviceInfo e1000_info = {
1183
    .qdev.name  = "e1000",
1184
    .qdev.desc  = "Intel Gigabit Ethernet",
1185
    .qdev.size  = sizeof(E1000State),
1186
    .qdev.reset = qdev_e1000_reset,
1187
    .qdev.vmsd  = &vmstate_e1000,
1188
    .init       = pci_e1000_init,
1189
    .exit       = pci_e1000_uninit,
1190
    .romfile    = "pxe-e1000.bin",
1191
    .qdev.props = (Property[]) {
1192
        DEFINE_NIC_PROPERTIES(E1000State, conf),
1193
        DEFINE_PROP_END_OF_LIST(),
1194
    }
1195
};
1196

    
1197
static void e1000_register_devices(void)
1198
{
1199
    pci_qdev_register(&e1000_info);
1200
}
1201

    
1202
device_init(e1000_register_devices)