ACPICA: Major update for acpi_get_object_info external interface
Completed a major update for the acpi_get_object_info external interface. Changes include: - Support for variable, unlimited length HID, UID, and CID strings - Support Processor objects the same as Devices (HID,UID,CID,ADR,STA, etc.) - Call the _SxW power methods on behalf of a device object - Determine if a device is a PCI root bridge - Change the ACPI_BUFFER parameter to ACPI_DEVICE_INFO. These changes will require an update to all callers of this interface. See the ACPICA Programmer Reference for details. Also, update all invocations of acpi_get_object_info interface Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
@ -173,17 +173,15 @@ struct acpi_device_dir {
|
||||
|
||||
typedef char acpi_bus_id[8];
|
||||
typedef unsigned long acpi_bus_address;
|
||||
typedef char acpi_hardware_id[15];
|
||||
typedef char acpi_unique_id[9];
|
||||
typedef char acpi_device_name[40];
|
||||
typedef char acpi_device_class[20];
|
||||
|
||||
struct acpi_device_pnp {
|
||||
acpi_bus_id bus_id; /* Object name */
|
||||
acpi_bus_address bus_address; /* _ADR */
|
||||
acpi_hardware_id hardware_id; /* _HID */
|
||||
struct acpi_compatible_id_list *cid_list; /* _CIDs */
|
||||
acpi_unique_id unique_id; /* _UID */
|
||||
char *hardware_id; /* _HID */
|
||||
struct acpica_device_id_list *cid_list; /* _CIDs */
|
||||
char *unique_id; /* _UID */
|
||||
acpi_device_name device_name; /* Driver-determined */
|
||||
acpi_device_class device_class; /* " */
|
||||
};
|
||||
|
@ -200,7 +200,8 @@ acpi_evaluate_object_typed(acpi_handle object,
|
||||
acpi_object_type return_type);
|
||||
|
||||
acpi_status
|
||||
acpi_get_object_info(acpi_handle handle, struct acpi_buffer *return_buffer);
|
||||
acpi_get_object_info(acpi_handle handle,
|
||||
struct acpi_device_info **return_buffer);
|
||||
|
||||
acpi_status acpi_install_method(u8 *buffer);
|
||||
|
||||
|
@ -338,7 +338,7 @@ typedef u32 acpi_physical_address;
|
||||
|
||||
/* PM Timer ticks per second (HZ) */
|
||||
|
||||
#define PM_TIMER_FREQUENCY 3579545
|
||||
#define PM_TIMER_FREQUENCY 3579545
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -969,38 +969,60 @@ acpi_status(*acpi_walk_callback) (acpi_handle obj_handle,
|
||||
#define ACPI_INTERRUPT_NOT_HANDLED 0x00
|
||||
#define ACPI_INTERRUPT_HANDLED 0x01
|
||||
|
||||
/* Length of _HID, _UID, _CID, and UUID values */
|
||||
/* Length of 32-bit EISAID values when converted back to a string */
|
||||
|
||||
#define ACPI_EISAID_STRING_SIZE 8 /* Includes null terminator */
|
||||
|
||||
/* Length of UUID (string) values */
|
||||
|
||||
#define ACPI_DEVICE_ID_LENGTH 0x09
|
||||
#define ACPI_MAX_CID_LENGTH 48
|
||||
#define ACPI_UUID_LENGTH 16
|
||||
|
||||
/* Common string version of device HIDs and UIDs */
|
||||
/* Structures used for device/processor HID, UID, CID */
|
||||
|
||||
struct acpica_device_id {
|
||||
char value[ACPI_DEVICE_ID_LENGTH];
|
||||
u32 length; /* Length of string + null */
|
||||
char *string;
|
||||
};
|
||||
|
||||
/* Common string version of device CIDs */
|
||||
|
||||
struct acpi_compatible_id {
|
||||
char value[ACPI_MAX_CID_LENGTH];
|
||||
struct acpica_device_id_list {
|
||||
u32 count; /* Number of IDs in Ids array */
|
||||
u32 list_size; /* Size of list, including ID strings */
|
||||
struct acpica_device_id ids[1]; /* ID array */
|
||||
};
|
||||
|
||||
struct acpi_compatible_id_list {
|
||||
u32 count;
|
||||
u32 size;
|
||||
struct acpi_compatible_id id[1];
|
||||
/*
|
||||
* Structure returned from acpi_get_object_info.
|
||||
* Optimized for both 32- and 64-bit builds
|
||||
*/
|
||||
struct acpi_device_info {
|
||||
u32 info_size; /* Size of info, including ID strings */
|
||||
u32 name; /* ACPI object Name */
|
||||
acpi_object_type type; /* ACPI object Type */
|
||||
u8 param_count; /* If a method, required parameter count */
|
||||
u8 valid; /* Indicates which optional fields are valid */
|
||||
u8 flags; /* Miscellaneous info */
|
||||
u8 highest_dstates[4]; /* _sx_d values: 0xFF indicates not valid */
|
||||
u8 lowest_dstates[5]; /* _sx_w values: 0xFF indicates not valid */
|
||||
u32 current_status; /* _STA value */
|
||||
acpi_integer address; /* _ADR value */
|
||||
struct acpica_device_id hardware_id; /* _HID value */
|
||||
struct acpica_device_id unique_id; /* _UID value */
|
||||
struct acpica_device_id_list compatible_id_list; /* _CID list <must be last> */
|
||||
};
|
||||
|
||||
/* Structure and flags for acpi_get_object_info */
|
||||
/* Values for Flags field above (acpi_get_object_info) */
|
||||
|
||||
#define ACPI_VALID_STA 0x0001
|
||||
#define ACPI_VALID_ADR 0x0002
|
||||
#define ACPI_VALID_HID 0x0004
|
||||
#define ACPI_VALID_UID 0x0008
|
||||
#define ACPI_VALID_CID 0x0010
|
||||
#define ACPI_VALID_SXDS 0x0020
|
||||
#define ACPI_PCI_ROOT_BRIDGE 0x01
|
||||
|
||||
/* Flags for Valid field above (acpi_get_object_info) */
|
||||
|
||||
#define ACPI_VALID_STA 0x01
|
||||
#define ACPI_VALID_ADR 0x02
|
||||
#define ACPI_VALID_HID 0x04
|
||||
#define ACPI_VALID_UID 0x08
|
||||
#define ACPI_VALID_CID 0x10
|
||||
#define ACPI_VALID_SXDS 0x20
|
||||
#define ACPI_VALID_SXWS 0x40
|
||||
|
||||
/* Flags for _STA method */
|
||||
|
||||
@ -1011,29 +1033,6 @@ struct acpi_compatible_id_list {
|
||||
#define ACPI_STA_DEVICE_OK 0x08 /* Synonym */
|
||||
#define ACPI_STA_BATTERY_PRESENT 0x10
|
||||
|
||||
#define ACPI_COMMON_OBJ_INFO \
|
||||
acpi_object_type type; /* ACPI object type */ \
|
||||
acpi_name name /* ACPI object Name */
|
||||
|
||||
struct acpi_obj_info_header {
|
||||
ACPI_COMMON_OBJ_INFO;
|
||||
};
|
||||
|
||||
/* Structure returned from Get Object Info */
|
||||
|
||||
struct acpi_device_info {
|
||||
ACPI_COMMON_OBJ_INFO;
|
||||
|
||||
u32 param_count; /* If a method, required parameter count */
|
||||
u32 valid; /* Indicates which fields below are valid */
|
||||
u32 current_status; /* _STA value */
|
||||
acpi_integer address; /* _ADR value if any */
|
||||
struct acpica_device_id hardware_id; /* _HID value if any */
|
||||
struct acpica_device_id unique_id; /* _UID value if any */
|
||||
u8 highest_dstates[4]; /* _sx_d values: 0xFF indicates not valid */
|
||||
struct acpi_compatible_id_list compatibility_id; /* List of _CIDs if any */
|
||||
};
|
||||
|
||||
/* Context structs for address space handlers */
|
||||
|
||||
struct acpi_pci_id {
|
||||
|
Reference in New Issue
Block a user