mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-07-25 04:34:23 +00:00
acpi,pc,pci,virtio,memory bug fixes
This collects several small fixes from all over the place. Additionally, Marcel's changes make acpi unit tests more robust. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJTHL2xAAoJECgfDbjSjVRpAHQH/itdRvT3ILcoCn4gIgfBpq1w BuqdXBtLx5yiNSWiZoZZQ0HIaf6DUuCY7bRE7CwijjwDHNsMyweslT1L3f/T6g7l OcxOtDbs0Vtnv7w/FBc9hPRTBYPQk5O4/IFmfI9hGivcq7T2y/s36709ahtSGgQK iF5+1zI+mu4FPYDaX9s94barn6Sq+Ag56I7rybkAZ+X0OAASBwsF+8s8q+wAmLoF QBk7/U+EpcR/9GwxKoN6Mg8gs+kOXi5imkeLN+YnSttEhq87Zk2OU9RPQqanWC5X mEykhxcn6kQtpmQS19XkwU2pPOSZyytx+CrxLicVtackKynzLqNFzPtvys0t5Ak= =NCfd -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging acpi,pc,pci,virtio,memory bug fixes This collects several small fixes from all over the place. Additionally, Marcel's changes make acpi unit tests more robust. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Sun 09 Mar 2014 19:14:57 GMT using RSA key ID D28D5469 # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * remotes/mst/tags/for_upstream: qemu: x86: ignore ioapic polarity pckbd: return 'keyboard enabled' on read input port command pam: partly fix write-only mode acpi-test: issue errors instead of warnings when possible acpi-test: retain both asl and aml files on failure MAINTAINERS: drop an out of date address Add a 'name' parameter to qemu_thread_create Add 'debug-threads' suboption to --name Rework --name to use QemuOpts PCIE: fix regression with coldplugged multifunction device memory_region_present: return false if address is not found in child MemoryRegion virtio-net: remove function calls from assert acpi-test-data: update expected files acpi-build: append description for non-hotplug Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
118760dfc9
|
@ -158,7 +158,6 @@ Guest CPU Cores (KVM):
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
Overall
|
Overall
|
||||||
M: Gleb Natapov <gleb@redhat.com>
|
|
||||||
M: Paolo Bonzini <pbonzini@redhat.com>
|
M: Paolo Bonzini <pbonzini@redhat.com>
|
||||||
L: kvm@vger.kernel.org
|
L: kvm@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -184,7 +183,6 @@ F: target-s390x/kvm.c
|
||||||
F: hw/intc/s390_flic.[hc]
|
F: hw/intc/s390_flic.[hc]
|
||||||
|
|
||||||
X86
|
X86
|
||||||
M: Gleb Natapov <gleb@redhat.com>
|
|
||||||
M: Marcelo Tosatti <mtosatti@redhat.com>
|
M: Marcelo Tosatti <mtosatti@redhat.com>
|
||||||
L: kvm@vger.kernel.org
|
L: kvm@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
25
cpus.c
25
cpus.c
|
@ -1117,8 +1117,13 @@ void resume_all_vcpus(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For temporary buffers for forming a name */
|
||||||
|
#define VCPU_THREAD_NAME_SIZE 16
|
||||||
|
|
||||||
static void qemu_tcg_init_vcpu(CPUState *cpu)
|
static void qemu_tcg_init_vcpu(CPUState *cpu)
|
||||||
{
|
{
|
||||||
|
char thread_name[VCPU_THREAD_NAME_SIZE];
|
||||||
|
|
||||||
tcg_cpu_address_space_init(cpu, cpu->as);
|
tcg_cpu_address_space_init(cpu, cpu->as);
|
||||||
|
|
||||||
/* share a single thread for all cpus with TCG */
|
/* share a single thread for all cpus with TCG */
|
||||||
|
@ -1127,8 +1132,10 @@ static void qemu_tcg_init_vcpu(CPUState *cpu)
|
||||||
cpu->halt_cond = g_malloc0(sizeof(QemuCond));
|
cpu->halt_cond = g_malloc0(sizeof(QemuCond));
|
||||||
qemu_cond_init(cpu->halt_cond);
|
qemu_cond_init(cpu->halt_cond);
|
||||||
tcg_halt_cond = cpu->halt_cond;
|
tcg_halt_cond = cpu->halt_cond;
|
||||||
qemu_thread_create(cpu->thread, qemu_tcg_cpu_thread_fn, cpu,
|
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG",
|
||||||
QEMU_THREAD_JOINABLE);
|
cpu->cpu_index);
|
||||||
|
qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn,
|
||||||
|
cpu, QEMU_THREAD_JOINABLE);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
cpu->hThread = qemu_thread_get_handle(cpu->thread);
|
cpu->hThread = qemu_thread_get_handle(cpu->thread);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1144,11 +1151,15 @@ static void qemu_tcg_init_vcpu(CPUState *cpu)
|
||||||
|
|
||||||
static void qemu_kvm_start_vcpu(CPUState *cpu)
|
static void qemu_kvm_start_vcpu(CPUState *cpu)
|
||||||
{
|
{
|
||||||
|
char thread_name[VCPU_THREAD_NAME_SIZE];
|
||||||
|
|
||||||
cpu->thread = g_malloc0(sizeof(QemuThread));
|
cpu->thread = g_malloc0(sizeof(QemuThread));
|
||||||
cpu->halt_cond = g_malloc0(sizeof(QemuCond));
|
cpu->halt_cond = g_malloc0(sizeof(QemuCond));
|
||||||
qemu_cond_init(cpu->halt_cond);
|
qemu_cond_init(cpu->halt_cond);
|
||||||
qemu_thread_create(cpu->thread, qemu_kvm_cpu_thread_fn, cpu,
|
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/KVM",
|
||||||
QEMU_THREAD_JOINABLE);
|
cpu->cpu_index);
|
||||||
|
qemu_thread_create(cpu->thread, thread_name, qemu_kvm_cpu_thread_fn,
|
||||||
|
cpu, QEMU_THREAD_JOINABLE);
|
||||||
while (!cpu->created) {
|
while (!cpu->created) {
|
||||||
qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
|
qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
|
||||||
}
|
}
|
||||||
|
@ -1156,10 +1167,14 @@ static void qemu_kvm_start_vcpu(CPUState *cpu)
|
||||||
|
|
||||||
static void qemu_dummy_start_vcpu(CPUState *cpu)
|
static void qemu_dummy_start_vcpu(CPUState *cpu)
|
||||||
{
|
{
|
||||||
|
char thread_name[VCPU_THREAD_NAME_SIZE];
|
||||||
|
|
||||||
cpu->thread = g_malloc0(sizeof(QemuThread));
|
cpu->thread = g_malloc0(sizeof(QemuThread));
|
||||||
cpu->halt_cond = g_malloc0(sizeof(QemuCond));
|
cpu->halt_cond = g_malloc0(sizeof(QemuCond));
|
||||||
qemu_cond_init(cpu->halt_cond);
|
qemu_cond_init(cpu->halt_cond);
|
||||||
qemu_thread_create(cpu->thread, qemu_dummy_cpu_thread_fn, cpu,
|
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/DUMMY",
|
||||||
|
cpu->cpu_index);
|
||||||
|
qemu_thread_create(cpu->thread, thread_name, qemu_dummy_cpu_thread_fn, cpu,
|
||||||
QEMU_THREAD_JOINABLE);
|
QEMU_THREAD_JOINABLE);
|
||||||
while (!cpu->created) {
|
while (!cpu->created) {
|
||||||
qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
|
qemu_cond_wait(&qemu_cpu_cond, &qemu_global_mutex);
|
||||||
|
|
|
@ -358,7 +358,7 @@ static void start_data_plane_bh(void *opaque)
|
||||||
|
|
||||||
qemu_bh_delete(s->start_bh);
|
qemu_bh_delete(s->start_bh);
|
||||||
s->start_bh = NULL;
|
s->start_bh = NULL;
|
||||||
qemu_thread_create(&s->thread, data_plane_thread,
|
qemu_thread_create(&s->thread, "data_plane", data_plane_thread,
|
||||||
s, QEMU_THREAD_JOINABLE);
|
s, QEMU_THREAD_JOINABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -643,6 +643,21 @@ static inline char acpi_get_hex(uint32_t val)
|
||||||
#define ACPI_PCIHP_SIZEOF (*ssdt_pcihp_end - *ssdt_pcihp_start)
|
#define ACPI_PCIHP_SIZEOF (*ssdt_pcihp_end - *ssdt_pcihp_start)
|
||||||
#define ACPI_PCIHP_AML (ssdp_pcihp_aml + *ssdt_pcihp_start)
|
#define ACPI_PCIHP_AML (ssdp_pcihp_aml + *ssdt_pcihp_start)
|
||||||
|
|
||||||
|
#define ACPI_PCINOHP_OFFSET_HEX (*ssdt_pcinohp_name - *ssdt_pcinohp_start + 1)
|
||||||
|
#define ACPI_PCINOHP_OFFSET_ADR (*ssdt_pcinohp_adr - *ssdt_pcinohp_start)
|
||||||
|
#define ACPI_PCINOHP_SIZEOF (*ssdt_pcinohp_end - *ssdt_pcinohp_start)
|
||||||
|
#define ACPI_PCINOHP_AML (ssdp_pcihp_aml + *ssdt_pcinohp_start)
|
||||||
|
|
||||||
|
#define ACPI_PCIVGA_OFFSET_HEX (*ssdt_pcivga_name - *ssdt_pcivga_start + 1)
|
||||||
|
#define ACPI_PCIVGA_OFFSET_ADR (*ssdt_pcivga_adr - *ssdt_pcivga_start)
|
||||||
|
#define ACPI_PCIVGA_SIZEOF (*ssdt_pcivga_end - *ssdt_pcivga_start)
|
||||||
|
#define ACPI_PCIVGA_AML (ssdp_pcihp_aml + *ssdt_pcivga_start)
|
||||||
|
|
||||||
|
#define ACPI_PCIQXL_OFFSET_HEX (*ssdt_pciqxl_name - *ssdt_pciqxl_start + 1)
|
||||||
|
#define ACPI_PCIQXL_OFFSET_ADR (*ssdt_pciqxl_adr - *ssdt_pciqxl_start)
|
||||||
|
#define ACPI_PCIQXL_SIZEOF (*ssdt_pciqxl_end - *ssdt_pciqxl_start)
|
||||||
|
#define ACPI_PCIQXL_AML (ssdp_pcihp_aml + *ssdt_pciqxl_start)
|
||||||
|
|
||||||
#define ACPI_SSDT_SIGNATURE 0x54445353 /* SSDT */
|
#define ACPI_SSDT_SIGNATURE 0x54445353 /* SSDT */
|
||||||
#define ACPI_SSDT_HEADER_LENGTH 36
|
#define ACPI_SSDT_HEADER_LENGTH 36
|
||||||
|
|
||||||
|
@ -677,6 +692,33 @@ static void patch_pcihp(int slot, uint8_t *ssdt_ptr)
|
||||||
ssdt_ptr[ACPI_PCIHP_OFFSET_ADR + 2] = slot;
|
ssdt_ptr[ACPI_PCIHP_OFFSET_ADR + 2] = slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void patch_pcinohp(int slot, uint8_t *ssdt_ptr)
|
||||||
|
{
|
||||||
|
unsigned devfn = PCI_DEVFN(slot, 0);
|
||||||
|
|
||||||
|
ssdt_ptr[ACPI_PCINOHP_OFFSET_HEX] = acpi_get_hex(devfn >> 4);
|
||||||
|
ssdt_ptr[ACPI_PCINOHP_OFFSET_HEX + 1] = acpi_get_hex(devfn);
|
||||||
|
ssdt_ptr[ACPI_PCINOHP_OFFSET_ADR + 2] = slot;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void patch_pcivga(int slot, uint8_t *ssdt_ptr)
|
||||||
|
{
|
||||||
|
unsigned devfn = PCI_DEVFN(slot, 0);
|
||||||
|
|
||||||
|
ssdt_ptr[ACPI_PCIVGA_OFFSET_HEX] = acpi_get_hex(devfn >> 4);
|
||||||
|
ssdt_ptr[ACPI_PCIVGA_OFFSET_HEX + 1] = acpi_get_hex(devfn);
|
||||||
|
ssdt_ptr[ACPI_PCIVGA_OFFSET_ADR + 2] = slot;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void patch_pciqxl(int slot, uint8_t *ssdt_ptr)
|
||||||
|
{
|
||||||
|
unsigned devfn = PCI_DEVFN(slot, 0);
|
||||||
|
|
||||||
|
ssdt_ptr[ACPI_PCIQXL_OFFSET_HEX] = acpi_get_hex(devfn >> 4);
|
||||||
|
ssdt_ptr[ACPI_PCIQXL_OFFSET_HEX + 1] = acpi_get_hex(devfn);
|
||||||
|
ssdt_ptr[ACPI_PCIQXL_OFFSET_ADR + 2] = slot;
|
||||||
|
}
|
||||||
|
|
||||||
/* Assign BSEL property to all buses. In the future, this can be changed
|
/* Assign BSEL property to all buses. In the future, this can be changed
|
||||||
* to only assign to buses that support hotplug.
|
* to only assign to buses that support hotplug.
|
||||||
*/
|
*/
|
||||||
|
@ -737,6 +779,10 @@ static void build_pci_bus_end(PCIBus *bus, void *bus_state)
|
||||||
AcpiBuildPciBusHotplugState *parent = child->parent;
|
AcpiBuildPciBusHotplugState *parent = child->parent;
|
||||||
GArray *bus_table = build_alloc_array();
|
GArray *bus_table = build_alloc_array();
|
||||||
DECLARE_BITMAP(slot_hotplug_enable, PCI_SLOT_MAX);
|
DECLARE_BITMAP(slot_hotplug_enable, PCI_SLOT_MAX);
|
||||||
|
DECLARE_BITMAP(slot_device_present, PCI_SLOT_MAX);
|
||||||
|
DECLARE_BITMAP(slot_device_system, PCI_SLOT_MAX);
|
||||||
|
DECLARE_BITMAP(slot_device_vga, PCI_SLOT_MAX);
|
||||||
|
DECLARE_BITMAP(slot_device_qxl, PCI_SLOT_MAX);
|
||||||
uint8_t op;
|
uint8_t op;
|
||||||
int i;
|
int i;
|
||||||
QObject *bsel;
|
QObject *bsel;
|
||||||
|
@ -764,40 +810,82 @@ static void build_pci_bus_end(PCIBus *bus, void *bus_state)
|
||||||
build_append_byte(bus_table, 0x08); /* NameOp */
|
build_append_byte(bus_table, 0x08); /* NameOp */
|
||||||
build_append_nameseg(bus_table, "BSEL");
|
build_append_nameseg(bus_table, "BSEL");
|
||||||
build_append_int(bus_table, qint_get_int(qobject_to_qint(bsel)));
|
build_append_int(bus_table, qint_get_int(qobject_to_qint(bsel)));
|
||||||
|
|
||||||
memset(slot_hotplug_enable, 0xff, sizeof slot_hotplug_enable);
|
memset(slot_hotplug_enable, 0xff, sizeof slot_hotplug_enable);
|
||||||
|
} else {
|
||||||
|
/* No bsel - no slots are hot-pluggable */
|
||||||
|
memset(slot_hotplug_enable, 0x00, sizeof slot_hotplug_enable);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) {
|
memset(slot_device_present, 0x00, sizeof slot_device_present);
|
||||||
DeviceClass *dc;
|
memset(slot_device_system, 0x00, sizeof slot_device_present);
|
||||||
PCIDeviceClass *pc;
|
memset(slot_device_vga, 0x00, sizeof slot_device_vga);
|
||||||
PCIDevice *pdev = bus->devices[i];
|
memset(slot_device_qxl, 0x00, sizeof slot_device_qxl);
|
||||||
|
|
||||||
if (!pdev) {
|
for (i = 0; i < ARRAY_SIZE(bus->devices); i += PCI_FUNC_MAX) {
|
||||||
continue;
|
DeviceClass *dc;
|
||||||
}
|
PCIDeviceClass *pc;
|
||||||
|
PCIDevice *pdev = bus->devices[i];
|
||||||
|
int slot = PCI_SLOT(i);
|
||||||
|
|
||||||
pc = PCI_DEVICE_GET_CLASS(pdev);
|
if (!pdev) {
|
||||||
dc = DEVICE_GET_CLASS(pdev);
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!dc->hotpluggable || pc->is_bridge) {
|
set_bit(slot, slot_device_present);
|
||||||
int slot = PCI_SLOT(i);
|
pc = PCI_DEVICE_GET_CLASS(pdev);
|
||||||
|
dc = DEVICE_GET_CLASS(pdev);
|
||||||
|
|
||||||
clear_bit(slot, slot_hotplug_enable);
|
if (pc->class_id == PCI_CLASS_BRIDGE_ISA) {
|
||||||
|
set_bit(slot, slot_device_system);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pc->class_id == PCI_CLASS_DISPLAY_VGA) {
|
||||||
|
set_bit(slot, slot_device_vga);
|
||||||
|
|
||||||
|
if (object_dynamic_cast(OBJECT(pdev), "qxl-vga")) {
|
||||||
|
set_bit(slot, slot_device_qxl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Append Device object for each slot which supports eject */
|
if (!dc->hotpluggable || pc->is_bridge) {
|
||||||
for (i = 0; i < PCI_SLOT_MAX; i++) {
|
clear_bit(slot, slot_hotplug_enable);
|
||||||
bool can_eject = test_bit(i, slot_hotplug_enable);
|
|
||||||
if (can_eject) {
|
|
||||||
void *pcihp = acpi_data_push(bus_table,
|
|
||||||
ACPI_PCIHP_SIZEOF);
|
|
||||||
memcpy(pcihp, ACPI_PCIHP_AML, ACPI_PCIHP_SIZEOF);
|
|
||||||
patch_pcihp(i, pcihp);
|
|
||||||
bus_hotplug_support = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Append Device object for each slot */
|
||||||
|
for (i = 0; i < PCI_SLOT_MAX; i++) {
|
||||||
|
bool can_eject = test_bit(i, slot_hotplug_enable);
|
||||||
|
bool present = test_bit(i, slot_device_present);
|
||||||
|
bool vga = test_bit(i, slot_device_vga);
|
||||||
|
bool qxl = test_bit(i, slot_device_qxl);
|
||||||
|
bool system = test_bit(i, slot_device_system);
|
||||||
|
if (can_eject) {
|
||||||
|
void *pcihp = acpi_data_push(bus_table,
|
||||||
|
ACPI_PCIHP_SIZEOF);
|
||||||
|
memcpy(pcihp, ACPI_PCIHP_AML, ACPI_PCIHP_SIZEOF);
|
||||||
|
patch_pcihp(i, pcihp);
|
||||||
|
bus_hotplug_support = true;
|
||||||
|
} else if (qxl) {
|
||||||
|
void *pcihp = acpi_data_push(bus_table,
|
||||||
|
ACPI_PCIQXL_SIZEOF);
|
||||||
|
memcpy(pcihp, ACPI_PCIQXL_AML, ACPI_PCIQXL_SIZEOF);
|
||||||
|
patch_pciqxl(i, pcihp);
|
||||||
|
} else if (vga) {
|
||||||
|
void *pcihp = acpi_data_push(bus_table,
|
||||||
|
ACPI_PCIVGA_SIZEOF);
|
||||||
|
memcpy(pcihp, ACPI_PCIVGA_AML, ACPI_PCIVGA_SIZEOF);
|
||||||
|
patch_pcivga(i, pcihp);
|
||||||
|
} else if (system) {
|
||||||
|
/* Nothing to do: system devices are in DSDT. */
|
||||||
|
} else if (present) {
|
||||||
|
void *pcihp = acpi_data_push(bus_table,
|
||||||
|
ACPI_PCINOHP_SIZEOF);
|
||||||
|
memcpy(pcihp, ACPI_PCINOHP_AML, ACPI_PCINOHP_SIZEOF);
|
||||||
|
patch_pcinohp(i, pcihp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bsel) {
|
||||||
method = build_alloc_method("DVNT", 2);
|
method = build_alloc_method("DVNT", 2);
|
||||||
|
|
||||||
for (i = 0; i < PCI_SLOT_MAX; i++) {
|
for (i = 0; i < PCI_SLOT_MAX; i++) {
|
||||||
|
@ -976,7 +1064,14 @@ build_ssdt(GArray *table_data, GArray *linker,
|
||||||
|
|
||||||
{
|
{
|
||||||
AcpiBuildPciBusHotplugState hotplug_state;
|
AcpiBuildPciBusHotplugState hotplug_state;
|
||||||
PCIBus *bus = find_i440fx(); /* TODO: Q35 support */
|
Object *pci_host;
|
||||||
|
PCIBus *bus = NULL;
|
||||||
|
bool ambiguous;
|
||||||
|
|
||||||
|
pci_host = object_resolve_path_type("", TYPE_PCI_HOST_BRIDGE, &ambiguous);
|
||||||
|
if (!ambiguous && pci_host) {
|
||||||
|
bus = PCI_HOST_BRIDGE(pci_host)->bus;
|
||||||
|
}
|
||||||
|
|
||||||
build_pci_bus_state_init(&hotplug_state, NULL);
|
build_pci_bus_state_init(&hotplug_state, NULL);
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,8 @@ DefinitionBlock (
|
||||||
Name(_HID, EisaId("PNP0A03"))
|
Name(_HID, EisaId("PNP0A03"))
|
||||||
Name(_ADR, 0x00)
|
Name(_ADR, 0x00)
|
||||||
Name(_UID, 1)
|
Name(_UID, 1)
|
||||||
|
//#define PX13 S0B_
|
||||||
|
// External(PX13, DeviceObj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,34 +89,6 @@ DefinitionBlock (
|
||||||
#include "acpi-dsdt-hpet.dsl"
|
#include "acpi-dsdt-hpet.dsl"
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
|
||||||
* VGA
|
|
||||||
****************************************************************/
|
|
||||||
|
|
||||||
Scope(\_SB.PCI0) {
|
|
||||||
Device(VGA) {
|
|
||||||
Name(_ADR, 0x00020000)
|
|
||||||
OperationRegion(PCIC, PCI_Config, Zero, 0x4)
|
|
||||||
Field(PCIC, DWordAcc, NoLock, Preserve) {
|
|
||||||
VEND, 32
|
|
||||||
}
|
|
||||||
Method(_S1D, 0, NotSerialized) {
|
|
||||||
Return (0x00)
|
|
||||||
}
|
|
||||||
Method(_S2D, 0, NotSerialized) {
|
|
||||||
Return (0x00)
|
|
||||||
}
|
|
||||||
Method(_S3D, 0, NotSerialized) {
|
|
||||||
If (LEqual(VEND, 0x1001b36)) {
|
|
||||||
Return (0x03) // QXL
|
|
||||||
} Else {
|
|
||||||
Return (0x00)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* PIIX4 PM
|
* PIIX4 PM
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
|
@ -132,6 +106,9 @@ DefinitionBlock (
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
|
|
||||||
Scope(\_SB.PCI0) {
|
Scope(\_SB.PCI0) {
|
||||||
|
|
||||||
|
External(ISA, DeviceObj)
|
||||||
|
|
||||||
Device(ISA) {
|
Device(ISA) {
|
||||||
Name(_ADR, 0x00010000)
|
Name(_ADR, 0x00010000)
|
||||||
|
|
||||||
|
|
|
@ -3,12 +3,12 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x53,
|
0x53,
|
||||||
0x44,
|
0x44,
|
||||||
0x54,
|
0x54,
|
||||||
0x87,
|
0x85,
|
||||||
0x11,
|
0x11,
|
||||||
0x0,
|
0x0,
|
||||||
0x0,
|
0x0,
|
||||||
0x1,
|
0x1,
|
||||||
0xb8,
|
0x8b,
|
||||||
0x42,
|
0x42,
|
||||||
0x58,
|
0x58,
|
||||||
0x50,
|
0x50,
|
||||||
|
@ -146,7 +146,7 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x1,
|
0x1,
|
||||||
0x10,
|
0x10,
|
||||||
0x4e,
|
0x4e,
|
||||||
0x15,
|
0x18,
|
||||||
0x2e,
|
0x2e,
|
||||||
0x5f,
|
0x5f,
|
||||||
0x53,
|
0x53,
|
||||||
|
@ -163,9 +163,9 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x53,
|
0x53,
|
||||||
0x11,
|
0x11,
|
||||||
0x42,
|
0x42,
|
||||||
0x7,
|
|
||||||
0xa,
|
0xa,
|
||||||
0x6e,
|
0xa,
|
||||||
|
0x9e,
|
||||||
0x88,
|
0x88,
|
||||||
0xd,
|
0xd,
|
||||||
0x0,
|
0x0,
|
||||||
|
@ -217,11 +217,59 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x0,
|
0x0,
|
||||||
0xd,
|
0xd,
|
||||||
0xff,
|
0xff,
|
||||||
|
0xad,
|
||||||
|
0x0,
|
||||||
|
0x0,
|
||||||
|
0x0,
|
||||||
|
0xa1,
|
||||||
|
0x88,
|
||||||
|
0xd,
|
||||||
|
0x0,
|
||||||
|
0x1,
|
||||||
|
0xc,
|
||||||
|
0x3,
|
||||||
|
0x0,
|
||||||
|
0x0,
|
||||||
|
0xf,
|
||||||
|
0xae,
|
||||||
|
0xff,
|
||||||
|
0xae,
|
||||||
|
0x0,
|
||||||
|
0x0,
|
||||||
|
0xf1,
|
||||||
|
0x0,
|
||||||
|
0x88,
|
||||||
|
0xd,
|
||||||
|
0x0,
|
||||||
|
0x1,
|
||||||
|
0xc,
|
||||||
|
0x3,
|
||||||
|
0x0,
|
||||||
|
0x0,
|
||||||
|
0x20,
|
||||||
|
0xaf,
|
||||||
|
0xdf,
|
||||||
|
0xaf,
|
||||||
|
0x0,
|
||||||
|
0x0,
|
||||||
|
0xc0,
|
||||||
|
0x0,
|
||||||
|
0x88,
|
||||||
|
0xd,
|
||||||
|
0x0,
|
||||||
|
0x1,
|
||||||
|
0xc,
|
||||||
|
0x3,
|
||||||
|
0x0,
|
||||||
|
0x0,
|
||||||
|
0xe4,
|
||||||
|
0xaf,
|
||||||
|
0xff,
|
||||||
0xff,
|
0xff,
|
||||||
0x0,
|
0x0,
|
||||||
0x0,
|
0x0,
|
||||||
0x0,
|
0x1c,
|
||||||
0xf3,
|
0x50,
|
||||||
0x87,
|
0x87,
|
||||||
0x17,
|
0x17,
|
||||||
0x0,
|
0x0,
|
||||||
|
@ -347,7 +395,7 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x45,
|
0x45,
|
||||||
0x53,
|
0x53,
|
||||||
0xa,
|
0xa,
|
||||||
0x5c,
|
0x8c,
|
||||||
0x50,
|
0x50,
|
||||||
0x53,
|
0x53,
|
||||||
0x33,
|
0x33,
|
||||||
|
@ -358,7 +406,7 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x45,
|
0x45,
|
||||||
0x53,
|
0x53,
|
||||||
0xa,
|
0xa,
|
||||||
0x60,
|
0x90,
|
||||||
0x50,
|
0x50,
|
||||||
0x45,
|
0x45,
|
||||||
0x33,
|
0x33,
|
||||||
|
@ -369,7 +417,7 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x45,
|
0x45,
|
||||||
0x53,
|
0x53,
|
||||||
0xa,
|
0xa,
|
||||||
0x68,
|
0x98,
|
||||||
0x50,
|
0x50,
|
||||||
0x4c,
|
0x4c,
|
||||||
0x33,
|
0x33,
|
||||||
|
@ -638,103 +686,6 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x79,
|
0x79,
|
||||||
0x0,
|
0x0,
|
||||||
0x10,
|
0x10,
|
||||||
0x40,
|
|
||||||
0x6,
|
|
||||||
0x2e,
|
|
||||||
0x5f,
|
|
||||||
0x53,
|
|
||||||
0x42,
|
|
||||||
0x5f,
|
|
||||||
0x50,
|
|
||||||
0x43,
|
|
||||||
0x49,
|
|
||||||
0x30,
|
|
||||||
0x5b,
|
|
||||||
0x82,
|
|
||||||
0x43,
|
|
||||||
0x5,
|
|
||||||
0x56,
|
|
||||||
0x47,
|
|
||||||
0x41,
|
|
||||||
0x5f,
|
|
||||||
0x8,
|
|
||||||
0x5f,
|
|
||||||
0x41,
|
|
||||||
0x44,
|
|
||||||
0x52,
|
|
||||||
0xc,
|
|
||||||
0x0,
|
|
||||||
0x0,
|
|
||||||
0x2,
|
|
||||||
0x0,
|
|
||||||
0x5b,
|
|
||||||
0x80,
|
|
||||||
0x50,
|
|
||||||
0x43,
|
|
||||||
0x49,
|
|
||||||
0x43,
|
|
||||||
0x2,
|
|
||||||
0x0,
|
|
||||||
0xa,
|
|
||||||
0x4,
|
|
||||||
0x5b,
|
|
||||||
0x81,
|
|
||||||
0xb,
|
|
||||||
0x50,
|
|
||||||
0x43,
|
|
||||||
0x49,
|
|
||||||
0x43,
|
|
||||||
0x3,
|
|
||||||
0x56,
|
|
||||||
0x45,
|
|
||||||
0x4e,
|
|
||||||
0x44,
|
|
||||||
0x20,
|
|
||||||
0x14,
|
|
||||||
0x8,
|
|
||||||
0x5f,
|
|
||||||
0x53,
|
|
||||||
0x31,
|
|
||||||
0x44,
|
|
||||||
0x0,
|
|
||||||
0xa4,
|
|
||||||
0x0,
|
|
||||||
0x14,
|
|
||||||
0x8,
|
|
||||||
0x5f,
|
|
||||||
0x53,
|
|
||||||
0x32,
|
|
||||||
0x44,
|
|
||||||
0x0,
|
|
||||||
0xa4,
|
|
||||||
0x0,
|
|
||||||
0x14,
|
|
||||||
0x19,
|
|
||||||
0x5f,
|
|
||||||
0x53,
|
|
||||||
0x33,
|
|
||||||
0x44,
|
|
||||||
0x0,
|
|
||||||
0xa0,
|
|
||||||
0xe,
|
|
||||||
0x93,
|
|
||||||
0x56,
|
|
||||||
0x45,
|
|
||||||
0x4e,
|
|
||||||
0x44,
|
|
||||||
0xc,
|
|
||||||
0x36,
|
|
||||||
0x1b,
|
|
||||||
0x0,
|
|
||||||
0x1,
|
|
||||||
0xa4,
|
|
||||||
0xa,
|
|
||||||
0x3,
|
|
||||||
0xa1,
|
|
||||||
0x3,
|
|
||||||
0xa4,
|
|
||||||
0x0,
|
|
||||||
0x10,
|
|
||||||
0x25,
|
0x25,
|
||||||
0x2e,
|
0x2e,
|
||||||
0x5f,
|
0x5f,
|
||||||
|
@ -860,7 +811,7 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x4e,
|
0x4e,
|
||||||
0x1,
|
0x1,
|
||||||
0x10,
|
0x10,
|
||||||
0x4b,
|
0x4a,
|
||||||
0x1e,
|
0x1e,
|
||||||
0x2f,
|
0x2f,
|
||||||
0x3,
|
0x3,
|
||||||
|
@ -878,7 +829,7 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x5f,
|
0x5f,
|
||||||
0x5b,
|
0x5b,
|
||||||
0x82,
|
0x82,
|
||||||
0x2d,
|
0x2c,
|
||||||
0x53,
|
0x53,
|
||||||
0x4d,
|
0x4d,
|
||||||
0x43,
|
0x43,
|
||||||
|
@ -898,9 +849,8 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x53,
|
0x53,
|
||||||
0x54,
|
0x54,
|
||||||
0x41,
|
0x41,
|
||||||
0xb,
|
0xa,
|
||||||
0x0,
|
0xf0,
|
||||||
0xff,
|
|
||||||
0x8,
|
0x8,
|
||||||
0x5f,
|
0x5f,
|
||||||
0x43,
|
0x43,
|
||||||
|
@ -4061,7 +4011,7 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x1,
|
0x1,
|
||||||
0x10,
|
0x10,
|
||||||
0x47,
|
0x47,
|
||||||
0xe,
|
0x11,
|
||||||
0x5f,
|
0x5f,
|
||||||
0x53,
|
0x53,
|
||||||
0x42,
|
0x42,
|
||||||
|
@ -4291,6 +4241,54 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x3,
|
0x3,
|
||||||
0x75,
|
0x75,
|
||||||
0x60,
|
0x60,
|
||||||
|
0x5b,
|
||||||
|
0x82,
|
||||||
|
0x2e,
|
||||||
|
0x50,
|
||||||
|
0x52,
|
||||||
|
0x45,
|
||||||
|
0x53,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x48,
|
||||||
|
0x49,
|
||||||
|
0x44,
|
||||||
|
0xd,
|
||||||
|
0x41,
|
||||||
|
0x43,
|
||||||
|
0x50,
|
||||||
|
0x49,
|
||||||
|
0x30,
|
||||||
|
0x30,
|
||||||
|
0x30,
|
||||||
|
0x34,
|
||||||
|
0x0,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x43,
|
||||||
|
0x52,
|
||||||
|
0x53,
|
||||||
|
0x11,
|
||||||
|
0xd,
|
||||||
|
0xa,
|
||||||
|
0xa,
|
||||||
|
0x47,
|
||||||
|
0x1,
|
||||||
|
0x0,
|
||||||
|
0xaf,
|
||||||
|
0x0,
|
||||||
|
0xaf,
|
||||||
|
0x0,
|
||||||
|
0x20,
|
||||||
|
0x79,
|
||||||
|
0x0,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x53,
|
||||||
|
0x54,
|
||||||
|
0x41,
|
||||||
|
0xa,
|
||||||
|
0xb,
|
||||||
0x10,
|
0x10,
|
||||||
0x42,
|
0x42,
|
||||||
0xc,
|
0xc,
|
||||||
|
@ -4488,5 +4486,5 @@ static unsigned char AcpiDsdtAmlCode[] = {
|
||||||
0x0
|
0x0
|
||||||
};
|
};
|
||||||
static unsigned short piix_dsdt_applesmc_sta[] = {
|
static unsigned short piix_dsdt_applesmc_sta[] = {
|
||||||
0x384
|
0x353
|
||||||
};
|
};
|
||||||
|
|
|
@ -72,6 +72,8 @@ DefinitionBlock (
|
||||||
Name(_ADR, 0x00)
|
Name(_ADR, 0x00)
|
||||||
Name(_UID, 1)
|
Name(_UID, 1)
|
||||||
|
|
||||||
|
External(ISA, DeviceObj)
|
||||||
|
|
||||||
// _OSC: based on sample of ACPI3.0b spec
|
// _OSC: based on sample of ACPI3.0b spec
|
||||||
Name(SUPP, 0) // PCI _OSC Support Field value
|
Name(SUPP, 0) // PCI _OSC Support Field value
|
||||||
Name(CTRL, 0) // PCI _OSC Control Field value
|
Name(CTRL, 0) // PCI _OSC Control Field value
|
||||||
|
@ -133,26 +135,6 @@ DefinitionBlock (
|
||||||
#include "acpi-dsdt-hpet.dsl"
|
#include "acpi-dsdt-hpet.dsl"
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
|
||||||
* VGA
|
|
||||||
****************************************************************/
|
|
||||||
|
|
||||||
Scope(\_SB.PCI0) {
|
|
||||||
Device(VGA) {
|
|
||||||
Name(_ADR, 0x00010000)
|
|
||||||
Method(_S1D, 0, NotSerialized) {
|
|
||||||
Return (0x00)
|
|
||||||
}
|
|
||||||
Method(_S2D, 0, NotSerialized) {
|
|
||||||
Return (0x00)
|
|
||||||
}
|
|
||||||
Method(_S3D, 0, NotSerialized) {
|
|
||||||
Return (0x00)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* LPC ISA bridge
|
* LPC ISA bridge
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
|
@ -160,8 +142,7 @@ DefinitionBlock (
|
||||||
Scope(\_SB.PCI0) {
|
Scope(\_SB.PCI0) {
|
||||||
/* PCI D31:f0 LPC ISA bridge */
|
/* PCI D31:f0 LPC ISA bridge */
|
||||||
Device(ISA) {
|
Device(ISA) {
|
||||||
/* PCI D31:f0 */
|
Name (_ADR, 0x001F0000) // _ADR: Address
|
||||||
Name(_ADR, 0x001f0000)
|
|
||||||
|
|
||||||
/* ICH9 PCI to ISA irq remapping */
|
/* ICH9 PCI to ISA irq remapping */
|
||||||
OperationRegion(PIRQ, PCI_Config, 0x60, 0x0C)
|
OperationRegion(PIRQ, PCI_Config, 0x60, 0x0C)
|
||||||
|
|
|
@ -3,12 +3,12 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
|
||||||
0x53,
|
0x53,
|
||||||
0x44,
|
0x44,
|
||||||
0x54,
|
0x54,
|
||||||
0xdf,
|
0xd7,
|
||||||
0x1c,
|
0x1c,
|
||||||
0x0,
|
0x0,
|
||||||
0x0,
|
0x0,
|
||||||
0x1,
|
0x1,
|
||||||
0xff,
|
0x3e,
|
||||||
0x42,
|
0x42,
|
||||||
0x58,
|
0x58,
|
||||||
0x50,
|
0x50,
|
||||||
|
@ -415,11 +415,11 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
|
||||||
0x0,
|
0x0,
|
||||||
0x0,
|
0x0,
|
||||||
0x0,
|
0x0,
|
||||||
0xf7,
|
0xd7,
|
||||||
0xc,
|
0xc,
|
||||||
0x0,
|
0x0,
|
||||||
0x0,
|
0x0,
|
||||||
0xf8,
|
0xd8,
|
||||||
0xc,
|
0xc,
|
||||||
0x88,
|
0x88,
|
||||||
0xd,
|
0xd,
|
||||||
|
@ -853,61 +853,6 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
|
||||||
0x79,
|
0x79,
|
||||||
0x0,
|
0x0,
|
||||||
0x10,
|
0x10,
|
||||||
0x36,
|
|
||||||
0x2e,
|
|
||||||
0x5f,
|
|
||||||
0x53,
|
|
||||||
0x42,
|
|
||||||
0x5f,
|
|
||||||
0x50,
|
|
||||||
0x43,
|
|
||||||
0x49,
|
|
||||||
0x30,
|
|
||||||
0x5b,
|
|
||||||
0x82,
|
|
||||||
0x2a,
|
|
||||||
0x56,
|
|
||||||
0x47,
|
|
||||||
0x41,
|
|
||||||
0x5f,
|
|
||||||
0x8,
|
|
||||||
0x5f,
|
|
||||||
0x41,
|
|
||||||
0x44,
|
|
||||||
0x52,
|
|
||||||
0xc,
|
|
||||||
0x0,
|
|
||||||
0x0,
|
|
||||||
0x1,
|
|
||||||
0x0,
|
|
||||||
0x14,
|
|
||||||
0x8,
|
|
||||||
0x5f,
|
|
||||||
0x53,
|
|
||||||
0x31,
|
|
||||||
0x44,
|
|
||||||
0x0,
|
|
||||||
0xa4,
|
|
||||||
0x0,
|
|
||||||
0x14,
|
|
||||||
0x8,
|
|
||||||
0x5f,
|
|
||||||
0x53,
|
|
||||||
0x32,
|
|
||||||
0x44,
|
|
||||||
0x0,
|
|
||||||
0xa4,
|
|
||||||
0x0,
|
|
||||||
0x14,
|
|
||||||
0x8,
|
|
||||||
0x5f,
|
|
||||||
0x53,
|
|
||||||
0x33,
|
|
||||||
0x44,
|
|
||||||
0x0,
|
|
||||||
0xa4,
|
|
||||||
0x0,
|
|
||||||
0x10,
|
|
||||||
0x4c,
|
0x4c,
|
||||||
0x7,
|
0x7,
|
||||||
0x2e,
|
0x2e,
|
||||||
|
@ -1033,7 +978,7 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
|
||||||
0x4e,
|
0x4e,
|
||||||
0x1,
|
0x1,
|
||||||
0x10,
|
0x10,
|
||||||
0x4b,
|
0x4a,
|
||||||
0x1e,
|
0x1e,
|
||||||
0x2f,
|
0x2f,
|
||||||
0x3,
|
0x3,
|
||||||
|
@ -1051,7 +996,7 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
|
||||||
0x5f,
|
0x5f,
|
||||||
0x5b,
|
0x5b,
|
||||||
0x82,
|
0x82,
|
||||||
0x2d,
|
0x2c,
|
||||||
0x53,
|
0x53,
|
||||||
0x4d,
|
0x4d,
|
||||||
0x43,
|
0x43,
|
||||||
|
@ -1071,9 +1016,8 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
|
||||||
0x53,
|
0x53,
|
||||||
0x54,
|
0x54,
|
||||||
0x41,
|
0x41,
|
||||||
0xb,
|
0xa,
|
||||||
0x0,
|
0xf0,
|
||||||
0xff,
|
|
||||||
0x8,
|
0x8,
|
||||||
0x5f,
|
0x5f,
|
||||||
0x43,
|
0x43,
|
||||||
|
@ -7016,7 +6960,7 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
|
||||||
0x1,
|
0x1,
|
||||||
0x10,
|
0x10,
|
||||||
0x47,
|
0x47,
|
||||||
0xe,
|
0x11,
|
||||||
0x5f,
|
0x5f,
|
||||||
0x53,
|
0x53,
|
||||||
0x42,
|
0x42,
|
||||||
|
@ -7121,8 +7065,8 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
|
||||||
0x54,
|
0x54,
|
||||||
0x1,
|
0x1,
|
||||||
0xb,
|
0xb,
|
||||||
0x0,
|
0xd8,
|
||||||
0xaf,
|
0xc,
|
||||||
0xa,
|
0xa,
|
||||||
0x20,
|
0x20,
|
||||||
0x5b,
|
0x5b,
|
||||||
|
@ -7246,6 +7190,54 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
|
||||||
0x3,
|
0x3,
|
||||||
0x75,
|
0x75,
|
||||||
0x60,
|
0x60,
|
||||||
|
0x5b,
|
||||||
|
0x82,
|
||||||
|
0x2e,
|
||||||
|
0x50,
|
||||||
|
0x52,
|
||||||
|
0x45,
|
||||||
|
0x53,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x48,
|
||||||
|
0x49,
|
||||||
|
0x44,
|
||||||
|
0xd,
|
||||||
|
0x41,
|
||||||
|
0x43,
|
||||||
|
0x50,
|
||||||
|
0x49,
|
||||||
|
0x30,
|
||||||
|
0x30,
|
||||||
|
0x30,
|
||||||
|
0x34,
|
||||||
|
0x0,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x43,
|
||||||
|
0x52,
|
||||||
|
0x53,
|
||||||
|
0x11,
|
||||||
|
0xd,
|
||||||
|
0xa,
|
||||||
|
0xa,
|
||||||
|
0x47,
|
||||||
|
0x1,
|
||||||
|
0xd8,
|
||||||
|
0xc,
|
||||||
|
0xd8,
|
||||||
|
0xc,
|
||||||
|
0x0,
|
||||||
|
0x20,
|
||||||
|
0x79,
|
||||||
|
0x0,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x53,
|
||||||
|
0x54,
|
||||||
|
0x41,
|
||||||
|
0xa,
|
||||||
|
0xb,
|
||||||
0x10,
|
0x10,
|
||||||
0x4f,
|
0x4f,
|
||||||
0x8,
|
0x8,
|
||||||
|
@ -7392,5 +7384,5 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
|
||||||
0x0
|
0x0
|
||||||
};
|
};
|
||||||
static unsigned short q35_dsdt_applesmc_sta[] = {
|
static unsigned short q35_dsdt_applesmc_sta[] = {
|
||||||
0x431
|
0x3fa
|
||||||
};
|
};
|
||||||
|
|
|
@ -46,5 +46,55 @@ DefinitionBlock ("ssdt-pcihp.aml", "SSDT", 0x01, "BXPC", "BXSSDTPCIHP", 0x1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ACPI_EXTRACT_DEVICE_START ssdt_pcinohp_start
|
||||||
|
ACPI_EXTRACT_DEVICE_END ssdt_pcinohp_end
|
||||||
|
ACPI_EXTRACT_DEVICE_STRING ssdt_pcinohp_name
|
||||||
|
|
||||||
|
// Extract the offsets of the device name, address dword and the slot
|
||||||
|
// name byte - we fill them in for each device.
|
||||||
|
Device(SBB) {
|
||||||
|
ACPI_EXTRACT_NAME_DWORD_CONST ssdt_pcinohp_adr
|
||||||
|
Name(_ADR, 0xAA0000)
|
||||||
|
}
|
||||||
|
|
||||||
|
ACPI_EXTRACT_DEVICE_START ssdt_pcivga_start
|
||||||
|
ACPI_EXTRACT_DEVICE_END ssdt_pcivga_end
|
||||||
|
ACPI_EXTRACT_DEVICE_STRING ssdt_pcivga_name
|
||||||
|
|
||||||
|
// Extract the offsets of the device name, address dword and the slot
|
||||||
|
// name byte - we fill them in for each device.
|
||||||
|
Device(SCC) {
|
||||||
|
ACPI_EXTRACT_NAME_DWORD_CONST ssdt_pcivga_adr
|
||||||
|
Name(_ADR, 0xAA0000)
|
||||||
|
Method(_S1D, 0, NotSerialized) {
|
||||||
|
Return (0x00)
|
||||||
|
}
|
||||||
|
Method(_S2D, 0, NotSerialized) {
|
||||||
|
Return (0x00)
|
||||||
|
}
|
||||||
|
Method(_S3D, 0, NotSerialized) {
|
||||||
|
Return (0x00)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ACPI_EXTRACT_DEVICE_START ssdt_pciqxl_start
|
||||||
|
ACPI_EXTRACT_DEVICE_END ssdt_pciqxl_end
|
||||||
|
ACPI_EXTRACT_DEVICE_STRING ssdt_pciqxl_name
|
||||||
|
|
||||||
|
// Extract the offsets of the device name, address dword and the slot
|
||||||
|
// name byte - we fill them in for each device.
|
||||||
|
Device(SDD) {
|
||||||
|
ACPI_EXTRACT_NAME_DWORD_CONST ssdt_pciqxl_adr
|
||||||
|
Name(_ADR, 0xAA0000)
|
||||||
|
Method(_S1D, 0, NotSerialized) {
|
||||||
|
Return (0x00)
|
||||||
|
}
|
||||||
|
Method(_S2D, 0, NotSerialized) {
|
||||||
|
Return (0x00)
|
||||||
|
}
|
||||||
|
Method(_S3D, 0, NotSerialized) {
|
||||||
|
Return (0x03) // QXL
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,38 @@
|
||||||
static unsigned char ssdt_pcihp_name[] = {
|
static unsigned char ssdt_pcihp_name[] = {
|
||||||
0x33
|
0x34
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pcivga_end[] = {
|
||||||
|
0x99
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pcivga_name[] = {
|
||||||
|
0x70
|
||||||
};
|
};
|
||||||
static unsigned char ssdt_pcihp_adr[] = {
|
static unsigned char ssdt_pcihp_adr[] = {
|
||||||
0x44
|
0x45
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pcinohp_end[] = {
|
||||||
|
0x6d
|
||||||
};
|
};
|
||||||
static unsigned char ssdt_pcihp_end[] = {
|
static unsigned char ssdt_pcihp_end[] = {
|
||||||
0x5b
|
0x5c
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pciqxl_start[] = {
|
||||||
|
0x99
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pcinohp_name[] = {
|
||||||
|
0x5f
|
||||||
};
|
};
|
||||||
static unsigned char ssdp_pcihp_aml[] = {
|
static unsigned char ssdp_pcihp_aml[] = {
|
||||||
0x53,
|
0x53,
|
||||||
0x53,
|
0x53,
|
||||||
0x44,
|
0x44,
|
||||||
0x54,
|
0x54,
|
||||||
0x5b,
|
0xc6,
|
||||||
0x0,
|
0x0,
|
||||||
0x0,
|
0x0,
|
||||||
0x0,
|
0x0,
|
||||||
0x1,
|
0x1,
|
||||||
0xe8,
|
0x6b,
|
||||||
0x42,
|
0x42,
|
||||||
0x58,
|
0x58,
|
||||||
0x50,
|
0x50,
|
||||||
|
@ -45,7 +60,8 @@ static unsigned char ssdp_pcihp_aml[] = {
|
||||||
0x13,
|
0x13,
|
||||||
0x20,
|
0x20,
|
||||||
0x10,
|
0x10,
|
||||||
0x36,
|
0x41,
|
||||||
|
0xa,
|
||||||
0x5c,
|
0x5c,
|
||||||
0x2e,
|
0x2e,
|
||||||
0x5f,
|
0x5f,
|
||||||
|
@ -98,11 +114,138 @@ static unsigned char ssdp_pcihp_aml[] = {
|
||||||
0x5f,
|
0x5f,
|
||||||
0x53,
|
0x53,
|
||||||
0x55,
|
0x55,
|
||||||
0x4e
|
0x4e,
|
||||||
|
0x5b,
|
||||||
|
0x82,
|
||||||
|
0xf,
|
||||||
|
0x53,
|
||||||
|
0x42,
|
||||||
|
0x42,
|
||||||
|
0x5f,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x41,
|
||||||
|
0x44,
|
||||||
|
0x52,
|
||||||
|
0xc,
|
||||||
|
0x0,
|
||||||
|
0x0,
|
||||||
|
0xaa,
|
||||||
|
0x0,
|
||||||
|
0x5b,
|
||||||
|
0x82,
|
||||||
|
0x2a,
|
||||||
|
0x53,
|
||||||
|
0x43,
|
||||||
|
0x43,
|
||||||
|
0x5f,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x41,
|
||||||
|
0x44,
|
||||||
|
0x52,
|
||||||
|
0xc,
|
||||||
|
0x0,
|
||||||
|
0x0,
|
||||||
|
0xaa,
|
||||||
|
0x0,
|
||||||
|
0x14,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x53,
|
||||||
|
0x31,
|
||||||
|
0x44,
|
||||||
|
0x0,
|
||||||
|
0xa4,
|
||||||
|
0x0,
|
||||||
|
0x14,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x53,
|
||||||
|
0x32,
|
||||||
|
0x44,
|
||||||
|
0x0,
|
||||||
|
0xa4,
|
||||||
|
0x0,
|
||||||
|
0x14,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x53,
|
||||||
|
0x33,
|
||||||
|
0x44,
|
||||||
|
0x0,
|
||||||
|
0xa4,
|
||||||
|
0x0,
|
||||||
|
0x5b,
|
||||||
|
0x82,
|
||||||
|
0x2b,
|
||||||
|
0x53,
|
||||||
|
0x44,
|
||||||
|
0x44,
|
||||||
|
0x5f,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x41,
|
||||||
|
0x44,
|
||||||
|
0x52,
|
||||||
|
0xc,
|
||||||
|
0x0,
|
||||||
|
0x0,
|
||||||
|
0xaa,
|
||||||
|
0x0,
|
||||||
|
0x14,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x53,
|
||||||
|
0x31,
|
||||||
|
0x44,
|
||||||
|
0x0,
|
||||||
|
0xa4,
|
||||||
|
0x0,
|
||||||
|
0x14,
|
||||||
|
0x8,
|
||||||
|
0x5f,
|
||||||
|
0x53,
|
||||||
|
0x32,
|
||||||
|
0x44,
|
||||||
|
0x0,
|
||||||
|
0xa4,
|
||||||
|
0x0,
|
||||||
|
0x14,
|
||||||
|
0x9,
|
||||||
|
0x5f,
|
||||||
|
0x53,
|
||||||
|
0x33,
|
||||||
|
0x44,
|
||||||
|
0x0,
|
||||||
|
0xa4,
|
||||||
|
0xa,
|
||||||
|
0x3
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pciqxl_adr[] = {
|
||||||
|
0xa6
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pcinohp_adr[] = {
|
||||||
|
0x69
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pcivga_adr[] = {
|
||||||
|
0x7a
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pciqxl_name[] = {
|
||||||
|
0x9c
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pcivga_start[] = {
|
||||||
|
0x6d
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pciqxl_end[] = {
|
||||||
|
0xc6
|
||||||
};
|
};
|
||||||
static unsigned char ssdt_pcihp_start[] = {
|
static unsigned char ssdt_pcihp_start[] = {
|
||||||
0x30
|
0x31
|
||||||
};
|
};
|
||||||
static unsigned char ssdt_pcihp_id[] = {
|
static unsigned char ssdt_pcihp_id[] = {
|
||||||
0x3d
|
0x3e
|
||||||
|
};
|
||||||
|
static unsigned char ssdt_pcinohp_start[] = {
|
||||||
|
0x5c
|
||||||
};
|
};
|
||||||
|
|
|
@ -281,7 +281,7 @@ static void kbd_write_command(void *opaque, hwaddr addr,
|
||||||
kbd_update_irq(s);
|
kbd_update_irq(s);
|
||||||
break;
|
break;
|
||||||
case KBD_CCMD_READ_INPORT:
|
case KBD_CCMD_READ_INPORT:
|
||||||
kbd_queue(s, 0x00, 0);
|
kbd_queue(s, 0x80, 0);
|
||||||
break;
|
break;
|
||||||
case KBD_CCMD_READ_OUTPORT:
|
case KBD_CCMD_READ_OUTPORT:
|
||||||
kbd_queue(s, s->outport, 0);
|
kbd_queue(s, s->outport, 0);
|
||||||
|
|
|
@ -93,9 +93,6 @@ static void ioapic_set_irq(void *opaque, int vector, int level)
|
||||||
uint32_t mask = 1 << vector;
|
uint32_t mask = 1 << vector;
|
||||||
uint64_t entry = s->ioredtbl[vector];
|
uint64_t entry = s->ioredtbl[vector];
|
||||||
|
|
||||||
if (entry & (1 << IOAPIC_LVT_POLARITY_SHIFT)) {
|
|
||||||
level = !level;
|
|
||||||
}
|
|
||||||
if (((entry >> IOAPIC_LVT_TRIGGER_MODE_SHIFT) & 1) ==
|
if (((entry >> IOAPIC_LVT_TRIGGER_MODE_SHIFT) & 1) ==
|
||||||
IOAPIC_TRIGGER_LEVEL) {
|
IOAPIC_TRIGGER_LEVEL) {
|
||||||
/* level triggered */
|
/* level triggered */
|
||||||
|
|
|
@ -397,12 +397,15 @@ static int peer_detach(VirtIONet *n, int index)
|
||||||
static void virtio_net_set_queues(VirtIONet *n)
|
static void virtio_net_set_queues(VirtIONet *n)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int r;
|
||||||
|
|
||||||
for (i = 0; i < n->max_queues; i++) {
|
for (i = 0; i < n->max_queues; i++) {
|
||||||
if (i < n->curr_queues) {
|
if (i < n->curr_queues) {
|
||||||
assert(!peer_attach(n, i));
|
r = peer_attach(n, i);
|
||||||
|
assert(!r);
|
||||||
} else {
|
} else {
|
||||||
assert(!peer_detach(n, i));
|
r = peer_detach(n, i);
|
||||||
|
assert(!r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ void init_pam(DeviceState *dev, MemoryRegion *ram_memory,
|
||||||
/* XXX: should distinguish read/write cases */
|
/* XXX: should distinguish read/write cases */
|
||||||
memory_region_init_alias(&mem->alias[0], OBJECT(dev), "pam-pci", pci_address_space,
|
memory_region_init_alias(&mem->alias[0], OBJECT(dev), "pam-pci", pci_address_space,
|
||||||
start, size);
|
start, size);
|
||||||
memory_region_init_alias(&mem->alias[2], OBJECT(dev), "pam-pci", pci_address_space,
|
memory_region_init_alias(&mem->alias[2], OBJECT(dev), "pam-pci", ram_memory,
|
||||||
start, size);
|
start, size);
|
||||||
|
|
||||||
for (i = 0; i < 4; ++i) {
|
for (i = 0; i < 4; ++i) {
|
||||||
|
|
|
@ -221,29 +221,23 @@ static void pcie_cap_slot_hotplug_common(PCIDevice *hotplug_dev,
|
||||||
DeviceState *dev,
|
DeviceState *dev,
|
||||||
uint8_t **exp_cap, Error **errp)
|
uint8_t **exp_cap, Error **errp)
|
||||||
{
|
{
|
||||||
PCIDevice *pci_dev = PCI_DEVICE(dev);
|
|
||||||
*exp_cap = hotplug_dev->config + hotplug_dev->exp.exp_cap;
|
*exp_cap = hotplug_dev->config + hotplug_dev->exp.exp_cap;
|
||||||
uint16_t sltsta = pci_get_word(*exp_cap + PCI_EXP_SLTSTA);
|
uint16_t sltsta = pci_get_word(*exp_cap + PCI_EXP_SLTSTA);
|
||||||
|
|
||||||
PCIE_DEV_PRINTF(pci_dev, "hotplug state: %d\n", state);
|
PCIE_DEV_PRINTF(PCI_DEVICE(dev), "hotplug state: %d\n", state);
|
||||||
if (sltsta & PCI_EXP_SLTSTA_EIS) {
|
if (sltsta & PCI_EXP_SLTSTA_EIS) {
|
||||||
/* the slot is electromechanically locked.
|
/* the slot is electromechanically locked.
|
||||||
* This error is propagated up to qdev and then to HMP/QMP.
|
* This error is propagated up to qdev and then to HMP/QMP.
|
||||||
*/
|
*/
|
||||||
error_setg_errno(errp, -EBUSY, "slot is electromechanically locked");
|
error_setg_errno(errp, -EBUSY, "slot is electromechanically locked");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: multifunction hot-plug.
|
|
||||||
* Right now, only a device of function = 0 is allowed to be
|
|
||||||
* hot plugged/unplugged.
|
|
||||||
*/
|
|
||||||
assert(PCI_FUNC(pci_dev->devfn) == 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void pcie_cap_slot_hotplug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
|
void pcie_cap_slot_hotplug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
uint8_t *exp_cap;
|
uint8_t *exp_cap;
|
||||||
|
PCIDevice *pci_dev = PCI_DEVICE(dev);
|
||||||
|
|
||||||
pcie_cap_slot_hotplug_common(PCI_DEVICE(hotplug_dev), dev, &exp_cap, errp);
|
pcie_cap_slot_hotplug_common(PCI_DEVICE(hotplug_dev), dev, &exp_cap, errp);
|
||||||
|
|
||||||
|
@ -256,6 +250,12 @@ void pcie_cap_slot_hotplug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TODO: multifunction hot-plug.
|
||||||
|
* Right now, only a device of function = 0 is allowed to be
|
||||||
|
* hot plugged/unplugged.
|
||||||
|
*/
|
||||||
|
assert(PCI_FUNC(pci_dev->devfn) == 0);
|
||||||
|
|
||||||
pci_word_test_and_set_mask(exp_cap + PCI_EXP_SLTSTA,
|
pci_word_test_and_set_mask(exp_cap + PCI_EXP_SLTSTA,
|
||||||
PCI_EXP_SLTSTA_PDS);
|
PCI_EXP_SLTSTA_PDS);
|
||||||
pcie_cap_slot_event(PCI_DEVICE(hotplug_dev), PCI_EXP_HP_EV_PDC);
|
pcie_cap_slot_event(PCI_DEVICE(hotplug_dev), PCI_EXP_HP_EV_PDC);
|
||||||
|
|
|
@ -546,10 +546,10 @@ static int emulated_initfn(CCIDCardState *base)
|
||||||
printf("%s: failed to initialize vcard\n", EMULATED_DEV_NAME);
|
printf("%s: failed to initialize vcard\n", EMULATED_DEV_NAME);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
qemu_thread_create(&card->event_thread_id, event_thread, card,
|
qemu_thread_create(&card->event_thread_id, "ccid/event", event_thread,
|
||||||
QEMU_THREAD_JOINABLE);
|
card, QEMU_THREAD_JOINABLE);
|
||||||
qemu_thread_create(&card->apdu_thread_id, handle_apdu_thread, card,
|
qemu_thread_create(&card->apdu_thread_id, "ccid/apdu", handle_apdu_thread,
|
||||||
QEMU_THREAD_JOINABLE);
|
card, QEMU_THREAD_JOINABLE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -836,13 +836,13 @@ void memory_region_set_alias_offset(MemoryRegion *mr,
|
||||||
hwaddr offset);
|
hwaddr offset);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* memory_region_present: translate an address/size relative to a
|
* memory_region_present: checks if an address relative to a @parent
|
||||||
* MemoryRegion into a #MemoryRegionSection.
|
* translates into #MemoryRegion within @parent
|
||||||
*
|
*
|
||||||
* Answer whether a #MemoryRegion within @parent covers the address
|
* Answer whether a #MemoryRegion within @parent covers the address
|
||||||
* @addr.
|
* @addr.
|
||||||
*
|
*
|
||||||
* @parent: a MemoryRegion within which @addr is a relative address
|
* @parent: a #MemoryRegion within which @addr is a relative address
|
||||||
* @addr: the area within @parent to be searched
|
* @addr: the area within @parent to be searched
|
||||||
*/
|
*/
|
||||||
bool memory_region_present(MemoryRegion *parent, hwaddr addr);
|
bool memory_region_present(MemoryRegion *parent, hwaddr addr);
|
||||||
|
|
|
@ -52,12 +52,13 @@ void qemu_event_reset(QemuEvent *ev);
|
||||||
void qemu_event_wait(QemuEvent *ev);
|
void qemu_event_wait(QemuEvent *ev);
|
||||||
void qemu_event_destroy(QemuEvent *ev);
|
void qemu_event_destroy(QemuEvent *ev);
|
||||||
|
|
||||||
void qemu_thread_create(QemuThread *thread,
|
void qemu_thread_create(QemuThread *thread, const char *name,
|
||||||
void *(*start_routine)(void *),
|
void *(*start_routine)(void *),
|
||||||
void *arg, int mode);
|
void *arg, int mode);
|
||||||
void *qemu_thread_join(QemuThread *thread);
|
void *qemu_thread_join(QemuThread *thread);
|
||||||
void qemu_thread_get_self(QemuThread *thread);
|
void qemu_thread_get_self(QemuThread *thread);
|
||||||
bool qemu_thread_is_self(QemuThread *thread);
|
bool qemu_thread_is_self(QemuThread *thread);
|
||||||
void qemu_thread_exit(void *retval);
|
void qemu_thread_exit(void *retval);
|
||||||
|
void qemu_thread_naming(bool enable);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -269,7 +269,7 @@ on_host_init(VSCMsgHeader *mhHeader, VSCMsgInit *incoming)
|
||||||
send_msg(VSC_ReaderRemove, VSCARD_MINIMAL_READER_ID, NULL, 0);
|
send_msg(VSC_ReaderRemove, VSCARD_MINIMAL_READER_ID, NULL, 0);
|
||||||
/* launch the event_thread. This will trigger reader adds for all the
|
/* launch the event_thread. This will trigger reader adds for all the
|
||||||
* existing readers */
|
* existing readers */
|
||||||
qemu_thread_create(&thread_id, event_thread, NULL, 0);
|
qemu_thread_create(&thread_id, "vsc/event", event_thread, NULL, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
memory.c
2
memory.c
|
@ -1562,7 +1562,7 @@ static FlatRange *flatview_lookup(FlatView *view, AddrRange addr)
|
||||||
bool memory_region_present(MemoryRegion *parent, hwaddr addr)
|
bool memory_region_present(MemoryRegion *parent, hwaddr addr)
|
||||||
{
|
{
|
||||||
MemoryRegion *mr = memory_region_find(parent, addr, 1).mr;
|
MemoryRegion *mr = memory_region_find(parent, addr, 1).mr;
|
||||||
if (!mr) {
|
if (!mr || (mr == parent)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
memory_region_unref(mr);
|
memory_region_unref(mr);
|
||||||
|
|
|
@ -695,6 +695,6 @@ void migrate_fd_connect(MigrationState *s)
|
||||||
/* Notify before starting migration thread */
|
/* Notify before starting migration thread */
|
||||||
notifier_list_notify(&migration_state_notifiers, s);
|
notifier_list_notify(&migration_state_notifiers, s);
|
||||||
|
|
||||||
qemu_thread_create(&s->thread, migration_thread, s,
|
qemu_thread_create(&s->thread, "migration", migration_thread, s,
|
||||||
QEMU_THREAD_JOINABLE);
|
QEMU_THREAD_JOINABLE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -328,9 +328,11 @@ possible drivers and properties, use @code{-device help} and
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
DEF("name", HAS_ARG, QEMU_OPTION_name,
|
DEF("name", HAS_ARG, QEMU_OPTION_name,
|
||||||
"-name string1[,process=string2]\n"
|
"-name string1[,process=string2][,debug-threads=on|off]\n"
|
||||||
" set the name of the guest\n"
|
" set the name of the guest\n"
|
||||||
" string1 sets the window title and string2 the process name (on Linux)\n",
|
" string1 sets the window title and string2 the process name (on Linux)\n"
|
||||||
|
" When debug-threads is enabled, individual threads are given a separate name (on Linux)\n"
|
||||||
|
" NOTE: The thread names are for debugging and not a stable API.\n",
|
||||||
QEMU_ARCH_ALL)
|
QEMU_ARCH_ALL)
|
||||||
STEXI
|
STEXI
|
||||||
@item -name @var{name}
|
@item -name @var{name}
|
||||||
|
@ -339,6 +341,7 @@ Sets the @var{name} of the guest.
|
||||||
This name will be displayed in the SDL window caption.
|
This name will be displayed in the SDL window caption.
|
||||||
The @var{name} will also be used for the VNC server.
|
The @var{name} will also be used for the VNC server.
|
||||||
Also optionally set the top visible process name in Linux.
|
Also optionally set the top visible process name in Linux.
|
||||||
|
Naming of individual threads can also be enabled on Linux to aid debugging.
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
DEF("uuid", HAS_ARG, QEMU_OPTION_uuid,
|
DEF("uuid", HAS_ARG, QEMU_OPTION_uuid,
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -34,7 +34,7 @@ typedef struct {
|
||||||
gchar *asl; /* asl code generated from aml */
|
gchar *asl; /* asl code generated from aml */
|
||||||
gsize asl_len;
|
gsize asl_len;
|
||||||
gchar *asl_file;
|
gchar *asl_file;
|
||||||
bool asl_file_retain; /* do not delete the temp asl */
|
bool tmp_files_retain; /* do not delete the temp asl/aml */
|
||||||
} QEMU_PACKED AcpiSdtTable;
|
} QEMU_PACKED AcpiSdtTable;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -153,7 +153,8 @@ static void free_test_data(test_data *data)
|
||||||
g_free(temp->aml);
|
g_free(temp->aml);
|
||||||
}
|
}
|
||||||
if (temp->aml_file) {
|
if (temp->aml_file) {
|
||||||
if (g_strstr_len(temp->aml_file, -1, "aml-")) {
|
if (!temp->tmp_files_retain &&
|
||||||
|
g_strstr_len(temp->aml_file, -1, "aml-")) {
|
||||||
unlink(temp->aml_file);
|
unlink(temp->aml_file);
|
||||||
}
|
}
|
||||||
g_free(temp->aml_file);
|
g_free(temp->aml_file);
|
||||||
|
@ -162,7 +163,7 @@ static void free_test_data(test_data *data)
|
||||||
g_free(temp->asl);
|
g_free(temp->asl);
|
||||||
}
|
}
|
||||||
if (temp->asl_file) {
|
if (temp->asl_file) {
|
||||||
if (!temp->asl_file_retain) {
|
if (!temp->tmp_files_retain) {
|
||||||
unlink(temp->asl_file);
|
unlink(temp->asl_file);
|
||||||
}
|
}
|
||||||
g_free(temp->asl_file);
|
g_free(temp->asl_file);
|
||||||
|
@ -410,7 +411,7 @@ static bool compare_signature(AcpiSdtTable *sdt, uint32_t signature)
|
||||||
return sdt->header.signature == signature;
|
return sdt->header.signature == signature;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
|
static bool load_asl(GArray *sdts, AcpiSdtTable *sdt)
|
||||||
{
|
{
|
||||||
AcpiSdtTable *temp;
|
AcpiSdtTable *temp;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
@ -439,18 +440,22 @@ static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
|
||||||
g_string_append_printf(command_line, "-d %s", sdt->aml_file);
|
g_string_append_printf(command_line, "-d %s", sdt->aml_file);
|
||||||
|
|
||||||
/* pass 'out' and 'out_err' in order to be redirected */
|
/* pass 'out' and 'out_err' in order to be redirected */
|
||||||
g_spawn_command_line_sync(command_line->str, &out, &out_err, NULL, &error);
|
ret = g_spawn_command_line_sync(command_line->str, &out, &out_err, NULL, &error);
|
||||||
g_assert_no_error(error);
|
g_assert_no_error(error);
|
||||||
|
|
||||||
ret = g_file_get_contents(sdt->asl_file, (gchar **)&sdt->asl,
|
if (ret) {
|
||||||
&sdt->asl_len, &error);
|
ret = g_file_get_contents(sdt->asl_file, (gchar **)&sdt->asl,
|
||||||
g_assert(ret);
|
&sdt->asl_len, &error);
|
||||||
g_assert_no_error(error);
|
g_assert(ret);
|
||||||
g_assert(sdt->asl_len);
|
g_assert_no_error(error);
|
||||||
|
g_assert(sdt->asl_len);
|
||||||
|
}
|
||||||
|
|
||||||
g_free(out);
|
g_free(out);
|
||||||
g_free(out_err);
|
g_free(out_err);
|
||||||
g_string_free(command_line, true);
|
g_string_free(command_line, true);
|
||||||
|
|
||||||
|
return !ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define COMMENT_END "*/"
|
#define COMMENT_END "*/"
|
||||||
|
@ -517,6 +522,7 @@ static void test_acpi_asl(test_data *data)
|
||||||
int i;
|
int i;
|
||||||
AcpiSdtTable *sdt, *exp_sdt;
|
AcpiSdtTable *sdt, *exp_sdt;
|
||||||
test_data exp_data;
|
test_data exp_data;
|
||||||
|
gboolean exp_err, err;
|
||||||
|
|
||||||
memset(&exp_data, 0, sizeof(exp_data));
|
memset(&exp_data, 0, sizeof(exp_data));
|
||||||
exp_data.tables = load_expected_aml(data);
|
exp_data.tables = load_expected_aml(data);
|
||||||
|
@ -527,20 +533,24 @@ static void test_acpi_asl(test_data *data)
|
||||||
sdt = &g_array_index(data->tables, AcpiSdtTable, i);
|
sdt = &g_array_index(data->tables, AcpiSdtTable, i);
|
||||||
exp_sdt = &g_array_index(exp_data.tables, AcpiSdtTable, i);
|
exp_sdt = &g_array_index(exp_data.tables, AcpiSdtTable, i);
|
||||||
|
|
||||||
load_asl(data->tables, sdt);
|
err = load_asl(data->tables, sdt);
|
||||||
asl = normalize_asl(sdt->asl);
|
asl = normalize_asl(sdt->asl);
|
||||||
|
|
||||||
load_asl(exp_data.tables, exp_sdt);
|
exp_err = load_asl(exp_data.tables, exp_sdt);
|
||||||
exp_asl = normalize_asl(exp_sdt->asl);
|
exp_asl = normalize_asl(exp_sdt->asl);
|
||||||
|
|
||||||
|
/* TODO: check for warnings */
|
||||||
|
g_assert(!err || exp_err);
|
||||||
|
|
||||||
if (g_strcmp0(asl->str, exp_asl->str)) {
|
if (g_strcmp0(asl->str, exp_asl->str)) {
|
||||||
sdt->asl_file_retain = true;
|
sdt->tmp_files_retain = true;
|
||||||
exp_sdt->asl_file_retain = true;
|
exp_sdt->tmp_files_retain = true;
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"acpi-test: Warning! %.4s mismatch. "
|
"acpi-test: Warning! %.4s mismatch. "
|
||||||
"Orig asl: %s, expected asl %s.\n",
|
"Actual [asl:%s, aml:%s], Expected [asl:%s, aml:%s].\n",
|
||||||
(gchar *)&exp_sdt->header.signature,
|
(gchar *)&exp_sdt->header.signature,
|
||||||
sdt->asl_file, exp_sdt->asl_file);
|
sdt->asl_file, sdt->aml_file,
|
||||||
|
exp_sdt->asl_file, exp_sdt->aml_file);
|
||||||
}
|
}
|
||||||
g_string_free(asl, true);
|
g_string_free(asl, true);
|
||||||
g_string_free(exp_asl, true);
|
g_string_free(exp_asl, true);
|
||||||
|
|
|
@ -140,7 +140,7 @@ static void do_spawn_thread(ThreadPool *pool)
|
||||||
pool->new_threads--;
|
pool->new_threads--;
|
||||||
pool->pending_threads++;
|
pool->pending_threads++;
|
||||||
|
|
||||||
qemu_thread_create(&t, worker_thread, pool, QEMU_THREAD_DETACHED);
|
qemu_thread_create(&t, "worker", worker_thread, pool, QEMU_THREAD_DETACHED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void spawn_thread_bh_fn(void *opaque)
|
static void spawn_thread_bh_fn(void *opaque)
|
||||||
|
|
|
@ -333,7 +333,8 @@ void vnc_start_worker_thread(void)
|
||||||
return ;
|
return ;
|
||||||
|
|
||||||
q = vnc_queue_init();
|
q = vnc_queue_init();
|
||||||
qemu_thread_create(&q->thread, vnc_worker_thread, q, QEMU_THREAD_DETACHED);
|
qemu_thread_create(&q->thread, "vnc_worker", vnc_worker_thread, q,
|
||||||
|
QEMU_THREAD_DETACHED);
|
||||||
queue = q; /* Set global queue */
|
queue = q; /* Set global queue */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,8 @@ static int qemu_signalfd_compat(const sigset_t *mask)
|
||||||
memcpy(&info->mask, mask, sizeof(*mask));
|
memcpy(&info->mask, mask, sizeof(*mask));
|
||||||
info->fd = fds[1];
|
info->fd = fds[1];
|
||||||
|
|
||||||
qemu_thread_create(&thread, sigwait_compat, info, QEMU_THREAD_DETACHED);
|
qemu_thread_create(&thread, "signalfd_compat", sigwait_compat, info,
|
||||||
|
QEMU_THREAD_DETACHED);
|
||||||
|
|
||||||
return fds[0];
|
return fds[0];
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,13 @@
|
||||||
#include "qemu/thread.h"
|
#include "qemu/thread.h"
|
||||||
#include "qemu/atomic.h"
|
#include "qemu/atomic.h"
|
||||||
|
|
||||||
|
static bool name_threads;
|
||||||
|
|
||||||
|
void qemu_thread_naming(bool enable)
|
||||||
|
{
|
||||||
|
name_threads = enable;
|
||||||
|
}
|
||||||
|
|
||||||
static void error_exit(int err, const char *msg)
|
static void error_exit(int err, const char *msg)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "qemu: %s: %s\n", msg, strerror(err));
|
fprintf(stderr, "qemu: %s: %s\n", msg, strerror(err));
|
||||||
|
@ -387,8 +394,7 @@ void qemu_event_wait(QemuEvent *ev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qemu_thread_create(QemuThread *thread, const char *name,
|
||||||
void qemu_thread_create(QemuThread *thread,
|
|
||||||
void *(*start_routine)(void*),
|
void *(*start_routine)(void*),
|
||||||
void *arg, int mode)
|
void *arg, int mode)
|
||||||
{
|
{
|
||||||
|
@ -414,6 +420,12 @@ void qemu_thread_create(QemuThread *thread,
|
||||||
if (err)
|
if (err)
|
||||||
error_exit(err, __func__);
|
error_exit(err, __func__);
|
||||||
|
|
||||||
|
#ifdef _GNU_SOURCE
|
||||||
|
if (name_threads) {
|
||||||
|
pthread_setname_np(thread->thread, name);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
pthread_sigmask(SIG_SETMASK, &oldset, NULL);
|
pthread_sigmask(SIG_SETMASK, &oldset, NULL);
|
||||||
|
|
||||||
pthread_attr_destroy(&attr);
|
pthread_attr_destroy(&attr);
|
||||||
|
|
|
@ -16,6 +16,14 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
|
static bool name_threads;
|
||||||
|
|
||||||
|
void qemu_thread_naming(bool enable)
|
||||||
|
{
|
||||||
|
/* But note we don't actually name them on Windows yet */
|
||||||
|
name_threads = enable;
|
||||||
|
}
|
||||||
|
|
||||||
static void error_exit(int err, const char *msg)
|
static void error_exit(int err, const char *msg)
|
||||||
{
|
{
|
||||||
char *pstr;
|
char *pstr;
|
||||||
|
@ -325,7 +333,7 @@ void *qemu_thread_join(QemuThread *thread)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_thread_create(QemuThread *thread,
|
void qemu_thread_create(QemuThread *thread, const char *name,
|
||||||
void *(*start_routine)(void *),
|
void *(*start_routine)(void *),
|
||||||
void *arg, int mode)
|
void *arg, int mode)
|
||||||
{
|
{
|
||||||
|
|
61
vl.c
61
vl.c
|
@ -479,6 +479,33 @@ static QemuOptsList qemu_msg_opts = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_name_opts = {
|
||||||
|
.name = "name",
|
||||||
|
.implied_opt_name = "guest",
|
||||||
|
.merge_lists = true,
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_name_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "guest",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "Sets the name of the guest.\n"
|
||||||
|
"This name will be displayed in the SDL window caption.\n"
|
||||||
|
"The name will also be used for the VNC server",
|
||||||
|
}, {
|
||||||
|
.name = "process",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "Sets the name of the QEMU process, as shown in top etc",
|
||||||
|
}, {
|
||||||
|
.name = "debug-threads",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "When enabled, name the individual threads; defaults off.\n"
|
||||||
|
"NOTE: The thread names are for debugging and not a\n"
|
||||||
|
"stable API.",
|
||||||
|
},
|
||||||
|
{ /* End of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get machine options
|
* Get machine options
|
||||||
*
|
*
|
||||||
|
@ -929,6 +956,21 @@ static int parse_sandbox(QemuOpts *opts, void *opaque)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void parse_name(QemuOpts *opts)
|
||||||
|
{
|
||||||
|
const char *proc_name;
|
||||||
|
|
||||||
|
if (qemu_opt_get(opts, "debug-threads")) {
|
||||||
|
qemu_thread_naming(qemu_opt_get_bool(opts, "debug-threads", false));
|
||||||
|
}
|
||||||
|
qemu_name = qemu_opt_get(opts, "guest");
|
||||||
|
|
||||||
|
proc_name = qemu_opt_get(opts, "process");
|
||||||
|
if (proc_name) {
|
||||||
|
os_set_proc_name(proc_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool usb_enabled(bool default_usb)
|
bool usb_enabled(bool default_usb)
|
||||||
{
|
{
|
||||||
return qemu_opt_get_bool(qemu_get_machine_opts(), "usb", default_usb);
|
return qemu_opt_get_bool(qemu_get_machine_opts(), "usb", default_usb);
|
||||||
|
@ -2889,6 +2931,7 @@ int main(int argc, char **argv, char **envp)
|
||||||
qemu_add_opts(&qemu_tpmdev_opts);
|
qemu_add_opts(&qemu_tpmdev_opts);
|
||||||
qemu_add_opts(&qemu_realtime_opts);
|
qemu_add_opts(&qemu_realtime_opts);
|
||||||
qemu_add_opts(&qemu_msg_opts);
|
qemu_add_opts(&qemu_msg_opts);
|
||||||
|
qemu_add_opts(&qemu_name_opts);
|
||||||
|
|
||||||
runstate_init();
|
runstate_init();
|
||||||
|
|
||||||
|
@ -3634,19 +3677,11 @@ int main(int argc, char **argv, char **envp)
|
||||||
"is no longer supported.\n");
|
"is no longer supported.\n");
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_name:
|
case QEMU_OPTION_name:
|
||||||
qemu_name = g_strdup(optarg);
|
opts = qemu_opts_parse(qemu_find_opts("name"), optarg, 1);
|
||||||
{
|
if (!opts) {
|
||||||
char *p = strchr(qemu_name, ',');
|
exit(1);
|
||||||
if (p != NULL) {
|
}
|
||||||
*p++ = 0;
|
parse_name(opts);
|
||||||
if (strncmp(p, "process=", 8)) {
|
|
||||||
fprintf(stderr, "Unknown subargument %s to -name\n", p);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
p += 8;
|
|
||||||
os_set_proc_name(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case QEMU_OPTION_prom_env:
|
case QEMU_OPTION_prom_env:
|
||||||
if (nb_prom_envs >= MAX_PROM_ENVS) {
|
if (nb_prom_envs >= MAX_PROM_ENVS) {
|
||||||
|
|
Loading…
Reference in a new issue