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

📄 evrgnini.c

📁 h内核
💻 C
📖 第 1 页 / 共 2 页
字号:
	/* The PCI segment number comes from the _SEG method */	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: Do any prep work for region handling * * 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: Do any prep work for region handling * * 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: Do any prep work for region handling * ******************************************************************************/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 + -