mirror of https://github.com/red-prig/fpPS4.git
97 lines
1.8 KiB
Plaintext
97 lines
1.8 KiB
Plaintext
unit dev_dmem;
|
|
|
|
{$mode ObjFPC}{$H+}
|
|
{$CALLING SysV_ABI_CDecl}
|
|
|
|
interface
|
|
|
|
uses
|
|
kern_conf;
|
|
|
|
procedure dmemdev_init();
|
|
|
|
implementation
|
|
|
|
uses
|
|
errno,
|
|
vuio,
|
|
subr_uio,
|
|
vm,
|
|
dmem_map,
|
|
kern_dmem;
|
|
|
|
type
|
|
PAvailableDirectMemorySize=^TAvailableDirectMemorySize;
|
|
TAvailableDirectMemorySize=packed record
|
|
start:QWORD; //in,out
|
|
__end:QWORD; //in
|
|
align:QWORD; //in
|
|
osize:QWORD; //out
|
|
end;
|
|
|
|
Function dmem_ioctl(dev:p_cdev;cmd:QWORD;data:Pointer;fflag:Integer):Integer;
|
|
begin
|
|
Result:=0;
|
|
|
|
Writeln('dmem_ioctl("',dev^.si_name,'",0x',HexStr(cmd,8),',0x',HexStr(fflag,8),')');
|
|
|
|
case cmd of
|
|
$4008800A: //sceKernelGetDirectMemorySize
|
|
begin
|
|
PQWORD(data)^:=SCE_KERNEL_MAIN_DMEM_SIZE;
|
|
end;
|
|
$C0208016: //sceKernelAvailableDirectMemorySize
|
|
begin
|
|
with PAvailableDirectMemorySize(data)^ do
|
|
begin
|
|
Result:=dmem_map_query_available(@dmem,start,__end,align,start,osize);
|
|
end;
|
|
end;
|
|
else
|
|
Assert(False);
|
|
end;
|
|
|
|
end;
|
|
|
|
Function dmem_mmap(dev:p_cdev;offset:vm_ooffset_t;paddr:p_vm_paddr_t;nprot:Integer;memattr:p_vm_memattr_t):Integer;
|
|
begin
|
|
Result:=0;
|
|
|
|
Writeln('dmem_mmap("',dev^.si_name,'",0x',HexStr(offset,8),',0x',HexStr(paddr),',',nprot,')');
|
|
Assert(False);
|
|
end;
|
|
|
|
const
|
|
dmem_cdevsw:t_cdevsw=(
|
|
d_version :D_VERSION;
|
|
d_flags :0;
|
|
d_name :'dmem';
|
|
d_open :nil;
|
|
d_fdopen :nil;
|
|
d_close :nil;
|
|
d_read :nil;
|
|
d_write :nil;
|
|
d_ioctl :@dmem_ioctl;
|
|
d_poll :nil;
|
|
d_mmap :@dmem_mmap;
|
|
d_strategy :nil;
|
|
d_dump :nil;
|
|
d_kqfilter :nil;
|
|
d_purge :nil;
|
|
d_mmap_single:nil;
|
|
);
|
|
|
|
procedure dmemdev_init();
|
|
var
|
|
i:Integer;
|
|
begin
|
|
For i:=0 to 2 do
|
|
begin
|
|
make_dev(@dmem_cdevsw,i,0,0,&777,'dmem%d',[i]);
|
|
end;
|
|
end;
|
|
|
|
|
|
end.
|
|
|