📄 libio.h
字号:
};/* * Valid RTEMS file systems options */typedef enum{ RTEMS_FILESYSTEM_READ_ONLY, RTEMS_FILESYSTEM_READ_WRITE, RTEMS_FILESYSTEM_BAD_OPTIONS} rtems_filesystem_options_t;/* * An open file data structure, indexed by 'fd' * TODO: * should really have a separate per/file data structure that this * points to (eg: size, offset, driver, pathname should be in that) */struct rtems_libio_tt { rtems_driver_name_t *driver; off_t size; /* size of file */ off_t offset; /* current offset into file */ unsigned32 flags; rtems_filesystem_location_info_t pathinfo; Objects_Id sem; unsigned32 data0; /* private to "driver" */ void *data1; /* ... */ void *file_info; /* used by file handlers */ rtems_filesystem_file_handlers_r *handlers; /* type specific handlers */};/* * param block for read/write * Note: it must include 'offset' instead of using iop's offset since * we can have multiple outstanding i/o's on a device. */typedef struct { rtems_libio_t *iop; off_t offset; unsigned8 *buffer; unsigned32 count; unsigned32 flags; unsigned32 bytes_moved;} rtems_libio_rw_args_t;/* * param block for open/close */typedef struct { rtems_libio_t *iop; unsigned32 flags; unsigned32 mode;} rtems_libio_open_close_args_t;/* * param block for ioctl */typedef struct { rtems_libio_t *iop; unsigned32 command; void *buffer; unsigned32 ioctl_return;} rtems_libio_ioctl_args_t;/* * Values for 'flag' */#define LIBIO_FLAGS_NO_DELAY 0x0001 /* return immediately if no data */#define LIBIO_FLAGS_READ 0x0002 /* reading */#define LIBIO_FLAGS_WRITE 0x0004 /* writing */#define LIBIO_FLAGS_OPEN 0x0100 /* device is open */#define LIBIO_FLAGS_APPEND 0x0200 /* all writes append */#define LIBIO_FLAGS_CREATE 0x0400 /* create file */#define LIBIO_FLAGS_CLOSE_ON_EXEC 0x0800 /* close on process exec() */#define LIBIO_FLAGS_READ_WRITE (LIBIO_FLAGS_READ | LIBIO_FLAGS_WRITE)void rtems_libio_init(void);/* * External I/O handlers */typedef int (*rtems_libio_open_t)( const char *pathname, unsigned32 flag, unsigned32 mode);typedef int (*rtems_libio_close_t)( int fd);typedef int (*rtems_libio_read_t)( int fd, void *buffer, unsigned32 count);typedef int (*rtems_libio_write_t)( int fd, const void *buffer, unsigned32 count);typedef int (*rtems_libio_ioctl_t)( int fd, unsigned32 command, void *buffer);typedef int (*rtems_libio_lseek_t)( int fd, off_t offset, int whence);/* * The following macros are used to build up the permissions sets * used to check permissions. These are similar in style to the * mode_t bits and should stay compatible with them. */#define RTEMS_LIBIO_PERMS_READ S_IROTH#define RTEMS_LIBIO_PERMS_WRITE S_IWOTH#define RTEMS_LIBIO_PERMS_RDWR (S_IROTH|S_IWOTH)#define RTEMS_LIBIO_PERMS_EXEC S_IXOTH#define RTEMS_LIBIO_PERMS_SEARCH RTEMS_LIBIO_PERMS_EXEC#define RTEMS_LIBIO_PERMS_RWX S_IRWXO/* * Macros */#if 0#define rtems_filesystem_make_dev_t( _major, _minor ) \ ((((dev_t)(_major)) << 32) | (dev_t)(_minor))#define rtems_filesystem_dev_major_t( _dev ) \ (rtems_device_major_number) ((_dev) >> 32)#define rtems_filesystem_dev_minor_t( _dev ) \ (rtems_device_minor_number) ((_dev) & 0xFFFFFFFF)#else#include <unistd.h>union __rtems_dev_t { dev_t device; struct { rtems_device_major_number major; rtems_device_minor_number minor; } __overlay;};static inline dev_t rtems_filesystem_make_dev_t( rtems_device_major_number _major, rtems_device_minor_number _minor){ union __rtems_dev_t temp; temp.__overlay.major = _major; temp.__overlay.minor = _minor; return temp.device;}static inline rtems_device_major_number rtems_filesystem_dev_major_t( dev_t device){ union __rtems_dev_t temp; temp.device = device; return temp.__overlay.major;}static inline rtems_device_minor_number rtems_filesystem_dev_minor_t( dev_t device){ union __rtems_dev_t temp; temp.device = device; return temp.__overlay.minor;}#endif#define rtems_filesystem_split_dev_t( _dev, _major, _minor ) \ do { \ (_major) = rtems_filesystem_dev_major_t ( _dev ); \ (_minor) = rtems_filesystem_dev_minor_t( _dev ); \ } while(0)/* * Verifies that the permission flag is valid. */#define rtems_libio_is_valid_perms( _perm ) \ (~ ((~RTEMS_LIBIO_PERMS_RWX) & _perm ))/* * Prototypes for filesystem */void rtems_filesystem_initialize( void );/* * Callbacks from TERMIOS routines to device-dependent code */#include <termios.h>typedef struct rtems_termios_callbacks { int (*firstOpen)(int major, int minor, void *arg); int (*lastClose)(int major, int minor, void *arg); int (*pollRead)(int minor); int (*write)(int minor, const char *buf, int len); int (*setAttributes)(int minor, const struct termios *t); int (*stopRemoteTx)(int minor); int (*startRemoteTx)(int minor); int outputUsesInterrupts;} rtems_termios_callbacks;/* * Device-independent TERMIOS routines */void rtems_termios_initialize (void);/* * CCJ: Change before opening a tty. Newer code from Eric is coming * so extra work to handle an open tty is not worth it. If the tty * is open, close then open it again. */rtems_status_code rtems_termios_bufsize ( int cbufsize, /* cooked buffer size */ int raw_input, /* raw input buffer size */ int raw_output /* raw output buffer size */);rtems_status_code rtems_termios_open ( rtems_device_major_number major, rtems_device_minor_number minor, void *arg, const rtems_termios_callbacks *callbacks);rtems_status_code rtems_termios_close( void *arg);rtems_status_code rtems_termios_read( void *arg);rtems_status_code rtems_termios_write( void *arg);rtems_status_code rtems_termios_ioctl( void *arg);int rtems_termios_enqueue_raw_characters( void *ttyp, char *buf, int len);int rtems_termios_dequeue_characters( void *ttyp, int len);void rtems_termios_reserve_resources( rtems_configuration_table *configuration, rtems_unsigned32 number_of_devices);int unmount( const char *mount_path);int mount( rtems_filesystem_mount_table_entry_t **mt_entry, rtems_filesystem_operations_table *fs_ops, rtems_filesystem_options_t fsoptions, char *device, char *mount_point);/* * Boot Time Mount Table Structure */typedef struct { rtems_filesystem_operations_table *fs_ops; rtems_filesystem_options_t fsoptions; char *device; char *mount_point;} rtems_filesystem_mount_table_t;extern rtems_filesystem_mount_table_t *rtems_filesystem_mount_table;extern int rtems_filesystem_mount_table_size;#endif /* _RTEMS_LIBIO_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -