From: Bjorn Helgaas <bjorn.helgaas@hp.com>
To: acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Len Brown <len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Cc: linux-ia64 <linux-ia64-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [ACPI] [PATCH] ACPI: implement UUID-labelled vendor-defined resources
Date: Tue, 21 Jun 2005 20:21:20 +0000 [thread overview]
Message-ID: <200506211421.20446.bjorn.helgaas@hp.com> (raw)
In-Reply-To: <1111177190.13286.48.camel@eeyore>
On Friday 18 March 2005 1:19 pm, Bjorn Helgaas wrote:
> ACPI 3.0 includes UUID-labelled vendor-defined resources (section 6.4.3.2),
> so move the code that supports this from arch/ia64 into ACPI proper.
There were some questions about the copyright status of this patch,
and whether it could be licensed appropriately for ACPI. But I thought
those were all resolved.
I'm only trying to be a good citizen and contribute support for new
stuff in ACPI 3.0. But if people want this to stay in ia64, I guess
that's OK with me, too.
BTW, is there still an ACPI BK tree? The ones mentioned here:
http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/README.ACPI
seem to be gone.
> When the code was under arch/ia64, we used EFI GUID stuff, but this time I
> defined acpi_uuid equivalents to avoid the need to depend on EFI.
>
> Len, Tony, this touches both acpi and ia64. Let me know if this is
> a problem.
>
> This patch may be used under either the GPL or the BSD license.
>
> Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
>
> === arch/ia64/kernel/acpi-ext.c 1.5 vs edited ==> --- 1.5/arch/ia64/kernel/acpi-ext.c 2004-10-05 12:19:50 -06:00
> +++ edited/arch/ia64/kernel/acpi-ext.c 2005-03-18 11:29:18 -07:00
> @@ -12,89 +12,35 @@
> #include <linux/module.h>
> #include <linux/types.h>
> #include <linux/acpi.h>
> -#include <linux/efi.h>
>
> #include <asm/acpi-ext.h>
>
> -struct acpi_vendor_descriptor {
> - u8 guid_id;
> - efi_guid_t guid;
> -};
> -
> -struct acpi_vendor_info {
> - struct acpi_vendor_descriptor *descriptor;
> - u8 *data;
> - u32 length;
> -};
> -
> -acpi_status
> -acpi_vendor_resource_match(struct acpi_resource *resource, void *context)
> -{
> - struct acpi_vendor_info *info = (struct acpi_vendor_info *) context;
> - struct acpi_resource_vendor *vendor;
> - struct acpi_vendor_descriptor *descriptor;
> - u32 length;
> -
> - if (resource->id != ACPI_RSTYPE_VENDOR)
> - return AE_OK;
> -
> - vendor = (struct acpi_resource_vendor *) &resource->data;
> - descriptor = (struct acpi_vendor_descriptor *) vendor->reserved;
> - if (vendor->length <= sizeof(*info->descriptor) ||
> - descriptor->guid_id != info->descriptor->guid_id ||
> - efi_guidcmp(descriptor->guid, info->descriptor->guid))
> - return AE_OK;
> -
> - length = vendor->length - sizeof(struct acpi_vendor_descriptor);
> - info->data = acpi_os_allocate(length);
> - if (!info->data)
> - return AE_NO_MEMORY;
> -
> - memcpy(info->data, vendor->reserved + sizeof(struct acpi_vendor_descriptor), length);
> - info->length = length;
> - return AE_CTRL_TERMINATE;
> -}
> -
> -acpi_status
> -acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor *id,
> - u8 **data, u32 *length)
> -{
> - struct acpi_vendor_info info;
> -
> - info.descriptor = id;
> - info.data = NULL;
> -
> - acpi_walk_resources(obj, METHOD_NAME__CRS, acpi_vendor_resource_match, &info);
> - if (!info.data)
> - return AE_NOT_FOUND;
> -
> - *data = info.data;
> - *length = info.length;
> - return AE_OK;
> -}
> -
> struct acpi_vendor_descriptor hp_ccsr_descriptor = {
> - .guid_id = 2,
> - .guid = EFI_GUID(0x69e9adf9, 0x924f, 0xab5f, 0xf6, 0x4a, 0x24, 0xd2, 0x01, 0x37, 0x0e, 0xad)
> + .uuid_subtype = 2,
> + .uuid = ACPI_UUID(0x69e9adf9, 0x924f, 0xab5f, 0xf6, 0x4a, 0x24, 0xd2, 0x01, 0x37, 0x0e, 0xad)
> };
>
> acpi_status
> hp_acpi_csr_space(acpi_handle obj, u64 *csr_base, u64 *csr_length)
> {
> - acpi_status status;
> - u8 *data;
> + acpi_status status = AE_OK;
> + u8 *data = NULL;
> u32 length;
>
> - status = acpi_find_vendor_resource(obj, &hp_ccsr_descriptor, &data, &length);
> + status = acpi_find_vendor_resource(obj, &hp_ccsr_descriptor, &data,
> + &length);
>
> - if (ACPI_FAILURE(status) || length != 16)
> - return AE_NOT_FOUND;
> + if (ACPI_FAILURE(status) || length != 16) {
> + status = AE_NOT_FOUND;
> + goto out;
> + }
>
> memcpy(csr_base, data, sizeof(*csr_base));
> memcpy(csr_length, data + 8, sizeof(*csr_length));
> - acpi_os_free(data);
>
> - return AE_OK;
> +out:
> + acpi_os_free(data);
> + return status;
> }
>
> EXPORT_SYMBOL(hp_acpi_csr_space);
> === drivers/acpi/resources/rsxface.c 1.22 vs edited ==> --- 1.22/drivers/acpi/resources/rsxface.c 2005-01-20 22:17:54 -07:00
> +++ edited/drivers/acpi/resources/rsxface.c 2005-03-18 12:24:34 -07:00
> @@ -435,3 +435,90 @@
> }
> EXPORT_SYMBOL(acpi_resource_to_address64);
>
> +static inline int
> +acpi_uuidcmp (struct acpi_uuid left, struct acpi_uuid right)
> +{
> + return memcmp(&left, &right, sizeof(left));
> +}
> +
> +static acpi_status
> +acpi_vendor_resource_match(struct acpi_resource *resource, void *context)
> +{
> + struct acpi_vendor_info *info = (struct acpi_vendor_info *) context;
> + struct acpi_resource_vendor *vendor;
> + struct acpi_vendor_descriptor *descriptor;
> + u32 length;
> +
> + if (resource->id != ACPI_RSTYPE_VENDOR)
> + return AE_OK;
> +
> + vendor = (struct acpi_resource_vendor *) &resource->data;
> + descriptor = (struct acpi_vendor_descriptor *) vendor->reserved;
> + if (vendor->length <= sizeof(*info->descriptor) ||
> + descriptor->uuid_subtype != info->descriptor->uuid_subtype ||
> + acpi_uuidcmp(descriptor->uuid, info->descriptor->uuid))
> + return AE_OK;
> +
> + length = vendor->length - sizeof(struct acpi_vendor_descriptor);
> + info->data = acpi_os_allocate(length);
> + if (!info->data)
> + return AE_NO_MEMORY;
> +
> + memcpy(info->data, vendor->reserved + sizeof(struct acpi_vendor_descriptor), length);
> + info->length = length;
> + return AE_CTRL_TERMINATE;
> +}
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: acpi_find_vendor_resource
> + *
> + * PARAMETERS: device_handle - a handle to the device object for the
> + * device we are querying
> + * id - a pointer to the acpi_vendor_descriptor
> + * for the UUID-identified vendor-defined
> + * resource we want
> + * data - a pointer to a pointer where the address
> + * of the vendor data will be stored
> + * length - a pointer to an integer where the length
> + * of the vendor data will be stored
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: This function walks the current resources for the specified
> + * device and looks for a vendor-defined resource that matches
> + * the supplied UUID and subtype.
> + *
> + * If the desired resource is found, a buffer is allocated for
> + * the vendor-defined data (excluding the UUID and other headers),
> + * and the address and size of the buffer are returned in *data
> + * and *length. The caller is responsible for deallocating
> + * the buffer with acpi_os_free().
> + *
> + * If the function fails, AE_NOT_FOUND will be returned and
> + * the values of *data and *length are unchanged.
> + *
> + ******************************************************************************/
> +
> +acpi_status
> +acpi_find_vendor_resource(
> + acpi_handle device_handle,
> + struct acpi_vendor_descriptor *id,
> + u8 **data,
> + u32 *length)
> +{
> + struct acpi_vendor_info info;
> +
> + info.descriptor = id;
> + info.data = NULL;
> +
> + acpi_walk_resources(device_handle, METHOD_NAME__CRS,
> + acpi_vendor_resource_match, &info);
> + if (!info.data)
> + return AE_NOT_FOUND;
> +
> + *data = info.data;
> + *length = info.length;
> + return AE_OK;
> +}
> +EXPORT_SYMBOL(acpi_find_vendor_resource);
> === include/acpi/acpixf.h 1.31 vs edited ==> --- 1.31/include/acpi/acpixf.h 2005-01-20 22:17:55 -07:00
> +++ edited/include/acpi/acpixf.h 2005-03-18 12:09:12 -07:00
> @@ -425,10 +425,10 @@
>
> acpi_status
> acpi_walk_resources (
> - acpi_handle device_handle,
> - char *path,
> + acpi_handle device_handle,
> + char *path,
> ACPI_WALK_RESOURCE_CALLBACK user_function,
> - void *context);
> + void *context);
>
> acpi_status
> acpi_set_current_resources (
> @@ -443,7 +443,14 @@
> acpi_status
> acpi_resource_to_address64 (
> struct acpi_resource *resource,
> - struct acpi_resource_address64 *out);
> + struct acpi_resource_address64 *out);
> +
> +acpi_status
> +acpi_find_vendor_resource (
> + acpi_handle device_handle,
> + struct acpi_vendor_descriptor *id,
> + u8 **data,
> + u32 *length);
>
> /*
> * Hardware (ACPI device) interfaces
> === include/acpi/actypes.h 1.41 vs edited ==> --- 1.41/include/acpi/actypes.h 2005-01-20 22:17:55 -07:00
> +++ edited/include/acpi/actypes.h 2005-03-18 11:23:21 -07:00
> @@ -1045,6 +1045,16 @@
> #define ACPI_PRODUCER (u8) 0x00
> #define ACPI_CONSUMER (u8) 0x01
>
> +struct acpi_uuid {
> + u8 b[16];
> +};
> +
> +#define ACPI_UUID(a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \
> +((struct acpi_uuid) \
> +{{ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \
> + (b) & 0xff, ((b) >> 8) & 0xff, \
> + (c) & 0xff, ((c) >> 8) & 0xff, \
> + (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }})
>
> /*
> * Structures used to describe device resources
> @@ -1097,6 +1107,18 @@
> {
> u32 length;
> u8 reserved[1];
> +};
> +
> +struct acpi_vendor_descriptor
> +{
> + u8 uuid_subtype;
> + struct acpi_uuid uuid;
> +};
> +
> +struct acpi_vendor_info {
> + struct acpi_vendor_descriptor *descriptor;
> + u8 *data;
> + u32 length;
> };
>
> struct acpi_resource_end_tag
>
>
>
>
> -------------------------------------------------------
> SF email is sponsored by - The IT Product Guide
> Read honest & candid reviews on hundreds of IT Products from real users.
> Discover which products truly live up to the hype. Start reading now.
> http://ads.osdn.com/?ad_ide95&alloc_id\x14396&op=click
> _______________________________________________
> Acpi-devel mailing list
> Acpi-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/acpi-devel
>
next prev parent reply other threads:[~2005-06-21 20:21 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-03-18 20:19 [PATCH] ACPI: implement UUID-labelled vendor-defined resources Bjorn Helgaas
2005-06-21 20:21 ` Bjorn Helgaas [this message]
2005-09-16 21:56 ` [ACPI] " Moore, Robert
2005-09-19 15:31 ` Bjorn Helgaas
[not found] ` <200509190931.20643.bjorn.helgaas-VXdhtT5mjnY@public.gmane.org>
2005-09-20 23:09 ` Bjorn Helgaas
[not found] ` <971FCB6690CD0E4898387DBF7552B90E02C0B5F2-sBd4vmA9Se5Qxe9IK+vIArfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2005-09-19 15:52 ` Christoph Hellwig
[not found] ` <20050919155203.GA24346-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2005-09-22 17:48 ` Pavel Machek
2005-09-20 23:16 ` Moore, Robert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200506211421.20446.bjorn.helgaas@hp.com \
--to=bjorn.helgaas@hp.com \
--cc=acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=linux-ia64-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox