From 495113290ed28d4debdecb5934a78d0beb722db7 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Wed, 18 Nov 2015 21:22:17 +0100 Subject: basic support for dri/drm drivers --- sys/decl.go | 3 ++- sys/sys.go | 11 +++++++++ sys/sys.txt | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 1 deletion(-) (limited to 'sys') diff --git a/sys/decl.go b/sys/decl.go index c5107efe8..cf64a55d8 100644 --- a/sys/decl.go +++ b/sys/decl.go @@ -70,6 +70,7 @@ const ( FdInotify FdFanotify FdTty + FdDRI IPCMsq IPCSem @@ -166,7 +167,7 @@ func (t ResourceType) Size() uintptr { func (t ResourceType) SubKinds() []ResourceSubkind { switch t.Kind { case ResFD: - return []ResourceSubkind{FdFile, FdSock, FdPipe, FdSignal, FdEvent, FdTimer, FdEpoll, FdDir, FdMq, FdInotify, FdFanotify, FdTty} + return []ResourceSubkind{FdFile, FdSock, FdPipe, FdSignal, FdEvent, FdTimer, FdEpoll, FdDir, FdMq, FdInotify, FdFanotify, FdTty, FdDRI} case ResIPC: return []ResourceSubkind{IPCMsq, IPCSem, IPCShm} case ResIOCtx, ResKey, ResInotifyDesc, ResPid, ResUid, ResGid, ResTimerid: diff --git a/sys/sys.go b/sys/sys.go index e798c1a4b..6d9f2efbe 100644 --- a/sys/sys.go +++ b/sys/sys.go @@ -495,4 +495,15 @@ var Calls = []*Call{ &Call{ID: 490, Name: "ioctl$TIOCLINUX5", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdTty}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(21532)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "loadlut", IsOptional: false}, Fields: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "submode", IsOptional: false}, TypeSize: 1, Val: uintptr(5)}, IntType{TypeCommon: TypeCommon{TypeName: "pad", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "pad", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "pad", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "tab0", IsOptional: false}, TypeSize: 8}, IntType{TypeCommon: TypeCommon{TypeName: "tab1", IsOptional: false}, TypeSize: 8}, IntType{TypeCommon: TypeCommon{TypeName: "tab2", IsOptional: false}, TypeSize: 8}, IntType{TypeCommon: TypeCommon{TypeName: "tab3", IsOptional: false}, TypeSize: 8}}}, Dir: DirIn}}}, &Call{ID: 491, Name: "ioctl$TIOCLINUX6", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdTty}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(21532)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "tiocl_shift_state", IsOptional: false}, Fields: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "subcode", IsOptional: false}, TypeSize: 1, Val: uintptr(6)}, IntType{TypeCommon: TypeCommon{TypeName: "shift", IsOptional: false}, TypeSize: 1}}}, Dir: DirIn}}}, &Call{ID: 492, Name: "ioctl$TIOCLINUX7", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdTty}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(21532)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "tiocl_report_mouse", IsOptional: false}, Fields: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "subcode", IsOptional: false}, TypeSize: 1, Val: uintptr(7)}, IntType{TypeCommon: TypeCommon{TypeName: "shift", IsOptional: false}, TypeSize: 1}}}, Dir: DirIn}}}, + &Call{ID: 493, Name: "syz_dri_open", CallName: "syz_dri_open", Ret: ResourceType{TypeCommon: TypeCommon{TypeName: "ret", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, Args: []Type{IntType{TypeCommon: TypeCommon{TypeName: "card_id", IsOptional: false}, TypeSize: 8}, FlagsType{TypeCommon: TypeCommon{TypeName: "flags", IsOptional: false}, TypeSize: 0, Vals: []uintptr{0, 1, 2, 1024, 8192, 524288, 64, 16384, 65536, 128, 0, 262144, 256, 131072, 2048, 2097152, 1052672, 512}}}}, + &Call{ID: 494, Name: "ioctl$DRM_IOCTL_VERSION", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(3225445376)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "drm_version", IsOptional: false}, Fields: []Type{IntType{TypeCommon: TypeCommon{TypeName: "maj", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "min", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "patch", IsOptional: false}, TypeSize: 4}, LenType{TypeCommon: TypeCommon{TypeName: "namelen", IsOptional: false}, Buf: "name", TypeSize: 8}, PtrType{TypeCommon: TypeCommon{TypeName: "name", IsOptional: false}, Dir: DirOut, Type: BufferType{TypeCommon: TypeCommon{TypeName: "name", IsOptional: false}, Kind: BufferBlob}}, LenType{TypeCommon: TypeCommon{TypeName: "datelen", IsOptional: false}, Buf: "date", TypeSize: 8}, PtrType{TypeCommon: TypeCommon{TypeName: "date", IsOptional: false}, Dir: DirOut, Type: BufferType{TypeCommon: TypeCommon{TypeName: "date", IsOptional: false}, Kind: BufferBlob}}, LenType{TypeCommon: TypeCommon{TypeName: "desclen", IsOptional: false}, Buf: "desc", TypeSize: 8}, PtrType{TypeCommon: TypeCommon{TypeName: "desc", IsOptional: false}, Dir: DirOut, Type: BufferType{TypeCommon: TypeCommon{TypeName: "desc", IsOptional: false}, Kind: BufferBlob}}}}, Dir: DirIn}}}, + &Call{ID: 495, Name: "ioctl$DRM_IOCTL_GET_UNIQUE", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(3222299649)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "drm_unique", IsOptional: false}, Fields: []Type{LenType{TypeCommon: TypeCommon{TypeName: "len", IsOptional: false}, Buf: "uni", TypeSize: 8}, PtrType{TypeCommon: TypeCommon{TypeName: "uni", IsOptional: false}, Dir: DirOut, Type: BufferType{TypeCommon: TypeCommon{TypeName: "uni", IsOptional: false}, Kind: BufferBlob}}}}, Dir: DirIn}}}, + &Call{ID: 496, Name: "ioctl$DRM_IOCTL_GET_MAGIC", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(2147771394)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: IntType{TypeCommon: TypeCommon{TypeName: "", IsOptional: false}, TypeSize: 4}, Dir: DirIn}}}, + &Call{ID: 497, Name: "ioctl$DRM_IOCTL_IRQ_BUSID", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(3222299651)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "drm_irq_busid", IsOptional: false}, Fields: []Type{IntType{TypeCommon: TypeCommon{TypeName: "irq", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "bus", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "dev", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "func", IsOptional: false}, TypeSize: 4}}}, Dir: DirIn}}}, + &Call{ID: 498, Name: "ioctl$DRM_IOCTL_GET_MAP", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(3223872516)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "drm_map", IsOptional: false}, Fields: []Type{IntType{TypeCommon: TypeCommon{TypeName: "off", IsOptional: false}, TypeSize: 8}, IntType{TypeCommon: TypeCommon{TypeName: "size", IsOptional: false}, TypeSize: 8}, FlagsType{TypeCommon: TypeCommon{TypeName: "type", IsOptional: false}, TypeSize: 4, Vals: []uintptr{0, 1, 2, 3, 4, 5}}, FlagsType{TypeCommon: TypeCommon{TypeName: "flags", IsOptional: false}, TypeSize: 4, Vals: []uintptr{1, 2, 4, 8, 16, 32, 64, 128}}, VmaType{TypeCommon: TypeCommon{TypeName: "handle", IsOptional: false}}, IntType{TypeCommon: TypeCommon{TypeName: "mtrr", IsOptional: false}, TypeSize: 4}}}, Dir: DirIn}}}, + &Call{ID: 499, Name: "ioctl$DRM_IOCTL_GET_CLIENT", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(3223872517)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "drm_client", IsOptional: false}, Fields: []Type{IntType{TypeCommon: TypeCommon{TypeName: "idx", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "auth", IsOptional: false}, TypeSize: 4}, ResourceType{TypeCommon: TypeCommon{TypeName: "pid", IsOptional: false}, Kind: ResPid}, IntType{TypeCommon: TypeCommon{TypeName: "pid_pad", IsOptional: false}, TypeSize: 4}, ResourceType{TypeCommon: TypeCommon{TypeName: "uid", IsOptional: false}, Kind: ResUid}, IntType{TypeCommon: TypeCommon{TypeName: "uid_pad", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "magic", IsOptional: false}, TypeSize: 8}, IntType{TypeCommon: TypeCommon{TypeName: "iocs", IsOptional: false}, TypeSize: 8}}}, Dir: DirIn}}}, + &Call{ID: 500, Name: "ioctl$DRM_IOCTL_GET_STATS", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(2163762182)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Dir: DirOut, Type: BufferType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Kind: BufferBlob}}}}, + &Call{ID: 501, Name: "ioctl$DRM_IOCTL_GET_CAP", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(3222299660)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "drm_get_cap", IsOptional: false}, Fields: []Type{IntType{TypeCommon: TypeCommon{TypeName: "cap", IsOptional: false}, TypeSize: 8}, IntType{TypeCommon: TypeCommon{TypeName: "val", IsOptional: false}, TypeSize: 8}}}, Dir: DirIn}}}, + &Call{ID: 502, Name: "ioctl$DRM_IOCTL_SET_CLIENT_CAP", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(1074816013)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "drm_get_cap", IsOptional: false}, Fields: []Type{IntType{TypeCommon: TypeCommon{TypeName: "cap", IsOptional: false}, TypeSize: 8}, IntType{TypeCommon: TypeCommon{TypeName: "val", IsOptional: false}, TypeSize: 8}}}, Dir: DirIn}}}, + &Call{ID: 503, Name: "ioctl$DRM_IOCTL_SET_VERSION", CallName: "ioctl", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdDRI}, ConstType{TypeCommon: TypeCommon{TypeName: "cmd", IsOptional: false}, TypeSize: 0, Val: uintptr(3222299655)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "drm_set_version", IsOptional: false}, Fields: []Type{IntType{TypeCommon: TypeCommon{TypeName: "di_maj", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "di_min", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "dd_maj", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "dd_min", IsOptional: false}, TypeSize: 4}}}, Dir: DirIn}}}, } diff --git a/sys/sys.txt b/sys/sys.txt index 9ea481d93..6010c6c5f 100644 --- a/sys/sys.txt +++ b/sys/sys.txt @@ -78,6 +78,7 @@ include include include include +include @@ -2093,3 +2094,81 @@ tiocl_report_mouse { subcode const[7, int8] shift int8 } + + + + +# DRI/DRM support + +syz_dri_open(card_id intptr, flags flags[open_flags]) fd[dri] +ioctl$DRM_IOCTL_VERSION(fd fd[dri], cmd const[DRM_IOCTL_VERSION], arg ptr[in, drm_version]) +ioctl$DRM_IOCTL_GET_UNIQUE(fd fd[dri], cmd const[DRM_IOCTL_GET_UNIQUE], arg ptr[in, drm_unique]) +ioctl$DRM_IOCTL_GET_MAGIC(fd fd[dri], cmd const[DRM_IOCTL_GET_MAGIC], arg ptr[in, int32]) +ioctl$DRM_IOCTL_IRQ_BUSID(fd fd[dri], cmd const[DRM_IOCTL_IRQ_BUSID], arg ptr[in, drm_irq_busid]) +ioctl$DRM_IOCTL_GET_MAP(fd fd[dri], cmd const[DRM_IOCTL_GET_MAP], arg ptr[in, drm_map]) +ioctl$DRM_IOCTL_GET_CLIENT(fd fd[dri], cmd const[DRM_IOCTL_GET_CLIENT], arg ptr[in, drm_client]) +ioctl$DRM_IOCTL_GET_STATS(fd fd[dri], cmd const[DRM_IOCTL_GET_STATS], arg buffer[out]) +ioctl$DRM_IOCTL_GET_CAP(fd fd[dri], cmd const[DRM_IOCTL_GET_CAP], arg ptr[in, drm_get_cap]) +ioctl$DRM_IOCTL_SET_CLIENT_CAP(fd fd[dri], cmd const[DRM_IOCTL_SET_CLIENT_CAP], arg ptr[in, drm_get_cap]) +ioctl$DRM_IOCTL_SET_VERSION(fd fd[dri], cmd const[DRM_IOCTL_SET_VERSION], arg ptr[in, drm_set_version]) + +drm_version { + maj int32 + min int32 + patch int32 + namelen len[name, intptr] + name buffer[out] + datelen len[date, intptr] + date buffer[out] + desclen len[desc, intptr] + desc buffer[out] +} + +drm_unique { + len len[uni, intptr] + uni buffer[out] +} + +drm_irq_busid { + irq int32 + bus int32 + dev int32 + func int32 +} + +drm_map { + off intptr + size intptr + type flags[drm_map_type, int32] + flags flags[drm_map_flags, int32] + handle vma + mtrr int32 +} + +drm_client { + idx int32 + auth int32 + pid pid +# pid is declared is long + pid_pad int32 + uid uid +# uid is declared is long + uid_pad int32 + magic intptr + iocs intptr +} + +drm_get_cap { + cap int64 + val int64 +} + +drm_set_version { + di_maj int32 + di_min int32 + dd_maj int32 + dd_min int32 +} + +drm_map_type = _DRM_FRAME_BUFFER, _DRM_REGISTERS, _DRM_SHM, _DRM_AGP, _DRM_SCATTER_GATHER, _DRM_CONSISTENT +drm_map_flags = _DRM_RESTRICTED, _DRM_READ_ONLY, _DRM_LOCKED, _DRM_KERNEL, _DRM_WRITE_COMBINING, _DRM_CONTAINS_LOCK, _DRM_REMOVABLE, _DRM_DRIVER -- cgit mrf-deployment