source: rtems/cpukit/libcsupport/include/rtems/libio.h @ 27dccae

4.104.114.84.95
Last change on this file since 27dccae was 27dccae, checked in by Joel Sherrill <joel.sherrill@…>, on 05/20/98 at 17:09:12

Patch to add return status to rtems_termios_enqueue_raw_characters from
Eric Norum per request from Geoffroy Montel:

The rtems_termios_enqueue_raw_characters function type is void.
The problem is that I can't return an error message if the input
buffer is full.
Could we add a return value?

Sure, but what would you do with the overflow indication? POSIX says,
when the input limit is reached, the saved characters are thrown away
without notice.

Anyhow, the change is so small I've done it and enclosed the patch.

  • Property mode set to 100644
File size: 5.1 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    void                *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_init(void);
91
92int __rtems_open(const char  *pathname, unsigned32 flag, unsigned32 mode);
93int __rtems_close(int  fd);
94int __rtems_read(int fd, void *buffer, unsigned32 count);
95int __rtems_write(int fd, const void *buffer, unsigned32 count);
96int __rtems_ioctl(int fd, unsigned32  command, void *buffer);
97int __rtems_lseek(int fd, rtems_libio_offset_t offset, int whence);
98int __rtems_fstat(int _fd, struct stat* _sbuf);
99
100/*
101 * External I/O handlers
102 */
103typedef struct {
104    int (*open)(const char  *pathname, unsigned32 flag, unsigned32 mode);
105    int (*close)(int  fd);
106    int (*read)(int fd, void *buffer, unsigned32 count);
107    int (*write)(int fd, const void *buffer, unsigned32 count);
108    int (*ioctl)(int fd, unsigned32  command, void *buffer);
109    int (*lseek)(int fd, rtems_libio_offset_t offset, int whence);
110} rtems_libio_handler_t;
111
112void rtems_register_libio_handler(int handler_flag,
113                                 const rtems_libio_handler_t *handler);
114
115#define RTEMS_FILE_DESCRIPTOR_TYPE_FILE         0x0000
116#define RTEMS_FILE_DESCRIPTOR_TYPE_SOCKET       0x1000
117#define rtems_make_file_descriptor(fd,flags)    ((fd)|(flags))
118#define rtems_file_descriptor_base(fd)          ((fd) & 0x0FFF)
119#define rtems_file_descriptor_type(fd)          ((fd) & 0xF000)
120#define rtems_file_descriptor_type_index(fd)    ((((fd) & 0xF000) >> 12) - 1)
121
122/*
123 *  IOCTL values
124 */
125
126#define       RTEMS_IO_GET_ATTRIBUTES 1
127#define       RTEMS_IO_SET_ATTRIBUTES 2
128#define       RTEMS_IO_TCDRAIN        3
129
130/*
131 * Callbacks from TERMIOS routines to device-dependent code
132 */
133#include <termios.h>
134typedef struct rtems_termios_callbacks {
135  int       (*firstOpen)(int major, int minor, void *arg);
136  int       (*lastClose)(int major, int minor, void *arg);
137  int       (*pollRead)(int minor);
138  int       (*write)(int minor, const char *buf, int len);
139  int       (*setAttributes)(int minor, const struct termios *t);
140  int       (*stopRemoteTx)(int minor);
141  int       (*startRemoteTx)(int minor);
142  int       outputUsesInterrupts;
143} rtems_termios_callbacks;
144
145/*
146 * Device-independent TERMIOS routines
147 */
148void rtems_termios_initialize (void);
149rtems_status_code rtems_termios_open (
150  rtems_device_major_number      major,
151  rtems_device_minor_number      minor,
152  void                          *arg,
153  const rtems_termios_callbacks *callbacks
154  );
155rtems_status_code rtems_termios_close (void *arg);
156rtems_status_code rtems_termios_read (void *arg);
157rtems_status_code rtems_termios_write (void *arg);
158rtems_status_code rtems_termios_ioctl (void *arg);
159int rtems_termios_enqueue_raw_characters (void *ttyp, char *buf, int len);
160void rtems_termios_dequeue_characters (void *ttyp, int len);
161void rtems_termios_reserve_resources(
162  rtems_configuration_table *configuration,
163  rtems_unsigned32           number_of_devices
164);
165
166#endif /* _RTEMS_LIBIO_H */
Note: See TracBrowser for help on using the repository browser.