mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
694f9c4f47
commit
f8b9f12982
|
@ -92,6 +92,7 @@ procedure KNOTE_UNLOCKED(list:p_knlist;hint:QWORD);
|
|||
function M_KNLIST_EMPTY(list:p_knlist):Boolean;
|
||||
|
||||
function sys_kqueue():Integer;
|
||||
function sys_kqueueex(name:PChar):Integer;
|
||||
function sys_kevent(fd:Integer;
|
||||
changelist:Pointer;
|
||||
nchanges:Integer;
|
||||
|
@ -753,21 +754,17 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function sys_kqueue():Integer;
|
||||
label
|
||||
done2;
|
||||
function kern_kqueue(pfd:PInteger;name:PAnsiChar):Integer;
|
||||
var
|
||||
td:p_kthread;
|
||||
kq:p_kqueue;
|
||||
fp:p_file;
|
||||
fd,error:Integer;
|
||||
begin
|
||||
td:=curkthread;
|
||||
if (td=nil) then Exit(-1);
|
||||
Result:=0;
|
||||
|
||||
//fdp:=td^.td_proc^.p_fd;
|
||||
error:=falloc(@fp, @fd, 0);
|
||||
if (error<>0) then goto done2;
|
||||
if (error<>0) then Exit(error);
|
||||
|
||||
{ An extra reference on `nfp' has been held for us by falloc(). }
|
||||
kq:=AllocMem(SizeOf(t_kqueue));
|
||||
|
@ -778,6 +775,11 @@ begin
|
|||
knlist_init_mtx(@kq^.kq_sel.si_note, @kq^.kq_lock);
|
||||
//TASK_INIT(@kq^.kq_task, 0, kqueue_task, kq);
|
||||
|
||||
if (name<>nil) then
|
||||
begin
|
||||
kq^.kq_name:=name;
|
||||
end;
|
||||
|
||||
FILEDESC_XLOCK(@fd_table);
|
||||
TAILQ_INSERT_HEAD(@fd_table.fd_kqlist, kq, @kq^.kq_list);
|
||||
FILEDESC_XUNLOCK(@fd_table);
|
||||
|
@ -785,11 +787,49 @@ begin
|
|||
finit(fp, FREAD or FWRITE, DTYPE_KQUEUE, kq, @kqueueops);
|
||||
fdrop(fp);
|
||||
|
||||
td^.td_retval[0]:=fd;
|
||||
done2:
|
||||
pfd^:=fd;
|
||||
|
||||
Exit(error);
|
||||
end;
|
||||
|
||||
function sys_kqueue():Integer;
|
||||
var
|
||||
td:p_kthread;
|
||||
fd:Integer;
|
||||
begin
|
||||
td:=curkthread;
|
||||
if (td=nil) then Exit(-1);
|
||||
|
||||
Result:=kern_kqueue(@fd,nil);
|
||||
|
||||
if (Result=0) then
|
||||
begin
|
||||
td^.td_retval[0]:=fd;
|
||||
end;
|
||||
end;
|
||||
|
||||
function sys_kqueueex(name:PChar):Integer;
|
||||
var
|
||||
td:p_kthread;
|
||||
fd:Integer;
|
||||
_name:t_kq_name;
|
||||
begin
|
||||
td:=curkthread;
|
||||
if (td=nil) then Exit(-1);
|
||||
|
||||
_name:=Default(t_kq_name);
|
||||
|
||||
Result:=copyinstr(name,@_name,SizeOf(t_kq_name),nil);
|
||||
if (Result<>0) then Exit;
|
||||
|
||||
Result:=kern_kqueue(@fd,@_name);
|
||||
|
||||
if (Result=0) then
|
||||
begin
|
||||
td^.td_retval[0]:=fd;
|
||||
end;
|
||||
end;
|
||||
|
||||
type
|
||||
p_kevent_args=^t_kevent_args;
|
||||
t_kevent_args=record
|
||||
|
|
|
@ -49,8 +49,7 @@ const
|
|||
|
||||
type
|
||||
p_evf=^t_evf;
|
||||
t_evf=packed record
|
||||
desc :t_id_named_desc;
|
||||
t_evf=packed object(t_id_named_desc)
|
||||
bitPattern:QWORD;
|
||||
mtx :mtx;
|
||||
cv :t_cv;
|
||||
|
@ -82,8 +81,8 @@ end;
|
|||
|
||||
function evf_init(evf:p_evf;attr:DWORD;initPattern:QWORD):Integer;
|
||||
begin
|
||||
evf^.desc.desc.free:=@evf_free;
|
||||
evf^.desc.objt:=EVF_OBJT;
|
||||
evf^.desc.free:=@evf_free;
|
||||
evf^.objt:=EVF_OBJT;
|
||||
evf^.bitPattern:=initPattern;
|
||||
mtx_init(evf^.mtx,'evf mtx');
|
||||
cv_init(@evf^.cv,'evf cv');
|
||||
|
@ -558,7 +557,7 @@ begin
|
|||
if (evf=nil) then Exit(ENOMEM); //EAGAIN
|
||||
|
||||
evf_init(evf,attr,initPattern);
|
||||
evf^.desc.name:=_name;
|
||||
evf^.name:=_name;
|
||||
|
||||
if not id_name_new(@named_table,evf,@key) then
|
||||
begin
|
||||
|
|
|
@ -12,7 +12,7 @@ type
|
|||
t_id_name=array[0..31] of AnsiChar;
|
||||
|
||||
p_id_named_desc=^t_id_named_desc;
|
||||
t_id_named_desc=packed record
|
||||
t_id_named_desc=packed object
|
||||
desc:t_id_desc;
|
||||
objt:Integer;
|
||||
name:t_id_name;
|
||||
|
|
|
@ -10,8 +10,7 @@ uses
|
|||
|
||||
type
|
||||
p_namedobj=^t_namedobj;
|
||||
t_namedobj=packed record
|
||||
desc:t_id_named_desc;
|
||||
t_namedobj=packed object(t_id_named_desc)
|
||||
objp:Pointer;
|
||||
end;
|
||||
|
||||
|
@ -63,9 +62,9 @@ begin
|
|||
obj:=AllocMem(SizeOf(t_namedobj));
|
||||
if (obj=nil) then Exit(ENOMEM);
|
||||
|
||||
obj^.desc.desc.free:=@namedobj_free;
|
||||
obj^.desc.objt:=Word(objt) or NAMED_OBJT;
|
||||
obj^.desc.name:=name;
|
||||
obj^.desc.free:=@namedobj_free;
|
||||
obj^.objt:=Word(objt) or NAMED_OBJT;
|
||||
obj^.name:=name;
|
||||
obj^.objp:=objp;
|
||||
|
||||
if not id_name_new(@named_table,obj,@key) then
|
||||
|
|
|
@ -38,8 +38,7 @@ const
|
|||
|
||||
type
|
||||
p_osem=^t_osem;
|
||||
t_osem=packed record
|
||||
desc :t_id_named_desc;
|
||||
t_osem=packed object(t_id_named_desc)
|
||||
mtx :mtx;
|
||||
cv :t_cv;
|
||||
_align :Integer;
|
||||
|
@ -72,8 +71,8 @@ end;
|
|||
|
||||
function osem_init(sem:p_osem;attr:DWORD;initCount,max_count:Integer):Integer;
|
||||
begin
|
||||
sem^.desc.desc.free:=@osem_free;
|
||||
sem^.desc.objt :=SEMA_OBJT;
|
||||
sem^.desc.free :=@osem_free;
|
||||
sem^.objt :=SEMA_OBJT;
|
||||
sem^.count :=initCount;
|
||||
sem^.init_count:=initCount;
|
||||
sem^.max_count :=max_count;
|
||||
|
@ -410,7 +409,7 @@ begin
|
|||
if (sem=nil) then Exit(ENOMEM); //EAGAIN
|
||||
|
||||
osem_init(sem,attr,initCount,maxCount);
|
||||
sem^.desc.name:=_name;
|
||||
sem^.name:=_name;
|
||||
|
||||
if not id_name_new(@named_table,@sem^.desc,@key) then
|
||||
begin
|
||||
|
|
|
@ -25,6 +25,8 @@ const
|
|||
KQ_TASKDRAIN=$40; // waiting for task to drain
|
||||
|
||||
type
|
||||
t_kq_name=array[0..31] of AnsiChar;
|
||||
|
||||
pp_kqueue=^p_kqueue;
|
||||
p_kqueue=^t_kqueue;
|
||||
t_kqueue=record
|
||||
|
@ -42,6 +44,7 @@ type
|
|||
kq_knhashmask:QWORD; // size of knhash
|
||||
kq_knhash :p_klist; // hash table for knotes
|
||||
//kq_task:task;
|
||||
kq_name :t_kq_name;
|
||||
end;
|
||||
|
||||
|
||||
|
|
|
@ -74,6 +74,7 @@ function mkdir(path:PChar;mode:Integer):Integer;
|
|||
function rmdir(path:PChar):Integer;
|
||||
function utimes(path:PChar;tptr:Pointer):Integer;
|
||||
function adjtime(delta,olddelta:Pointer):Integer;
|
||||
function kqueueex(name:PChar):Integer;
|
||||
function setsid():Integer;
|
||||
function sysarch(op:Integer;parms:Pointer):Integer;
|
||||
function rtprio(func,pid:Integer;rtp:Pointer):Integer;
|
||||
|
@ -122,6 +123,8 @@ Function sigtimedwait(oset,info,timeout:Pointer):Integer;
|
|||
Function sigwaitinfo(oset,info:Pointer):Integer;
|
||||
function getresuid(ruid,euid,suid:PInteger):Integer;
|
||||
function getresgid(rgid,egid,sgid:PInteger):Integer;
|
||||
function kqueue():Integer;
|
||||
function kevent(fd:Integer;changelist:Pointer;nchanges:Integer;eventlist:Pointer;nevents:Integer;timeout:Pointer):Integer;
|
||||
function nmount(iovp:Pointer;iovcnt:DWORD;flags:QWORD):Integer;
|
||||
function lchflags(path:PChar;flags:Integer):Integer;
|
||||
function uuidgen(store:Pointer;count:Integer):Integer;
|
||||
|
@ -676,6 +679,13 @@ asm
|
|||
jmp cerror
|
||||
end;
|
||||
|
||||
function kqueueex(name:PChar):Integer; assembler; nostackframe;
|
||||
asm
|
||||
movq $141,%rax
|
||||
call fast_syscall
|
||||
jmp cerror
|
||||
end;
|
||||
|
||||
function setsid():Integer; assembler; nostackframe;
|
||||
asm
|
||||
movq $147,%rax
|
||||
|
@ -1012,6 +1022,20 @@ asm
|
|||
jmp cerror
|
||||
end;
|
||||
|
||||
function kqueue():Integer; assembler; nostackframe;
|
||||
asm
|
||||
movq $362,%rax
|
||||
call fast_syscall
|
||||
jmp cerror
|
||||
end;
|
||||
|
||||
function kevent(fd:Integer;changelist:Pointer;nchanges:Integer;eventlist:Pointer;nevents:Integer;timeout:Pointer):Integer; assembler; nostackframe;
|
||||
asm
|
||||
movq $363,%rax
|
||||
call fast_syscall
|
||||
jmp cerror
|
||||
end;
|
||||
|
||||
function nmount(iovp:Pointer;iovcnt:DWORD;flags:QWORD):Integer; assembler; nostackframe;
|
||||
asm
|
||||
movq $378,%rax
|
||||
|
|
|
@ -21,6 +21,7 @@ uses
|
|||
kern_uuid,
|
||||
vfs_cache,
|
||||
vfs_mount,
|
||||
kern_event,
|
||||
kern_synch,
|
||||
kern_cpuset,
|
||||
kern_ksched,
|
||||
|
@ -754,7 +755,7 @@ const
|
|||
),
|
||||
(//[141]
|
||||
sy_narg:1;
|
||||
sy_call:nil;
|
||||
sy_call:@sys_kqueueex;
|
||||
sy_name:'sys_kqueueex'
|
||||
),
|
||||
(//[142]
|
||||
|
@ -1859,12 +1860,12 @@ const
|
|||
),
|
||||
(//[362]
|
||||
sy_narg:0;
|
||||
sy_call:nil;
|
||||
sy_call:@sys_kqueue;
|
||||
sy_name:'sys_kqueue'
|
||||
),
|
||||
(//[363]
|
||||
sy_narg:6;
|
||||
sy_call:nil;
|
||||
sy_call:@sys_kevent;
|
||||
sy_name:'sys_kevent'
|
||||
),
|
||||
(//[364]
|
||||
|
|
Loading…
Reference in New Issue