|
|
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.