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

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

?? bt.c

?? 上傳linux-jx2410的源代碼
?? C
字號:
/***************************************************************************** * * Module Name: bt.c *   $Revision: 1.1.1.1 $ * *****************************************************************************//* *  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一区二区三区免费野_久草精品视频
国产精品福利在线播放| 337p粉嫩大胆色噜噜噜噜亚洲| 中文字幕字幕中文在线中不卡视频| 色哟哟一区二区三区| 久久精品噜噜噜成人88aⅴ| 日本一区免费视频| 免费人成在线不卡| 亚洲免费av网站| 久久久国产综合精品女国产盗摄| av网站免费线看精品| 九九精品一区二区| 亚洲成精国产精品女| 国产人成亚洲第一网站在线播放 | 欧美视频一区在线| 国产精品亚洲第一区在线暖暖韩国| 久久欧美一区二区| 91麻豆精品国产| 欧美综合一区二区| 成人高清视频在线| 国产99精品国产| 国产又粗又猛又爽又黄91精品| 一区二区三区四区蜜桃| 国产亚洲视频系列| 欧美剧情片在线观看| 在线视频一区二区免费| 国产精品不卡视频| 中文字幕精品一区二区精品绿巨人| 日韩欧美视频在线| 欧美一区二区三区视频在线观看| 色综合天天综合在线视频| 成人精品视频.| 午夜精品久久久久久久| 日韩和的一区二区| 麻豆精品精品国产自在97香蕉| 午夜av一区二区| 免费欧美在线视频| 久久国产精品色| 日本亚洲一区二区| 蜜臀精品久久久久久蜜臀| 久久五月婷婷丁香社区| 欧美videofree性高清杂交| 精品国产一区二区三区av性色| 91福利在线导航| 69堂成人精品免费视频| 精品捆绑美女sm三区| 精品污污网站免费看| 色视频欧美一区二区三区| 91香蕉视频mp4| 欧美中文字幕一二三区视频| 欧美日韩激情一区二区三区| 在线成人免费观看| 精品电影一区二区| 国产精品色哟哟| 亚洲成人7777| 狠狠色丁香久久婷婷综合_中| 国产精品亚洲视频| 色老综合老女人久久久| 欧美一卡二卡在线观看| 精品国产乱码久久久久久老虎| 亚洲精品一区在线观看| 国产欧美精品一区| 夜夜嗨av一区二区三区网页| 免费在线观看精品| 亚洲一区精品在线| 国内成+人亚洲+欧美+综合在线| 成人app下载| 在线播放欧美女士性生活| 久久久久久久久免费| 欧美精品一卡二卡| 日本一区二区成人在线| 亚洲国产视频一区| 一区二区三区不卡在线观看| 日韩综合小视频| 国产精品18久久久久久久久久久久| 国产精品一区二区在线看| 欧美日韩在线不卡| 中文字幕第一区二区| 日韩精品午夜视频| 97久久精品人人做人人爽50路| 日韩亚洲欧美成人一区| 亚洲欧洲韩国日本视频| 蜜桃视频在线观看一区二区| 国产成人丝袜美腿| 2020国产成人综合网| 一区二区三区产品免费精品久久75| 免费观看日韩av| 欧美日韩另类一区| 一区二区成人在线视频| 久久久噜噜噜久噜久久综合| 国产精品水嫩水嫩| 国产精品一区二区视频| 欧美猛男超大videosgay| 欧美一区二区三区在线| 亚洲成人自拍偷拍| 色婷婷综合久色| 亚洲免费观看高清完整版在线观看熊 | 日韩成人伦理电影在线观看| 91亚洲永久精品| 欧美激情综合五月色丁香 | 国产69精品一区二区亚洲孕妇| 欧美精品三级在线观看| 亚洲欧美区自拍先锋| 不卡电影一区二区三区| 久久亚洲一区二区三区四区| 亚洲欧美一区二区久久| jiyouzz国产精品久久| 国产日韩精品久久久| 国产一区二区伦理| 国产亚洲精品资源在线26u| 亚洲日本青草视频在线怡红院 | 亚洲电影一区二区| 欧美性色欧美a在线播放| 亚洲日韩欧美一区二区在线| 99久久婷婷国产精品综合| 亚洲欧美影音先锋| 波多野结衣的一区二区三区| 国产精品丝袜在线| 成人不卡免费av| 国产精品毛片大码女人| 成人精品国产一区二区4080| 国产三级欧美三级日产三级99| 天天av天天翘天天综合网| 91视频一区二区三区| 亚洲国产成人av好男人在线观看| 在线免费观看日本欧美| 亚洲人成网站精品片在线观看| 在线免费视频一区二区| 美女www一区二区| 久久色在线观看| 蜜臀a∨国产成人精品| 久久亚洲精华国产精华液| 高清国产午夜精品久久久久久| 国产精品二三区| 欧美老人xxxx18| 亚洲精品国产精华液| 欧美性受xxxx| 日本欧美在线观看| 国产午夜精品一区二区三区视频| 国产69精品久久久久毛片 | 99久久夜色精品国产网站| ww久久中文字幕| 成人午夜免费电影| 国产精品久久久久婷婷二区次| 在线视频中文字幕一区二区| 美女精品自拍一二三四| 日韩一区二区三区免费观看| 成人国产精品视频| 免费观看成人av| 一区二区三区欧美日| 日韩你懂的电影在线观看| www.视频一区| 亚洲女同女同女同女同女同69| 男人的天堂久久精品| 日韩免费一区二区三区在线播放| 国产精品一区二区黑丝| 午夜精品福利一区二区蜜股av| 欧美丝袜丝交足nylons图片| 蜜桃久久精品一区二区| 最新中文字幕一区二区三区| 国产欧美日韩在线视频| 国产天堂亚洲国产碰碰| 国产精品久久一卡二卡| 国产精品久久久久久久久果冻传媒| 久久久噜噜噜久久中文字幕色伊伊| 国产午夜精品一区二区三区嫩草 | 三级不卡在线观看| 久久国产精品色| 国产福利一区二区三区视频在线| 粉嫩av一区二区三区在线播放| 丁香婷婷综合激情五月色| 91影院在线观看| 欧美三区免费完整视频在线观看| 欧美日本韩国一区二区三区视频 | 色八戒一区二区三区| 在线精品观看国产| 欧美一区二区视频网站| 久久九九影视网| 一区二区视频在线| 蜜臀国产一区二区三区在线播放| 国产成人精品免费| 欧美性大战久久| 精品久久久久久久一区二区蜜臀| 国产亚洲福利社区一区| 亚洲国产欧美日韩另类综合| 久久精品国产第一区二区三区| 国产精品一区二区视频| 欧美午夜理伦三级在线观看| 欧美一级二级在线观看| 国产精品美女久久久久久2018| 亚洲韩国一区二区三区| 国产精品一区二区久久不卡 | 中文字幕中文字幕一区二区| 亚洲乱码中文字幕| 精品中文av资源站在线观看| 99精品热视频| 欧美大片一区二区| 一区二区久久久久久| 丰满岳乱妇一区二区三区| 欧美一级视频精品观看| 亚洲日本一区二区三区|