mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge remote-tracking branch 'mst/for_anthony' into staging
Conflicts: hw/usb-uhci.c
This commit is contained in:
@@ -1753,14 +1753,21 @@ static int cpu_notify_migration_log(int enable)
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct last_map {
|
||||
target_phys_addr_t start_addr;
|
||||
ram_addr_t size;
|
||||
ram_addr_t phys_offset;
|
||||
};
|
||||
|
||||
/* The l1_phys_map provides the upper P_L1_BITs of the guest physical
|
||||
* address. Each intermediate table provides the next L2_BITs of guest
|
||||
* physical address space. The number of levels vary based on host and
|
||||
* guest configuration, making it efficient to build the final guest
|
||||
* physical address by seeding the L1 offset and shifting and adding in
|
||||
* each L2 offset as we recurse through them. */
|
||||
static void phys_page_for_each_1(CPUPhysMemoryClient *client,
|
||||
int level, void **lp, target_phys_addr_t addr)
|
||||
static void phys_page_for_each_1(CPUPhysMemoryClient *client, int level,
|
||||
void **lp, target_phys_addr_t addr,
|
||||
struct last_map *map)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -1772,15 +1779,29 @@ static void phys_page_for_each_1(CPUPhysMemoryClient *client,
|
||||
addr <<= L2_BITS + TARGET_PAGE_BITS;
|
||||
for (i = 0; i < L2_SIZE; ++i) {
|
||||
if (pd[i].phys_offset != IO_MEM_UNASSIGNED) {
|
||||
client->set_memory(client, addr | i << TARGET_PAGE_BITS,
|
||||
TARGET_PAGE_SIZE, pd[i].phys_offset, false);
|
||||
target_phys_addr_t start_addr = addr | i << TARGET_PAGE_BITS;
|
||||
|
||||
if (map->size &&
|
||||
start_addr == map->start_addr + map->size &&
|
||||
pd[i].phys_offset == map->phys_offset + map->size) {
|
||||
|
||||
map->size += TARGET_PAGE_SIZE;
|
||||
continue;
|
||||
} else if (map->size) {
|
||||
client->set_memory(client, map->start_addr,
|
||||
map->size, map->phys_offset, false);
|
||||
}
|
||||
|
||||
map->start_addr = start_addr;
|
||||
map->size = TARGET_PAGE_SIZE;
|
||||
map->phys_offset = pd[i].phys_offset;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
void **pp = *lp;
|
||||
for (i = 0; i < L2_SIZE; ++i) {
|
||||
phys_page_for_each_1(client, level - 1, pp + i,
|
||||
(addr << L2_BITS) | i);
|
||||
(addr << L2_BITS) | i, map);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1788,9 +1809,15 @@ static void phys_page_for_each_1(CPUPhysMemoryClient *client,
|
||||
static void phys_page_for_each(CPUPhysMemoryClient *client)
|
||||
{
|
||||
int i;
|
||||
struct last_map map = { };
|
||||
|
||||
for (i = 0; i < P_L1_SIZE; ++i) {
|
||||
phys_page_for_each_1(client, P_L1_SHIFT / L2_BITS - 1,
|
||||
l1_phys_map + i, i);
|
||||
l1_phys_map + i, i, &map);
|
||||
}
|
||||
if (map.size) {
|
||||
client->set_memory(client, map.start_addr, map.size, map.phys_offset,
|
||||
false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -142,11 +142,7 @@ static int virtio_9p_init_pci(PCIDevice *pci_dev)
|
||||
|
||||
vdev = virtio_9p_init(&pci_dev->qdev, &proxy->fsconf);
|
||||
vdev->nvectors = proxy->nvectors;
|
||||
virtio_init_pci(proxy, vdev,
|
||||
PCI_VENDOR_ID_REDHAT_QUMRANET,
|
||||
0x1009,
|
||||
0x2,
|
||||
0x00);
|
||||
virtio_init_pci(proxy, vdev);
|
||||
/* make the actual value visible */
|
||||
proxy->nvectors = vdev->nvectors;
|
||||
return 0;
|
||||
@@ -156,6 +152,10 @@ static PCIDeviceInfo virtio_9p_info = {
|
||||
.qdev.name = "virtio-9p-pci",
|
||||
.qdev.size = sizeof(VirtIOPCIProxy),
|
||||
.init = virtio_9p_init_pci,
|
||||
.vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET,
|
||||
.device_id = 0x1009,
|
||||
.revision = VIRTIO_PCI_ABI_VERSION,
|
||||
.class_id = 0x2,
|
||||
.qdev.props = (Property[]) {
|
||||
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
|
||||
DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
|
||||
|
||||
@@ -1277,9 +1277,6 @@ static int ac97_initfn (PCIDevice *dev)
|
||||
AC97LinkState *s = DO_UPCAST (AC97LinkState, dev, dev);
|
||||
uint8_t *c = s->dev.config;
|
||||
|
||||
pci_config_set_vendor_id (c, PCI_VENDOR_ID_INTEL); /* ro */
|
||||
pci_config_set_device_id (c, PCI_DEVICE_ID_INTEL_82801AA_5); /* ro */
|
||||
|
||||
/* TODO: no need to override */
|
||||
c[PCI_COMMAND] = 0x00; /* pcicmd pci command rw, ro */
|
||||
c[PCI_COMMAND + 1] = 0x00;
|
||||
@@ -1288,9 +1285,7 @@ static int ac97_initfn (PCIDevice *dev)
|
||||
c[PCI_STATUS] = PCI_STATUS_FAST_BACK; /* pcists pci status rwc, ro */
|
||||
c[PCI_STATUS + 1] = PCI_STATUS_DEVSEL_MEDIUM >> 8;
|
||||
|
||||
c[PCI_REVISION_ID] = 0x01; /* rid revision ro */
|
||||
c[PCI_CLASS_PROG] = 0x00; /* pi programming interface ro */
|
||||
pci_config_set_class (c, PCI_CLASS_MULTIMEDIA_AUDIO); /* ro */
|
||||
|
||||
/* TODO set when bar is registered. no need to override. */
|
||||
/* nabmar native audio mixer base address rw */
|
||||
@@ -1337,6 +1332,10 @@ static PCIDeviceInfo ac97_info = {
|
||||
.qdev.size = sizeof (AC97LinkState),
|
||||
.qdev.vmsd = &vmstate_ac97,
|
||||
.init = ac97_initfn,
|
||||
.vendor_id = PCI_VENDOR_ID_INTEL,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82801AA_5,
|
||||
.revision = 0x01,
|
||||
.class_id = PCI_CLASS_MULTIMEDIA_AUDIO,
|
||||
};
|
||||
|
||||
static void ac97_register (void)
|
||||
|
||||
+4
-4
@@ -317,13 +317,9 @@ static int piix4_pm_initfn(PCIDevice *dev)
|
||||
uint8_t *pci_conf;
|
||||
|
||||
pci_conf = s->dev.config;
|
||||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL);
|
||||
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371AB_3);
|
||||
pci_conf[0x06] = 0x80;
|
||||
pci_conf[0x07] = 0x02;
|
||||
pci_conf[0x08] = 0x03; // revision number
|
||||
pci_conf[0x09] = 0x00;
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_OTHER);
|
||||
pci_conf[0x3d] = 0x01; // interrupt pin 1
|
||||
|
||||
pci_conf[0x40] = 0x01; /* PM io base read only bit */
|
||||
@@ -394,6 +390,10 @@ static PCIDeviceInfo piix4_pm_info = {
|
||||
.no_hotplug = 1,
|
||||
.init = piix4_pm_initfn,
|
||||
.config_write = pm_write_config,
|
||||
.vendor_id = PCI_VENDOR_ID_INTEL,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82371AB_3,
|
||||
.revision = 0x03,
|
||||
.class_id = PCI_CLASS_BRIDGE_OTHER,
|
||||
.qdev.props = (Property[]) {
|
||||
DEFINE_PROP_UINT32("smb_io_base", PIIX4PMState, smb_io_base, 0),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
|
||||
+6
-7
@@ -304,9 +304,6 @@ static int apb_pci_bridge_initfn(PCIDevice *dev)
|
||||
return rc;
|
||||
}
|
||||
|
||||
pci_config_set_vendor_id(dev->config, PCI_VENDOR_ID_SUN);
|
||||
pci_config_set_device_id(dev->config, PCI_DEVICE_ID_SUN_SIMBA);
|
||||
|
||||
/*
|
||||
* command register:
|
||||
* According to PCI bridge spec, after reset
|
||||
@@ -321,7 +318,6 @@ static int apb_pci_bridge_initfn(PCIDevice *dev)
|
||||
pci_set_word(dev->config + PCI_STATUS,
|
||||
PCI_STATUS_FAST_BACK | PCI_STATUS_66MHZ |
|
||||
PCI_STATUS_DEVSEL_MEDIUM);
|
||||
pci_set_byte(dev->config + PCI_REVISION_ID, 0x11);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -436,14 +432,11 @@ static int pci_pbm_init_device(SysBusDevice *dev)
|
||||
|
||||
static int pbm_pci_host_init(PCIDevice *d)
|
||||
{
|
||||
pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_SUN);
|
||||
pci_config_set_device_id(d->config, PCI_DEVICE_ID_SUN_SABRE);
|
||||
pci_set_word(d->config + PCI_COMMAND,
|
||||
PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
|
||||
pci_set_word(d->config + PCI_STATUS,
|
||||
PCI_STATUS_FAST_BACK | PCI_STATUS_66MHZ |
|
||||
PCI_STATUS_DEVSEL_MEDIUM);
|
||||
pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -451,6 +444,9 @@ static PCIDeviceInfo pbm_pci_host_info = {
|
||||
.qdev.name = "pbm",
|
||||
.qdev.size = sizeof(PCIDevice),
|
||||
.init = pbm_pci_host_init,
|
||||
.vendor_id = PCI_VENDOR_ID_SUN,
|
||||
.device_id = PCI_DEVICE_ID_SUN_SABRE,
|
||||
.class_id = PCI_CLASS_BRIDGE_HOST,
|
||||
.is_bridge = 1,
|
||||
};
|
||||
|
||||
@@ -468,6 +464,9 @@ static PCIDeviceInfo pbm_pci_bridge_info = {
|
||||
.qdev.reset = pci_bridge_reset,
|
||||
.init = apb_pci_bridge_initfn,
|
||||
.exit = pci_bridge_exitfn,
|
||||
.vendor_id = PCI_VENDOR_ID_SUN,
|
||||
.device_id = PCI_DEVICE_ID_SUN_SIMBA,
|
||||
.revision = 0x11,
|
||||
.config_write = pci_bridge_write_config,
|
||||
.is_bridge = 1,
|
||||
};
|
||||
|
||||
+5
-4
@@ -691,11 +691,7 @@ static int bonito_initfn(PCIDevice *dev)
|
||||
PCIBonitoState *s = DO_UPCAST(PCIBonitoState, dev, dev);
|
||||
|
||||
/* Bonito North Bridge, built on FPGA, VENDOR_ID/DEVICE_ID are "undefined" */
|
||||
pci_config_set_vendor_id(dev->config, 0xdf53);
|
||||
pci_config_set_device_id(dev->config, 0x00d5);
|
||||
pci_config_set_class(dev->config, PCI_CLASS_BRIDGE_HOST);
|
||||
pci_config_set_prog_interface(dev->config, 0x00);
|
||||
pci_config_set_revision(dev->config, 0x01);
|
||||
|
||||
/* set the north bridge register mapping */
|
||||
s->bonito_reg_handle = cpu_register_io_memory(bonito_read, bonito_write, s,
|
||||
@@ -796,6 +792,11 @@ static PCIDeviceInfo bonito_info = {
|
||||
.qdev.vmsd = &vmstate_bonito,
|
||||
.qdev.no_user = 1,
|
||||
.init = bonito_initfn,
|
||||
/*Bonito North Bridge, built on FPGA, VENDOR_ID/DEVICE_ID are "undefined"*/
|
||||
.vendor_id = 0xdf53,
|
||||
.device_id = 0x00d5,
|
||||
.revision = 0x01,
|
||||
.class_id = PCI_CLASS_BRIDGE_HOST,
|
||||
};
|
||||
|
||||
static SysBusDeviceInfo bonito_pcihost_info = {
|
||||
|
||||
+5
-5
@@ -3100,8 +3100,8 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev)
|
||||
{
|
||||
PCICirrusVGAState *d = DO_UPCAST(PCICirrusVGAState, dev, dev);
|
||||
CirrusVGAState *s = &d->cirrus_vga;
|
||||
uint8_t *pci_conf = d->dev.config;
|
||||
int device_id = CIRRUS_ID_CLGD5446;
|
||||
PCIDeviceInfo *info = DO_UPCAST(PCIDeviceInfo, qdev, dev->qdev.info);
|
||||
int16_t device_id = info->device_id;
|
||||
|
||||
/* setup VGA */
|
||||
vga_common_init(&s->vga, VGA_RAM_SIZE);
|
||||
@@ -3111,9 +3111,6 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev)
|
||||
&s->vga);
|
||||
|
||||
/* setup PCI */
|
||||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_CIRRUS);
|
||||
pci_config_set_device_id(pci_conf, device_id);
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_DISPLAY_VGA);
|
||||
|
||||
/* setup memory space */
|
||||
/* memory #0 LFB */
|
||||
@@ -3142,6 +3139,9 @@ static PCIDeviceInfo cirrus_vga_info = {
|
||||
.init = pci_cirrus_vga_initfn,
|
||||
.romfile = VGABIOS_CIRRUS_FILENAME,
|
||||
.config_write = pci_cirrus_write_config,
|
||||
.vendor_id = PCI_VENDOR_ID_CIRRUS,
|
||||
.device_id = CIRRUS_ID_CLGD5446,
|
||||
.class_id = PCI_CLASS_DISPLAY_VGA,
|
||||
};
|
||||
|
||||
static void cirrus_vga_register(void)
|
||||
|
||||
+7
-19
@@ -50,28 +50,16 @@ static int dec_map_irq(PCIDevice *pci_dev, int irq_num)
|
||||
return irq_num;
|
||||
}
|
||||
|
||||
static int dec_21154_initfn(PCIDevice *dev)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = pci_bridge_initfn(dev);
|
||||
if (rc < 0) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
pci_config_set_vendor_id(dev->config, PCI_VENDOR_ID_DEC);
|
||||
pci_config_set_device_id(dev->config, PCI_DEVICE_ID_DEC_21154);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static PCIDeviceInfo dec_21154_pci_bridge_info = {
|
||||
.qdev.name = "dec-21154-p2p-bridge",
|
||||
.qdev.desc = "DEC 21154 PCI-PCI bridge",
|
||||
.qdev.size = sizeof(PCIBridge),
|
||||
.qdev.vmsd = &vmstate_pci_device,
|
||||
.qdev.reset = pci_bridge_reset,
|
||||
.init = dec_21154_initfn,
|
||||
.init = pci_bridge_initfn,
|
||||
.exit = pci_bridge_exitfn,
|
||||
.vendor_id = PCI_VENDOR_ID_DEC,
|
||||
.device_id = PCI_DEVICE_ID_DEC_21154,
|
||||
.config_write = pci_bridge_write_config,
|
||||
.is_bridge = 1,
|
||||
};
|
||||
@@ -108,10 +96,6 @@ static int pci_dec_21154_init_device(SysBusDevice *dev)
|
||||
static int dec_21154_pci_host_init(PCIDevice *d)
|
||||
{
|
||||
/* PCI2PCI bridge same values as PearPC - check this */
|
||||
pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_DEC);
|
||||
pci_config_set_device_id(d->config, PCI_DEVICE_ID_DEC_21154);
|
||||
pci_set_byte(d->config + PCI_REVISION_ID, 0x02);
|
||||
pci_config_set_class(d->config, PCI_CLASS_BRIDGE_PCI);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -119,6 +103,10 @@ static PCIDeviceInfo dec_21154_pci_host_info = {
|
||||
.qdev.name = "dec-21154",
|
||||
.qdev.size = sizeof(PCIDevice),
|
||||
.init = dec_21154_pci_host_init,
|
||||
.vendor_id = PCI_VENDOR_ID_DEC,
|
||||
.device_id = PCI_DEVICE_ID_DEC_21154,
|
||||
.revision = 0x02,
|
||||
.class_id = PCI_CLASS_BRIDGE_PCI,
|
||||
.is_bridge = 1,
|
||||
};
|
||||
|
||||
|
||||
+4
-4
@@ -1164,12 +1164,8 @@ static int pci_e1000_init(PCIDevice *pci_dev)
|
||||
|
||||
pci_conf = d->dev.config;
|
||||
|
||||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL);
|
||||
pci_config_set_device_id(pci_conf, E1000_DEVID);
|
||||
/* TODO: we have no capabilities, so why is this bit set? */
|
||||
pci_set_word(pci_conf + PCI_STATUS, PCI_STATUS_CAP_LIST);
|
||||
pci_conf[PCI_REVISION_ID] = 0x03;
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET);
|
||||
/* TODO: RST# value should be 0, PCI spec 6.2.4 */
|
||||
pci_conf[PCI_CACHE_LINE_SIZE] = 0x10;
|
||||
|
||||
@@ -1221,6 +1217,10 @@ static PCIDeviceInfo e1000_info = {
|
||||
.init = pci_e1000_init,
|
||||
.exit = pci_e1000_uninit,
|
||||
.romfile = "pxe-e1000.rom",
|
||||
.vendor_id = PCI_VENDOR_ID_INTEL,
|
||||
.device_id = E1000_DEVID,
|
||||
.revision = 0x03,
|
||||
.class_id = PCI_CLASS_NETWORK_ETHERNET,
|
||||
.qdev.props = (Property[]) {
|
||||
DEFINE_NIC_PROPERTIES(E1000State, conf),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
|
||||
+33
-41
@@ -129,8 +129,6 @@
|
||||
typedef struct {
|
||||
PCIDeviceInfo pci;
|
||||
uint32_t device;
|
||||
uint16_t device_id;
|
||||
uint8_t revision;
|
||||
uint8_t stats_size;
|
||||
bool has_extended_tcb_support;
|
||||
bool power_management;
|
||||
@@ -526,16 +524,9 @@ static void e100_pci_reset(EEPRO100State * s, E100PCIDeviceInfo *e100_device)
|
||||
|
||||
TRACE(OTHER, logout("%p\n", s));
|
||||
|
||||
/* PCI Vendor ID */
|
||||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL);
|
||||
/* PCI Device ID */
|
||||
pci_config_set_device_id(pci_conf, e100_device->device_id);
|
||||
/* PCI Status */
|
||||
pci_set_word(pci_conf + PCI_STATUS, PCI_STATUS_DEVSEL_MEDIUM |
|
||||
PCI_STATUS_FAST_BACK);
|
||||
/* PCI Revision ID */
|
||||
pci_config_set_revision(pci_conf, e100_device->revision);
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET);
|
||||
/* PCI Latency Timer */
|
||||
pci_set_byte(pci_conf + PCI_LATENCY_TIMER, 0x20); /* latency timer = 32 clocks */
|
||||
/* Capability Pointer is set by PCI framework. */
|
||||
@@ -563,12 +554,7 @@ static void e100_pci_reset(EEPRO100State * s, E100PCIDeviceInfo *e100_device)
|
||||
case i82559ER:
|
||||
case i82562:
|
||||
case i82801:
|
||||
break;
|
||||
case i82559C:
|
||||
#if EEPROM_SIZE > 0
|
||||
pci_set_word(pci_conf + PCI_SUBSYSTEM_VENDOR_ID, PCI_VENDOR_ID_INTEL);
|
||||
pci_set_word(pci_conf + PCI_SUBSYSTEM_ID, 0x0040);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
logout("Device %X is undefined!\n", device);
|
||||
@@ -2040,9 +2026,9 @@ static E100PCIDeviceInfo e100_devices[] = {
|
||||
.pci.qdev.desc = "Intel i82550 Ethernet",
|
||||
.device = i82550,
|
||||
/* TODO: check device id. */
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82551IT,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82551IT,
|
||||
/* Revision ID: 0x0c, 0x0d, 0x0e. */
|
||||
.revision = 0x0e,
|
||||
.pci.revision = 0x0e,
|
||||
/* TODO: check size of statistical counters. */
|
||||
.stats_size = 80,
|
||||
/* TODO: check extended tcb support. */
|
||||
@@ -2052,9 +2038,9 @@ static E100PCIDeviceInfo e100_devices[] = {
|
||||
.pci.qdev.name = "i82551",
|
||||
.pci.qdev.desc = "Intel i82551 Ethernet",
|
||||
.device = i82551,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82551IT,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82551IT,
|
||||
/* Revision ID: 0x0f, 0x10. */
|
||||
.revision = 0x0f,
|
||||
.pci.revision = 0x0f,
|
||||
/* TODO: check size of statistical counters. */
|
||||
.stats_size = 80,
|
||||
.has_extended_tcb_support = true,
|
||||
@@ -2063,29 +2049,29 @@ static E100PCIDeviceInfo e100_devices[] = {
|
||||
.pci.qdev.name = "i82557a",
|
||||
.pci.qdev.desc = "Intel i82557A Ethernet",
|
||||
.device = i82557A,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.revision = 0x01,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.pci.revision = 0x01,
|
||||
.power_management = false,
|
||||
},{
|
||||
.pci.qdev.name = "i82557b",
|
||||
.pci.qdev.desc = "Intel i82557B Ethernet",
|
||||
.device = i82557B,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.revision = 0x02,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.pci.revision = 0x02,
|
||||
.power_management = false,
|
||||
},{
|
||||
.pci.qdev.name = "i82557c",
|
||||
.pci.qdev.desc = "Intel i82557C Ethernet",
|
||||
.device = i82557C,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.revision = 0x03,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.pci.revision = 0x03,
|
||||
.power_management = false,
|
||||
},{
|
||||
.pci.qdev.name = "i82558a",
|
||||
.pci.qdev.desc = "Intel i82558A Ethernet",
|
||||
.device = i82558A,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.revision = 0x04,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.pci.revision = 0x04,
|
||||
.stats_size = 76,
|
||||
.has_extended_tcb_support = true,
|
||||
.power_management = true,
|
||||
@@ -2093,8 +2079,8 @@ static E100PCIDeviceInfo e100_devices[] = {
|
||||
.pci.qdev.name = "i82558b",
|
||||
.pci.qdev.desc = "Intel i82558B Ethernet",
|
||||
.device = i82558B,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.revision = 0x05,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.pci.revision = 0x05,
|
||||
.stats_size = 76,
|
||||
.has_extended_tcb_support = true,
|
||||
.power_management = true,
|
||||
@@ -2102,8 +2088,8 @@ static E100PCIDeviceInfo e100_devices[] = {
|
||||
.pci.qdev.name = "i82559a",
|
||||
.pci.qdev.desc = "Intel i82559A Ethernet",
|
||||
.device = i82559A,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.revision = 0x06,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.pci.revision = 0x06,
|
||||
.stats_size = 80,
|
||||
.has_extended_tcb_support = true,
|
||||
.power_management = true,
|
||||
@@ -2111,8 +2097,8 @@ static E100PCIDeviceInfo e100_devices[] = {
|
||||
.pci.qdev.name = "i82559b",
|
||||
.pci.qdev.desc = "Intel i82559B Ethernet",
|
||||
.device = i82559B,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.revision = 0x07,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.pci.revision = 0x07,
|
||||
.stats_size = 80,
|
||||
.has_extended_tcb_support = true,
|
||||
.power_management = true,
|
||||
@@ -2120,12 +2106,16 @@ static E100PCIDeviceInfo e100_devices[] = {
|
||||
.pci.qdev.name = "i82559c",
|
||||
.pci.qdev.desc = "Intel i82559C Ethernet",
|
||||
.device = i82559C,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82557,
|
||||
#if 0
|
||||
.revision = 0x08,
|
||||
.pci.revision = 0x08,
|
||||
#endif
|
||||
/* TODO: Windows wants revision id 0x0c. */
|
||||
.revision = 0x0c,
|
||||
.pci.revision = 0x0c,
|
||||
#if EEPROM_SIZE > 0
|
||||
.pci.subsystem_vendor_id = PCI_VENDOR_ID_INTEL,
|
||||
.pci.subsystem_id = 0x0040,
|
||||
#endif
|
||||
.stats_size = 80,
|
||||
.has_extended_tcb_support = true,
|
||||
.power_management = true,
|
||||
@@ -2133,8 +2123,8 @@ static E100PCIDeviceInfo e100_devices[] = {
|
||||
.pci.qdev.name = "i82559er",
|
||||
.pci.qdev.desc = "Intel i82559ER Ethernet",
|
||||
.device = i82559ER,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82551IT,
|
||||
.revision = 0x09,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82551IT,
|
||||
.pci.revision = 0x09,
|
||||
.stats_size = 80,
|
||||
.has_extended_tcb_support = true,
|
||||
.power_management = true,
|
||||
@@ -2143,9 +2133,9 @@ static E100PCIDeviceInfo e100_devices[] = {
|
||||
.pci.qdev.desc = "Intel i82562 Ethernet",
|
||||
.device = i82562,
|
||||
/* TODO: check device id. */
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82551IT,
|
||||
.pci.device_id = PCI_DEVICE_ID_INTEL_82551IT,
|
||||
/* TODO: wrong revision id. */
|
||||
.revision = 0x0e,
|
||||
.pci.revision = 0x0e,
|
||||
.stats_size = 80,
|
||||
.has_extended_tcb_support = true,
|
||||
.power_management = true,
|
||||
@@ -2154,8 +2144,8 @@ static E100PCIDeviceInfo e100_devices[] = {
|
||||
.pci.qdev.name = "i82801",
|
||||
.pci.qdev.desc = "Intel i82801 Ethernet",
|
||||
.device = i82801,
|
||||
.device_id = 0x2449,
|
||||
.revision = 0x03,
|
||||
.pci.device_id = 0x2449,
|
||||
.pci.revision = 0x03,
|
||||
.stats_size = 80,
|
||||
.has_extended_tcb_support = true,
|
||||
.power_management = true,
|
||||
@@ -2174,6 +2164,8 @@ static void eepro100_register_devices(void)
|
||||
PCIDeviceInfo *pci_dev = &e100_devices[i].pci;
|
||||
/* We use the same rom file for all device ids.
|
||||
QEMU fixes the device id during rom load. */
|
||||
pci_dev->vendor_id = PCI_VENDOR_ID_INTEL;
|
||||
pci_dev->class_id = PCI_CLASS_NETWORK_ETHERNET;
|
||||
pci_dev->romfile = "pxe-eepro100.rom";
|
||||
pci_dev->init = e100_nic_init;
|
||||
pci_dev->exit = pci_nic_uninit;
|
||||
|
||||
+11
-13
@@ -998,21 +998,9 @@ static int es1370_initfn (PCIDevice *dev)
|
||||
ES1370State *s = DO_UPCAST (ES1370State, dev, dev);
|
||||
uint8_t *c = s->dev.config;
|
||||
|
||||
pci_config_set_vendor_id (c, PCI_VENDOR_ID_ENSONIQ);
|
||||
pci_config_set_device_id (c, PCI_DEVICE_ID_ENSONIQ_ES1370);
|
||||
c[PCI_STATUS + 1] = PCI_STATUS_DEVSEL_SLOW >> 8;
|
||||
pci_config_set_class (c, PCI_CLASS_MULTIMEDIA_AUDIO);
|
||||
|
||||
#if 1
|
||||
c[PCI_SUBSYSTEM_VENDOR_ID] = 0x42;
|
||||
c[PCI_SUBSYSTEM_VENDOR_ID + 1] = 0x49;
|
||||
c[PCI_SUBSYSTEM_ID] = 0x4c;
|
||||
c[PCI_SUBSYSTEM_ID + 1] = 0x4c;
|
||||
#else
|
||||
c[PCI_SUBSYSTEM_VENDOR_ID] = 0x74;
|
||||
c[PCI_SUBSYSTEM_VENDOR_ID + 1] = 0x12;
|
||||
c[PCI_SUBSYSTEM_ID] = 0x71;
|
||||
c[PCI_SUBSYSTEM_ID + 1] = 0x13;
|
||||
#if 0
|
||||
c[PCI_CAPABILITY_LIST] = 0xdc;
|
||||
c[PCI_INTERRUPT_LINE] = 10;
|
||||
c[0xdc] = 0x00;
|
||||
@@ -1043,6 +1031,16 @@ static PCIDeviceInfo es1370_info = {
|
||||
.qdev.size = sizeof (ES1370State),
|
||||
.qdev.vmsd = &vmstate_es1370,
|
||||
.init = es1370_initfn,
|
||||
.vendor_id = PCI_VENDOR_ID_ENSONIQ,
|
||||
.device_id = PCI_DEVICE_ID_ENSONIQ_ES1370,
|
||||
.class_id = PCI_CLASS_MULTIMEDIA_AUDIO,
|
||||
#if 1
|
||||
.subsystem_vendor_id = 0x4942,
|
||||
.subsystem_id = 0x4c4c,
|
||||
#else
|
||||
.subsystem_vendor_id = 0x1274,
|
||||
.subsystem_id = 0x1371,
|
||||
#endif
|
||||
};
|
||||
|
||||
static void es1370_register (void)
|
||||
|
||||
+4
-4
@@ -104,11 +104,7 @@ static int pci_grackle_init_device(SysBusDevice *dev)
|
||||
|
||||
static int grackle_pci_host_init(PCIDevice *d)
|
||||
{
|
||||
pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_MOTOROLA);
|
||||
pci_config_set_device_id(d->config, PCI_DEVICE_ID_MOTOROLA_MPC106);
|
||||
d->config[0x08] = 0x00; // revision
|
||||
d->config[0x09] = 0x01;
|
||||
pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -116,6 +112,10 @@ static PCIDeviceInfo grackle_pci_host_info = {
|
||||
.qdev.name = "grackle",
|
||||
.qdev.size = sizeof(PCIDevice),
|
||||
.init = grackle_pci_host_init,
|
||||
.vendor_id = PCI_VENDOR_ID_MOTOROLA,
|
||||
.device_id = PCI_DEVICE_ID_MOTOROLA_MPC106,
|
||||
.revision = 0x00,
|
||||
.class_id = PCI_CLASS_BRIDGE_HOST,
|
||||
};
|
||||
|
||||
static void grackle_register_devices(void)
|
||||
|
||||
+4
-4
@@ -1118,14 +1118,10 @@ static int gt64120_init(SysBusDevice *dev)
|
||||
static int gt64120_pci_init(PCIDevice *d)
|
||||
{
|
||||
/* FIXME: Malta specific hw assumptions ahead */
|
||||
pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_MARVELL);
|
||||
pci_config_set_device_id(d->config, PCI_DEVICE_ID_MARVELL_GT6412X);
|
||||
pci_set_word(d->config + PCI_COMMAND, 0);
|
||||
pci_set_word(d->config + PCI_STATUS,
|
||||
PCI_STATUS_FAST_BACK | PCI_STATUS_DEVSEL_MEDIUM);
|
||||
pci_set_byte(d->config + PCI_CLASS_REVISION, 0x10);
|
||||
pci_config_set_prog_interface(d->config, 0);
|
||||
pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST);
|
||||
pci_set_long(d->config + PCI_BASE_ADDRESS_0, 0x00000008);
|
||||
pci_set_long(d->config + PCI_BASE_ADDRESS_1, 0x01000008);
|
||||
pci_set_long(d->config + PCI_BASE_ADDRESS_2, 0x1c000000);
|
||||
@@ -1141,6 +1137,10 @@ static PCIDeviceInfo gt64120_pci_info = {
|
||||
.qdev.name = "gt64120_pci",
|
||||
.qdev.size = sizeof(PCIDevice),
|
||||
.init = gt64120_pci_init,
|
||||
.vendor_id = PCI_VENDOR_ID_MARVELL,
|
||||
.device_id = PCI_DEVICE_ID_MARVELL_GT6412X,
|
||||
.revision = 0x10,
|
||||
.class_id = PCI_CLASS_BRIDGE_HOST,
|
||||
};
|
||||
|
||||
static void gt64120_pci_register_devices(void)
|
||||
|
||||
+4
-6
@@ -226,14 +226,8 @@ static int pci_cmd646_ide_initfn(PCIDevice *dev)
|
||||
qemu_irq *irq;
|
||||
int i;
|
||||
|
||||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_CMD);
|
||||
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_CMD_646);
|
||||
|
||||
pci_conf[PCI_REVISION_ID] = 0x07; // IDE controller revision
|
||||
pci_conf[PCI_CLASS_PROG] = 0x8f;
|
||||
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE);
|
||||
|
||||
pci_conf[0x51] = 0x04; // enable IDE0
|
||||
if (d->secondary) {
|
||||
/* XXX: if not enabled, really disable the seconday IDE controller */
|
||||
@@ -282,6 +276,10 @@ static PCIDeviceInfo cmd646_ide_info[] = {
|
||||
.qdev.name = "cmd646-ide",
|
||||
.qdev.size = sizeof(PCIIDEState),
|
||||
.init = pci_cmd646_ide_initfn,
|
||||
.vendor_id = PCI_VENDOR_ID_CMD,
|
||||
.device_id = PCI_DEVICE_ID_CMD_646,
|
||||
.revision = 0x07, // IDE controller revision
|
||||
.class_id = PCI_CLASS_STORAGE_IDE,
|
||||
.qdev.props = (Property[]) {
|
||||
DEFINE_PROP_UINT32("secondary", PCIIDEState, secondary, 0),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
|
||||
+5
-6
@@ -77,11 +77,8 @@ static int pci_ich9_ahci_init(PCIDevice *dev)
|
||||
struct AHCIPCIState *d;
|
||||
d = DO_UPCAST(struct AHCIPCIState, card, dev);
|
||||
|
||||
pci_config_set_vendor_id(d->card.config, PCI_VENDOR_ID_INTEL);
|
||||
pci_config_set_device_id(d->card.config, PCI_DEVICE_ID_INTEL_82801IR);
|
||||
ahci_init(&d->ahci, &dev->qdev, 6);
|
||||
|
||||
pci_config_set_class(d->card.config, PCI_CLASS_STORAGE_SATA);
|
||||
pci_config_set_revision(d->card.config, 0x02);
|
||||
pci_config_set_prog_interface(d->card.config, AHCI_PROGMODE_MAJOR_REV_1);
|
||||
|
||||
d->card.config[PCI_CACHE_LINE_SIZE] = 0x08; /* Cache line size */
|
||||
@@ -94,8 +91,6 @@ static int pci_ich9_ahci_init(PCIDevice *dev)
|
||||
qemu_register_reset(ahci_reset, d);
|
||||
|
||||
msi_init(dev, 0x50, 1, true, false);
|
||||
|
||||
ahci_init(&d->ahci, &dev->qdev, 6);
|
||||
d->ahci.irq = d->card.irq[0];
|
||||
|
||||
/* XXX BAR size should be 1k, but that breaks, so bump it to 4k for now */
|
||||
@@ -131,6 +126,10 @@ static PCIDeviceInfo ich_ahci_info[] = {
|
||||
.init = pci_ich9_ahci_init,
|
||||
.exit = pci_ich9_uninit,
|
||||
.config_write = pci_ich9_write_config,
|
||||
.vendor_id = PCI_VENDOR_ID_INTEL,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82801IR,
|
||||
.revision = 0x02,
|
||||
.class_id = PCI_CLASS_STORAGE_SATA,
|
||||
},{
|
||||
/* end of list */
|
||||
}
|
||||
|
||||
+10
-22
@@ -131,12 +131,12 @@ static void pci_piix_init_ports(PCIIDEState *d) {
|
||||
}
|
||||
}
|
||||
|
||||
static int pci_piix_ide_initfn(PCIIDEState *d)
|
||||
static int pci_piix_ide_initfn(PCIDevice *dev)
|
||||
{
|
||||
PCIIDEState *d = DO_UPCAST(PCIIDEState, dev, dev);
|
||||
uint8_t *pci_conf = d->dev.config;
|
||||
|
||||
pci_conf[PCI_CLASS_PROG] = 0x80; // legacy ATA mode
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE);
|
||||
|
||||
qemu_register_reset(piix3_reset, d);
|
||||
|
||||
@@ -149,24 +149,6 @@ static int pci_piix_ide_initfn(PCIIDEState *d)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pci_piix3_ide_initfn(PCIDevice *dev)
|
||||
{
|
||||
PCIIDEState *d = DO_UPCAST(PCIIDEState, dev, dev);
|
||||
|
||||
pci_config_set_vendor_id(d->dev.config, PCI_VENDOR_ID_INTEL);
|
||||
pci_config_set_device_id(d->dev.config, PCI_DEVICE_ID_INTEL_82371SB_1);
|
||||
return pci_piix_ide_initfn(d);
|
||||
}
|
||||
|
||||
static int pci_piix4_ide_initfn(PCIDevice *dev)
|
||||
{
|
||||
PCIIDEState *d = DO_UPCAST(PCIIDEState, dev, dev);
|
||||
|
||||
pci_config_set_vendor_id(d->dev.config, PCI_VENDOR_ID_INTEL);
|
||||
pci_config_set_device_id(d->dev.config, PCI_DEVICE_ID_INTEL_82371AB);
|
||||
return pci_piix_ide_initfn(d);
|
||||
}
|
||||
|
||||
/* hd_table must contain 4 block drivers */
|
||||
/* NOTE: for the PIIX3, the IRQs and IOports are hardcoded */
|
||||
PCIDevice *pci_piix3_ide_init(PCIBus *bus, DriveInfo **hd_table, int devfn)
|
||||
@@ -195,13 +177,19 @@ static PCIDeviceInfo piix_ide_info[] = {
|
||||
.qdev.size = sizeof(PCIIDEState),
|
||||
.qdev.no_user = 1,
|
||||
.no_hotplug = 1,
|
||||
.init = pci_piix3_ide_initfn,
|
||||
.init = pci_piix_ide_initfn,
|
||||
.vendor_id = PCI_VENDOR_ID_INTEL,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82371SB_1,
|
||||
.class_id = PCI_CLASS_STORAGE_IDE,
|
||||
},{
|
||||
.qdev.name = "piix4-ide",
|
||||
.qdev.size = sizeof(PCIIDEState),
|
||||
.qdev.no_user = 1,
|
||||
.no_hotplug = 1,
|
||||
.init = pci_piix4_ide_initfn,
|
||||
.init = pci_piix_ide_initfn,
|
||||
.vendor_id = PCI_VENDOR_ID_INTEL,
|
||||
.device_id = PCI_DEVICE_ID_INTEL_82371AB,
|
||||
.class_id = PCI_CLASS_STORAGE_IDE,
|
||||
},{
|
||||
/* end of list */
|
||||
}
|
||||
|
||||
+4
-4
@@ -160,11 +160,7 @@ static int vt82c686b_ide_initfn(PCIDevice *dev)
|
||||
PCIIDEState *d = DO_UPCAST(PCIIDEState, dev, dev);;
|
||||
uint8_t *pci_conf = d->dev.config;
|
||||
|
||||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_VIA);
|
||||
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_VIA_IDE);
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE);
|
||||
pci_config_set_prog_interface(pci_conf, 0x8a); /* legacy ATA mode */
|
||||
pci_config_set_revision(pci_conf,0x06); /* Revision 0.6 */
|
||||
pci_set_long(pci_conf + PCI_CAPABILITY_LIST, 0x000000c0);
|
||||
|
||||
qemu_register_reset(via_reset, d);
|
||||
@@ -191,6 +187,10 @@ static PCIDeviceInfo via_ide_info = {
|
||||
.qdev.size = sizeof(PCIIDEState),
|
||||
.qdev.no_user = 1,
|
||||
.init = vt82c686b_ide_initfn,
|
||||
.vendor_id = PCI_VENDOR_ID_VIA,
|
||||
.device_id = PCI_DEVICE_ID_VIA_IDE,
|
||||
.revision = 0x06,
|
||||
.class_id = PCI_CLASS_STORAGE_IDE,
|
||||
};
|
||||
|
||||
static void via_ide_register(void)
|
||||
|
||||
+4
-4
@@ -1138,10 +1138,6 @@ static int intel_hda_init(PCIDevice *pci)
|
||||
|
||||
d->name = d->pci.qdev.info->name;
|
||||
|
||||
pci_config_set_vendor_id(conf, PCI_VENDOR_ID_INTEL);
|
||||
pci_config_set_device_id(conf, 0x2668);
|
||||
pci_config_set_revision(conf, 1);
|
||||
pci_config_set_class(conf, PCI_CLASS_MULTIMEDIA_HD_AUDIO);
|
||||
pci_config_set_interrupt_pin(conf, 1);
|
||||
|
||||
/* HDCTL off 0x40 bit 0 selects signaling mode (1-HDA, 0 - Ac97) 18.1.19 */
|
||||
@@ -1265,6 +1261,10 @@ static PCIDeviceInfo intel_hda_info = {
|
||||
.init = intel_hda_init,
|
||||
.exit = intel_hda_exit,
|
||||
.config_write = intel_hda_write_config,
|
||||
.vendor_id = PCI_VENDOR_ID_INTEL,
|
||||
.device_id = 0x2668,
|
||||
.revision = 1,
|
||||
.class_id = PCI_CLASS_MULTIMEDIA_HD_AUDIO,
|
||||
.qdev.props = (Property[]) {
|
||||
DEFINE_PROP_UINT32("debug", IntelHDAState, debug, 0),
|
||||
DEFINE_PROP_UINT32("msi", IntelHDAState, msi, 1),
|
||||
|
||||
+3
-4
@@ -104,12 +104,8 @@ static int ioh3420_initfn(PCIDevice *d)
|
||||
return rc;
|
||||
}
|
||||
|
||||
d->config[PCI_REVISION_ID] = PCI_DEVICE_ID_IOH_REV;
|
||||
pcie_port_init_reg(d);
|
||||
|
||||
pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_INTEL);
|
||||
pci_config_set_device_id(d->config, PCI_DEVICE_ID_IOH_EPORT);
|
||||
|
||||
rc = pci_bridge_ssvid_init(d, IOH_EP_SSVID_OFFSET,
|
||||
IOH_EP_SSVID_SVID, IOH_EP_SSVID_SSID);
|
||||
if (rc < 0) {
|
||||
@@ -217,6 +213,9 @@ static PCIDeviceInfo ioh3420_info = {
|
||||
.config_write = ioh3420_write_config,
|
||||
.init = ioh3420_initfn,
|
||||
.exit = ioh3420_exitfn,
|
||||
.vendor_id = PCI_VENDOR_ID_INTEL,
|
||||
.device_id = PCI_DEVICE_ID_IOH_EPORT,
|
||||
.revision = PCI_DEVICE_ID_IOH_REV,
|
||||
|
||||
.qdev.props = (Property[]) {
|
||||
DEFINE_PROP_UINT8("port", PCIESlot, port.port, 0),
|
||||
|
||||
+3
-5
@@ -706,12 +706,7 @@ static int pci_ivshmem_init(PCIDevice *dev)
|
||||
}
|
||||
|
||||
pci_conf = s->dev.config;
|
||||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_REDHAT_QUMRANET);
|
||||
pci_conf[0x02] = 0x10;
|
||||
pci_conf[0x03] = 0x11;
|
||||
pci_conf[PCI_COMMAND] = PCI_COMMAND_IO | PCI_COMMAND_MEMORY;
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_MEMORY_RAM);
|
||||
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL;
|
||||
|
||||
pci_config_set_interrupt_pin(pci_conf, 1);
|
||||
|
||||
@@ -809,6 +804,9 @@ static PCIDeviceInfo ivshmem_info = {
|
||||
.qdev.reset = ivshmem_reset,
|
||||
.init = pci_ivshmem_init,
|
||||
.exit = pci_ivshmem_uninit,
|
||||
.vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET,
|
||||
.device_id = 0x1110,
|
||||
.class_id = PCI_CLASS_MEMORY_RAM,
|
||||
.qdev.props = (Property[]) {
|
||||
DEFINE_PROP_CHR("chardev", IVShmemState, server_chr),
|
||||
DEFINE_PROP_STRING("size", IVShmemState, sizearg),
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user