本网站可以出售:只需60000元直接拥有。QQ:939804642
您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ ACPI_GET_DESCRIPTOR_TYPE函数代码示例

51自学网 2021-06-01 19:32:42
  C++
这篇教程C++ ACPI_GET_DESCRIPTOR_TYPE函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中ACPI_GET_DESCRIPTOR_TYPE函数的典型用法代码示例。如果您正苦于以下问题:C++ ACPI_GET_DESCRIPTOR_TYPE函数的具体用法?C++ ACPI_GET_DESCRIPTOR_TYPE怎么用?C++ ACPI_GET_DESCRIPTOR_TYPE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了ACPI_GET_DESCRIPTOR_TYPE函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: AcpiDsInitBufferField

static ACPI_STATUSAcpiDsInitBufferField (    UINT16                  AmlOpcode,    ACPI_OPERAND_OBJECT     *ObjDesc,    ACPI_OPERAND_OBJECT     *BufferDesc,    ACPI_OPERAND_OBJECT     *OffsetDesc,    ACPI_OPERAND_OBJECT     *LengthDesc,    ACPI_OPERAND_OBJECT     *ResultDesc){    UINT32                  Offset;    UINT32                  BitOffset;    UINT32                  BitCount;    UINT8                   FieldFlags;    ACPI_STATUS             Status;    ACPI_FUNCTION_TRACE_PTR (DsInitBufferField, ObjDesc);    /* Host object must be a Buffer */    if (BufferDesc->Common.Type != ACPI_TYPE_BUFFER)    {        ACPI_ERROR ((AE_INFO,            "Target of Create Field is not a Buffer object - %s",            AcpiUtGetObjectTypeName (BufferDesc)));        Status = AE_AML_OPERAND_TYPE;        goto Cleanup;    }    /*     * The last parameter to all of these opcodes (ResultDesc) started     * out as a NameString, and should therefore now be a NS node     * after resolution in AcpiExResolveOperands().     */    if (ACPI_GET_DESCRIPTOR_TYPE (ResultDesc) != ACPI_DESC_TYPE_NAMED)    {        ACPI_ERROR ((AE_INFO,            "(%s) destination not a NS Node [%s]",            AcpiPsGetOpcodeName (AmlOpcode),            AcpiUtGetDescriptorName (ResultDesc)));        Status = AE_AML_OPERAND_TYPE;        goto Cleanup;    }    Offset = (UINT32) OffsetDesc->Integer.Value;    /*     * Setup the Bit offsets and counts, according to the opcode     */    switch (AmlOpcode)    {    case AML_CREATE_FIELD_OP:        /* Offset is in bits, count is in bits */        FieldFlags = AML_FIELD_ACCESS_BYTE;        BitOffset  = Offset;        BitCount   = (UINT32) LengthDesc->Integer.Value;        /* Must have a valid (>0) bit count */        if (BitCount == 0)        {            ACPI_ERROR ((AE_INFO,                "Attempt to CreateField of length zero"));            Status = AE_AML_OPERAND_VALUE;            goto Cleanup;        }        break;    case AML_CREATE_BIT_FIELD_OP:        /* Offset is in bits, Field is one bit */        BitOffset  = Offset;        BitCount   = 1;        FieldFlags = AML_FIELD_ACCESS_BYTE;        break;    case AML_CREATE_BYTE_FIELD_OP:        /* Offset is in bytes, field is one byte */        BitOffset  = 8 * Offset;        BitCount   = 8;        FieldFlags = AML_FIELD_ACCESS_BYTE;        break;    case AML_CREATE_WORD_FIELD_OP:        /* Offset is in bytes, field is one word */        BitOffset  = 8 * Offset;        BitCount   = 16;        FieldFlags = AML_FIELD_ACCESS_WORD;        break;//.........这里部分代码省略.........
开发者ID:malattia,项目名称:acpica-tools,代码行数:101,


示例2: AcpiExOpcode_1A_0T_1R

ACPI_STATUSAcpiExOpcode_1A_0T_1R (    ACPI_WALK_STATE         *WalkState){    ACPI_OPERAND_OBJECT     **Operand = &WalkState->Operands[0];    ACPI_OPERAND_OBJECT     *TempDesc;    ACPI_OPERAND_OBJECT     *ReturnDesc = NULL;    ACPI_STATUS             Status = AE_OK;    UINT32                  Type;    ACPI_INTEGER            Value;    ACPI_FUNCTION_TRACE_STR (ExOpcode_1A_0T_1R,        AcpiPsGetOpcodeName (WalkState->Opcode));    /* Examine the AML opcode */    switch (WalkState->Opcode)    {    case AML_LNOT_OP:               /* LNot (Operand) */        ReturnDesc = AcpiUtCreateIntegerObject ((UINT64) 0);        if (!ReturnDesc)        {            Status = AE_NO_MEMORY;            goto Cleanup;        }        /*         * Set result to ONES (TRUE) if Value == 0.  Note:         * ReturnDesc->Integer.Value is initially == 0 (FALSE) from above.         */        if (!Operand[0]->Integer.Value)        {            ReturnDesc->Integer.Value = ACPI_INTEGER_MAX;        }        break;    case AML_DECREMENT_OP:          /* Decrement (Operand)  */    case AML_INCREMENT_OP:          /* Increment (Operand)  */        /*         * Create a new integer.  Can't just get the base integer and         * increment it because it may be an Arg or Field.         */        ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);        if (!ReturnDesc)        {            Status = AE_NO_MEMORY;            goto Cleanup;        }        /*         * Since we are expecting a Reference operand, it can be either a         * NS Node or an internal object.         */        TempDesc = Operand[0];        if (ACPI_GET_DESCRIPTOR_TYPE (TempDesc) == ACPI_DESC_TYPE_OPERAND)        {            /* Internal reference object - prevent deletion */            AcpiUtAddReference (TempDesc);        }        /*         * Convert the Reference operand to an Integer (This removes a         * reference on the Operand[0] object)         *         * NOTE:  We use LNOT_OP here in order to force resolution of the         * reference operand to an actual integer.         */        Status = AcpiExResolveOperands (AML_LNOT_OP, &TempDesc, WalkState);        if (ACPI_FAILURE (Status))        {            ACPI_EXCEPTION ((AE_INFO, Status,                "While resolving operands for [%s]",                AcpiPsGetOpcodeName (WalkState->Opcode)));            goto Cleanup;        }        /*         * TempDesc is now guaranteed to be an Integer object --         * Perform the actual increment or decrement         */        if (WalkState->Opcode == AML_INCREMENT_OP)        {            ReturnDesc->Integer.Value = TempDesc->Integer.Value +1;        }        else        {            ReturnDesc->Integer.Value = TempDesc->Integer.Value -1;        }        /* Finished with this Integer object */        AcpiUtRemoveReference (TempDesc);//.........这里部分代码省略.........
开发者ID:ExpressOS,项目名称:third_party-l4re,代码行数:101,


示例3: AcpiUtUpdateObjectReference

ACPI_STATUSAcpiUtUpdateObjectReference (    ACPI_OPERAND_OBJECT     *Object,    UINT16                  Action){    ACPI_STATUS             Status = AE_OK;    ACPI_GENERIC_STATE      *StateList = NULL;    ACPI_OPERAND_OBJECT     *NextObject = NULL;    ACPI_GENERIC_STATE      *State;    UINT32                  i;    ACPI_FUNCTION_TRACE_PTR (UtUpdateObjectReference, Object);    while (Object)    {        /* Make sure that this isn't a namespace handle */        if (ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_NAMED)        {            ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,                "Object %p is NS handle/n", Object));            return_ACPI_STATUS (AE_OK);        }        /*         * All sub-objects must have their reference count incremented also.         * Different object types have different subobjects.         */        switch (Object->Common.Type)        {        case ACPI_TYPE_DEVICE:        case ACPI_TYPE_PROCESSOR:        case ACPI_TYPE_POWER:        case ACPI_TYPE_THERMAL:            /* Update the notify objects for these types (if present) */            AcpiUtUpdateRefCount (Object->CommonNotify.SystemNotify, Action);            AcpiUtUpdateRefCount (Object->CommonNotify.DeviceNotify, Action);            break;        case ACPI_TYPE_PACKAGE:            /*             * We must update all the sub-objects of the package,             * each of whom may have their own sub-objects.             */            for (i = 0; i < Object->Package.Count; i++)            {                /*                 * Push each element onto the stack for later processing.                 * Note: There can be null elements within the package,                 * these are simply ignored                 */                Status = AcpiUtCreateUpdateStateAndPush (                            Object->Package.Elements[i], Action, &StateList);                if (ACPI_FAILURE (Status))                {                    goto ErrorExit;                }            }            break;        case ACPI_TYPE_BUFFER_FIELD:            NextObject = Object->BufferField.BufferObj;            break;        case ACPI_TYPE_LOCAL_REGION_FIELD:            NextObject = Object->Field.RegionObj;            break;        case ACPI_TYPE_LOCAL_BANK_FIELD:            NextObject = Object->BankField.BankObj;            Status = AcpiUtCreateUpdateStateAndPush (                        Object->BankField.RegionObj, Action, &StateList);            if (ACPI_FAILURE (Status))            {                goto ErrorExit;            }            break;        case ACPI_TYPE_LOCAL_INDEX_FIELD:            NextObject = Object->IndexField.IndexObj;            Status = AcpiUtCreateUpdateStateAndPush (                        Object->IndexField.DataObj, Action, &StateList);            if (ACPI_FAILURE (Status))            {                goto ErrorExit;            }            break;        case ACPI_TYPE_LOCAL_REFERENCE:            /*             * The target of an Index (a package, string, or buffer) or a named             * reference must track changes to the ref count of the index or//.........这里部分代码省略.........
开发者ID:DangerDexter,项目名称:FreeBSD-8.0-dyntick,代码行数:101,


示例4: AcpiNsCheckObjectType

ACPI_STATUSAcpiNsCheckObjectType (    ACPI_EVALUATE_INFO          *Info,    ACPI_OPERAND_OBJECT         **ReturnObjectPtr,    UINT32                      ExpectedBtypes,    UINT32                      PackageIndex){    ACPI_OPERAND_OBJECT         *ReturnObject = *ReturnObjectPtr;    ACPI_STATUS                 Status = AE_OK;    char                        TypeBuffer[96]; /* Room for 10 types */    /* A Namespace node should not get here, but make sure */    if (ReturnObject &&        ACPI_GET_DESCRIPTOR_TYPE (ReturnObject) == ACPI_DESC_TYPE_NAMED)    {        ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,            "Invalid return type - Found a Namespace node [%4.4s] type %s",            ReturnObject->Node.Name.Ascii,            AcpiUtGetTypeName (ReturnObject->Node.Type)));        return (AE_AML_OPERAND_TYPE);    }    /*     * Convert the object type (ACPI_TYPE_xxx) to a bitmapped object type.     * The bitmapped type allows multiple possible return types.     *     * Note, the cases below must handle all of the possible types returned     * from all of the predefined names (including elements of returned     * packages)     */    Info->ReturnBtype = AcpiNsGetBitmappedType (ReturnObject);    if (Info->ReturnBtype == ACPI_RTYPE_ANY)    {        /* Not one of the supported objects, must be incorrect */        goto TypeErrorExit;    }    /* For reference objects, check that the reference type is correct */    if ((Info->ReturnBtype & ExpectedBtypes) == ACPI_RTYPE_REFERENCE)    {        Status = AcpiNsCheckReference (Info, ReturnObject);        return (Status);    }    /* Attempt simple repair of the returned object if necessary */    Status = AcpiNsSimpleRepair (Info, ExpectedBtypes,        PackageIndex, ReturnObjectPtr);    if (ACPI_SUCCESS (Status))    {        return (AE_OK); /* Successful repair */    }TypeErrorExit:    /* Create a string with all expected types for this predefined object */    AcpiUtGetExpectedReturnTypes (TypeBuffer, ExpectedBtypes);    if (!ReturnObject)    {        ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,            "Expected return object of type %s",            TypeBuffer));    }    else if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT)    {        ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,            "Return type mismatch - found %s, expected %s",            AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer));    }    else    {        ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,            "Return Package type mismatch at index %u - "            "found %s, expected %s", PackageIndex,            AcpiUtGetObjectTypeName (ReturnObject), TypeBuffer));    }    return (AE_AML_OPERAND_TYPE);}
开发者ID:Strongc,项目名称:reactos,代码行数:85,


