qemu/hw
Laszlo Ersek 9bcc80cd71 i386/acpi-build: allow more than 255 elements in CPON
The build_ssdt() function builds a number of AML objects that are related
to CPU hotplug, and whose IDs form a contiguous sequence of APIC IDs.
(APIC IDs are in fact discontiguous, but this is the traditional
interface: build a contiguous sequence from zero up that covers all
possible APIC IDs.) These objects are:

- a Processor() object for each VCPU,
- a NTFY method, with one branch for each VCPU,
- a CPON package with one element (hotplug status byte) for each VCPU.

The build_ssdt() function currently limits the *count* of processor
objects, and NTFY branches, and CPON elements, in 0xFF (see the assignment
to "acpi_cpus"). This allows for an inclusive APIC ID range of [0..254].
This is incorrect, because the highest APIC ID that we otherwise allow a
VCPU to take is 255.

In order to extend the maximum count to 256, and the traversed APIC ID
range correspondingly to [0..255]:
- the Processor() objects need no change,
- the NTFY method also needs no change,
- the CPON package must be updated, because it is defined with a
  DefPackage, and the number of elements in such a package can be at most
  255. We pick a DefVarPackage instead.

We replace the Op byte, and the encoding of the number of elements.
Compare:

DefPackage     := PackageOp    PkgLength NumElements    PackageElementList
DefVarPackage  := VarPackageOp PkgLength VarNumElements PackageElementList

PackageOp      := 0x12
VarPackageOp   := 0x13

NumElements    := ByteData
VarNumElements := TermArg => Integer

