source: rtems/cpukit/libblock/include/rtems/blkdev.h @ 1b39f18

4.104.114.95
Last change on this file since 1b39f18 was a6f5d89, checked in by Ralf Corsepius <ralf.corsepius@…>, on 01/28/05 at 08:44:51

New header guard.

  • Property mode set to 100644
File size: 4.6 KB
Line 
1/**
2 * @file rtems/blkdev.h
3 * block device driver interface definitions
4 */
5 
6/*
7 * Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia
8 * Author: Victor V. Vengerov <vvv@oktet.ru>
9 *
10 * @(#) $Id$
11 */
12
13#ifndef _RTEMS_BLKDEV_H
14#define _RTEMS_BLKDEV_H
15
16#include <rtems.h>
17#include <sys/ioctl.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23/* Interface with device drivers
24 * Block device looks, initialized and behaves like traditional RTEMS device
25 * driver. Heart of the block device driver is in BIOREQUEST ioctl. This call
26 * puts I/O request to the block device queue, in priority order, for
27 * asynchronous processing. When driver executes request, req_done
28 * function invoked, so callee knows about it. Look for details below.
29 */
30
31
32/* Block device block number datatype */
33typedef uint32_t   blkdev_bnum;
34
35/* Block device request type */
36typedef enum blkdev_request_op {
37    BLKDEV_REQ_READ,  /* Read operation */
38    BLKDEV_REQ_WRITE  /* Write operation */
39} blkdev_request_op;
40
41/* Type for block device request done callback function.
42 *
43 * PARAMETERS:
44 *     arg    - argument supplied in blkdev_request
45 *     status - rtems status code for this operation
46 *     errno  - errno value to be passed to the user when
47 *              status != RTEMS_SUCCESSFUL
48 */
49typedef void (* blkdev_request_cb)(void *arg,
50                                   rtems_status_code status,
51                                   int error);
52
53/* blkdev_sg_buffer
54 * Block device scatter/gather buffer structure
55 */
56typedef struct blkdev_sg_buffer {
57    uint32_t   length;  /* Buffer length */
58    void            *buffer;  /* Buffer pointer */
59} blkdev_sg_buffer;
60
61/* blkdev_request (Block Device Request) structure is
62 * used to read/write a number of blocks from/to device.
63 */
64typedef struct blkdev_request {
65    blkdev_request_op req;      /* Block device operation (read or write) */
66    blkdev_request_cb req_done; /* Callback function */
67    void             *done_arg; /* Argument to be passed to callback function*/
68    rtems_status_code status;  /* Last I/O operation completion status */
69    int               error;   /* If status != RTEMS_SUCCESSFUL, this field
70                                * contains error code
71                                */
72    blkdev_bnum       start;    /* Start block number */
73    uint32_t    count;    /* Number of blocks to be exchanged */
74    uint32_t    bufnum;   /* Number of buffers provided */
75
76    blkdev_sg_buffer  bufs[0];/* List of scatter/gather buffers */
77} blkdev_request;
78
79/* Block device IOCTL request codes */
80#define BLKIO_REQUEST      _IOWR('B', 1, blkdev_request)
81#define BLKIO_GETBLKSIZE   _IO('B', 2)
82#define BLKIO_GETSIZE      _IO('B', 3)
83#define BLKIO_SYNCDEV      _IO('B', 4)
84
85/* Device driver interface conventions suppose that driver may
86 * contain initialize/open/close/read/write/ioctl entry points. These
87 * primitives (except initialize) can be implemented in generic fashion,
88 * based upon supplied block device driver ioctl handler. Every block
89 * device driver should provide initialize entry point, which is register
90 * all block devices and appropriate ioctl handlers.
91 */
92
93#define GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES \
94      rtems_blkdev_generic_open, rtems_blkdev_generic_close, \
95      rtems_blkdev_generic_read, rtems_blkdev_generic_write, \
96      rtems_blkdev_generic_ioctl
97
98/* blkdev_generic_read --
99 *     Generic block device read primitive. Implemented using block device
100 *     buffer management primitives.
101 */
102rtems_device_driver
103rtems_blkdev_generic_read(
104    rtems_device_major_number major,
105    rtems_device_minor_number minor,
106    void                    * arg
107);
108
109/* blkdev_generic_write --
110 *     Generic block device driver write primitive. Implemented using block
111 *     device buffer management primitives.
112 */
113rtems_device_driver
114rtems_blkdev_generic_write(
115    rtems_device_major_number major,
116    rtems_device_minor_number minor,
117    void                    * arg
118);
119
120/* blkdev_generic_open --
121 *     Generic block device open primitive.
122 */
123rtems_device_driver
124rtems_blkdev_generic_open(
125    rtems_device_major_number major,
126    rtems_device_minor_number minor,
127    void                    * arg
128);
129
130/* blkdev_generic_close --
131 *     Generic block device close primitive.
132 */
133rtems_device_driver
134rtems_blkdev_generic_close(
135    rtems_device_major_number major,
136    rtems_device_minor_number minor,
137    void                    * arg
138);
139
140/* blkdev_generic_ioctl --
141 *     Generic block device ioctl primitive.
142 */
143rtems_device_driver
144rtems_blkdev_generic_ioctl(
145    rtems_device_major_number major,
146    rtems_device_minor_number minor,
147    void                    * arg
148);
149
150#ifdef __cplusplus
151}
152#endif
153
154#endif
Note: See TracBrowser for help on using the repository browser.