zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit cd7e2bf57a4da6965df9a2d8662a9b95f63cf595 (tree)
parent ebc3773542ef2bccedd268cfa42ee2cdd529210a
Author: David CARLIER <devnexen@gmail.com>
Date:   Wed, 10 May 2023 13:42:29 +0100

std.c: adding freebsd's ioctl base operands.

Diffstat:
Mlib/std/c/freebsd.zig | 28++++++++++++++++++++++++++++
1 file changed, 28 insertions(+), 0 deletions(-)

diff --git a/lib/std/c/freebsd.zig b/lib/std/c/freebsd.zig @@ -2607,3 +2607,31 @@ pub const domainset = extern struct { pub extern "c" fn cpuset_getdomain(level: cpulevel_t, which: cpuwhich_t, id: id_t, len: usize, domain: *domainset_t, r: *c_int) c_int; pub extern "c" fn cpuset_setdomain(level: cpulevel_t, which: cpuwhich_t, id: id_t, len: usize, domain: *const domainset_t, r: c_int) c_int; + +const ioctl_cmd = enum(u32) { + VOID = 0x20000000, + OUT = 0x40000000, + IN = 0x80000000, + INOUT = ioctl_cmd.IN | ioctl_cmd.OUT, + DIRMASK = ioctl_cmd.VOID | ioctl_cmd.IN | ioctl_cmd.OUT, +}; + +fn ioImpl(cmd: ioctl_cmd, op: u8, nr: u8, comptime IT: type) u32 { + return @bitCast(u32, @enumToInt(cmd) | @intCast(u32, @truncate(u8, @sizeOf(IT))) << 16 | @intCast(u32, op) << 8 | nr); +} + +pub fn IO(op: u8, nr: u8) u32 { + return ioImpl(ioctl_cmd.VOID, op, nr, 0); +} + +pub fn IOR(op: u8, nr: u8, comptime IT: type) u32 { + return ioImpl(ioctl_cmd.OUT, op, nr, @sizeOf(IT)); +} + +pub fn IOW(op: u8, nr: u8, comptime IT: type) u32 { + return ioImpl(ioctl_cmd.IN, op, nr, @sizeOf(IT)); +} + +pub fn IOWR(op: u8, nr: u8, comptime IT: type) u32 { + return ioImpl(ioctl_cmd.INOUT, op, nr, @sizeOf(IT)); +}