Revision 273a2142 hw/eepro100.c
b/hw/eepro100.c | ||
---|---|---|
181 | 181 |
} ru_state_t; |
182 | 182 |
|
183 | 183 |
typedef struct { |
184 |
PCIDevice dev; |
|
184 | 185 |
#if 1 |
185 | 186 |
uint8_t cmd; |
186 | 187 |
uint32_t start; |
... | ... | |
200 | 201 |
uint8_t curpag; |
201 | 202 |
uint8_t mult[8]; /* multicast mask array */ |
202 | 203 |
int mmio_index; |
203 |
PCIDevice *pci_dev; |
|
204 | 204 |
VLANClientState *vc; |
205 | 205 |
#endif |
206 | 206 |
uint8_t scb_stat; /* SCB stat/ack byte */ |
... | ... | |
304 | 304 |
{ |
305 | 305 |
if (s->int_stat) { |
306 | 306 |
logout("interrupt disabled\n"); |
307 |
qemu_irq_lower(s->pci_dev->irq[0]);
|
|
307 |
qemu_irq_lower(s->dev.irq[0]);
|
|
308 | 308 |
s->int_stat = 0; |
309 | 309 |
} |
310 | 310 |
} |
... | ... | |
313 | 313 |
{ |
314 | 314 |
if (!s->int_stat) { |
315 | 315 |
logout("interrupt enabled\n"); |
316 |
qemu_irq_raise(s->pci_dev->irq[0]);
|
|
316 |
qemu_irq_raise(s->dev.irq[0]);
|
|
317 | 317 |
s->int_stat = 1; |
318 | 318 |
} |
319 | 319 |
} |
... | ... | |
392 | 392 |
static void pci_reset(EEPRO100State * s) |
393 | 393 |
{ |
394 | 394 |
uint32_t device = s->device; |
395 |
uint8_t *pci_conf = s->pci_dev->config;
|
|
395 |
uint8_t *pci_conf = s->dev.config;
|
|
396 | 396 |
|
397 | 397 |
logout("%p\n", s); |
398 | 398 |
|
... | ... | |
1342 | 1342 |
/***********************************************************/ |
1343 | 1343 |
/* PCI EEPRO100 definitions */ |
1344 | 1344 |
|
1345 |
typedef struct PCIEEPRO100State { |
|
1346 |
PCIDevice dev; |
|
1347 |
EEPRO100State eepro100; |
|
1348 |
} PCIEEPRO100State; |
|
1349 |
|
|
1350 | 1345 |
static void pci_map(PCIDevice * pci_dev, int region_num, |
1351 | 1346 |
uint32_t addr, uint32_t size, int type) |
1352 | 1347 |
{ |
1353 |
PCIEEPRO100State *d = DO_UPCAST(PCIEEPRO100State, dev, pci_dev); |
|
1354 |
EEPRO100State *s = &d->eepro100; |
|
1348 |
EEPRO100State *s = DO_UPCAST(EEPRO100State, dev, pci_dev); |
|
1355 | 1349 |
|
1356 | 1350 |
logout("region %d, addr=0x%08x, size=0x%08x, type=%d\n", |
1357 | 1351 |
region_num, addr, size, type); |
... | ... | |
1424 | 1418 |
static void pci_mmio_map(PCIDevice * pci_dev, int region_num, |
1425 | 1419 |
uint32_t addr, uint32_t size, int type) |
1426 | 1420 |
{ |
1427 |
PCIEEPRO100State *d = DO_UPCAST(PCIEEPRO100State, dev, pci_dev);
|
|
1421 |
EEPRO100State *s = DO_UPCAST(EEPRO100State, dev, pci_dev);
|
|
1428 | 1422 |
|
1429 | 1423 |
logout("region %d, addr=0x%08x, size=0x%08x, type=%d\n", |
1430 | 1424 |
region_num, addr, size, type); |
1431 | 1425 |
|
1432 | 1426 |
if (region_num == 0) { |
1433 | 1427 |
/* Map control / status registers. */ |
1434 |
cpu_register_physical_memory(addr, size, d->eepro100.mmio_index);
|
|
1435 |
d->eepro100.region[region_num] = addr;
|
|
1428 |
cpu_register_physical_memory(addr, size, s->mmio_index);
|
|
1429 |
s->region[region_num] = addr;
|
|
1436 | 1430 |
} |
1437 | 1431 |
} |
1438 | 1432 |
|
... | ... | |
1555 | 1549 |
if (version_id > 3) |
1556 | 1550 |
return -EINVAL; |
1557 | 1551 |
|
1558 |
if (s->pci_dev && version_id >= 3) {
|
|
1559 |
ret = pci_device_load(s->pci_dev, f);
|
|
1552 |
if (version_id >= 3) { |
|
1553 |
ret = pci_device_load(&s->dev, f);
|
|
1560 | 1554 |
if (ret < 0) |
1561 | 1555 |
return ret; |
1562 | 1556 |
} |
... | ... | |
1641 | 1635 |
EEPRO100State *s = opaque; |
1642 | 1636 |
int i; |
1643 | 1637 |
|
1644 |
if (s->pci_dev) |
|
1645 |
pci_device_save(s->pci_dev, f); |
|
1638 |
pci_device_save(&s->dev, f); |
|
1646 | 1639 |
|
1647 | 1640 |
qemu_put_8s(f, &s->rxcr); |
1648 | 1641 |
|
... | ... | |
1724 | 1717 |
|
1725 | 1718 |
static int pci_nic_uninit(PCIDevice *dev) |
1726 | 1719 |
{ |
1727 |
PCIEEPRO100State *d = DO_UPCAST(PCIEEPRO100State, dev, dev); |
|
1728 |
EEPRO100State *s = &d->eepro100; |
|
1720 |
EEPRO100State *s = DO_UPCAST(EEPRO100State, dev, dev); |
|
1729 | 1721 |
|
1730 | 1722 |
cpu_unregister_io_memory(s->mmio_index); |
1731 | 1723 |
|
... | ... | |
1734 | 1726 |
|
1735 | 1727 |
static int nic_init(PCIDevice *pci_dev, uint32_t device) |
1736 | 1728 |
{ |
1737 |
PCIEEPRO100State *d = DO_UPCAST(PCIEEPRO100State, dev, pci_dev); |
|
1738 |
EEPRO100State *s; |
|
1729 |
EEPRO100State *s = DO_UPCAST(EEPRO100State, dev, pci_dev); |
|
1739 | 1730 |
|
1740 | 1731 |
logout("\n"); |
1741 | 1732 |
|
1742 |
d->dev.unregister = pci_nic_uninit;
|
|
1733 |
s->dev.unregister = pci_nic_uninit;
|
|
1743 | 1734 |
|
1744 |
s = &d->eepro100; |
|
1745 | 1735 |
s->device = device; |
1746 |
s->pci_dev = &d->dev; |
|
1747 | 1736 |
|
1748 | 1737 |
pci_reset(s); |
1749 | 1738 |
|
... | ... | |
1752 | 1741 |
s->eeprom = eeprom93xx_new(EEPROM_SIZE); |
1753 | 1742 |
|
1754 | 1743 |
/* Handler for memory-mapped I/O */ |
1755 |
d->eepro100.mmio_index =
|
|
1744 |
s->mmio_index =
|
|
1756 | 1745 |
cpu_register_io_memory(pci_mmio_read, pci_mmio_write, s); |
1757 | 1746 |
|
1758 |
pci_register_bar(&d->dev, 0, PCI_MEM_SIZE,
|
|
1747 |
pci_register_bar(&s->dev, 0, PCI_MEM_SIZE,
|
|
1759 | 1748 |
PCI_ADDRESS_SPACE_MEM | |
1760 | 1749 |
PCI_ADDRESS_SPACE_MEM_PREFETCH, pci_mmio_map); |
1761 |
pci_register_bar(&d->dev, 1, PCI_IO_SIZE, PCI_ADDRESS_SPACE_IO,
|
|
1750 |
pci_register_bar(&s->dev, 1, PCI_IO_SIZE, PCI_ADDRESS_SPACE_IO,
|
|
1762 | 1751 |
pci_map); |
1763 |
pci_register_bar(&d->dev, 2, PCI_FLASH_SIZE, PCI_ADDRESS_SPACE_MEM,
|
|
1752 |
pci_register_bar(&s->dev, 2, PCI_FLASH_SIZE, PCI_ADDRESS_SPACE_MEM,
|
|
1764 | 1753 |
pci_mmio_map); |
1765 | 1754 |
|
1766 |
qdev_get_macaddr(&d->dev.qdev, s->macaddr);
|
|
1755 |
qdev_get_macaddr(&s->dev.qdev, s->macaddr);
|
|
1767 | 1756 |
logout("macaddr: %s\n", nic_dump(&s->macaddr[0], 6)); |
1768 | 1757 |
assert(s->region[1] == 0); |
1769 | 1758 |
|
1770 | 1759 |
nic_reset(s); |
1771 | 1760 |
|
1772 |
s->vc = qdev_get_vlan_client(&d->dev.qdev,
|
|
1761 |
s->vc = qdev_get_vlan_client(&s->dev.qdev,
|
|
1773 | 1762 |
nic_can_receive, nic_receive, NULL, |
1774 | 1763 |
nic_cleanup, s); |
1775 | 1764 |
|
... | ... | |
1799 | 1788 |
static PCIDeviceInfo eepro100_info[] = { |
1800 | 1789 |
{ |
1801 | 1790 |
.qdev.name = "i82551", |
1802 |
.qdev.size = sizeof(PCIEEPRO100State),
|
|
1791 |
.qdev.size = sizeof(EEPRO100State), |
|
1803 | 1792 |
.init = pci_i82551_init, |
1804 | 1793 |
},{ |
1805 | 1794 |
.qdev.name = "i82557b", |
1806 |
.qdev.size = sizeof(PCIEEPRO100State),
|
|
1795 |
.qdev.size = sizeof(EEPRO100State), |
|
1807 | 1796 |
.init = pci_i82557b_init, |
1808 | 1797 |
},{ |
1809 | 1798 |
.qdev.name = "i82559er", |
1810 |
.qdev.size = sizeof(PCIEEPRO100State),
|
|
1799 |
.qdev.size = sizeof(EEPRO100State), |
|
1811 | 1800 |
.init = pci_i82559er_init, |
1812 | 1801 |
},{ |
1813 | 1802 |
/* end of list */ |
Also available in: Unified diff