diff options
Diffstat (limited to 'usr/src/uts/i86pc/sys/acpidev.h')
| -rw-r--r-- | usr/src/uts/i86pc/sys/acpidev.h | 141 |
1 files changed, 132 insertions, 9 deletions
diff --git a/usr/src/uts/i86pc/sys/acpidev.h b/usr/src/uts/i86pc/sys/acpidev.h index e0fbaa4999..6d11277aaf 100644 --- a/usr/src/uts/i86pc/sys/acpidev.h +++ b/usr/src/uts/i86pc/sys/acpidev.h @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright (c) 2009, Intel Corporation. + * Copyright (c) 2009-2010, Intel Corporation. * All rights reserved. */ @@ -28,8 +28,10 @@ #include <sys/types.h> #include <sys/obpdefs.h> #include <sys/sunddi.h> +#ifdef _KERNEL #include <sys/acpi/acpi.h> #include <sys/acpica.h> +#endif #ifdef __cplusplus extern "C" { @@ -55,23 +57,19 @@ extern "C" { #define ACPIDEV_HID_CPU "ACPI0007" #define ACPIDEV_HID_PCI_HOSTBRIDGE "PNP0A03" #define ACPIDEV_HID_PCIE_HOSTBRIDGE "PNP0A08" +#define ACPIDEV_HID_PCIEX_HOSTBRIDGE "PNP0A08" #define ACPIDEV_HID_MEMORY "PNP0C80" -/* Common ACPI object names. */ -#define ACPIDEV_OBJECT_NAME_SB ACPI_NS_SYSTEM_BUS -#define ACPIDEV_OBJECT_NAME_PR "_PR_" - -/* Common ACPI method names. */ -#define ACPIDEV_METHOD_NAME_MAT "_MAT" - /* Device names for ACPI objects. */ #define ACPIDEV_NODE_NAME_ROOT "fw" +#define ACPIDEV_NODE_NAME_ACPIDR "acpidr" #define ACPIDEV_NODE_NAME_CONTAINER "container" #define ACPIDEV_NODE_NAME_MODULE_SBD "sb" #define ACPIDEV_NODE_NAME_MODULE_CPU "socket" #define ACPIDEV_NODE_NAME_CPU "cpu" #define ACPIDEV_NODE_NAME_PROCESSOR "cpus" #define ACPIDEV_NODE_NAME_MEMORY "mem" +#define ACPIDEV_NODE_NAME_PCI "pci" /* Device types for ACPI objects. */ #define ACPIDEV_TYPE_ROOTNEX "acpirootnex" @@ -81,15 +79,31 @@ extern "C" { #define ACPIDEV_TYPE_CONTAINER "acpicontainer" #define ACPIDEV_TYPE_CPU "acpicpu" #define ACPIDEV_TYPE_MEMORY "acpimemory" +#define ACPIDEV_TYPE_PCI "pci" +#define ACPIDEV_TYPE_PCIEX "pciex" /* Device property names for ACPI objects. */ #define ACPIDEV_PROP_NAME_UNIT_ADDR "unit-address" #define ACPIDEV_PROP_NAME_ACPI_UID "acpi-uid" #define ACPIDEV_PROP_NAME_PROCESSOR_ID "acpi-processor-id" #define ACPIDEV_PROP_NAME_LOCALAPIC_ID "apic-id" +#define ACPIDEV_PROP_NAME_PROXIMITY_ID "proximity-id" #define ACPIDEV_PROP_NAME_UID_FORMAT "acpidev-uid-format" +/* Miscellaneous strings. */ +#define ACPIDEV_CMD_OST_PREFIX "acpi-update-status" +#define ACPIDEV_CMD_OST_INPROGRESS "acpi-update-status=inprogress" +#define ACPIDEV_CMD_OST_SUCCESS "acpi-update-status=success" +#define ACPIDEV_CMD_OST_FAILURE "acpi-update-status=failure" +#define ACPIDEV_CMD_OST_NOOP "acpi-update-status=noop" + +#define ACPIDEV_EVENT_TYPE_ATTR_NAME "acpi-event-type" +#define ACPIDEV_EVENT_TYPE_BUS_CHECK "bus_check" +#define ACPIDEV_EVENT_TYPE_DEVICE_CHECK "device_check" +#define ACPIDEV_EVENT_TYPE_DEVICE_CHECK_LIGHT "device_check_light" +#define ACPIDEV_EVENT_TYPE_EJECT_REQUEST "eject_request" + /* ACPI device class Id. */ typedef enum acpidev_class_id { ACPIDEV_CLASS_ID_INVALID = 0, @@ -99,6 +113,8 @@ typedef enum acpidev_class_id { ACPIDEV_CLASS_ID_CONTAINER = 4, ACPIDEV_CLASS_ID_CPU = 5, ACPIDEV_CLASS_ID_MEMORY = 6, + ACPIDEV_CLASS_ID_PCI = 7, + ACPIDEV_CLASS_ID_PCIEX = 8, ACPIDEV_CLASS_ID_MAX } acpidev_class_id_t; @@ -106,9 +122,88 @@ typedef enum acpidev_class_id { #define ACPIDEV_OUSER_NO_CPU 0x1 #define ACPIDEV_OUSER_NO_MEM 0x2 #define ACPIDEV_OUSER_NO_CONTAINER 0x4 +#define ACPIDEV_OUSER_NO_PCI 0x8 +#define ACPIDEV_OUSER_NO_CACHE 0x10000 #ifdef _KERNEL +/* Common ACPI object names. */ +#define ACPIDEV_OBJECT_NAME_SB ACPI_NS_SYSTEM_BUS +#define ACPIDEV_OBJECT_NAME_PR "_PR_" + +/* Common ACPI method names. */ +#define ACPIDEV_METHOD_NAME_MAT "_MAT" +#define ACPIDEV_METHOD_NAME_EJ0 "_EJ0" +#define ACPIDEV_METHOD_NAME_EDL "_EDL" +#define ACPIDEV_METHOD_NAME_EJD "_EJD" +#define ACPIDEV_METHOD_NAME_OST "_OST" +#define ACPIDEV_METHOD_NAME_PXM "_PXM" +#define ACPIDEV_METHOD_NAME_SLI "_SLI" + +/* Source event code for _OST. */ +#define ACPI_OST_EVENT_EJECTING 0x103 +#define ACPI_OST_EVENT_INSERTING 0x200 + +/* Status code for _OST. */ +#define ACPI_OST_STA_SUCCESS 0x0 + +/* Non-specific failure. */ +#define ACPI_OST_STA_FAILURE 0x1 + +/* Unrecognized Notify Code. */ +#define ACPI_OST_STA_NOT_SUPPORT 0x2 + +/* Device ejection not supported by OSPM. */ +#define ACPI_OST_STA_EJECT_NOT_SUPPORT 0x80 + +/* Device in use by application. */ +#define ACPI_OST_STA_EJECT_IN_USE 0x81 + +/* Device Busy. */ +#define ACPI_OST_STA_EJECT_BUSY 0x82 + +/* Ejection dependency is busy or not supported for ejection by OSPM. */ +#define ACPI_OST_STA_EJECT_DEPENDENCY 0x83 + +/* Ejection is in progress (pending). */ +#define ACPI_OST_STA_EJECT_IN_PROGRESS 0x84 + +/* Device insertion in progress (pending). */ +#define ACPI_OST_STA_INSERT_IN_PROGRESS 0x80 + +/* Device driver load failure. */ +#define ACPI_OST_STA_INSERT_DRIVER 0x81 + +/* Device insertion not supported by OSPM. */ +#define ACPI_OST_STA_INSERT_NOT_SUPPORT 0x82 + +/* + * Insertion failure + * Resources Unavailable as described by the following bit encodings: + * Bit[3] Bus Numbers + * Bit[2] Interrupts + * Bit[1] I/O + * Bit[0] Memory + */ +#define ACPI_OST_STA_INSERT_NO_RESOURCE 0x90 +#define ACPI_OST_STA_INSERT_NO_BUS 0x8 +#define ACPI_OST_STA_INSERT_NO_INTR 0x4 +#define ACPI_OST_STA_INSERT_NO_IO 0x2 +#define ACPI_OST_STA_INSERT_NO_MEM 0x1 + +/* + * According to the ACPI specification, self latency (entry[n][n]) in the + * SLIT table should be 10. + */ +#define ACPI_SLIT_SELF_LATENCY 10 + +/* + * The DR driver assigns a unique device id for each hot-added memory device. + * ACPI_MEMNODE_DEVID_BOOT is assigned to memory devices present at boot, + * which is distinguished from device ids assigned by the DR driver. + */ +#define ACPI_MEMNODE_DEVID_BOOT UINT32_MAX + /* Forward declaration */ typedef struct acpidev_data_impl *acpidev_data_handle_t; typedef struct acpidev_walk_info acpidev_walk_info_t; @@ -197,7 +292,7 @@ typedef ACPI_STATUS (* acpidev_probe_t)(acpidev_walk_info_t *); typedef acpidev_filter_result_t (* acpidev_filter_t)(acpidev_walk_info_t *, char *, int); typedef ACPI_STATUS (* acpidev_init_t)(acpidev_walk_info_t *); -typedef ACPI_STATUS (* acpidev_fini_t)(ACPI_HANDLE, dev_info_t *, +typedef void (* acpidev_fini_t)(ACPI_HANDLE, acpidev_data_handle_t, acpidev_class_t *); /* Device class driver interface. */ @@ -237,6 +332,7 @@ extern acpidev_class_t acpidev_class_device; extern acpidev_class_t acpidev_class_container; extern acpidev_class_t acpidev_class_cpu; extern acpidev_class_t acpidev_class_memory; +extern acpidev_class_t acpidev_class_pci; /* * Class driver lists. @@ -309,6 +405,7 @@ extern ACPI_STATUS acpidev_process_object(acpidev_walk_info_t *infop, #define ACPIDEV_PROCESS_FLAG_OFFLINE 0x400 /* Put device into offline. */ #define ACPIDEV_PROCESS_FLAG_NOTAG 0x800 /* Skip tag dip with object. */ #define ACPIDEV_PROCESS_FLAG_SYNCSTATUS 0x1000 /* Sync object status. */ +#define ACPIDEV_PROCESS_FLAG_HOLDBRANCH 0x10000 /* Hold device branch. */ /* * Filter ACPI objects according to filter rules, generate devname if needed. @@ -346,10 +443,16 @@ extern void acpidev_data_destroy_handle(ACPI_HANDLE hdl); extern ACPI_HANDLE acpidev_data_get_object(acpidev_data_handle_t hdl); extern dev_info_t *acpidev_data_get_devinfo(acpidev_data_handle_t hdl); extern int acpidev_data_get_status(acpidev_data_handle_t hdl); +extern boolean_t acpidev_data_dr_capable(acpidev_data_handle_t hdl); +extern boolean_t acpidev_data_dr_ready(acpidev_data_handle_t hdl); +extern boolean_t acpidev_data_dr_failed(acpidev_data_handle_t hdl); extern void acpidev_data_set_flag(acpidev_data_handle_t hdl, uint32_t flag); extern void acpidev_data_clear_flag(acpidev_data_handle_t hdl, uint32_t flag); extern uint32_t acpidev_data_get_flag(acpidev_data_handle_t hdl, uint32_t flag); +/* ACPI system event handler has been registered. */ +#define ACPIDEV_DATA_HANDLER_READY 0x1 + /* * Try to generate meaningful device unit address from uid. * Return buf on success and NULL on failure. @@ -430,6 +533,26 @@ typedef ACPI_STATUS (* acpidev_apic_walker_t)(ACPI_SUBTABLE_HEADER *, void *); extern ACPI_STATUS acpidev_walk_apic(ACPI_BUFFER *bufp, ACPI_HANDLE hdl, char *method, acpidev_apic_walker_t func, void *context); +/* + * Evaluate _OST method under object, which is used to support hotplug event. + * hdl: object handle + * code: _OST source event code + * stauts: _OST result status code + * bufp and len: optional third parameter for _OST. + */ +extern ACPI_STATUS acpidev_eval_ost(ACPI_HANDLE hdl, uint32_t code, + uint32_t status, char *bufp, size_t len); + +/* + * Evaluate _EJ0 method under object. + */ +extern ACPI_STATUS acpidev_eval_ej0(ACPI_HANDLE hdl); + +/* + * Evaluate _PXM method under object. + */ +extern ACPI_STATUS acpidev_eval_pxm(ACPI_HANDLE hdl, uint32_t *idp); + #endif /* _KERNEL */ #ifdef __cplusplus |
