⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmutils.c

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
 * * DESCRIPTION: Pop a state object from a state stack * ******************************************************************************/ACPI_GENERIC_STATE *acpi_cm_pop_generic_state (	ACPI_GENERIC_STATE      **list_head){	ACPI_GENERIC_STATE      *state;	/* Remove the state object at the head of the list (stack) */	state = *list_head;	if (state) {		/* Update the list head */		*list_head = state->common.next;	}	return (state);}/******************************************************************************* * * FUNCTION:    Acpi_cm_create_generic_state * * PARAMETERS:  None * * RETURN:      Status * * DESCRIPTION: Create a generic state object.  Attempt to obtain one from *              the global state cache;  If none available, create a new one. * ******************************************************************************/ACPI_GENERIC_STATE *acpi_cm_create_generic_state (void){	ACPI_GENERIC_STATE      *state;	acpi_cm_acquire_mutex (ACPI_MTX_CACHES);	acpi_gbl_state_cache_requests++;	/* Check the cache first */	if (acpi_gbl_generic_state_cache) {		/* There is an object available, use it */		state = acpi_gbl_generic_state_cache;		acpi_gbl_generic_state_cache = state->common.next;		state->common.next = NULL;		acpi_gbl_state_cache_hits++;		acpi_gbl_generic_state_cache_depth--;		acpi_cm_release_mutex (ACPI_MTX_CACHES);	}	else {		/* The cache is empty, create a new object */		acpi_cm_release_mutex (ACPI_MTX_CACHES);		state = acpi_cm_callocate (sizeof (ACPI_GENERIC_STATE));	}	/* Initialize */	if (state) {		/* Always zero out the object before init */		MEMSET (state, 0, sizeof (ACPI_GENERIC_STATE));		state->common.data_type = ACPI_DESC_TYPE_STATE;	}	return (state);}/******************************************************************************* * * FUNCTION:    Acpi_cm_create_update_state * * PARAMETERS:  Object              - Initial Object to be installed in the *                                    state *              Action              - Update action to be performed * * RETURN:      Status * * DESCRIPTION: Create an "Update State" - a flavor of the generic state used *              to update reference counts and delete complex objects such *              as packages. * ******************************************************************************/ACPI_GENERIC_STATE *acpi_cm_create_update_state (	ACPI_OPERAND_OBJECT     *object,	u16                     action){	ACPI_GENERIC_STATE      *state;	/* Create the generic state object */	state = acpi_cm_create_generic_state ();	if (!state) {		return (NULL);	}	/* Init fields specific to the update struct */	state->update.object = object;	state->update.value  = action;	return (state);}/******************************************************************************* * * FUNCTION:    Acpi_cm_create_control_state * * PARAMETERS:  None * * RETURN:      Status * * DESCRIPTION: Create a "Control State" - a flavor of the generic state used *              to support nested IF/WHILE constructs in the AML. * ******************************************************************************/ACPI_GENERIC_STATE *acpi_cm_create_control_state (	void){	ACPI_GENERIC_STATE      *state;	/* Create the generic state object */	state = acpi_cm_create_generic_state ();	if (!state) {		return (NULL);	}	/* Init fields specific to the control struct */	state->common.state = CONTROL_CONDITIONAL_EXECUTING;	return (state);}/******************************************************************************* * * FUNCTION:    Acpi_cm_delete_generic_state * * PARAMETERS:  State               - The state object to be deleted * * RETURN:      Status * * DESCRIPTION: Put a state object back into the global state cache.  The object *              is not actually freed at this time. * ******************************************************************************/voidacpi_cm_delete_generic_state (	ACPI_GENERIC_STATE      *state){	/* If cache is full, just free this state object */	if (acpi_gbl_generic_state_cache_depth >= MAX_STATE_CACHE_DEPTH) {		acpi_cm_free (state);	}	/* Otherwise put this object back into the cache */	else {		acpi_cm_acquire_mutex (ACPI_MTX_CACHES);		/* Clear the state */		MEMSET (state, 0, sizeof (ACPI_GENERIC_STATE));		state->common.data_type = ACPI_DESC_TYPE_STATE;		/* Put the object at the head of the global cache list */		state->common.next = acpi_gbl_generic_state_cache;		acpi_gbl_generic_state_cache = state;		acpi_gbl_generic_state_cache_depth++;		acpi_cm_release_mutex (ACPI_MTX_CACHES);	}	return;}/******************************************************************************* * * FUNCTION:    Acpi_cm_delete_generic_state_cache * * PARAMETERS:  None * * RETURN:      Status * * DESCRIPTION: Purge the global state object cache.  Used during subsystem *              termination. * ******************************************************************************/voidacpi_cm_delete_generic_state_cache (	void){	ACPI_GENERIC_STATE      *next;	/* Traverse the global cache list */	while (acpi_gbl_generic_state_cache) {		/* Delete one cached state object */		next = acpi_gbl_generic_state_cache->common.next;		acpi_cm_free (acpi_gbl_generic_state_cache);		acpi_gbl_generic_state_cache = next;		acpi_gbl_generic_state_cache_depth--;	}	return;}/******************************************************************************* * * FUNCTION:    Acpi_cm_resolve_package_references * * PARAMETERS:  Obj_desc        - The Package object on which to resolve refs * * RETURN:      Status * * DESCRIPTION: Walk through a package and turn internal references into values * ******************************************************************************/ACPI_STATUSacpi_cm_resolve_package_references (	ACPI_OPERAND_OBJECT     *obj_desc){	u32                 count;	ACPI_OPERAND_OBJECT *sub_object;	if (obj_desc->common.type != ACPI_TYPE_PACKAGE) {		/* Must be a package */		REPORT_ERROR (("Must resolve Package Refs on a Package\n"));		return(AE_ERROR);	}	for (count = 0; count < obj_desc->package.count; count++) {		sub_object = obj_desc->package.elements[count];		if (sub_object->common.type == INTERNAL_TYPE_REFERENCE) {			if (sub_object->reference.op_code == AML_ZERO_OP) {				sub_object->common.type = ACPI_TYPE_NUMBER;				sub_object->number.value = 0;			}			else if (sub_object->reference.op_code == AML_ONE_OP) {				sub_object->common.type = ACPI_TYPE_NUMBER;				sub_object->number.value = 1;			}			else if (sub_object->reference.op_code == AML_ONES_OP) {				sub_object->common.type = ACPI_TYPE_NUMBER;				sub_object->number.value = ACPI_INTEGER_MAX;			}		}	}	return(AE_OK);}/******************************************************************************* * * FUNCTION:    _Report_error * * PARAMETERS:  Module_name         - Caller's module name (for error output) *              Line_number         - Caller's line number (for error output) *              Component_id        - Caller's component ID (for error output) *              Message             - Error message to use on failure * * RETURN:      None * * DESCRIPTION: Print error message from KD table * ******************************************************************************/void_report_error (	NATIVE_CHAR             *module_name,	u32                     line_number,	u32                     component_id){	acpi_os_printf ("%8s-%04d: *** Error: ", module_name, line_number);}/******************************************************************************* * * FUNCTION:    _Report_warning * * PARAMETERS:  Module_name         - Caller's module name (for error output) *              Line_number         - Caller's line number (for error output) *              Component_id        - Caller's component ID (for error output) *              Message             - Error message to use on failure * * RETURN:      None * * DESCRIPTION: Print warning message from KD table * ******************************************************************************/void_report_warning (	NATIVE_CHAR             *module_name,	u32                     line_number,	u32                     component_id){	acpi_os_printf ("%8s-%04d: *** Warning: ", module_name, line_number);}/******************************************************************************* * * FUNCTION:    _Report_info * * PARAMETERS:  Module_name         - Caller's module name (for error output) *              Line_number         - Caller's line number (for error output) *              Component_id        - Caller's component ID (for error output) *              Message             - Error message to use on failure * * RETURN:      None * * DESCRIPTION: Print information message from KD table * ******************************************************************************/void_report_info (	NATIVE_CHAR             *module_name,	u32                     line_number,	u32                     component_id){	acpi_os_printf ("%8s-%04d: *** Info: ", module_name, line_number);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -