From patchwork Sat Oct 6 20:09:34 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Len Brown X-Patchwork-Id: 1559221 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 86F503FD56 for ; Sat, 6 Oct 2012 20:14:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756242Ab2JFUN5 (ORCPT ); Sat, 6 Oct 2012 16:13:57 -0400 Received: from mail-qc0-f174.google.com ([209.85.216.174]:52672 "EHLO mail-qc0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750923Ab2JFUNx (ORCPT ); Sat, 6 Oct 2012 16:13:53 -0400 Received: by mail-qc0-f174.google.com with SMTP id d3so1916825qch.19 for ; Sat, 06 Oct 2012 13:13:53 -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=Xr6fJSIeiNPKAAJk0zfpqb6kcDCgjjAQxTzphVsCLGc=; b=As11XWxpjuivEEo0CKcZs4OnuOnXaOH5ZoIAWKCC+U3kx4xUTxn9V+7ZGHrI2ue5lh NVizHaU5ESXX8v2ZEZx4gOAGpoDdbldE4dJK2b2yvLxXRlqw6Bx7q5XgPTq40yCS2Mxz d1XpAojXFon4wGph9BWWy0hO53jYDRfVDd8ma72ArHKmTEjvT/+gDuPbqvyEUEobTVBb +46d18Yz7NZ4yRtBirDNO0GOrgH7Sp+CQ1/OczSn25N9soDq/GW5w08Nj4s/swNkJ4jb XZxI/jM9F/ND9repP6XLOkzeoGa/t+fAJuT0V17qnuuafFkunYoioi6a/stulnUaMWHo eR+Q== Received: by 10.224.1.69 with SMTP id 5mr22557175qae.61.1349554432959; Sat, 06 Oct 2012 13:13:52 -0700 (PDT) Received: from x980.localdomain6 (pool-74-104-146-186.bstnma.fios.verizon.net. [74.104.146.186]) by mx.google.com with ESMTPS id x19sm13470740qeq.12.2012.10.06.13.13.37 (version=SSLv3 cipher=OTHER); Sat, 06 Oct 2012 13:13:45 -0700 (PDT) From: Len Brown To: linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Feng Tang , Bob Moore , Len Brown Subject: [PATCH 13/49] ACPI: Use ACPICA native way to decode the PLD buffer Date: Sat, 6 Oct 2012 16:09:34 -0400 Message-Id: <8ede06aba5dffa78a27a18c47a9059eb38072ada.1349554106.git.len.brown@intel.com> X-Mailer: git-send-email 1.8.0.rc0.18.gf84667d In-Reply-To: <1349554210-29978-1-git-send-email-lenb@kernel.org> References: <1349554210-29978-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