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