26 #include <linux/kernel.h>
27 #include <linux/module.h>
28 #include <linux/slab.h>
30 #include <linux/types.h>
36 #define _COMPONENT ACPI_BUS_COMPONENT
45 #ifdef ACPI_DEBUG_OUTPUT
60 u32 size_required = 0;
62 char *format_string =
NULL;
70 || (package->
package.count < 1)) {
85 format_count = (format->
length /
sizeof(
char)) - 1;
86 if (format_count > package->
package.count) {
88 " than exist in package [%d].\n",
89 format_count, package->
package.count);
93 format_string = format->
pointer;
98 for (i = 0; i < format_count; i++) {
106 switch (element->
type) {
109 switch (format_string[i]) {
111 size_required +=
sizeof(
u64);
112 tail_offset +=
sizeof(
u64);
116 sizeof(
char *) +
sizeof(
u64) +
118 tail_offset +=
sizeof(
char *);
122 " [%d]: got number, expecing"
124 i, format_string[i]);
132 switch (format_string[i]) {
136 (element->
string.length *
sizeof(
char)) +
138 tail_offset +=
sizeof(
char *);
143 (element->
buffer.length *
sizeof(
u8));
144 tail_offset +=
sizeof(
u8 *);
148 " [%d] got string/buffer,"
150 i, format_string[i]);
159 "Found unsupported element at index=%d\n",
170 if (buffer->
length < size_required) {
171 buffer->
length = size_required;
173 }
else if (buffer->
length != size_required || !buffer->
pointer) {
178 tail = buffer->
pointer + tail_offset;
183 for (i = 0; i < format_count; i++) {
192 switch (element->
type) {
195 switch (format_string[i]) {
202 pointer = (
u8 **) head;
206 head +=
sizeof(
u64 *);
210 tail +=
sizeof(
char);
220 switch (format_string[i]) {
222 pointer = (
u8 **) head;
226 head +=
sizeof(
char *);
227 tail += element->
string.length *
sizeof(
char);
230 tail +=
sizeof(
char);
233 pointer = (
u8 **) head;
237 head +=
sizeof(
u8 *);
238 tail += element->
buffer.length *
sizeof(
u8);
275 acpi_util_eval_error(handle, pathname, status);
280 acpi_util_eval_error(handle, pathname,
AE_BAD_DATA);
316 package = buffer.pointer;
318 if ((buffer.
length == 0) || !package) {
320 (
unsigned)buffer.
length, package);
322 acpi_util_eval_error(handle, pathname, status);
329 acpi_util_eval_error(handle, pathname, status);
332 if (!package->package.count) {
336 acpi_util_eval_error(handle, pathname, status);
343 list->
count = package->package.count;
349 element = &(package->package.elements[
i]);
354 "Expecting a [Reference] package element, found type %X\n",
356 acpi_util_eval_error(handle, pathname, status);
360 if (!
element->reference.handle) {
362 " package %s\n", pathname);
409 output->
package.elements[0].buffer.pointer,
410 output->
package.elements[0].buffer.length,
434 #ifdef ACPI_HOTPLUG_OST
443 params[0].
integer.value = source_event;
445 if (status_buf !=
NULL) {
450 params[2].
buffer.length = 0;