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