Commit 07cb390f authored by Bob Moore's avatar Bob Moore Committed by Rafael J. Wysocki

ACPICA: Revert "acpi_get_object_info: Add support for ACPI 5.0 _SUB method."

ACPICA commit e4743959b59ad93eab7310adf756adc930be0ddb

This reverts commit 8e7a8753827660c3dd1f571f3185610402b756f0.

The _SUB method was found to be problematic for this interface
because some implementations use control methods. Therefore,
it is being removed.

Operations cannot be used because this interface is called
during the device discovery scan and the region handlers are
not fully installed at that time.

Link: https://github.com/acpica/acpica/commit/e4743959Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 4d16ca17
...@@ -363,10 +363,6 @@ acpi_status ...@@ -363,10 +363,6 @@ acpi_status
acpi_ut_execute_UID(struct acpi_namespace_node *device_node, acpi_ut_execute_UID(struct acpi_namespace_node *device_node,
struct acpi_pnp_device_id ** return_id); struct acpi_pnp_device_id ** return_id);
acpi_status
acpi_ut_execute_SUB(struct acpi_namespace_node *device_node,
struct acpi_pnp_device_id **return_id);
acpi_status acpi_status
acpi_ut_execute_CID(struct acpi_namespace_node *device_node, acpi_ut_execute_CID(struct acpi_namespace_node *device_node,
struct acpi_pnp_device_id_list ** return_cid_list); struct acpi_pnp_device_id_list ** return_cid_list);
......
...@@ -588,7 +588,7 @@ void acpi_db_display_calling_tree(void) ...@@ -588,7 +588,7 @@ void acpi_db_display_calling_tree(void)
* *
* FUNCTION: acpi_db_display_object_type * FUNCTION: acpi_db_display_object_type
* *
* PARAMETERS: name - User entered NS node handle or name * PARAMETERS: object_arg - User entered NS node handle
* *
* RETURN: None * RETURN: None
* *
...@@ -596,44 +596,34 @@ void acpi_db_display_calling_tree(void) ...@@ -596,44 +596,34 @@ void acpi_db_display_calling_tree(void)
* *
******************************************************************************/ ******************************************************************************/
void acpi_db_display_object_type(char *name) void acpi_db_display_object_type(char *object_arg)
{ {
struct acpi_namespace_node *node; acpi_handle handle;
struct acpi_device_info *info; struct acpi_device_info *info;
acpi_status status; acpi_status status;
u32 i; u32 i;
node = acpi_db_convert_to_node(name); handle = ACPI_TO_POINTER(strtoul(object_arg, NULL, 16));
if (!node) {
return;
}
status = acpi_get_object_info(ACPI_CAST_PTR(acpi_handle, node), &info); status = acpi_get_object_info(handle, &info);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
acpi_os_printf("Could not get object info, %s\n", acpi_os_printf("Could not get object info, %s\n",
acpi_format_exception(status)); acpi_format_exception(status));
return; return;
} }
if (info->valid & ACPI_VALID_ADR) { acpi_os_printf("ADR: %8.8X%8.8X, STA: %8.8X, Flags: %X\n",
acpi_os_printf("ADR: %8.8X%8.8X, STA: %8.8X, Flags: %X\n", ACPI_FORMAT_UINT64(info->address),
ACPI_FORMAT_UINT64(info->address), info->current_status, info->flags);
info->current_status, info->flags);
} acpi_os_printf("S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X\n",
if (info->valid & ACPI_VALID_SXDS) { info->highest_dstates[0], info->highest_dstates[1],
acpi_os_printf("S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X\n", info->highest_dstates[2], info->highest_dstates[3]);
info->highest_dstates[0],
info->highest_dstates[1], acpi_os_printf("S0W-%2.2X S1W-%2.2X S2W-%2.2X S3W-%2.2X S4W-%2.2X\n",
info->highest_dstates[2], info->lowest_dstates[0], info->lowest_dstates[1],
info->highest_dstates[3]); info->lowest_dstates[2], info->lowest_dstates[3],
} info->lowest_dstates[4]);
if (info->valid & ACPI_VALID_SXWS) {
acpi_os_printf
("S0W-%2.2X S1W-%2.2X S2W-%2.2X S3W-%2.2X S4W-%2.2X\n",
info->lowest_dstates[0], info->lowest_dstates[1],
info->lowest_dstates[2], info->lowest_dstates[3],
info->lowest_dstates[4]);
}
if (info->valid & ACPI_VALID_HID) { if (info->valid & ACPI_VALID_HID) {
acpi_os_printf("HID: %s\n", info->hardware_id.string); acpi_os_printf("HID: %s\n", info->hardware_id.string);
...@@ -643,10 +633,6 @@ void acpi_db_display_object_type(char *name) ...@@ -643,10 +633,6 @@ void acpi_db_display_object_type(char *name)
acpi_os_printf("UID: %s\n", info->unique_id.string); acpi_os_printf("UID: %s\n", info->unique_id.string);
} }
if (info->valid & ACPI_VALID_SUB) {
acpi_os_printf("SUB: %s\n", info->subsystem_id.string);
}
if (info->valid & ACPI_VALID_CID) { if (info->valid & ACPI_VALID_CID) {
for (i = 0; i < info->compatible_id_list.count; i++) { for (i = 0; i < info->compatible_id_list.count; i++) {
acpi_os_printf("CID %u: %s\n", i, acpi_os_printf("CID %u: %s\n", i,
......
...@@ -238,7 +238,6 @@ static char *acpi_ns_copy_device_id(struct acpi_pnp_device_id *dest, ...@@ -238,7 +238,6 @@ static char *acpi_ns_copy_device_id(struct acpi_pnp_device_id *dest,
struct acpi_pnp_device_id *source, struct acpi_pnp_device_id *source,
char *string_area) char *string_area)
{ {
/* Create the destination PNP_DEVICE_ID */ /* Create the destination PNP_DEVICE_ID */
dest->string = string_area; dest->string = string_area;
...@@ -263,8 +262,8 @@ static char *acpi_ns_copy_device_id(struct acpi_pnp_device_id *dest, ...@@ -263,8 +262,8 @@ static char *acpi_ns_copy_device_id(struct acpi_pnp_device_id *dest,
* namespace node and possibly by running several standard * namespace node and possibly by running several standard
* control methods (Such as in the case of a device.) * control methods (Such as in the case of a device.)
* *
* For Device and Processor objects, run the Device _HID, _UID, _CID, _SUB, * For Device and Processor objects, run the Device _HID, _UID, _CID, _STA,
* _CLS, _STA, _ADR, _sx_w, and _sx_d methods. * _CLS, _ADR, _sx_w, and _sx_d methods.
* *
* Note: Allocates the return buffer, must be freed by the caller. * Note: Allocates the return buffer, must be freed by the caller.
* *
...@@ -279,7 +278,6 @@ acpi_get_object_info(acpi_handle handle, ...@@ -279,7 +278,6 @@ acpi_get_object_info(acpi_handle handle,
struct acpi_pnp_device_id_list *cid_list = NULL; struct acpi_pnp_device_id_list *cid_list = NULL;
struct acpi_pnp_device_id *hid = NULL; struct acpi_pnp_device_id *hid = NULL;
struct acpi_pnp_device_id *uid = NULL; struct acpi_pnp_device_id *uid = NULL;
struct acpi_pnp_device_id *sub = NULL;
struct acpi_pnp_device_id *cls = NULL; struct acpi_pnp_device_id *cls = NULL;
char *next_id_string; char *next_id_string;
acpi_object_type type; acpi_object_type type;
...@@ -325,7 +323,7 @@ acpi_get_object_info(acpi_handle handle, ...@@ -325,7 +323,7 @@ acpi_get_object_info(acpi_handle handle,
if ((type == ACPI_TYPE_DEVICE) || (type == ACPI_TYPE_PROCESSOR)) { if ((type == ACPI_TYPE_DEVICE) || (type == ACPI_TYPE_PROCESSOR)) {
/* /*
* Get extra info for ACPI Device/Processor objects only: * Get extra info for ACPI Device/Processor objects only:
* Run the Device _HID, _UID, _SUB, _CID, and _CLS methods. * Run the Device _HID, _UID, _CLS, and _CID methods.
* *
* Note: none of these methods are required, so they may or may * Note: none of these methods are required, so they may or may
* not be present for this device. The Info->Valid bitfield is used * not be present for this device. The Info->Valid bitfield is used
...@@ -348,14 +346,6 @@ acpi_get_object_info(acpi_handle handle, ...@@ -348,14 +346,6 @@ acpi_get_object_info(acpi_handle handle,
valid |= ACPI_VALID_UID; valid |= ACPI_VALID_UID;
} }
/* Execute the Device._SUB method */
status = acpi_ut_execute_SUB(node, &sub);
if (ACPI_SUCCESS(status)) {
info_size += sub->length;
valid |= ACPI_VALID_SUB;
}
/* Execute the Device._CID method */ /* Execute the Device._CID method */
status = acpi_ut_execute_CID(node, &cid_list); status = acpi_ut_execute_CID(node, &cid_list);
...@@ -456,9 +446,8 @@ acpi_get_object_info(acpi_handle handle, ...@@ -456,9 +446,8 @@ acpi_get_object_info(acpi_handle handle,
} }
/* /*
* Copy the HID, UID, SUB, and CIDs to the return buffer. * Copy the HID, UID, and CIDs to the return buffer. The variable-length
* The variable-length strings are copied to the reserved area * strings are copied to the reserved area at the end of the buffer.
* at the end of the buffer.
* *
* For HID and CID, check if the ID is a PCI Root Bridge. * For HID and CID, check if the ID is a PCI Root Bridge.
*/ */
...@@ -476,11 +465,6 @@ acpi_get_object_info(acpi_handle handle, ...@@ -476,11 +465,6 @@ acpi_get_object_info(acpi_handle handle,
uid, next_id_string); uid, next_id_string);
} }
if (sub) {
next_id_string = acpi_ns_copy_device_id(&info->subsystem_id,
sub, next_id_string);
}
if (cid_list) { if (cid_list) {
info->compatible_id_list.count = cid_list->count; info->compatible_id_list.count = cid_list->count;
info->compatible_id_list.list_size = cid_list->list_size; info->compatible_id_list.list_size = cid_list->list_size;
...@@ -522,9 +506,6 @@ acpi_get_object_info(acpi_handle handle, ...@@ -522,9 +506,6 @@ acpi_get_object_info(acpi_handle handle,
if (uid) { if (uid) {
ACPI_FREE(uid); ACPI_FREE(uid);
} }
if (sub) {
ACPI_FREE(sub);
}
if (cid_list) { if (cid_list) {
ACPI_FREE(cid_list); ACPI_FREE(cid_list);
} }
......
...@@ -125,73 +125,6 @@ acpi_ut_execute_HID(struct acpi_namespace_node *device_node, ...@@ -125,73 +125,6 @@ acpi_ut_execute_HID(struct acpi_namespace_node *device_node,
return_ACPI_STATUS(status); return_ACPI_STATUS(status);
} }
/*******************************************************************************
*
* FUNCTION: acpi_ut_execute_SUB
*
* PARAMETERS: device_node - Node for the device
* return_id - Where the _SUB is returned
*
* RETURN: Status
*
* DESCRIPTION: Executes the _SUB control method that returns the subsystem
* ID of the device. The _SUB value is always a string containing
* either a valid PNP or ACPI ID.
*
* NOTE: Internal function, no parameter validation
*
******************************************************************************/
acpi_status
acpi_ut_execute_SUB(struct acpi_namespace_node *device_node,
struct acpi_pnp_device_id **return_id)
{
union acpi_operand_object *obj_desc;
struct acpi_pnp_device_id *sub;
u32 length;
acpi_status status;
ACPI_FUNCTION_TRACE(ut_execute_SUB);
status = acpi_ut_evaluate_object(device_node, METHOD_NAME__SUB,
ACPI_BTYPE_STRING, &obj_desc);
if (ACPI_FAILURE(status)) {
return_ACPI_STATUS(status);
}
/* Get the size of the String to be returned, includes null terminator */
length = obj_desc->string.length + 1;
/* Allocate a buffer for the SUB */
sub =
ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_pnp_device_id) +
(acpi_size) length);
if (!sub) {
status = AE_NO_MEMORY;
goto cleanup;
}
/* Area for the string starts after PNP_DEVICE_ID struct */
sub->string =
ACPI_ADD_PTR(char, sub, sizeof(struct acpi_pnp_device_id));
/* Simply copy existing string */
strcpy(sub->string, obj_desc->string.pointer);
sub->length = length;
*return_id = sub;
cleanup:
/* On exit, we must delete the return object */
acpi_ut_remove_reference(obj_desc);
return_ACPI_STATUS(status);
}
/******************************************************************************* /*******************************************************************************
* *
* FUNCTION: acpi_ut_execute_UID * FUNCTION: acpi_ut_execute_UID
......
...@@ -1148,7 +1148,7 @@ u32 (*acpi_interface_handler) (acpi_string interface_name, u32 supported); ...@@ -1148,7 +1148,7 @@ u32 (*acpi_interface_handler) (acpi_string interface_name, u32 supported);
#define ACPI_PCICLS_STRING_SIZE 7 /* Includes null terminator */ #define ACPI_PCICLS_STRING_SIZE 7 /* Includes null terminator */
/* Structures used for device/processor HID, UID, CID, and SUB */ /* Structures used for device/processor HID, UID, CID */
struct acpi_pnp_device_id { struct acpi_pnp_device_id {
u32 length; /* Length of string + null */ u32 length; /* Length of string + null */
...@@ -1178,7 +1178,6 @@ struct acpi_device_info { ...@@ -1178,7 +1178,6 @@ struct acpi_device_info {
u64 address; /* _ADR value */ u64 address; /* _ADR value */
struct acpi_pnp_device_id hardware_id; /* _HID value */ struct acpi_pnp_device_id hardware_id; /* _HID value */
struct acpi_pnp_device_id unique_id; /* _UID value */ struct acpi_pnp_device_id unique_id; /* _UID value */
struct acpi_pnp_device_id subsystem_id; /* _SUB value */
struct acpi_pnp_device_id class_code; /* _CLS value */ struct acpi_pnp_device_id class_code; /* _CLS value */
struct acpi_pnp_device_id_list compatible_id_list; /* _CID list <must be last> */ struct acpi_pnp_device_id_list compatible_id_list; /* _CID list <must be last> */
}; };
...@@ -1193,13 +1192,12 @@ struct acpi_device_info { ...@@ -1193,13 +1192,12 @@ struct acpi_device_info {
#define ACPI_VALID_ADR 0x0002 #define ACPI_VALID_ADR 0x0002
#define ACPI_VALID_HID 0x0004 #define ACPI_VALID_HID 0x0004
#define ACPI_VALID_UID 0x0008 #define ACPI_VALID_UID 0x0008
#define ACPI_VALID_SUB 0x0010
#define ACPI_VALID_CID 0x0020 #define ACPI_VALID_CID 0x0020
#define ACPI_VALID_CLS 0x0040 #define ACPI_VALID_CLS 0x0040
#define ACPI_VALID_SXDS 0x0100 #define ACPI_VALID_SXDS 0x0100
#define ACPI_VALID_SXWS 0x0200 #define ACPI_VALID_SXWS 0x0200
/* Flags for _STA return value (current_status above) */ /* Flags for _STA method */
#define ACPI_STA_DEVICE_PRESENT 0x01 #define ACPI_STA_DEVICE_PRESENT 0x01
#define ACPI_STA_DEVICE_ENABLED 0x02 #define ACPI_STA_DEVICE_ENABLED 0x02
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment