Commit 173a543b36d0b2491438cf1dcc2c7bb34d59bb5c
1 parent
4ebcf884
Add and use #defines for PCI device classes
This patch adds and uses #defines for PCI device classes and subclases, using a new pci_config_set_class() function, similar to the recently added pci_config_set_vendor_id() and pci_config_set_device_id(). Change since v1: fixed compilation of hw/sun4u.c Signed-off-by: Stuart Brady <stuart.brady@gmail.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6491 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
34 changed files
with
81 additions
and
86 deletions
hw/ac97.c
... | ... | @@ -1347,8 +1347,7 @@ int ac97_init (PCIBus *bus, AudioState *audio) |
1347 | 1347 | |
1348 | 1348 | c[0x08] = 0x01; /* rid revision ro */ |
1349 | 1349 | c[0x09] = 0x00; /* pi programming interface ro */ |
1350 | - c[0x0a] = 0x01; /* scc sub class code ro */ | |
1351 | - c[0x0b] = 0x04; /* bcc base class code ro */ | |
1350 | + pci_config_set_class(c, PCI_CLASS_MULTIMEDIA_AUDIO); /* ro */ | |
1352 | 1351 | c[0x0e] = 0x00; /* headtyp header type ro */ |
1353 | 1352 | |
1354 | 1353 | c[0x10] = 0x01; /* nabmar native audio mixer base | ... | ... |
hw/acpi.c
... | ... | @@ -509,8 +509,7 @@ i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, |
509 | 509 | pci_conf[0x07] = 0x02; |
510 | 510 | pci_conf[0x08] = 0x03; // revision number |
511 | 511 | pci_conf[0x09] = 0x00; |
512 | - pci_conf[0x0a] = 0x80; // other bridge device | |
513 | - pci_conf[0x0b] = 0x06; // bridge device | |
512 | + pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_OTHER); | |
514 | 513 | pci_conf[0x0e] = 0x00; // header_type |
515 | 514 | pci_conf[0x3d] = 0x01; // interrupt pin 1 |
516 | 515 | ... | ... |
hw/apb_pci.c
... | ... | @@ -260,8 +260,7 @@ PCIBus *pci_apb_init(target_phys_addr_t special_base, |
260 | 260 | d->config[0x07] = 0x03; // status = medium devsel |
261 | 261 | d->config[0x08] = 0x00; // revision |
262 | 262 | d->config[0x09] = 0x00; // programming i/f |
263 | - d->config[0x0A] = 0x00; // class_sub = pci host | |
264 | - d->config[0x0B] = 0x06; // class_base = PCI_bridge | |
263 | + pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST); | |
265 | 264 | d->config[0x0D] = 0x10; // latency_timer |
266 | 265 | d->config[0x0E] = 0x00; // header_type |
267 | 266 | ... | ... |
hw/cirrus_vga.c
... | ... | @@ -3378,8 +3378,7 @@ void pci_cirrus_vga_init(PCIBus *bus, uint8_t *vga_ram_base, |
3378 | 3378 | pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_CIRRUS); |
3379 | 3379 | pci_config_set_device_id(pci_conf, device_id); |
3380 | 3380 | pci_conf[0x04] = PCI_COMMAND_IOACCESS | PCI_COMMAND_MEMACCESS; |
3381 | - pci_conf[0x0a] = PCI_CLASS_SUB_VGA; | |
3382 | - pci_conf[0x0b] = PCI_CLASS_BASE_DISPLAY; | |
3381 | + pci_config_set_class(pci_conf, PCI_CLASS_DISPLAY_VGA); | |
3383 | 3382 | pci_conf[0x0e] = PCI_CLASS_HEADERTYPE_00h; |
3384 | 3383 | |
3385 | 3384 | /* setup VGA */ | ... | ... |
hw/e1000.c
... | ... | @@ -1054,8 +1054,7 @@ pci_e1000_init(PCIBus *bus, NICInfo *nd, int devfn) |
1054 | 1054 | *(uint16_t *)(pci_conf+0x04) = cpu_to_le16(0x0407); |
1055 | 1055 | *(uint16_t *)(pci_conf+0x06) = cpu_to_le16(0x0010); |
1056 | 1056 | pci_conf[0x08] = 0x03; |
1057 | - pci_conf[0x0a] = 0x00; // ethernet network controller | |
1058 | - pci_conf[0x0b] = 0x02; | |
1057 | + pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET); | |
1059 | 1058 | pci_conf[0x0c] = 0x10; |
1060 | 1059 | |
1061 | 1060 | pci_conf[0x3d] = 1; // interrupt pin 0 | ... | ... |
hw/eepro100.c
... | ... | @@ -433,8 +433,7 @@ static void pci_reset(EEPRO100State * s) |
433 | 433 | PCI_CONFIG_8(PCI_REVISION_ID, 0x08); |
434 | 434 | /* PCI Class Code */ |
435 | 435 | PCI_CONFIG_8(0x09, 0x00); |
436 | - PCI_CONFIG_8(PCI_SUBCLASS_CODE, 0x00); // ethernet network controller | |
437 | - PCI_CONFIG_8(PCI_CLASS_CODE, 0x02); // network controller | |
436 | + pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET); | |
438 | 437 | /* PCI Cache Line Size */ |
439 | 438 | /* check cache line size!!! */ |
440 | 439 | //~ PCI_CONFIG_8(0x0c, 0x00); | ... | ... |
hw/es1370.c
... | ... | @@ -1034,8 +1034,7 @@ int es1370_init (PCIBus *bus, AudioState *audio) |
1034 | 1034 | pci_config_set_vendor_id(c, PCI_VENDOR_ID_ENSONIQ); |
1035 | 1035 | pci_config_set_device_id(c, PCI_DEVICE_ID_ENSONIQ_ES1370); |
1036 | 1036 | c[0x07] = 2 << 1; |
1037 | - c[0x0a] = 0x01; | |
1038 | - c[0x0b] = 0x04; | |
1037 | + pci_config_set_class(c, PCI_CLASS_MULTIMEDIA_AUDIO); | |
1039 | 1038 | |
1040 | 1039 | #if 1 |
1041 | 1040 | c[0x2c] = 0x42; | ... | ... |
hw/grackle_pci.c
... | ... | @@ -148,8 +148,7 @@ PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic) |
148 | 148 | pci_config_set_device_id(d->config, PCI_DEVICE_ID_MOTOROLA_MPC106); |
149 | 149 | d->config[0x08] = 0x00; // revision |
150 | 150 | d->config[0x09] = 0x01; |
151 | - d->config[0x0a] = 0x00; // class_sub = host | |
152 | - d->config[0x0b] = 0x06; // class_base = PCI_bridge | |
151 | + pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST); | |
153 | 152 | d->config[0x0e] = 0x00; // header_type |
154 | 153 | |
155 | 154 | #if 0 |
... | ... | @@ -157,8 +156,7 @@ PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic) |
157 | 156 | pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_DEC); |
158 | 157 | pci_config_set_device_id(d->config, PCI_DEVICE_ID_DEC_21154); |
159 | 158 | d->config[0x08] = 0x02; // revision |
160 | - d->config[0x0a] = 0x04; // class_sub = pci2pci | |
161 | - d->config[0x0b] = 0x06; // class_base = PCI_bridge | |
159 | + pci_config_set_class(d->config, PCI_CLASS_BRIDGE_PCI); | |
162 | 160 | d->config[0x0e] = 0x01; // header_type |
163 | 161 | |
164 | 162 | d->config[0x18] = 0x0; // primary_bus | ... | ... |
hw/gt64xxx.c
... | ... | @@ -1146,8 +1146,7 @@ PCIBus *pci_gt64120_init(qemu_irq *pic) |
1146 | 1146 | |
1147 | 1147 | d->config[0x08] = 0x10; |
1148 | 1148 | d->config[0x09] = 0x00; |
1149 | - d->config[0x0A] = 0x00; | |
1150 | - d->config[0x0B] = 0x06; | |
1149 | + pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST); | |
1151 | 1150 | |
1152 | 1151 | d->config[0x10] = 0x08; |
1153 | 1152 | d->config[0x14] = 0x08; | ... | ... |
hw/ide.c
... | ... | @@ -3353,8 +3353,7 @@ void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table, |
3353 | 3353 | pci_conf[0x08] = 0x07; // IDE controller revision |
3354 | 3354 | pci_conf[0x09] = 0x8f; |
3355 | 3355 | |
3356 | - pci_conf[0x0a] = 0x01; // class_sub = PCI_IDE | |
3357 | - pci_conf[0x0b] = 0x01; // class_base = PCI_mass_storage | |
3356 | + pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE); | |
3358 | 3357 | pci_conf[0x0e] = 0x00; // header_type |
3359 | 3358 | |
3360 | 3359 | pci_conf[0x51] = 0x04; // enable IDE0 |
... | ... | @@ -3423,8 +3422,7 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn, |
3423 | 3422 | pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL); |
3424 | 3423 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371SB_1); |
3425 | 3424 | pci_conf[0x09] = 0x80; // legacy ATA mode |
3426 | - pci_conf[0x0a] = 0x01; // class_sub = PCI_IDE | |
3427 | - pci_conf[0x0b] = 0x01; // class_base = PCI_mass_storage | |
3425 | + pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE); | |
3428 | 3426 | pci_conf[0x0e] = 0x00; // header_type |
3429 | 3427 | |
3430 | 3428 | qemu_register_reset(piix3_reset, d); |
... | ... | @@ -3460,8 +3458,7 @@ void pci_piix4_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn, |
3460 | 3458 | pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL); |
3461 | 3459 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371AB); |
3462 | 3460 | pci_conf[0x09] = 0x80; // legacy ATA mode |
3463 | - pci_conf[0x0a] = 0x01; // class_sub = PCI_IDE | |
3464 | - pci_conf[0x0b] = 0x01; // class_base = PCI_mass_storage | |
3461 | + pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE); | |
3465 | 3462 | pci_conf[0x0e] = 0x00; // header_type |
3466 | 3463 | |
3467 | 3464 | qemu_register_reset(piix3_reset, d); | ... | ... |
hw/lsi53c895a.c
... | ... | @@ -1979,7 +1979,7 @@ void *lsi_scsi_init(PCIBus *bus, int devfn) |
1979 | 1979 | /* PCI device ID (word) */ |
1980 | 1980 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_LSI_53C895A); |
1981 | 1981 | /* PCI base class code */ |
1982 | - pci_conf[0x0b] = 0x01; | |
1982 | + pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_SCSI); | |
1983 | 1983 | /* PCI subsystem ID */ |
1984 | 1984 | pci_conf[0x2e] = 0x00; |
1985 | 1985 | pci_conf[0x2f] = 0x10; | ... | ... |
hw/macio.c
... | ... | @@ -109,9 +109,7 @@ void macio_init (PCIBus *bus, int device_id, int is_oldworld, int pic_mem_index, |
109 | 109 | |
110 | 110 | pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_APPLE); |
111 | 111 | pci_config_set_device_id(d->config, device_id); |
112 | - | |
113 | - d->config[0x0a] = 0x00; // class_sub = pci2pci | |
114 | - d->config[0x0b] = 0xff; // class_base = bridge | |
112 | + pci_config_set_class(d->config, PCI_CLASS_OTHERS << 8); | |
115 | 113 | d->config[0x0e] = 0x00; // header_type |
116 | 114 | |
117 | 115 | d->config[0x3d] = 0x01; // interrupt on pin 1 | ... | ... |
hw/ne2000.c
... | ... | @@ -792,8 +792,7 @@ void pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn) |
792 | 792 | pci_conf = d->dev.config; |
793 | 793 | pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_REALTEK); |
794 | 794 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_REALTEK_RTL8029); |
795 | - pci_conf[0x0a] = 0x00; // ethernet network controller | |
796 | - pci_conf[0x0b] = 0x02; | |
795 | + pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET); | |
797 | 796 | pci_conf[0x0e] = 0x00; // header_type |
798 | 797 | pci_conf[0x3d] = 1; // interrupt pin 0 |
799 | 798 | ... | ... |
hw/openpic.c
... | ... | @@ -1019,8 +1019,7 @@ qemu_irq *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus, |
1019 | 1019 | pci_conf = opp->pci_dev.config; |
1020 | 1020 | pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_IBM); |
1021 | 1021 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_IBM_OPENPIC2); |
1022 | - pci_conf[0x0a] = 0x80; // PIC | |
1023 | - pci_conf[0x0b] = 0x08; | |
1022 | + pci_config_set_class(pci_conf, PCI_CLASS_SYSTEM_OTHER); // FIXME? | |
1024 | 1023 | pci_conf[0x0e] = 0x00; // header_type |
1025 | 1024 | pci_conf[0x3d] = 0x00; // no interrupt pin |
1026 | 1025 | ... | ... |
hw/pci.c
... | ... | @@ -729,8 +729,7 @@ PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did, |
729 | 729 | s->dev.config[0x07] = 0x00; // status = fast devsel |
730 | 730 | s->dev.config[0x08] = 0x00; // revision |
731 | 731 | s->dev.config[0x09] = 0x00; // programming i/f |
732 | - s->dev.config[0x0A] = 0x04; // class_sub = PCI to PCI bridge | |
733 | - s->dev.config[0x0B] = 0x06; // class_base = PCI_bridge | |
732 | + pci_config_set_class(s->dev.config, PCI_CLASS_BRIDGE_PCI); | |
734 | 733 | s->dev.config[0x0D] = 0x10; // latency_timer |
735 | 734 | s->dev.config[0x0E] = 0x81; // header_type |
736 | 735 | s->dev.config[0x1E] = 0xa0; // secondary status | ... | ... |
hw/pci.h
... | ... | @@ -8,6 +8,36 @@ |
8 | 8 | |
9 | 9 | extern target_phys_addr_t pci_mem_base; |
10 | 10 | |
11 | +/* Device classes and subclasses */ | |
12 | + | |
13 | +#define PCI_CLASS_STORAGE_SCSI 0x0100 | |
14 | +#define PCI_CLASS_STORAGE_IDE 0x0101 | |
15 | +#define PCI_CLASS_STORAGE_OTHER 0x0180 | |
16 | + | |
17 | +#define PCI_CLASS_NETWORK_ETHERNET 0x0200 | |
18 | + | |
19 | +#define PCI_CLASS_DISPLAY_VGA 0x0300 | |
20 | +#define PCI_CLASS_DISPLAY_OTHER 0x0380 | |
21 | + | |
22 | +#define PCI_CLASS_MULTIMEDIA_AUDIO 0x0401 | |
23 | + | |
24 | +#define PCI_CLASS_MEMORY_RAM 0x0500 | |
25 | + | |
26 | +#define PCI_CLASS_SYSTEM_OTHER 0x0880 | |
27 | + | |
28 | +#define PCI_CLASS_SERIAL_USB 0x0c03 | |
29 | + | |
30 | +#define PCI_CLASS_BRIDGE_HOST 0x0600 | |
31 | +#define PCI_CLASS_BRIDGE_ISA 0x0601 | |
32 | +#define PCI_CLASS_BRIDGE_PCI 0x0604 | |
33 | +#define PCI_CLASS_BRIDGE_OTHER 0x0680 | |
34 | + | |
35 | +#define PCI_CLASS_PROCESSOR_CO 0x0b40 | |
36 | + | |
37 | +#define PCI_CLASS_OTHERS 0xff | |
38 | + | |
39 | +/* Vendors and devices. */ | |
40 | + | |
11 | 41 | #define PCI_VENDOR_ID_LSI_LOGIC 0x1000 |
12 | 42 | #define PCI_DEVICE_ID_LSI_53C895A 0x0012 |
13 | 43 | |
... | ... | @@ -209,6 +239,12 @@ pci_config_set_device_id(uint8_t *pci_config, uint16_t val) |
209 | 239 | cpu_to_le16wu((uint16_t *)&pci_config[PCI_DEVICE_ID], val); |
210 | 240 | } |
211 | 241 | |
242 | +static inline void | |
243 | +pci_config_set_class(uint8_t *pci_config, uint16_t val) | |
244 | +{ | |
245 | + cpu_to_le16wu((uint16_t *)&pci_config[PCI_CLASS_DEVICE], val); | |
246 | +} | |
247 | + | |
212 | 248 | /* lsi53c895a.c */ |
213 | 249 | #define LSI_MAX_DEVS 7 |
214 | 250 | void lsi_scsi_attach(void *opaque, BlockDriverState *bd, int id); | ... | ... |
hw/pcnet.c
... | ... | @@ -2006,8 +2006,7 @@ void pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn) |
2006 | 2006 | *(uint16_t *)&pci_conf[0x06] = cpu_to_le16(0x0280); |
2007 | 2007 | pci_conf[0x08] = 0x10; |
2008 | 2008 | pci_conf[0x09] = 0x00; |
2009 | - pci_conf[0x0a] = 0x00; // ethernet network controller | |
2010 | - pci_conf[0x0b] = 0x02; | |
2009 | + pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET); | |
2011 | 2010 | pci_conf[0x0e] = 0x00; // header_type |
2012 | 2011 | |
2013 | 2012 | *(uint32_t *)&pci_conf[0x10] = cpu_to_le32(0x00000001); | ... | ... |
hw/piix_pci.c
... | ... | @@ -195,8 +195,7 @@ PCIBus *i440fx_init(PCIDevice **pi440fx_state, qemu_irq *pic) |
195 | 195 | pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_INTEL); |
196 | 196 | pci_config_set_device_id(d->config, PCI_DEVICE_ID_INTEL_82441); |
197 | 197 | d->config[0x08] = 0x02; // revision |
198 | - d->config[0x0a] = 0x00; // class_sub = host2pci | |
199 | - d->config[0x0b] = 0x06; // class_base = PCI_bridge | |
198 | + pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST); | |
200 | 199 | d->config[0x0e] = 0x00; // header_type |
201 | 200 | |
202 | 201 | d->config[0x72] = 0x02; /* SMRAM */ |
... | ... | @@ -337,8 +336,7 @@ int piix3_init(PCIBus *bus, int devfn) |
337 | 336 | |
338 | 337 | pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL); |
339 | 338 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371SB_0); // 82371SB PIIX3 PCI-to-ISA bridge (Step A1) |
340 | - pci_conf[0x0a] = 0x01; // class_sub = PCI_ISA | |
341 | - pci_conf[0x0b] = 0x06; // class_base = PCI_bridge | |
339 | + pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_ISA); | |
342 | 340 | pci_conf[0x0e] = 0x80; // header_type = PCI_multifunction, generic |
343 | 341 | |
344 | 342 | piix3_reset(d); |
... | ... | @@ -359,8 +357,7 @@ int piix4_init(PCIBus *bus, int devfn) |
359 | 357 | |
360 | 358 | pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL); |
361 | 359 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371AB_0); // 82371AB/EB/MB PIIX4 PCI-to-ISA bridge |
362 | - pci_conf[0x0a] = 0x01; // class_sub = PCI_ISA | |
363 | - pci_conf[0x0b] = 0x06; // class_base = PCI_bridge | |
360 | + pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_ISA); | |
364 | 361 | pci_conf[0x0e] = 0x80; // header_type = PCI_multifunction, generic |
365 | 362 | |
366 | 363 | piix4_reset(d); | ... | ... |
hw/ppc4xx_pci.c
... | ... | @@ -382,8 +382,7 @@ PCIBus *ppc4xx_pci_init(CPUState *env, qemu_irq pci_irqs[4], |
382 | 382 | pci_conf = controller->pci_dev->config; |
383 | 383 | pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_IBM); |
384 | 384 | pci_config_set_device_id(pci_conf, 0x027f); // device_id |
385 | - pci_conf[0x0a] = 0x80; // class_sub = other bridge type | |
386 | - pci_conf[0x0b] = 0x06; // class_base = PCI_bridge | |
385 | + pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_OTHER); | |
387 | 386 | |
388 | 387 | /* CFGADDR */ |
389 | 388 | index = cpu_register_io_memory(0, pci4xx_cfgaddr_read, | ... | ... |
hw/prep_pci.c
... | ... | @@ -158,8 +158,7 @@ PCIBus *pci_prep_init(qemu_irq *pic) |
158 | 158 | pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_MOTOROLA); |
159 | 159 | pci_config_set_device_id(d->config, PCI_DEVICE_ID_MOTOROLA_RAVEN); |
160 | 160 | d->config[0x08] = 0x00; // revision |
161 | - d->config[0x0A] = 0x00; // class_sub = pci host | |
162 | - d->config[0x0B] = 0x06; // class_base = PCI_bridge | |
161 | + pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST); | |
163 | 162 | d->config[0x0C] = 0x08; // cache_line_size |
164 | 163 | d->config[0x0D] = 0x10; // latency_timer |
165 | 164 | d->config[0x0E] = 0x00; // header_type | ... | ... |
hw/rtl8139.c
... | ... | @@ -3429,8 +3429,7 @@ void pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn) |
3429 | 3429 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_REALTEK_8139); |
3430 | 3430 | pci_conf[0x04] = 0x05; /* command = I/O space, Bus Master */ |
3431 | 3431 | pci_conf[0x08] = RTL8139_PCI_REVID; /* PCI revision ID; >=0x20 is for 8139C+ */ |
3432 | - pci_conf[0x0a] = 0x00; /* ethernet network controller */ | |
3433 | - pci_conf[0x0b] = 0x02; | |
3432 | + pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET); | |
3434 | 3433 | pci_conf[0x0e] = 0x00; /* header_type */ |
3435 | 3434 | pci_conf[0x3d] = 1; /* interrupt pin 0 */ |
3436 | 3435 | pci_conf[0x34] = 0xdc; | ... | ... |
hw/sun4u.c
... | ... | @@ -373,8 +373,7 @@ pci_ebus_init(PCIBus *bus, int devfn) |
373 | 373 | s->config[0x07] = 0x03; // status = medium devsel |
374 | 374 | s->config[0x08] = 0x01; // revision |
375 | 375 | s->config[0x09] = 0x00; // programming i/f |
376 | - s->config[0x0A] = 0x80; // class_sub = misc bridge | |
377 | - s->config[0x0B] = 0x06; // class_base = PCI_bridge | |
376 | + pci_config_set_class(s->config, PCI_CLASS_BRIDGE_OTHER); | |
378 | 377 | s->config[0x0D] = 0x0a; // latency_timer |
379 | 378 | s->config[0x0E] = 0x00; // header_type |
380 | 379 | ... | ... |
hw/unin_pci.c
... | ... | @@ -177,8 +177,7 @@ PCIBus *pci_pmac_init(qemu_irq *pic) |
177 | 177 | pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_APPLE); |
178 | 178 | pci_config_set_device_id(d->config, PCI_DEVICE_ID_APPLE_UNI_N_PCI); |
179 | 179 | d->config[0x08] = 0x00; // revision |
180 | - d->config[0x0A] = 0x00; // class_sub = pci host | |
181 | - d->config[0x0B] = 0x06; // class_base = PCI_bridge | |
180 | + pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST); | |
182 | 181 | d->config[0x0C] = 0x08; // cache_line_size |
183 | 182 | d->config[0x0D] = 0x10; // latency_timer |
184 | 183 | d->config[0x0E] = 0x00; // header_type |
... | ... | @@ -191,8 +190,7 @@ PCIBus *pci_pmac_init(qemu_irq *pic) |
191 | 190 | pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_DEC); |
192 | 191 | pci_config_set_device_id(d->config, PCI_DEVICE_ID_DEC_21154); |
193 | 192 | d->config[0x08] = 0x05; // revision |
194 | - d->config[0x0A] = 0x04; // class_sub = pci2pci | |
195 | - d->config[0x0B] = 0x06; // class_base = PCI_bridge | |
193 | + pci_config_set_class(d->config, PCI_CLASS_BRIDGE_PCI); | |
196 | 194 | d->config[0x0C] = 0x08; // cache_line_size |
197 | 195 | d->config[0x0D] = 0x20; // latency_timer |
198 | 196 | d->config[0x0E] = 0x01; // header_type |
... | ... | @@ -228,8 +226,7 @@ PCIBus *pci_pmac_init(qemu_irq *pic) |
228 | 226 | pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_APPLE); |
229 | 227 | pci_config_set_device_id(d->config, PCI_DEVICE_ID_APPLE_UNI_N_AGP); |
230 | 228 | d->config[0x08] = 0x00; // revision |
231 | - d->config[0x0A] = 0x00; // class_sub = pci host | |
232 | - d->config[0x0B] = 0x06; // class_base = PCI_bridge | |
229 | + pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST); | |
233 | 230 | d->config[0x0C] = 0x08; // cache_line_size |
234 | 231 | d->config[0x0D] = 0x10; // latency_timer |
235 | 232 | d->config[0x0E] = 0x00; // header_type |
... | ... | @@ -251,8 +248,7 @@ PCIBus *pci_pmac_init(qemu_irq *pic) |
251 | 248 | pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_APPLE); |
252 | 249 | pci_config_set_device_id(d->config, PCI_DEVICE_ID_APPLE_UNI_N_I_PCI); |
253 | 250 | d->config[0x08] = 0x00; // revision |
254 | - d->config[0x0A] = 0x00; // class_sub = pci host | |
255 | - d->config[0x0B] = 0x06; // class_base = PCI_bridge | |
251 | + pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST); | |
256 | 252 | d->config[0x0C] = 0x08; // cache_line_size |
257 | 253 | d->config[0x0D] = 0x10; // latency_timer |
258 | 254 | d->config[0x0E] = 0x00; // header_type | ... | ... |
hw/usb-ohci.c
... | ... | @@ -1682,8 +1682,7 @@ void usb_ohci_init_pci(struct PCIBus *bus, int num_ports, int devfn) |
1682 | 1682 | pci_config_set_vendor_id(ohci->pci_dev.config, PCI_VENDOR_ID_APPLE); |
1683 | 1683 | pci_config_set_device_id(ohci->pci_dev.config, 0x003f); // device_id |
1684 | 1684 | ohci->pci_dev.config[0x09] = 0x10; /* OHCI */ |
1685 | - ohci->pci_dev.config[0x0a] = 0x3; | |
1686 | - ohci->pci_dev.config[0x0b] = 0xc; | |
1685 | + pci_config_set_class(ohci->pci_dev.config, PCI_CLASS_SERIAL_USB); | |
1687 | 1686 | ohci->pci_dev.config[0x3d] = 0x01; /* interrupt pin 1 */ |
1688 | 1687 | |
1689 | 1688 | usb_ohci_init(&ohci->state, num_ports, devfn, ohci->pci_dev.irq[0], | ... | ... |
hw/usb-uhci.c
... | ... | @@ -1084,8 +1084,7 @@ void usb_uhci_piix3_init(PCIBus *bus, int devfn) |
1084 | 1084 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371SB_2); |
1085 | 1085 | pci_conf[0x08] = 0x01; // revision number |
1086 | 1086 | pci_conf[0x09] = 0x00; |
1087 | - pci_conf[0x0a] = 0x03; | |
1088 | - pci_conf[0x0b] = 0x0c; | |
1087 | + pci_config_set_class(pci_conf, PCI_CLASS_SERIAL_USB); | |
1089 | 1088 | pci_conf[0x0e] = 0x00; // header_type |
1090 | 1089 | pci_conf[0x3d] = 4; // interrupt pin 3 |
1091 | 1090 | pci_conf[0x60] = 0x10; // release number |
... | ... | @@ -1119,8 +1118,7 @@ void usb_uhci_piix4_init(PCIBus *bus, int devfn) |
1119 | 1118 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371AB_2); |
1120 | 1119 | pci_conf[0x08] = 0x01; // revision number |
1121 | 1120 | pci_conf[0x09] = 0x00; |
1122 | - pci_conf[0x0a] = 0x03; | |
1123 | - pci_conf[0x0b] = 0x0c; | |
1121 | + pci_config_set_class(pci_conf, PCI_CLASS_SERIAL_USB); | |
1124 | 1122 | pci_conf[0x0e] = 0x00; // header_type |
1125 | 1123 | pci_conf[0x3d] = 4; // interrupt pin 3 |
1126 | 1124 | pci_conf[0x60] = 0x10; // release number | ... | ... |
hw/versatile_pci.c
... | ... | @@ -133,8 +133,7 @@ PCIBus *pci_vpb_init(qemu_irq *pic, int irq, int realview) |
133 | 133 | d->config[0x07] = 0x02; |
134 | 134 | d->config[0x08] = 0x00; // revision |
135 | 135 | d->config[0x09] = 0x00; // programming i/f |
136 | - d->config[0x0A] = 0x40; // class_sub = pci host | |
137 | - d->config[0x0B] = 0x0b; // class_base = PCI_bridge | |
136 | + pci_config_set_class(d->config, PCI_CLASS_PROCESSOR_CO); | |
138 | 137 | d->config[0x0D] = 0x10; // latency_timer |
139 | 138 | |
140 | 139 | return s; | ... | ... |
hw/vga.c
... | ... | @@ -2513,8 +2513,7 @@ int pci_vga_init(PCIBus *bus, uint8_t *vga_ram_base, |
2513 | 2513 | // dummy VGA (same as Bochs ID) |
2514 | 2514 | pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_QEMU); |
2515 | 2515 | pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_QEMU_VGA); |
2516 | - pci_conf[0x0a] = 0x00; // VGA controller | |
2517 | - pci_conf[0x0b] = 0x03; | |
2516 | + pci_config_set_class(pci_conf, PCI_CLASS_DISPLAY_VGA); | |
2518 | 2517 | pci_conf[0x0e] = 0x00; // header_type |
2519 | 2518 | |
2520 | 2519 | /* XXX: vga_ram_size must be a power of two */ | ... | ... |
hw/virtio-balloon.c
... | ... | @@ -176,7 +176,7 @@ void *virtio_balloon_init(PCIBus *bus) |
176 | 176 | PCI_DEVICE_ID_VIRTIO_BALLOON, |
177 | 177 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
178 | 178 | VIRTIO_ID_BALLOON, |
179 | - 0x05, 0x00, 0x00, | |
179 | + PCI_CLASS_MEMORY_RAM, 0x00, | |
180 | 180 | 8, sizeof(VirtIOBalloon)); |
181 | 181 | if (s == NULL) |
182 | 182 | return NULL; | ... | ... |
hw/virtio-blk.c
... | ... | @@ -305,7 +305,7 @@ void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs) |
305 | 305 | PCI_DEVICE_ID_VIRTIO_BLOCK, |
306 | 306 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
307 | 307 | VIRTIO_ID_BLOCK, |
308 | - 0x01, 0x80, 0x00, | |
308 | + PCI_CLASS_STORAGE_OTHER, 0x00, | |
309 | 309 | sizeof(struct virtio_blk_config), sizeof(VirtIOBlock)); |
310 | 310 | if (!s) |
311 | 311 | return NULL; | ... | ... |
hw/virtio-console.c
... | ... | @@ -130,7 +130,7 @@ void *virtio_console_init(PCIBus *bus, CharDriverState *chr) |
130 | 130 | PCI_DEVICE_ID_VIRTIO_CONSOLE, |
131 | 131 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
132 | 132 | VIRTIO_ID_CONSOLE, |
133 | - 0x03, 0x80, 0x00, | |
133 | + PCI_CLASS_DISPLAY_OTHER, 0x00, | |
134 | 134 | 0, sizeof(VirtIOConsole)); |
135 | 135 | if (s == NULL) |
136 | 136 | return NULL; | ... | ... |
hw/virtio-net.c
... | ... | @@ -325,7 +325,7 @@ void virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn) |
325 | 325 | PCI_DEVICE_ID_VIRTIO_NET, |
326 | 326 | PCI_VENDOR_ID_REDHAT_QUMRANET, |
327 | 327 | VIRTIO_ID_NET, |
328 | - 0x02, 0x00, 0x00, | |
328 | + PCI_CLASS_NETWORK_ETHERNET, 0x00, | |
329 | 329 | sizeof(struct virtio_net_config), |
330 | 330 | sizeof(VirtIONet)); |
331 | 331 | if (!n) | ... | ... |
hw/virtio.c
... | ... | @@ -811,9 +811,8 @@ void virtio_load(VirtIODevice *vdev, QEMUFile *f) |
811 | 811 | VirtIODevice *virtio_init_pci(PCIBus *bus, const char *name, |
812 | 812 | uint16_t vendor, uint16_t device, |
813 | 813 | uint16_t subvendor, uint16_t subdevice, |
814 | - uint8_t class_code, uint8_t subclass_code, | |
815 | - uint8_t pif, size_t config_size, | |
816 | - size_t struct_size) | |
814 | + uint16_t class_code, uint8_t pif, | |
815 | + size_t config_size, size_t struct_size) | |
817 | 816 | { |
818 | 817 | VirtIODevice *vdev; |
819 | 818 | PCIDevice *pci_dev; |
... | ... | @@ -839,8 +838,7 @@ VirtIODevice *virtio_init_pci(PCIBus *bus, const char *name, |
839 | 838 | config[0x08] = VIRTIO_PCI_ABI_VERSION; |
840 | 839 | |
841 | 840 | config[0x09] = pif; |
842 | - config[0x0a] = subclass_code; | |
843 | - config[0x0b] = class_code; | |
841 | + pci_config_set_class(config, class_code); | |
844 | 842 | config[0x0e] = 0x00; |
845 | 843 | |
846 | 844 | config[0x2c] = subvendor & 0xFF; | ... | ... |
hw/virtio.h
... | ... | @@ -92,9 +92,8 @@ struct VirtIODevice |
92 | 92 | VirtIODevice *virtio_init_pci(PCIBus *bus, const char *name, |
93 | 93 | uint16_t vendor, uint16_t device, |
94 | 94 | uint16_t subvendor, uint16_t subdevice, |
95 | - uint8_t class_code, uint8_t subclass_code, | |
96 | - uint8_t pif, size_t config_size, | |
97 | - size_t struct_size); | |
95 | + uint16_t class_code, uint8_t pif, | |
96 | + size_t config_size, size_t struct_size); | |
98 | 97 | |
99 | 98 | VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size, |
100 | 99 | void (*handle_output)(VirtIODevice *, | ... | ... |
hw/vmware_vga.c
... | ... | @@ -1204,8 +1204,6 @@ static void pci_vmsvga_map_mem(PCIDevice *pci_dev, int region_num, |
1204 | 1204 | iomemtype); |
1205 | 1205 | } |
1206 | 1206 | |
1207 | -#define PCI_CLASS_BASE_DISPLAY 0x03 | |
1208 | -#define PCI_CLASS_SUB_VGA 0x00 | |
1209 | 1207 | #define PCI_CLASS_HEADERTYPE_00h 0x00 |
1210 | 1208 | |
1211 | 1209 | void pci_vmsvga_init(PCIBus *bus, uint8_t *vga_ram_base, |
... | ... | @@ -1220,8 +1218,7 @@ void pci_vmsvga_init(PCIBus *bus, uint8_t *vga_ram_base, |
1220 | 1218 | pci_config_set_vendor_id(s->card.config, PCI_VENDOR_ID_VMWARE); |
1221 | 1219 | pci_config_set_device_id(s->card.config, SVGA_PCI_DEVICE_ID); |
1222 | 1220 | s->card.config[PCI_COMMAND] = 0x07; /* I/O + Memory */ |
1223 | - s->card.config[PCI_CLASS_DEVICE] = PCI_CLASS_SUB_VGA; | |
1224 | - s->card.config[0x0b] = PCI_CLASS_BASE_DISPLAY; | |
1221 | + pci_config_set_class(s->card.config, PCI_CLASS_DISPLAY_VGA); | |
1225 | 1222 | s->card.config[0x0c] = 0x08; /* Cache line size */ |
1226 | 1223 | s->card.config[0x0d] = 0x40; /* Latency timer */ |
1227 | 1224 | s->card.config[0x0e] = PCI_CLASS_HEADERTYPE_00h; | ... | ... |