source: rtems/cpukit/libblock/src/ramdisk-driver.c @ 20e1e769

4.115
Last change on this file since 20e1e769 was 9b4422a2, checked in by Joel Sherrill <joel.sherrill@…>, on 05/03/12 at 15:09:24

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: 3.3 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup rtems_ramdisk
5 *
6 * @brief RAM disk block device implementation.
7 */
8
9/*
10 * Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia
11 * Author: Victor V. Vengerov <vvv@oktet.ru>
12 */
13
14#ifdef HAVE_CONFIG_H
15#include "config.h"
16#endif
17
18/* FIXME: How to set this define? */
19#if !defined(RTEMS_RAMDISK_TRACE)
20    #define RTEMS_RAMDISK_TRACE 0
21#endif
22
23#include <stdlib.h>
24#include <errno.h>
25#include <string.h>
26
27#if RTEMS_RAMDISK_TRACE
28    #include <stdio.h>
29#endif
30
31#include <rtems.h>
32#include <rtems/ramdisk.h>
33
34#if RTEMS_RAMDISK_TRACE
35    static void
36    rtems_ramdisk_printf (const ramdisk *rd, const char *format, ...)
37    {
38        if (rd->trace)
39        {
40            va_list args;
41            va_start (args, format);
42            printf ("ramdisk:");
43            vprintf (format, args);
44            printf ("\n");
45        }
46    }
47#endif
48
49static int
50ramdisk_read(struct ramdisk *rd, rtems_blkdev_request *req)
51{
52    uint8_t *from = rd->area;
53    uint32_t   i;
54    rtems_blkdev_sg_buffer *sg;
55
56#if RTEMS_RAMDISK_TRACE
57    rtems_ramdisk_printf (rd, "ramdisk read: start=%d, blocks=%d",
58                          req->bufs[0].block, req->bufnum);
59#endif
60
61    for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
62    {
63#if RTEMS_RAMDISK_TRACE
64        rtems_ramdisk_printf (rd, "ramdisk read: buf=%d block=%d length=%d off=%d addr=%p",
65                              i, sg->block, sg->length, sg->block * rd->block_size,
66                              from + (sg->block * rd->block_size));
67#endif
68        memcpy(sg->buffer, from + (sg->block * rd->block_size), sg->length);
69    }
70    req->status = RTEMS_SUCCESSFUL;
71    req->req_done(req->done_arg, RTEMS_SUCCESSFUL);
72    return 0;
73}
74
75static int
76ramdisk_write(struct ramdisk *rd, rtems_blkdev_request *req)
77{
78    uint8_t *to = rd->area;
79    uint32_t   i;
80    rtems_blkdev_sg_buffer *sg;
81
82#if RTEMS_RAMDISK_TRACE
83    rtems_ramdisk_printf (rd, "ramdisk write: start=%d, blocks=%d",
84                          req->bufs[0].block, req->bufnum);
85#endif
86    for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++)
87    {
88#if RTEMS_RAMDISK_TRACE
89        rtems_ramdisk_printf (rd, "ramdisk write: buf=%d block=%d length=%d off=%d addr=%p",
90                              i, sg->block, sg->length, sg->block * rd->block_size,
91                              to + (sg->block * rd->block_size));
92#endif
93        memcpy(to + (sg->block * rd->block_size), sg->buffer, sg->length);
94    }
95    req->status = RTEMS_SUCCESSFUL;
96    req->req_done(req->done_arg, RTEMS_SUCCESSFUL);
97    return 0;
98}
99
100int
101ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
102{
103    struct ramdisk *rd = rtems_disk_get_driver_data(dd);
104
105    switch (req)
106    {
107        case RTEMS_BLKIO_REQUEST:
108        {
109            rtems_blkdev_request *r = argp;
110
111            switch (r->req)
112            {
113                case RTEMS_BLKDEV_REQ_READ:
114                    return ramdisk_read(rd, r);
115
116                case RTEMS_BLKDEV_REQ_WRITE:
117                    return ramdisk_write(rd, r);
118
119                default:
120                    errno = EINVAL;
121                    return -1;
122            }
123            break;
124        }
125
126        case RTEMS_BLKIO_DELETED:
127            if (rd->free_at_delete_request) {
128              ramdisk_free(rd);
129            }
130            break;
131
132        default:
133            return rtems_blkdev_ioctl (dd, req, argp);
134            break;
135    }
136
137    errno = EINVAL;
138    return -1;
139}
Note: See TracBrowser for help on using the repository browser.