static ACPI_STATUS AcpiDbClassifyOneObject ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue) { ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *ObjDesc; UINT32 Type; AcpiGbl_NumNodes++; Node = (ACPI_NAMESPACE_NODE *) ObjHandle; ObjDesc = AcpiNsGetAttachedObject (Node); AcpiDbEnumerateObject (ObjDesc); Type = Node->Type; if (Type > ACPI_TYPE_NS_NODE_MAX) { AcpiGbl_NodeTypeCountMisc++; } else { AcpiGbl_NodeTypeCount [Type]++; } return AE_OK; #ifdef ACPI_FUTURE_IMPLEMENTATION /* TBD: These need to be counted during the initial parsing phase */ if (AcpiPsIsNamedOp (Op->Opcode)) { NumNodes++; } if (IsMethod) { NumMethodElements++; } NumGrammarElements++; Op = AcpiPsGetDepthNext (Root, Op); SizeOfParseTree = (NumGrammarElements - NumMethodElements) * (UINT32) sizeof (ACPI_PARSE_OBJECT); SizeOfMethodTrees = NumMethodElements * (UINT32) sizeof (ACPI_PARSE_OBJECT); SizeOfNodeEntries = NumNodes * (UINT32) sizeof (ACPI_NAMESPACE_NODE); SizeOfAcpiObjects = NumNodes * (UINT32) sizeof (ACPI_OPERAND_OBJECT); #endif }
static void AcpiDbEnumerateObject ( ACPI_OPERAND_OBJECT *ObjDesc) { UINT32 i; if (!ObjDesc) { return; } /* Enumerate this object first */ AcpiGbl_NumObjects++; if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX) { AcpiGbl_ObjTypeCountMisc++; } else { AcpiGbl_ObjTypeCount [ObjDesc->Common.Type]++; } /* Count the sub-objects */ switch (ObjDesc->Common.Type) { case ACPI_TYPE_PACKAGE: for (i = 0; i < ObjDesc->Package.Count; i++) { AcpiDbEnumerateObject (ObjDesc->Package.Elements[i]); } break; case ACPI_TYPE_DEVICE: AcpiDbEnumerateObject (ObjDesc->Device.SystemNotify); AcpiDbEnumerateObject (ObjDesc->Device.DeviceNotify); AcpiDbEnumerateObject (ObjDesc->Device.Handler); break; case ACPI_TYPE_BUFFER_FIELD: if (AcpiNsGetSecondaryObject (ObjDesc)) { AcpiGbl_ObjTypeCount [ACPI_TYPE_BUFFER_FIELD]++; } break; case ACPI_TYPE_REGION: AcpiGbl_ObjTypeCount [ACPI_TYPE_LOCAL_REGION_FIELD ]++; AcpiDbEnumerateObject (ObjDesc->Region.Handler); break; case ACPI_TYPE_POWER: AcpiDbEnumerateObject (ObjDesc->PowerResource.SystemNotify); AcpiDbEnumerateObject (ObjDesc->PowerResource.DeviceNotify); break; case ACPI_TYPE_PROCESSOR: AcpiDbEnumerateObject (ObjDesc->Processor.SystemNotify); AcpiDbEnumerateObject (ObjDesc->Processor.DeviceNotify); AcpiDbEnumerateObject (ObjDesc->Processor.Handler); break; case ACPI_TYPE_THERMAL: AcpiDbEnumerateObject (ObjDesc->ThermalZone.SystemNotify); AcpiDbEnumerateObject (ObjDesc->ThermalZone.DeviceNotify); AcpiDbEnumerateObject (ObjDesc->ThermalZone.Handler); break; default: break; } }
static void AcpiDbEnumerateObject ( ACPI_OPERAND_OBJECT *ObjDesc) { UINT32 Type; UINT32 i; if (!ObjDesc) { return; } /* Enumerate this object first */ AcpiGbl_NumObjects++; Type = ObjDesc->Common.Type; if (Type > INTERNAL_TYPE_NODE_MAX) { AcpiGbl_ObjTypeCountMisc++; } else { AcpiGbl_ObjTypeCount [Type]++; } /* Count the sub-objects */ switch (Type) { case ACPI_TYPE_PACKAGE: for (i = 0; i< ObjDesc->Package.Count; i++) { AcpiDbEnumerateObject (ObjDesc->Package.Elements[i]); } break; case ACPI_TYPE_DEVICE: AcpiDbEnumerateObject (ObjDesc->Device.SysHandler); AcpiDbEnumerateObject (ObjDesc->Device.DrvHandler); AcpiDbEnumerateObject (ObjDesc->Device.AddrHandler); break; case ACPI_TYPE_REGION: AcpiDbEnumerateObject (ObjDesc->Region.AddrHandler); break; case ACPI_TYPE_POWER: AcpiDbEnumerateObject (ObjDesc->PowerResource.SysHandler); AcpiDbEnumerateObject (ObjDesc->PowerResource.DrvHandler); break; case ACPI_TYPE_PROCESSOR: AcpiDbEnumerateObject (ObjDesc->Processor.SysHandler); AcpiDbEnumerateObject (ObjDesc->Processor.DrvHandler); AcpiDbEnumerateObject (ObjDesc->Processor.AddrHandler); break; case ACPI_TYPE_THERMAL: AcpiDbEnumerateObject (ObjDesc->ThermalZone.SysHandler); AcpiDbEnumerateObject (ObjDesc->ThermalZone.DrvHandler); AcpiDbEnumerateObject (ObjDesc->ThermalZone.AddrHandler); break; } }