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

📄 evrgnini.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 2 页
字号:
	status =	    acpi_ut_evaluate_numeric_object(METHOD_NAME__SEG, pci_root_node,					    &pci_value);	if (ACPI_SUCCESS(status)) {		pci_id->segment = ACPI_LOWORD(pci_value);	}	/* The PCI bus number comes from the _BBN method */	status =	    acpi_ut_evaluate_numeric_object(METHOD_NAME__BBN, pci_root_node,					    &pci_value);	if (ACPI_SUCCESS(status)) {		pci_id->bus = ACPI_LOWORD(pci_value);	}	/* Complete this device's pci_id */	acpi_os_derive_pci_id(pci_root_node, region_obj->region.node, &pci_id);	*region_context = pci_id;	return_ACPI_STATUS(AE_OK);}/******************************************************************************* * * FUNCTION:    acpi_ev_pci_bar_region_setup * * PARAMETERS:  Handle              - Region we are interested in *              Function            - Start or stop *              handler_context     - Address space handler context *              region_context      - Region specific context * * RETURN:      Status * * DESCRIPTION: Setup a pci_bAR operation region * * MUTEX:       Assumes namespace is not locked * ******************************************************************************/acpi_statusacpi_ev_pci_bar_region_setup(acpi_handle handle,			     u32 function,			     void *handler_context, void **region_context){	ACPI_FUNCTION_TRACE("ev_pci_bar_region_setup");	return_ACPI_STATUS(AE_OK);}/******************************************************************************* * * FUNCTION:    acpi_ev_cmos_region_setup * * PARAMETERS:  Handle              - Region we are interested in *              Function            - Start or stop *              handler_context     - Address space handler context *              region_context      - Region specific context * * RETURN:      Status * * DESCRIPTION: Setup a CMOS operation region * * MUTEX:       Assumes namespace is not locked * ******************************************************************************/acpi_statusacpi_ev_cmos_region_setup(acpi_handle handle,			  u32 function,			  void *handler_context, void **region_context){	ACPI_FUNCTION_TRACE("ev_cmos_region_setup");	return_ACPI_STATUS(AE_OK);}/******************************************************************************* * * FUNCTION:    acpi_ev_default_region_setup * * PARAMETERS:  Handle              - Region we are interested in *              Function            - Start or stop *              handler_context     - Address space handler context *              region_context      - Region specific context * * RETURN:      Status * * DESCRIPTION: Default region initialization * ******************************************************************************/acpi_statusacpi_ev_default_region_setup(acpi_handle handle,			     u32 function,			     void *handler_context, void **region_context){	ACPI_FUNCTION_TRACE("ev_default_region_setup");	if (function == ACPI_REGION_DEACTIVATE) {		*region_context = NULL;	} else {		*region_context = handler_context;	}	return_ACPI_STATUS(AE_OK);}/******************************************************************************* * * FUNCTION:    acpi_ev_initialize_region * * PARAMETERS:  region_obj      - Region we are initializing *              acpi_ns_locked  - Is namespace locked? * * RETURN:      Status * * DESCRIPTION: Initializes the region, finds any _REG methods and saves them *              for execution at a later time * *              Get the appropriate address space handler for a newly *              created region. * *              This also performs address space specific initialization.  For *              example, PCI regions must have an _ADR object that contains *              a PCI address in the scope of the definition.  This address is *              required to perform an access to PCI config space. * ******************************************************************************/acpi_statusacpi_ev_initialize_region(union acpi_operand_object *region_obj,			  u8 acpi_ns_locked){	union acpi_operand_object *handler_obj;	union acpi_operand_object *obj_desc;	acpi_adr_space_type space_id;	struct acpi_namespace_node *node;	acpi_status status;	struct acpi_namespace_node *method_node;	acpi_name *reg_name_ptr = (acpi_name *) METHOD_NAME__REG;	union acpi_operand_object *region_obj2;	ACPI_FUNCTION_TRACE_U32("ev_initialize_region", acpi_ns_locked);	if (!region_obj) {		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	if (region_obj->common.flags & AOPOBJ_OBJECT_INITIALIZED) {		return_ACPI_STATUS(AE_OK);	}	region_obj2 = acpi_ns_get_secondary_object(region_obj);	if (!region_obj2) {		return_ACPI_STATUS(AE_NOT_EXIST);	}	node = acpi_ns_get_parent_node(region_obj->region.node);	space_id = region_obj->region.space_id;	/* Setup defaults */	region_obj->region.handler = NULL;	region_obj2->extra.method_REG = NULL;	region_obj->common.flags &= ~(AOPOBJ_SETUP_COMPLETE);	region_obj->common.flags |= AOPOBJ_OBJECT_INITIALIZED;	/* Find any "_REG" method associated with this region definition */	status = acpi_ns_search_node(*reg_name_ptr, node,				     ACPI_TYPE_METHOD, &method_node);	if (ACPI_SUCCESS(status)) {		/*		 * The _REG method is optional and there can be only one per region		 * definition.  This will be executed when the handler is attached		 * or removed		 */		region_obj2->extra.method_REG = method_node;	}	/*	 * The following loop depends upon the root Node having no parent	 * ie: acpi_gbl_root_node->parent_entry being set to NULL	 */	while (node) {		/* Check to see if a handler exists */		handler_obj = NULL;		obj_desc = acpi_ns_get_attached_object(node);		if (obj_desc) {			/* Can only be a handler if the object exists */			switch (node->type) {			case ACPI_TYPE_DEVICE:				handler_obj = obj_desc->device.handler;				break;			case ACPI_TYPE_PROCESSOR:				handler_obj = obj_desc->processor.handler;				break;			case ACPI_TYPE_THERMAL:				handler_obj = obj_desc->thermal_zone.handler;				break;			default:				/* Ignore other objects */				break;			}			while (handler_obj) {				/* Is this handler of the correct type? */				if (handler_obj->address_space.space_id ==				    space_id) {					/* Found correct handler */					ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,							  "Found handler %p for region %p in obj %p\n",							  handler_obj,							  region_obj,							  obj_desc));					status =					    acpi_ev_attach_region(handler_obj,								  region_obj,								  acpi_ns_locked);					/*					 * Tell all users that this region is usable by running the _REG					 * method					 */					if (acpi_ns_locked) {						status =						    acpi_ut_release_mutex						    (ACPI_MTX_NAMESPACE);						if (ACPI_FAILURE(status)) {							return_ACPI_STATUS							    (status);						}					}					status =					    acpi_ev_execute_reg_method					    (region_obj, 1);					if (acpi_ns_locked) {						status =						    acpi_ut_acquire_mutex						    (ACPI_MTX_NAMESPACE);						if (ACPI_FAILURE(status)) {							return_ACPI_STATUS							    (status);						}					}					return_ACPI_STATUS(AE_OK);				}				/* Try next handler in the list */				handler_obj = handler_obj->address_space.next;			}		}		/*		 * This node does not have the handler we need;		 * Pop up one level		 */		node = acpi_ns_get_parent_node(node);	}	/* If we get here, there is no handler for this region */	ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,			  "No handler for region_type %s(%X) (region_obj %p)\n",			  acpi_ut_get_region_name(space_id), space_id,			  region_obj));	return_ACPI_STATUS(AE_NOT_EXIST);}

⌨️ 快捷键说明

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