1 /**
2  * D header file for GNU/Linux.
3  *
4  * License:   $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
5  * Authors:   Nemanja Boric
6  */
7 module core.sys.linux.sys.eventfd;
8 
9 version (linux):
10 extern (C):
11 @nogc:
12 nothrow:
13 
14 version (ARM)     version = ARM_Any;
15 version (AArch64) version = ARM_Any;
16 version (HPPA)    version = HPPA_Any;
17 version (MIPS32)  version = MIPS_Any;
18 version (MIPS64)  version = MIPS_Any;
19 version (PPC)     version = PPC_Any;
20 version (PPC64)   version = PPC_Any;
21 version (RISCV32) version = RISCV_Any;
22 version (RISCV64) version = RISCV_Any;
23 version (S390)    version = IBMZ_Any;
24 version (SPARC)   version = SPARC_Any;
25 version (SPARC64) version = SPARC_Any;
26 version (SystemZ) version = IBMZ_Any;
27 version (X86)     version = X86_Any;
28 version (X86_64)  version = X86_Any;
29 
30 import core.stdc.stdint: uint64_t;
31 
32 /// Type for the event counter
33 alias uint64_t eventfd_t;
34 
35 /* Return file descriptor for generic event channel.  Set initial
36    value to count.  */
37 int eventfd (uint count, int flags);
38 
39 /* Read event counter and possibly wait for events.  */
40 int eventfd_read (int fd, eventfd_t* value);
41 
42 /* Increment event counter.  */
43 int eventfd_write (int fd, eventfd_t value);
44 
45 version (CRuntime_UClibc)
46 {
47     version (MIPS_Any)
48     {
49         enum EFD_SEMAPHORE = 1;
50         enum EFD_CLOEXEC = 0x80000; // octal!02000000
51         enum EFD_NONBLOCK = 0x80; // octal!00000200
52     }
53     else version (SPARC_Any)
54     {
55         enum EFD_SEMAPHORE = 1;
56         enum EFD_CLOEXEC = 0x400000;
57         enum EFD_NONBLOCK = 0x004000;
58     }
59     else
60     {
61         enum EFD_SEMAPHORE = 1;
62         enum EFD_CLOEXEC = 0x80000; // octal!02000000
63         enum EFD_NONBLOCK = 0x800; // octal!00004000
64     }
65 }
66 else version (X86_Any)
67 {
68     enum EFD_SEMAPHORE = 1;
69     enum EFD_CLOEXEC = 0x80000; // octal!2000000
70     enum EFD_NONBLOCK = 0x800; // octal!4000
71 }
72 else version (HPPA_Any)
73 {
74     enum EFD_SEMAPHORE = 1;
75     enum EFD_CLOEXEC = 0x200000; // octal!10000000
76     enum EFD_NONBLOCK = 0x10004; // octal!00200004
77 }
78 else version (MIPS_Any)
79 {
80     enum EFD_SEMAPHORE = 1;
81     enum EFD_CLOEXEC = 0x80000; // octal!2000000
82     enum EFD_NONBLOCK = 0x80; // octal!200
83 }
84 else version (PPC_Any)
85 {
86     enum EFD_SEMAPHORE = 1;
87     enum EFD_CLOEXEC = 0x80000; // octal!2000000
88     enum EFD_NONBLOCK = 0x800; // octal!4000
89 }
90 else version (ARM_Any)
91 {
92     enum EFD_SEMAPHORE = 1;
93     enum EFD_CLOEXEC = 0x80000; // octal!2000000
94     enum EFD_NONBLOCK = 0x800; // octal!4000
95 }
96 else version (RISCV_Any)
97 {
98     enum EFD_SEMAPHORE = 1;
99     enum EFD_CLOEXEC = 0x80000; // octal!2000000
100     enum EFD_NONBLOCK = 0x800; // octal!4000
101 }
102 else version (SPARC_Any)
103 {
104     enum EFD_SEMAPHORE = 1;
105     enum EFD_CLOEXEC = 0x80000; // octal!2000000
106     enum EFD_NONBLOCK = 0x800; // octal!4000
107 }
108 else version (IBMZ_Any)
109 {
110     enum EFD_SEMAPHORE = 1;
111     enum EFD_CLOEXEC = 0x80000; // octal!2000000
112     enum EFD_NONBLOCK = 0x800; // octal!4000
113 }
114 else version (LoongArch64)
115 {
116     enum EFD_SEMAPHORE = 1;
117     enum EFD_CLOEXEC = 0x80000; // octal!2000000
118     enum EFD_NONBLOCK = 0x800; // octal!4000
119 }
120 else
121     static assert(0, "unimplemented");