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

📄 vmi.h

📁 linux 内核源代码
💻 H
字号:
/* * VMI interface definition * * Copyright (C) 2005, VMware, Inc. * * 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, GOOD TITLE or * NON INFRINGEMENT.  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., 675 Mass Ave, Cambridge, MA 02139, USA. * * Maintained by: Zachary Amsden zach@vmware.com * */#include <linux/types.h>/* *--------------------------------------------------------------------- * *  VMI Option ROM API * *--------------------------------------------------------------------- */#define VMI_SIGNATURE 0x696d5663   /* "cVmi" */#define PCI_VENDOR_ID_VMWARE            0x15AD#define PCI_DEVICE_ID_VMWARE_VMI        0x0801/* * We use two version numbers for compatibility, with the major * number signifying interface breakages, and the minor number * interface extensions. */#define VMI_API_REV_MAJOR       3#define VMI_API_REV_MINOR       0#define VMI_CALL_CPUID			0#define VMI_CALL_WRMSR			1#define VMI_CALL_RDMSR			2#define VMI_CALL_SetGDT			3#define VMI_CALL_SetLDT			4#define VMI_CALL_SetIDT			5#define VMI_CALL_SetTR			6#define VMI_CALL_GetGDT			7#define VMI_CALL_GetLDT			8#define VMI_CALL_GetIDT			9#define VMI_CALL_GetTR			10#define VMI_CALL_WriteGDTEntry		11#define VMI_CALL_WriteLDTEntry		12#define VMI_CALL_WriteIDTEntry		13#define VMI_CALL_UpdateKernelStack	14#define VMI_CALL_SetCR0			15#define VMI_CALL_SetCR2			16#define VMI_CALL_SetCR3			17#define VMI_CALL_SetCR4			18#define VMI_CALL_GetCR0			19#define VMI_CALL_GetCR2			20#define VMI_CALL_GetCR3			21#define VMI_CALL_GetCR4			22#define VMI_CALL_WBINVD			23#define VMI_CALL_SetDR			24#define VMI_CALL_GetDR			25#define VMI_CALL_RDPMC			26#define VMI_CALL_RDTSC			27#define VMI_CALL_CLTS			28#define VMI_CALL_EnableInterrupts	29#define VMI_CALL_DisableInterrupts	30#define VMI_CALL_GetInterruptMask	31#define VMI_CALL_SetInterruptMask	32#define VMI_CALL_IRET			33#define VMI_CALL_SYSEXIT		34#define VMI_CALL_Halt			35#define VMI_CALL_Reboot			36#define VMI_CALL_Shutdown		37#define VMI_CALL_SetPxE			38#define VMI_CALL_SetPxELong		39#define VMI_CALL_UpdatePxE		40#define VMI_CALL_UpdatePxELong		41#define VMI_CALL_MachineToPhysical	42#define VMI_CALL_PhysicalToMachine	43#define VMI_CALL_AllocatePage		44#define VMI_CALL_ReleasePage		45#define VMI_CALL_InvalPage		46#define VMI_CALL_FlushTLB		47#define VMI_CALL_SetLinearMapping	48#define VMI_CALL_SetIOPLMask		61#define VMI_CALL_SetInitialAPState	62#define VMI_CALL_APICWrite		63#define VMI_CALL_APICRead		64#define VMI_CALL_IODelay		65#define VMI_CALL_SetLazyMode		73/* *--------------------------------------------------------------------- * * MMU operation flags * *--------------------------------------------------------------------- *//* Flags used by VMI_{Allocate|Release}Page call */#define VMI_PAGE_PAE             0x10  /* Allocate PAE shadow */#define VMI_PAGE_CLONE           0x20  /* Clone from another shadow */#define VMI_PAGE_ZEROED          0x40  /* Page is pre-zeroed *//* Flags shared by Allocate|Release Page and PTE updates */#define VMI_PAGE_PT              0x01#define VMI_PAGE_PD              0x02#define VMI_PAGE_PDP             0x04#define VMI_PAGE_PML4            0x08#define VMI_PAGE_NORMAL          0x00 /* for debugging *//* Flags used by PTE updates */#define VMI_PAGE_CURRENT_AS      0x10 /* implies VMI_PAGE_VA_MASK is valid */#define VMI_PAGE_DEFER           0x20 /* may queue update until TLB inval */#define VMI_PAGE_VA_MASK         0xfffff000#ifdef CONFIG_X86_PAE#define VMI_PAGE_L1		(VMI_PAGE_PT | VMI_PAGE_PAE | VMI_PAGE_ZEROED)#define VMI_PAGE_L2		(VMI_PAGE_PD | VMI_PAGE_PAE | VMI_PAGE_ZEROED)#else#define VMI_PAGE_L1		(VMI_PAGE_PT | VMI_PAGE_ZEROED)#define VMI_PAGE_L2		(VMI_PAGE_PD | VMI_PAGE_ZEROED)#endif/* Flags used by VMI_FlushTLB call */#define VMI_FLUSH_TLB            0x01#define VMI_FLUSH_GLOBAL         0x02/* *--------------------------------------------------------------------- * *  VMI relocation definitions for ROM call get_reloc * *--------------------------------------------------------------------- *//* VMI Relocation types */#define VMI_RELOCATION_NONE     0#define VMI_RELOCATION_CALL_REL 1#define VMI_RELOCATION_JUMP_REL 2#define VMI_RELOCATION_NOP	3#ifndef __ASSEMBLY__struct vmi_relocation_info {        unsigned char           *eip;        unsigned char           type;        unsigned char           reserved[3];};#endif/* *--------------------------------------------------------------------- * *  Generic ROM structures and definitions * *--------------------------------------------------------------------- */#ifndef __ASSEMBLY__struct vrom_header {	u16     rom_signature;  // option ROM signature	u8      rom_length;     // ROM length in 512 byte chunks	u8      rom_entry[4];   // 16-bit code entry point	u8      rom_pad0;       // 4-byte align pad	u32     vrom_signature; // VROM identification signature	u8      api_version_min;// Minor version of API	u8      api_version_maj;// Major version of API	u8      jump_slots;     // Number of jump slots	u8      reserved1;      // Reserved for expansion	u32     virtual_top;    // Hypervisor virtual address start	u16     reserved2;      // Reserved for expansion	u16	license_offs;	// Offset to License string	u16     pci_header_offs;// Offset to PCI OPROM header	u16     pnp_header_offs;// Offset to PnP OPROM header	u32     rom_pad3;       // PnP reserverd / VMI reserved	u8      reserved[96];   // Reserved for headers	char    vmi_init[8];    // VMI_Init jump point	char    get_reloc[8];   // VMI_GetRelocationInfo jump point} __attribute__((packed));struct pnp_header {        char sig[4];        char rev;        char size;        short next;        short res;        long devID;        unsigned short manufacturer_offset;        unsigned short product_offset;} __attribute__((packed));struct pci_header {        char sig[4];        short vendorID;        short deviceID;        short vpdData;        short size;        char rev;        char class;        char subclass;        char interface;        short chunks;        char rom_version_min;        char rom_version_maj;        char codetype;        char lastRom;        short reserved;} __attribute__((packed));/* Function prototypes for bootstrapping */extern void vmi_init(void);extern void vmi_bringup(void);extern void vmi_apply_boot_page_allocations(void);/* State needed to start an application processor in an SMP system. */struct vmi_ap_state {	u32 cr0;	u32 cr2;	u32 cr3;	u32 cr4;	u64 efer;	u32 eip;	u32 eflags;	u32 eax;	u32 ebx;	u32 ecx;	u32 edx;	u32 esp;	u32 ebp;	u32 esi;	u32 edi;	u16 cs;	u16 ss;	u16 ds;	u16 es;	u16 fs;	u16 gs;	u16 ldtr;	u16 gdtr_limit;	u32 gdtr_base;	u32 idtr_base;	u16 idtr_limit;};#endif

⌨️ 快捷键说明

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