123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #ifndef ZEPHYR_INCLUDE_POSIX_SYS_EVENTFD_H_
- #define ZEPHYR_INCLUDE_POSIX_SYS_EVENTFD_H_
- #include <zephyr.h>
- #include <sys/fdtable.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define EFD_IN_USE 0x1
- #define EFD_SEMAPHORE 0x2
- #define EFD_NONBLOCK O_NONBLOCK
- #define EFD_FLAGS_SET (EFD_SEMAPHORE | EFD_NONBLOCK)
- typedef uint64_t eventfd_t;
- int eventfd(unsigned int initval, int flags);
- static inline int eventfd_read(int fd, eventfd_t *value)
- {
- const struct fd_op_vtable *efd_vtable;
- struct k_mutex *lock;
- ssize_t ret;
- void *obj;
- obj = z_get_fd_obj_and_vtable(fd, &efd_vtable, &lock);
- (void)k_mutex_lock(lock, K_FOREVER);
- ret = efd_vtable->read(obj, value, sizeof(*value));
- k_mutex_unlock(lock);
- return ret == sizeof(eventfd_t) ? 0 : -1;
- }
- static inline int eventfd_write(int fd, eventfd_t value)
- {
- const struct fd_op_vtable *efd_vtable;
- struct k_mutex *lock;
- ssize_t ret;
- void *obj;
- obj = z_get_fd_obj_and_vtable(fd, &efd_vtable, &lock);
- (void)k_mutex_lock(lock, K_FOREVER);
- ret = efd_vtable->write(obj, &value, sizeof(value));
- k_mutex_unlock(lock);
- return ret == sizeof(eventfd_t) ? 0 : -1;
- }
- #ifdef __cplusplus
- }
- #endif
- #endif
|