|
|
1.1 root 1: / This file contains implementations of I/O primitives used by the DDI/DDK
2: / system. With GCC or other compilers that permit in-line generation of
3: / assembly-language code in C programs a separate assembly language file
4: / containing these implementations is not necessary. Since the MWC C compiler
5: / that is the default development tool under Coherent does not permit inlining,
6: / references to the I/O functions will be resolved to the external-linkage
7: / implementations below.
8: .unixorder
9:
10: / The header file <kernel/x86io.h> contains prototypes for the functions below.
11: / The functions inb (), inw (), inl (), outb (), outw () and outl () which are
12: / prototyped there are already present in the base Coherent implementation with
13: / identical functionality to the DDI/DDK definitions.
14:
15: .globl repinsb
16: .globl repinsw
17: .globl repinsd
18:
19: .globl repoutsb
20: .globl repoutsw
21: .globl repoutsd
22:
23: / void repinsb (int _port, uchar_t * _addr, int _count);
24: repinsb:
25: mov %edi, %eax / save %edi
26:
27: mov 4(%esp), %edx / port
28: mov 8(%esp), %edi / address
29: mov 12(%esp), %ecx / count
30:
31: rep
32: insb
33:
34: mov %eax, %edi
35: ret
36:
37: / void repinsw (int _port, ushort_t * _addr, int _count);
38: repinsw:
39: mov %edi, %eax / save %edi
40:
41: mov 4(%esp), %edx / port
42: mov 8(%esp), %edi / address
43: mov 12(%esp), %ecx / count
44:
45: rep
46: insw
47:
48: mov %eax, %edi
49: ret
50:
51: / void repinsd (int _port, ulong_t * addr, int _count);
52: repinsd:
53: mov %edi, %eax / save %edi
54:
55: mov 4(%esp), %edx / port
56: mov 8(%esp), %edi / address
57: mov 12(%esp), %ecx / count
58:
59: rep
60: insl
61:
62: mov %eax, %edi
63: ret
64:
65: / void repoutsb (int _port, uchar_t * _addr, int _count);
66: repoutsb:
67: mov %esi, %eax / save %esi
68:
69: mov 4(%esp), %edx / port
70: mov 8(%esp), %esi / addr
71: mov 12(%esp), %ecx / count
72:
73: rep
74: outsb
75:
76: mov %eax, %esi
77: ret
78:
79: / void repoutsw (int _port, ushort_t * _addr, int _count);
80: repoutsw:
81: mov %esi, %eax / save %esi
82:
83: mov 4(%esp), %edx / port
84: mov 8(%esp), %esi / addr
85: mov 12(%esp), %ecx / count
86:
87: rep
88: outsw
89:
90: mov %eax, %esi
91: ret
92:
93: / void repoutsd (int _port, ulong_t * _addr, int _count);
94: repoutsd:
95: mov %esi, %eax / save %esi
96:
97: mov 4(%esp), %edx / port
98: mov 8(%esp), %esi / addr
99: mov 12(%esp), %ecx / count
100:
101: rep
102: outsl
103:
104: mov %eax, %esi
105: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.