示例5: AcpiExResolveOperands

ACPI_STATUSAcpiExResolveOperands (    UINT16                  Opcode,    ACPI_OPERAND_OBJECT     **StackPtr,    ACPI_WALK_STATE         *WalkState){    ACPI_OPERAND_OBJECT     *ObjDesc;    ACPI_STATUS             Status = AE_OK;    UINT8                   ObjectType;    UINT32                  ArgTypes;    const ACPI_OPCODE_INFO  *OpInfo;    UINT32                  ThisArgType;    ACPI_OBJECT_TYPE        TypeNeeded;    UINT16                  TargetOp = 0;    ACPI_FUNCTION_TRACE_U32 (ExResolveOperands, Opcode);    OpInfo = AcpiPsGetOpcodeInfo (Opcode);    if (OpInfo->Class == AML_CLASS_UNKNOWN)    {        return_ACPI_STATUS (AE_AML_BAD_OPCODE);    }    ArgTypes = OpInfo->RuntimeArgs;    if (ArgTypes == ARGI_INVALID_OPCODE)    {        ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",            Opcode));        return_ACPI_STATUS (AE_AML_INTERNAL);    }    ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,        "Opcode %X [%s] RequiredOperandTypes=%8.8X/n",        Opcode, OpInfo->Name, ArgTypes));    /*     * Normal exit is with (ArgTypes == 0) at end of argument list.     * Function will return an exception from within the loop upon     * finding an entry which is not (or cannot be converted     * to) the required type; if stack underflows; or upon     * finding a NULL stack entry (which should not happen).     */    while (GET_CURRENT_ARG_TYPE (ArgTypes))    {        if (!StackPtr || !*StackPtr)        {            ACPI_ERROR ((AE_INFO, "Null stack entry at %p",                StackPtr));            return_ACPI_STATUS (AE_AML_INTERNAL);        }        /* Extract useful items */        ObjDesc = *StackPtr;        /* Decode the descriptor type */        switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))        {        case ACPI_DESC_TYPE_NAMED:            /* Namespace Node */            ObjectType = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type;            /*             * Resolve an alias object. The construction of these objects             * guarantees that there is only one level of alias indirection;             * thus, the attached object is always the aliased namespace node             */            if (ObjectType == ACPI_TYPE_LOCAL_ALIAS)            {                ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjDesc);                *StackPtr = ObjDesc;                ObjectType = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type;            }            break;        case ACPI_DESC_TYPE_OPERAND:            /* ACPI internal object */            ObjectType = ObjDesc->Common.Type;            /* Check for bad ACPI_OBJECT_TYPE */            if (!AcpiUtValidObjectType (ObjectType))            {                ACPI_ERROR ((AE_INFO,                    "Bad operand object type [0x%X]", ObjectType));                return_ACPI_STATUS (AE_AML_OPERAND_TYPE);            }            if (ObjectType == (UINT8) ACPI_TYPE_LOCAL_REFERENCE)//.........这里部分代码省略.........
开发者ID:ksashtekar,项目名称:Ganoid,代码行数:101,


示例6: AcpiUtCopySimpleObject

static ACPI_STATUSAcpiUtCopySimpleObject (    ACPI_OPERAND_OBJECT     *SourceDesc,    ACPI_OPERAND_OBJECT     *DestDesc){    UINT16                  ReferenceCount;    ACPI_OPERAND_OBJECT     *NextObject;    ACPI_STATUS             Status;    ACPI_SIZE               CopySize;    /* Save fields from destination that we don't want to overwrite */    ReferenceCount = DestDesc->Common.ReferenceCount;    NextObject = DestDesc->Common.NextObject;    /*     * Copy the entire source object over the destination object.     * Note: Source can be either an operand object or namespace node.     */    CopySize = sizeof (ACPI_OPERAND_OBJECT);    if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) == ACPI_DESC_TYPE_NAMED)    {        CopySize = sizeof (ACPI_NAMESPACE_NODE);    }    ACPI_MEMCPY (ACPI_CAST_PTR (char, DestDesc),        ACPI_CAST_PTR (char, SourceDesc), CopySize);    /* Restore the saved fields */    DestDesc->Common.ReferenceCount = ReferenceCount;    DestDesc->Common.NextObject = NextObject;    /* New object is not static, regardless of source */    DestDesc->Common.Flags &= ~AOPOBJ_STATIC_POINTER;    /* Handle the objects with extra data */    switch (DestDesc->Common.Type)    {    case ACPI_TYPE_BUFFER:        /*         * Allocate and copy the actual buffer if and only if:         * 1) There is a valid buffer pointer         * 2) The buffer has a length > 0         */        if ((SourceDesc->Buffer.Pointer) &&            (SourceDesc->Buffer.Length))        {            DestDesc->Buffer.Pointer =                ACPI_ALLOCATE (SourceDesc->Buffer.Length);            if (!DestDesc->Buffer.Pointer)            {                return (AE_NO_MEMORY);            }            /* Copy the actual buffer data */            ACPI_MEMCPY (DestDesc->Buffer.Pointer,                SourceDesc->Buffer.Pointer, SourceDesc->Buffer.Length);        }        break;    case ACPI_TYPE_STRING:        /*         * Allocate and copy the actual string if and only if:         * 1) There is a valid string pointer         * (Pointer to a NULL string is allowed)         */        if (SourceDesc->String.Pointer)        {            DestDesc->String.Pointer =                ACPI_ALLOCATE ((ACPI_SIZE) SourceDesc->String.Length + 1);            if (!DestDesc->String.Pointer)            {                return (AE_NO_MEMORY);            }            /* Copy the actual string data */            ACPI_MEMCPY (DestDesc->String.Pointer, SourceDesc->String.Pointer,                (ACPI_SIZE) SourceDesc->String.Length + 1);        }        break;    case ACPI_TYPE_LOCAL_REFERENCE:        /*         * We copied the reference object, so we now must add a reference         * to the object pointed to by the reference         *         * DDBHandle reference (from Load/LoadTable) is a special reference,         * it does not have a Reference.Object, so does not need to         * increase the reference count         */        if (SourceDesc->Reference.Class == ACPI_REFCLASS_TABLE)        {            break;        }//.........这里部分代码省略.........
开发者ID:BillTheBest,项目名称:libuinet,代码行数:101,


示例7: acpi_ex_dump_operand

static intacpi_ex_dump_operand(char * buf, int maxlen, union acpi_operand_object *obj_desc, u32 depth){	u32 length;    int str_len = 0;	ACPI_FUNCTION_NAME(ex_dump_operand)    if (maxlen <= 0) {        return maxlen;    }	if (!obj_desc) {		/* This could be a null element of a package */		ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Null Object Descriptor/n"));		return maxlen;	}	if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) == ACPI_DESC_TYPE_NAMED) {		ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%p Namespace Node: ",				  obj_desc));		ACPI_DUMP_ENTRY(obj_desc, ACPI_LV_EXEC);		return maxlen;	}	if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) != ACPI_DESC_TYPE_OPERAND) {		ACPI_DEBUG_PRINT((ACPI_DB_EXEC,				  "%p is not a node or operand object: [%s]/n",				  obj_desc,				  acpi_ut_get_descriptor_name(obj_desc)));		ACPI_DUMP_BUFFER(obj_desc, sizeof(union acpi_operand_object));		return maxlen;	}	/* obj_desc is a valid object */	if (depth > 0) {		ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%*s[%u] %p ",				  depth, " ", depth, obj_desc));	} else {		ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%p ", obj_desc));	}	/* Decode object type */	switch (obj_desc->common.type) {#if 0	case ACPI_TYPE_LOCAL_REFERENCE:		//str_len += snprintf(buf + str_len, maxlen - str_len, "Reference: [%s] ",        //                    acpi_ut_get_reference_name(obj_desc));		switch (obj_desc->reference.class) {		case ACPI_REFCLASS_DEBUG:			str_len += snprintf(buf + str_len, maxlen - str_len, "/n");			break;		case ACPI_REFCLASS_INDEX:			str_len += snprintf(buf + str_len, maxlen - str_len, "%p/n", obj_desc->reference.object);			break;		case ACPI_REFCLASS_TABLE:			str_len += snprintf(buf + str_len, maxlen - str_len, "Table Index %X/n",                                obj_desc->reference.value);			break;		case ACPI_REFCLASS_REFOF:			//str_len += snprintf(buf + str_len, maxlen - str_len, "%p [%s]/n", obj_desc->reference.object,            //                     acpi_ut_get_type_name(((union            //                                 acpi_operand_object            //                                 *)            //                                obj_desc->            //                                reference.            //                                object)->common.            //                               type));			break;		case ACPI_REFCLASS_NAME:			str_len += snprintf(buf + str_len, maxlen - str_len, "- [%4.4s]/n",                               obj_desc->reference.node->name.ascii);			break;		case ACPI_REFCLASS_ARG:		case ACPI_REFCLASS_LOCAL:			str_len += snprintf(buf + str_len, maxlen - str_len, "%X/n", obj_desc->reference.value);			break;		default:	/* Unknown reference class */			str_len += snprintf(buf + str_len, maxlen - str_len, "%2.2X/n", obj_desc->reference.class);			break;		}//.........这里部分代码省略.........
开发者ID:hamo,项目名称:sys_prog,代码行数:101,


示例8: acpi_ds_exec_end_control_op

//.........这里部分代码省略.........			 * If value being returned is a Reference (such as			 * an arg or local), resolve it now because it may			 * cease to exist at the end of the method.			 */			status =			    acpi_ex_resolve_to_value(&walk_state->operands[0],						     walk_state);			if (ACPI_FAILURE(status)) {				return (status);			}			/*			 * Get the return value and save as the last result			 * value.  This is the only place where walk_state->return_desc			 * is set to anything other than zero!			 */			walk_state->return_desc = walk_state->operands[0];		} else if ((walk_state->results) &&			   (walk_state->results->results.num_results > 0)) {			/* Since we have a real Return(), delete any implicit return */			acpi_ds_clear_implicit_return(walk_state);			/*			 * The return value has come from a previous calculation.			 *			 * If value being returned is a Reference (such as			 * an arg or local), resolve it now because it may			 * cease to exist at the end of the method.			 *			 * Allow references created by the Index operator to return unchanged.			 */			if ((ACPI_GET_DESCRIPTOR_TYPE			     (walk_state->results->results.obj_desc[0]) ==			     ACPI_DESC_TYPE_OPERAND)			    &&			    (ACPI_GET_OBJECT_TYPE			     (walk_state->results->results.obj_desc[0]) ==			     ACPI_TYPE_LOCAL_REFERENCE)			    && ((walk_state->results->results.obj_desc[0])->				reference.opcode != AML_INDEX_OP)) {				status =				    acpi_ex_resolve_to_value(&walk_state->							     results->results.							     obj_desc[0],							     walk_state);				if (ACPI_FAILURE(status)) {					return (status);				}			}			walk_state->return_desc =			    walk_state->results->results.obj_desc[0];		} else {			/* No return operand */			if (walk_state->num_operands) {				acpi_ut_remove_reference(walk_state->							 operands[0]);			}			walk_state->operands[0] = NULL;			walk_state->num_operands = 0;			walk_state->return_desc = NULL;		}
开发者ID:laitianli,项目名称:kernel-analyze_linux-2.6.18,代码行数:67,


示例9: acpi_evaluate_object

//.........这里部分代码省略.........		status = AE_BAD_PARAMETER;	}	else {		/*		 * We get here if we have a handle -- and if we have a		 * pathname it is relative.  The handle will be validated		 * in the lower procedures		 */		if (!pathname) {			/*			 * The null pathname case means the handle is for			 * the actual object to be evaluated			 */			status = acpi_ns_evaluate_by_handle (&info);		}		else {		   /*			* Both a Handle and a relative Pathname			*/			status = acpi_ns_evaluate_relative (pathname, &info);		}	}	/*	 * If we are expecting a return value, and all went well above,	 * copy the return value to an external object.	 */	if (return_buffer) {		if (!info.return_object) {			return_buffer->length = 0;		}		else {			if (ACPI_GET_DESCRIPTOR_TYPE (info.return_object) == ACPI_DESC_TYPE_NAMED) {				/*				 * If we received a NS Node as a return object, this means that				 * the object we are evaluating has nothing interesting to				 * return (such as a mutex, etc.)  We return an error because				 * these types are essentially unsupported by this interface.				 * We don't check up front because this makes it easier to add				 * support for various types at a later date if necessary.				 */				status = AE_TYPE;				info.return_object = NULL;  /* No need to delete a NS Node */				return_buffer->length = 0;			}			if (ACPI_SUCCESS (status)) {				/*				 * Find out how large a buffer is needed				 * to contain the returned object				 */				status = acpi_ut_get_object_size (info.return_object,						   &buffer_space_needed);				if (ACPI_SUCCESS (status)) {					/* Validate/Allocate/Clear caller buffer */					status = acpi_ut_initialize_buffer (return_buffer, buffer_space_needed);					if (ACPI_FAILURE (status)) {						/*						 * Caller's buffer is too small or a new one can't be allocated						 */						ACPI_DEBUG_PRINT ((ACPI_DB_INFO,							"Needed buffer size %X, %s/n",							(u32) buffer_space_needed,							acpi_format_exception (status)));
开发者ID:BackupTheBerlios,项目名称:tuxap,代码行数:67,


示例10: AcpiEvaluateObject

//.........这里部分代码省略.........    default:        /* Warn if arguments passed to an object that is not a method */        if (Info->ParamCount)        {            ACPI_WARNING ((AE_INFO,                "%u arguments were passed to a non-method ACPI object",                Info->ParamCount));        }        break;    }#endif    /* Now we can evaluate the object */    Status = AcpiNsEvaluate (Info);    /*     * If we are expecting a return value, and all went well above,     * copy the return value to an external object.     */    if (ReturnBuffer)    {        if (!Info->ReturnObject)        {            ReturnBuffer->Length = 0;        }        else        {            if (ACPI_GET_DESCRIPTOR_TYPE (Info->ReturnObject) ==                ACPI_DESC_TYPE_NAMED)            {                /*                 * If we received a NS Node as a return object, this means that                 * the object we are evaluating has nothing interesting to                 * return (such as a mutex, etc.)  We return an error because                 * these types are essentially unsupported by this interface.                 * We don't check up front because this makes it easier to add                 * support for various types at a later date if necessary.                 */                Status = AE_TYPE;                Info->ReturnObject = NULL;   /* No need to delete a NS Node */                ReturnBuffer->Length = 0;            }            if (ACPI_SUCCESS (Status))            {                /* Dereference Index and RefOf references */                AcpiNsResolveReferences (Info);                /* Get the size of the returned object */                Status = AcpiUtGetObjectSize (Info->ReturnObject,                            &BufferSpaceNeeded);                if (ACPI_SUCCESS (Status))                {                    /* Validate/Allocate/Clear caller buffer */                    Status = AcpiUtInitializeBuffer (ReturnBuffer,                                BufferSpaceNeeded);                    if (ACPI_FAILURE (Status))
开发者ID:victoredwardocallaghan,项目名称:DragonFlyBSD,代码行数:67,


示例11: acpi_ds_init_buffer_field

static acpi_statusacpi_ds_init_buffer_field(u16 aml_opcode,			  union acpi_operand_object *obj_desc,			  union acpi_operand_object *buffer_desc,			  union acpi_operand_object *offset_desc,			  union acpi_operand_object *length_desc,			  union acpi_operand_object *result_desc){	u32 offset;	u32 bit_offset;	u32 bit_count;	u8 field_flags;	acpi_status status;	ACPI_FUNCTION_TRACE_PTR(ds_init_buffer_field, obj_desc);	/* Host object must be a Buffer */	if (ACPI_GET_OBJECT_TYPE(buffer_desc) != ACPI_TYPE_BUFFER) {		ACPI_ERROR((AE_INFO,			    "Target of Create Field is not a Buffer object - %s",			    acpi_ut_get_object_type_name(buffer_desc)));		status = AE_AML_OPERAND_TYPE;		goto cleanup;	}	/*	 * The last parameter to all of these opcodes (result_desc) started	 * out as a name_string, and should therefore now be a NS node	 * after resolution in acpi_ex_resolve_operands().	 */	if (ACPI_GET_DESCRIPTOR_TYPE(result_desc) != ACPI_DESC_TYPE_NAMED) {		ACPI_ERROR((AE_INFO,			    "(%s) destination not a NS Node [%s]",			    acpi_ps_get_opcode_name(aml_opcode),			    acpi_ut_get_descriptor_name(result_desc)));		status = AE_AML_OPERAND_TYPE;		goto cleanup;	}	offset = (u32) offset_desc->integer.value;	/*	 * Setup the Bit offsets and counts, according to the opcode	 */	switch (aml_opcode) {	case AML_CREATE_FIELD_OP:		/* Offset is in bits, count is in bits */		field_flags = AML_FIELD_ACCESS_BYTE;		bit_offset = offset;		bit_count = (u32) length_desc->integer.value;		/* Must have a valid (>0) bit count */		if (bit_count == 0) {			ACPI_ERROR((AE_INFO,				    "Attempt to CreateField of length zero"));			status = AE_AML_OPERAND_VALUE;			goto cleanup;		}		break;	case AML_CREATE_BIT_FIELD_OP:		/* Offset is in bits, Field is one bit */		bit_offset = offset;		bit_count = 1;		field_flags = AML_FIELD_ACCESS_BYTE;		break;	case AML_CREATE_BYTE_FIELD_OP:		/* Offset is in bytes, field is one byte */		bit_offset = 8 * offset;		bit_count = 8;		field_flags = AML_FIELD_ACCESS_BYTE;		break;	case AML_CREATE_WORD_FIELD_OP:		/* Offset is in bytes, field is one word */		bit_offset = 8 * offset;		bit_count = 16;		field_flags = AML_FIELD_ACCESS_WORD;		break;	case AML_CREATE_DWORD_FIELD_OP:		/* Offset is in bytes, field is one dword */		bit_offset = 8 * offset;		bit_count = 32;		field_flags = AML_FIELD_ACCESS_DWORD;//.........这里部分代码省略.........
开发者ID:laitianli,项目名称:kernel-analyze_linux-2.6.18,代码行数:101,


示例12: acpi_ex_dump_operand

voidacpi_ex_dump_operand (	union acpi_operand_object       *obj_desc,	u32                             depth){	u32                             length;	u32                             index;	ACPI_FUNCTION_NAME ("ex_dump_operand")	if (!((ACPI_LV_EXEC & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer))) {		return;	}	if (!obj_desc) {		/*		 * This could be a null element of a package		 */		ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor/n"));		return;	}	if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) {		ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p is a NS Node: ", obj_desc));		ACPI_DUMP_ENTRY (obj_desc, ACPI_LV_EXEC);		return;	}	if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) {		ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,			"%p is not a node or operand object: [%s]/n",			obj_desc, acpi_ut_get_descriptor_name (obj_desc)));		ACPI_DUMP_BUFFER (obj_desc, sizeof (union acpi_operand_object));		return;	}	/* obj_desc is a valid object */	if (depth > 0) {		ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "%*s[%u] ", depth, " ", depth));	}	ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "%p ", obj_desc));	switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {	case ACPI_TYPE_LOCAL_REFERENCE:		switch (obj_desc->reference.opcode) {		case AML_DEBUG_OP:			acpi_os_printf ("Reference: Debug/n");			break;		case AML_NAME_OP:			ACPI_DUMP_PATHNAME (obj_desc->reference.object,				"Reference: Name: ", ACPI_LV_INFO, _COMPONENT);			ACPI_DUMP_ENTRY (obj_desc->reference.object, ACPI_LV_INFO);			break;		case AML_INDEX_OP:			acpi_os_printf ("Reference: Index %p/n",				obj_desc->reference.object);			break;		case AML_REF_OF_OP:			acpi_os_printf ("Reference: (ref_of) %p/n",				obj_desc->reference.object);			break;		case AML_ARG_OP:			acpi_os_printf ("Reference: Arg%d",				obj_desc->reference.offset);			if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {				/* Value is an Integer */				acpi_os_printf (" value is [%8.8X%8.8x]",					ACPI_FORMAT_UINT64 (obj_desc->integer.value));			}			acpi_os_printf ("/n");			break;		case AML_LOCAL_OP:			acpi_os_printf ("Reference: Local%d",				obj_desc->reference.offset);			if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {//.........这里部分代码省略.........
开发者ID:GodFox,项目名称:magx_kernel_xpixl,代码行数:101,


示例13: acpi_ex_dump_object_descriptor

voidacpi_ex_dump_object_descriptor (	union acpi_operand_object       *obj_desc,	u32                             flags){	u32                             i;	ACPI_FUNCTION_TRACE ("ex_dump_object_descriptor");	if (!flags) {		if (!((ACPI_LV_OBJECTS & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer))) {			return_VOID;		}	}	if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) {		acpi_ex_dump_node ((struct acpi_namespace_node *) obj_desc, flags);		acpi_os_printf ("/nAttached Object (%p):/n",			((struct acpi_namespace_node *) obj_desc)->object);		acpi_ex_dump_object_descriptor (			((struct acpi_namespace_node *) obj_desc)->object, flags);		return_VOID;	}	if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) {		acpi_os_printf (			"ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]/n",			obj_desc, acpi_ut_get_descriptor_name (obj_desc));		return_VOID;	}	/* Common Fields */	acpi_ex_out_string ("Type",             acpi_ut_get_object_type_name (obj_desc));	acpi_ex_out_integer ("Reference Count", obj_desc->common.reference_count);	acpi_ex_out_integer ("Flags",           obj_desc->common.flags);	/* Object-specific Fields */	switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {	case ACPI_TYPE_INTEGER:		acpi_os_printf ("%20s : %8.8X%8.8X/n", "Value",				ACPI_FORMAT_UINT64 (obj_desc->integer.value));		break;	case ACPI_TYPE_STRING:		acpi_ex_out_integer ("Length",      obj_desc->string.length);		acpi_os_printf ("%20s : %p ", "Pointer", obj_desc->string.pointer);		acpi_ut_print_string (obj_desc->string.pointer, ACPI_UINT8_MAX);		acpi_os_printf ("/n");		break;	case ACPI_TYPE_BUFFER:		acpi_ex_out_integer ("Length",      obj_desc->buffer.length);		acpi_ex_out_pointer ("Pointer",     obj_desc->buffer.pointer);		ACPI_DUMP_BUFFER (obj_desc->buffer.pointer, obj_desc->buffer.length);		break;	case ACPI_TYPE_PACKAGE:		acpi_ex_out_integer ("Flags",       obj_desc->package.flags);		acpi_ex_out_integer ("Count",       obj_desc->package.count);		acpi_ex_out_pointer ("Elements",    obj_desc->package.elements);		/* Dump the package contents */		if (obj_desc->package.count > 0) {			acpi_os_printf ("/nPackage Contents:/n");			for (i = 0; i < obj_desc->package.count; i++) {				acpi_os_printf ("[%.3d] %p", i, obj_desc->package.elements[i]);				if (obj_desc->package.elements[i]) {					acpi_os_printf (" %s",						acpi_ut_get_object_type_name (obj_desc->package.elements[i]));				}				acpi_os_printf ("/n");			}		}		break;	case ACPI_TYPE_DEVICE:		acpi_ex_out_pointer ("Handler",     obj_desc->device.handler);		acpi_ex_out_pointer ("system_notify", obj_desc->device.system_notify);		acpi_ex_out_pointer ("device_notify", obj_desc->device.device_notify);		break;	case ACPI_TYPE_EVENT:		acpi_ex_out_pointer ("Semaphore",   obj_desc->event.semaphore);//.........这里部分代码省略.........
开发者ID:GodFox,项目名称:magx_kernel_xpixl,代码行数:101,


示例14: acpi_ns_lookup

acpi_statusacpi_ns_lookup(union acpi_generic_state *scope_info,               char *pathname,               acpi_object_type type,               acpi_interpreter_mode interpreter_mode,               u32 flags,               struct acpi_walk_state *walk_state,               struct acpi_namespace_node **return_node){    acpi_status status;    char *path = pathname;    struct acpi_namespace_node *prefix_node;    struct acpi_namespace_node *current_node = NULL;    struct acpi_namespace_node *this_node = NULL;    u32 num_segments;    u32 num_carats;    acpi_name simple_name;    acpi_object_type type_to_check_for;    acpi_object_type this_search_type;    u32 search_parent_flag = ACPI_NS_SEARCH_PARENT;    u32 local_flags;    ACPI_FUNCTION_TRACE(ns_lookup);    if (!return_node) {        return_ACPI_STATUS(AE_BAD_PARAMETER);    }    local_flags = flags & ~(ACPI_NS_ERROR_IF_FOUND | ACPI_NS_SEARCH_PARENT);    *return_node = ACPI_ENTRY_NOT_FOUND;    acpi_gbl_ns_lookup_count++;    if (!acpi_gbl_root_node) {        return_ACPI_STATUS(AE_NO_NAMESPACE);    }    /* Get the prefix scope. A null scope means use the root scope */    if ((!scope_info) || (!scope_info->scope.node)) {        ACPI_DEBUG_PRINT((ACPI_DB_NAMES,                          "Null scope prefix, using root node (%p)/n",                          acpi_gbl_root_node));        prefix_node = acpi_gbl_root_node;    } else {        prefix_node = scope_info->scope.node;        if (ACPI_GET_DESCRIPTOR_TYPE(prefix_node) !=                ACPI_DESC_TYPE_NAMED) {            ACPI_ERROR((AE_INFO, "%p is not a namespace node [%s]",                        prefix_node,                        acpi_ut_get_descriptor_name(prefix_node)));            return_ACPI_STATUS(AE_AML_INTERNAL);        }        if (!(flags & ACPI_NS_PREFIX_IS_SCOPE)) {            /*             * This node might not be a actual "scope" node (such as a             * Device/Method, etc.)  It could be a Package or other object             * node. Backup up the tree to find the containing scope node.             */            while (!acpi_ns_opens_scope(prefix_node->type) &&                    prefix_node->type != ACPI_TYPE_ANY) {                prefix_node = prefix_node->parent;            }        }    }    /* Save type. TBD: may be no longer necessary */    type_to_check_for = type;    /*     * Begin examination of the actual pathname     */    if (!pathname) {        /* A Null name_path is allowed and refers to the root */        num_segments = 0;        this_node = acpi_gbl_root_node;        path = "";        ACPI_DEBUG_PRINT((ACPI_DB_NAMES,                          "Null Pathname (Zero segments), Flags=%X/n",                          flags));    } else {        /*         * Name pointer is valid (and must be in internal name format)         *         * Check for scope prefixes:         *         * As represented in the AML stream, a namepath consists of an         * optional scope prefix followed by a name segment part.         *         * If present, the scope prefix is either a Root Prefix (in         * which case the name is fully qualified), or one or more         * Parent Prefixes (in which case the name's scope is relative         * to the current scope).         */        if (*path == (u8) AML_ROOT_PREFIX) {//.........这里部分代码省略.........
开发者ID:snake1361222,项目名称:LVS,代码行数:101,


示例15: AcpiUtGetSimpleObjectSize

static ACPI_STATUSAcpiUtGetSimpleObjectSize (    ACPI_OPERAND_OBJECT     *InternalObject,    ACPI_SIZE               *ObjLength){    ACPI_SIZE               Length;    ACPI_SIZE               Size;    ACPI_STATUS             Status = AE_OK;    ACPI_FUNCTION_TRACE_PTR (UtGetSimpleObjectSize, InternalObject);    /* Start with the length of the (external) Acpi object */    Length = sizeof (ACPI_OBJECT);    /* A NULL object is allowed, can be a legal uninitialized package element */    if (!InternalObject)    {        /*         * Object is NULL, just return the length of ACPI_OBJECT         * (A NULL ACPI_OBJECT is an object of all zeroes.)         */        *ObjLength = ACPI_ROUND_UP_TO_NATIVE_WORD (Length);        return_ACPI_STATUS (AE_OK);    }    /* A Namespace Node should never appear here */    if (ACPI_GET_DESCRIPTOR_TYPE (InternalObject) == ACPI_DESC_TYPE_NAMED)    {        /* A namespace node should never get here */        return_ACPI_STATUS (AE_AML_INTERNAL);    }    /*     * The final length depends on the object type     * Strings and Buffers are packed right up against the parent object and     * must be accessed bytewise or there may be alignment problems on     * certain processors     */    switch (InternalObject->Common.Type)    {    case ACPI_TYPE_STRING:        Length += (ACPI_SIZE) InternalObject->String.Length + 1;        break;    case ACPI_TYPE_BUFFER:        Length += (ACPI_SIZE) InternalObject->Buffer.Length;        break;    case ACPI_TYPE_INTEGER:    case ACPI_TYPE_PROCESSOR:    case ACPI_TYPE_POWER:        /* No extra data for these types */        break;    case ACPI_TYPE_LOCAL_REFERENCE:        switch (InternalObject->Reference.Class)        {        case ACPI_REFCLASS_NAME:            /*             * Get the actual length of the full pathname to this object.             * The reference will be converted to the pathname to the object             */            Size = AcpiNsGetPathnameLength (InternalObject->Reference.Node);            if (!Size)            {                return_ACPI_STATUS (AE_BAD_PARAMETER);            }            Length += ACPI_ROUND_UP_TO_NATIVE_WORD (Size);            break;        default:            /*             * No other reference opcodes are supported.             * Notably, Locals and Args are not supported, but this may be             * required eventually.             */            ACPI_ERROR ((AE_INFO, "Cannot convert to external object - "                "unsupported Reference Class [%s] 0x%X in object %p",                AcpiUtGetReferenceName (InternalObject),                InternalObject->Reference.Class, InternalObject));            Status = AE_TYPE;            break;        }        break;    default:        ACPI_ERROR ((AE_INFO, "Cannot convert to external object - "//.........这里部分代码省略.........
开发者ID:2asoft,项目名称:freebsd,代码行数:101,


示例16: AcpiNsDumpOneObject

//.........这里部分代码省略.........            AcpiOsPrintf ("/n");            break;        }        break;    default:        AcpiOsPrintf ("/n");        break;    }    /* If debug turned off, done */    if (!(AcpiDbgLevel & ACPI_LV_VALUES))    {        return (AE_OK);    }    /* If there is an attached object, display it */    DbgLevel = AcpiDbgLevel;    AcpiDbgLevel = 0;    ObjDesc = AcpiNsGetAttachedObject (ThisNode);    AcpiDbgLevel = DbgLevel;    /* Dump attached objects */    while (ObjDesc)    {        ObjType = ACPI_TYPE_INVALID;        AcpiOsPrintf ("Attached Object %p: ", ObjDesc);        /* Decode the type of attached object and dump the contents */        switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))        {        case ACPI_DESC_TYPE_NAMED:            AcpiOsPrintf ("(Ptr to Node)/n");            BytesToDump = sizeof (ACPI_NAMESPACE_NODE);            ACPI_DUMP_BUFFER (ObjDesc, BytesToDump);            break;        case ACPI_DESC_TYPE_OPERAND:            ObjType = ObjDesc->Common.Type;            if (ObjType > ACPI_TYPE_LOCAL_MAX)            {                AcpiOsPrintf (                    "(Pointer to ACPI Object type %.2X [UNKNOWN])/n",                    ObjType);                BytesToDump = 32;            }            else            {                AcpiOsPrintf (                    "(Pointer to ACPI Object type %.2X [%s])/n",                    ObjType, AcpiUtGetTypeName (ObjType));                BytesToDump = sizeof (ACPI_OPERAND_OBJECT);            }            ACPI_DUMP_BUFFER (ObjDesc, BytesToDump);            break;
开发者ID:ChaiSoft,项目名称:ChaiOS,代码行数:66,


示例17: acpi_ut_walk_package_tree

acpi_statusacpi_ut_walk_package_tree(union acpi_operand_object *source_object,			  void *target_object,			  acpi_pkg_callback walk_callback, void *context){	acpi_status status = AE_OK;	union acpi_generic_state *state_list = NULL;	union acpi_generic_state *state;	u32 this_index;	union acpi_operand_object *this_source_obj;	ACPI_FUNCTION_TRACE(ut_walk_package_tree);	state = acpi_ut_create_pkg_state(source_object, target_object, 0);	if (!state) {		return_ACPI_STATUS(AE_NO_MEMORY);	}	while (state) {		/* Get one element of the package */		this_index = state->pkg.index;		this_source_obj = (union acpi_operand_object *)		    state->pkg.source_object->package.elements[this_index];		/*		 * Check for:		 * 1) An uninitialized package element. It is completely		 *    legal to declare a package and leave it uninitialized		 * 2) Not an internal object - can be a namespace node instead		 * 3) Any type other than a package. Packages are handled in else		 *    case below.		 */		if ((!this_source_obj) ||		    (ACPI_GET_DESCRIPTOR_TYPE(this_source_obj) !=		     ACPI_DESC_TYPE_OPERAND) ||		    (this_source_obj->common.type != ACPI_TYPE_PACKAGE)) {			status =			    walk_callback(ACPI_COPY_TYPE_SIMPLE,					  this_source_obj, state, context);			if (ACPI_FAILURE(status)) {				return_ACPI_STATUS(status);			}			state->pkg.index++;			while (state->pkg.index >=			       state->pkg.source_object->package.count) {				/*				 * We've handled all of the objects at this level,  This means				 * that we have just completed a package. That package may				 * have contained one or more packages itself.				 *				 * Delete this state and pop the previous state (package).				 */				acpi_ut_delete_generic_state(state);				state = acpi_ut_pop_generic_state(&state_list);				/* Finished when there are no more states */				if (!state) {					/*					 * We have handled all of the objects in the top level					 * package just add the length of the package objects					 * and exit					 */					return_ACPI_STATUS(AE_OK);				}				/*				 * Go back up a level and move the index past the just				 * completed package object.				 */				state->pkg.index++;			}		} else {			/* This is a subobject of type package */			status =			    walk_callback(ACPI_COPY_TYPE_PACKAGE,					  this_source_obj, state, context);			if (ACPI_FAILURE(status)) {				return_ACPI_STATUS(status);			}			/*			 * Push the current state and create a new one			 * The callback above returned a new target package object.			 */			acpi_ut_push_generic_state(&state_list, state);			state =			    acpi_ut_create_pkg_state(this_source_obj,						     state->pkg.this_target_obj,						     0);			if (!state) {				/* Free any stacked Update State objects */				while (state_list) {					state =//.........这里部分代码省略.........
开发者ID:a2hojsjsjs,项目名称:linux,代码行数:101,


示例18: AcpiExDoDebugObject

voidAcpiExDoDebugObject (    ACPI_OPERAND_OBJECT     *SourceDesc,    UINT32                  Level,    UINT32                  Index){    UINT32                  i;    ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc);    /* Output must be enabled via the DebugObject global or the DbgLevel */    if (!AcpiGbl_EnableAmlDebugObject &&        !(AcpiDbgLevel & ACPI_LV_DEBUG_OBJECT))    {        return_VOID;    }    /*     * Print line header as long as we are not in the middle of an     * object display     */    if (!((Level > 0) && Index == 0))    {        AcpiOsPrintf ("[ACPI Debug] %*s", Level, " ");    }    /* Display the index for package output only */    if (Index > 0)    {       AcpiOsPrintf ("(%.2u) ", Index-1);    }    if (!SourceDesc)    {        AcpiOsPrintf ("[Null Object]/n");        return_VOID;    }    if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) == ACPI_DESC_TYPE_OPERAND)    {        AcpiOsPrintf ("%s ", AcpiUtGetObjectTypeName (SourceDesc));        if (!AcpiUtValidInternalObject (SourceDesc))        {           AcpiOsPrintf ("%p, Invalid Internal Object!/n", SourceDesc);           return_VOID;        }    }    else if (ACPI_GET_DESCRIPTOR_TYPE (SourceDesc) == ACPI_DESC_TYPE_NAMED)    {        AcpiOsPrintf ("%s: %p/n",            AcpiUtGetTypeName (((ACPI_NAMESPACE_NODE *) SourceDesc)->Type),            SourceDesc);        return_VOID;    }    else    {        return_VOID;    }    /* SourceDesc is of type ACPI_DESC_TYPE_OPERAND */    switch (SourceDesc->Common.Type)    {    case ACPI_TYPE_INTEGER:        /* Output correct integer width */        if (AcpiGbl_IntegerByteWidth == 4)        {            AcpiOsPrintf ("0x%8.8X/n",                (UINT32) SourceDesc->Integer.Value);        }        else        {            AcpiOsPrintf ("0x%8.8X%8.8X/n",                ACPI_FORMAT_UINT64 (SourceDesc->Integer.Value));        }        break;    case ACPI_TYPE_BUFFER:        AcpiOsPrintf ("[0x%.2X]/n", (UINT32) SourceDesc->Buffer.Length);        AcpiUtDumpBuffer (SourceDesc->Buffer.Pointer,            (SourceDesc->Buffer.Length < 256) ?                SourceDesc->Buffer.Length : 256, DB_BYTE_DISPLAY, 0);        break;    case ACPI_TYPE_STRING:        AcpiOsPrintf ("[0x%.2X] /"%s/"/n",            SourceDesc->String.Length, SourceDesc->String.Pointer);        break;    case ACPI_TYPE_PACKAGE://.........这里部分代码省略.........
开发者ID:libkeiser,项目名称:illumos-nexenta,代码行数:101,


示例19: acpi_ns_attach_object

acpi_statusacpi_ns_attach_object (	struct acpi_namespace_node      *node,	union acpi_operand_object       *object,	acpi_object_type                type){	union acpi_operand_object       *obj_desc;	union acpi_operand_object       *last_obj_desc;	acpi_object_type                object_type = ACPI_TYPE_ANY;	ACPI_FUNCTION_TRACE ("ns_attach_object");	/*	 * Parameter validation	 */	if (!node) {		/* Invalid handle */		ACPI_REPORT_ERROR (("ns_attach_object: Null named_obj handle/n"));		return_ACPI_STATUS (AE_BAD_PARAMETER);	}	if (!object && (ACPI_TYPE_ANY != type)) {		/* Null object */		ACPI_REPORT_ERROR (("ns_attach_object: Null object, but type not ACPI_TYPE_ANY/n"));		return_ACPI_STATUS (AE_BAD_PARAMETER);	}	if (ACPI_GET_DESCRIPTOR_TYPE (node) != ACPI_DESC_TYPE_NAMED) {		/* Not a name handle */		ACPI_REPORT_ERROR (("ns_attach_object: Invalid handle %p [%s]/n",				node, acpi_ut_get_descriptor_name (node)));		return_ACPI_STATUS (AE_BAD_PARAMETER);	}	/* Check if this object is already attached */	if (node->object == object) {		ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj %p already installed in name_obj %p/n",			object, node));		return_ACPI_STATUS (AE_OK);	}	/* If null object, we will just install it */	if (!object) {		obj_desc   = NULL;		object_type = ACPI_TYPE_ANY;	}	/*	 * If the source object is a namespace Node with an attached object,	 * we will use that (attached) object	 */	else if ((ACPI_GET_DESCRIPTOR_TYPE (object) == ACPI_DESC_TYPE_NAMED) &&			((struct acpi_namespace_node *) object)->object) {		/*		 * Value passed is a name handle and that name has a		 * non-null value.  Use that name's value and type.		 */		obj_desc   = ((struct acpi_namespace_node *) object)->object;		object_type = ((struct acpi_namespace_node *) object)->type;	}	/*	 * Otherwise, we will use the parameter object, but we must type	 * it first	 */	else {		obj_desc = (union acpi_operand_object   *) object;		/* Use the given type */		object_type = type;	}	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Installing %p into Node %p [%4.4s]/n",		obj_desc, node, acpi_ut_get_node_name (node)));	/* Detach an existing attached object if present */	if (node->object) {		acpi_ns_detach_object (node);	}	if (obj_desc) {		/*		 * Must increment the new value's reference count		 * (if it is an internal object)		 */		acpi_ut_add_reference (obj_desc);		/*		 * Handle objects with multiple descriptors - walk		 * to the end of the descriptor list//.........这里部分代码省略.........
开发者ID:Antonio-Zhou,项目名称:Linux-2.6.11,代码行数:101,


示例20: AcpiNsCheckObjectType

static ACPI_STATUSAcpiNsCheckObjectType (    ACPI_PREDEFINED_DATA        *Data,    ACPI_OPERAND_OBJECT         **ReturnObjectPtr,    UINT32                      ExpectedBtypes,    UINT32                      PackageIndex){    ACPI_OPERAND_OBJECT         *ReturnObject = *ReturnObjectPtr;    ACPI_STATUS                 Status = AE_OK;    UINT32                      ReturnBtype;    char                        TypeBuffer[48]; /* Room for 5 types */    /*     * If we get a NULL ReturnObject here, it is a NULL package element,     * and this is always an error.     */    if (!ReturnObject)    {        goto TypeErrorExit;    }    /* A Namespace node should not get here, but make sure */    if (ACPI_GET_DESCRIPTOR_TYPE (ReturnObject) == ACPI_DESC_TYPE_NAMED)    {        ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,            "Invalid return type - Found a Namespace node [%4.4s] type %s",            ReturnObject->Node.Name.Ascii,            AcpiUtGetTypeName (ReturnObject->Node.Type)));        return (AE_AML_OPERAND_TYPE);    }    /*     * Convert the object type (ACPI_TYPE_xxx) to a bitmapped object type.     * The bitmapped type allows multiple possible return types.     *     * Note, the cases below must handle all of the possible types returned     * from all of the predefined names (including elements of returned     * packages)     */    switch (ReturnObject->Common.Type)    {    case ACPI_TYPE_INTEGER:        ReturnBtype = ACPI_RTYPE_INTEGER;        break;    case ACPI_TYPE_BUFFER:        ReturnBtype = ACPI_RTYPE_BUFFER;        break;    case ACPI_TYPE_STRING:        ReturnBtype = ACPI_RTYPE_STRING;        break;    case ACPI_TYPE_PACKAGE:        ReturnBtype = ACPI_RTYPE_PACKAGE;        break;    case ACPI_TYPE_LOCAL_REFERENCE:        ReturnBtype = ACPI_RTYPE_REFERENCE;        break;    default:        /* Not one of the supported objects, must be incorrect */        goto TypeErrorExit;    }    /* Is the object one of the expected types? */    if (!(ReturnBtype & ExpectedBtypes))    {        /* Type mismatch -- attempt repair of the returned object */        Status = AcpiNsRepairObject (Data, ExpectedBtypes,                    PackageIndex, ReturnObjectPtr);        if (ACPI_SUCCESS (Status))        {            return (AE_OK); /* Repair was successful */        }        goto TypeErrorExit;    }    /* For reference objects, check that the reference type is correct */    if (ReturnObject->Common.Type == ACPI_TYPE_LOCAL_REFERENCE)    {        Status = AcpiNsCheckReference (Data, ReturnObject);    }    return (Status);TypeErrorExit:    /* Create a string with all expected types for this predefined object */    AcpiNsGetExpectedTypes (TypeBuffer, ExpectedBtypes);//.........这里部分代码省略.........
开发者ID:CoryXie,项目名称:BarrelfishOS,代码行数:101,


示例21: NsDoOneNamespaceObject

static ACPI_STATUSNsDoOneNamespaceObject (    ACPI_HANDLE             ObjHandle,    UINT32                  Level,    void                    *Context,    void                    **ReturnValue){    ACPI_NAMESPACE_NODE     *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;    ACPI_OPERAND_OBJECT     *ObjDesc;    ACPI_PARSE_OBJECT       *Op;    AslGbl_NumNamespaceObjects++;    FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "%5u  [%u]  %*s %4.4s - %s",        AslGbl_NumNamespaceObjects, Level, (Level * 3), " ",        &Node->Name, AcpiUtGetTypeName (Node->Type));    Op = Node->Op;    ObjDesc = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node->Object);    if (!Op)    {        FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "/n");        return (AE_OK);    }    if ((ObjDesc) &&        (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND))    {        switch (Node->Type)        {        case ACPI_TYPE_INTEGER:            FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,                "       [Initial Value   0x%8.8X%8.8X]",                ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));            break;        case ACPI_TYPE_STRING:            FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,                "        [Initial Value   /"%s/"]",                ObjDesc->String.Pointer);            break;        default:            /* Nothing to do for other types */            break;        }    }    else    {        switch (Node->Type)        {        case ACPI_TYPE_INTEGER:            if (Op->Asl.ParseOpcode == PARSEOP_NAME)            {                Op = Op->Asl.Child;            }            if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG)  ||                (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING))            {                Op = Op->Asl.Next;            }            FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,                "       [Initial Value   0x%8.8X%8.8X]",                ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer));            break;        case ACPI_TYPE_STRING:            if (Op->Asl.ParseOpcode == PARSEOP_NAME)            {                Op = Op->Asl.Child;            }            if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG)  ||                (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING))            {                Op = Op->Asl.Next;            }            FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,                "        [Initial Value   /"%s/"]",                Op->Asl.Value.String);            break;        case ACPI_TYPE_LOCAL_REGION_FIELD:            if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG)  ||                (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING))            {//.........这里部分代码省略.........
开发者ID:ColinIanKing,项目名称:fwts,代码行数:101,


示例22: AcpiExUnloadTable

ACPI_STATUSAcpiExUnloadTable (    ACPI_OPERAND_OBJECT     *DdbHandle){    ACPI_STATUS             Status = AE_OK;    ACPI_OPERAND_OBJECT     *TableDesc = DdbHandle;    UINT32                  TableIndex;    ACPI_TABLE_HEADER       *Table;    ACPI_FUNCTION_TRACE (ExUnloadTable);    /*     * Temporarily emit a warning so that the ASL for the machine can be     * hopefully obtained. This is to say that the Unload() operator is     * extremely rare if not completely unused.     */    ACPI_WARNING ((AE_INFO,        "Received request to unload an ACPI table"));    /*     * Validate the handle     * Although the handle is partially validated in AcpiExReconfiguration()     * when it calls AcpiExResolveOperands(), the handle is more completely     * validated here.     *     * Handle must be a valid operand object of type reference. Also, the     * DdbHandle must still be marked valid (table has not been previously     * unloaded)     */    if ((!DdbHandle) ||        (ACPI_GET_DESCRIPTOR_TYPE (DdbHandle) != ACPI_DESC_TYPE_OPERAND) ||        (DdbHandle->Common.Type != ACPI_TYPE_LOCAL_REFERENCE) ||        (!(DdbHandle->Common.Flags & AOPOBJ_DATA_VALID)))    {        return_ACPI_STATUS (AE_AML_OPERAND_TYPE);    }    /* Get the table index from the DdbHandle */    TableIndex = TableDesc->Reference.Value;    /* Ensure the table is still loaded */    if (!AcpiTbIsTableLoaded (TableIndex))    {        return_ACPI_STATUS (AE_NOT_EXIST);    }    /* Invoke table handler if present */    if (AcpiGbl_TableHandler)    {        Status = AcpiGetTableByIndex (TableIndex, &Table);        if (ACPI_SUCCESS (Status))        {            (void) AcpiGbl_TableHandler (ACPI_TABLE_EVENT_UNLOAD, Table,                AcpiGbl_TableHandlerContext);        }    }    /* Delete the portion of the namespace owned by this table */    Status = AcpiTbDeleteNamespaceByOwner (TableIndex);    if (ACPI_FAILURE (Status))    {        return_ACPI_STATUS (Status);    }    (void) AcpiTbReleaseOwnerId (TableIndex);    AcpiTbSetTableLoadedFlag (TableIndex, FALSE);    /*     * Invalidate the handle. We do this because the handle may be stored     * in a named object and may not be actually deleted until much later.     */    DdbHandle->Common.Flags &= ~AOPOBJ_DATA_VALID;    return_ACPI_STATUS (AE_OK);}
开发者ID:Strongc,项目名称:reactos,代码行数:80,


示例23: acpi_evaluate_object

//.........这里部分代码省略.........				}			}			info->parameters[info->param_count] = NULL;		}		break;	default:		/* Warn if arguments passed to an object that is not a method */		if (info->param_count) {			ACPI_WARNING((AE_INFO,				      "%u arguments were passed to a non-method ACPI object",				      info->param_count));		}		break;	}#endif	/* Now we can evaluate the object */	status = acpi_ns_evaluate(info);	/*	 * If we are expecting a return value, and all went well above,	 * copy the return value to an external object.	 */	if (return_buffer) {		if (!info->return_object) {			return_buffer->length = 0;		} else {			if (ACPI_GET_DESCRIPTOR_TYPE(info->return_object) ==			    ACPI_DESC_TYPE_NAMED) {				/*				 * If we received a NS Node as a return object, this means that				 * the object we are evaluating has nothing interesting to				 * return (such as a mutex, etc.)  We return an error because				 * these types are essentially unsupported by this interface.				 * We don't check up front because this makes it easier to add				 * support for various types at a later date if necessary.				 */				status = AE_TYPE;				info->return_object = NULL;	/* No need to delete a NS Node */				return_buffer->length = 0;			}			if (ACPI_SUCCESS(status)) {				/* Dereference Index and ref_of references */				acpi_ns_resolve_references(info);				/* Get the size of the returned object */				status =				    acpi_ut_get_object_size(info->return_object,							    &buffer_space_needed);				if (ACPI_SUCCESS(status)) {					/* Validate/Allocate/Clear caller buffer */					status =					    acpi_ut_initialize_buffer					    (return_buffer,
开发者ID:03199618,项目名称:linux,代码行数:67,


示例24: AcpiExStore

ACPI_STATUSAcpiExStore (    ACPI_OPERAND_OBJECT     *SourceDesc,    ACPI_OPERAND_OBJECT     *DestDesc,    ACPI_WALK_STATE         *WalkState){    ACPI_STATUS             Status = AE_OK;    ACPI_OPERAND_OBJECT     *RefDesc = DestDesc;    ACPI_FUNCTION_TRACE_PTR (ExStore, DestDesc);    /* Validate parameters */    if (!SourceDesc || !DestDesc)    {        ACPI_ERROR ((AE_INFO, "Null parameter"));        return_ACPI_STATUS (AE_AML_NO_OPERAND);    }    /* DestDesc can be either a namespace node or an ACPI object */    if (ACPI_GET_DESCRIPTOR_TYPE (DestDesc) == ACPI_DESC_TYPE_NAMED)    {        /*         * Dest is a namespace node,         * Storing an object into a Named node.         */        Status = AcpiExStoreObjectToNode (SourceDesc,            (ACPI_NAMESPACE_NODE *) DestDesc, WalkState,            ACPI_IMPLICIT_CONVERSION);        return_ACPI_STATUS (Status);    }    /* Destination object must be a Reference or a Constant object */    switch (DestDesc->Common.Type)    {    case ACPI_TYPE_LOCAL_REFERENCE:        break;    case ACPI_TYPE_INTEGER:        /* Allow stores to Constants -- a Noop as per ACPI spec */        if (DestDesc->Common.Flags & AOPOBJ_AML_CONSTANT)        {            return_ACPI_STATUS (AE_OK);        }        /*lint -fallthrough */    default:        /* Destination is not a Reference object */        ACPI_ERROR ((AE_INFO,            "Target is not a Reference or Constant object - [%s] %p",            AcpiUtGetObjectTypeName (DestDesc), DestDesc));        return_ACPI_STATUS (AE_AML_OPERAND_TYPE);    }    /*     * Examine the Reference class. These cases are handled:     *     * 1) Store to Name (Change the object associated with a name)     * 2) Store to an indexed area of a Buffer or Package     * 3) Store to a Method Local or Arg     * 4) Store to the debug object     */    switch (RefDesc->Reference.Class)    {    case ACPI_REFCLASS_REFOF:        /* Storing an object into a Name "container" */        Status = AcpiExStoreObjectToNode (SourceDesc,            RefDesc->Reference.Object,            WalkState, ACPI_IMPLICIT_CONVERSION);        break;    case ACPI_REFCLASS_INDEX:        /* Storing to an Index (pointer into a packager or buffer) */        Status = AcpiExStoreObjectToIndex (SourceDesc, RefDesc, WalkState);        break;    case ACPI_REFCLASS_LOCAL:    case ACPI_REFCLASS_ARG:        /* Store to a method local/arg  */        Status = AcpiDsStoreObjectToLocal (RefDesc->Reference.Class,            RefDesc->Reference.Value, SourceDesc, WalkState);        break;//.........这里部分代码省略.........
开发者ID:FreeBSDFoundation,项目名称:freebsd,代码行数:101,


示例25: AcpiUtUpdateObjectReference

ACPI_STATUSAcpiUtUpdateObjectReference (    ACPI_OPERAND_OBJECT     *Object,    UINT16                  Action){    ACPI_STATUS             Status = AE_OK;    ACPI_GENERIC_STATE      *StateList = NULL;    ACPI_OPERAND_OBJECT     *NextObject = NULL;    ACPI_OPERAND_OBJECT     *PrevObject;    ACPI_GENERIC_STATE      *State;    UINT32                  i;    ACPI_FUNCTION_NAME (UtUpdateObjectReference);    while (Object)    {        /* Make sure that this isn't a namespace handle */        if (ACPI_GET_DESCRIPTOR_TYPE (Object) == ACPI_DESC_TYPE_NAMED)        {            ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,                "Object %p is NS handle/n", Object));            return (AE_OK);        }        /*         * All sub-objects must have their reference count incremented also.         * Different object types have different subobjects.         */        switch (Object->Common.Type)        {        case ACPI_TYPE_DEVICE:        case ACPI_TYPE_PROCESSOR:        case ACPI_TYPE_POWER:        case ACPI_TYPE_THERMAL:            /*             * Update the notify objects for these types (if present)             * Two lists, system and device notify handlers.             */            for (i = 0; i < ACPI_NUM_NOTIFY_TYPES; i++)            {                PrevObject = Object->CommonNotify.NotifyList[i];                while (PrevObject)                {                    NextObject = PrevObject->Notify.Next[i];                    AcpiUtUpdateRefCount (PrevObject, Action);                    PrevObject = NextObject;                }            }            break;        case ACPI_TYPE_PACKAGE:            /*             * We must update all the sub-objects of the package,             * each of whom may have their own sub-objects.             */            for (i = 0; i < Object->Package.Count; i++)            {                /*                 * Null package elements are legal and can be simply                 * ignored.                 */                NextObject = Object->Package.Elements[i];                if (!NextObject)                {                    continue;                }                switch (NextObject->Common.Type)                {                case ACPI_TYPE_INTEGER:                case ACPI_TYPE_STRING:                case ACPI_TYPE_BUFFER:                    /*                     * For these very simple sub-objects, we can just                     * update the reference count here and continue.                     * Greatly increases performance of this operation.                     */                    AcpiUtUpdateRefCount (NextObject, Action);                    break;                default:                    /*                     * For complex sub-objects, push them onto the stack                     * for later processing (this eliminates recursion.)                     */                    Status = AcpiUtCreateUpdateStateAndPush (                                 NextObject, Action, &StateList);                    if (ACPI_FAILURE (Status))                    {                        goto ErrorExit;                    }                    break;                }            }            NextObject = NULL;            break;//.........这里部分代码省略.........
开发者ID:yazshel,项目名称:netbsd-kernel,代码行数:101,


示例26: AcpiDbDecodeAndDisplayObject

voidAcpiDbDecodeAndDisplayObject (    char                    *Target,    char                    *OutputType){    void                    *ObjPtr;    ACPI_NAMESPACE_NODE     *Node;    ACPI_OPERAND_OBJECT     *ObjDesc;    UINT32                  Display = DB_BYTE_DISPLAY;    char                    Buffer[80];    ACPI_BUFFER             RetBuf;    ACPI_STATUS             Status;    UINT32                  Size;    if (!Target)    {        return;    }    /* Decode the output type */    if (OutputType)    {        AcpiUtStrupr (OutputType);        if (OutputType[0] == 'W')        {            Display = DB_WORD_DISPLAY;        }        else if (OutputType[0] == 'D')        {            Display = DB_DWORD_DISPLAY;        }        else if (OutputType[0] == 'Q')        {            Display = DB_QWORD_DISPLAY;        }    }    RetBuf.Length = sizeof (Buffer);    RetBuf.Pointer = Buffer;    /* Differentiate between a number and a name */    if ((Target[0] >= 0x30) && (Target[0] <= 0x39))    {        ObjPtr = AcpiDbGetPointer (Target);        if (!AcpiOsReadable (ObjPtr, 16))        {            AcpiOsPrintf ("Address %p is invalid in this address space/n",                ObjPtr);            return;        }        /* Decode the object type */        switch (ACPI_GET_DESCRIPTOR_TYPE (ObjPtr))        {        case ACPI_DESC_TYPE_NAMED:            /* This is a namespace Node */            if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_NAMESPACE_NODE)))            {                AcpiOsPrintf (                    "Cannot read entire Named object at address %p/n", ObjPtr);                return;            }            Node = ObjPtr;            goto DumpNode;        case ACPI_DESC_TYPE_OPERAND:            /* This is a ACPI OPERAND OBJECT */            if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_OPERAND_OBJECT)))            {                AcpiOsPrintf ("Cannot read entire ACPI object at address %p/n",                    ObjPtr);                return;            }            AcpiUtDebugDumpBuffer (ObjPtr, sizeof (ACPI_OPERAND_OBJECT), Display,                ACPI_UINT32_MAX);            AcpiExDumpObjectDescriptor (ObjPtr, 1);            break;        case ACPI_DESC_TYPE_PARSER:            /* This is a Parser Op object */            if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_PARSE_OBJECT)))            {                AcpiOsPrintf (                    "Cannot read entire Parser object at address %p/n", ObjPtr);                return;            }            AcpiUtDebugDumpBuffer (ObjPtr, sizeof (ACPI_PARSE_OBJECT), Display,//.........这里部分代码省略.........
开发者ID:coyizumi,项目名称:cs111,代码行数:101,


示例27: AcpiExResolveMultiple

ACPI_STATUSAcpiExResolveMultiple (    ACPI_WALK_STATE         *WalkState,    ACPI_OPERAND_OBJECT     *Operand,    ACPI_OBJECT_TYPE        *ReturnType,    ACPI_OPERAND_OBJECT     **ReturnDesc){    ACPI_OPERAND_OBJECT     *ObjDesc = (void *) Operand;    ACPI_NAMESPACE_NODE     *Node;    ACPI_OBJECT_TYPE        Type;    ACPI_STATUS             Status;    ACPI_FUNCTION_TRACE (AcpiExResolveMultiple);    /* Operand can be either a namespace node or an operand descriptor */    switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc))    {    case ACPI_DESC_TYPE_OPERAND:        Type = ObjDesc->Common.Type;        break;    case ACPI_DESC_TYPE_NAMED:        Type = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type;        ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjDesc);        /* If we had an Alias node, use the attached object for type info */        if (Type == ACPI_TYPE_LOCAL_ALIAS)        {            Type = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Type;            ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) ObjDesc);        }        break;    default:        return_ACPI_STATUS (AE_AML_OPERAND_TYPE);    }    /* If type is anything other than a reference, we are done */    if (Type != ACPI_TYPE_LOCAL_REFERENCE)    {        goto Exit;    }    /*     * For reference objects created via the RefOf, Index, or Load/LoadTable     * operators, we need to get to the base object (as per the ACPI     * specification of the ObjectType and SizeOf operators). This means     * traversing the list of possibly many nested references.     */    while (ObjDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE)    {        switch (ObjDesc->Reference.Class)        {        case ACPI_REFCLASS_REFOF:        case ACPI_REFCLASS_NAME:            /* Dereference the reference pointer */            if (ObjDesc->Reference.Class == ACPI_REFCLASS_REFOF)            {                Node = ObjDesc->Reference.Object;            }            else /* AML_INT_NAMEPATH_OP */            {                Node = ObjDesc->Reference.Node;            }            /* All "References" point to a NS node */            if (ACPI_GET_DESCRIPTOR_TYPE (Node) != ACPI_DESC_TYPE_NAMED)            {                ACPI_ERROR ((AE_INFO,                    "Not a namespace node %p [%s]",                    Node, AcpiUtGetDescriptorName (Node)));                return_ACPI_STATUS (AE_AML_INTERNAL);            }            /* Get the attached object */            ObjDesc = AcpiNsGetAttachedObject (Node);            if (!ObjDesc)            {                /* No object, use the NS node type */                Type = AcpiNsGetType (Node);                goto Exit;            }            /* Check for circular references */            if (ObjDesc == Operand)            {                return_ACPI_STATUS (AE_AML_CIRCULAR_REFERENCE);            }            break;//.........这里部分代码省略.........
开发者ID:AhmadTux,项目名称:DragonFlyBSD,代码行数:101,


示例28: AcpiUtDumpAllocations

voidAcpiUtDumpAllocations (    UINT32                  Component,    const char              *Module){    ACPI_DEBUG_MEM_BLOCK    *Element;    ACPI_DESCRIPTOR         *Descriptor;    UINT32                  NumOutstanding = 0;    UINT8                   DescriptorType;    ACPI_FUNCTION_TRACE (UtDumpAllocations);    if (AcpiGbl_DisableMemTracking)    {        return_VOID;    }    /*     * Walk the allocation list.     */    if (ACPI_FAILURE (AcpiUtAcquireMutex (ACPI_MTX_MEMORY)))    {        return_VOID;    }    Element = AcpiGbl_GlobalList->ListHead;    while (Element)    {        if ((Element->Component & Component) &&            ((Module == NULL) || (0 == strcmp (Module, Element->Module))))        {            Descriptor = ACPI_CAST_PTR (                ACPI_DESCRIPTOR, &Element->UserSpace);            if (Element->Size < sizeof (ACPI_COMMON_DESCRIPTOR))            {                AcpiOsPrintf ("%p Length 0x%04X %9.9s-%u "                    "[Not a Descriptor - too small]/n",                    Descriptor, Element->Size, Element->Module,                    Element->Line);            }            else            {                /* Ignore allocated objects that are in a cache */                if (ACPI_GET_DESCRIPTOR_TYPE (Descriptor) !=                    ACPI_DESC_TYPE_CACHED)                {                    AcpiOsPrintf ("%p Length 0x%04X %9.9s-%u [%s] ",                        Descriptor, Element->Size, Element->Module,                        Element->Line, AcpiUtGetDescriptorName (Descriptor));                    /* Validate the descriptor type using Type field and length */                    DescriptorType = 0; /* Not a valid descriptor type */                    switch (ACPI_GET_DESCRIPTOR_TYPE (Descriptor))                    {                    case ACPI_DESC_TYPE_OPERAND:                        if (Element->Size == sizeof (ACPI_OPERAND_OBJECT))                        {                            DescriptorType = ACPI_DESC_TYPE_OPERAND;                        }                        break;                    case ACPI_DESC_TYPE_PARSER:                        if (Element->Size == sizeof (ACPI_PARSE_OBJECT))                        {                            DescriptorType = ACPI_DESC_TYPE_PARSER;                        }                        break;                    case ACPI_DESC_TYPE_NAMED:                        if (Element->Size == sizeof (ACPI_NAMESPACE_NODE))                        {                            DescriptorType = ACPI_DESC_TYPE_NAMED;                        }                        break;                    default:                        break;                    }                    /* Display additional info for the major descriptor types */                    switch (DescriptorType)                    {                    case ACPI_DESC_TYPE_OPERAND:                        AcpiOsPrintf ("%12.12s  RefCount 0x%04X/n",                            AcpiUtGetTypeName (Descriptor->Object.Common.Type),                            Descriptor->Object.Common.ReferenceCount);                        break;//.........这里部分代码省略.........
开发者ID:bininc,项目名称:acpica,代码行数:101,


示例29: acpi_ns_dump_one_object

//.........这里部分代码省略.........		default:			acpi_os_printf("/n");			break;		}		break;	default:		acpi_os_printf("/n");		break;	}		if (!(acpi_dbg_level & ACPI_LV_VALUES)) {		return (AE_OK);	}		dbg_level = acpi_dbg_level;	acpi_dbg_level = 0;	obj_desc = acpi_ns_get_attached_object(this_node);	acpi_dbg_level = dbg_level;		while (obj_desc) {		obj_type = ACPI_TYPE_INVALID;		acpi_os_printf("Attached Object %p: ", obj_desc);				switch (ACPI_GET_DESCRIPTOR_TYPE(obj_desc)) {		case ACPI_DESC_TYPE_NAMED:			acpi_os_printf("(Ptr to Node)/n");			bytes_to_dump = sizeof(struct acpi_namespace_node);			ACPI_DUMP_BUFFER(obj_desc, bytes_to_dump);			break;		case ACPI_DESC_TYPE_OPERAND:			obj_type = obj_desc->common.type;			if (obj_type > ACPI_TYPE_LOCAL_MAX) {				acpi_os_printf				    ("(Pointer to ACPI Object type %.2X [UNKNOWN])/n",				     obj_type);				bytes_to_dump = 32;			} else {				acpi_os_printf				    ("(Pointer to ACPI Object type %.2X [%s])/n",				     obj_type, acpi_ut_get_type_name(obj_type));				bytes_to_dump =				    sizeof(union acpi_operand_object);			}			ACPI_DUMP_BUFFER(obj_desc, bytes_to_dump);			break;		default:			break;		}
开发者ID:DirtyDroidX,项目名称:android_kernel_htc_m8ul,代码行数:66,



注:本文中的ACPI_GET_DESCRIPTOR_TYPE函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ ACPI_GET_OBJECT_TYPE函数代码示例
C++ ACPI_GET_1BIT_FLAG函数代码示例
51自学网自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1