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