diff --git a/reactos/ntoskrnl/ex/i386/ioport.S b/reactos/ntoskrnl/ex/i386/ioport.S new file mode 100644 index 00000000000..285e866d130 --- /dev/null +++ b/reactos/ntoskrnl/ex/i386/ioport.S @@ -0,0 +1,220 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/ex/i386/ioport.S + * PURPOSE: FASTCALL Interlocked Functions + * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) + */ + +/* INCLUDES ******************************************************************/ + +#include +.intel_syntax noprefix + +/* GLOBALS *******************************************************************/ + +.globl _READ_REGISTER_UCHAR@4 +.globl _READ_REGISTER_USHORT@4 +.globl _READ_REGISTER_ULONG@4 +.globl _READ_REGISTER_BUFFER_UCHAR@12 +.globl _READ_REGISTER_BUFFER_USHORT@12 +.globl _READ_REGISTER_BUFFER_ULONG@12 +.globl _WRITE_REGISTER_UCHAR@8 +.globl _WRITE_REGISTER_USHORT@8 +.globl _WRITE_REGISTER_ULONG@8 +.globl _WRITE_REGISTER_BUFFER_UCHAR@12 +.globl _WRITE_REGISTER_BUFFER_USHORT@12 +.globl _WRITE_REGISTER_BUFFER_ULONG@12 + +/* FUNCTIONS *****************************************************************/ + +.func READ_REGISTER_UCHAR@4 +_READ_REGISTER_UCHAR@4: + + /* Return the requested memory location */ + mov edx, [esp+4] + mov al, [edx] + ret 4 +.endfunc + +.func READ_REGISTER_USHORT@4 +_READ_REGISTER_USHORT@4: + + /* Return the requested memory location */ + mov edx, [esp+4] + mov ax, [edx] + ret 4 +.endfunc + +.func READ_REGISTER_ULONG@4 +_READ_REGISTER_ULONG@4: + + /* Return the requested memory location */ + mov edx, [esp+4] + mov eax, [edx] + ret 4 +.endfunc + +.func READ_REGISTER_BUFFER_UCHAR@12 +_READ_REGISTER_BUFFER_UCHAR@12: + + /* Save volatiles */ + mov eax, esi + mov edx, edi + + /* Do the transfer */ + mov ecx, [esp+12] + mov esi, [esp+4] + mov edi, [esp+8] + rep movsb + + /* Restore volatiles and return */ + mov edi, edx + mov esi, eax + ret 12 +.endfunc + +.func READ_REGISTER_BUFFER_USHORT@12 +_READ_REGISTER_BUFFER_USHORT@12: + + /* Save volatiles */ + mov eax, esi + mov edx, edi + + /* Do the transfer */ + mov ecx, [esp+12] + mov esi, [esp+4] + mov edi, [esp+8] + rep movsw + + /* Restore volatiles and return */ + mov edi, edx + mov esi, eax + ret 12 +.endfunc + +.func READ_REGISTER_BUFFER_ULONG@12 +_READ_REGISTER_BUFFER_ULONG@12: + + /* Save volatiles */ + mov eax, esi + mov edx, edi + + /* Do the transfer */ + mov ecx, [esp+12] + mov esi, [esp+4] + mov edi, [esp+8] + rep movsd + + /* Restore volatiles and return */ + mov edi, edx + mov esi, eax + ret 12 +.endfunc + +.func WRITE_REGISTER_UCHAR@8 +_WRITE_REGISTER_UCHAR@8: + + /* Write to memory */ + mov edx, [esp+4] + mov al, [esp+8] + mov [edx], al + + /* Flush posted write buffers and return */ + lock or [esp+4], edx + ret 8 +.endfunc + +.func WRITE_REGISTER_USHORT@8 +_WRITE_REGISTER_USHORT@8: + + /* Write to memory */ + mov edx, [esp+4] + mov eax, [esp+8] + mov [edx], ax + + /* Flush posted write buffers and return */ + lock or [esp+4], edx + ret 8 +.endfunc + +.func WRITE_REGISTER_ULONG@8 +_WRITE_REGISTER_ULONG@8: + + /* Write to memory */ + mov edx, [esp+4] + mov eax, [esp+8] + mov [edx], eax + + /* Flush posted write buffers and return */ + lock or [esp+4], edx + ret 8 +.endfunc + +.func WRITE_REGISTER_BUFFER_UCHAR@12 +_WRITE_REGISTER_BUFFER_UCHAR@12: + + /* Save volatiles */ + mov eax, esi + mov edx, edi + + /* Do the transfer */ + mov ecx, [esp+12] + mov esi, [esp+8] + mov edi, [esp+4] + rep movsb + + /* Flush posted write buffers */ + lock or [esp+4], ecx + + /* Restole volatiles and return */ + mov edi, edx + mov esi, eax + ret 12 +.endfunc + +.func WRITE_REGISTER_BUFFER_USHORT@12 +_WRITE_REGISTER_BUFFER_USHORT@12: + + /* Save volatiles */ + mov eax, esi + mov edx, edi + + /* Do the transfer */ + mov ecx, [esp+12] + mov esi, [esp+8] + mov edi, [esp+4] + rep movsw + + /* Flush posted write buffers */ + lock or [esp+4], ecx + + /* Restole volatiles and return */ + mov edi, edx + mov esi, eax + ret 12 +.endfunc + +.func WRITE_REGISTER_BUFFER_ULONG@12 +_WRITE_REGISTER_BUFFER_ULONG@12: + + /* Save volatiles */ + mov eax, esi + mov edx, edi + + /* Do the transfer */ + mov ecx, [esp+12] + mov esi, [esp+8] + mov edi, [esp+4] + rep movsd + + /* Flush posted write buffers */ + lock or [esp+4], ecx + + /* Restole volatiles and return */ + mov edi, edx + mov esi, eax + ret 12 +.endfunc + +/* EOF */ diff --git a/reactos/ntoskrnl/ntoskrnl.rbuild b/reactos/ntoskrnl/ntoskrnl.rbuild index 86f55d7f1da..3a7c86ef22d 100644 --- a/reactos/ntoskrnl/ntoskrnl.rbuild +++ b/reactos/ntoskrnl/ntoskrnl.rbuild @@ -125,6 +125,7 @@ interlck_asm.S fastinterlck_asm.S + ioport.S atom.c @@ -333,7 +334,6 @@ libsupp.c misc.c - regio.c strtok.c diff --git a/reactos/ntoskrnl/rtl/regio.c b/reactos/ntoskrnl/rtl/regio.c deleted file mode 100644 index 1f6162da4c1..00000000000 --- a/reactos/ntoskrnl/rtl/regio.c +++ /dev/null @@ -1,190 +0,0 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: ntoskrnl/rtl/regio.c - * PURPOSE: Register io functions - * - * PROGRAMMERS: Eric Kohl (ekohl@abo.rhein-zeitung.de) - */ - -#include - - -/* FUNCTIONS ***************************************************************/ - -UCHAR -STDCALL -READ_REGISTER_UCHAR ( - PUCHAR Register - ) -{ - return *Register; -} - -/* - * @implemented - */ -USHORT -STDCALL -READ_REGISTER_USHORT ( - PUSHORT Register - ) -{ - return *Register; -} - -/* - * @implemented - */ -ULONG -STDCALL -READ_REGISTER_ULONG ( - PULONG Register - ) -{ - return *Register; -} - -/* - * @implemented - */ -VOID -STDCALL -READ_REGISTER_BUFFER_UCHAR ( - PUCHAR Register, - PUCHAR Buffer, - ULONG Count - ) -{ - while (Count--) - { - *Buffer++ = *Register++; - } -} - -/* - * @implemented - */ -VOID -STDCALL -READ_REGISTER_BUFFER_USHORT ( - PUSHORT Register, - PUSHORT Buffer, - ULONG Count - ) -{ - while (Count--) - { - *Buffer++ = *Register++; - } -} - -/* - * @implemented - */ -VOID -STDCALL -READ_REGISTER_BUFFER_ULONG ( - PULONG Register, - PULONG Buffer, - ULONG Count - ) -{ - while (Count--) - { - *Buffer++ = *Register++; - } -} - -/* - * @implemented - */ -VOID -STDCALL -WRITE_REGISTER_UCHAR ( - PUCHAR Register, - UCHAR Value - ) -{ - *Register = Value; -} - -/* - * @implemented - */ -VOID -STDCALL -WRITE_REGISTER_USHORT ( - PUSHORT Register, - USHORT Value - ) -{ - *Register = Value; -} - -/* - * @implemented - */ -VOID -STDCALL -WRITE_REGISTER_ULONG ( - PULONG Register, - ULONG Value - ) -{ - *Register = Value; -} - -/* - * @implemented - */ -VOID -STDCALL -WRITE_REGISTER_BUFFER_UCHAR ( - PUCHAR Register, - PUCHAR Buffer, - ULONG Count - ) -{ - while (Count--) - { - *Register++ = *Buffer++; - } -} - -/* - * @implemented - */ -VOID -STDCALL -WRITE_REGISTER_BUFFER_USHORT ( - PUSHORT Register, - PUSHORT Buffer, - ULONG Count - ) -{ - while (Count--) - { - *Register++ = *Buffer++; - } -} - -/* - * @implemented - */ -VOID -STDCALL -WRITE_REGISTER_BUFFER_ULONG ( - PULONG Register, - PULONG Buffer, - ULONG Count -) -{ - while (Count--) - { - *Register++ = *Buffer++; - } -} - -/* EOF */