[sundance] Add reset completion check
[gpxe.git] / src / include / gpxe / posix_io.h
blob9984db005bcba246f17267beebd78e66124077b4
1 #ifndef _GPXE_POSIX_IO_H
2 #define _GPXE_POSIX_IO_H
4 /** @file
6 * POSIX-like I/O
8 */
10 #include <stdint.h>
11 #include <gpxe/uaccess.h>
13 /** Minimum file descriptor that will ever be allocated */
14 #define POSIX_FD_MIN ( 1 )
16 /** Maximum file descriptor that will ever be allocated */
17 #define POSIX_FD_MAX ( 31 )
19 /** File descriptor set as used for select() */
20 typedef uint32_t fd_set;
22 extern int open ( const char *uri_string );
23 extern ssize_t read_user ( int fd, userptr_t buffer,
24 off_t offset, size_t len );
25 extern int select ( fd_set *readfds, int wait );
26 extern ssize_t fsize ( int fd );
27 extern int close ( int fd );
29 /**
30 * Zero a file descriptor set
32 * @v set File descriptor set
34 static inline __attribute__ (( always_inline )) void
35 FD_ZERO ( fd_set *set ) {
36 *set = 0;
39 /**
40 * Set a bit within a file descriptor set
42 * @v fd File descriptor
43 * @v set File descriptor set
45 static inline __attribute__ (( always_inline )) void
46 FD_SET ( int fd, fd_set *set ) {
47 *set |= ( 1 << fd );
50 /**
51 * Clear a bit within a file descriptor set
53 * @v fd File descriptor
54 * @v set File descriptor set
56 static inline __attribute__ (( always_inline )) void
57 FD_CLR ( int fd, fd_set *set ) {
58 *set &= ~( 1 << fd );
61 /**
62 * Test a bit within a file descriptor set
64 * @v fd File descriptor
65 * @v set File descriptor set
66 * @ret is_set Corresponding bit is set
68 static inline __attribute__ (( always_inline )) int
69 FD_ISSET ( int fd, fd_set *set ) {
70 return ( *set & ( 1 << fd ) );
73 /**
74 * Read data from file
76 * @v fd File descriptor
77 * @v buf Data buffer
78 * @v len Maximum length to read
79 * @ret len Actual length read, or negative error number
81 static inline ssize_t read ( int fd, void *buf, size_t len ) {
82 return read_user ( fd, virt_to_user ( buf ), 0, len );
85 #endif /* _GPXE_POSIX_IO_H */