ACPI: Convert ACPI reference args to generic fwnode reference args
Convert all users of struct acpi_reference_args to more generic fwnode_reference_args. This will 1) avoid an ACPI specific references to device nodes with integer arguments as well as 2) allow making references to nodes other than device nodes in ACPI. As a by-product, convert the fwnode interger arguments to u64. The arguments were 64-bit integers on ACPI but the fwnode arguments were just 32-bit. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
这个提交包含在:
@@ -579,7 +579,7 @@ static int acpi_data_get_property_array(const struct acpi_device_data *data,
|
||||
*/
|
||||
int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
||||
const char *propname, size_t index, size_t num_args,
|
||||
struct acpi_reference_args *args)
|
||||
struct fwnode_reference_args *args)
|
||||
{
|
||||
const union acpi_object *element, *end;
|
||||
const union acpi_object *obj;
|
||||
@@ -607,7 +607,7 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
||||
if (ret)
|
||||
return ret == -ENODEV ? -EINVAL : ret;
|
||||
|
||||
args->adev = device;
|
||||
args->fwnode = acpi_fwnode_handle(device);
|
||||
args->nargs = 0;
|
||||
return 0;
|
||||
}
|
||||
@@ -653,11 +653,11 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (nargs > MAX_ACPI_REFERENCE_ARGS)
|
||||
if (nargs > NR_FWNODE_REFERENCE_ARGS)
|
||||
return -EINVAL;
|
||||
|
||||
if (idx == index) {
|
||||
args->adev = device;
|
||||
args->fwnode = acpi_fwnode_handle(device);
|
||||
args->nargs = nargs;
|
||||
for (i = 0; i < nargs; i++)
|
||||
args->args[i] = element[i].integer.value;
|
||||
@@ -1089,7 +1089,7 @@ int acpi_graph_get_remote_endpoint(const struct fwnode_handle *__fwnode,
|
||||
{
|
||||
struct fwnode_handle *fwnode;
|
||||
unsigned int port_nr, endpoint_nr;
|
||||
struct acpi_reference_args args;
|
||||
struct fwnode_reference_args args;
|
||||
int ret;
|
||||
|
||||
memset(&args, 0, sizeof(args));
|
||||
@@ -1098,6 +1098,10 @@ int acpi_graph_get_remote_endpoint(const struct fwnode_handle *__fwnode,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Ensure this is a device node. */
|
||||
if (!is_acpi_device_node(args.fwnode))
|
||||
return -ENODEV;
|
||||
|
||||
/*
|
||||
* Always require two arguments with the reference: port and
|
||||
* endpoint indices.
|
||||
@@ -1105,7 +1109,7 @@ int acpi_graph_get_remote_endpoint(const struct fwnode_handle *__fwnode,
|
||||
if (args.nargs != 2)
|
||||
return -EPROTO;
|
||||
|
||||
fwnode = acpi_fwnode_handle(args.adev);
|
||||
fwnode = args.fwnode;
|
||||
port_nr = args.args[0];
|
||||
endpoint_nr = args.args[1];
|
||||
|
||||
@@ -1209,24 +1213,8 @@ acpi_fwnode_get_reference_args(const struct fwnode_handle *fwnode,
|
||||
unsigned int args_count, unsigned int index,
|
||||
struct fwnode_reference_args *args)
|
||||
{
|
||||
struct acpi_reference_args acpi_args;
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
ret = __acpi_node_get_property_reference(fwnode, prop, index,
|
||||
args_count, &acpi_args);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (!args)
|
||||
return 0;
|
||||
|
||||
args->nargs = acpi_args.nargs;
|
||||
args->fwnode = acpi_fwnode_handle(acpi_args.adev);
|
||||
|
||||
for (i = 0; i < NR_FWNODE_REFERENCE_ARGS; i++)
|
||||
args->args[i] = i < acpi_args.nargs ? acpi_args.args[i] : 0;
|
||||
|
||||
return 0;
|
||||
return __acpi_node_get_property_reference(fwnode, prop, index,
|
||||
args_count, args);
|
||||
}
|
||||
|
||||
static struct fwnode_handle *
|
||||
|
在新工单中引用
屏蔽一个用户