Subversion Repositories Kolibri OS

Rev

Rev 1498 | 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);