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

📄 osl.c

📁 xen虚拟机源代码安装包
💻 C
字号:
/* *  acpi_osl.c - OS-dependent functions ($Revision: 83 $) * *  Copyright (C) 2000       Andrew Henroid *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * *  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 <asm/io.h>#include <xen/config.h>#include <xen/init.h>#include <xen/types.h>#include <xen/errno.h>#include <xen/acpi.h>#include <xen/numa.h>#include <acpi/acpi_bus.h>#include <acpi/acmacros.h>#include <acpi/acpiosxf.h>#include <acpi/platform/aclinux.h>#include <xen/spinlock.h>#include <xen/domain_page.h>#ifdef __ia64__#include <linux/efi.h>#endif#define _COMPONENT		ACPI_OS_SERVICESACPI_MODULE_NAME("osl")#define PREFIX		"ACPI: "struct acpi_os_dpc {	acpi_osd_exec_callback function;	void *context;};#ifdef CONFIG_ACPI_CUSTOM_DSDT#include CONFIG_ACPI_CUSTOM_DSDT_FILE#endif#ifdef ENABLE_DEBUGGER#include <linux/kdb.h>/* stuff for debugger support */int acpi_in_debugger;EXPORT_SYMBOL(acpi_in_debugger);extern char line_buf[80];#endif				/*ENABLE_DEBUGGER */int acpi_specific_hotkey_enabled = TRUE;EXPORT_SYMBOL(acpi_specific_hotkey_enabled);void acpi_os_printf(const char *fmt, ...){	va_list args;	va_start(args, fmt);	acpi_os_vprintf(fmt, args);	va_end(args);}void acpi_os_vprintf(const char *fmt, va_list args){	static char buffer[512];	vsnprintf(buffer, sizeof(buffer), fmt, args);	printk("%s", buffer);}acpi_physical_address __init acpi_os_get_root_pointer(void){#ifdef __ia64__	if (efi_enabled) {		if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)			return efi.acpi20;		else if (efi.acpi != EFI_INVALID_TABLE_ADDR)			return efi.acpi;		else {			printk(KERN_ERR PREFIX			       "System description tables not found\n");			return 0;		}	} else#endif	{		acpi_physical_address pa = 0;		acpi_find_root_pointer(&pa);		return pa;	}}void __iomem *acpi_os_map_memory(acpi_physical_address phys, acpi_size size){	return __acpi_map_table((unsigned long)phys, size);}EXPORT_SYMBOL_GPL(acpi_os_map_memory);void acpi_os_unmap_memory(void __iomem * virt, acpi_size size){}EXPORT_SYMBOL_GPL(acpi_os_unmap_memory);acpi_status acpi_os_read_port(acpi_io_address port, u32 * value, u32 width){	u32 dummy;	if (!value)		value = &dummy;	*value = 0;	if (width <= 8) {		*(u8 *) value = inb(port);	} else if (width <= 16) {		*(u16 *) value = inw(port);	} else if (width <= 32) {		*(u32 *) value = inl(port);	} else {		BUG();	}	return AE_OK;}EXPORT_SYMBOL(acpi_os_read_port);acpi_status acpi_os_write_port(acpi_io_address port, u32 value, u32 width){	if (width <= 8) {		outb(value, port);	} else if (width <= 16) {		outw(value, port);	} else if (width <= 32) {		outl(value, port);	} else {		BUG();	}	return AE_OK;}EXPORT_SYMBOL(acpi_os_write_port);acpi_statusacpi_os_read_memory(acpi_physical_address phys_addr, u32 * value, u32 width){	u32 dummy;	void __iomem *virt_addr;	virt_addr = map_domain_page(phys_addr>>PAGE_SHIFT);	if (!value)		value = &dummy;	switch (width) {	case 8:		*(u8 *) value = readb(virt_addr);		break;	case 16:		*(u16 *) value = readw(virt_addr);		break;	case 32:		*(u32 *) value = readl(virt_addr);		break;	default:		BUG();	}	unmap_domain_page(virt_addr);	return AE_OK;}acpi_statusacpi_os_write_memory(acpi_physical_address phys_addr, u32 value, u32 width){	void __iomem *virt_addr;	virt_addr = map_domain_page(phys_addr>>PAGE_SHIFT);	switch (width) {	case 8:		writeb(value, virt_addr);		break;	case 16:		writew(value, virt_addr);		break;	case 32:		writel(value, virt_addr);		break;	default:		BUG();	}	unmap_domain_page(virt_addr);	return AE_OK;}/* * Acquire a spinlock. * * handle is a pointer to the spinlock_t. */acpi_cpu_flags acpi_os_acquire_lock(acpi_spinlock lockp){	acpi_cpu_flags flags;	spin_lock_irqsave(lockp, flags);	return flags;}/* * Release a spinlock. See above. */void acpi_os_release_lock(acpi_spinlock lockp, acpi_cpu_flags flags){	spin_unlock_irqrestore(lockp, flags);}

⌨️ 快捷键说明

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