Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 127346
b: refs/heads/master
c: 753e3ac
h: refs/heads/master
v: v3
  • Loading branch information
Taku Izumi authored and Jesse Barnes committed Jan 7, 2009
1 parent ae6d065 commit 07c4952
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4ba7d0f0eb68cf7731ead4ca20e540d0266cfa8e
refs/heads/master: 753e3aca735dc446f66d501b625122661738b57d
30 changes: 17 additions & 13 deletions trunk/drivers/pci/pci-acpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,15 @@ struct acpi_osc_data {
acpi_handle handle;
u32 support_set;
u32 control_set;
int is_queried;
u32 query_result;
struct list_head sibiling;
};
static LIST_HEAD(acpi_osc_data_list);

struct acpi_osc_args {
u32 capbuf[3];
u32 ctrl_result;
u32 query_result;
};

static DEFINE_MUTEX(pci_acpi_lock);
Expand Down Expand Up @@ -112,17 +114,17 @@ static acpi_status acpi_run_osc(acpi_handle handle,
goto out_kfree;
}
out_success:
osc_args->ctrl_result =
*((u32 *)(out_obj->buffer.pointer + 8));
if (flags & OSC_QUERY_ENABLE)
osc_args->query_result =
*((u32 *)(out_obj->buffer.pointer + 8));
status = AE_OK;

out_kfree:
kfree(output.pointer);
return status;
}

static acpi_status __acpi_query_osc(u32 flags, struct acpi_osc_data *osc_data,
u32 *result)
static acpi_status __acpi_query_osc(u32 flags, struct acpi_osc_data *osc_data)
{
acpi_status status;
u32 support_set;
Expand All @@ -137,7 +139,8 @@ static acpi_status __acpi_query_osc(u32 flags, struct acpi_osc_data *osc_data,
status = acpi_run_osc(osc_data->handle, &osc_args);
if (ACPI_SUCCESS(status)) {
osc_data->support_set = support_set;
*result = osc_args.ctrl_result;
osc_data->query_result = osc_args.query_result;
osc_data->is_queried = 1;
}

return status;
Expand All @@ -151,7 +154,6 @@ static acpi_status __acpi_query_osc(u32 flags, struct acpi_osc_data *osc_data,
*/
int pci_acpi_osc_support(acpi_handle handle, u32 flags)
{
u32 dummy;
acpi_status status;
acpi_handle tmp;
struct acpi_osc_data *osc_data;
Expand All @@ -169,7 +171,7 @@ int pci_acpi_osc_support(acpi_handle handle, u32 flags)
goto out;
}

__acpi_query_osc(flags, osc_data, &dummy);
__acpi_query_osc(flags, osc_data);
out:
mutex_unlock(&pci_acpi_lock);
return rc;
Expand All @@ -185,7 +187,7 @@ int pci_acpi_osc_support(acpi_handle handle, u32 flags)
acpi_status pci_osc_control_set(acpi_handle handle, u32 flags)
{
acpi_status status;
u32 ctrlset, control_set, result;
u32 ctrlset, control_set;
acpi_handle tmp;
struct acpi_osc_data *osc_data;
struct acpi_osc_args osc_args;
Expand All @@ -208,11 +210,13 @@ acpi_status pci_osc_control_set(acpi_handle handle, u32 flags)
goto out;
}

status = __acpi_query_osc(osc_data->support_set, osc_data, &result);
if (ACPI_FAILURE(status))
goto out;
if (!osc_data->is_queried) {
status = __acpi_query_osc(osc_data->support_set, osc_data);
if (ACPI_FAILURE(status))
goto out;
}

if ((result & ctrlset) != ctrlset) {
if ((osc_data->query_result & ctrlset) != ctrlset) {
status = AE_SUPPORT;
goto out;
}
Expand Down

0 comments on commit 07c4952

Please sign in to comment.