Skip to content
  • Michael S. Tsirkin's avatar
    acpi: make SSDT 1.0 spec compliant when possible · b4f4d548
    Michael S. Tsirkin authored
    The ACPI specification says:
    
    The ASL compiler can emit two different AML opcodes for a Package
    declaration, either PackageOp or VarPackageOp. For small, fixed-length
    packages, the PackageOp is used and this opcode is compatible with ACPI
    1.0. A VarPackageOp will be emitted if any of the following conditions
    are true:
    . The NumElements argument is a TermArg that can only be resolved at
    runtime.
    . At compile time, NumElements resolves to a constant that is larger than
    255.
    . The PackageList contains more than 255 initializer elements.
    Note: The ability to create variable-sized packages was first introduced
    in ACPI 2.0. ACPI 1.0 only allowed fixed-size packages with up to 255 elements.
    
    So the spec seems to say a fixed value up to 255 must always
    be used with PackageOp and not VarPackageOp, and some guests
    (windows up to win2k8) seem to interpret it like this.
    
    Let's do just this, choosing the encoding depending on
    the number of elements.
    
    Fixes 9bcc80cd
    (i386/acpi-build: allow more than 255 elements in CPON).
    
    https://bugs.launchpad.net/bugs/1297651
    
    
    
    Reported-by: default avatarRobert Hu <robert.hu@intel.com>
    Cc: Laszlo Ersek <lersek@redhat.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    b4f4d548