The build_append_int() function implements precisely the following TermArg
encodings (a subset of what the ACPI spec describes):

  TermArg             := DataObject
  DataObject          := ComputationalData
  ComputationalData   := ConstObj | ByteConst | WordConst | DWordConst

  directly encoded in the function, with build_append_byte():
    ConstObj          := ZeroOp | OneOp
      ZeroOp          := 0x00
      OneOp           := 0x01

  call to build_append_value(..., 1):
    ByteConst         := BytePrefix ByteData
      BytePrefix      := 0x0A
      ByteData        := 0x00 - 0xFF

  call to build_append_value(..., 2):
    WordConst         := WordPrefix WordData
      WordPrefix      := 0x0B
      WordData        := ByteData[0:7] ByteData[8:15]

  call to build_append_value(..., 4):
    DWordConst        := DWordPrefix DWordData
      DWordPrefix     := 0x0C
      DWordData       := WordData[0:15] WordData[16:31]

Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2014-03-18 16:08:43 +02:00
..
9pfs hw/9pfs: use g_strdup_printf() instead of PATH_MAX limitation 2014-03-04 00:57:57 +05:30
acpi acpi: Assert sts array limit on AcpiCpuHotplug_add() 2014-03-18 16:08:43 +02:00
alpha exec: Make stq_*_phys input an AddressSpace 2014-02-11 22:57:12 +10:00
arm console: add head to index to qemu consoles. 2014-03-05 09:52:04 +01:00
audio hda-audio: qom cleanups 2014-02-24 10:42:09 +01:00
block Add a 'name' parameter to qemu_thread_create 2014-03-09 21:09:38 +02:00
bt Preparation for usb-bt-dongle conditional build 2013-09-10 11:14:41 +02:00
char QOM infrastructure fixes and device conversions 2014-02-20 13:05:48 +00:00
core pc: avoid duplicate names for ROM MRs 2014-03-11 13:25:48 +02:00
cpu icc_bus: QOM'ify ICC 2013-12-24 18:02:18 +01:00
cris cris: Remove the CRIS PIC glue 2014-02-03 14:04:00 +00:00
display xenfb: Fix graphic_console_init() build failure 2014-03-08 11:27:00 +00:00
dma dma/pl330: implement dmaadnh instruction 2014-02-26 17:20:09 +00:00
gpio max7310: QOM'ify 2014-02-14 16:22:32 +01:00
i2c i2c: Rename i2c_bus to I2CBus 2014-02-14 16:22:31 +01:00
i386 i386/acpi-build: allow more than 255 elements in CPON 2014-03-18 16:08:43 +02:00
ide hw/ide/ahci.h: Avoid shifting left into sign bit 2014-03-07 11:29:21 +01:00
input pckbd: return 'keyboard enabled' on read input port command 2014-03-09 21:09:38 +02:00
intc qemu: x86: ignore ioapic polarity 2014-03-09 21:09:38 +02:00
ipack ipack: Move IndustryPack out of hw/char/ 2014-02-14 21:11:53 +01:00
isa QOM infrastructure fixes and device conversions 2014-02-20 13:05:48 +00:00
lm32 hw/lm32: print error if cpu model is not found 2014-02-04 19:47:39 +01:00
m68k an5206: Don't enforce use of kernel for qtest 2013-11-05 17:47:29 +01:00
microblaze xilinx: Delete hw/include/xilinx.h 2014-02-26 14:54:45 +10:00
mips i2c: Rename i2c_bus to I2CBus 2014-02-14 16:22:31 +01:00
misc Updates include: 2014-02-27 11:31:52 +00:00
moxie moxie: fix load_elf() usage 2014-03-05 03:06:46 +01:00
net virtio-net: remove function calls from assert 2014-03-09 21:09:37 +02:00
nvram qdev: Remove hex8/32/64 property types 2014-02-14 21:12:04 +01:00
openrisc openrisc-timer: Reduce overhead, Separate clock update functions 2013-11-20 21:46:45 +08:00
pci PCIE: fix regression with coldplugged multifunction device 2014-03-09 21:09:37 +02:00
pci-bridge pci/shpc: convert SHPC hotplug to use hotplug-handler API 2014-02-10 10:27:00 +02:00
pci-host q35: Correct typo BRDIGE -> BRIDGE 2014-03-11 13:27:27 +02:00
pcmcia pcmcia/pxa2xx: QOM'ify PXA2xxPCMCIAState 2013-11-05 18:06:52 +01:00
ppc target-ppc: spapr: e500: fix to use cpu_dt_id 2014-03-05 03:07:04 +01:00
s390x Patch queue for ppc - 2014-03-05 2014-03-07 16:36:38 +00:00
scsi spapr_vscsi: Fix REPORT_LUNS handling 2014-03-05 03:06:26 +01:00
sd QOM infrastructure fixes and device conversions 2014-02-20 13:05:48 +00:00
sh4 exec: Make stw_*_phys input an AddressSpace 2014-02-11 22:57:32 +10:00
sparc sun4m: Add Sun CG3 framebuffer initialisation function 2014-02-27 10:01:41 +00:00
sparc64 pc,pci,virtio fixes and cleanups 2013-09-03 12:31:07 -05:00
ssi xilinx_spi: QOM cast cleanup 2013-07-29 21:07:01 +02:00
timer Merge remote-tracking branch 'remotes/mcayland/qemu-sparc' into staging 2014-03-04 13:09:06 +00:00
tpm aio / timers: Untangle include files 2013-08-22 19:10:27 +02:00
unicore32 console: add head to index to qemu consoles. 2014-03-05 09:52:04 +01:00
usb Add a 'name' parameter to qemu_thread_create 2014-03-09 21:09:38 +02:00
virtio qdev: Remove hex8/32/64 property types 2014-02-14 21:12:04 +01:00
watchdog qemu-option: Remove qemu_opts_create_nofail 2014-01-06 15:02:30 -05:00
xen Call pci_piix3_xen_ide_unplug from unplug_disks 2014-02-20 17:28:08 +00:00
xtensa hw/xtensa: add support for ML605 and KC705 FPGA board 2014-02-24 04:47:01 +04:00
Makefile.objs hw/9pfs: Include virtio-9p-device.o in build 2014-03-04 09:20:49 +05:30