Changeset 58961 in vbox for trunk/include/VBox
- Timestamp:
- Dec 2, 2015 10:18:30 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/hm_vmx.h
r58124 r58961 1763 1763 /** @} */ 1764 1764 1765 /** @name VMX_XDTR_INSINFO_XXX - VMX_EXIT_XDTR_ACCESS instruction information 1766 * Found in VMX_VMCS32_RO_EXIT_INSTR_INFO. 1767 * @{ 1768 */ 1769 /** Address calculation scaling field (powers of two). */ 1770 #define VMX_XDTR_INSINFO_SCALE_SHIFT 0 1771 #define VMX_XDTR_INSINFO_SCALE_MASK UINT32_C(0x00000003) 1772 /** Bits 2 thru 6 are undefined. */ 1773 #define VMX_XDTR_INSINFO_UNDEF_2_6_SHIFT 2 1774 #define VMX_XDTR_INSINFO_UNDEF_2_6_MASK UINT32_C(0x0000007c) 1775 /** Address size, only 0(=16), 1(=32) and 2(=64) are defined. 1776 * @remarks anyone's guess why this is a 3 bit field... */ 1777 #define VMX_XDTR_INSINFO_ADDR_SIZE_SHIFT 7 1778 #define VMX_XDTR_INSINFO_ADDR_SIZE_MASK UINT32_C(0x00000380) 1779 /** Bit 10 is defined as zero. */ 1780 #define VMX_XDTR_INSINFO_ZERO_10_SHIFT 10 1781 #define VMX_XDTR_INSINFO_ZERO_10_MASK UINT32_C(0x00000400) 1782 /** Operand size, either (1=)32-bit or (0=)16-bit, but get this, it's undefined 1783 * for exits from 64-bit code as the operand size there is fixed. */ 1784 #define VMX_XDTR_INSINFO_OP_SIZE_SHIFT 11 1785 #define VMX_XDTR_INSINFO_OP_SIZE_MASK UINT32_C(0x00000800) 1786 /** Bits 12 thru 14 are undefined. */ 1787 #define VMX_XDTR_INSINFO_UNDEF_12_14_SHIFT 12 1788 #define VMX_XDTR_INSINFO_UNDEF_12_14_MASK UINT32_C(0x00007000) 1789 /** Applicable segment register (X86_SREG_XXX values). */ 1790 #define VMX_XDTR_INSINFO_SREG_SHIFT 15 1791 #define VMX_XDTR_INSINFO_SREG_MASK UINT32_C(0x00038000) 1792 /** Index register (X86_GREG_XXX values). Undefined if HAS_INDEX_REG is clear. */ 1793 #define VMX_XDTR_INSINFO_INDEX_REG_SHIFT 18 1794 #define VMX_XDTR_INSINFO_INDEX_REG_MASK UINT32_C(0x003c0000) 1795 /** Is VMX_XDTR_INSINFO_INDEX_REG_XXX valid (=1) or not (=0). */ 1796 #define VMX_XDTR_INSINFO_HAS_INDEX_REG_SHIFT 22 1797 #define VMX_XDTR_INSINFO_HAS_INDEX_REG_MASK UINT32_C(0x00400000) 1798 /** Base register (X86_GREG_XXX values). Undefined if HAS_BASE_REG is clear. */ 1799 #define VMX_XDTR_INSINFO_BASE_REG_SHIFT 23 1800 #define VMX_XDTR_INSINFO_BASE_REG_MASK UINT32_C(0x07800000) 1801 /** Is VMX_XDTR_INSINFO_BASE_REG_XXX valid (=1) or not (=0). */ 1802 #define VMX_XDTR_INSINFO_HAS_BASE_REG_SHIFT 27 1803 #define VMX_XDTR_INSINFO_HAS_BASE_REG_MASK UINT32_C(0x08000000) 1804 /** The instruction identity (VMX_XDTR_INSINFO_II_XXX values) */ 1805 #define VMX_XDTR_INSINFO_INSTR_ID_SHIFT 28 1806 #define VMX_XDTR_INSINFO_INSTR_ID_MASK UINT32_C(0x30000000) 1807 #define VMX_XDTR_INSINFO_II_SGDT 0 /**< Instruction ID: SGDT */ 1808 #define VMX_XDTR_INSINFO_II_SIDT 1 /**< Instruction ID: SIDT */ 1809 #define VMX_XDTR_INSINFO_II_LGDT 2 /**< Instruction ID: LGDT */ 1810 #define VMX_XDTR_INSINFO_II_LIDT 3 /**< Instruction ID: LIDT */ 1811 /** Bits 30 & 31 are undefined. */ 1812 #define VMX_XDTR_INSINFO_UNDEF_30_31_SHIFT 30 1813 #define VMX_XDTR_INSINFO_UNDEF_30_31_MASK UINT32_C(0xc0000000) 1814 RT_BF_ASSERT_COMPILE_CHECKS(VMX_XDTR_INSINFO_, UINT32_C(0), UINT32_MAX, 1815 (SCALE, UNDEF_2_6, ADDR_SIZE, ZERO_10, OP_SIZE, UNDEF_12_14, SREG, INDEX_REG, HAS_INDEX_REG, 1816 BASE_REG, HAS_BASE_REG, INSTR_ID, UNDEF_30_31)); 1817 /** @} */ 1818 1819 1820 /** @name VMX_YYTR_INSINFO_XXX - VMX_EXIT_TR_ACCESS instruction information 1821 * Found in VMX_VMCS32_RO_EXIT_INSTR_INFO. 1822 * This is similar to VMX_XDTR_INSINFO_XXX. 1823 * @{ 1824 */ 1825 /** Address calculation scaling field (powers of two). */ 1826 #define VMX_YYTR_INSINFO_SCALE_SHIFT 0 1827 #define VMX_YYTR_INSINFO_SCALE_MASK UINT32_C(0x00000003) 1828 /** Bit 2 is undefined. */ 1829 #define VMX_YYTR_INSINFO_UNDEF_2_SHIFT 2 1830 #define VMX_YYTR_INSINFO_UNDEF_2_MASK UINT32_C(0x00000004) 1831 /** Register operand 1. Undefined if VMX_YYTR_INSINFO_HAS_REG1 is clear. */ 1832 #define VMX_YYTR_INSINFO_REG1_SHIFT 3 1833 #define VMX_YYTR_INSINFO_REG1_MASK UINT32_C(0x00000078) 1834 /** Address size, only 0(=16), 1(=32) and 2(=64) are defined. 1835 * @remarks anyone's guess why this is a 3 bit field... */ 1836 #define VMX_YYTR_INSINFO_ADDR_SIZE_SHIFT 7 1837 #define VMX_YYTR_INSINFO_ADDR_SIZE_MASK UINT32_C(0x00000380) 1838 /** Is VMX_YYTR_INSINFO_REG1_XXX valid (=1) or not (=0). */ 1839 #define VMX_YYTR_INSINFO_HAS_REG1_SHIFT 10 1840 #define VMX_YYTR_INSINFO_HAS_REG1_MASK UINT32_C(0x00000400) 1841 /** Bits 11 thru 14 are undefined. */ 1842 #define VMX_YYTR_INSINFO_UNDEF_11_14_SHIFT 11 1843 #define VMX_YYTR_INSINFO_UNDEF_11_14_MASK UINT32_C(0x00007800) 1844 /** Applicable segment register (X86_SREG_XXX values). */ 1845 #define VMX_YYTR_INSINFO_SREG_SHIFT 15 1846 #define VMX_YYTR_INSINFO_SREG_MASK UINT32_C(0x00038000) 1847 /** Index register (X86_GREG_XXX values). Undefined if HAS_INDEX_REG is clear. */ 1848 #define VMX_YYTR_INSINFO_INDEX_REG_SHIFT 18 1849 #define VMX_YYTR_INSINFO_INDEX_REG_MASK UINT32_C(0x003c0000) 1850 /** Is VMX_YYTR_INSINFO_INDEX_REG_XXX valid (=1) or not (=0). */ 1851 #define VMX_YYTR_INSINFO_HAS_INDEX_REG_SHIFT 22 1852 #define VMX_YYTR_INSINFO_HAS_INDEX_REG_MASK UINT32_C(0x00400000) 1853 /** Base register (X86_GREG_XXX values). Undefined if HAS_BASE_REG is clear. */ 1854 #define VMX_YYTR_INSINFO_BASE_REG_SHIFT 23 1855 #define VMX_YYTR_INSINFO_BASE_REG_MASK UINT32_C(0x07800000) 1856 /** Is VMX_YYTR_INSINFO_BASE_REG_XXX valid (=1) or not (=0). */ 1857 #define VMX_YYTR_INSINFO_HAS_BASE_REG_SHIFT 27 1858 #define VMX_YYTR_INSINFO_HAS_BASE_REG_MASK UINT32_C(0x08000000) 1859 /** The instruction identity (VMX_YYTR_INSINFO_II_XXX values) */ 1860 #define VMX_YYTR_INSINFO_INSTR_ID_SHIFT 28 1861 #define VMX_YYTR_INSINFO_INSTR_ID_MASK UINT32_C(0x30000000) 1862 #define VMX_YYTR_INSINFO_II_SGDT 0 /**< Instruction ID: SGDT */ 1863 #define VMX_YYTR_INSINFO_II_SIDT 1 /**< Instruction ID: SIDT */ 1864 #define VMX_YYTR_INSINFO_II_LGDT 2 /**< Instruction ID: LGDT */ 1865 #define VMX_YYTR_INSINFO_II_LIDT 3 /**< Instruction ID: LIDT */ 1866 /** Bits 30 & 31 are undefined. */ 1867 #define VMX_YYTR_INSINFO_UNDEF_30_31_SHIFT 30 1868 #define VMX_YYTR_INSINFO_UNDEF_30_31_MASK UINT32_C(0xc0000000) 1869 RT_BF_ASSERT_COMPILE_CHECKS(VMX_YYTR_INSINFO_, UINT32_C(0), UINT32_MAX, 1870 (SCALE, UNDEF_2, REG1, ADDR_SIZE, HAS_REG1, UNDEF_11_14, SREG, INDEX_REG, HAS_INDEX_REG, 1871 BASE_REG, HAS_BASE_REG, INSTR_ID, UNDEF_30_31)); 1872 /** @} */ 1873 1765 1874 1766 1875 /** @name VMCS field encoding - Natural width guest state fields
Note:
See TracChangeset
for help on using the changeset viewer.