[Intel-gfx] [Patch v2 11/13] ACPI, i915: replace open-coded _DSM specific code with helper functions

2013-12-19 Thread Jiang Liu
Use helper functions to simplify _DSM related code in i915 driver.

Function intel_dsm() is used to check functions supported by ACPI _DSM
method, but it has strange check for special value 0x8002. After
digging into nouveau driver, I think the check is copied from nouveau
driver and is useless for i915 driver, so remove it.

Acked-by: Daniel Vetter dan...@ffwll.ch
Signed-off-by: Jiang Liu jiang@linux.intel.com
---
 drivers/gpu/drm/i915/intel_acpi.c |  144 -
 1 file changed, 30 insertions(+), 114 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_acpi.c 
b/drivers/gpu/drm/i915/intel_acpi.c
index dfff090..1bfac94 100644
--- a/drivers/gpu/drm/i915/intel_acpi.c
+++ b/drivers/gpu/drm/i915/intel_acpi.c
@@ -12,8 +12,6 @@
 #include i915_drv.h
 
 #define INTEL_DSM_REVISION_ID 1 /* For Calpella anyway... */
-
-#define INTEL_DSM_FN_SUPPORTED_FUNCTIONS 0 /* No args */
 #define INTEL_DSM_FN_PLATFORM_MUX_INFO 1 /* No args */
 
 static struct intel_dsm_priv {
@@ -28,61 +26,6 @@ static const u8 intel_dsm_guid[] = {
0x0f, 0x13, 0x17, 0xb0, 0x1c, 0x2c
 };
 
-static int intel_dsm(acpi_handle handle, int func)
-{
-   struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
-   struct acpi_object_list input;
-   union acpi_object params[4];
-   union acpi_object *obj;
-   u32 result;
-   int ret = 0;
-
-   input.count = 4;
-   input.pointer = params;
-   params[0].type = ACPI_TYPE_BUFFER;
-   params[0].buffer.length = sizeof(intel_dsm_guid);
-   params[0].buffer.pointer = (char *)intel_dsm_guid;
-   params[1].type = ACPI_TYPE_INTEGER;
-   params[1].integer.value = INTEL_DSM_REVISION_ID;
-   params[2].type = ACPI_TYPE_INTEGER;
-   params[2].integer.value = func;
-   params[3].type = ACPI_TYPE_PACKAGE;
-   params[3].package.count = 0;
-   params[3].package.elements = NULL;
-
-   ret = acpi_evaluate_object(handle, _DSM, input, output);
-   if (ret) {
-   DRM_DEBUG_DRIVER(failed to evaluate _DSM: %d\n, ret);
-   return ret;
-   }
-
-   obj = (union acpi_object *)output.pointer;
-
-   result = 0;
-   switch (obj-type) {
-   case ACPI_TYPE_INTEGER:
-   result = obj-integer.value;
-   break;
-
-   case ACPI_TYPE_BUFFER:
-   if (obj-buffer.length == 4) {
-   result = (obj-buffer.pointer[0] |
-   (obj-buffer.pointer[1]   8) |
-   (obj-buffer.pointer[2]  16) |
-   (obj-buffer.pointer[3]  24));
-   break;
-   }
-   default:
-   ret = -EINVAL;
-   break;
-   }
-   if (result == 0x8002)
-   ret = -ENODEV;
-
-   kfree(output.pointer);
-   return ret;
-}
-
 static char *intel_dsm_port_name(u8 id)
 {
switch (id) {
@@ -137,83 +80,56 @@ static char *intel_dsm_mux_type(u8 type)
 
 static void intel_dsm_platform_mux_info(void)
 {
-   struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
-   struct acpi_object_list input;
-   union acpi_object params[4];
-   union acpi_object *pkg;
-   int i, ret;
-
-   input.count = 4;
-   input.pointer = params;
-   params[0].type = ACPI_TYPE_BUFFER;
-   params[0].buffer.length = sizeof(intel_dsm_guid);
-   params[0].buffer.pointer = (char *)intel_dsm_guid;
-   params[1].type = ACPI_TYPE_INTEGER;
-   params[1].integer.value = INTEL_DSM_REVISION_ID;
-   params[2].type = ACPI_TYPE_INTEGER;
-   params[2].integer.value = INTEL_DSM_FN_PLATFORM_MUX_INFO;
-   params[3].type = ACPI_TYPE_PACKAGE;
-   params[3].package.count = 0;
-   params[3].package.elements = NULL;
-
-   ret = acpi_evaluate_object(intel_dsm_priv.dhandle, _DSM, input,
-  output);
-   if (ret) {
-   DRM_DEBUG_DRIVER(failed to evaluate _DSM: %d\n, ret);
-   goto out;
+   int i;
+   union acpi_object *pkg, *connector_count;
+
+   pkg = acpi_evaluate_dsm_typed(intel_dsm_priv.dhandle, intel_dsm_guid,
+   INTEL_DSM_REVISION_ID, INTEL_DSM_FN_PLATFORM_MUX_INFO,
+   NULL, ACPI_TYPE_PACKAGE);
+   if (!pkg) {
+   DRM_DEBUG_DRIVER(failed to evaluate _DSM\n);
+   return;
}
 
-   pkg = (union acpi_object *)output.pointer;
-
-   if (pkg-type == ACPI_TYPE_PACKAGE) {
-   union acpi_object *connector_count = pkg-package.elements[0];
-   DRM_DEBUG_DRIVER(MUX info connectors: %lld\n,
- (unsigned long long)connector_count-integer.value);
-   for (i = 1; i  pkg-package.count; i++) {
-   union acpi_object *obj = pkg-package.elements[i];
-   union acpi_object *connector_id =
-   obj-package.elements[0

[Intel-gfx] [RFC Patch v1 11/13] ACPI, i915: replace open-coded _DSM specific code with helper functions

2013-12-17 Thread Jiang Liu
Use helper functions to simplify _DSM related code in i915 driver.

Function intel_dsm() is used to check functions supported by ACPI _DSM
method, but it has strange check for special value 0x8002. After
digging into nouveau driver, I think the check is copied from nouveau
driver and is useless for i915 driver, so remove it.

Signed-off-by: Jiang Liu jiang@linux.intel.com
---
 drivers/gpu/drm/i915/intel_acpi.c |  144 -
 1 file changed, 30 insertions(+), 114 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_acpi.c 
b/drivers/gpu/drm/i915/intel_acpi.c
index dfff090..1bfac94 100644
--- a/drivers/gpu/drm/i915/intel_acpi.c
+++ b/drivers/gpu/drm/i915/intel_acpi.c
@@ -12,8 +12,6 @@
 #include i915_drv.h
 
 #define INTEL_DSM_REVISION_ID 1 /* For Calpella anyway... */
-
-#define INTEL_DSM_FN_SUPPORTED_FUNCTIONS 0 /* No args */
 #define INTEL_DSM_FN_PLATFORM_MUX_INFO 1 /* No args */
 
 static struct intel_dsm_priv {
@@ -28,61 +26,6 @@ static const u8 intel_dsm_guid[] = {
0x0f, 0x13, 0x17, 0xb0, 0x1c, 0x2c
 };
 
-static int intel_dsm(acpi_handle handle, int func)
-{
-   struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
-   struct acpi_object_list input;
-   union acpi_object params[4];
-   union acpi_object *obj;
-   u32 result;
-   int ret = 0;
-
-   input.count = 4;
-   input.pointer = params;
-   params[0].type = ACPI_TYPE_BUFFER;
-   params[0].buffer.length = sizeof(intel_dsm_guid);
-   params[0].buffer.pointer = (char *)intel_dsm_guid;
-   params[1].type = ACPI_TYPE_INTEGER;
-   params[1].integer.value = INTEL_DSM_REVISION_ID;
-   params[2].type = ACPI_TYPE_INTEGER;
-   params[2].integer.value = func;
-   params[3].type = ACPI_TYPE_PACKAGE;
-   params[3].package.count = 0;
-   params[3].package.elements = NULL;
-
-   ret = acpi_evaluate_object(handle, _DSM, input, output);
-   if (ret) {
-   DRM_DEBUG_DRIVER(failed to evaluate _DSM: %d\n, ret);
-   return ret;
-   }
-
-   obj = (union acpi_object *)output.pointer;
-
-   result = 0;
-   switch (obj-type) {
-   case ACPI_TYPE_INTEGER:
-   result = obj-integer.value;
-   break;
-
-   case ACPI_TYPE_BUFFER:
-   if (obj-buffer.length == 4) {
-   result = (obj-buffer.pointer[0] |
-   (obj-buffer.pointer[1]   8) |
-   (obj-buffer.pointer[2]  16) |
-   (obj-buffer.pointer[3]  24));
-   break;
-   }
-   default:
-   ret = -EINVAL;
-   break;
-   }
-   if (result == 0x8002)
-   ret = -ENODEV;
-
-   kfree(output.pointer);
-   return ret;
-}
-
 static char *intel_dsm_port_name(u8 id)
 {
switch (id) {
@@ -137,83 +80,56 @@ static char *intel_dsm_mux_type(u8 type)
 
 static void intel_dsm_platform_mux_info(void)
 {
-   struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
-   struct acpi_object_list input;
-   union acpi_object params[4];
-   union acpi_object *pkg;
-   int i, ret;
-
-   input.count = 4;
-   input.pointer = params;
-   params[0].type = ACPI_TYPE_BUFFER;
-   params[0].buffer.length = sizeof(intel_dsm_guid);
-   params[0].buffer.pointer = (char *)intel_dsm_guid;
-   params[1].type = ACPI_TYPE_INTEGER;
-   params[1].integer.value = INTEL_DSM_REVISION_ID;
-   params[2].type = ACPI_TYPE_INTEGER;
-   params[2].integer.value = INTEL_DSM_FN_PLATFORM_MUX_INFO;
-   params[3].type = ACPI_TYPE_PACKAGE;
-   params[3].package.count = 0;
-   params[3].package.elements = NULL;
-
-   ret = acpi_evaluate_object(intel_dsm_priv.dhandle, _DSM, input,
-  output);
-   if (ret) {
-   DRM_DEBUG_DRIVER(failed to evaluate _DSM: %d\n, ret);
-   goto out;
+   int i;
+   union acpi_object *pkg, *connector_count;
+
+   pkg = acpi_evaluate_dsm_typed(intel_dsm_priv.dhandle, intel_dsm_guid,
+   INTEL_DSM_REVISION_ID, INTEL_DSM_FN_PLATFORM_MUX_INFO,
+   NULL, ACPI_TYPE_PACKAGE);
+   if (!pkg) {
+   DRM_DEBUG_DRIVER(failed to evaluate _DSM\n);
+   return;
}
 
-   pkg = (union acpi_object *)output.pointer;
-
-   if (pkg-type == ACPI_TYPE_PACKAGE) {
-   union acpi_object *connector_count = pkg-package.elements[0];
-   DRM_DEBUG_DRIVER(MUX info connectors: %lld\n,
- (unsigned long long)connector_count-integer.value);
-   for (i = 1; i  pkg-package.count; i++) {
-   union acpi_object *obj = pkg-package.elements[i];
-   union acpi_object *connector_id =
-   obj-package.elements[0];
-   union