ACPI: change arguments to internal acpi_find_dsd()

acpi_find_dsd() is not a bus function and we only need the acpi_device (ad).
The only caller has already looked up the ad (from ivars) for us.
Directly pass the ad to acpi_find_dsd() instead of bus, dev and remove
the extra call to device_get_ivars(); the changed argument also means we
now call AcpiEvaluateObject directly on the handle.

This optimisation was done a while ago while debugging a driver which
ended up with a bad bus, dev combination making the old version fail.

MFC after:	2 weeks
Reviewed by:	mw
Differential Revision: https://reviews.freebsd.org/D35558
This commit is contained in:
Bjoern A. Zeeb 2022-06-23 00:17:14 +00:00
parent 513ce835b5
commit 945eaca155

View File

@ -156,7 +156,7 @@ static ACPI_STATUS acpi_device_scan_cb(ACPI_HANDLE h, UINT32 level,
void *context, void **retval);
static ACPI_STATUS acpi_device_scan_children(device_t bus, device_t dev,
int max_depth, acpi_scan_cb_t user_fn, void *arg);
static ACPI_STATUS acpi_find_dsd(device_t bus, device_t dev);
static ACPI_STATUS acpi_find_dsd(struct acpi_device *ad);
static int acpi_isa_pnp_probe(device_t bus, device_t child,
struct isa_pnp_id *ids);
static void acpi_platform_osc(device_t dev);
@ -1864,7 +1864,7 @@ acpi_device_get_prop(device_t bus, device_t dev, ACPI_STRING propname,
return (AE_BAD_PARAMETER);
if (ad->dsd_pkg == NULL) {
if (ad->dsd.Pointer == NULL) {
status = acpi_find_dsd(bus, dev);
status = acpi_find_dsd(ad);
if (ACPI_FAILURE(status))
return (status);
} else {
@ -1893,18 +1893,16 @@ acpi_device_get_prop(device_t bus, device_t dev, ACPI_STRING propname,
}
static ACPI_STATUS
acpi_find_dsd(device_t bus, device_t dev)
acpi_find_dsd(struct acpi_device *ad)
{
const ACPI_OBJECT *dsd, *guid, *pkg;
struct acpi_device *ad;
ACPI_STATUS status;
ad = device_get_ivars(dev);
ad->dsd.Length = ACPI_ALLOCATE_BUFFER;
ad->dsd.Pointer = NULL;
ad->dsd_pkg = NULL;
status = ACPI_EVALUATE_OBJECT(bus, dev, "_DSD", NULL, &ad->dsd);
status = AcpiEvaluateObject(ad->ad_handle, "_DSD", NULL, &ad->dsd);
if (ACPI_FAILURE(status))
return (status);