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