18f70d46cSAaron LI/* 2*e84206a6SAaron LI * Copyright (c) 2019-2021 Maxime Villard, m00nbsd.net 38f70d46cSAaron LI * All rights reserved. 48f70d46cSAaron LI * 58f70d46cSAaron LI * This code is part of the NVMM hypervisor. 68f70d46cSAaron LI * 78f70d46cSAaron LI * Redistribution and use in source and binary forms, with or without 88f70d46cSAaron LI * modification, are permitted provided that the following conditions 98f70d46cSAaron LI * are met: 108f70d46cSAaron LI * 1. Redistributions of source code must retain the above copyright 118f70d46cSAaron LI * notice, this list of conditions and the following disclaimer. 128f70d46cSAaron LI * 2. Redistributions in binary form must reproduce the above copyright 138f70d46cSAaron LI * notice, this list of conditions and the following disclaimer in the 148f70d46cSAaron LI * documentation and/or other materials provided with the distribution. 158f70d46cSAaron LI * 168f70d46cSAaron LI * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 178f70d46cSAaron LI * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 188f70d46cSAaron LI * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 198f70d46cSAaron LI * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 208f70d46cSAaron LI * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 218f70d46cSAaron LI * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 228f70d46cSAaron LI * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 238f70d46cSAaron LI * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 248f70d46cSAaron LI * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 258f70d46cSAaron LI * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 268f70d46cSAaron LI * SUCH DAMAGE. 278f70d46cSAaron LI */ 288f70d46cSAaron LI 298f70d46cSAaron LI .globl test1_begin, test1_end 308f70d46cSAaron LI .globl test2_begin, test2_end 318f70d46cSAaron LI .globl test3_begin, test3_end 328f70d46cSAaron LI .globl test4_begin, test4_end 338f70d46cSAaron LI .globl test5_begin, test5_end 348f70d46cSAaron LI .globl test6_begin, test6_end 358f70d46cSAaron LI .globl test7_begin, test7_end 368f70d46cSAaron LI .globl test8_begin, test8_end 378f70d46cSAaron LI .globl test9_begin, test9_end 388f70d46cSAaron LI .globl test10_begin, test10_end 398f70d46cSAaron LI .globl test11_begin, test11_end 408f70d46cSAaron LI .globl test12_begin, test12_end 418f70d46cSAaron LI .text 428f70d46cSAaron LI .code64 438f70d46cSAaron LI 448f70d46cSAaron LI#define TEST_END \ 458f70d46cSAaron LI movq $0xFFFFFFFFFFFFFFFF,%rcx; \ 468f70d46cSAaron LI rdmsr ; 478f70d46cSAaron LI 488f70d46cSAaron LI/* 498f70d46cSAaron LI * IN 508f70d46cSAaron LI */ 518f70d46cSAaron LI 528f70d46cSAaron LI .align 64 538f70d46cSAaron LItest1_begin: 548f70d46cSAaron LI movq $0x1000,%rbx 558f70d46cSAaron LI 568f70d46cSAaron LI inb $123 578f70d46cSAaron LI movb %al,(%rbx) 588f70d46cSAaron LI incq %rbx 598f70d46cSAaron LI 608f70d46cSAaron LI movq $123,%rdx 618f70d46cSAaron LI inb %dx 628f70d46cSAaron LI movb %al,(%rbx) 638f70d46cSAaron LI 648f70d46cSAaron LI TEST_END 658f70d46cSAaron LItest1_end: 668f70d46cSAaron LI 678f70d46cSAaron LI .align 64 688f70d46cSAaron LItest2_begin: 698f70d46cSAaron LI movq $0x1000,%rbx 708f70d46cSAaron LI 718f70d46cSAaron LI inw $123 728f70d46cSAaron LI movw %ax,(%rbx) 738f70d46cSAaron LI addq $2,%rbx 748f70d46cSAaron LI 758f70d46cSAaron LI movq $123,%rdx 768f70d46cSAaron LI inw %dx 778f70d46cSAaron LI movw %ax,(%rbx) 788f70d46cSAaron LI 798f70d46cSAaron LI TEST_END 808f70d46cSAaron LItest2_end: 818f70d46cSAaron LI 828f70d46cSAaron LI .align 64 838f70d46cSAaron LItest3_begin: 848f70d46cSAaron LI movq $0x1000,%rbx 858f70d46cSAaron LI 868f70d46cSAaron LI inl $123 878f70d46cSAaron LI movl %eax,(%rbx) 888f70d46cSAaron LI addq $4,%rbx 898f70d46cSAaron LI 908f70d46cSAaron LI movq $123,%rdx 918f70d46cSAaron LI inl %dx 928f70d46cSAaron LI movl %eax,(%rbx) 938f70d46cSAaron LI 948f70d46cSAaron LI TEST_END 958f70d46cSAaron LItest3_end: 968f70d46cSAaron LI 978f70d46cSAaron LI .align 64 988f70d46cSAaron LItest4_begin: 998f70d46cSAaron LI movq $0x1000,%rdi 1008f70d46cSAaron LI movq $5,%rcx 1018f70d46cSAaron LI 1028f70d46cSAaron LI movq $123,%rdx 1038f70d46cSAaron LI rep 1048f70d46cSAaron LI insb 1058f70d46cSAaron LI 1068f70d46cSAaron LI TEST_END 1078f70d46cSAaron LItest4_end: 1088f70d46cSAaron LI 1098f70d46cSAaron LI .align 64 1108f70d46cSAaron LItest5_begin: 1118f70d46cSAaron LI movq $0x1000,%rdi 1128f70d46cSAaron LI movq $14,%rcx 1138f70d46cSAaron LI 1148f70d46cSAaron LI movq $123,%rdx 1158f70d46cSAaron LI rep 1168f70d46cSAaron LI insw 1178f70d46cSAaron LI 1188f70d46cSAaron LI TEST_END 1198f70d46cSAaron LItest5_end: 1208f70d46cSAaron LI 1218f70d46cSAaron LI .align 64 1228f70d46cSAaron LItest6_begin: 1238f70d46cSAaron LI movq $0x1000,%rdi 1248f70d46cSAaron LI movq $7,%rcx 1258f70d46cSAaron LI 1268f70d46cSAaron LI movq $123,%rdx 1278f70d46cSAaron LI rep 1288f70d46cSAaron LI insl 1298f70d46cSAaron LI 1308f70d46cSAaron LI TEST_END 1318f70d46cSAaron LItest6_end: 1328f70d46cSAaron LI 1338f70d46cSAaron LI/* 1348f70d46cSAaron LI * OUT 1358f70d46cSAaron LI */ 1368f70d46cSAaron LI 1378f70d46cSAaron LI .align 64 1388f70d46cSAaron LItest7_begin: 1398f70d46cSAaron LI movq $0x1000,%rbx 1408f70d46cSAaron LI 1418f70d46cSAaron LI movb (%rbx),%al 1428f70d46cSAaron LI outb $123 1438f70d46cSAaron LI incq %rbx 1448f70d46cSAaron LI 1458f70d46cSAaron LI movb (%rbx),%al 1468f70d46cSAaron LI movq $123,%rdx 1478f70d46cSAaron LI outb %dx 1488f70d46cSAaron LI 1498f70d46cSAaron LI TEST_END 1508f70d46cSAaron LItest7_end: 1518f70d46cSAaron LI 1528f70d46cSAaron LI .align 64 1538f70d46cSAaron LItest8_begin: 1548f70d46cSAaron LI movq $0x1000,%rbx 1558f70d46cSAaron LI 1568f70d46cSAaron LI movw (%rbx),%ax 1578f70d46cSAaron LI outw $123 1588f70d46cSAaron LI addq $2,%rbx 1598f70d46cSAaron LI 1608f70d46cSAaron LI movw (%rbx),%ax 1618f70d46cSAaron LI movq $123,%rdx 1628f70d46cSAaron LI outw %dx 1638f70d46cSAaron LI 1648f70d46cSAaron LI TEST_END 1658f70d46cSAaron LItest8_end: 1668f70d46cSAaron LI 1678f70d46cSAaron LI .align 64 1688f70d46cSAaron LItest9_begin: 1698f70d46cSAaron LI movq $0x1000,%rbx 1708f70d46cSAaron LI 1718f70d46cSAaron LI movl (%rbx),%eax 1728f70d46cSAaron LI outl $123 1738f70d46cSAaron LI addq $4,%rbx 1748f70d46cSAaron LI 1758f70d46cSAaron LI movl (%rbx),%eax 1768f70d46cSAaron LI movq $123,%rdx 1778f70d46cSAaron LI outl %dx 1788f70d46cSAaron LI 1798f70d46cSAaron LI TEST_END 1808f70d46cSAaron LItest9_end: 1818f70d46cSAaron LI 1828f70d46cSAaron LI .align 64 1838f70d46cSAaron LItest10_begin: 1848f70d46cSAaron LI movq $0x1000,%rsi 1858f70d46cSAaron LI movq $5,%rcx 1868f70d46cSAaron LI 1878f70d46cSAaron LI movq $123,%rdx 1888f70d46cSAaron LI rep 1898f70d46cSAaron LI outsb 1908f70d46cSAaron LI 1918f70d46cSAaron LI TEST_END 1928f70d46cSAaron LItest10_end: 1938f70d46cSAaron LI 1948f70d46cSAaron LI .align 64 1958f70d46cSAaron LItest11_begin: 1968f70d46cSAaron LI movq $0x1000,%rsi 1978f70d46cSAaron LI movq $8,%rcx 1988f70d46cSAaron LI 1998f70d46cSAaron LI movq $123,%rdx 2008f70d46cSAaron LI rep 2018f70d46cSAaron LI outsw 2028f70d46cSAaron LI 2038f70d46cSAaron LI TEST_END 2048f70d46cSAaron LItest11_end: 2058f70d46cSAaron LI 2068f70d46cSAaron LI .align 64 2078f70d46cSAaron LItest12_begin: 2088f70d46cSAaron LI movq $0x1000,%rsi 2098f70d46cSAaron LI movq $7,%rcx 2108f70d46cSAaron LI 2118f70d46cSAaron LI movq $123,%rdx 2128f70d46cSAaron LI rep 2138f70d46cSAaron LI outsl 2148f70d46cSAaron LI 2158f70d46cSAaron LI TEST_END 2168f70d46cSAaron LItest12_end: 217