From patchwork Sun Sep 23 04:34:01 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Len Brown X-Patchwork-Id: 1495011 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 8BAB2DF24C for ; Sun, 23 Sep 2012 04:39:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753717Ab2IWEfe (ORCPT ); Sun, 23 Sep 2012 00:35:34 -0400 Received: from mail-qc0-f174.google.com ([209.85.216.174]:49268 "EHLO mail-qc0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753505Ab2IWEfF (ORCPT ); Sun, 23 Sep 2012 00:35:05 -0400 Received: by mail-qc0-f174.google.com with SMTP id o28so3582042qcr.19 for ; Sat, 22 Sep 2012 21:35:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references:in-reply-to:references:reply-to:organization; bh=JnXWYAx9UnBM9M86zIdQ/IsRFzPZOxgXMbI4xjHAtZg=; b=oc3iuNJr7mM8ZK5Pd8B0bA1q7o1o4edKo7rfEwMtUOYAo6TkhrOKI1w1exDJu1+2fR LX7i/mnahgJxJWqOvPy4qlSqiq/cZH9XlctSU0W4wsGnKtcFVCSy0s70NIPq9MH5kGNw SbBX4mh9OdetQhHX1av+nEZ1IQulc6rsOl8PxAEE+dIJg0Hi9KHeqrC2lCHI0DJVWuXU ZMjAbxPJBuUl6PBiJKlltbCTWPQ5jB9njPXaau9XHckQqO5rsbN2WEhevx3N2sEWgwd8 KjFyX4z5DkeKPcW7ieN9jO00Dsu/DHCF5LaPlHKb4THfP0pdNmuWVYu/oU4eDc/o9uZG N1yQ== Received: by 10.224.58.147 with SMTP id g19mr23447295qah.77.1348374905046; Sat, 22 Sep 2012 21:35:05 -0700 (PDT) Received: from x980.localdomain6 (pool-74-104-144-44.bstnma.fios.verizon.net. [74.104.144.44]) by mx.google.com with ESMTPS id ck11sm19871874qab.17.2012.09.22.21.35.00 (version=SSLv3 cipher=OTHER); Sat, 22 Sep 2012 21:35:02 -0700 (PDT) From: Len Brown To: linux-acpi@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Feng Tang , Bob Moore , Len Brown Subject: [PATCH 13/23] ACPI: Use ACPICA native way to decode the PLD buffer Date: Sun, 23 Sep 2012 00:34:01 -0400 Message-Id: <8ede06aba5dffa78a27a18c47a9059eb38072ada.1348371388.git.len.brown@intel.com> X-Mailer: git-send-email 1.7.12.1.396.g16eed7c In-Reply-To: <1348374851-20378-1-git-send-email-lenb@kernel.org> References: <1348374851-20378-1-git-send-email-lenb@kernel.org> In-Reply-To: References: Reply-To: Len Brown Organization: Intel Open Source Technology Center Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org From: Feng Tang This patch is on top of the ACPICA 20120816 release, which implemented a native way to decode PLD buffer, so use it instead of leting upper level users do the decoding. v2: Modify the check for PLD buffer length to reject buffers whose length < 16 Signed-off-by: Feng Tang Signed-off-by: Bob Moore Signed-off-by: Len Brown --- drivers/acpi/utils.c | 11 +++++++---- include/acpi/acpi_bus.h | 31 +------------------------------ 2 files changed, 8 insertions(+), 34 deletions(-) diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c index 3e87c9c..462f7e3 100644 --- a/drivers/acpi/utils.c +++ b/drivers/acpi/utils.c @@ -384,7 +384,7 @@ acpi_evaluate_reference(acpi_handle handle, EXPORT_SYMBOL(acpi_evaluate_reference); acpi_status -acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld *pld) +acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld) { acpi_status status; struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; @@ -400,13 +400,16 @@ acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld *pld) if (!output || output->type != ACPI_TYPE_PACKAGE || !output->package.count || output->package.elements[0].type != ACPI_TYPE_BUFFER - || output->package.elements[0].buffer.length > sizeof(*pld)) { + || output->package.elements[0].buffer.length < ACPI_PLD_REV1_BUFFER_SIZE) { status = AE_TYPE; goto out; } - memcpy(pld, output->package.elements[0].buffer.pointer, - output->package.elements[0].buffer.length); + status = acpi_decode_pld_buffer( + output->package.elements[0].buffer.pointer, + output->package.elements[0].buffer.length, + pld); + out: kfree(buffer.pointer); return status; diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index bde976e..0c1fcd4 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -54,37 +54,8 @@ acpi_status acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event, u32 status_code, struct acpi_buffer *status_buf); -struct acpi_pld { - unsigned int revision:7; /* 0 */ - unsigned int ignore_colour:1; /* 7 */ - unsigned int colour:24; /* 8 */ - unsigned int width:16; /* 32 */ - unsigned int height:16; /* 48 */ - unsigned int user_visible:1; /* 64 */ - unsigned int dock:1; /* 65 */ - unsigned int lid:1; /* 66 */ - unsigned int panel:3; /* 67 */ - unsigned int vertical_pos:2; /* 70 */ - unsigned int horizontal_pos:2; /* 72 */ - unsigned int shape:4; /* 74 */ - unsigned int group_orientation:1; /* 78 */ - unsigned int group_token:8; /* 79 */ - unsigned int group_position:8; /* 87 */ - unsigned int bay:1; /* 95 */ - unsigned int ejectable:1; /* 96 */ - unsigned int ospm_eject_required:1; /* 97 */ - unsigned int cabinet_number:8; /* 98 */ - unsigned int card_cage_number:8; /* 106 */ - unsigned int reference:1; /* 114 */ - unsigned int rotation:4; /* 115 */ - unsigned int order:5; /* 119 */ - unsigned int reserved:4; /* 124 */ - unsigned int vertical_offset:16; /* 128 */ - unsigned int horizontal_offset:16; /* 144 */ -} __attribute__((__packed__)); - acpi_status -acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld *pld); +acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld); #ifdef CONFIG_ACPI #include