pcihp: move PCI _DSM function 0 prolog into separate function
it will be reused by follow up patches that will implement static _DSM for non-hotpluggable devices. no functional AML change, only context one, where 'cap' (Local1) initialization is moved after UUID/revision checks. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20230302161543.286002-15-imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
bd95cd5323
commit
0a4584fca3
@ -373,6 +373,33 @@ Aml *aml_pci_device_dsm(void)
|
|||||||
return method;
|
return method;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void build_append_pci_dsm_func0_common(Aml *ctx, Aml *retvar)
|
||||||
|
{
|
||||||
|
Aml *UUID, *ifctx1;
|
||||||
|
uint8_t byte_list[1] = { 0 }; /* nothing supported yet */
|
||||||
|
|
||||||
|
aml_append(ctx, aml_store(aml_buffer(1, byte_list), retvar));
|
||||||
|
/*
|
||||||
|
* PCI Firmware Specification 3.1
|
||||||
|
* 4.6. _DSM Definitions for PCI
|
||||||
|
*/
|
||||||
|
UUID = aml_touuid("E5C937D0-3553-4D7A-9117-EA4D19C3434D");
|
||||||
|
ifctx1 = aml_if(aml_lnot(aml_equal(aml_arg(0), UUID)));
|
||||||
|
{
|
||||||
|
/* call is for unsupported UUID, bail out */
|
||||||
|
aml_append(ifctx1, aml_return(retvar));
|
||||||
|
}
|
||||||
|
aml_append(ctx, ifctx1);
|
||||||
|
|
||||||
|
ifctx1 = aml_if(aml_lless(aml_arg(1), aml_int(2)));
|
||||||
|
{
|
||||||
|
/* call is for unsupported REV, bail out */
|
||||||
|
aml_append(ifctx1, aml_return(retvar));
|
||||||
|
}
|
||||||
|
aml_append(ctx, ifctx1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void build_append_pcihp_notify_entry(Aml *method, int slot)
|
static void build_append_pcihp_notify_entry(Aml *method, int slot)
|
||||||
{
|
{
|
||||||
Aml *if_ctx;
|
Aml *if_ctx;
|
||||||
@ -570,14 +597,13 @@ static bool build_append_notfication_callback(Aml *parent_scope,
|
|||||||
|
|
||||||
static Aml *aml_pci_pdsm(void)
|
static Aml *aml_pci_pdsm(void)
|
||||||
{
|
{
|
||||||
Aml *method, *UUID, *ifctx, *ifctx1;
|
Aml *method, *ifctx, *ifctx1;
|
||||||
Aml *ret = aml_local(0);
|
Aml *ret = aml_local(0);
|
||||||
Aml *caps = aml_local(1);
|
Aml *caps = aml_local(1);
|
||||||
Aml *acpi_index = aml_local(2);
|
Aml *acpi_index = aml_local(2);
|
||||||
Aml *zero = aml_int(0);
|
Aml *zero = aml_int(0);
|
||||||
Aml *one = aml_int(1);
|
Aml *one = aml_int(1);
|
||||||
Aml *func = aml_arg(2);
|
Aml *func = aml_arg(2);
|
||||||
Aml *rev = aml_arg(1);
|
|
||||||
Aml *params = aml_arg(4);
|
Aml *params = aml_arg(4);
|
||||||
Aml *bnum = aml_derefof(aml_index(params, aml_int(0)));
|
Aml *bnum = aml_derefof(aml_index(params, aml_int(0)));
|
||||||
Aml *sunum = aml_derefof(aml_index(params, aml_int(1)));
|
Aml *sunum = aml_derefof(aml_index(params, aml_int(1)));
|
||||||
@ -587,29 +613,9 @@ static Aml *aml_pci_pdsm(void)
|
|||||||
/* get supported functions */
|
/* get supported functions */
|
||||||
ifctx = aml_if(aml_equal(func, zero));
|
ifctx = aml_if(aml_equal(func, zero));
|
||||||
{
|
{
|
||||||
uint8_t byte_list[1] = { 0 }; /* nothing supported yet */
|
build_append_pci_dsm_func0_common(ifctx, ret);
|
||||||
aml_append(ifctx, aml_store(aml_buffer(1, byte_list), ret));
|
|
||||||
aml_append(ifctx, aml_store(zero, caps));
|
aml_append(ifctx, aml_store(zero, caps));
|
||||||
|
|
||||||
/*
|
|
||||||
* PCI Firmware Specification 3.1
|
|
||||||
* 4.6. _DSM Definitions for PCI
|
|
||||||
*/
|
|
||||||
UUID = aml_touuid("E5C937D0-3553-4D7A-9117-EA4D19C3434D");
|
|
||||||
ifctx1 = aml_if(aml_lnot(aml_equal(aml_arg(0), UUID)));
|
|
||||||
{
|
|
||||||
/* call is for unsupported UUID, bail out */
|
|
||||||
aml_append(ifctx1, aml_return(ret));
|
|
||||||
}
|
|
||||||
aml_append(ifctx, ifctx1);
|
|
||||||
|
|
||||||
ifctx1 = aml_if(aml_lless(rev, aml_int(2)));
|
|
||||||
{
|
|
||||||
/* call is for unsupported REV, bail out */
|
|
||||||
aml_append(ifctx1, aml_return(ret));
|
|
||||||
}
|
|
||||||
aml_append(ifctx, ifctx1);
|
|
||||||
|
|
||||||
aml_append(ifctx,
|
aml_append(ifctx,
|
||||||
aml_store(aml_call2("AIDX", bnum, sunum), acpi_index));
|
aml_store(aml_call2("AIDX", bnum, sunum), acpi_index));
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user