drm/amdgpu: implement cgs interface to query system info
[deliverable/linux.git] / drivers / gpu / drm / amd / include / cgs_common.h
index 992dcd8a5c6ade080400f765082b03ad466d27d3..5ea8db0d2a99e199ceefd90edfea9fcdfcbe0403 100644 (file)
@@ -105,6 +105,21 @@ enum cgs_ucode_id {
        CGS_UCODE_ID_MAXIMUM,
 };
 
+enum cgs_system_info_id {
+       CGS_SYSTEM_INFO_ADAPTER_BDF_ID = 1,
+       CGS_SYSTEM_INFO_ID_MAXIMUM,
+};
+
+struct cgs_system_info {
+       uint64_t       size;
+       uint64_t       info_id;
+       union {
+               void           *ptr;
+               uint64_t        value;
+       };
+       uint64_t               padding[13];
+};
+
 /**
  * struct cgs_clock_limits - Clock limits
  *
@@ -129,6 +144,39 @@ struct cgs_firmware_info {
 
 typedef unsigned long cgs_handle_t;
 
+#define CGS_ACPI_METHOD_ATCS          0x53435441
+#define CGS_ACPI_METHOD_ATIF          0x46495441
+#define CGS_ACPI_METHOD_ATPX          0x58505441
+#define CGS_ACPI_FIELD_METHOD_NAME                      0x00000001
+#define CGS_ACPI_FIELD_INPUT_ARGUMENT_COUNT             0x00000002
+#define CGS_ACPI_MAX_BUFFER_SIZE     256
+#define CGS_ACPI_TYPE_ANY                      0x00
+#define CGS_ACPI_TYPE_INTEGER               0x01
+#define CGS_ACPI_TYPE_STRING                0x02
+#define CGS_ACPI_TYPE_BUFFER                0x03
+#define CGS_ACPI_TYPE_PACKAGE               0x04
+
+struct cgs_acpi_method_argument {
+       uint32_t type;
+       uint32_t method_length;
+       uint32_t data_length;
+       union{
+               uint32_t value;
+               void *pointer;
+       };
+};
+
+struct cgs_acpi_method_info {
+       uint32_t size;
+       uint32_t field;
+       uint32_t input_count;
+       uint32_t name;
+       struct cgs_acpi_method_argument *pinput_argument;
+       uint32_t output_count;
+       struct cgs_acpi_method_argument *poutput_argument;
+       uint32_t padding[9];
+};
+
 /**
  * cgs_gpu_mem_info() - Return information about memory heaps
  * @cgs_device: opaque device handle
@@ -493,6 +541,17 @@ typedef int(*cgs_set_clockgating_state)(void *cgs_device,
                                  enum amd_ip_block_type block_type,
                                  enum amd_clockgating_state state);
 
+typedef int (*cgs_call_acpi_method)(void *cgs_device,
+                                       uint32_t acpi_method,
+                                       uint32_t acpi_function,
+                                       void *pinput, void *poutput,
+                                       uint32_t output_count,
+                                       uint32_t input_size,
+                                       uint32_t output_size);
+
+typedef int (*cgs_query_system_info)(void *cgs_device,
+                               struct cgs_system_info *sys_info);
+
 struct cgs_ops {
        /* memory management calls (similar to KFD interface) */
        cgs_gpu_mem_info_t gpu_mem_info;
@@ -533,7 +592,10 @@ struct cgs_ops {
        /* cg pg interface*/
        cgs_set_powergating_state set_powergating_state;
        cgs_set_clockgating_state set_clockgating_state;
-       /* ACPI (TODO) */
+       /* ACPI */
+       cgs_call_acpi_method call_acpi_method;
+       /* get system info */
+       cgs_query_system_info query_system_info;
 };
 
 struct cgs_os_ops; /* To be define in OS-specific CGS header */
@@ -620,5 +682,9 @@ struct cgs_device
        CGS_CALL(set_powergating_state, dev, block_type, state)
 #define cgs_set_clockgating_state(dev, block_type, state)      \
        CGS_CALL(set_clockgating_state, dev, block_type, state)
+#define cgs_call_acpi_method(dev, acpi_method, acpi_function, pintput, poutput, output_count, input_size, output_size) \
+       CGS_CALL(call_acpi_method, dev, acpi_method, acpi_function, pintput, poutput, output_count, input_size, output_size)
+#define cgs_query_system_info(dev, sys_info)   \
+       CGS_CALL(query_system_info, dev, sys_info)
 
 #endif /* _CGS_COMMON_H */
This page took 0.03953 seconds and 5 git commands to generate.