]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/CpuIo2Dxe/X64/IoFifo.nasm
UefiCpuPkg: CpuIo2Dxe: optimize FIFO reads and writes of IO ports
[mirror_edk2.git] / UefiCpuPkg / CpuIo2Dxe / X64 / IoFifo.nasm
CommitLineData
fb8b5469
LE
1;------------------------------------------------------------------------------\r
2;\r
3; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
4;\r
5; This program and the accompanying materials are licensed and made available\r
6; under the terms and conditions of the BSD License which accompanies this\r
7; distribution. The full text of the license may be found at\r
8; http://opensource.org/licenses/bsd-license.php.\r
9;\r
10; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12;\r
13;------------------------------------------------------------------------------\r
14\r
15 DEFAULT REL\r
16 SECTION .text\r
17\r
18;------------------------------------------------------------------------------\r
19; VOID\r
20; EFIAPI\r
21; IoReadFifo8 (\r
22; IN UINTN Port, // rcx\r
23; IN UINTN Size, // rdx\r
24; IN VOID *Buffer // r8\r
25; );\r
26;------------------------------------------------------------------------------\r
27global ASM_PFX(IoReadFifo8)\r
28ASM_PFX(IoReadFifo8):\r
29 cld\r
30 xchg rcx, rdx\r
31 xchg rdi, r8 ; rdi: buffer address; r8: save rdi\r
32rep insb\r
33 mov rdi, r8 ; restore rdi\r
34 ret\r
35\r
36;------------------------------------------------------------------------------\r
37; VOID\r
38; EFIAPI\r
39; IoReadFifo16 (\r
40; IN UINTN Port, // rcx\r
41; IN UINTN Size, // rdx\r
42; IN VOID *Buffer // r8\r
43; );\r
44;------------------------------------------------------------------------------\r
45global ASM_PFX(IoReadFifo16)\r
46ASM_PFX(IoReadFifo16):\r
47 cld\r
48 xchg rcx, rdx\r
49 xchg rdi, r8 ; rdi: buffer address; r8: save rdi\r
50rep insw\r
51 mov rdi, r8 ; restore rdi\r
52 ret\r
53\r
54;------------------------------------------------------------------------------\r
55; VOID\r
56; EFIAPI\r
57; IoReadFifo32 (\r
58; IN UINTN Port, // rcx\r
59; IN UINTN Size, // rdx\r
60; IN VOID *Buffer // r8\r
61; );\r
62;------------------------------------------------------------------------------\r
63global ASM_PFX(IoReadFifo32)\r
64ASM_PFX(IoReadFifo32):\r
65 cld\r
66 xchg rcx, rdx\r
67 xchg rdi, r8 ; rdi: buffer address; r8: save rdi\r
68rep insd\r
69 mov rdi, r8 ; restore rdi\r
70 ret\r
71\r
72;------------------------------------------------------------------------------\r
73; VOID\r
74; EFIAPI\r
75; IoWriteFifo8 (\r
76; IN UINTN Port, // rcx\r
77; IN UINTN Size, // rdx\r
78; IN VOID *Buffer // r8\r
79; );\r
80;------------------------------------------------------------------------------\r
81global ASM_PFX(IoWriteFifo8)\r
82ASM_PFX(IoWriteFifo8):\r
83 cld\r
84 xchg rcx, rdx\r
85 xchg rsi, r8 ; rsi: buffer address; r8: save rsi\r
86rep outsb\r
87 mov rsi, r8 ; restore rsi\r
88 ret\r
89\r
90;------------------------------------------------------------------------------\r
91; VOID\r
92; EFIAPI\r
93; IoWriteFifo16 (\r
94; IN UINTN Port, // rcx\r
95; IN UINTN Size, // rdx\r
96; IN VOID *Buffer // r8\r
97; );\r
98;------------------------------------------------------------------------------\r
99global ASM_PFX(IoWriteFifo16)\r
100ASM_PFX(IoWriteFifo16):\r
101 cld\r
102 xchg rcx, rdx\r
103 xchg rsi, r8 ; rsi: buffer address; r8: save rsi\r
104rep outsw\r
105 mov rsi, r8 ; restore rsi\r
106 ret\r
107\r
108;------------------------------------------------------------------------------\r
109; VOID\r
110; EFIAPI\r
111; IoWriteFifo32 (\r
112; IN UINTN Port, // rcx\r
113; IN UINTN Size, // rdx\r
114; IN VOID *Buffer // r8\r
115; );\r
116;------------------------------------------------------------------------------\r
117global ASM_PFX(IoWriteFifo32)\r
118ASM_PFX(IoWriteFifo32):\r
119 cld\r
120 xchg rcx, rdx\r
121 xchg rsi, r8 ; rsi: buffer address; r8: save rsi\r
122rep outsd\r
123 mov rsi, r8 ; restore rsi\r
124 ret\r
125\r