Print this page
acpica-unix2-20130823
PANKOVs restructure

*** 3,13 **** * Module Name: utids - support for device IDs - HID, UID, CID * *****************************************************************************/ /* ! * Copyright (C) 2000 - 2011, Intel Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: --- 3,13 ---- * Module Name: utids - support for device IDs - HID, UID, CID * *****************************************************************************/ /* ! * Copyright (C) 2000 - 2013, Intel Corp. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met:
*** 71,84 **** ******************************************************************************/ ACPI_STATUS AcpiUtExecute_HID ( ACPI_NAMESPACE_NODE *DeviceNode, ! ACPI_DEVICE_ID **ReturnId) { ACPI_OPERAND_OBJECT *ObjDesc; ! ACPI_DEVICE_ID *Hid; UINT32 Length; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtExecute_HID); --- 71,84 ---- ******************************************************************************/ ACPI_STATUS AcpiUtExecute_HID ( ACPI_NAMESPACE_NODE *DeviceNode, ! ACPI_PNP_DEVICE_ID **ReturnId) { ACPI_OPERAND_OBJECT *ObjDesc; ! ACPI_PNP_DEVICE_ID *Hid; UINT32 Length; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtExecute_HID);
*** 102,121 **** Length = ObjDesc->String.Length + 1; } /* Allocate a buffer for the HID */ ! Hid = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_DEVICE_ID) + (ACPI_SIZE) Length); if (!Hid) { Status = AE_NO_MEMORY; goto Cleanup; } ! /* Area for the string starts after DEVICE_ID struct */ ! Hid->String = ACPI_ADD_PTR (char, Hid, sizeof (ACPI_DEVICE_ID)); /* Convert EISAID to a string or simply copy existing string */ if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) { --- 102,121 ---- Length = ObjDesc->String.Length + 1; } /* Allocate a buffer for the HID */ ! Hid = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PNP_DEVICE_ID) + (ACPI_SIZE) Length); if (!Hid) { Status = AE_NO_MEMORY; goto Cleanup; } ! /* Area for the string starts after PNP_DEVICE_ID struct */ ! Hid->String = ACPI_ADD_PTR (char, Hid, sizeof (ACPI_PNP_DEVICE_ID)); /* Convert EISAID to a string or simply copy existing string */ if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) {
*** 139,148 **** --- 139,219 ---- } /******************************************************************************* * + * FUNCTION: AcpiUtExecute_SUB + * + * PARAMETERS: DeviceNode - Node for the device + * ReturnId - Where the _SUB is returned + * + * RETURN: Status + * + * DESCRIPTION: Executes the _SUB control method that returns the subsystem + * ID of the device. The _SUB value is always a string containing + * either a valid PNP or ACPI ID. + * + * NOTE: Internal function, no parameter validation + * + ******************************************************************************/ + + ACPI_STATUS + AcpiUtExecute_SUB ( + ACPI_NAMESPACE_NODE *DeviceNode, + ACPI_PNP_DEVICE_ID **ReturnId) + { + ACPI_OPERAND_OBJECT *ObjDesc; + ACPI_PNP_DEVICE_ID *Sub; + UINT32 Length; + ACPI_STATUS Status; + + + ACPI_FUNCTION_TRACE (UtExecute_SUB); + + + Status = AcpiUtEvaluateObject (DeviceNode, METHOD_NAME__SUB, + ACPI_BTYPE_STRING, &ObjDesc); + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS (Status); + } + + /* Get the size of the String to be returned, includes null terminator */ + + Length = ObjDesc->String.Length + 1; + + /* Allocate a buffer for the SUB */ + + Sub = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PNP_DEVICE_ID) + (ACPI_SIZE) Length); + if (!Sub) + { + Status = AE_NO_MEMORY; + goto Cleanup; + } + + /* Area for the string starts after PNP_DEVICE_ID struct */ + + Sub->String = ACPI_ADD_PTR (char, Sub, sizeof (ACPI_PNP_DEVICE_ID)); + + /* Simply copy existing string */ + + ACPI_STRCPY (Sub->String, ObjDesc->String.Pointer); + Sub->Length = Length; + *ReturnId = Sub; + + + Cleanup: + + /* On exit, we must delete the return object */ + + AcpiUtRemoveReference (ObjDesc); + return_ACPI_STATUS (Status); + } + + + /******************************************************************************* + * * FUNCTION: AcpiUtExecute_UID * * PARAMETERS: DeviceNode - Node for the device * ReturnId - Where the string UID is returned *
*** 158,171 **** ******************************************************************************/ ACPI_STATUS AcpiUtExecute_UID ( ACPI_NAMESPACE_NODE *DeviceNode, ! ACPI_DEVICE_ID **ReturnId) { ACPI_OPERAND_OBJECT *ObjDesc; ! ACPI_DEVICE_ID *Uid; UINT32 Length; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtExecute_UID); --- 229,242 ---- ******************************************************************************/ ACPI_STATUS AcpiUtExecute_UID ( ACPI_NAMESPACE_NODE *DeviceNode, ! ACPI_PNP_DEVICE_ID **ReturnId) { ACPI_OPERAND_OBJECT *ObjDesc; ! ACPI_PNP_DEVICE_ID *Uid; UINT32 Length; ACPI_STATUS Status; ACPI_FUNCTION_TRACE (UtExecute_UID);
*** 189,208 **** Length = ObjDesc->String.Length + 1; } /* Allocate a buffer for the UID */ ! Uid = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_DEVICE_ID) + (ACPI_SIZE) Length); if (!Uid) { Status = AE_NO_MEMORY; goto Cleanup; } ! /* Area for the string starts after DEVICE_ID struct */ ! Uid->String = ACPI_ADD_PTR (char, Uid, sizeof (ACPI_DEVICE_ID)); /* Convert an Integer to string, or just copy an existing string */ if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) { --- 260,279 ---- Length = ObjDesc->String.Length + 1; } /* Allocate a buffer for the UID */ ! Uid = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PNP_DEVICE_ID) + (ACPI_SIZE) Length); if (!Uid) { Status = AE_NO_MEMORY; goto Cleanup; } ! /* Area for the string starts after PNP_DEVICE_ID struct */ ! Uid->String = ACPI_ADD_PTR (char, Uid, sizeof (ACPI_PNP_DEVICE_ID)); /* Convert an Integer to string, or just copy an existing string */ if (ObjDesc->Common.Type == ACPI_TYPE_INTEGER) {
*** 250,264 **** ******************************************************************************/ ACPI_STATUS AcpiUtExecute_CID ( ACPI_NAMESPACE_NODE *DeviceNode, ! ACPI_DEVICE_ID_LIST **ReturnCidList) { ACPI_OPERAND_OBJECT **CidObjects; ACPI_OPERAND_OBJECT *ObjDesc; ! ACPI_DEVICE_ID_LIST *CidList; char *NextIdString; UINT32 StringAreaSize; UINT32 Length; UINT32 CidListSize; ACPI_STATUS Status; --- 321,335 ---- ******************************************************************************/ ACPI_STATUS AcpiUtExecute_CID ( ACPI_NAMESPACE_NODE *DeviceNode, ! ACPI_PNP_DEVICE_ID_LIST **ReturnCidList) { ACPI_OPERAND_OBJECT **CidObjects; ACPI_OPERAND_OBJECT *ObjDesc; ! ACPI_PNP_DEVICE_ID_LIST *CidList; char *NextIdString; UINT32 StringAreaSize; UINT32 Length; UINT32 CidListSize; ACPI_STATUS Status;
*** 302,345 **** /* String lengths include null terminator */ switch (CidObjects[i]->Common.Type) { case ACPI_TYPE_INTEGER: StringAreaSize += ACPI_EISAID_STRING_SIZE; break; case ACPI_TYPE_STRING: StringAreaSize += CidObjects[i]->String.Length + 1; break; default: Status = AE_TYPE; goto Cleanup; } } /* * Now that we know the length of the CIDs, allocate return buffer: * 1) Size of the base structure + ! * 2) Size of the CID DEVICE_ID array + * 3) Size of the actual CID strings */ ! CidListSize = sizeof (ACPI_DEVICE_ID_LIST) + ! ((Count - 1) * sizeof (ACPI_DEVICE_ID)) + StringAreaSize; CidList = ACPI_ALLOCATE_ZEROED (CidListSize); if (!CidList) { Status = AE_NO_MEMORY; goto Cleanup; } ! /* Area for CID strings starts after the CID DEVICE_ID array */ NextIdString = ACPI_CAST_PTR (char, CidList->Ids) + ! ((ACPI_SIZE) Count * sizeof (ACPI_DEVICE_ID)); /* Copy/convert the CIDs to the return buffer */ for (i = 0; i < Count; i++) { --- 373,419 ---- /* String lengths include null terminator */ switch (CidObjects[i]->Common.Type) { case ACPI_TYPE_INTEGER: + StringAreaSize += ACPI_EISAID_STRING_SIZE; break; case ACPI_TYPE_STRING: + StringAreaSize += CidObjects[i]->String.Length + 1; break; default: + Status = AE_TYPE; goto Cleanup; } } /* * Now that we know the length of the CIDs, allocate return buffer: * 1) Size of the base structure + ! * 2) Size of the CID PNP_DEVICE_ID array + * 3) Size of the actual CID strings */ ! CidListSize = sizeof (ACPI_PNP_DEVICE_ID_LIST) + ! ((Count - 1) * sizeof (ACPI_PNP_DEVICE_ID)) + StringAreaSize; CidList = ACPI_ALLOCATE_ZEROED (CidListSize); if (!CidList) { Status = AE_NO_MEMORY; goto Cleanup; } ! /* Area for CID strings starts after the CID PNP_DEVICE_ID array */ NextIdString = ACPI_CAST_PTR (char, CidList->Ids) + ! ((ACPI_SIZE) Count * sizeof (ACPI_PNP_DEVICE_ID)); /* Copy/convert the CIDs to the return buffer */ for (i = 0; i < Count; i++) {
*** 375,380 **** /* On exit, we must delete the _CID return object */ AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } - --- 449,453 ----