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

📄 evxface.c

📁 linux-2.4.29操作系统的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
 *              Handler         - Address of the handler * RETURN:      Status * * DESCRIPTION: Remove a handler for notifies on an ACPI device * ******************************************************************************/acpi_statusacpi_remove_notify_handler (	acpi_handle                     device,	u32                             handler_type,	acpi_notify_handler             handler){	union acpi_operand_object       *notify_obj;	union acpi_operand_object       *obj_desc;	struct acpi_namespace_node      *node;	acpi_status                     status;	ACPI_FUNCTION_TRACE ("acpi_remove_notify_handler");	/* Parameter validation */	if ((!device)  ||		(!handler) ||		(handler_type > ACPI_MAX_NOTIFY_HANDLER_TYPE)) {		return_ACPI_STATUS (AE_BAD_PARAMETER);	}	status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);	if (ACPI_FAILURE (status)) {		return_ACPI_STATUS (status);	}	/* Convert and validate the device handle */	node = acpi_ns_map_handle_to_node (device);	if (!node) {		status = AE_BAD_PARAMETER;		goto unlock_and_exit;	}	/*	 * Root Object	 */	if (device == ACPI_ROOT_OBJECT) {		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Removing notify handler for ROOT object.\n"));		if (((handler_type == ACPI_SYSTEM_NOTIFY) &&			  !acpi_gbl_system_notify.handler) ||			((handler_type == ACPI_DEVICE_NOTIFY) &&			  !acpi_gbl_device_notify.handler)) {			status = AE_NOT_EXIST;			goto unlock_and_exit;		}		if (handler_type == ACPI_SYSTEM_NOTIFY) {			acpi_gbl_system_notify.node  = NULL;			acpi_gbl_system_notify.handler = NULL;			acpi_gbl_system_notify.context = NULL;		}		else {			acpi_gbl_device_notify.node  = NULL;			acpi_gbl_device_notify.handler = NULL;			acpi_gbl_device_notify.context = NULL;		}	}	/*	 * All Other Objects	 */	else {		/* Notifies allowed on this object? */		if (!acpi_ev_is_notify_object (node)) {			status = AE_TYPE;			goto unlock_and_exit;		}		/* Check for an existing internal object */		obj_desc = acpi_ns_get_attached_object (node);		if (!obj_desc) {			status = AE_NOT_EXIST;			goto unlock_and_exit;		}		/* Object exists - make sure there's an existing handler */		if (handler_type == ACPI_SYSTEM_NOTIFY) {			notify_obj = obj_desc->common_notify.system_notify;		}		else {			notify_obj = obj_desc->common_notify.device_notify;		}		if ((!notify_obj) ||			(notify_obj->notify.handler != handler)) {			status = AE_BAD_PARAMETER;			goto unlock_and_exit;		}		/* Remove the handler */		if (handler_type == ACPI_SYSTEM_NOTIFY) {			obj_desc->common_notify.system_notify = NULL;		}		else {			obj_desc->common_notify.device_notify = NULL;		}		acpi_ut_remove_reference (notify_obj);	}unlock_and_exit:	(void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);	return_ACPI_STATUS (status);}/******************************************************************************* * * FUNCTION:    acpi_install_gpe_handler * * PARAMETERS:  gpe_number      - The GPE number within the GPE block *              gpe_block       - GPE block (NULL == FADT GPEs) *              Type            - Whether this GPE should be treated as an *                                edge- or level-triggered interrupt. *              Handler         - Address of the handler *              Context         - Value passed to the handler on each GPE * * RETURN:      Status * * DESCRIPTION: Install a handler for a General Purpose Event. * ******************************************************************************/acpi_statusacpi_install_gpe_handler (	acpi_handle                     gpe_device,	u32                             gpe_number,	u32                             type,	acpi_gpe_handler                handler,	void                            *context){	acpi_status                     status;	struct acpi_gpe_event_info      *gpe_event_info;	ACPI_FUNCTION_TRACE ("acpi_install_gpe_handler");	/* Parameter validation */	if (!handler) {		return_ACPI_STATUS (AE_BAD_PARAMETER);	}	status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);	if (ACPI_FAILURE (status)) {		return_ACPI_STATUS (status);	}	/* Ensure that we have a valid GPE number */	gpe_event_info = acpi_ev_get_gpe_event_info (gpe_device, gpe_number);	if (!gpe_event_info) {		status = AE_BAD_PARAMETER;		goto unlock_and_exit;	}	/* Make sure that there isn't a handler there already */	if (gpe_event_info->handler) {		status = AE_ALREADY_EXISTS;		goto unlock_and_exit;	}	/* Install the handler */	acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);	gpe_event_info->handler = handler;	gpe_event_info->context = context;	gpe_event_info->flags = (u8) type;	acpi_os_release_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);	/* Clear the GPE (of stale events), the enable it */	status = acpi_hw_clear_gpe (gpe_event_info);	if (ACPI_FAILURE (status)) {		goto unlock_and_exit;	}	status = acpi_hw_enable_gpe (gpe_event_info);unlock_and_exit:	(void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);	return_ACPI_STATUS (status);}/******************************************************************************* * * FUNCTION:    acpi_remove_gpe_handler * * PARAMETERS:  gpe_number      - The event to remove a handler *              gpe_block       - GPE block (NULL == FADT GPEs) *              Handler         - Address of the handler * * RETURN:      Status * * DESCRIPTION: Remove a handler for a General Purpose acpi_event. * ******************************************************************************/acpi_statusacpi_remove_gpe_handler (	acpi_handle                     gpe_device,	u32                             gpe_number,	acpi_gpe_handler                handler){	acpi_status                     status;	struct acpi_gpe_event_info      *gpe_event_info;	ACPI_FUNCTION_TRACE ("acpi_remove_gpe_handler");	/* Parameter validation */	if (!handler) {		return_ACPI_STATUS (AE_BAD_PARAMETER);	}	status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);	if (ACPI_FAILURE (status)) {		return_ACPI_STATUS (status);	}	/* Ensure that we have a valid GPE number */	gpe_event_info = acpi_ev_get_gpe_event_info (gpe_device, gpe_number);	if (!gpe_event_info) {		status = AE_BAD_PARAMETER;		goto unlock_and_exit;	}	/* Disable the GPE before removing the handler */	status = acpi_hw_disable_gpe (gpe_event_info);	if (ACPI_FAILURE (status)) {		goto unlock_and_exit;	}	/* Make sure that the installed handler is the same */	if (gpe_event_info->handler != handler) {		(void) acpi_hw_enable_gpe (gpe_event_info);		status = AE_BAD_PARAMETER;		goto unlock_and_exit;	}	/* Remove the handler */	acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);	gpe_event_info->handler = NULL;	gpe_event_info->context = NULL;	acpi_os_release_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);unlock_and_exit:	(void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);	return_ACPI_STATUS (status);}/******************************************************************************* * * FUNCTION:    acpi_acquire_global_lock * * PARAMETERS:  Timeout         - How long the caller is willing to wait *              out_handle      - A handle to the lock if acquired * * RETURN:      Status * * DESCRIPTION: Acquire the ACPI Global Lock * ******************************************************************************/acpi_statusacpi_acquire_global_lock (	u16                             timeout,	u32                             *handle){	acpi_status                     status;	if (!handle) {		return (AE_BAD_PARAMETER);	}	status = acpi_ex_enter_interpreter ();	if (ACPI_FAILURE (status)) {		return (status);	}	status = acpi_ev_acquire_global_lock (timeout);	acpi_ex_exit_interpreter ();	if (ACPI_SUCCESS (status)) {		acpi_gbl_global_lock_handle++;		*handle = acpi_gbl_global_lock_handle;	}	return (status);}/******************************************************************************* * * FUNCTION:    acpi_release_global_lock * * PARAMETERS:  Handle      - Returned from acpi_acquire_global_lock * * RETURN:      Status * * DESCRIPTION: Release the ACPI Global Lock * ******************************************************************************/acpi_statusacpi_release_global_lock (	u32                             handle){	acpi_status                     status;	if (handle != acpi_gbl_global_lock_handle) {		return (AE_NOT_ACQUIRED);	}	status = acpi_ev_release_global_lock ();	return (status);}

⌨️ 快捷键说明

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