authorgravatar for devnexen@gmail.comDavid Carlier <devnexen@gmail.com> 2023-05-10 13:42:29+01:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-05-10 19:14:51+03:00
logcd7e2bf57a4da6965df9a2d8662a9b95f63cf595
treec3fe5539956df93a22b8cae5453007a4e3534de2
parentebc3773542ef2bccedd268cfa42ee2cdd529210a

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


1 files changed, 28 insertions(+), 0 deletions(-)

lib/std/c/freebsd.zig+28
...@@ -2607,3 +2607,31 @@ pub const domainset = extern struct {...@@ -2607,3 +2607,31 @@ pub const domainset = extern struct {
26072607
2608pub extern "c" fn cpuset_getdomain(level: cpulevel_t, which: cpuwhich_t, id: id_t, len: usize, domain: *domainset_t, r: *c_int) c_int;2608pub extern "c" fn cpuset_getdomain(level: cpulevel_t, which: cpuwhich_t, id: id_t, len: usize, domain: *domainset_t, r: *c_int) c_int;
2609pub 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;2609pub 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;
2610
2611const ioctl_cmd = enum(u32) {
2612 VOID = 0x20000000,
2613 OUT = 0x40000000,
2614 IN = 0x80000000,
2615 INOUT = ioctl_cmd.IN | ioctl_cmd.OUT,
2616 DIRMASK = ioctl_cmd.VOID | ioctl_cmd.IN | ioctl_cmd.OUT,
2617};
2618
2619fn ioImpl(cmd: ioctl_cmd, op: u8, nr: u8, comptime IT: type) u32 {
2620 return @bitCast(u32, @enumToInt(cmd) | @intCast(u32, @truncate(u8, @sizeOf(IT))) << 16 | @intCast(u32, op) << 8 | nr);
2621}
2622
2623pub fn IO(op: u8, nr: u8) u32 {
2624 return ioImpl(ioctl_cmd.VOID, op, nr, 0);
2625}
2626
2627pub fn IOR(op: u8, nr: u8, comptime IT: type) u32 {
2628 return ioImpl(ioctl_cmd.OUT, op, nr, @sizeOf(IT));
2629}
2630
2631pub fn IOW(op: u8, nr: u8, comptime IT: type) u32 {
2632 return ioImpl(ioctl_cmd.IN, op, nr, @sizeOf(IT));
2633}
2634
2635pub fn IOWR(op: u8, nr: u8, comptime IT: type) u32 {
2636 return ioImpl(ioctl_cmd.INOUT, op, nr, @sizeOf(IT));
2637}