mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 05:59:28 +02:00
* IOPERM for FreeBSD. Port routines moved from linsysca to Unix again .
This commit is contained in:
parent
41648a95f7
commit
35789061ba
@ -117,7 +117,7 @@ const
|
||||
syscall_nr_getdomainname =162;
|
||||
syscall_nr_setdomainname =163;
|
||||
syscall_nr_uname =164;
|
||||
syscall_nr_sysarch =165;
|
||||
|
||||
syscall_nr_rtprio =166;
|
||||
syscall_nr_semsys =169;
|
||||
syscall_nr_msgsys =170;
|
||||
@ -242,7 +242,7 @@ syscall_nr_getdirentries =196;
|
||||
}
|
||||
|
||||
{More or less checked BSD syscalls}
|
||||
|
||||
syscall_nr_sysarch = 165;
|
||||
syscall_nr_accept = 30;
|
||||
syscall_nr_access = 33;
|
||||
syscall_nr_bind = 104;
|
||||
@ -316,7 +316,10 @@ syscall_nr_getdirentries =196;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 2000-10-26 23:00:12 peter
|
||||
Revision 1.4 2001-01-22 07:25:10 marco
|
||||
* IOPERM for FreeBSD. Port routines moved from linsysca to Unix again .
|
||||
|
||||
Revision 1.3 2000/10/26 23:00:12 peter
|
||||
* fixes merges
|
||||
|
||||
Revision 1.2 2000/09/18 13:42:35 marco
|
||||
|
@ -681,9 +681,83 @@ asm
|
||||
popl %esi
|
||||
end;
|
||||
|
||||
|
||||
{
|
||||
* Architecture specific syscalls (i386) using the SYSARCH pseudo call
|
||||
}
|
||||
|
||||
{$packrecords C}
|
||||
|
||||
TYPE uint=CARDINAL;
|
||||
|
||||
CONST
|
||||
I386_GET_LDT =0;
|
||||
I386_SET_LDT =1;
|
||||
{ I386_IOPL }
|
||||
I386_GET_IOPERM =3;
|
||||
I386_SET_IOPERM =4;
|
||||
{ xxxxx }
|
||||
I386_VM86 =6;
|
||||
|
||||
{
|
||||
type i386_ldt_args = record
|
||||
int start : longint;
|
||||
union descriptor *descs;
|
||||
int num;
|
||||
end;
|
||||
}
|
||||
type
|
||||
i386_ioperm_args = record
|
||||
start : uint;
|
||||
length : uint;
|
||||
enable : longint;
|
||||
end;
|
||||
|
||||
|
||||
i386_vm86_args = record
|
||||
sub_op : longint; { sub-operation to perform }
|
||||
sub_args : pchar; { args }
|
||||
end;
|
||||
|
||||
sysarch_args = record
|
||||
op : longint;
|
||||
parms : pchar;
|
||||
end;
|
||||
|
||||
{
|
||||
int i386_get_ldt __P((int, union descriptor *, int));
|
||||
int i386_set_ldt __P((int, union descriptor *, int));
|
||||
int i386_get_ioperm __P((unsigned int, unsigned int *, int *));
|
||||
int i386_set_ioperm __P((unsigned int, unsigned int, int));
|
||||
int i386_vm86 __P((int, void *));
|
||||
int i386_set_watch __P((int watchnum, unsigned int watchaddr, int size,
|
||||
int access, struct dbreg * d));
|
||||
int i386_clr_watch __P((int watchnum, struct dbreg * d));
|
||||
}
|
||||
|
||||
Function IOPerm(From,Num:CARDINAL;Value:Longint):boolean;
|
||||
|
||||
var sg : i386_ioperm_args;
|
||||
sa : sysarch_args;
|
||||
|
||||
begin
|
||||
sg.start:=From;
|
||||
sg.length:=Num;
|
||||
sg.enable:=value;
|
||||
sa.op:=i386_SET_IOPERM;
|
||||
sa.parms:=@sg;
|
||||
IOPerm:=do_syscall(syscall_nr_sysarch,longint(@sa))=0;
|
||||
LinuxError:=ErrNo;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 2000-10-26 22:51:12 peter
|
||||
Revision 1.4 2001-01-22 07:25:10 marco
|
||||
* IOPERM for FreeBSD. Port routines moved from linsysca to Unix again .
|
||||
|
||||
Revision 1.3 2000/10/26 22:51:12 peter
|
||||
* nano sleep (merged)
|
||||
|
||||
Revision 1.2 2000/09/18 13:14:50 marco
|
||||
|
@ -924,276 +924,13 @@ begin
|
||||
LinuxError:=Errno;
|
||||
end;
|
||||
|
||||
{$IFDEF I386}
|
||||
|
||||
Procedure WritePort (Port : Longint; Value : Byte);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movb value,%al
|
||||
outb %al,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
Procedure WritePort (Port : Longint; Value : Word);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movw value,%ax
|
||||
outw %ax,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePort (Port : Longint; Value : Longint);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movl value,%eax
|
||||
outl %eax,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
Procedure WritePortB (Port : Longint; Value : Byte);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movb value,%al
|
||||
outb %al,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
Procedure WritePortW (Port : Longint; Value : Word);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movw value,%ax
|
||||
outw %ax,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePortL (Port : Longint; Value : Longint);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movl value,%eax
|
||||
outl %eax,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePortl (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Writes 'Count' longints from 'Buf' to Port
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%esi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
outsl
|
||||
end ['ECX','ESI','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePortW (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Writes 'Count' words from 'Buf' to Port
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%esi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
outsw
|
||||
end ['ECX','ESI','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePortB (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Writes 'Count' bytes from 'Buf' to Port
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%esi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
outsb
|
||||
end ['ECX','ESI','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPort (Port : Longint; Var Value : Byte);
|
||||
{
|
||||
Reads 'Value' from port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
inb %dx,%al
|
||||
movl value,%edx
|
||||
movb %al,(%edx)
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPort (Port : Longint; Var Value : Word);
|
||||
{
|
||||
Reads 'Value' from port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
inw %dx,%ax
|
||||
movl value,%edx
|
||||
movw %ax,(%edx)
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPort (Port : Longint; Var Value : Longint);
|
||||
{
|
||||
Reads 'Value' from port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
inl %dx,%eax
|
||||
movl value,%edx
|
||||
movl %eax,(%edx)
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
function ReadPortB (Port : Longint): Byte; assembler;
|
||||
{
|
||||
Reads a byte from port 'Port'
|
||||
}
|
||||
|
||||
asm
|
||||
xorl %eax,%eax
|
||||
movl port,%edx
|
||||
inb %dx,%al
|
||||
end ['EAX','EDX'];
|
||||
|
||||
|
||||
|
||||
function ReadPortW (Port : Longint): Word; assembler;
|
||||
{
|
||||
Reads a word from port 'Port'
|
||||
}
|
||||
asm
|
||||
xorl %eax,%eax
|
||||
movl port,%edx
|
||||
inw %dx,%ax
|
||||
end ['EAX','EDX'];
|
||||
|
||||
|
||||
|
||||
function ReadPortL (Port : Longint): LongInt; assembler;
|
||||
{
|
||||
Reads a LongInt from port 'Port'
|
||||
}
|
||||
asm
|
||||
movl port,%edx
|
||||
inl %dx,%eax
|
||||
end ['EAX','EDX'];
|
||||
|
||||
|
||||
|
||||
Procedure ReadPortL (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Reads 'Count' longints from port 'Port' to 'Buf'.
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%edi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
insl
|
||||
end ['ECX','EDI','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPortW (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Reads 'Count' words from port 'Port' to 'Buf'.
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%edi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
insw
|
||||
end ['ECX','EDI','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPortB (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Reads 'Count' bytes from port 'Port' to 'Buf'.
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%edi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
insb
|
||||
end ['ECX','EDI','EDX'];
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.5 2000-12-28 20:50:04 peter
|
||||
Revision 1.6 2001-01-22 07:25:10 marco
|
||||
* IOPERM for FreeBSD. Port routines moved from linsysca to Unix again .
|
||||
|
||||
Revision 1.5 2000/12/28 20:50:04 peter
|
||||
* merged fixes from 1.0.x
|
||||
|
||||
Revision 1.4 2000/10/26 22:51:12 peter
|
||||
|
276
rtl/unix/unix.pp
276
rtl/unix/unix.pp
@ -413,9 +413,8 @@ function MUnMap (P : Pointer; Size : Longint) : Boolean;
|
||||
Port IO functions
|
||||
***************************}
|
||||
|
||||
{$ifndef BSD}
|
||||
Function IOperm (From,Num : Cardinal; Value : Longint) : boolean;
|
||||
{$IFDEF I386}
|
||||
{$ifdef i386}
|
||||
Procedure WritePort (Port : Longint; Value : Byte);
|
||||
Procedure WritePort (Port : Longint; Value : Word);
|
||||
Procedure WritePort (Port : Longint; Value : Longint);
|
||||
@ -435,7 +434,6 @@ Procedure ReadPortL (Port : Longint; Var Buf; Count: longint);
|
||||
Procedure ReadPortW (Port : Longint; Var Buf; Count: longint);
|
||||
Procedure ReadPortB (Port : Longint; Var Buf; Count: longint);
|
||||
{$endif}
|
||||
{$endif}
|
||||
|
||||
{**************************
|
||||
Utility functions
|
||||
@ -2617,6 +2615,273 @@ end;
|
||||
Memory functions
|
||||
--------------------------------}
|
||||
|
||||
{$IFDEF I386}
|
||||
|
||||
Procedure WritePort (Port : Longint; Value : Byte);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movb value,%al
|
||||
outb %al,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
Procedure WritePort (Port : Longint; Value : Word);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movw value,%ax
|
||||
outw %ax,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePort (Port : Longint; Value : Longint);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movl value,%eax
|
||||
outl %eax,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
Procedure WritePortB (Port : Longint; Value : Byte);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movb value,%al
|
||||
outb %al,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
Procedure WritePortW (Port : Longint; Value : Word);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movw value,%ax
|
||||
outw %ax,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePortL (Port : Longint; Value : Longint);
|
||||
{
|
||||
Writes 'Value' to port 'Port'
|
||||
}
|
||||
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
movl value,%eax
|
||||
outl %eax,%dx
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePortl (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Writes 'Count' longints from 'Buf' to Port
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%esi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
outsl
|
||||
end ['ECX','ESI','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePortW (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Writes 'Count' words from 'Buf' to Port
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%esi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
outsw
|
||||
end ['ECX','ESI','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure WritePortB (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Writes 'Count' bytes from 'Buf' to Port
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%esi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
outsb
|
||||
end ['ECX','ESI','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPort (Port : Longint; Var Value : Byte);
|
||||
{
|
||||
Reads 'Value' from port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
inb %dx,%al
|
||||
movl value,%edx
|
||||
movb %al,(%edx)
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPort (Port : Longint; Var Value : Word);
|
||||
{
|
||||
Reads 'Value' from port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
inw %dx,%ax
|
||||
movl value,%edx
|
||||
movw %ax,(%edx)
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPort (Port : Longint; Var Value : Longint);
|
||||
{
|
||||
Reads 'Value' from port 'Port'
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl port,%edx
|
||||
inl %dx,%eax
|
||||
movl value,%edx
|
||||
movl %eax,(%edx)
|
||||
end ['EAX','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
function ReadPortB (Port : Longint): Byte; assembler;
|
||||
{
|
||||
Reads a byte from port 'Port'
|
||||
}
|
||||
|
||||
asm
|
||||
xorl %eax,%eax
|
||||
movl port,%edx
|
||||
inb %dx,%al
|
||||
end ['EAX','EDX'];
|
||||
|
||||
|
||||
|
||||
function ReadPortW (Port : Longint): Word; assembler;
|
||||
{
|
||||
Reads a word from port 'Port'
|
||||
}
|
||||
asm
|
||||
xorl %eax,%eax
|
||||
movl port,%edx
|
||||
inw %dx,%ax
|
||||
end ['EAX','EDX'];
|
||||
|
||||
|
||||
|
||||
function ReadPortL (Port : Longint): LongInt; assembler;
|
||||
{
|
||||
Reads a LongInt from port 'Port'
|
||||
}
|
||||
asm
|
||||
movl port,%edx
|
||||
inl %dx,%eax
|
||||
end ['EAX','EDX'];
|
||||
|
||||
|
||||
|
||||
Procedure ReadPortL (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Reads 'Count' longints from port 'Port' to 'Buf'.
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%edi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
insl
|
||||
end ['ECX','EDI','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPortW (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Reads 'Count' words from port 'Port' to 'Buf'.
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%edi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
insw
|
||||
end ['ECX','EDI','EDX'];
|
||||
end;
|
||||
|
||||
|
||||
|
||||
Procedure ReadPortB (Port : Longint; Var Buf; Count: longint);
|
||||
{
|
||||
Reads 'Count' bytes from port 'Port' to 'Buf'.
|
||||
}
|
||||
begin
|
||||
asm
|
||||
movl count,%ecx
|
||||
movl buf,%edi
|
||||
movl port,%edx
|
||||
cld
|
||||
rep
|
||||
insb
|
||||
end ['ECX','EDI','EDX'];
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
|
||||
|
||||
Initialization
|
||||
@ -2629,7 +2894,10 @@ End.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2001-01-21 20:21:41 marco
|
||||
Revision 1.2 2001-01-22 07:25:10 marco
|
||||
* IOPERM for FreeBSD. Port routines moved from linsysca to Unix again .
|
||||
|
||||
Revision 1.1 2001/01/21 20:21:41 marco
|
||||
* Rename fest II. Rtl OK
|
||||
|
||||
Revision 1.6 2000/12/28 20:42:12 peter
|
||||
|
Loading…
Reference in New Issue
Block a user