162306a36Sopenharmony_ci// SPDX-License-Identifier: LGPL-2.1 262306a36Sopenharmony_ci#ifndef EFD_SEMAPHORE 362306a36Sopenharmony_ci#define EFD_SEMAPHORE 1 462306a36Sopenharmony_ci#endif 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef EFD_NONBLOCK 762306a36Sopenharmony_ci#define EFD_NONBLOCK 00004000 862306a36Sopenharmony_ci#endif 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef EFD_CLOEXEC 1162306a36Sopenharmony_ci#define EFD_CLOEXEC 02000000 1262306a36Sopenharmony_ci#endif 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistatic size_t syscall_arg__scnprintf_eventfd_flags(char *bf, size_t size, struct syscall_arg *arg) 1562306a36Sopenharmony_ci{ 1662306a36Sopenharmony_ci bool show_prefix = arg->show_string_prefix; 1762306a36Sopenharmony_ci const char *prefix = "EFD_"; 1862306a36Sopenharmony_ci int printed = 0, flags = arg->val; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci if (flags == 0) 2162306a36Sopenharmony_ci return scnprintf(bf, size, "NONE"); 2262306a36Sopenharmony_ci#define P_FLAG(n) \ 2362306a36Sopenharmony_ci if (flags & EFD_##n) { \ 2462306a36Sopenharmony_ci printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 2562306a36Sopenharmony_ci flags &= ~EFD_##n; \ 2662306a36Sopenharmony_ci } 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci P_FLAG(SEMAPHORE); 2962306a36Sopenharmony_ci P_FLAG(CLOEXEC); 3062306a36Sopenharmony_ci P_FLAG(NONBLOCK); 3162306a36Sopenharmony_ci#undef P_FLAG 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci if (flags) 3462306a36Sopenharmony_ci printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags); 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci return printed; 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci#define SCA_EFD_FLAGS syscall_arg__scnprintf_eventfd_flags 40