亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bt.c

?? 內核linux2.4.20,可跟rtlinux3.2打補丁 組成實時linux系統(tǒng),編譯內核
?? C
字號:
/***************************************************************************** * * Module Name: bt.c *   $Revision: 29 $ * *****************************************************************************//* *  Copyright (C) 2000, 2001 Andrew Grover * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <acpi.h>#include "bt.h"#define _COMPONENT		ACPI_BATTERY	MODULE_NAME 		("bt")/**************************************************************************** *                            Internal Functions ****************************************************************************//**************************************************************************** * * FUNCTION:	bt_print * * PARAMETERS:	 * * RETURN:	 * * DESCRIPTION: Prints out information on a specific battery. * ****************************************************************************/voidbt_print (	BT_CONTEXT		*battery){#ifdef ACPI_DEBUG	acpi_buffer 		buffer;	PROC_NAME("bt_print");	if (!battery) {		return;	}	buffer.length = 256;	buffer.pointer = acpi_os_callocate(buffer.length);	if (!buffer.pointer) {		return;	}	/*	 * Get the full pathname for this ACPI object.	 */	acpi_get_name(battery->acpi_handle, ACPI_FULL_PATHNAME, &buffer);	/*	 * Print out basic battery information.	 */	ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n"));	ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "| Battery[%02x]:[%p] %s\n", battery->device_handle, battery->acpi_handle, (char*)buffer.pointer));	ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "|   uid[%s] is_present[%d] power_units[%s]\n", battery->uid, battery->is_present, battery->power_units));	ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INFO, "+------------------------------------------------------------\n"));	acpi_os_free(buffer.pointer);#endif /*ACPI_DEBUG*/	return;}/**************************************************************************** * * FUNCTION:	bt_get_info * * PARAMETERS:	 * * RETURN:	 * * DESCRIPTION: * * NOTES:	Allocates battery_info - which must be freed by the caller. * ****************************************************************************/acpi_statusbt_get_info (	BT_CONTEXT		*battery,	BT_BATTERY_INFO 	**battery_info){	acpi_status 		status = AE_OK;	acpi_buffer 		bif_buffer, package_format, package_data;	acpi_object 		*package = NULL;	FUNCTION_TRACE("bt_get_info");	if (!battery || !battery_info || *battery_info) {		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	memset(&bif_buffer, 0, sizeof(acpi_buffer));	/*	 * Evalute _BIF:	 * -------------	 * And be sure to deallocate bif_buffer.pointer!	 */	status = bm_evaluate_object(battery->acpi_handle, "_BIF", NULL,		&bif_buffer);	if (ACPI_FAILURE(status)) {		return_ACPI_STATUS(status);	}	/*	 * Extract Package Data:	 * ---------------------	 * Type-cast this bif_buffer to a package and use helper	 * functions to convert results into BT_BATTERY_INFO structure.	 * The first attempt is just to get the size of the package	 * data; the second gets the data (once we know the required	 * bif_buffer size).	 */	status = bm_cast_buffer(&bif_buffer, (void**)&package,		sizeof(acpi_object));	if (ACPI_FAILURE(status)) {		goto end;	}	package_format.length = sizeof("NNNNNNNNNSSSS");	package_format.pointer = "NNNNNNNNNSSSS";	memset(&package_data, 0, sizeof(acpi_buffer));	status = bm_extract_package_data(package, &package_format,		&package_data);	if (status != AE_BUFFER_OVERFLOW) {		if (status == AE_OK) {			status = AE_ERROR;		}		goto end;	}	package_data.pointer = acpi_os_callocate(package_data.length);	if (!package_data.pointer) {		return_ACPI_STATUS(AE_NO_MEMORY);	}	status = bm_extract_package_data(package, &package_format,		&package_data);	if (ACPI_FAILURE(status)) {		acpi_os_free(package_data.pointer);		goto end;	}	*battery_info = package_data.pointer;end:	acpi_os_free(bif_buffer.pointer);	return_ACPI_STATUS(status);}/**************************************************************************** * * FUNCTION:	bt_get_status * * PARAMETERS:	 * * RETURN:	 * * DESCRIPTION: * ****************************************************************************/acpi_statusbt_get_status (	BT_CONTEXT		*battery,	BT_BATTERY_STATUS	**battery_status){	acpi_status 		status = AE_OK;	acpi_buffer 		bst_buffer, package_format, package_data;	acpi_object 		*package = NULL;	FUNCTION_TRACE("bt_get_status");	if (!battery || !battery_status || *battery_status) {		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	memset(&bst_buffer, 0, sizeof(acpi_buffer));	/*	 * Evalute _BST:	 * -------------	 * And be sure to deallocate bst_buffer.pointer!	 */	status = bm_evaluate_object(battery->acpi_handle, "_BST",		NULL, &bst_buffer);	if (ACPI_FAILURE(status)) {		return_ACPI_STATUS(status);	}	/*	 * Extract Package Data:	 * ---------------------	 * Type-cast this bst_buffer to a package and use helper	 * functions to convert results into BT_BATTERY_STATUS structure.	 * The first attempt is just to get the size of the package data;	 * the second gets the data (once we know the required bst_buffer	 * size).	 */	status = bm_cast_buffer(&bst_buffer, (void**)&package,		sizeof(acpi_object));	if (ACPI_FAILURE(status)) {		goto end;	}	package_format.length = sizeof("NNNN");	package_format.pointer = "NNNN";	memset(&package_data, 0, sizeof(acpi_buffer));	status = bm_extract_package_data(package, &package_format,		&package_data);	if (status != AE_BUFFER_OVERFLOW) {		if (status == AE_OK) {			status = AE_ERROR;		}		goto end;	}	package_data.pointer = acpi_os_callocate(package_data.length);	if (!package_data.pointer) {		return_ACPI_STATUS(AE_NO_MEMORY);	}	status = bm_extract_package_data(package, &package_format,		&package_data);	if (ACPI_FAILURE(status)) {		acpi_os_free(package_data.pointer);		goto end;	}	*battery_status = package_data.pointer;end:	acpi_os_free(bst_buffer.pointer);	return_ACPI_STATUS(status);}/**************************************************************************** * * FUNCTION:	bt_check_device * * PARAMETERS:	 * * RETURN:	 * * DESCRIPTION: * ****************************************************************************/acpi_statusbt_check_device (	BT_CONTEXT		*battery){	acpi_status 		status = AE_OK;	BM_DEVICE_STATUS	battery_status = BM_STATUS_UNKNOWN;	u32 			was_present = FALSE;	BT_BATTERY_INFO 	*battery_info = NULL;	FUNCTION_TRACE("bt_check_device");	if (!battery) {		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	was_present = battery->is_present;	/*	 * Battery Present?	 * ----------------	 * Get the device status and check if battery slot is occupied.	 */	status = bm_get_device_status(battery->device_handle, &battery_status);	if (ACPI_FAILURE(status)) {		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Unable to get battery status.\n"));		return_ACPI_STATUS(status);	}	if (battery_status & BM_STATUS_BATTERY_PRESENT) {		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Battery socket occupied.\n"));		battery->is_present = TRUE;	}	else {		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Battery socket not occupied.\n"));		battery->is_present = FALSE;	}	/*	 * Battery Appeared?	 * -----------------	 */	if (!was_present && battery->is_present) {		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Battery insertion detected.\n"));		/*		 * Units of Power?		 * ---------------		 * Get the 'units of power', as we'll need this to report		 * status information.		 */		status = bt_get_info(battery, &battery_info);		if (ACPI_SUCCESS(status)) {			battery->power_units = (battery_info->power_unit)				? BT_POWER_UNITS_AMPS : BT_POWER_UNITS_WATTS;			acpi_os_free(battery_info);		}	}	/*	 * Battery Disappeared?	 * --------------------	 */	else if (was_present && !battery->is_present) {		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Battery removal detected.\n"));		battery->power_units = BT_POWER_UNITS_DEFAULT;	}	return_ACPI_STATUS(status);}/***************************************************************************** * * FUNCTION:	bt_add_device * * PARAMETERS:	 * * RETURN:	 * * DESCRIPTION: * ****************************************************************************/acpi_statusbt_add_device (	BM_HANDLE		device_handle,	void			**context){	acpi_status 		status = AE_OK;	BM_DEVICE		*device = NULL;	BT_CONTEXT		*battery = NULL;	FUNCTION_TRACE("bt_add_device");	ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Adding battery device [%02x].\n", device_handle));	if (!context || *context) {		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	/*	 * Get information on this device.	 */	status = bm_get_device_info(device_handle, &device);	if (ACPI_FAILURE(status)) {		return_ACPI_STATUS(status);	}	/*	 * Allocate a new BT_CONTEXT structure.	 */	battery = acpi_os_callocate(sizeof(BT_CONTEXT));	if (!battery) {		return_ACPI_STATUS(AE_NO_MEMORY);	}	battery->device_handle = device->handle;	battery->acpi_handle = device->acpi_handle;	strncpy(battery->uid, device->id.uid, sizeof(battery->uid));	battery->power_units = BT_POWER_UNITS_DEFAULT;	battery->is_present = FALSE;	/*	 * See if battery is really present.	 */	status = bt_check_device(battery);	if (ACPI_FAILURE(status)) {		goto end;	}	status = bt_osl_add_device(battery);	if (ACPI_FAILURE(status)) {		goto end;	}	*context = battery;	bt_print(battery);end:	if (ACPI_FAILURE(status)) {		acpi_os_free(battery);	}	return_ACPI_STATUS(status);}/***************************************************************************** * * FUNCTION:	bt_remove_device * * PARAMETERS:	 * * RETURN:	 * * DESCRIPTION: * ****************************************************************************/acpi_statusbt_remove_device (	void			**context){	acpi_status 		status = AE_OK;	BT_CONTEXT		*battery = NULL;	FUNCTION_TRACE("bt_remove_device");	if (!context || !*context) {		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	battery = (BT_CONTEXT*)*context;	ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Removing battery device [%02x].\n", battery->device_handle));	bt_osl_remove_device(battery);	acpi_os_free(battery);	*context = NULL;	return_ACPI_STATUS(status);}/***************************************************************************** *                               External Functions *****************************************************************************//***************************************************************************** * * FUNCTION:	bt_initialize * * PARAMETERS:	<none> * * RETURN:	 * * DESCRIPTION: * ****************************************************************************/acpi_statusbt_initialize (void){	acpi_status		status = AE_OK;	BM_DEVICE_ID		criteria;	BM_DRIVER		driver;	FUNCTION_TRACE("bt_initialize");	memset(&criteria, 0, sizeof(BM_DEVICE_ID));	memset(&driver, 0, sizeof(BM_DRIVER));	/*	 * Register driver for driver method battery devices.	 */	MEMCPY(criteria.hid, BT_HID_CM_BATTERY, sizeof(BT_HID_CM_BATTERY));	driver.notify = &bt_notify;	driver.request = &bt_request;	status = bm_register_driver(&criteria, &driver);	return_ACPI_STATUS(status);}/**************************************************************************** * * FUNCTION:	bt_terminate * * PARAMETERS:	<none> * * RETURN:	 * * DESCRIPTION: * ****************************************************************************/acpi_statusbt_terminate (void){	acpi_status		status = AE_OK;	BM_DEVICE_ID		criteria;	BM_DRIVER		driver;	FUNCTION_TRACE("bt_terminate");	memset(&criteria, 0, sizeof(BM_DEVICE_ID));	memset(&driver, 0, sizeof(BM_DRIVER));	/*	 * Unregister driver for driver method battery devices.	 */	MEMCPY(criteria.hid, BT_HID_CM_BATTERY, sizeof(BT_HID_CM_BATTERY));	driver.notify = &bt_notify;	driver.request = &bt_request;	status = bm_unregister_driver(&criteria, &driver);	return_ACPI_STATUS(status);}/**************************************************************************** * * FUNCTION:	bt_notify * * PARAMETERS:	<none> * * RETURN:	 * * DESCRIPTION: * ****************************************************************************/acpi_statusbt_notify (	BM_NOTIFY		notify_type,	BM_HANDLE		device_handle,	void			**context){	acpi_status 		status = AE_OK;	FUNCTION_TRACE("bt_notify");	if (!context) {		return_ACPI_STATUS(AE_BAD_PARAMETER);	}	switch (notify_type) {	case BM_NOTIFY_DEVICE_ADDED:		status = bt_add_device(device_handle, context);		break;	case BM_NOTIFY_DEVICE_REMOVED:		status = bt_remove_device(context);		break;	case BT_NOTIFY_STATUS_CHANGE:		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Status change (_BST) event detected.\n"));		status = bt_osl_generate_event(notify_type,			((BT_CONTEXT*)*context));		break;	case BT_NOTIFY_INFORMATION_CHANGE:		ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Information change (_BIF) event detected.\n"));		status = bt_check_device((BT_CONTEXT*)*context);		if (ACPI_SUCCESS(status)) {			status = bt_osl_generate_event(notify_type,				((BT_CONTEXT*)*context));		}		break;	default:		status = AE_SUPPORT;		break;	}	return_ACPI_STATUS(status);}/**************************************************************************** * * FUNCTION:	bt_request * * PARAMETERS:	 * * RETURN:	 * * DESCRIPTION: * ****************************************************************************/acpi_statusbt_request (	BM_REQUEST		*request,	void			*context){	acpi_status 		status = AE_OK;	FUNCTION_TRACE("bt_request");	/*	 * Must have a valid request structure and context.	 */	if (!request || !context)		return_ACPI_STATUS(AE_BAD_PARAMETER);	/*	 * 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 + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成年人午夜久久久| 国产麻豆成人传媒免费观看| 国产乱码精品1区2区3区| 一本大道av伊人久久综合| 欧美一区二区三区免费大片 | 欧美日韩免费高清一区色橹橹| 久久久亚洲午夜电影| 日韩精品免费专区| 91高清视频在线| 国产亚洲一本大道中文在线| 日韩va亚洲va欧美va久久| 99精品桃花视频在线观看| 久久综合中文字幕| 婷婷丁香激情综合| 91黄色免费版| 国产精品久久久久久久蜜臀 | 亚洲国产色一区| 99久久精品费精品国产一区二区| 久久蜜臀中文字幕| 国内外精品视频| 正在播放一区二区| 亚洲第一会所有码转帖| 色婷婷久久99综合精品jk白丝| 国产拍欧美日韩视频二区| 狠狠色丁香婷婷综合| 91精品国产综合久久久蜜臀粉嫩| 亚洲国产中文字幕在线视频综合| 91麻豆.com| 国产精品欧美久久久久一区二区| 国产九色精品成人porny| 日韩欧美中文字幕一区| 亚欧色一区w666天堂| 在线这里只有精品| 亚洲激情自拍视频| 色综合色综合色综合色综合色综合| 中文字幕免费不卡在线| 国产91丝袜在线播放九色| 国产日韩欧美精品综合| 国产精品一区一区三区| 久久亚洲综合av| 国产乱人伦偷精品视频免下载| 欧美草草影院在线视频| 久久国产综合精品| 日韩精品中午字幕| 极品少妇xxxx偷拍精品少妇| 欧美tk丨vk视频| 国产精品一品二品| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲大尺度视频在线观看| 欧美日韩一区二区在线观看| 天堂va蜜桃一区二区三区 | 成人小视频免费在线观看| 国产三区在线成人av| 粉嫩嫩av羞羞动漫久久久 | 日韩欧美国产精品一区| 激情综合网激情| 国产亚洲欧美色| 成人av网站在线观看| 亚洲精品你懂的| 在线播放视频一区| 麻豆国产精品视频| 国产欧美综合在线观看第十页 | 日韩精品一级中文字幕精品视频免费观看 | 成人午夜免费视频| 中文字幕日韩一区| 欧美性生交片4| 奇米影视一区二区三区小说| 久久丝袜美腿综合| 91色九色蝌蚪| 日韩激情一区二区| 国产欧美一区二区精品久导航| 91在线播放网址| 日韩和的一区二区| 久久色在线视频| 色婷婷综合久久久| 蜜桃一区二区三区在线观看| 国产亚洲一二三区| 欧美色倩网站大全免费| 免费观看久久久4p| 国产精品久久久久久久久快鸭| 欧洲激情一区二区| 久久福利视频一区二区| 中文字幕免费一区| 欧美老年两性高潮| 国产大陆亚洲精品国产| 亚洲精品老司机| 日韩精品一区二区三区视频 | 日日摸夜夜添夜夜添亚洲女人| 精品久久久影院| 91在线观看高清| 久久精品噜噜噜成人88aⅴ| 国产精品激情偷乱一区二区∴| 欧美日韩在线电影| 成人美女在线观看| 日韩精品电影一区亚洲| 国产精品久久久久永久免费观看 | 成人午夜大片免费观看| 五月婷婷综合激情| 中文字幕av一区 二区| 777亚洲妇女| 99久久精品情趣| 久久激情五月激情| 亚洲国产视频a| 国产精品久久久久aaaa| 51精品国自产在线| 色哟哟在线观看一区二区三区| 久久国产尿小便嘘嘘尿| 亚洲精品乱码久久久久久| 久久精品视频在线免费观看 | 丁香激情综合国产| 日本视频一区二区| 亚洲一线二线三线视频| 亚洲国产激情av| 欧美一级一区二区| 欧美综合视频在线观看| 国产成人夜色高潮福利影视| 日韩国产高清影视| 亚洲精品成人悠悠色影视| 久久久欧美精品sm网站| 欧美一级一区二区| 欧美三级日韩在线| 91蜜桃免费观看视频| 国产精品资源在线观看| 青草av.久久免费一区| 一区二区不卡在线视频 午夜欧美不卡在| 久久精品人人做| 精品久久久久一区| 欧美肥大bbwbbw高潮| 在线观看一区日韩| 91麻豆国产自产在线观看| 成人av在线播放网站| 国产一区二区三区免费播放| 蜜桃传媒麻豆第一区在线观看| 亚洲一区欧美一区| 亚洲精选免费视频| 日韩美女视频一区二区| 中文久久乱码一区二区| 久久精品男人的天堂| 精品国产91亚洲一区二区三区婷婷 | 日韩精品色哟哟| 性久久久久久久| 亚洲午夜影视影院在线观看| 专区另类欧美日韩| 《视频一区视频二区| 国产精品乱码人人做人人爱| 久久久久99精品国产片| 久久久久久久久99精品| 久久亚洲捆绑美女| 久久看人人爽人人| 国产色91在线| 国产亚洲一二三区| 日本一二三四高清不卡| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩亚洲欧美成人一区| 久久成人麻豆午夜电影| 日本aⅴ精品一区二区三区| 亚洲欧美视频在线观看视频| 国产精品国产三级国产普通话99| 中文字幕 久热精品 视频在线| 国产清纯美女被跳蛋高潮一区二区久久w| 欧美精品一区二区三区在线| 日韩欧美色综合| 2020国产精品| 中文字幕乱码日本亚洲一区二区| 日本一区二区三区视频视频| 国产欧美视频一区二区| 国产精品传媒视频| 亚洲激情av在线| 亚洲国产va精品久久久不卡综合| 亚洲高清在线精品| 日韩不卡一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品1区二区.| 99v久久综合狠狠综合久久| 欧美在线免费观看视频| 欧美日韩精品久久久| 欧美一二区视频| 久久久久国产一区二区三区四区| 国产日产精品一区| 亚洲欧美日韩系列| 日韩专区在线视频| 国产综合色在线| 波多野结衣中文字幕一区 | 国产精品中文字幕一区二区三区| 国产成人精品免费一区二区| 成人av动漫网站| 欧美日韩免费一区二区三区视频| 日韩美一区二区三区| 国产区在线观看成人精品| 亚洲老妇xxxxxx| 另类欧美日韩国产在线| 国产不卡视频在线播放| 色综合亚洲欧洲| 日韩欧美色电影| 国产精品久久久久精k8| 五月婷婷综合激情| 成人丝袜视频网| 欧美日韩国产影片| 久久久精品黄色| 亚洲国产日韩一区二区|