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

📄 bmpower.c

📁 MIZI Research, Inc.发布的嵌入式Linux内核源码
💻 C
📖 第 1 页 / 共 2 页
字号:
			(BM_DRIVER_CONTEXT*)(&pr));		if (ACPI_FAILURE(status)) {			ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Invalid reference to power resource [%02x].\n", target_list->handles[i]));			continue;		}		if (++pr->reference_count == 1) {			/* TBD: Need ordering based upon resource_order */			status = bm_pr_set_state(pr, ACPI_STATE_D0);			if (ACPI_FAILURE(status)) {				/* TBD: How do we handle this? */				ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Unable to change power state for power resource [%02x].\n", target_list->handles[i]));			}		}	}	/*	 * Dereference Current:	 * --------------------	 * Dereference all resources for the current power state.  Power	 * resources no longer referenced (new reference count of 0) are	 * turned off.	 */	for (i = 0; i < current_list->count; i++) {		status = bm_get_device_context(current_list->handles[i],			(BM_DRIVER_CONTEXT*)(&pr));		if (ACPI_FAILURE(status)) {			ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Invalid reference to power resource [%02x].\n", target_list->handles[i]));			continue;		}		if (--pr->reference_count == 0) {			/* TBD: Need ordering based upon resource_order */			status = bm_pr_set_state(pr, ACPI_STATE_D3);			if (ACPI_FAILURE(status)) {				/* TBD: How do we handle this? */				ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unable to change power state for power resource [%02x].\n", current_list->handles[i]));			}		}	}	return_ACPI_STATUS(status);}/**************************************************************************** * * FUNCTION:    bm_pr_add_device * * PARAMETERS: * * RETURN: * * DESCRIPTION: * ****************************************************************************/acpi_statusbm_pr_add_device (	BM_HANDLE               device_handle,	void                    **context){	acpi_status             status = AE_OK;	BM_POWER_RESOURCE	*pr = NULL;	BM_DEVICE		*device = NULL;	acpi_buffer		buffer;	acpi_object		acpi_object;	FUNCTION_TRACE("bm_pr_add_device");	ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Adding power resource [%02x].\n", device_handle));	if (!context || *context) {		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	buffer.length = sizeof(acpi_object);	buffer.pointer = &acpi_object;	/*	 * Get information on this device.	 */	status = bm_get_device_info(device_handle, &device);	if (ACPI_FAILURE(status)) {		return_ACPI_STATUS(status);	}	/*	 * Allocate a new BM_POWER_RESOURCE structure.	 */	pr = acpi_os_callocate(sizeof(BM_POWER_RESOURCE));	if (!pr) {		return_ACPI_STATUS(AE_NO_MEMORY);	}	pr->device_handle = device->handle;	pr->acpi_handle = device->acpi_handle;	/*	 * Get information on this power resource.	 */	status = acpi_evaluate_object(pr->acpi_handle, NULL, NULL, &buffer);	if (ACPI_FAILURE(status)) {		goto end;	}	pr->system_level = acpi_object.power_resource.system_level;	pr->resource_order = acpi_object.power_resource.resource_order;	pr->state = ACPI_STATE_UNKNOWN;	pr->reference_count = 0;	/*	 * Get the power resource's current state (ON|OFF).	 */	status = bm_pr_get_state(pr);end:	if (ACPI_FAILURE(status)) {		acpi_os_free(pr);	}	else {		*context = pr;		bm_pr_print(pr);	}	return_ACPI_STATUS(status);}/**************************************************************************** * * FUNCTION:    bm_pr_remove_device * * PARAMETERS: * * RETURN: * * DESCRIPTION: * ****************************************************************************/acpi_statusbm_pr_remove_device (	void                    **context){	acpi_status             status = AE_OK;	BM_POWER_RESOURCE	*pr = NULL;	FUNCTION_TRACE("bm_pr_remove_device");	if (!context || !*context) {		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	pr = (BM_POWER_RESOURCE*)*context;	ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Removing power resource [%02x].\n", pr->device_handle));	acpi_os_free(pr);	return_ACPI_STATUS(status);}/**************************************************************************** *                             External Functions ****************************************************************************//**************************************************************************** * * FUNCTION:    bm_pr_initialize * * PARAMETERS:  <none> * * RETURN: * * DESCRIPTION: * ****************************************************************************/acpi_statusbm_pr_initialize (void){	acpi_status             status = AE_OK;	BM_DEVICE_ID		criteria;	BM_DRIVER		driver;	FUNCTION_TRACE("bm_pr_initialize");	MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID));	MEMSET(&driver, 0, sizeof(BM_DRIVER));	criteria.type = BM_TYPE_POWER_RESOURCE;	driver.notify = &bm_pr_notify;	driver.request = &bm_pr_request;	status = bm_register_driver(&criteria, &driver);	return_ACPI_STATUS(status);}/**************************************************************************** * * FUNCTION:    bm_pr_terminate * * PARAMETERS: * * RETURN:	 * * DESCRIPTION: * ****************************************************************************/acpi_statusbm_pr_terminate (void){	acpi_status             status = AE_OK;	BM_DEVICE_ID		criteria;	BM_DRIVER		driver;	FUNCTION_TRACE("bm_pr_terminate");	MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID));	MEMSET(&driver, 0, sizeof(BM_DRIVER));	criteria.type = BM_TYPE_POWER_RESOURCE;	driver.notify = &bm_pr_notify;	driver.request = &bm_pr_request;	status = bm_unregister_driver(&criteria, &driver);	return_ACPI_STATUS(status);}/**************************************************************************** * * FUNCTION:    bm_pr_notify * * PARAMETERS: * * RETURN:	 * * DESCRIPTION: * ****************************************************************************/acpi_statusbm_pr_notify (	BM_NOTIFY               notify_type,	BM_HANDLE               device_handle,	void                    **context){	acpi_status             status = AE_OK;	FUNCTION_TRACE("bm_pr_notify");	switch (notify_type) {	case BM_NOTIFY_DEVICE_ADDED:		status = bm_pr_add_device(device_handle, context);		break;	case BM_NOTIFY_DEVICE_REMOVED:		status = bm_pr_remove_device(context);		break;	default:		status = AE_SUPPORT;		break;	}	return_ACPI_STATUS(status);}/**************************************************************************** * * FUNCTION:    bm_pr_request * * PARAMETERS: * * RETURN: * * DESCRIPTION: * ****************************************************************************/acpi_statusbm_pr_request (	BM_REQUEST		*request,	void                    *context){	acpi_status             status = AE_OK;	BM_POWER_RESOURCE	*pr = NULL;	FUNCTION_TRACE("bm_pr_request");	/*	 * Must have a valid request structure and context.	 */	if (!request || !context) {		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	/*	 * context contains information specific to this power resource.	 */	pr = (BM_POWER_RESOURCE*)context;	/*	 * Handle request:	 * ---------------	 */	switch (request->command) {	default:		status = AE_SUPPORT;		break;	}	request->status = status;	return_ACPI_STATUS(status);}

⌨️ 快捷键说明

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