Rev 1498 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1498 | Rev 2216 | ||
---|---|---|---|
Line 6... | Line 6... | ||
6 | 6 | ||
7 | /****************************************************************************** |
7 | /****************************************************************************** |
8 | * |
8 | * |
9 | * 1. Copyright Notice |
9 | * 1. Copyright Notice |
10 | * |
10 | * |
11 | * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp. |
11 | * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp. |
12 | * All rights reserved. |
12 | * All rights reserved. |
13 | * |
13 | * |
14 | * 2. License |
14 | * 2. License |
15 | * |
15 | * |
Line 124... | Line 124... | ||
124 | #define _COMPONENT ACPI_CA_DEBUGGER |
124 | #define _COMPONENT ACPI_CA_DEBUGGER |
125 | ACPI_MODULE_NAME ("dbexec") |
125 | ACPI_MODULE_NAME ("dbexec") |
Line 126... | Line 126... | ||
126 | 126 | ||
- | 127 | ||
Line 127... | Line 128... | ||
127 | 128 | static ACPI_DB_METHOD_INFO AcpiGbl_DbMethodInfo; |
|
Line 128... | Line 129... | ||
128 | static ACPI_DB_METHOD_INFO AcpiGbl_DbMethodInfo; |
129 | #define DB_DEFAULT_PKG_ELEMENTS 33 |
129 | 130 | ||
Line 151... | Line 152... | ||
151 | ACPI_HANDLE ObjHandle, |
152 | ACPI_HANDLE ObjHandle, |
152 | UINT32 NestingLevel, |
153 | UINT32 NestingLevel, |
153 | void *Context, |
154 | void *Context, |
154 | void **ReturnValue); |
155 | void **ReturnValue); |
Line -... | Line 156... | ||
- | 156 | ||
- | 157 | static ACPI_STATUS |
|
- | 158 | AcpiDbHexCharToValue ( |
|
- | 159 | int HexChar, |
|
- | 160 | UINT8 *ReturnValue); |
|
- | 161 | ||
- | 162 | static ACPI_STATUS |
|
- | 163 | AcpiDbConvertToPackage ( |
|
- | 164 | char *String, |
|
- | 165 | ACPI_OBJECT *Object); |
|
- | 166 | ||
- | 167 | static ACPI_STATUS |
|
- | 168 | AcpiDbConvertToObject ( |
|
- | 169 | ACPI_OBJECT_TYPE Type, |
|
- | 170 | char *String, |
|
- | 171 | ACPI_OBJECT *Object); |
|
- | 172 | ||
- | 173 | static void |
|
- | 174 | AcpiDbDeleteObjects ( |
|
- | 175 | UINT32 Count, |
|
- | 176 | ACPI_OBJECT *Objects); |
|
- | 177 | ||
- | 178 | ||
- | 179 | /******************************************************************************* |
|
- | 180 | * |
|
- | 181 | * FUNCTION: AcpiDbHexCharToValue |
|
- | 182 | * |
|
- | 183 | * PARAMETERS: HexChar - Ascii Hex digit, 0-9|a-f|A-F |
|
- | 184 | * ReturnValue - Where the converted value is returned |
|
- | 185 | * |
|
- | 186 | * RETURN: Status |
|
- | 187 | * |
|
- | 188 | * DESCRIPTION: Convert a single hex character to a 4-bit number (0-16). |
|
- | 189 | * |
|
- | 190 | ******************************************************************************/ |
|
- | 191 | ||
- | 192 | static ACPI_STATUS |
|
- | 193 | AcpiDbHexCharToValue ( |
|
- | 194 | int HexChar, |
|
- | 195 | UINT8 *ReturnValue) |
|
- | 196 | { |
|
- | 197 | UINT8 Value; |
|
- | 198 | ||
- | 199 | ||
- | 200 | /* Digit must be ascii [0-9a-fA-F] */ |
|
- | 201 | ||
- | 202 | if (!ACPI_IS_XDIGIT (HexChar)) |
|
- | 203 | { |
|
- | 204 | return (AE_BAD_HEX_CONSTANT); |
|
- | 205 | } |
|
- | 206 | ||
- | 207 | if (HexChar <= 0x39) |
|
- | 208 | { |
|
- | 209 | Value = (UINT8) (HexChar - 0x30); |
|
- | 210 | } |
|
- | 211 | else |
|
- | 212 | { |
|
- | 213 | Value = (UINT8) (ACPI_TOUPPER (HexChar) - 0x37); |
|
- | 214 | } |
|
- | 215 | ||
- | 216 | *ReturnValue = Value; |
|
- | 217 | return (AE_OK); |
|
- | 218 | } |
|
- | 219 | ||
- | 220 | ||
- | 221 | /******************************************************************************* |
|
- | 222 | * |
|
- | 223 | * FUNCTION: AcpiDbHexByteToBinary |
|
- | 224 | * |
|
- | 225 | * PARAMETERS: HexByte - Double hex digit (0x00 - 0xFF) in format: |
|
- | 226 | * HiByte then LoByte. |
|
- | 227 | * ReturnValue - Where the converted value is returned |
|
- | 228 | * |
|
- | 229 | * RETURN: Status |
|
- | 230 | * |
|
- | 231 | * DESCRIPTION: Convert two hex characters to an 8 bit number (0 - 255). |
|
- | 232 | * |
|
- | 233 | ******************************************************************************/ |
|
- | 234 | ||
- | 235 | static ACPI_STATUS |
|
- | 236 | AcpiDbHexByteToBinary ( |
|
- | 237 | char *HexByte, |
|
- | 238 | UINT8 *ReturnValue) |
|
- | 239 | { |
|
- | 240 | UINT8 Local0; |
|
- | 241 | UINT8 Local1; |
|
- | 242 | ACPI_STATUS Status; |
|
- | 243 | ||
- | 244 | ||
- | 245 | /* High byte */ |
|
- | 246 | ||
- | 247 | Status = AcpiDbHexCharToValue (HexByte[0], &Local0); |
|
- | 248 | if (ACPI_FAILURE (Status)) |
|
- | 249 | { |
|
- | 250 | return (Status); |
|
- | 251 | } |
|
- | 252 | ||
- | 253 | /* Low byte */ |
|
- | 254 | ||
- | 255 | Status = AcpiDbHexCharToValue (HexByte[1], &Local1); |
|
- | 256 | if (ACPI_FAILURE (Status)) |
|
- | 257 | { |
|
- | 258 | return (Status); |
|
- | 259 | } |
|
- | 260 | ||
- | 261 | *ReturnValue = (UINT8) ((Local0 << 4) | Local1); |
|
- | 262 | return (AE_OK); |
|
- | 263 | } |
|
- | 264 | ||
- | 265 | ||
- | 266 | /******************************************************************************* |
|
- | 267 | * |
|
- | 268 | * FUNCTION: AcpiDbConvertToBuffer |
|
- | 269 | * |
|
- | 270 | * PARAMETERS: String - Input string to be converted |
|
- | 271 | * Object - Where the buffer object is returned |
|
- | 272 | * |
|
- | 273 | * RETURN: Status |
|
- | 274 | * |
|
- | 275 | * DESCRIPTION: Convert a string to a buffer object. String is treated a list |
|
- | 276 | * of buffer elements, each separated by a space or comma. |
|
- | 277 | * |
|
- | 278 | ******************************************************************************/ |
|
- | 279 | ||
- | 280 | static ACPI_STATUS |
|
- | 281 | AcpiDbConvertToBuffer ( |
|
- | 282 | char *String, |
|
- | 283 | ACPI_OBJECT *Object) |
|
- | 284 | { |
|
- | 285 | UINT32 i; |
|
- | 286 | UINT32 j; |
|
- | 287 | UINT32 Length; |
|
- | 288 | UINT8 *Buffer; |
|
- | 289 | ACPI_STATUS Status; |
|
- | 290 | ||
- | 291 | ||
- | 292 | /* Generate the final buffer length */ |
|
- | 293 | ||
- | 294 | for (i = 0, Length = 0; String[i];) |
|
- | 295 | { |
|
- | 296 | i+=2; |
|
- | 297 | Length++; |
|
- | 298 | ||
- | 299 | while (String[i] && |
|
- | 300 | ((String[i] == ',') || (String[i] == ' '))) |
|
- | 301 | { |
|
- | 302 | i++; |
|
- | 303 | } |
|
- | 304 | } |
|
- | 305 | ||
- | 306 | Buffer = ACPI_ALLOCATE (Length); |
|
- | 307 | if (!Buffer) |
|
- | 308 | { |
|
- | 309 | return (AE_NO_MEMORY); |
|
- | 310 | } |
|
- | 311 | ||
- | 312 | /* Convert the command line bytes to the buffer */ |
|
- | 313 | ||
- | 314 | for (i = 0, j = 0; String[i];) |
|
- | 315 | { |
|
- | 316 | Status = AcpiDbHexByteToBinary (&String[i], &Buffer[j]); |
|
- | 317 | if (ACPI_FAILURE (Status)) |
|
- | 318 | { |
|
- | 319 | ACPI_FREE (Buffer); |
|
- | 320 | return (Status); |
|
- | 321 | } |
|
- | 322 | ||
- | 323 | j++; |
|
- | 324 | i+=2; |
|
- | 325 | while (String[i] && |
|
- | 326 | ((String[i] == ',') || (String[i] == ' '))) |
|
- | 327 | { |
|
- | 328 | i++; |
|
- | 329 | } |
|
- | 330 | } |
|
- | 331 | ||
- | 332 | Object->Type = ACPI_TYPE_BUFFER; |
|
- | 333 | Object->Buffer.Pointer = Buffer; |
|
- | 334 | Object->Buffer.Length = Length; |
|
- | 335 | return (AE_OK); |
|
- | 336 | } |
|
- | 337 | ||
- | 338 | ||
- | 339 | /******************************************************************************* |
|
- | 340 | * |
|
- | 341 | * FUNCTION: AcpiDbConvertToPackage |
|
- | 342 | * |
|
- | 343 | * PARAMETERS: String - Input string to be converted |
|
- | 344 | * Object - Where the package object is returned |
|
- | 345 | * |
|
- | 346 | * RETURN: Status |
|
- | 347 | * |
|
- | 348 | * DESCRIPTION: Convert a string to a package object. Handles nested packages |
|
- | 349 | * via recursion with AcpiDbConvertToObject. |
|
- | 350 | * |
|
- | 351 | ******************************************************************************/ |
|
- | 352 | ||
- | 353 | static ACPI_STATUS |
|
- | 354 | AcpiDbConvertToPackage ( |
|
- | 355 | char *String, |
|
- | 356 | ACPI_OBJECT *Object) |
|
- | 357 | { |
|
- | 358 | char *This; |
|
- | 359 | char *Next; |
|
- | 360 | UINT32 i; |
|
- | 361 | ACPI_OBJECT_TYPE Type; |
|
- | 362 | ACPI_OBJECT *Elements; |
|
- | 363 | ACPI_STATUS Status; |
|
- | 364 | ||
- | 365 | ||
- | 366 | Elements = ACPI_ALLOCATE_ZEROED ( |
|
- | 367 | DB_DEFAULT_PKG_ELEMENTS * sizeof (ACPI_OBJECT)); |
|
- | 368 | ||
- | 369 | This = String; |
|
- | 370 | for (i = 0; i < (DB_DEFAULT_PKG_ELEMENTS - 1); i++) |
|
- | 371 | { |
|
- | 372 | This = AcpiDbGetNextToken (This, &Next, &Type); |
|
- | 373 | if (!This) |
|
- | 374 | { |
|
- | 375 | break; |
|
- | 376 | } |
|
- | 377 | ||
- | 378 | /* Recursive call to convert each package element */ |
|
- | 379 | ||
- | 380 | Status = AcpiDbConvertToObject (Type, This, &Elements[i]); |
|
- | 381 | if (ACPI_FAILURE (Status)) |
|
- | 382 | { |
|
- | 383 | AcpiDbDeleteObjects (i + 1, Elements); |
|
- | 384 | ACPI_FREE (Elements); |
|
- | 385 | return (Status); |
|
- | 386 | } |
|
- | 387 | ||
- | 388 | This = Next; |
|
- | 389 | } |
|
- | 390 | ||
- | 391 | Object->Type = ACPI_TYPE_PACKAGE; |
|
- | 392 | Object->Package.Count = i; |
|
- | 393 | Object->Package.Elements = Elements; |
|
- | 394 | return (AE_OK); |
|
- | 395 | } |
|
- | 396 | ||
- | 397 | ||
- | 398 | /******************************************************************************* |
|
- | 399 | * |
|
- | 400 | * FUNCTION: AcpiDbConvertToObject |
|
- | 401 | * |
|
- | 402 | * PARAMETERS: Type - Object type as determined by parser |
|
- | 403 | * String - Input string to be converted |
|
- | 404 | * Object - Where the new object is returned |
|
- | 405 | * |
|
- | 406 | * RETURN: Status |
|
- | 407 | * |
|
- | 408 | * DESCRIPTION: Convert a typed and tokenized string to an ACPI_OBJECT. Typing: |
|
- | 409 | * 1) String objects were surrounded by quotes. |
|
- | 410 | * 2) Buffer objects were surrounded by parentheses. |
|
- | 411 | * 3) Package objects were surrounded by brackets "[]". |
|
- | 412 | * 4) All standalone tokens are treated as integers. |
|
- | 413 | * |
|
- | 414 | ******************************************************************************/ |
|
- | 415 | ||
- | 416 | static ACPI_STATUS |
|
- | 417 | AcpiDbConvertToObject ( |
|
- | 418 | ACPI_OBJECT_TYPE Type, |
|
- | 419 | char *String, |
|
- | 420 | ACPI_OBJECT *Object) |
|
- | 421 | { |
|
- | 422 | ACPI_STATUS Status = AE_OK; |
|
- | 423 | ||
- | 424 | ||
- | 425 | switch (Type) |
|
- | 426 | { |
|
- | 427 | case ACPI_TYPE_STRING: |
|
- | 428 | Object->Type = ACPI_TYPE_STRING; |
|
- | 429 | Object->String.Pointer = String; |
|
- | 430 | Object->String.Length = (UINT32) ACPI_STRLEN (String); |
|
- | 431 | break; |
|
- | 432 | ||
- | 433 | case ACPI_TYPE_BUFFER: |
|
- | 434 | Status = AcpiDbConvertToBuffer (String, Object); |
|
- | 435 | break; |
|
- | 436 | ||
- | 437 | case ACPI_TYPE_PACKAGE: |
|
- | 438 | Status = AcpiDbConvertToPackage (String, Object); |
|
- | 439 | break; |
|
- | 440 | ||
- | 441 | default: |
|
- | 442 | Object->Type = ACPI_TYPE_INTEGER; |
|
- | 443 | Status = AcpiUtStrtoul64 (String, 16, &Object->Integer.Value); |
|
- | 444 | break; |
|
- | 445 | } |
|
- | 446 | ||
- | 447 | return (Status); |
|
- | 448 | } |
|
- | 449 | ||
- | 450 | ||
- | 451 | /******************************************************************************* |
|
- | 452 | * |
|
- | 453 | * FUNCTION: AcpiDbDeleteObjects |
|
- | 454 | * |
|
- | 455 | * PARAMETERS: Count - Count of objects in the list |
|
- | 456 | * Objects - Array of ACPI_OBJECTs to be deleted |
|
- | 457 | * |
|
- | 458 | * RETURN: None |
|
- | 459 | * |
|
- | 460 | * DESCRIPTION: Delete a list of ACPI_OBJECTS. Handles packages and nested |
|
- | 461 | * packages via recursion. |
|
- | 462 | * |
|
- | 463 | ******************************************************************************/ |
|
- | 464 | ||
- | 465 | static void |
|
- | 466 | AcpiDbDeleteObjects ( |
|
- | 467 | UINT32 Count, |
|
- | 468 | ACPI_OBJECT *Objects) |
|
- | 469 | { |
|
- | 470 | UINT32 i; |
|
- | 471 | ||
- | 472 | ||
- | 473 | for (i = 0; i < Count; i++) |
|
- | 474 | { |
|
- | 475 | switch (Objects[i].Type) |
|
- | 476 | { |
|
- | 477 | case ACPI_TYPE_BUFFER: |
|
- | 478 | ACPI_FREE (Objects[i].Buffer.Pointer); |
|
- | 479 | break; |
|
- | 480 | ||
- | 481 | case ACPI_TYPE_PACKAGE: |
|
- | 482 | ||
- | 483 | /* Recursive call to delete package elements */ |
|
- | 484 | ||
- | 485 | AcpiDbDeleteObjects (Objects[i].Package.Count, |
|
- | 486 | Objects[i].Package.Elements); |
|
- | 487 | ||
- | 488 | /* Free the elements array */ |
|
- | 489 | ||
- | 490 | ACPI_FREE (Objects[i].Package.Elements); |
|
- | 491 | break; |
|
- | 492 | ||
- | 493 | default: |
|
- | 494 | break; |
|
- | 495 | } |
|
- | 496 | } |
|
- | 497 | } |
|
Line 155... | Line 498... | ||
155 | 498 | ||
156 | 499 | ||
157 | /******************************************************************************* |
500 | /******************************************************************************* |
158 | * |
501 | * |
Line 174... | Line 517... | ||
174 | { |
517 | { |
175 | ACPI_STATUS Status; |
518 | ACPI_STATUS Status; |
176 | ACPI_OBJECT_LIST ParamObjects; |
519 | ACPI_OBJECT_LIST ParamObjects; |
177 | ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS]; |
520 | ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS]; |
178 | ACPI_HANDLE Handle; |
521 | ACPI_HANDLE Handle; |
179 | UINT32 i; |
- | |
180 | ACPI_DEVICE_INFO *ObjInfo; |
522 | ACPI_DEVICE_INFO *ObjInfo; |
- | 523 | UINT32 i; |
|
- | 524 | ||
- | 525 | ||
- | 526 | ACPI_FUNCTION_TRACE (DbExecuteMethod); |
|
Line 181... | Line 527... | ||
181 | 527 | ||
182 | 528 | ||
183 | if (AcpiGbl_DbOutputToFile && !AcpiDbgLevel) |
529 | if (AcpiGbl_DbOutputToFile && !AcpiDbgLevel) |
Line 188... | Line 534... | ||
188 | /* Get the NS node, determines existence also */ |
534 | /* Get the NS node, determines existence also */ |
Line 189... | Line 535... | ||
189 | 535 | ||
190 | Status = AcpiGetHandle (NULL, Info->Pathname, &Handle); |
536 | Status = AcpiGetHandle (NULL, Info->Pathname, &Handle); |
191 | if (ACPI_FAILURE (Status)) |
537 | if (ACPI_FAILURE (Status)) |
192 | { |
538 | { |
193 | return (Status); |
539 | return_ACPI_STATUS (Status); |
Line 194... | Line 540... | ||
194 | } |
540 | } |
Line 195... | Line 541... | ||
195 | 541 | ||
196 | /* Get the object info for number of method parameters */ |
542 | /* Get the object info for number of method parameters */ |
197 | 543 | ||
198 | Status = AcpiGetObjectInfo (Handle, &ObjInfo); |
544 | Status = AcpiGetObjectInfo (Handle, &ObjInfo); |
199 | if (ACPI_FAILURE (Status)) |
545 | if (ACPI_FAILURE (Status)) |
Line 200... | Line 546... | ||
200 | { |
546 | { |
201 | return (Status); |
547 | return_ACPI_STATUS (Status); |
Line 202... | Line 548... | ||
202 | } |
548 | } |
203 | 549 | ||
204 | ParamObjects.Pointer = NULL; |
550 | ParamObjects.Pointer = NULL; |
Line -... | Line 551... | ||
- | 551 | ParamObjects.Count = 0; |
|
205 | ParamObjects.Count = 0; |
552 | |
206 | 553 | if (ObjInfo->Type == ACPI_TYPE_METHOD) |
|
- | 554 | { |
|
- | 555 | /* Are there arguments to the method? */ |
|
- | 556 | ||
207 | if (ObjInfo->Type == ACPI_TYPE_METHOD) |
557 | i = 0; |
- | 558 | if (Info->Args && Info->Args[0]) |
|
- | 559 | { |
|
- | 560 | /* Get arguments passed on the command line */ |
|
- | 561 | ||
- | 562 | for (; Info->Args[i] && |
|
- | 563 | (i < ACPI_METHOD_NUM_ARGS) && |
|
- | 564 | (i < ObjInfo->ParamCount); |
|
- | 565 | i++) |
|
208 | { |
566 | { |
209 | /* Are there arguments to the method? */ |
567 | /* Convert input string (token) to an actual ACPI_OBJECT */ |
210 | 568 | ||
- | 569 | Status = AcpiDbConvertToObject (Info->Types[i], |
|
211 | if (Info->Args && Info->Args[0]) |
570 | Info->Args[i], &Params[i]); |
212 | { |
- | |
213 | for (i = 0; Info->Args[i] && i < ACPI_METHOD_NUM_ARGS; i++) |
- | |
214 | { |
- | |
215 | Params[i].Type = ACPI_TYPE_INTEGER; |
571 | if (ACPI_FAILURE (Status)) |
216 | Params[i].Integer.Value = ACPI_STRTOUL (Info->Args[i], NULL, 16); |
572 | { |
- | 573 | ACPI_EXCEPTION ((AE_INFO, Status, |
|
- | 574 | "While parsing method arguments")); |
|
- | 575 | goto Cleanup; |
|
- | 576 | } |
|
217 | } |
577 | } |
- | 578 | } |
|
218 | 579 | ||
Line 219... | Line 580... | ||
219 | ParamObjects.Pointer = Params; |
580 | /* Create additional "default" parameters as needed */ |
220 | ParamObjects.Count = i; |
581 | |
221 | } |
582 | if (i < ObjInfo->ParamCount) |
222 | else |
583 | { |
223 | { |
584 | AcpiOsPrintf ("Adding %u arguments containing default values\n", |
Line 245... | Line 606... | ||
245 | Params[i].Type = ACPI_TYPE_INTEGER; |
606 | Params[i].Type = ACPI_TYPE_INTEGER; |
246 | Params[i].Integer.Value = i * (UINT64) 0x1000; |
607 | Params[i].Integer.Value = i * (UINT64) 0x1000; |
247 | break; |
608 | break; |
248 | } |
609 | } |
249 | } |
610 | } |
- | 611 | } |
|
Line 250... | Line -... | ||
250 | - | ||
251 | ParamObjects.Pointer = Params; |
612 | |
252 | ParamObjects.Count = ObjInfo->ParamCount; |
613 | ParamObjects.Count = ObjInfo->ParamCount; |
253 | } |
614 | ParamObjects.Pointer = Params; |
Line 254... | Line -... | ||
254 | } |
- | |
255 | - | ||
256 | ACPI_FREE (ObjInfo); |
615 | } |
Line 257... | Line 616... | ||
257 | 616 | ||
258 | /* Prepare for a return object of arbitrary size */ |
617 | /* Prepare for a return object of arbitrary size */ |
Line 267... | Line 626... | ||
267 | Info->Pathname, &ParamObjects, ReturnObj); |
626 | Info->Pathname, &ParamObjects, ReturnObj); |
Line 268... | Line 627... | ||
268 | 627 | ||
269 | AcpiGbl_CmSingleStep = FALSE; |
628 | AcpiGbl_CmSingleStep = FALSE; |
Line -... | Line 629... | ||
- | 629 | AcpiGbl_MethodExecuting = FALSE; |
|
- | 630 | ||
- | 631 | if (ACPI_FAILURE (Status)) |
|
- | 632 | { |
|
- | 633 | ACPI_EXCEPTION ((AE_INFO, Status, |
|
- | 634 | "while executing %s from debugger", Info->Pathname)); |
|
- | 635 | ||
- | 636 | if (Status == AE_BUFFER_OVERFLOW) |
|
- | 637 | { |
|
- | 638 | ACPI_ERROR ((AE_INFO, |
|
- | 639 | "Possible overflow of internal debugger buffer (size 0x%X needed 0x%X)", |
|
- | 640 | ACPI_DEBUG_BUFFER_SIZE, (UINT32) ReturnObj->Length)); |
|
- | 641 | } |
|
- | 642 | } |
|
- | 643 | ||
- | 644 | Cleanup: |
|
- | 645 | AcpiDbDeleteObjects (ObjInfo->ParamCount, Params); |
|
270 | AcpiGbl_MethodExecuting = FALSE; |
646 | ACPI_FREE (ObjInfo); |
271 | 647 | ||
Line 272... | Line 648... | ||
272 | return (Status); |
648 | return_ACPI_STATUS (Status); |
273 | } |
649 | } |
Line 431... | Line 807... | ||
431 | 807 | ||
432 | void |
808 | void |
433 | AcpiDbExecute ( |
809 | AcpiDbExecute ( |
434 | char *Name, |
810 | char *Name, |
- | 811 | char **Args, |
|
435 | char **Args, |
812 | ACPI_OBJECT_TYPE *Types, |
436 | UINT32 Flags) |
813 | UINT32 Flags) |
437 | { |
814 | { |
438 | ACPI_STATUS Status; |
815 | ACPI_STATUS Status; |
439 | ACPI_BUFFER ReturnObj; |
816 | ACPI_BUFFER ReturnObj; |
Line 468... | Line 845... | ||
468 | 845 | ||
469 | ACPI_STRCPY (NameString, Name); |
846 | ACPI_STRCPY (NameString, Name); |
470 | AcpiUtStrupr (NameString); |
847 | AcpiUtStrupr (NameString); |
471 | AcpiGbl_DbMethodInfo.Name = NameString; |
848 | AcpiGbl_DbMethodInfo.Name = NameString; |
- | 849 | AcpiGbl_DbMethodInfo.Args = Args; |
|
472 | AcpiGbl_DbMethodInfo.Args = Args; |
850 | AcpiGbl_DbMethodInfo.Types = Types; |
Line 473... | Line 851... | ||
473 | AcpiGbl_DbMethodInfo.Flags = Flags; |
851 | AcpiGbl_DbMethodInfo.Flags = Flags; |
474 | 852 | ||
Line 565... | Line 943... | ||
565 | (void) AcpiOsWaitSemaphore (Info->InfoGate, 1, ACPI_WAIT_FOREVER); |
943 | (void) AcpiOsWaitSemaphore (Info->InfoGate, 1, ACPI_WAIT_FOREVER); |
Line 566... | Line 944... | ||
566 | 944 | ||
567 | if (Info->InitArgs) |
945 | if (Info->InitArgs) |
568 | { |
946 | { |
569 | AcpiDbUInt32ToHexString (Info->NumCreated, Info->IndexOfThreadStr); |
947 | AcpiDbUInt32ToHexString (Info->NumCreated, Info->IndexOfThreadStr); |
570 | AcpiDbUInt32ToHexString (ACPI_TO_INTEGER (AcpiOsGetThreadId ()), |
- | |
571 | Info->IdOfThreadStr); |
948 | AcpiDbUInt32ToHexString ((UINT32) AcpiOsGetThreadId (), Info->IdOfThreadStr); |
Line 572... | Line 949... | ||
572 | } |
949 | } |
573 | 950 | ||
574 | if (Info->Threads && (Info->NumCreated < Info->NumThreads)) |
951 | if (Info->Threads && (Info->NumCreated < Info->NumThreads)) |
575 | { |
- | |
576 | Info->Threads[Info->NumCreated++] = |
952 | { |
Line 577... | Line 953... | ||
577 | ACPI_TO_INTEGER (AcpiOsGetThreadId()); |
953 | Info->Threads[Info->NumCreated++] = AcpiOsGetThreadId(); |
578 | } |
954 | } |
579 | 955 | ||
580 | LocalInfo = *Info; |
956 | LocalInfo = *Info; |
581 | LocalInfo.Args = LocalInfo.Arguments; |
957 | LocalInfo.Args = LocalInfo.Arguments; |
582 | LocalInfo.Arguments[0] = LocalInfo.NumThreadsStr; |
958 | LocalInfo.Arguments[0] = LocalInfo.NumThreadsStr; |
Line -... | Line 959... | ||
- | 959 | LocalInfo.Arguments[1] = LocalInfo.IdOfThreadStr; |
|
- | 960 | LocalInfo.Arguments[2] = LocalInfo.IndexOfThreadStr; |
|
583 | LocalInfo.Arguments[1] = LocalInfo.IdOfThreadStr; |
961 | LocalInfo.Arguments[3] = NULL; |
Line 584... | Line 962... | ||
584 | LocalInfo.Arguments[2] = LocalInfo.IndexOfThreadStr; |
962 | |
585 | LocalInfo.Arguments[3] = NULL; |
963 | LocalInfo.Types = LocalInfo.ArgTypes; |
586 | 964 | ||
Line 720... | Line 1098... | ||
720 | ACPI_MEMSET (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO)); |
1098 | ACPI_MEMSET (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO)); |
Line 721... | Line 1099... | ||
721 | 1099 | ||
Line 722... | Line 1100... | ||
722 | /* Array to store IDs of threads */ |
1100 | /* Array to store IDs of threads */ |
723 | 1101 | ||
724 | AcpiGbl_DbMethodInfo.NumThreads = NumThreads; |
1102 | AcpiGbl_DbMethodInfo.NumThreads = NumThreads; |
725 | Size = 4 * AcpiGbl_DbMethodInfo.NumThreads; |
1103 | Size = sizeof (ACPI_THREAD_ID) * AcpiGbl_DbMethodInfo.NumThreads; |
726 | AcpiGbl_DbMethodInfo.Threads = (UINT32 *) AcpiOsAllocate (Size); |
1104 | AcpiGbl_DbMethodInfo.Threads = AcpiOsAllocate (Size); |
727 | if (AcpiGbl_DbMethodInfo.Threads == NULL) |
1105 | if (AcpiGbl_DbMethodInfo.Threads == NULL) |
728 | { |
1106 | { |
729 | AcpiOsPrintf ("No memory for thread IDs array\n"); |
1107 | AcpiOsPrintf ("No memory for thread IDs array\n"); |
Line 749... | Line 1127... | ||
749 | AcpiGbl_DbMethodInfo.Args = AcpiGbl_DbMethodInfo.Arguments; |
1127 | AcpiGbl_DbMethodInfo.Args = AcpiGbl_DbMethodInfo.Arguments; |
750 | AcpiGbl_DbMethodInfo.Arguments[0] = AcpiGbl_DbMethodInfo.NumThreadsStr; |
1128 | AcpiGbl_DbMethodInfo.Arguments[0] = AcpiGbl_DbMethodInfo.NumThreadsStr; |
751 | AcpiGbl_DbMethodInfo.Arguments[1] = AcpiGbl_DbMethodInfo.IdOfThreadStr; |
1129 | AcpiGbl_DbMethodInfo.Arguments[1] = AcpiGbl_DbMethodInfo.IdOfThreadStr; |
752 | AcpiGbl_DbMethodInfo.Arguments[2] = AcpiGbl_DbMethodInfo.IndexOfThreadStr; |
1130 | AcpiGbl_DbMethodInfo.Arguments[2] = AcpiGbl_DbMethodInfo.IndexOfThreadStr; |
753 | AcpiGbl_DbMethodInfo.Arguments[3] = NULL; |
1131 | AcpiGbl_DbMethodInfo.Arguments[3] = NULL; |
- | 1132 | ||
- | 1133 | AcpiGbl_DbMethodInfo.Types = AcpiGbl_DbMethodInfo.ArgTypes; |
|
- | 1134 | AcpiGbl_DbMethodInfo.ArgTypes[0] = ACPI_TYPE_INTEGER; |
|
- | 1135 | AcpiGbl_DbMethodInfo.ArgTypes[1] = ACPI_TYPE_INTEGER; |
|
- | 1136 | AcpiGbl_DbMethodInfo.ArgTypes[2] = ACPI_TYPE_INTEGER; |
|
- | 1137 | ||
754 | AcpiDbUInt32ToHexString (NumThreads, AcpiGbl_DbMethodInfo.NumThreadsStr); |
1138 | AcpiDbUInt32ToHexString (NumThreads, AcpiGbl_DbMethodInfo.NumThreadsStr); |
Line 755... | Line 1139... | ||
755 | 1139 | ||
Line 756... | Line 1140... | ||
756 | AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); |
1140 | AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); |