本文整理汇总了C++中ACPI_FUNCTION_ENTRY函数的典型用法代码示例。如果您正苦于以下问题:C++ ACPI_FUNCTION_ENTRY函数的具体用法?C++ ACPI_FUNCTION_ENTRY怎么用?C++ ACPI_FUNCTION_ENTRY使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ACPI_FUNCTION_ENTRY函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AcpiExSystemResetEvent
ACPI_STATUS
AcpiExSystemResetEvent (
ACPI_OPERAND_OBJECT *ObjDesc)
{
ACPI_STATUS Status = AE_OK;
ACPI_SEMAPHORE TempSemaphore;
ACPI_FUNCTION_ENTRY ();
/*
* We are going to simply delete the existing semaphore and
* create a new one!
*/
Status = AcpiOsCreateSemaphore (ACPI_NO_UNIT_LIMIT, 0, &TempSemaphore);
if (ACPI_SUCCESS (Status))
{
(void) AcpiOsDeleteSemaphore (ObjDesc->Event.OsSemaphore);
ObjDesc->Event.OsSemaphore = TempSemaphore;
}
return (Status);
}
示例2: acpi_ds_init_one_object
static acpi_status
acpi_ds_init_one_object(acpi_handle obj_handle,
u32 level, void *context, void **return_value)
{
struct acpi_init_walk_info *info =
(struct acpi_init_walk_info *)context;
struct acpi_namespace_node *node =
(struct acpi_namespace_node *)obj_handle;
acpi_status status;
union acpi_operand_object *obj_desc;
ACPI_FUNCTION_ENTRY();
/*
* We are only interested in NS nodes owned by the table that
* was just loaded
*/
if (node->owner_id != info->owner_id) {
return (AE_OK);
}
info->object_count++;
/* And even then, we are only interested in a few object types */
switch (acpi_ns_get_type(obj_handle)) {
case ACPI_TYPE_REGION:
status = acpi_ds_initialize_region(obj_handle);
if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status,
"During Region initialization %p [%4.4s]",
obj_handle,
acpi_ut_get_node_name(obj_handle)));
}
info->op_region_count++;
break;
case ACPI_TYPE_METHOD:
/*
* Auto-serialization support. We will examine each method that is
* not_serialized to determine if it creates any Named objects. If
* it does, it will be marked serialized to prevent problems if
* the method is entered by two or more threads and an attempt is
* made to create the same named object twice -- which results in
* an AE_ALREADY_EXISTS exception and method abort.
*/
info->method_count++;
obj_desc = acpi_ns_get_attached_object(node);
if (!obj_desc) {
break;
}
/* Ignore if already serialized */
if (obj_desc->method.info_flags & ACPI_METHOD_SERIALIZED) {
info->serial_method_count++;
break;
}
if (acpi_gbl_auto_serialize_methods) {
/* Parse/scan method and serialize it if necessary */
acpi_ds_auto_serialize_method(node, obj_desc);
if (obj_desc->method.
info_flags & ACPI_METHOD_SERIALIZED) {
/* Method was just converted to Serialized */
info->serial_method_count++;
info->serialized_method_count++;
break;
}
}
info->non_serial_method_count++;
break;
case ACPI_TYPE_DEVICE:
info->device_count++;
break;
default:
break;
}
/*
* We ignore errors from above, and always return OK, since
* we don't want to abort the walk on a single error.
*/
return (AE_OK);
}
示例3: acpi_ex_do_math_op
acpi_integer
acpi_ex_do_math_op (
u16 opcode,
acpi_integer operand0,
acpi_integer operand1)
{
ACPI_FUNCTION_ENTRY ();
switch (opcode) {
case AML_ADD_OP: /* Add (Operand0, Operand1, Result) */
return (operand0 + operand1);
case AML_BIT_AND_OP: /* And (Operand0, Operand1, Result) */
return (operand0 & operand1);
case AML_BIT_NAND_OP: /* NAnd (Operand0, Operand1, Result) */
return (~(operand0 & operand1));
case AML_BIT_OR_OP: /* Or (Operand0, Operand1, Result) */
return (operand0 | operand1);
case AML_BIT_NOR_OP: /* NOr (Operand0, Operand1, Result) */
return (~(operand0 | operand1));
case AML_BIT_XOR_OP: /* XOr (Operand0, Operand1, Result) */
return (operand0 ^ operand1);
case AML_MULTIPLY_OP: /* Multiply (Operand0, Operand1, Result) */
return (operand0 * operand1);
case AML_SHIFT_LEFT_OP: /* shift_left (Operand, shift_count, Result) */
return (operand0 << operand1);
case AML_SHIFT_RIGHT_OP: /* shift_right (Operand, shift_count, Result) */
return (operand0 >> operand1);
case AML_SUBTRACT_OP: /* Subtract (Operand0, Operand1, Result) */
return (operand0 - operand1);
default:
return (0);
}
}
示例4: AeInstallEarlyHandlers
ACPI_STATUS
AeInstallEarlyHandlers (
void)
{
ACPI_STATUS Status;
UINT32 i;
ACPI_HANDLE Handle;
ACPI_FUNCTION_ENTRY ();
Status = AcpiInstallInterfaceHandler (AeInterfaceHandler);
if (ACPI_FAILURE (Status))
{
printf ("Could not install interface handler, %s\n",
AcpiFormatException (Status));
}
Status = AcpiInstallTableHandler (AeTableHandler, NULL);
if (ACPI_FAILURE (Status))
{
printf ("Could not install table handler, %s\n",
AcpiFormatException (Status));
}
Status = AcpiInstallExceptionHandler (AeExceptionHandler);
if (ACPI_FAILURE (Status))
{
printf ("Could not install exception handler, %s\n",
AcpiFormatException (Status));
}
/* Install global notify handlers */
Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY,
AeSystemNotifyHandler, NULL);
if (ACPI_FAILURE (Status))
{
printf ("Could not install a global system notify handler, %s\n",
AcpiFormatException (Status));
}
Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY,
AeDeviceNotifyHandler, NULL);
if (ACPI_FAILURE (Status))
{
printf ("Could not install a global notify handler, %s\n",
AcpiFormatException (Status));
}
Status = AcpiGetHandle (NULL, "\\_SB", &Handle);
if (ACPI_SUCCESS (Status))
{
Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
AeNotifyHandler1, NULL);
if (ACPI_FAILURE (Status))
{
printf ("Could not install a notify handler, %s\n",
AcpiFormatException (Status));
}
Status = AcpiRemoveNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
AeNotifyHandler1);
if (ACPI_FAILURE (Status))
{
printf ("Could not remove a notify handler, %s\n",
AcpiFormatException (Status));
}
Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
AeNotifyHandler1, NULL);
AE_CHECK_OK (AcpiInstallNotifyHandler, Status);
Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY,
AeNotifyHandler1);
AE_CHECK_OK (AcpiRemoveNotifyHandler, Status);
#if 0
Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY,
AeNotifyHandler1, NULL);
if (ACPI_FAILURE (Status))
{
printf ("Could not install a notify handler, %s\n",
AcpiFormatException (Status));
}
#endif
/* Install two handlers for _SB_ */
Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
AeNotifyHandler1, ACPI_CAST_PTR (void, 0x01234567));
Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
AeNotifyHandler2, ACPI_CAST_PTR (void, 0x89ABCDEF));
/* Attempt duplicate handler installation, should fail */
Status = AcpiInstallNotifyHandler (Handle, ACPI_SYSTEM_NOTIFY,
AeNotifyHandler1, ACPI_CAST_PTR (void, 0x77777777));
//.........这里部分代码省略.........
示例5: AcpiExConvertToAscii
static UINT32
AcpiExConvertToAscii (
UINT64 Integer,
UINT16 Base,
UINT8 *String,
UINT8 DataWidth)
{
UINT64 Digit;
UINT32 i;
UINT32 j;
UINT32 k = 0;
UINT32 HexLength;
UINT32 DecimalLength;
UINT32 Remainder;
BOOLEAN SupressZeros;
ACPI_FUNCTION_ENTRY ();
switch (Base)
{
case 10:
/* Setup max length for the decimal number */
switch (DataWidth)
{
case 1:
DecimalLength = ACPI_MAX8_DECIMAL_DIGITS;
break;
case 4:
DecimalLength = ACPI_MAX32_DECIMAL_DIGITS;
break;
case 8:
default:
DecimalLength = ACPI_MAX64_DECIMAL_DIGITS;
break;
}
SupressZeros = TRUE; /* No leading zeros */
Remainder = 0;
for (i = DecimalLength; i > 0; i--)
{
/* Divide by nth factor of 10 */
Digit = Integer;
for (j = 0; j < i; j++)
{
(void) AcpiUtShortDivide (Digit, 10, &Digit, &Remainder);
}
/* Handle leading zeros */
if (Remainder != 0)
{
SupressZeros = FALSE;
}
if (!SupressZeros)
{
String[k] = (UINT8) (ACPI_ASCII_ZERO + Remainder);
k++;
}
}
break;
case 16:
/* HexLength: 2 ascii hex chars per data byte */
HexLength = ACPI_MUL_2 (DataWidth);
for (i = 0, j = (HexLength-1); i < HexLength; i++, j--)
{
/* Get one hex digit, most significant digits first */
String[k] = (UINT8) AcpiUtHexToAsciiChar (Integer, ACPI_MUL_4 (j));
k++;
}
break;
default:
return (0);
}
/*
* Since leading zeros are suppressed, we must check for the case where
* the integer equals 0
*
* Finally, null terminate the string and return the length
*/
if (!k)
{
String [0] = ACPI_ASCII_ZERO;
//.........这里部分代码省略.........
示例6: AcpiDbSecondPassParse
ACPI_STATUS
AcpiDbSecondPassParse (
ACPI_PARSE_OBJECT *Root)
{
ACPI_PARSE_OBJECT *Op = Root;
ACPI_PARSE_OBJECT *Method;
ACPI_PARSE_OBJECT *SearchOp;
ACPI_PARSE_OBJECT *StartOp;
ACPI_STATUS Status = AE_OK;
UINT32 BaseAmlOffset;
ACPI_WALK_STATE *WalkState;
ACPI_FUNCTION_ENTRY ();
AcpiOsPrintf ("Pass two parse ....\n");
while (Op)
{
if (Op->Common.AmlOpcode == AML_METHOD_OP)
{
Method = Op;
/* Create a new walk state for the parse */
WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL);
if (!WalkState)
{
return (AE_NO_MEMORY);
}
/* Init the Walk State */
WalkState->ParserState.Aml =
WalkState->ParserState.AmlStart = Method->Named.Data;
WalkState->ParserState.AmlEnd =
WalkState->ParserState.PkgEnd = Method->Named.Data +
Method->Named.Length;
WalkState->ParserState.StartScope = Op;
WalkState->DescendingCallback = AcpiDsLoad1BeginOp;
WalkState->AscendingCallback = AcpiDsLoad1EndOp;
/* Perform the AML parse */
Status = AcpiPsParseAml (WalkState);
BaseAmlOffset = (Method->Common.Value.Arg)->Common.AmlOffset + 1;
StartOp = (Method->Common.Value.Arg)->Common.Next;
SearchOp = StartOp;
while (SearchOp)
{
SearchOp->Common.AmlOffset += BaseAmlOffset;
SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp);
}
}
if (Op->Common.AmlOpcode == AML_REGION_OP)
{
/* TBD: [Investigate] this isn't quite the right thing to do! */
/*
*
* Method = (ACPI_DEFERRED_OP *) Op;
* Status = AcpiPsParseAml (Op, Method->Body, Method->BodyLength);
*/
}
if (ACPI_FAILURE (Status))
{
break;
}
Op = AcpiPsGetDepthNext (Root, Op);
}
return (Status);
}
示例7: AcpiDmParseDeferredOps
ACPI_STATUS
AcpiDmParseDeferredOps (
ACPI_PARSE_OBJECT *Root)
{
const ACPI_OPCODE_INFO *OpInfo;
ACPI_PARSE_OBJECT *Op = Root;
ACPI_STATUS Status;
ACPI_FUNCTION_ENTRY ();
/* Traverse the entire parse tree */
while (Op)
{
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
if (!(OpInfo->Flags & AML_DEFER))
{
Op = AcpiPsGetDepthNext (Root, Op);
continue;
}
/* Now we know we have a deferred opcode */
switch (Op->Common.AmlOpcode)
{
case AML_METHOD_OP:
case AML_BUFFER_OP:
case AML_PACKAGE_OP:
case AML_VAR_PACKAGE_OP:
Status = AcpiDmDeferredParse (Op, Op->Named.Data, Op->Named.Length);
if (ACPI_FAILURE (Status))
{
return (Status);
}
break;
/* We don't need to do anything for these deferred opcodes */
case AML_REGION_OP:
case AML_DATA_REGION_OP:
case AML_CREATE_QWORD_FIELD_OP:
case AML_CREATE_DWORD_FIELD_OP:
case AML_CREATE_WORD_FIELD_OP:
case AML_CREATE_BYTE_FIELD_OP:
case AML_CREATE_BIT_FIELD_OP:
case AML_CREATE_FIELD_OP:
case AML_BANK_FIELD_OP:
break;
default:
ACPI_ERROR ((AE_INFO, "Unhandled deferred AML opcode [0x%.4X]",
Op->Common.AmlOpcode));
break;
}
Op = AcpiPsGetDepthNext (Root, Op);
}
return (AE_OK);
}
示例8: acpi_ex_convert_to_ascii
static u32
acpi_ex_convert_to_ascii(acpi_integer integer,
u16 base, u8 * string, u8 data_width)
{
acpi_integer digit;
acpi_native_uint i;
acpi_native_uint j;
acpi_native_uint k = 0;
acpi_native_uint hex_length;
acpi_native_uint decimal_length;
u32 remainder;
u8 supress_zeros;
ACPI_FUNCTION_ENTRY();
switch (base) {
case 10:
/* Setup max length for the decimal number */
switch (data_width) {
case 1:
decimal_length = ACPI_MAX8_DECIMAL_DIGITS;
break;
case 4:
decimal_length = ACPI_MAX32_DECIMAL_DIGITS;
break;
case 8:
default:
decimal_length = ACPI_MAX64_DECIMAL_DIGITS;
break;
}
supress_zeros = TRUE; /* No leading zeros */
remainder = 0;
for (i = decimal_length; i > 0; i--) {
/* Divide by nth factor of 10 */
digit = integer;
for (j = 0; j < i; j++) {
(void)acpi_ut_short_divide(digit, 10, &digit,
&remainder);
}
/* Handle leading zeros */
if (remainder != 0) {
supress_zeros = FALSE;
}
if (!supress_zeros) {
string[k] = (u8) (ACPI_ASCII_ZERO + remainder);
k++;
}
}
break;
case 16:
/* hex_length: 2 ascii hex chars per data byte */
hex_length = (acpi_native_uint) ACPI_MUL_2(data_width);
for (i = 0, j = (hex_length - 1); i < hex_length; i++, j--) {
/* Get one hex digit, most significant digits first */
string[k] =
(u8) acpi_ut_hex_to_ascii_char(integer,
ACPI_MUL_4(j));
k++;
}
break;
default:
return (0);
}
/*
* Since leading zeros are supressed, we must check for the case where
* the integer equals 0
*
* Finally, null terminate the string and return the length
*/
if (!k) {
string[0] = ACPI_ASCII_ZERO;
k = 1;
}
string[k] = 0;
return ((u32) k);
}
示例9: AcpiHwGetGpeStatus
ACPI_STATUS
AcpiHwGetGpeStatus (
ACPI_GPE_EVENT_INFO *GpeEventInfo,
ACPI_EVENT_STATUS *EventStatus)
{
UINT32 InByte;
UINT32 RegisterBit;
ACPI_GPE_REGISTER_INFO *GpeRegisterInfo;
ACPI_EVENT_STATUS LocalEventStatus = 0;
ACPI_STATUS Status;
ACPI_FUNCTION_ENTRY ();
if (!EventStatus)
{
return (AE_BAD_PARAMETER);
}
/* GPE currently handled? */
if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) !=
ACPI_GPE_DISPATCH_NONE)
{
LocalEventStatus |= ACPI_EVENT_FLAG_HAS_HANDLER;
}
/* Get the info block for the entire GPE register */
GpeRegisterInfo = GpeEventInfo->RegisterInfo;
/* Get the register bitmask for this GPE */
RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo);
/* GPE currently enabled? (enabled for runtime?) */
if (RegisterBit & GpeRegisterInfo->EnableForRun)
{
LocalEventStatus |= ACPI_EVENT_FLAG_ENABLED;
}
/* GPE enabled for wake? */
if (RegisterBit & GpeRegisterInfo->EnableForWake)
{
LocalEventStatus |= ACPI_EVENT_FLAG_WAKE_ENABLED;
}
/* GPE currently enabled (enable bit == 1)? */
Status = AcpiHwRead (&InByte, &GpeRegisterInfo->EnableAddress);
if (ACPI_FAILURE (Status))
{
return (Status);
}
if (RegisterBit & InByte)
{
LocalEventStatus |= ACPI_EVENT_FLAG_ENABLE_SET;
}
/* GPE currently active (status bit == 1)? */
Status = AcpiHwRead (&InByte, &GpeRegisterInfo->StatusAddress);
if (ACPI_FAILURE (Status))
{
return (Status);
}
if (RegisterBit & InByte)
{
LocalEventStatus |= ACPI_EVENT_FLAG_STATUS_SET;
}
/* Set return value */
(*EventStatus) = LocalEventStatus;
return (AE_OK);
}
示例10: AcpiGetHandle
ACPI_STATUS
AcpiGetHandle (
ACPI_HANDLE Parent,
ACPI_STRING Pathname,
ACPI_HANDLE *RetHandle)
{
ACPI_STATUS Status;
ACPI_NAMESPACE_NODE *Node = NULL;
ACPI_NAMESPACE_NODE *PrefixNode = NULL;
ACPI_FUNCTION_ENTRY ();
/* Parameter Validation */
if (!RetHandle || !Pathname)
{
return (AE_BAD_PARAMETER);
}
/* Convert a parent handle to a prefix node */
if (Parent)
{
PrefixNode = AcpiNsMapHandleToNode (Parent);
if (!PrefixNode)
{
return (AE_BAD_PARAMETER);
}
}
/*
* Valid cases are:
* 1) Fully qualified pathname
* 2) Parent + Relative pathname
*
* Error for <null Parent + relative path>
*/
if (AcpiNsValidRootPrefix (Pathname[0]))
{
/* Pathname is fully qualified (starts with '\') */
/* Special case for root-only, since we can't search for it */
if (!ACPI_STRCMP (Pathname, ACPI_NS_ROOT_PATH))
{
*RetHandle = AcpiNsConvertEntryToHandle (AcpiGbl_RootNode);
return (AE_OK);
}
}
else if (!PrefixNode)
{
/* Relative path with null prefix is disallowed */
return (AE_BAD_PARAMETER);
}
/* Find the Node and convert to a handle */
Status = AcpiNsGetNode (PrefixNode, Pathname, ACPI_NS_NO_UPSEARCH, &Node);
if (ACPI_SUCCESS (Status))
{
*RetHandle = AcpiNsConvertEntryToHandle (Node);
}
return (Status);
}
示例11: AcpiPsGetDepthNext
ACPI_PARSE_OBJECT *
AcpiPsGetDepthNext (
ACPI_PARSE_OBJECT *Origin,
ACPI_PARSE_OBJECT *Op)
{
ACPI_PARSE_OBJECT *Next = NULL;
ACPI_PARSE_OBJECT *Parent;
ACPI_PARSE_OBJECT *Arg;
ACPI_FUNCTION_ENTRY ();
if (!Op)
{
return (NULL);
}
/* Look for an argument or child */
Next = AcpiPsGetArg (Op, 0);
if (Next)
{
return (Next);
}
/* Look for a sibling */
Next = Op->Common.Next;
if (Next)
{
return (Next);
}
/* Look for a sibling of parent */
Parent = Op->Common.Parent;
while (Parent)
{
Arg = AcpiPsGetArg (Parent, 0);
while (Arg && (Arg != Origin) && (Arg != Op))
{
Arg = Arg->Common.Next;
}
if (Arg == Origin)
{
/* Reached parent of origin, end search */
return (NULL);
}
if (Parent->Common.Next)
{
/* Found sibling of parent */
return (Parent->Common.Next);
}
Op = Parent;
Parent = Parent->Common.Parent;
}
return (Next);
}
示例12: AcpiPsAppendArg
void
AcpiPsAppendArg (
ACPI_PARSE_OBJECT *Op,
ACPI_PARSE_OBJECT *Arg)
{
ACPI_PARSE_OBJECT *PrevArg;
const ACPI_OPCODE_INFO *OpInfo;
ACPI_FUNCTION_ENTRY ();
if (!Op)
{
return;
}
/* Get the info structure for this opcode */
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
if (OpInfo->Class == AML_CLASS_UNKNOWN)
{
/* Invalid opcode */
ACPI_ERROR ((AE_INFO, "Invalid AML Opcode: 0x%2.2X",
Op->Common.AmlOpcode));
return;
}
/* Check if this opcode requires argument sub-objects */
if (!(OpInfo->Flags & AML_HAS_ARGS))
{
/* Has no linked argument objects */
return;
}
/* Append the argument to the linked argument list */
if (Op->Common.Value.Arg)
{
/* Append to existing argument list */
PrevArg = Op->Common.Value.Arg;
while (PrevArg->Common.Next)
{
PrevArg = PrevArg->Common.Next;
}
PrevArg->Common.Next = Arg;
}
else
{
/* No argument list, this will be the first argument */
Op->Common.Value.Arg = Arg;
}
/* Set the parent in this arg and any args linked after it */
while (Arg)
{
Arg->Common.Parent = Op;
Arg = Arg->Common.Next;
Op->Common.ArgListLength++;
}
}
示例13: AcpiHwGetGpeStatus
ACPI_STATUS
AcpiHwGetGpeStatus (
ACPI_GPE_EVENT_INFO *GpeEventInfo,
ACPI_EVENT_STATUS *EventStatus)
{
UINT32 InByte;
UINT8 RegisterBit;
ACPI_GPE_REGISTER_INFO *GpeRegisterInfo;
ACPI_STATUS Status;
ACPI_EVENT_STATUS LocalEventStatus = 0;
ACPI_FUNCTION_ENTRY ();
if (!EventStatus)
{
return (AE_BAD_PARAMETER);
}
/* Get the info block for the entire GPE register */
GpeRegisterInfo = GpeEventInfo->RegisterInfo;
/* Get the register bitmask for this GPE */
RegisterBit = (UINT8) (1 <<
(GpeEventInfo->GpeNumber - GpeEventInfo->RegisterInfo->BaseGpeNumber));
/* GPE currently enabled? (enabled for runtime?) */
if (RegisterBit & GpeRegisterInfo->EnableForRun)
{
LocalEventStatus |= ACPI_EVENT_FLAG_ENABLED;
}
/* GPE enabled for wake? */
if (RegisterBit & GpeRegisterInfo->EnableForWake)
{
LocalEventStatus |= ACPI_EVENT_FLAG_WAKE_ENABLED;
}
/* GPE currently active (status bit == 1)? */
Status = AcpiRead (&InByte, &GpeRegisterInfo->StatusAddress);
if (ACPI_FAILURE (Status))
{
goto UnlockAndExit;
}
if (RegisterBit & InByte)
{
LocalEventStatus |= ACPI_EVENT_FLAG_SET;
}
/* Set return value */
(*EventStatus) = LocalEventStatus;
UnlockAndExit:
return (Status);
}
示例14: AcpiExDoMathOp
UINT64
AcpiExDoMathOp (
UINT16 Opcode,
UINT64 Integer0,
UINT64 Integer1)
{
ACPI_FUNCTION_ENTRY ();
switch (Opcode)
{
case AML_ADD_OP: /* Add (Integer0, Integer1, Result) */
return (Integer0 + Integer1);
case AML_BIT_AND_OP: /* And (Integer0, Integer1, Result) */
return (Integer0 & Integer1);
case AML_BIT_NAND_OP: /* NAnd (Integer0, Integer1, Result) */
return (~(Integer0 & Integer1));
case AML_BIT_OR_OP: /* Or (Integer0, Integer1, Result) */
return (Integer0 | Integer1);
case AML_BIT_NOR_OP: /* NOr (Integer0, Integer1, Result) */
return (~(Integer0 | Integer1));
case AML_BIT_XOR_OP: /* XOr (Integer0, Integer1, Result) */
return (Integer0 ^ Integer1);
case AML_MULTIPLY_OP: /* Multiply (Integer0, Integer1, Result) */
return (Integer0 * Integer1);
case AML_SHIFT_LEFT_OP: /* ShiftLeft (Operand, ShiftCount, Result)*/
/*
* We need to check if the shiftcount is larger than the integer bit
* width since the behavior of this is not well-defined in the C language.
*/
if (Integer1 >= AcpiGbl_IntegerBitWidth)
{
return (0);
}
return (Integer0 << Integer1);
case AML_SHIFT_RIGHT_OP: /* ShiftRight (Operand, ShiftCount, Result) */
/*
* We need to check if the shiftcount is larger than the integer bit
* width since the behavior of this is not well-defined in the C language.
*/
if (Integer1 >= AcpiGbl_IntegerBitWidth)
{
return (0);
}
return (Integer0 >> Integer1);
case AML_SUBTRACT_OP: /* Subtract (Integer0, Integer1, Result) */
return (Integer0 - Integer1);
default:
return (0);
}
}
示例15: AcpiHwLowSetGpe
ACPI_STATUS
AcpiHwLowSetGpe (
ACPI_GPE_EVENT_INFO *GpeEventInfo,
UINT32 Action)
{
ACPI_GPE_REGISTER_INFO *GpeRegisterInfo;
ACPI_STATUS Status;
UINT32 EnableMask;
UINT32 RegisterBit;
ACPI_FUNCTION_ENTRY ();
/* Get the info block for the entire GPE register */
GpeRegisterInfo = GpeEventInfo->RegisterInfo;
if (!GpeRegisterInfo)
{
return (AE_NOT_EXIST);
}
/* Get current value of the enable register that contains this GPE */
Status = AcpiHwRead (&EnableMask, &GpeRegisterInfo->EnableAddress);
if (ACPI_FAILURE (Status))
{
return (Status);
}
/* Set or clear just the bit that corresponds to this GPE */
RegisterBit = AcpiHwGetGpeRegisterBit (GpeEventInfo, GpeRegisterInfo);
switch (Action)
{
case ACPI_GPE_CONDITIONAL_ENABLE:
/* Only enable if the EnableForRun bit is set */
if (!(RegisterBit & GpeRegisterInfo->EnableForRun))
{
return (AE_BAD_PARAMETER);
}
/*lint -fallthrough */
case ACPI_GPE_ENABLE:
ACPI_SET_BIT (EnableMask, RegisterBit);
break;
case ACPI_GPE_DISABLE:
ACPI_CLEAR_BIT (EnableMask, RegisterBit);
break;
default:
ACPI_ERROR ((AE_INFO, "Invalid GPE Action, %u\n", Action));
return (AE_BAD_PARAMETER);
}
/* Write the updated enable mask */
Status = AcpiHwWrite (EnableMask, &GpeRegisterInfo->EnableAddress);
return (Status);
}