source: rtems/cpukit/libfs/src/rfs/rtems-rfs-rtems-dev.c @ 9b4422a2

4.11
Last change on this file since 9b4422a2 was 9b4422a2, checked in by Joel Sherrill <joel.sherrill@…>, on May 3, 2012 at 3:09:24 PM

Remove All CVS Id Strings Possible Using a Script

Script does what is expected and tries to do it as
smartly as possible.

+ remove occurrences of two blank comment lines

next to each other after Id string line removed.

+ remove entire comment blocks which only exited to

contain CVS Ids

+ If the processing left a blank line at the top of

a file, it was removed.

  • Property mode set to 100644
File size: 5.7 KB
Line 
1/*
2 *  COPYRIGHT (c) 2010 Chris Johns <chrisj@rtems.org>
3 *
4 *  The license and distribution terms for this file may be
5 *  found in the file LICENSE in this distribution or at
6 *  http://www.rtems.com/license/LICENSE.
7 */
8/**
9 * @file
10 *
11 * @ingroup rtems-rfs
12 *
13 * RTEMS RFS Device Interface.
14 *
15 * This file contains the set of handlers used to map operations on RFS device
16 * nodes onto calls to the RTEMS Classic API IO Manager.
17 *
18 */
19
20#if HAVE_CONFIG_H
21#include "config.h"
22#endif
23
24#include <rtems/devfs.h>
25#include "rtems-rfs-rtems.h"
26
27/**
28 * This handler maps an open() operation onto rtems_io_open().
29 *
30 * @param iop
31 * @param pathname
32 * @param flag
33 * @param mode
34 * @return int
35 */
36static int
37rtems_rfs_rtems_device_open ( rtems_libio_t *iop,
38                              const char    *pathname,
39                              int            oflag,
40                              mode_t         mode)
41{
42  rtems_libio_open_close_args_t args;
43  rtems_rfs_file_system*        fs = rtems_rfs_rtems_pathloc_dev (&iop->pathinfo);
44  rtems_rfs_ino                 ino = rtems_rfs_rtems_get_iop_ino (iop);
45  rtems_rfs_inode_handle        inode;
46  int                           major;
47  int                           minor;
48  rtems_status_code             status;
49  int                           rc;
50
51  rtems_rfs_rtems_lock (fs);
52
53  rc = rtems_rfs_inode_open (fs, ino, &inode, true);
54  if (rc > 0)
55  {
56    rtems_rfs_rtems_unlock (fs);
57    return rtems_rfs_rtems_error ("device_open: opening inode", rc);
58  }
59
60  major = rtems_rfs_inode_get_block (&inode, 0);
61  minor = rtems_rfs_inode_get_block (&inode, 1);
62
63  rc = rtems_rfs_inode_close (fs, &inode);
64  if (rc > 0)
65  {
66    rtems_rfs_rtems_unlock (fs);
67    return rtems_rfs_rtems_error ("device_open: closing inode", rc);
68  }
69
70  rtems_rfs_rtems_unlock (fs);
71
72  iop->data0 = major;
73  iop->data1 = (void*)((intptr_t) minor);
74
75  args.iop   = iop;
76  args.flags = iop->flags;
77  args.mode  = mode;
78
79  status = rtems_io_open (major, minor, (void *) &args);
80
81  return rtems_deviceio_errno (status);
82}
83
84/**
85 * This handler maps a close() operation onto rtems_io_close().
86 *
87 * @param iop
88 * @return int
89 */
90
91static int
92rtems_rfs_rtems_device_close (rtems_libio_t* iop)
93{
94  rtems_libio_open_close_args_t args;
95  rtems_status_code             status;
96  int                           major;
97  int                           minor;
98
99  major = (int) iop->data0;
100  minor = (intptr_t) iop->data1;
101
102  args.iop   = iop;
103  args.flags = 0;
104  args.mode  = 0;
105
106  status = rtems_io_close (major, minor, (void *) &args);
107
108  return rtems_deviceio_errno (status);
109}
110
111/**
112 * This handler maps a read() operation onto rtems_io_read().
113 *
114 * @param iop
115 * @param buffer
116 * @param count
117 * @return ssize_t
118 */
119
120static ssize_t
121rtems_rfs_rtems_device_read (rtems_libio_t* iop, void* buffer, size_t count)
122{
123  rtems_libio_rw_args_t args;
124  rtems_status_code     status;
125  int                   major;
126  int                   minor;
127
128  major = (int) iop->data0;
129  minor = (intptr_t) iop->data1;
130
131  args.iop         = iop;
132  args.offset      = iop->offset;
133  args.buffer      = buffer;
134  args.count       = count;
135  args.flags       = iop->flags;
136  args.bytes_moved = 0;
137
138  status = rtems_io_read (major, minor, (void *) &args);
139  if (status)
140    return rtems_deviceio_errno (status);
141
142  return (ssize_t) args.bytes_moved;
143}
144
145/*
146 * This handler maps a write() operation onto rtems_io_write().
147 *
148 * @param iop
149 * @param buffer
150 * @param count
151 * @return ssize_t
152 */
153
154static ssize_t
155rtems_rfs_rtems_device_write (rtems_libio_t* iop,
156                              const void*    buffer,
157                              size_t         count)
158{
159  rtems_libio_rw_args_t args;
160  rtems_status_code     status;
161  int                   major;
162  int                   minor;
163
164  major = (int) iop->data0;
165  minor = (intptr_t) iop->data1;
166
167  args.iop         = iop;
168  args.offset      = iop->offset;
169  args.buffer      = (void *) buffer;
170  args.count       = count;
171  args.flags       = iop->flags;
172  args.bytes_moved = 0;
173
174  status = rtems_io_write (major, minor, (void *) &args);
175  if (status)
176    return rtems_deviceio_errno (status);
177
178  return (ssize_t) args.bytes_moved;
179}
180
181/**
182 * This handler maps an ioctl() operation onto rtems_io_ioctl().
183 *
184 * @param iop
185 * @param command
186 * @param buffer
187 * @return int
188 */
189
190static int
191rtems_rfs_rtems_device_ioctl (rtems_libio_t* iop,
192                              uint32_t       command,
193                              void*          buffer)
194{
195  rtems_libio_ioctl_args_t args;
196  rtems_status_code        status;
197  int                      major;
198  int                      minor;
199
200  major = (int) iop->data0;
201  minor = (intptr_t) iop->data1;
202
203  args.iop     = iop;
204  args.command = command;
205  args.buffer  = buffer;
206
207  status = rtems_io_control (major, minor, (void *) &args);
208  if (status)
209    return rtems_deviceio_errno (status);
210
211  return args.ioctl_return;
212}
213
214/**
215 * The consumes the truncate call. You cannot truncate device files.
216 *
217 * @param iop
218 * @param length
219 * @return int
220 */
221
222static int
223rtems_rfs_rtems_device_ftruncate (rtems_libio_t* iop, off_t length)
224{
225  return 0;
226}
227
228/*
229 *  Handler table for RFS device nodes
230 */
231
232const rtems_filesystem_file_handlers_r rtems_rfs_rtems_device_handlers = {
233  .open_h      = rtems_rfs_rtems_device_open,
234  .close_h     = rtems_rfs_rtems_device_close,
235  .read_h      = rtems_rfs_rtems_device_read,
236  .write_h     = rtems_rfs_rtems_device_write,
237  .ioctl_h     = rtems_rfs_rtems_device_ioctl,
238  .lseek_h     = rtems_filesystem_default_lseek_file,
239  .fstat_h     = rtems_rfs_rtems_fstat,
240  .ftruncate_h = rtems_rfs_rtems_device_ftruncate,
241  .fsync_h     = rtems_filesystem_default_fsync_or_fdatasync,
242  .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
243  .fcntl_h     = rtems_filesystem_default_fcntl
244};
Note: See TracBrowser for help on using the repository browser.