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/hw.h" 29 #include "hw/pci/pci.h" 30 #include "net/net.h" 31 #include "net/checksum.h" 32 #include "hw/loader.h" 33 #include "sysemu/sysemu.h" 34 #include "sysemu/dma.h" 35 #include "qemu/iov.h" 36 #include "qemu/range.h" 37 38 #include "e1000_regs.h" 39 40 #define E1000_DEBUG 41 42 #ifdef E1000_DEBUG 43 enum { 44 DEBUG_GENERAL, DEBUG_IO, DEBUG_MMIO, DEBUG_INTERRUPT, 45 DEBUG_RX, DEBUG_TX, DEBUG_MDIC, DEBUG_EEPROM, 46 DEBUG_UNKNOWN, DEBUG_TXSUM, DEBUG_TXERR, DEBUG_RXERR, 47 DEBUG_RXFILTER, DEBUG_PHY, DEBUG_NOTYET, 48 }; 49 #define DBGBIT(x) (1<<DEBUG_##x) 50 static int debugflags = DBGBIT(TXERR) | DBGBIT(GENERAL); 51 52 #define DBGOUT(what, fmt, ...) do { \ 53 if (debugflags & DBGBIT(what)) \ 54 fprintf(stderr, "e1000: " fmt, ## __VA_ARGS__); \ 55 } while (0) 56 #else 57 #define DBGOUT(what, fmt, ...) do {} while (0) 58 #endif 59 60 #define IOPORT_SIZE 0x40 61 #define PNPMMIO_SIZE 0x20000 62 #define MIN_BUF_SIZE 60 /* Min. octets in an ethernet frame sans FCS */ 63 64 /* this is the size past which hardware will drop packets when setting LPE=0 */ 65 #define MAXIMUM_ETHERNET_VLAN_SIZE 1522 66 /* this is the size past which hardware will drop packets when setting LPE=1 */ 67 #define MAXIMUM_ETHERNET_LPE_SIZE 16384 68 69 #define MAXIMUM_ETHERNET_HDR_LEN (14+4) 70 71 /* 72 * HW models: 73 * E1000_DEV_ID_82540EM works with Windows, Linux, and OS X <= 10.8 74 * E1000_DEV_ID_82544GC_COPPER appears to work; not well tested 75 * E1000_DEV_ID_82545EM_COPPER works with Linux and OS X >= 10.6 76 * Others never tested 77 */ 78 79 typedef struct E1000State_st { 80 /*< private >*/ 81 PCIDevice parent_obj; 82 /*< public >*/ 83 84 NICState *nic; 85 NICConf conf; 86 MemoryRegion mmio; 87 MemoryRegion io; 88 89 uint32_t mac_reg[0x8000]; 90 uint16_t phy_reg[0x20]; 91 uint16_t eeprom_data[64]; 92 93 uint32_t rxbuf_size; 94 uint32_t rxbuf_min_shift; 95 struct e1000_tx { 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]; 101 uint16_t size; 102 unsigned char sum_needed; 103 unsigned char vlan_needed; 104 uint8_t ipcss; 105 uint8_t ipcso; 106 uint16_t ipcse; 107 uint8_t tucss; 108 uint8_t tucso; 109 uint16_t tucse; 110 uint8_t hdr_len; 111 uint16_t mss; 112 uint32_t paylen; 113 uint16_t tso_frames; 114 char tse; 115 int8_t ip; 116 int8_t tcp; 117 char cptse; // current packet tse bit 118 } tx; 119 120 struct { 121 uint32_t val_in; // shifted in from guest driver 122 uint16_t bitnum_in; 123 uint16_t bitnum_out; 124 uint16_t reading; 125 uint32_t old_eecd; 126 } eecd_state; 127 128 QEMUTimer *autoneg_timer; 129 130 QEMUTimer *mit_timer; /* Mitigation timer. */ 131 bool mit_timer_on; /* Mitigation timer is running. */ 132 bool mit_irq_level; /* Tracks interrupt pin level. */ 133 uint32_t mit_ide; /* Tracks E1000_TXD_CMD_IDE bit. */ 134 135 /* Compatibility flags for migration to/from qemu 1.3.0 and older */ 136 #define E1000_FLAG_AUTONEG_BIT 0 137 #define E1000_FLAG_MIT_BIT 1 138 #define E1000_FLAG_AUTONEG (1 << E1000_FLAG_AUTONEG_BIT) 139 #define E1000_FLAG_MIT (1 << E1000_FLAG_MIT_BIT) 140 uint32_t compat_flags; 141 } E1000State; 142 143 typedef struct E1000BaseClass { 144 PCIDeviceClass parent_class; 145 uint16_t phy_id2; 146 } E1000BaseClass; 147 148 #define TYPE_E1000_BASE "e1000-base" 149 150 #define E1000(obj) \ 151 OBJECT_CHECK(E1000State, (obj), TYPE_E1000_BASE) 152 153 #define E1000_DEVICE_CLASS(klass) \ 154 OBJECT_CLASS_CHECK(E1000BaseClass, (klass), TYPE_E1000_BASE) 155 #define E1000_DEVICE_GET_CLASS(obj) \ 156 OBJECT_GET_CLASS(E1000BaseClass, (obj), TYPE_E1000_BASE) 157 158 #define defreg(x) x = (E1000_##x>>2) 159 enum { 160 defreg(CTRL), defreg(EECD), defreg(EERD), defreg(GPRC), 161 defreg(GPTC), defreg(ICR), defreg(ICS), defreg(IMC), 162 defreg(IMS), defreg(LEDCTL), defreg(MANC), defreg(MDIC), 163 defreg(MPC), defreg(PBA), defreg(RCTL), defreg(RDBAH), 164 defreg(RDBAL), defreg(RDH), defreg(RDLEN), defreg(RDT), 165 defreg(STATUS), defreg(SWSM), defreg(TCTL), defreg(TDBAH), 166 defreg(TDBAL), defreg(TDH), defreg(TDLEN), defreg(TDT), 167 defreg(TORH), defreg(TORL), defreg(TOTH), defreg(TOTL), 168 defreg(TPR), defreg(TPT), defreg(TXDCTL), defreg(WUFC), 169 defreg(RA), defreg(MTA), defreg(CRCERRS),defreg(VFTA), 170 defreg(VET), defreg(RDTR), defreg(RADV), defreg(TADV), 171 defreg(ITR), 172 }; 173 174 static void 175 e1000_link_down(E1000State *s) 176 { 177 s->mac_reg[STATUS] &= ~E1000_STATUS_LU; 178 s->phy_reg[PHY_STATUS] &= ~MII_SR_LINK_STATUS; 179 s->phy_reg[PHY_STATUS] &= ~MII_SR_AUTONEG_COMPLETE; 180 s->phy_reg[PHY_LP_ABILITY] &= ~MII_LPAR_LPACK; 181 } 182 183 static void 184 e1000_link_up(E1000State *s) 185 { 186 s->mac_reg[STATUS] |= E1000_STATUS_LU; 187 s->phy_reg[PHY_STATUS] |= MII_SR_LINK_STATUS; 188 189 /* E1000_STATUS_LU is tested by e1000_can_receive() */ 190 qemu_flush_queued_packets(qemu_get_queue(s->nic)); 191 } 192 193 static bool 194 have_autoneg(E1000State *s) 195 { 196 return (s->compat_flags & E1000_FLAG_AUTONEG) && 197 (s->phy_reg[PHY_CTRL] & MII_CR_AUTO_NEG_EN); 198 } 199 200 static void 201 set_phy_ctrl(E1000State *s, int index, uint16_t val) 202 { 203 /* bits 0-5 reserved; MII_CR_[RESTART_AUTO_NEG,RESET] are self clearing */ 204 s->phy_reg[PHY_CTRL] = val & ~(0x3f | 205 MII_CR_RESET | 206 MII_CR_RESTART_AUTO_NEG); 207 208 /* 209 * QEMU 1.3 does not support link auto-negotiation emulation, so if we 210 * migrate during auto negotiation, after migration the link will be 211 * down. 212 */ 213 if (have_autoneg(s) && (val & MII_CR_RESTART_AUTO_NEG)) { 214 e1000_link_down(s); 215 DBGOUT(PHY, "Start link auto negotiation\n"); 216 timer_mod(s->autoneg_timer, 217 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 500); 218 } 219 } 220 221 static void (*phyreg_writeops[])(E1000State *, int, uint16_t) = { 222 [PHY_CTRL] = set_phy_ctrl, 223 }; 224 225 enum { NPHYWRITEOPS = ARRAY_SIZE(phyreg_writeops) }; 226 227 enum { PHY_R = 1, PHY_W = 2, PHY_RW = PHY_R | PHY_W }; 228 static const char phy_regcap[0x20] = { 229 [PHY_STATUS] = PHY_R, [M88E1000_EXT_PHY_SPEC_CTRL] = PHY_RW, 230 [PHY_ID1] = PHY_R, [M88E1000_PHY_SPEC_CTRL] = PHY_RW, 231 [PHY_CTRL] = PHY_RW, [PHY_1000T_CTRL] = PHY_RW, 232 [PHY_LP_ABILITY] = PHY_R, [PHY_1000T_STATUS] = PHY_R, 233 [PHY_AUTONEG_ADV] = PHY_RW, [M88E1000_RX_ERR_CNTR] = PHY_R, 234 [PHY_ID2] = PHY_R, [M88E1000_PHY_SPEC_STATUS] = PHY_R, 235 [PHY_AUTONEG_EXP] = PHY_R, 236 }; 237 238 /* PHY_ID2 documented in 8254x_GBe_SDM.pdf, pp. 250 */ 239 static const uint16_t phy_reg_init[] = { 240 [PHY_CTRL] = MII_CR_SPEED_SELECT_MSB | 241 MII_CR_FULL_DUPLEX | 242 MII_CR_AUTO_NEG_EN, 243 244 [PHY_STATUS] = MII_SR_EXTENDED_CAPS | 245 MII_SR_LINK_STATUS | /* link initially up */ 246 MII_SR_AUTONEG_CAPS | 247 /* MII_SR_AUTONEG_COMPLETE: initially NOT completed */ 248 MII_SR_PREAMBLE_SUPPRESS | 249 MII_SR_EXTENDED_STATUS | 250 MII_SR_10T_HD_CAPS | 251 MII_SR_10T_FD_CAPS | 252 MII_SR_100X_HD_CAPS | 253 MII_SR_100X_FD_CAPS, 254 255 [PHY_ID1] = 0x141, 256 /* [PHY_ID2] configured per DevId, from e1000_reset() */ 257 [PHY_AUTONEG_ADV] = 0xde1, 258 [PHY_LP_ABILITY] = 0x1e0, 259 [PHY_1000T_CTRL] = 0x0e00, 260 [PHY_1000T_STATUS] = 0x3c00, 261 [M88E1000_PHY_SPEC_CTRL] = 0x360, 262 [M88E1000_PHY_SPEC_STATUS] = 0xac00, 263 [M88E1000_EXT_PHY_SPEC_CTRL] = 0x0d60, 264 }; 265 266 static const uint32_t mac_reg_init[] = { 267 [PBA] = 0x00100030, 268 [LEDCTL] = 0x602, 269 [CTRL] = E1000_CTRL_SWDPIN2 | E1000_CTRL_SWDPIN0 | 270 E1000_CTRL_SPD_1000 | E1000_CTRL_SLU, 271 [STATUS] = 0x80000000 | E1000_STATUS_GIO_MASTER_ENABLE | 272 E1000_STATUS_ASDV | E1000_STATUS_MTXCKOK | 273 E1000_STATUS_SPEED_1000 | E1000_STATUS_FD | 274 E1000_STATUS_LU, 275 [MANC] = E1000_MANC_EN_MNG2HOST | E1000_MANC_RCV_TCO_EN | 276 E1000_MANC_ARP_EN | E1000_MANC_0298_EN | 277 E1000_MANC_RMCP_EN, 278 }; 279 280 /* Helper function, *curr == 0 means the value is not set */ 281 static inline void 282 mit_update_delay(uint32_t *curr, uint32_t value) 283 { 284 if (value && (*curr == 0 || value < *curr)) { 285 *curr = value; 286 } 287 } 288 289 static void 290 set_interrupt_cause(E1000State *s, int index, uint32_t val) 291 { 292 PCIDevice *d = PCI_DEVICE(s); 293 uint32_t pending_ints; 294 uint32_t mit_delay; 295 296 s->mac_reg[ICR] = val; 297 298 /* 299 * Make sure ICR and ICS registers have the same value. 300 * The spec says that the ICS register is write-only. However in practice, 301 * on real hardware ICS is readable, and for reads it has the same value as 302 * ICR (except that ICS does not have the clear on read behaviour of ICR). 303 * 304 * The VxWorks PRO/1000 driver uses this behaviour. 305 */ 306 s->mac_reg[ICS] = val; 307 308 pending_ints = (s->mac_reg[IMS] & s->mac_reg[ICR]); 309 if (!s->mit_irq_level && pending_ints) { 310 /* 311 * Here we detect a potential raising edge. We postpone raising the 312 * interrupt line if we are inside the mitigation delay window 313 * (s->mit_timer_on == 1). 314 * We provide a partial implementation of interrupt mitigation, 315 * emulating only RADV, TADV and ITR (lower 16 bits, 1024ns units for 316 * RADV and TADV, 256ns units for ITR). RDTR is only used to enable 317 * RADV; relative timers based on TIDV and RDTR are not implemented. 318 */ 319 if (s->mit_timer_on) { 320 return; 321 } 322 if (s->compat_flags & E1000_FLAG_MIT) { 323 /* Compute the next mitigation delay according to pending 324 * interrupts and the current values of RADV (provided 325 * RDTR!=0), TADV and ITR. 326 * Then rearm the timer. 327 */ 328 mit_delay = 0; 329 if (s->mit_ide && 330 (pending_ints & (E1000_ICR_TXQE | E1000_ICR_TXDW))) { 331 mit_update_delay(&mit_delay, s->mac_reg[TADV] * 4); 332 } 333 if (s->mac_reg[RDTR] && (pending_ints & E1000_ICS_RXT0)) { 334 mit_update_delay(&mit_delay, s->mac_reg[RADV] * 4); 335 } 336 mit_update_delay(&mit_delay, s->mac_reg[ITR]); 337 338 if (mit_delay) { 339 s->mit_timer_on = 1; 340 timer_mod(s->mit_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 341 mit_delay * 256); 342 } 343 s->mit_ide = 0; 344 } 345 } 346 347 s->mit_irq_level = (pending_ints != 0); 348 pci_set_irq(d, s->mit_irq_level); 349 } 350 351 static void 352 e1000_mit_timer(void *opaque) 353 { 354 E1000State *s = opaque; 355 356 s->mit_timer_on = 0; 357 /* Call set_interrupt_cause to update the irq level (if necessary). */ 358 set_interrupt_cause(s, 0, s->mac_reg[ICR]); 359 } 360 361 static void 362 set_ics(E1000State *s, int index, uint32_t val) 363 { 364 DBGOUT(INTERRUPT, "set_ics %x, ICR %x, IMR %x\n", val, s->mac_reg[ICR], 365 s->mac_reg[IMS]); 366 set_interrupt_cause(s, 0, val | s->mac_reg[ICR]); 367 } 368 369 static void 370 e1000_autoneg_timer(void *opaque) 371 { 372 E1000State *s = opaque; 373 if (!qemu_get_queue(s->nic)->link_down) { 374 e1000_link_up(s); 375 s->phy_reg[PHY_LP_ABILITY] |= MII_LPAR_LPACK; 376 s->phy_reg[PHY_STATUS] |= MII_SR_AUTONEG_COMPLETE; 377 DBGOUT(PHY, "Auto negotiation is completed\n"); 378 set_ics(s, 0, E1000_ICS_LSC); /* signal link status change to guest */ 379 } 380 } 381 382 static int 383 rxbufsize(uint32_t v) 384 { 385 v &= E1000_RCTL_BSEX | E1000_RCTL_SZ_16384 | E1000_RCTL_SZ_8192 | 386 E1000_RCTL_SZ_4096 | E1000_RCTL_SZ_2048 | E1000_RCTL_SZ_1024 | 387 E1000_RCTL_SZ_512 | E1000_RCTL_SZ_256; 388 switch (v) { 389 case E1000_RCTL_BSEX | E1000_RCTL_SZ_16384: 390 return 16384; 391 case E1000_RCTL_BSEX | E1000_RCTL_SZ_8192: 392 return 8192; 393 case E1000_RCTL_BSEX | E1000_RCTL_SZ_4096: 394 return 4096; 395 case E1000_RCTL_SZ_1024: 396 return 1024; 397 case E1000_RCTL_SZ_512: 398 return 512; 399 case E1000_RCTL_SZ_256: 400 return 256; 401 } 402 return 2048; 403 } 404 405 static void e1000_reset(void *opaque) 406 { 407 E1000State *d = opaque; 408 E1000BaseClass *edc = E1000_DEVICE_GET_CLASS(d); 409 uint8_t *macaddr = d->conf.macaddr.a; 410 int i; 411 412 timer_del(d->autoneg_timer); 413 timer_del(d->mit_timer); 414 d->mit_timer_on = 0; 415 d->mit_irq_level = 0; 416 d->mit_ide = 0; 417 memset(d->phy_reg, 0, sizeof d->phy_reg); 418 memmove(d->phy_reg, phy_reg_init, sizeof phy_reg_init); 419 d->phy_reg[PHY_ID2] = edc->phy_id2; 420 memset(d->mac_reg, 0, sizeof d->mac_reg); 421 memmove(d->mac_reg, mac_reg_init, sizeof mac_reg_init); 422 d->rxbuf_min_shift = 1; 423 memset(&d->tx, 0, sizeof d->tx); 424 425 if (qemu_get_queue(d->nic)->link_down) { 426 e1000_link_down(d); 427 } 428 429 /* Throttle interrupts to prevent guest (e.g Win 2012) from 430 * reinjecting interrupts endlessly. TODO: fix non ITR case. 431 */ 432 d->mac_reg[ITR] = 250; 433 434 /* Some guests expect pre-initialized RAH/RAL (AddrValid flag + MACaddr) */ 435 d->mac_reg[RA] = 0; 436 d->mac_reg[RA + 1] = E1000_RAH_AV; 437 for (i = 0; i < 4; i++) { 438 d->mac_reg[RA] |= macaddr[i] << (8 * i); 439 d->mac_reg[RA + 1] |= (i < 2) ? macaddr[i + 4] << (8 * i) : 0; 440 } 441 qemu_format_nic_info_str(qemu_get_queue(d->nic), macaddr); 442 } 443 444 static void 445 set_ctrl(E1000State *s, int index, uint32_t val) 446 { 447 /* RST is self clearing */ 448 s->mac_reg[CTRL] = val & ~E1000_CTRL_RST; 449 } 450 451 static void 452 set_rx_control(E1000State *s, int index, uint32_t val) 453 { 454 s->mac_reg[RCTL] = val; 455 s->rxbuf_size = rxbufsize(val); 456 s->rxbuf_min_shift = ((val / E1000_RCTL_RDMTS_QUAT) & 3) + 1; 457 DBGOUT(RX, "RCTL: %d, mac_reg[RCTL] = 0x%x\n", s->mac_reg[RDT], 458 s->mac_reg[RCTL]); 459 qemu_flush_queued_packets(qemu_get_queue(s->nic)); 460 } 461 462 static void 463 set_mdic(E1000State *s, int index, uint32_t val) 464 { 465 uint32_t data = val & E1000_MDIC_DATA_MASK; 466 uint32_t addr = ((val & E1000_MDIC_REG_MASK) >> E1000_MDIC_REG_SHIFT); 467 468 if ((val & E1000_MDIC_PHY_MASK) >> E1000_MDIC_PHY_SHIFT != 1) // phy # 469 val = s->mac_reg[MDIC] | E1000_MDIC_ERROR; 470 else if (val & E1000_MDIC_OP_READ) { 471 DBGOUT(MDIC, "MDIC read reg 0x%x\n", addr); 472 if (!(phy_regcap[addr] & PHY_R)) { 473 DBGOUT(MDIC, "MDIC read reg %x unhandled\n", addr); 474 val |= E1000_MDIC_ERROR; 475 } else 476 val = (val ^ data) | s->phy_reg[addr]; 477 } else if (val & E1000_MDIC_OP_WRITE) { 478 DBGOUT(MDIC, "MDIC write reg 0x%x, value 0x%x\n", addr, data); 479 if (!(phy_regcap[addr] & PHY_W)) { 480 DBGOUT(MDIC, "MDIC write reg %x unhandled\n", addr); 481 val |= E1000_MDIC_ERROR; 482 } else { 483 if (addr < NPHYWRITEOPS && phyreg_writeops[addr]) { 484 phyreg_writeops[addr](s, index, data); 485 } else { 486 s->phy_reg[addr] = data; 487 } 488 } 489 } 490 s->mac_reg[MDIC] = val | E1000_MDIC_READY; 491 492 if (val & E1000_MDIC_INT_EN) { 493 set_ics(s, 0, E1000_ICR_MDAC); 494 } 495 } 496 497 static uint32_t 498 get_eecd(E1000State *s, int index) 499 { 500 uint32_t ret = E1000_EECD_PRES|E1000_EECD_GNT | s->eecd_state.old_eecd; 501 502 DBGOUT(EEPROM, "reading eeprom bit %d (reading %d)\n", 503 s->eecd_state.bitnum_out, s->eecd_state.reading); 504 if (!s->eecd_state.reading || 505 ((s->eeprom_data[(s->eecd_state.bitnum_out >> 4) & 0x3f] >> 506 ((s->eecd_state.bitnum_out & 0xf) ^ 0xf))) & 1) 507 ret |= E1000_EECD_DO; 508 return ret; 509 } 510 511 static void 512 set_eecd(E1000State *s, int index, uint32_t val) 513 { 514 uint32_t oldval = s->eecd_state.old_eecd; 515 516 s->eecd_state.old_eecd = val & (E1000_EECD_SK | E1000_EECD_CS | 517 E1000_EECD_DI|E1000_EECD_FWE_MASK|E1000_EECD_REQ); 518 if (!(E1000_EECD_CS & val)) // CS inactive; nothing to do 519 return; 520 if (E1000_EECD_CS & (val ^ oldval)) { // CS rise edge; reset state 521 s->eecd_state.val_in = 0; 522 s->eecd_state.bitnum_in = 0; 523 s->eecd_state.bitnum_out = 0; 524 s->eecd_state.reading = 0; 525 } 526 if (!(E1000_EECD_SK & (val ^ oldval))) // no clock edge 527 return; 528 if (!(E1000_EECD_SK & val)) { // falling edge 529 s->eecd_state.bitnum_out++; 530 return; 531 } 532 s->eecd_state.val_in <<= 1; 533 if (val & E1000_EECD_DI) 534 s->eecd_state.val_in |= 1; 535 if (++s->eecd_state.bitnum_in == 9 && !s->eecd_state.reading) { 536 s->eecd_state.bitnum_out = ((s->eecd_state.val_in & 0x3f)<<4)-1; 537 s->eecd_state.reading = (((s->eecd_state.val_in >> 6) & 7) == 538 EEPROM_READ_OPCODE_MICROWIRE); 539 } 540 DBGOUT(EEPROM, "eeprom bitnum in %d out %d, reading %d\n", 541 s->eecd_state.bitnum_in, s->eecd_state.bitnum_out, 542 s->eecd_state.reading); 543 } 544 545 static uint32_t 546 flash_eerd_read(E1000State *s, int x) 547 { 548 unsigned int index, r = s->mac_reg[EERD] & ~E1000_EEPROM_RW_REG_START; 549 550 if ((s->mac_reg[EERD] & E1000_EEPROM_RW_REG_START) == 0) 551 return (s->mac_reg[EERD]); 552 553 if ((index = r >> E1000_EEPROM_RW_ADDR_SHIFT) > EEPROM_CHECKSUM_REG) 554 return (E1000_EEPROM_RW_REG_DONE | r); 555 556 return ((s->eeprom_data[index] << E1000_EEPROM_RW_REG_DATA) | 557 E1000_EEPROM_RW_REG_DONE | r); 558 } 559 560 static void 561 putsum(uint8_t *data, uint32_t n, uint32_t sloc, uint32_t css, uint32_t cse) 562 { 563 uint32_t sum; 564 565 if (cse && cse < n) 566 n = cse + 1; 567 if (sloc < n-1) { 568 sum = net_checksum_add(n-css, data+css); 569 stw_be_p(data + sloc, net_checksum_finish(sum)); 570 } 571 } 572 573 static inline int 574 vlan_enabled(E1000State *s) 575 { 576 return ((s->mac_reg[CTRL] & E1000_CTRL_VME) != 0); 577 } 578 579 static inline int 580 vlan_rx_filter_enabled(E1000State *s) 581 { 582 return ((s->mac_reg[RCTL] & E1000_RCTL_VFE) != 0); 583 } 584 585 static inline int 586 is_vlan_packet(E1000State *s, const uint8_t *buf) 587 { 588 return (be16_to_cpup((uint16_t *)(buf + 12)) == 589 le16_to_cpu(s->mac_reg[VET])); 590 } 591 592 static inline int 593 is_vlan_txd(uint32_t txd_lower) 594 { 595 return ((txd_lower & E1000_TXD_CMD_VLE) != 0); 596 } 597 598 /* FCS aka Ethernet CRC-32. We don't get it from backends and can't 599 * fill it in, just pad descriptor length by 4 bytes unless guest 600 * told us to strip it off the packet. */ 601 static inline int 602 fcs_len(E1000State *s) 603 { 604 return (s->mac_reg[RCTL] & E1000_RCTL_SECRC) ? 0 : 4; 605 } 606 607 static void 608 e1000_send_packet(E1000State *s, const uint8_t *buf, int size) 609 { 610 NetClientState *nc = qemu_get_queue(s->nic); 611 if (s->phy_reg[PHY_CTRL] & MII_CR_LOOPBACK) { 612 nc->info->receive(nc, buf, size); 613 } else { 614 qemu_send_packet(nc, buf, size); 615 } 616 } 617 618 static void 619 xmit_seg(E1000State *s) 620 { 621 uint16_t len, *sp; 622 unsigned int frames = s->tx.tso_frames, css, sofar, n; 623 struct e1000_tx *tp = &s->tx; 624 625 if (tp->tse && tp->cptse) { 626 css = tp->ipcss; 627 DBGOUT(TXSUM, "frames %d size %d ipcss %d\n", 628 frames, tp->size, css); 629 if (tp->ip) { // IPv4 630 stw_be_p(tp->data+css+2, tp->size - css); 631 stw_be_p(tp->data+css+4, 632 be16_to_cpup((uint16_t *)(tp->data+css+4))+frames); 633 } else // IPv6 634 stw_be_p(tp->data+css+4, tp->size - css); 635 css = tp->tucss; 636 len = tp->size - css; 637 DBGOUT(TXSUM, "tcp %d tucss %d len %d\n", tp->tcp, css, len); 638 if (tp->tcp) { 639 sofar = frames * tp->mss; 640 stl_be_p(tp->data+css+4, ldl_be_p(tp->data+css+4)+sofar); /* seq */ 641 if (tp->paylen - sofar > tp->mss) 642 tp->data[css + 13] &= ~9; // PSH, FIN 643 } else // UDP 644 stw_be_p(tp->data+css+4, len); 645 if (tp->sum_needed & E1000_TXD_POPTS_TXSM) { 646 unsigned int phsum; 647 // add pseudo-header length before checksum calculation 648 sp = (uint16_t *)(tp->data + tp->tucso); 649 phsum = be16_to_cpup(sp) + len; 650 phsum = (phsum >> 16) + (phsum & 0xffff); 651 stw_be_p(sp, phsum); 652 } 653 tp->tso_frames++; 654 } 655 656 if (tp->sum_needed & E1000_TXD_POPTS_TXSM) 657 putsum(tp->data, tp->size, tp->tucso, tp->tucss, tp->tucse); 658 if (tp->sum_needed & E1000_TXD_POPTS_IXSM) 659 putsum(tp->data, tp->size, tp->ipcso, tp->ipcss, tp->ipcse); 660 if (tp->vlan_needed) { 661 memmove(tp->vlan, tp->data, 4); 662 memmove(tp->data, tp->data + 4, 8); 663 memcpy(tp->data + 8, tp->vlan_header, 4); 664 e1000_send_packet(s, tp->vlan, tp->size + 4); 665 } else 666 e1000_send_packet(s, tp->data, tp->size); 667 s->mac_reg[TPT]++; 668 s->mac_reg[GPTC]++; 669 n = s->mac_reg[TOTL]; 670 if ((s->mac_reg[TOTL] += s->tx.size) < n) 671 s->mac_reg[TOTH]++; 672 } 673 674 static void 675 process_tx_desc(E1000State *s, struct e1000_tx_desc *dp) 676 { 677 PCIDevice *d = PCI_DEVICE(s); 678 uint32_t txd_lower = le32_to_cpu(dp->lower.data); 679 uint32_t dtype = txd_lower & (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D); 680 unsigned int split_size = txd_lower & 0xffff, bytes, sz, op; 681 unsigned int msh = 0xfffff; 682 uint64_t addr; 683 struct e1000_context_desc *xp = (struct e1000_context_desc *)dp; 684 struct e1000_tx *tp = &s->tx; 685 686 s->mit_ide |= (txd_lower & E1000_TXD_CMD_IDE); 687 if (dtype == E1000_TXD_CMD_DEXT) { // context descriptor 688 op = le32_to_cpu(xp->cmd_and_length); 689 tp->ipcss = xp->lower_setup.ip_fields.ipcss; 690 tp->ipcso = xp->lower_setup.ip_fields.ipcso; 691 tp->ipcse = le16_to_cpu(xp->lower_setup.ip_fields.ipcse); 692 tp->tucss = xp->upper_setup.tcp_fields.tucss; 693 tp->tucso = xp->upper_setup.tcp_fields.tucso; 694 tp->tucse = le16_to_cpu(xp->upper_setup.tcp_fields.tucse); 695 tp->paylen = op & 0xfffff; 696 tp->hdr_len = xp->tcp_seg_setup.fields.hdr_len; 697 tp->mss = le16_to_cpu(xp->tcp_seg_setup.fields.mss); 698 tp->ip = (op & E1000_TXD_CMD_IP) ? 1 : 0; 699 tp->tcp = (op & E1000_TXD_CMD_TCP) ? 1 : 0; 700 tp->tse = (op & E1000_TXD_CMD_TSE) ? 1 : 0; 701 tp->tso_frames = 0; 702 if (tp->tucso == 0) { // this is probably wrong 703 DBGOUT(TXSUM, "TCP/UDP: cso 0!\n"); 704 tp->tucso = tp->tucss + (tp->tcp ? 16 : 6); 705 } 706 return; 707 } else if (dtype == (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D)) { 708 // data descriptor 709 if (tp->size == 0) { 710 tp->sum_needed = le32_to_cpu(dp->upper.data) >> 8; 711 } 712 tp->cptse = ( txd_lower & E1000_TXD_CMD_TSE ) ? 1 : 0; 713 } else { 714 // legacy descriptor 715 tp->cptse = 0; 716 } 717 718 if (vlan_enabled(s) && is_vlan_txd(txd_lower) && 719 (tp->cptse || txd_lower & E1000_TXD_CMD_EOP)) { 720 tp->vlan_needed = 1; 721 stw_be_p(tp->vlan_header, 722 le16_to_cpu(s->mac_reg[VET])); 723 stw_be_p(tp->vlan_header + 2, 724 le16_to_cpu(dp->upper.fields.special)); 725 } 726 727 addr = le64_to_cpu(dp->buffer_addr); 728 if (tp->tse && tp->cptse) { 729 msh = tp->hdr_len + tp->mss; 730 do { 731 bytes = split_size; 732 if (tp->size + bytes > msh) 733 bytes = msh - tp->size; 734 735 bytes = MIN(sizeof(tp->data) - tp->size, bytes); 736 pci_dma_read(d, addr, tp->data + tp->size, bytes); 737 sz = tp->size + bytes; 738 if (sz >= tp->hdr_len && tp->size < tp->hdr_len) { 739 memmove(tp->header, tp->data, tp->hdr_len); 740 } 741 tp->size = sz; 742 addr += bytes; 743 if (sz == msh) { 744 xmit_seg(s); 745 memmove(tp->data, tp->header, tp->hdr_len); 746 tp->size = tp->hdr_len; 747 } 748 split_size -= bytes; 749 } while (bytes && split_size); 750 } else if (!tp->tse && tp->cptse) { 751 // context descriptor TSE is not set, while data descriptor TSE is set 752 DBGOUT(TXERR, "TCP segmentation error\n"); 753 } else { 754 split_size = MIN(sizeof(tp->data) - tp->size, split_size); 755 pci_dma_read(d, addr, tp->data + tp->size, split_size); 756 tp->size += split_size; 757 } 758 759 if (!(txd_lower & E1000_TXD_CMD_EOP)) 760 return; 761 if (!(tp->tse && tp->cptse && tp->size < tp->hdr_len)) { 762 xmit_seg(s); 763 } 764 tp->tso_frames = 0; 765 tp->sum_needed = 0; 766 tp->vlan_needed = 0; 767 tp->size = 0; 768 tp->cptse = 0; 769 } 770 771 static uint32_t 772 txdesc_writeback(E1000State *s, dma_addr_t base, struct e1000_tx_desc *dp) 773 { 774 PCIDevice *d = PCI_DEVICE(s); 775 uint32_t txd_upper, txd_lower = le32_to_cpu(dp->lower.data); 776 777 if (!(txd_lower & (E1000_TXD_CMD_RS|E1000_TXD_CMD_RPS))) 778 return 0; 779 txd_upper = (le32_to_cpu(dp->upper.data) | E1000_TXD_STAT_DD) & 780 ~(E1000_TXD_STAT_EC | E1000_TXD_STAT_LC | E1000_TXD_STAT_TU); 781 dp->upper.data = cpu_to_le32(txd_upper); 782 pci_dma_write(d, base + ((char *)&dp->upper - (char *)dp), 783 &dp->upper, sizeof(dp->upper)); 784 return E1000_ICR_TXDW; 785 } 786 787 static uint64_t tx_desc_base(E1000State *s) 788 { 789 uint64_t bah = s->mac_reg[TDBAH]; 790 uint64_t bal = s->mac_reg[TDBAL] & ~0xf; 791 792 return (bah << 32) + bal; 793 } 794 795 static void 796 start_xmit(E1000State *s) 797 { 798 PCIDevice *d = PCI_DEVICE(s); 799 dma_addr_t base; 800 struct e1000_tx_desc desc; 801 uint32_t tdh_start = s->mac_reg[TDH], cause = E1000_ICS_TXQE; 802 803 if (!(s->mac_reg[TCTL] & E1000_TCTL_EN)) { 804 DBGOUT(TX, "tx disabled\n"); 805 return; 806 } 807 808 while (s->mac_reg[TDH] != s->mac_reg[TDT]) { 809 base = tx_desc_base(s) + 810 sizeof(struct e1000_tx_desc) * s->mac_reg[TDH]; 811 pci_dma_read(d, base, &desc, sizeof(desc)); 812 813 DBGOUT(TX, "index %d: %p : %x %x\n", s->mac_reg[TDH], 814 (void *)(intptr_t)desc.buffer_addr, desc.lower.data, 815 desc.upper.data); 816 817 process_tx_desc(s, &desc); 818 cause |= txdesc_writeback(s, base, &desc); 819 820 if (++s->mac_reg[TDH] * sizeof(desc) >= s->mac_reg[TDLEN]) 821 s->mac_reg[TDH] = 0; 822 /* 823 * the following could happen only if guest sw assigns 824 * bogus values to TDT/TDLEN. 825 * there's nothing too intelligent we could do about this. 826 */ 827 if (s->mac_reg[TDH] == tdh_start) { 828 DBGOUT(TXERR, "TDH wraparound @%x, TDT %x, TDLEN %x\n", 829 tdh_start, s->mac_reg[TDT], s->mac_reg[TDLEN]); 830 break; 831 } 832 } 833 set_ics(s, 0, cause); 834 } 835 836 static int 837 receive_filter(E1000State *s, const uint8_t *buf, int size) 838 { 839 static const uint8_t bcast[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; 840 static const int mta_shift[] = {4, 3, 2, 0}; 841 uint32_t f, rctl = s->mac_reg[RCTL], ra[2], *rp; 842 843 if (is_vlan_packet(s, buf) && vlan_rx_filter_enabled(s)) { 844 uint16_t vid = be16_to_cpup((uint16_t *)(buf + 14)); 845 uint32_t vfta = le32_to_cpup((uint32_t *)(s->mac_reg + VFTA) + 846 ((vid >> 5) & 0x7f)); 847 if ((vfta & (1 << (vid & 0x1f))) == 0) 848 return 0; 849 } 850 851 if (rctl & E1000_RCTL_UPE) // promiscuous 852 return 1; 853 854 if ((buf[0] & 1) && (rctl & E1000_RCTL_MPE)) // promiscuous mcast 855 return 1; 856 857 if ((rctl & E1000_RCTL_BAM) && !memcmp(buf, bcast, sizeof bcast)) 858 return 1; 859 860 for (rp = s->mac_reg + RA; rp < s->mac_reg + RA + 32; rp += 2) { 861 if (!(rp[1] & E1000_RAH_AV)) 862 continue; 863 ra[0] = cpu_to_le32(rp[0]); 864 ra[1] = cpu_to_le32(rp[1]); 865 if (!memcmp(buf, (uint8_t *)ra, 6)) { 866 DBGOUT(RXFILTER, 867 "unicast match[%d]: %02x:%02x:%02x:%02x:%02x:%02x\n", 868 (int)(rp - s->mac_reg - RA)/2, 869 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); 870 return 1; 871 } 872 } 873 DBGOUT(RXFILTER, "unicast mismatch: %02x:%02x:%02x:%02x:%02x:%02x\n", 874 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); 875 876 f = mta_shift[(rctl >> E1000_RCTL_MO_SHIFT) & 3]; 877 f = (((buf[5] << 8) | buf[4]) >> f) & 0xfff; 878 if (s->mac_reg[MTA + (f >> 5)] & (1 << (f & 0x1f))) 879 return 1; 880 DBGOUT(RXFILTER, 881 "dropping, inexact filter mismatch: %02x:%02x:%02x:%02x:%02x:%02x MO %d MTA[%d] %x\n", 882 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], 883 (rctl >> E1000_RCTL_MO_SHIFT) & 3, f >> 5, 884 s->mac_reg[MTA + (f >> 5)]); 885 886 return 0; 887 } 888 889 static void 890 e1000_set_link_status(NetClientState *nc) 891 { 892 E1000State *s = qemu_get_nic_opaque(nc); 893 uint32_t old_status = s->mac_reg[STATUS]; 894 895 if (nc->link_down) { 896 e1000_link_down(s); 897 } else { 898 if (have_autoneg(s) && 899 !(s->phy_reg[PHY_STATUS] & MII_SR_AUTONEG_COMPLETE)) { 900 /* emulate auto-negotiation if supported */ 901 timer_mod(s->autoneg_timer, 902 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 500); 903 } else { 904 e1000_link_up(s); 905 } 906 } 907 908 if (s->mac_reg[STATUS] != old_status) 909 set_ics(s, 0, E1000_ICR_LSC); 910 } 911 912 static bool e1000_has_rxbufs(E1000State *s, size_t total_size) 913 { 914 int bufs; 915 /* Fast-path short packets */ 916 if (total_size <= s->rxbuf_size) { 917 return s->mac_reg[RDH] != s->mac_reg[RDT]; 918 } 919 if (s->mac_reg[RDH] < s->mac_reg[RDT]) { 920 bufs = s->mac_reg[RDT] - s->mac_reg[RDH]; 921 } else if (s->mac_reg[RDH] > s->mac_reg[RDT]) { 922 bufs = s->mac_reg[RDLEN] / sizeof(struct e1000_rx_desc) + 923 s->mac_reg[RDT] - s->mac_reg[RDH]; 924 } else { 925 return false; 926 } 927 return total_size <= bufs * s->rxbuf_size; 928 } 929 930 static int 931 e1000_can_receive(NetClientState *nc) 932 { 933 E1000State *s = qemu_get_nic_opaque(nc); 934 935 return (s->mac_reg[STATUS] & E1000_STATUS_LU) && 936 (s->mac_reg[RCTL] & E1000_RCTL_EN) && 937 (s->parent_obj.config[PCI_COMMAND] & PCI_COMMAND_MASTER) && 938 e1000_has_rxbufs(s, 1); 939 } 940 941 static uint64_t rx_desc_base(E1000State *s) 942 { 943 uint64_t bah = s->mac_reg[RDBAH]; 944 uint64_t bal = s->mac_reg[RDBAL] & ~0xf; 945 946 return (bah << 32) + bal; 947 } 948 949 static ssize_t 950 e1000_receive_iov(NetClientState *nc, const struct iovec *iov, int iovcnt) 951 { 952 E1000State *s = qemu_get_nic_opaque(nc); 953 PCIDevice *d = PCI_DEVICE(s); 954 struct e1000_rx_desc desc; 955 dma_addr_t base; 956 unsigned int n, rdt; 957 uint32_t rdh_start; 958 uint16_t vlan_special = 0; 959 uint8_t vlan_status = 0; 960 uint8_t min_buf[MIN_BUF_SIZE]; 961 struct iovec min_iov; 962 uint8_t *filter_buf = iov->iov_base; 963 size_t size = iov_size(iov, iovcnt); 964 size_t iov_ofs = 0; 965 size_t desc_offset; 966 size_t desc_size; 967 size_t total_size; 968 969 if (!(s->mac_reg[STATUS] & E1000_STATUS_LU)) { 970 return -1; 971 } 972 973 if (!(s->mac_reg[RCTL] & E1000_RCTL_EN)) { 974 return -1; 975 } 976 977 /* Pad to minimum Ethernet frame length */ 978 if (size < sizeof(min_buf)) { 979 iov_to_buf(iov, iovcnt, 0, min_buf, size); 980 memset(&min_buf[size], 0, sizeof(min_buf) - size); 981 min_iov.iov_base = filter_buf = min_buf; 982 min_iov.iov_len = size = sizeof(min_buf); 983 iovcnt = 1; 984 iov = &min_iov; 985 } else if (iov->iov_len < MAXIMUM_ETHERNET_HDR_LEN) { 986 /* This is very unlikely, but may happen. */ 987 iov_to_buf(iov, iovcnt, 0, min_buf, MAXIMUM_ETHERNET_HDR_LEN); 988 filter_buf = min_buf; 989 } 990 991 /* Discard oversized packets if !LPE and !SBP. */ 992 if ((size > MAXIMUM_ETHERNET_LPE_SIZE || 993 (size > MAXIMUM_ETHERNET_VLAN_SIZE 994 && !(s->mac_reg[RCTL] & E1000_RCTL_LPE))) 995 && !(s->mac_reg[RCTL] & E1000_RCTL_SBP)) { 996 return size; 997 } 998 999 if (!receive_filter(s, filter_buf, size)) { 1000 return size; 1001 } 1002 1003 if (vlan_enabled(s) && is_vlan_packet(s, filter_buf)) { 1004 vlan_special = cpu_to_le16(be16_to_cpup((uint16_t *)(filter_buf 1005 + 14))); 1006 iov_ofs = 4; 1007 if (filter_buf == iov->iov_base) { 1008 memmove(filter_buf + 4, filter_buf, 12); 1009 } else { 1010 iov_from_buf(iov, iovcnt, 4, filter_buf, 12); 1011 while (iov->iov_len <= iov_ofs) { 1012 iov_ofs -= iov->iov_len; 1013 iov++; 1014 } 1015 } 1016 vlan_status = E1000_RXD_STAT_VP; 1017 size -= 4; 1018 } 1019 1020 rdh_start = s->mac_reg[RDH]; 1021 desc_offset = 0; 1022 total_size = size + fcs_len(s); 1023 if (!e1000_has_rxbufs(s, total_size)) { 1024 set_ics(s, 0, E1000_ICS_RXO); 1025 return -1; 1026 } 1027 do { 1028 desc_size = total_size - desc_offset; 1029 if (desc_size > s->rxbuf_size) { 1030 desc_size = s->rxbuf_size; 1031 } 1032 base = rx_desc_base(s) + sizeof(desc) * s->mac_reg[RDH]; 1033 pci_dma_read(d, base, &desc, sizeof(desc)); 1034 desc.special = vlan_special; 1035 desc.status |= (vlan_status | E1000_RXD_STAT_DD); 1036 if (desc.buffer_addr) { 1037 if (desc_offset < size) { 1038 size_t iov_copy; 1039 hwaddr ba = le64_to_cpu(desc.buffer_addr); 1040 size_t copy_size = size - desc_offset; 1041 if (copy_size > s->rxbuf_size) { 1042 copy_size = s->rxbuf_size; 1043 } 1044 do { 1045 iov_copy = MIN(copy_size, iov->iov_len - iov_ofs); 1046 pci_dma_write(d, ba, iov->iov_base + iov_ofs, iov_copy); 1047 copy_size -= iov_copy; 1048 ba += iov_copy; 1049 iov_ofs += iov_copy; 1050 if (iov_ofs == iov->iov_len) { 1051 iov++; 1052 iov_ofs = 0; 1053 } 1054 } while (copy_size); 1055 } 1056 desc_offset += desc_size; 1057 desc.length = cpu_to_le16(desc_size); 1058 if (desc_offset >= total_size) { 1059 desc.status |= E1000_RXD_STAT_EOP | E1000_RXD_STAT_IXSM; 1060 } else { 1061 /* Guest zeroing out status is not a hardware requirement. 1062 Clear EOP in case guest didn't do it. */ 1063 desc.status &= ~E1000_RXD_STAT_EOP; 1064 } 1065 } else { // as per intel docs; skip descriptors with null buf addr 1066 DBGOUT(RX, "Null RX descriptor!!\n"); 1067 } 1068 pci_dma_write(d, base, &desc, sizeof(desc)); 1069 1070 if (++s->mac_reg[RDH] * sizeof(desc) >= s->mac_reg[RDLEN]) 1071 s->mac_reg[RDH] = 0; 1072 /* see comment in start_xmit; same here */ 1073 if (s->mac_reg[RDH] == rdh_start) { 1074 DBGOUT(RXERR, "RDH wraparound @%x, RDT %x, RDLEN %x\n", 1075 rdh_start, s->mac_reg[RDT], s->mac_reg[RDLEN]); 1076 set_ics(s, 0, E1000_ICS_RXO); 1077 return -1; 1078 } 1079 } while (desc_offset < total_size); 1080 1081 s->mac_reg[GPRC]++; 1082 s->mac_reg[TPR]++; 1083 /* TOR - Total Octets Received: 1084 * This register includes bytes received in a packet from the <Destination 1085 * Address> field through the <CRC> field, inclusively. 1086 */ 1087 n = s->mac_reg[TORL] + size + /* Always include FCS length. */ 4; 1088 if (n < s->mac_reg[TORL]) 1089 s->mac_reg[TORH]++; 1090 s->mac_reg[TORL] = n; 1091 1092 n = E1000_ICS_RXT0; 1093 if ((rdt = s->mac_reg[RDT]) < s->mac_reg[RDH]) 1094 rdt += s->mac_reg[RDLEN] / sizeof(desc); 1095 if (((rdt - s->mac_reg[RDH]) * sizeof(desc)) <= s->mac_reg[RDLEN] >> 1096 s->rxbuf_min_shift) 1097 n |= E1000_ICS_RXDMT0; 1098 1099 set_ics(s, 0, n); 1100 1101 return size; 1102 } 1103 1104 static ssize_t 1105 e1000_receive(NetClientState *nc, const uint8_t *buf, size_t size) 1106 { 1107 const struct iovec iov = { 1108 .iov_base = (uint8_t *)buf, 1109 .iov_len = size 1110 }; 1111 1112 return e1000_receive_iov(nc, &iov, 1); 1113 } 1114 1115 static uint32_t 1116 mac_readreg(E1000State *s, int index) 1117 { 1118 return s->mac_reg[index]; 1119 } 1120 1121 static uint32_t 1122 mac_icr_read(E1000State *s, int index) 1123 { 1124 uint32_t ret = s->mac_reg[ICR]; 1125 1126 DBGOUT(INTERRUPT, "ICR read: %x\n", ret); 1127 set_interrupt_cause(s, 0, 0); 1128 return ret; 1129 } 1130 1131 static uint32_t 1132 mac_read_clr4(E1000State *s, int index) 1133 { 1134 uint32_t ret = s->mac_reg[index]; 1135 1136 s->mac_reg[index] = 0; 1137 return ret; 1138 } 1139 1140 static uint32_t 1141 mac_read_clr8(E1000State *s, int index) 1142 { 1143 uint32_t ret = s->mac_reg[index]; 1144 1145 s->mac_reg[index] = 0; 1146 s->mac_reg[index-1] = 0; 1147 return ret; 1148 } 1149 1150 static void 1151 mac_writereg(E1000State *s, int index, uint32_t val) 1152 { 1153 uint32_t macaddr[2]; 1154 1155 s->mac_reg[index] = val; 1156 1157 if (index == RA + 1) { 1158 macaddr[0] = cpu_to_le32(s->mac_reg[RA]); 1159 macaddr[1] = cpu_to_le32(s->mac_reg[RA + 1]); 1160 qemu_format_nic_info_str(qemu_get_queue(s->nic), (uint8_t *)macaddr); 1161 } 1162 } 1163 1164 static void 1165 set_rdt(E1000State *s, int index, uint32_t val) 1166 { 1167 s->mac_reg[index] = val & 0xffff; 1168 if (e1000_has_rxbufs(s, 1)) { 1169 qemu_flush_queued_packets(qemu_get_queue(s->nic)); 1170 } 1171 } 1172 1173 static void 1174 set_16bit(E1000State *s, int index, uint32_t val) 1175 { 1176 s->mac_reg[index] = val & 0xffff; 1177 } 1178 1179 static void 1180 set_dlen(E1000State *s, int index, uint32_t val) 1181 { 1182 s->mac_reg[index] = val & 0xfff80; 1183 } 1184 1185 static void 1186 set_tctl(E1000State *s, int index, uint32_t val) 1187 { 1188 s->mac_reg[index] = val; 1189 s->mac_reg[TDT] &= 0xffff; 1190 start_xmit(s); 1191 } 1192 1193 static void 1194 set_icr(E1000State *s, int index, uint32_t val) 1195 { 1196 DBGOUT(INTERRUPT, "set_icr %x\n", val); 1197 set_interrupt_cause(s, 0, s->mac_reg[ICR] & ~val); 1198 } 1199 1200 static void 1201 set_imc(E1000State *s, int index, uint32_t val) 1202 { 1203 s->mac_reg[IMS] &= ~val; 1204 set_ics(s, 0, 0); 1205 } 1206 1207 static void 1208 set_ims(E1000State *s, int index, uint32_t val) 1209 { 1210 s->mac_reg[IMS] |= val; 1211 set_ics(s, 0, 0); 1212 } 1213 1214 #define getreg(x) [x] = mac_readreg 1215 static uint32_t (*macreg_readops[])(E1000State *, int) = { 1216 getreg(PBA), getreg(RCTL), getreg(TDH), getreg(TXDCTL), 1217 getreg(WUFC), getreg(TDT), getreg(CTRL), getreg(LEDCTL), 1218 getreg(MANC), getreg(MDIC), getreg(SWSM), getreg(STATUS), 1219 getreg(TORL), getreg(TOTL), getreg(IMS), getreg(TCTL), 1220 getreg(RDH), getreg(RDT), getreg(VET), getreg(ICS), 1221 getreg(TDBAL), getreg(TDBAH), getreg(RDBAH), getreg(RDBAL), 1222 getreg(TDLEN), getreg(RDLEN), getreg(RDTR), getreg(RADV), 1223 getreg(TADV), getreg(ITR), 1224 1225 [TOTH] = mac_read_clr8, [TORH] = mac_read_clr8, [GPRC] = mac_read_clr4, 1226 [GPTC] = mac_read_clr4, [TPR] = mac_read_clr4, [TPT] = mac_read_clr4, 1227 [ICR] = mac_icr_read, [EECD] = get_eecd, [EERD] = flash_eerd_read, 1228 [CRCERRS ... MPC] = &mac_readreg, 1229 [RA ... RA+31] = &mac_readreg, 1230 [MTA ... MTA+127] = &mac_readreg, 1231 [VFTA ... VFTA+127] = &mac_readreg, 1232 }; 1233 enum { NREADOPS = ARRAY_SIZE(macreg_readops) }; 1234 1235 #define putreg(x) [x] = mac_writereg 1236 static void (*macreg_writeops[])(E1000State *, int, uint32_t) = { 1237 putreg(PBA), putreg(EERD), putreg(SWSM), putreg(WUFC), 1238 putreg(TDBAL), putreg(TDBAH), putreg(TXDCTL), putreg(RDBAH), 1239 putreg(RDBAL), putreg(LEDCTL), putreg(VET), 1240 [TDLEN] = set_dlen, [RDLEN] = set_dlen, [TCTL] = set_tctl, 1241 [TDT] = set_tctl, [MDIC] = set_mdic, [ICS] = set_ics, 1242 [TDH] = set_16bit, [RDH] = set_16bit, [RDT] = set_rdt, 1243 [IMC] = set_imc, [IMS] = set_ims, [ICR] = set_icr, 1244 [EECD] = set_eecd, [RCTL] = set_rx_control, [CTRL] = set_ctrl, 1245 [RDTR] = set_16bit, [RADV] = set_16bit, [TADV] = set_16bit, 1246 [ITR] = set_16bit, 1247 [RA ... RA+31] = &mac_writereg, 1248 [MTA ... MTA+127] = &mac_writereg, 1249 [VFTA ... VFTA+127] = &mac_writereg, 1250 }; 1251 1252 enum { NWRITEOPS = ARRAY_SIZE(macreg_writeops) }; 1253 1254 static void 1255 e1000_mmio_write(void *opaque, hwaddr addr, uint64_t val, 1256 unsigned size) 1257 { 1258 E1000State *s = opaque; 1259 unsigned int index = (addr & 0x1ffff) >> 2; 1260 1261 if (index < NWRITEOPS && macreg_writeops[index]) { 1262 macreg_writeops[index](s, index, val); 1263 } else if (index < NREADOPS && macreg_readops[index]) { 1264 DBGOUT(MMIO, "e1000_mmio_writel RO %x: 0x%04"PRIx64"\n", index<<2, val); 1265 } else { 1266 DBGOUT(UNKNOWN, "MMIO unknown write addr=0x%08x,val=0x%08"PRIx64"\n", 1267 index<<2, val); 1268 } 1269 } 1270 1271 static uint64_t 1272 e1000_mmio_read(void *opaque, hwaddr addr, unsigned size) 1273 { 1274 E1000State *s = opaque; 1275 unsigned int index = (addr & 0x1ffff) >> 2; 1276 1277 if (index < NREADOPS && macreg_readops[index]) 1278 { 1279 return macreg_readops[index](s, index); 1280 } 1281 DBGOUT(UNKNOWN, "MMIO unknown read addr=0x%08x\n", index<<2); 1282 return 0; 1283 } 1284 1285 static const MemoryRegionOps e1000_mmio_ops = { 1286 .read = e1000_mmio_read, 1287 .write = e1000_mmio_write, 1288 .endianness = DEVICE_LITTLE_ENDIAN, 1289 .impl = { 1290 .min_access_size = 4, 1291 .max_access_size = 4, 1292 }, 1293 }; 1294 1295 static uint64_t e1000_io_read(void *opaque, hwaddr addr, 1296 unsigned size) 1297 { 1298 E1000State *s = opaque; 1299 1300 (void)s; 1301 return 0; 1302 } 1303 1304 static void e1000_io_write(void *opaque, hwaddr addr, 1305 uint64_t val, unsigned size) 1306 { 1307 E1000State *s = opaque; 1308 1309 (void)s; 1310 } 1311 1312 static const MemoryRegionOps e1000_io_ops = { 1313 .read = e1000_io_read, 1314 .write = e1000_io_write, 1315 .endianness = DEVICE_LITTLE_ENDIAN, 1316 }; 1317 1318 static bool is_version_1(void *opaque, int version_id) 1319 { 1320 return version_id == 1; 1321 } 1322 1323 static void e1000_pre_save(void *opaque) 1324 { 1325 E1000State *s = opaque; 1326 NetClientState *nc = qemu_get_queue(s->nic); 1327 1328 /* If the mitigation timer is active, emulate a timeout now. */ 1329 if (s->mit_timer_on) { 1330 e1000_mit_timer(s); 1331 } 1332 1333 /* 1334 * If link is down and auto-negotiation is supported and ongoing, 1335 * complete auto-negotiation immediately. This allows us to look 1336 * at MII_SR_AUTONEG_COMPLETE to infer link status on load. 1337 */ 1338 if (nc->link_down && have_autoneg(s)) { 1339 s->phy_reg[PHY_STATUS] |= MII_SR_AUTONEG_COMPLETE; 1340 } 1341 } 1342 1343 static int e1000_post_load(void *opaque, int version_id) 1344 { 1345 E1000State *s = opaque; 1346 NetClientState *nc = qemu_get_queue(s->nic); 1347 1348 if (!(s->compat_flags & E1000_FLAG_MIT)) { 1349 s->mac_reg[ITR] = s->mac_reg[RDTR] = s->mac_reg[RADV] = 1350 s->mac_reg[TADV] = 0; 1351 s->mit_irq_level = false; 1352 } 1353 s->mit_ide = 0; 1354 s->mit_timer_on = false; 1355 1356 /* nc.link_down can't be migrated, so infer link_down according 1357 * to link status bit in mac_reg[STATUS]. 1358 * Alternatively, restart link negotiation if it was in progress. */ 1359 nc->link_down = (s->mac_reg[STATUS] & E1000_STATUS_LU) == 0; 1360 1361 if (have_autoneg(s) && 1362 !(s->phy_reg[PHY_STATUS] & MII_SR_AUTONEG_COMPLETE)) { 1363 nc->link_down = false; 1364 timer_mod(s->autoneg_timer, 1365 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 500); 1366 } 1367 1368 return 0; 1369 } 1370 1371 static bool e1000_mit_state_needed(void *opaque) 1372 { 1373 E1000State *s = opaque; 1374 1375 return s->compat_flags & E1000_FLAG_MIT; 1376 } 1377 1378 static const VMStateDescription vmstate_e1000_mit_state = { 1379 .name = "e1000/mit_state", 1380 .version_id = 1, 1381 .minimum_version_id = 1, 1382 .needed = e1000_mit_state_needed, 1383 .fields = (VMStateField[]) { 1384 VMSTATE_UINT32(mac_reg[RDTR], E1000State), 1385 VMSTATE_UINT32(mac_reg[RADV], E1000State), 1386 VMSTATE_UINT32(mac_reg[TADV], E1000State), 1387 VMSTATE_UINT32(mac_reg[ITR], E1000State), 1388 VMSTATE_BOOL(mit_irq_level, E1000State), 1389 VMSTATE_END_OF_LIST() 1390 } 1391 }; 1392 1393 static const VMStateDescription vmstate_e1000 = { 1394 .name = "e1000", 1395 .version_id = 2, 1396 .minimum_version_id = 1, 1397 .pre_save = e1000_pre_save, 1398 .post_load = e1000_post_load, 1399 .fields = (VMStateField[]) { 1400 VMSTATE_PCI_DEVICE(parent_obj, E1000State), 1401 VMSTATE_UNUSED_TEST(is_version_1, 4), /* was instance id */ 1402 VMSTATE_UNUSED(4), /* Was mmio_base. */ 1403 VMSTATE_UINT32(rxbuf_size, E1000State), 1404 VMSTATE_UINT32(rxbuf_min_shift, E1000State), 1405 VMSTATE_UINT32(eecd_state.val_in, E1000State), 1406 VMSTATE_UINT16(eecd_state.bitnum_in, E1000State), 1407 VMSTATE_UINT16(eecd_state.bitnum_out, E1000State), 1408 VMSTATE_UINT16(eecd_state.reading, E1000State), 1409 VMSTATE_UINT32(eecd_state.old_eecd, E1000State), 1410 VMSTATE_UINT8(tx.ipcss, E1000State), 1411 VMSTATE_UINT8(tx.ipcso, E1000State), 1412 VMSTATE_UINT16(tx.ipcse, E1000State), 1413 VMSTATE_UINT8(tx.tucss, E1000State), 1414 VMSTATE_UINT8(tx.tucso, E1000State), 1415 VMSTATE_UINT16(tx.tucse, E1000State), 1416 VMSTATE_UINT32(tx.paylen, E1000State), 1417 VMSTATE_UINT8(tx.hdr_len, E1000State), 1418 VMSTATE_UINT16(tx.mss, E1000State), 1419 VMSTATE_UINT16(tx.size, E1000State), 1420 VMSTATE_UINT16(tx.tso_frames, E1000State), 1421 VMSTATE_UINT8(tx.sum_needed, E1000State), 1422 VMSTATE_INT8(tx.ip, E1000State), 1423 VMSTATE_INT8(tx.tcp, E1000State), 1424 VMSTATE_BUFFER(tx.header, E1000State), 1425 VMSTATE_BUFFER(tx.data, E1000State), 1426 VMSTATE_UINT16_ARRAY(eeprom_data, E1000State, 64), 1427 VMSTATE_UINT16_ARRAY(phy_reg, E1000State, 0x20), 1428 VMSTATE_UINT32(mac_reg[CTRL], E1000State), 1429 VMSTATE_UINT32(mac_reg[EECD], E1000State), 1430 VMSTATE_UINT32(mac_reg[EERD], E1000State), 1431 VMSTATE_UINT32(mac_reg[GPRC], E1000State), 1432 VMSTATE_UINT32(mac_reg[GPTC], E1000State), 1433 VMSTATE_UINT32(mac_reg[ICR], E1000State), 1434 VMSTATE_UINT32(mac_reg[ICS], E1000State), 1435 VMSTATE_UINT32(mac_reg[IMC], E1000State), 1436 VMSTATE_UINT32(mac_reg[IMS], E1000State), 1437 VMSTATE_UINT32(mac_reg[LEDCTL], E1000State), 1438 VMSTATE_UINT32(mac_reg[MANC], E1000State), 1439 VMSTATE_UINT32(mac_reg[MDIC], E1000State), 1440 VMSTATE_UINT32(mac_reg[MPC], E1000State), 1441 VMSTATE_UINT32(mac_reg[PBA], E1000State), 1442 VMSTATE_UINT32(mac_reg[RCTL], E1000State), 1443 VMSTATE_UINT32(mac_reg[RDBAH], E1000State), 1444 VMSTATE_UINT32(mac_reg[RDBAL], E1000State), 1445 VMSTATE_UINT32(mac_reg[RDH], E1000State), 1446 VMSTATE_UINT32(mac_reg[RDLEN], E1000State), 1447 VMSTATE_UINT32(mac_reg[RDT], E1000State), 1448 VMSTATE_UINT32(mac_reg[STATUS], E1000State), 1449 VMSTATE_UINT32(mac_reg[SWSM], E1000State), 1450 VMSTATE_UINT32(mac_reg[TCTL], E1000State), 1451 VMSTATE_UINT32(mac_reg[TDBAH], E1000State), 1452 VMSTATE_UINT32(mac_reg[TDBAL], E1000State), 1453 VMSTATE_UINT32(mac_reg[TDH], E1000State), 1454 VMSTATE_UINT32(mac_reg[TDLEN], E1000State), 1455 VMSTATE_UINT32(mac_reg[TDT], E1000State), 1456 VMSTATE_UINT32(mac_reg[TORH], E1000State), 1457 VMSTATE_UINT32(mac_reg[TORL], E1000State), 1458 VMSTATE_UINT32(mac_reg[TOTH], E1000State), 1459 VMSTATE_UINT32(mac_reg[TOTL], E1000State), 1460 VMSTATE_UINT32(mac_reg[TPR], E1000State), 1461 VMSTATE_UINT32(mac_reg[TPT], E1000State), 1462 VMSTATE_UINT32(mac_reg[TXDCTL], E1000State), 1463 VMSTATE_UINT32(mac_reg[WUFC], E1000State), 1464 VMSTATE_UINT32(mac_reg[VET], E1000State), 1465 VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, RA, 32), 1466 VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, MTA, 128), 1467 VMSTATE_UINT32_SUB_ARRAY(mac_reg, E1000State, VFTA, 128), 1468 VMSTATE_END_OF_LIST() 1469 }, 1470 .subsections = (const VMStateDescription*[]) { 1471 &vmstate_e1000_mit_state, 1472 NULL 1473 } 1474 }; 1475 1476 /* 1477 * EEPROM contents documented in Tables 5-2 and 5-3, pp. 98-102. 1478 * Note: A valid DevId will be inserted during pci_e1000_init(). 1479 */ 1480 static const uint16_t e1000_eeprom_template[64] = { 1481 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 1482 0x3000, 0x1000, 0x6403, 0 /*DevId*/, 0x8086, 0 /*DevId*/, 0x8086, 0x3040, 1483 0x0008, 0x2000, 0x7e14, 0x0048, 0x1000, 0x00d8, 0x0000, 0x2700, 1484 0x6cc9, 0x3150, 0x0722, 0x040b, 0x0984, 0x0000, 0xc000, 0x0706, 1485 0x1008, 0x0000, 0x0f04, 0x7fff, 0x4d01, 0xffff, 0xffff, 0xffff, 1486 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 1487 0x0100, 0x4000, 0x121c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 1488 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 1489 }; 1490 1491 /* PCI interface */ 1492 1493 static void 1494 e1000_mmio_setup(E1000State *d) 1495 { 1496 int i; 1497 const uint32_t excluded_regs[] = { 1498 E1000_MDIC, E1000_ICR, E1000_ICS, E1000_IMS, 1499 E1000_IMC, E1000_TCTL, E1000_TDT, PNPMMIO_SIZE 1500 }; 1501 1502 memory_region_init_io(&d->mmio, OBJECT(d), &e1000_mmio_ops, d, 1503 "e1000-mmio", PNPMMIO_SIZE); 1504 memory_region_add_coalescing(&d->mmio, 0, excluded_regs[0]); 1505 for (i = 0; excluded_regs[i] != PNPMMIO_SIZE; i++) 1506 memory_region_add_coalescing(&d->mmio, excluded_regs[i] + 4, 1507 excluded_regs[i+1] - excluded_regs[i] - 4); 1508 memory_region_init_io(&d->io, OBJECT(d), &e1000_io_ops, d, "e1000-io", IOPORT_SIZE); 1509 } 1510 1511 static void 1512 pci_e1000_uninit(PCIDevice *dev) 1513 { 1514 E1000State *d = E1000(dev); 1515 1516 timer_del(d->autoneg_timer); 1517 timer_free(d->autoneg_timer); 1518 timer_del(d->mit_timer); 1519 timer_free(d->mit_timer); 1520 qemu_del_nic(d->nic); 1521 } 1522 1523 static NetClientInfo net_e1000_info = { 1524 .type = NET_CLIENT_OPTIONS_KIND_NIC, 1525 .size = sizeof(NICState), 1526 .can_receive = e1000_can_receive, 1527 .receive = e1000_receive, 1528 .receive_iov = e1000_receive_iov, 1529 .link_status_changed = e1000_set_link_status, 1530 }; 1531 1532 static void e1000_write_config(PCIDevice *pci_dev, uint32_t address, 1533 uint32_t val, int len) 1534 { 1535 E1000State *s = E1000(pci_dev); 1536 1537 pci_default_write_config(pci_dev, address, val, len); 1538 1539 if (range_covers_byte(address, len, PCI_COMMAND) && 1540 (pci_dev->config[PCI_COMMAND] & PCI_COMMAND_MASTER)) { 1541 qemu_flush_queued_packets(qemu_get_queue(s->nic)); 1542 } 1543 } 1544 1545 1546 static void pci_e1000_realize(PCIDevice *pci_dev, Error **errp) 1547 { 1548 DeviceState *dev = DEVICE(pci_dev); 1549 E1000State *d = E1000(pci_dev); 1550 PCIDeviceClass *pdc = PCI_DEVICE_GET_CLASS(pci_dev); 1551 uint8_t *pci_conf; 1552 uint16_t checksum = 0; 1553 int i; 1554 uint8_t *macaddr; 1555 1556 pci_dev->config_write = e1000_write_config; 1557 1558 pci_conf = pci_dev->config; 1559 1560 /* TODO: RST# value should be 0, PCI spec 6.2.4 */ 1561 pci_conf[PCI_CACHE_LINE_SIZE] = 0x10; 1562 1563 pci_conf[PCI_INTERRUPT_PIN] = 1; /* interrupt pin A */ 1564 1565 e1000_mmio_setup(d); 1566 1567 pci_register_bar(pci_dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &d->mmio); 1568 1569 pci_register_bar(pci_dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &d->io); 1570 1571 memmove(d->eeprom_data, e1000_eeprom_template, 1572 sizeof e1000_eeprom_template); 1573 qemu_macaddr_default_if_unset(&d->conf.macaddr); 1574 macaddr = d->conf.macaddr.a; 1575 for (i = 0; i < 3; i++) 1576 d->eeprom_data[i] = (macaddr[2*i+1]<<8) | macaddr[2*i]; 1577 d->eeprom_data[11] = d->eeprom_data[13] = pdc->device_id; 1578 for (i = 0; i < EEPROM_CHECKSUM_REG; i++) 1579 checksum += d->eeprom_data[i]; 1580 checksum = (uint16_t) EEPROM_SUM - checksum; 1581 d->eeprom_data[EEPROM_CHECKSUM_REG] = checksum; 1582 1583 d->nic = qemu_new_nic(&net_e1000_info, &d->conf, 1584 object_get_typename(OBJECT(d)), dev->id, d); 1585 1586 qemu_format_nic_info_str(qemu_get_queue(d->nic), macaddr); 1587 1588 d->autoneg_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL, e1000_autoneg_timer, d); 1589 d->mit_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, e1000_mit_timer, d); 1590 } 1591 1592 static void qdev_e1000_reset(DeviceState *dev) 1593 { 1594 E1000State *d = E1000(dev); 1595 e1000_reset(d); 1596 } 1597 1598 static Property e1000_properties[] = { 1599 DEFINE_NIC_PROPERTIES(E1000State, conf), 1600 DEFINE_PROP_BIT("autonegotiation", E1000State, 1601 compat_flags, E1000_FLAG_AUTONEG_BIT, true), 1602 DEFINE_PROP_BIT("mitigation", E1000State, 1603 compat_flags, E1000_FLAG_MIT_BIT, true), 1604 DEFINE_PROP_END_OF_LIST(), 1605 }; 1606 1607 typedef struct E1000Info { 1608 const char *name; 1609 uint16_t device_id; 1610 uint8_t revision; 1611 uint16_t phy_id2; 1612 } E1000Info; 1613 1614 static void e1000_class_init(ObjectClass *klass, void *data) 1615 { 1616 DeviceClass *dc = DEVICE_CLASS(klass); 1617 PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); 1618 E1000BaseClass *e = E1000_DEVICE_CLASS(klass); 1619 const E1000Info *info = data; 1620 1621 k->realize = pci_e1000_realize; 1622 k->exit = pci_e1000_uninit; 1623 k->romfile = "efi-e1000.rom"; 1624 k->vendor_id = PCI_VENDOR_ID_INTEL; 1625 k->device_id = info->device_id; 1626 k->revision = info->revision; 1627 e->phy_id2 = info->phy_id2; 1628 k->class_id = PCI_CLASS_NETWORK_ETHERNET; 1629 set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); 1630 dc->desc = "Intel Gigabit Ethernet"; 1631 dc->reset = qdev_e1000_reset; 1632 dc->vmsd = &vmstate_e1000; 1633 dc->props = e1000_properties; 1634 } 1635 1636 static void e1000_instance_init(Object *obj) 1637 { 1638 E1000State *n = E1000(obj); 1639 device_add_bootindex_property(obj, &n->conf.bootindex, 1640 "bootindex", "/ethernet-phy@0", 1641 DEVICE(n), NULL); 1642 } 1643 1644 static const TypeInfo e1000_base_info = { 1645 .name = TYPE_E1000_BASE, 1646 .parent = TYPE_PCI_DEVICE, 1647 .instance_size = sizeof(E1000State), 1648 .instance_init = e1000_instance_init, 1649 .class_size = sizeof(E1000BaseClass), 1650 .abstract = true, 1651 }; 1652 1653 static const E1000Info e1000_devices[] = { 1654 { 1655 .name = "e1000", 1656 .device_id = E1000_DEV_ID_82540EM, 1657 .revision = 0x03, 1658 .phy_id2 = E1000_PHY_ID2_8254xx_DEFAULT, 1659 }, 1660 { 1661 .name = "e1000-82544gc", 1662 .device_id = E1000_DEV_ID_82544GC_COPPER, 1663 .revision = 0x03, 1664 .phy_id2 = E1000_PHY_ID2_82544x, 1665 }, 1666 { 1667 .name = "e1000-82545em", 1668 .device_id = E1000_DEV_ID_82545EM_COPPER, 1669 .revision = 0x03, 1670 .phy_id2 = E1000_PHY_ID2_8254xx_DEFAULT, 1671 }, 1672 }; 1673 1674 static void e1000_register_types(void) 1675 { 1676 int i; 1677 1678 type_register_static(&e1000_base_info); 1679 for (i = 0; i < ARRAY_SIZE(e1000_devices); i++) { 1680 const E1000Info *info = &e1000_devices[i]; 1681 TypeInfo type_info = {}; 1682 1683 type_info.name = info->name; 1684 type_info.parent = TYPE_E1000_BASE; 1685 type_info.class_data = (void *)info; 1686 type_info.class_init = e1000_class_init; 1687 type_info.instance_init = e1000_instance_init; 1688 1689 type_register(&type_info); 1690 } 1691 } 1692 1693 type_init(e1000_register_types) 1694