]> git.proxmox.com Git - mirror_edk2.git/blob - PcAtChipsetPkg/PciHostBridgeDxe/Ia32/IoFifo.S
PcAtChipsetPkg/PciHostBridgeDxe: Improve KVM FIFO I/O read/write performance
[mirror_edk2.git] / PcAtChipsetPkg / PciHostBridgeDxe / Ia32 / 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,
19 # IN UINTN Count,
20 # IN VOID *Buffer
21 # );
22 #------------------------------------------------------------------------------
23 ASM_GLOBAL ASM_PFX(IoReadFifo8)
24 ASM_PFX(IoReadFifo8):
25 push %edi
26 cld
27 movw 8(%esp), %dx
28 mov 12(%esp), %ecx
29 mov 16(%esp), %edi
30 rep insb
31 pop %edi
32 ret
33
34 #------------------------------------------------------------------------------
35 # VOID
36 # EFIAPI
37 # IoReadFifo16 (
38 # IN UINTN Port,
39 # IN UINTN Count,
40 # IN VOID *Buffer
41 # );
42 #------------------------------------------------------------------------------
43 ASM_GLOBAL ASM_PFX(IoReadFifo16)
44 ASM_PFX(IoReadFifo16):
45 push %edi
46 cld
47 movw 8(%esp), %dx
48 mov 12(%esp), %ecx
49 mov 16(%esp), %edi
50 rep insw
51 pop %edi
52 ret
53
54 #------------------------------------------------------------------------------
55 # VOID
56 # EFIAPI
57 # IoReadFifo32 (
58 # IN UINTN Port,
59 # IN UINTN Count,
60 # IN VOID *Buffer
61 # );
62 #------------------------------------------------------------------------------
63 ASM_GLOBAL ASM_PFX(IoReadFifo32)
64 ASM_PFX(IoReadFifo32):
65 push %edi
66 cld
67 movw 8(%esp), %dx
68 mov 12(%esp), %ecx
69 mov 16(%esp), %edi
70 rep insl
71 pop %edi
72 ret
73
74 #------------------------------------------------------------------------------
75 # VOID
76 # EFIAPI
77 # IoWriteFifo8 (
78 # IN UINTN Port,
79 # IN UINTN Count,
80 # IN VOID *Buffer
81 # );
82 #------------------------------------------------------------------------------
83 ASM_GLOBAL ASM_PFX(IoWriteFifo8)
84 ASM_PFX(IoWriteFifo8):
85 push %esi
86 cld
87 movw 8(%esp), %dx
88 mov 12(%esp), %ecx
89 mov 16(%esp), %esi
90 rep outsb
91 pop %esi
92 ret
93
94 #------------------------------------------------------------------------------
95 # VOID
96 # EFIAPI
97 # IoWriteFifo16 (
98 # IN UINTN Port,
99 # IN UINTN Count,
100 # IN VOID *Buffer
101 # );
102 #------------------------------------------------------------------------------
103 ASM_GLOBAL ASM_PFX(IoWriteFifo16)
104 ASM_PFX(IoWriteFifo16):
105 push %esi
106 cld
107 movw 8(%esp), %dx
108 mov 12(%esp), %ecx
109 mov 16(%esp), %esi
110 rep outsw
111 pop %esi
112 ret
113
114 #------------------------------------------------------------------------------
115 # VOID
116 # EFIAPI
117 # IoWriteFifo32 (
118 # IN UINTN Port,
119 # IN UINTN Count,
120 # IN VOID *Buffer
121 # );
122 #------------------------------------------------------------------------------
123 ASM_GLOBAL ASM_PFX(IoWriteFifo32)
124 ASM_PFX(IoWriteFifo32):
125 push %esi
126 cld
127 movw 8(%esp), %dx
128 mov 12(%esp), %ecx
129 mov 16(%esp), %esi
130 rep outsl
131 pop %esi
132 ret
133