source: rtems/c/src/exec/libcsupport/include/rtems/libio.h @ 9deb5b8b

4.104.114.84.95
Last change on this file since 9deb5b8b was 9deb5b8b, checked in by Joel Sherrill <joel.sherrill@…>, on 08/01/97 at 18:12:11

Katsutoshi Shibuya (shibuya@…)of BU-Denken Co., Ltd.
(Sapporo, Japan) submitted the extended console driver for the
MVME162LX BSP and the POSIX tcsetattr() and tcgetattr() routines.
This device driver supports four serial ports, cooked IO, and
provides a portable base for Zilog 8530 based console drivers.

  • Property mode set to 100644
File size: 3.9 KB
Line 
1/*
2 * General purpose communication channel for RTEMS to allow UNIX/POSIX
3 *    system call behavior on top of RTEMS IO devices.
4 *
5 * TODO
6 *      stat(2)
7 *      unlink(2)
8 *      rename(2)
9 *
10 *  $Id$
11 */
12
13#ifndef _RTEMS_LIBIO_H
14#define _RTEMS_LIBIO_H
15
16#include <sys/stat.h>
17
18typedef unsigned32 rtems_libio_offset_t;
19
20/*
21 * An open file data structure, indexed by 'fd'
22 * TODO:
23 *    should really have a separate per/file data structure that this
24 *    points to (eg: size, offset, driver, pathname should be in that)
25 */
26
27typedef struct {
28    rtems_driver_name_t *driver;
29    rtems_libio_offset_t size;          /* size of file */
30    rtems_libio_offset_t offset;        /* current offset into the file */
31    unsigned32           flags;
32    char                *pathname;      /* opened pathname */
33    Objects_Id           sem;
34    unsigned32           data0;         /* private to "driver" */
35    unsigned32           data1;         /* ... */
36} rtems_libio_t;
37
38
39/*
40 * param block for read/write
41 * Note: it must include 'offset' instead of using iop's offset since
42 *       we can have multiple outstanding i/o's on a device.
43 */
44
45typedef struct {
46    rtems_libio_t          *iop;
47    rtems_libio_offset_t    offset;
48    unsigned8              *buffer;
49    unsigned32              count;
50    unsigned32              flags;
51    unsigned32              bytes_moved;
52} rtems_libio_rw_args_t;
53
54/*
55 * param block for open/close
56 */
57
58typedef struct {
59    rtems_libio_t          *iop;
60    unsigned32              flags;
61    unsigned32              mode;
62} rtems_libio_open_close_args_t;
63
64/*
65 * param block for ioctl
66 */
67
68typedef struct {
69    rtems_libio_t          *iop;
70    unsigned32              command;
71    void                   *buffer;
72    unsigned32              ioctl_return;
73} rtems_libio_ioctl_args_t;
74
75
76/*
77 * Values for 'flag'
78 */
79
80#define LIBIO_FLAGS_NO_DELAY      0x0001  /* return immediately if no data */
81#define LIBIO_FLAGS_READ          0x0002  /* reading */
82#define LIBIO_FLAGS_WRITE         0x0004  /* writing */
83#define LIBIO_FLAGS_LINE_BUFFERED 0x0008  /* line buffered io (^h, ^u, etc) */
84#define LIBIO_FLAGS_OPEN          0x0100  /* device is open */
85#define LIBIO_FLAGS_APPEND        0x0200  /* all writes append */
86#define LIBIO_FLAGS_CREATE        0x0400  /* create file */
87
88#define LIBIO_FLAGS_READ_WRITE    (LIBIO_FLAGS_READ | LIBIO_FLAGS_WRITE)
89
90void rtems_libio_config(rtems_configuration_table *config, unsigned32 max_fds);
91void rtems_libio_init(void);
92
93int __rtems_open(const char  *pathname, unsigned32 flag, unsigned32 mode);
94int __rtems_close(int  fd);
95int __rtems_read(int fd, void *buffer, unsigned32 count);
96int __rtems_write(int fd, const void *buffer, unsigned32 count);
97int __rtems_ioctl(int fd, unsigned32  command, void *buffer);
98int __rtems_lseek(int fd, rtems_libio_offset_t offset, int whence);
99int __rtems_fstat(int _fd, struct stat* _sbuf);
100int __rtems_isatty(int _fd);
101
102/*
103 * External I/O handlers
104 */
105typedef struct {
106    int (*open)(const char  *pathname, unsigned32 flag, unsigned32 mode);
107    int (*close)(int  fd);
108    int (*read)(int fd, void *buffer, unsigned32 count);
109    int (*write)(int fd, const void *buffer, unsigned32 count);
110    int (*ioctl)(int fd, unsigned32  command, void *buffer);
111    int (*lseek)(int fd, rtems_libio_offset_t offset, int whence);
112} rtems_libio_handler_t;
113
114void rtems_register_libio_handler(int handler_flag,
115                                 const rtems_libio_handler_t *handler);
116
117#define RTEMS_FILE_DESCRIPTOR_TYPE_FILE         0x0000
118#define RTEMS_FILE_DESCRIPTOR_TYPE_SOCKET       0x1000
119#define rtems_make_file_descriptor(fd,flags)    ((fd)|(flags))
120#define rtems_file_descriptor_base(fd)          ((fd) & 0x0FFF)
121#define rtems_file_descriptor_type(fd)          ((fd) & 0xF000)
122#define rtems_file_descriptor_type_index(fd)    ((((fd) & 0xF000) >> 12) - 1)
123
124/*
125 *  IOCTL values
126 */
127
128#define       RTEMS_IO_GET_ATTRIBUTES 1
129#define       RTEMS_IO_SET_ATTRIBUTES 2
130
131#endif /* _RTEMS_LIBIO_H */
Note: See TracBrowser for help on using the repository browser.