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