📄 vmi.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 + -