RTEMS CPU Kit with SuperCore  4.11.3
diskdevs.h
Go to the documentation of this file.
1 
9 /*
10  * Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia
11  * Author: Victor V. Vengerov <vvv@oktet.ru>
12  */
13 
14 #ifndef _RTEMS_DISKDEVS_H
15 #define _RTEMS_DISKDEVS_H
16 
17 #include <rtems.h>
18 #include <rtems/libio.h>
19 #include <rtems/chain.h>
20 #include <stdlib.h>
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
27 
46 typedef uint32_t rtems_blkdev_bnum;
47 
51 typedef int (*rtems_block_device_ioctl)(
53  uint32_t req,
54  void *argp
55 );
56 
60 #define RTEMS_DISK_READ_AHEAD_NO_TRIGGER ((rtems_blkdev_bnum) -1)
61 
65 typedef struct {
70 
77  rtems_blkdev_bnum trigger;
78 
85  rtems_blkdev_bnum next;
87 
93 typedef struct {
100  uint32_t read_hits;
101 
109  uint32_t read_misses;
110 
117 
121  uint32_t read_blocks;
122 
128  uint32_t read_errors;
129 
135  uint32_t write_transfers;
136 
140  uint32_t write_blocks;
141 
147  uint32_t write_errors;
149 
162  dev_t dev;
163 
169 
173  uint32_t capabilities;
174 
178  char *name;
179 
185  unsigned uses;
186 
193  rtems_blkdev_bnum start;
194 
198  rtems_blkdev_bnum size;
199 
206 
215  uint32_t block_size;
216 
222  rtems_blkdev_bnum block_count;
223 
230 
241 
248 
253 
257  void *driver_data;
258 
263  bool deleted;
264 
269 
274 };
275 
281 static inline dev_t rtems_disk_get_device_identifier(
282  const rtems_disk_device *dd
283 )
284 {
285  return dd->dev;
286 }
287 
288 static inline rtems_device_major_number rtems_disk_get_major_number(
289  const rtems_disk_device *dd
290 )
291 {
292  return rtems_filesystem_dev_major_t(dd->dev);
293 }
294 
295 static inline rtems_device_minor_number rtems_disk_get_minor_number(
296  const rtems_disk_device *dd
297 )
298 {
299  return rtems_filesystem_dev_minor_t(dd->dev);
300 }
301 
302 static inline void *rtems_disk_get_driver_data(
303  const rtems_disk_device *dd
304 )
305 {
306  return dd->driver_data;
307 }
308 
309 static inline uint32_t rtems_disk_get_media_block_size(
310  const rtems_disk_device *dd
311 )
312 {
313  return dd->media_block_size;
314 }
315 
316 static inline uint32_t rtems_disk_get_block_size(
317  const rtems_disk_device *dd
318 )
319 {
320  return dd->block_size;
321 }
322 
323 static inline rtems_blkdev_bnum rtems_disk_get_block_begin(
324  const rtems_disk_device *dd
325 )
326 {
327  return dd->start;
328 }
329 
330 static inline rtems_blkdev_bnum rtems_disk_get_block_count(
331  const rtems_disk_device *dd
332 )
333 {
334  return dd->size;
335 }
336 
365  dev_t dev,
366  uint32_t block_size,
367  rtems_blkdev_bnum block_count,
368  rtems_block_device_ioctl handler,
369  void *driver_data,
370  const char *name
371 );
372 
395  dev_t dev,
396  dev_t phys,
397  rtems_blkdev_bnum block_begin,
398  rtems_blkdev_bnum block_count,
399  const char *name
400 );
401 
418 
429 
438 
457 
467 
490 
491 /* Internal function, do not use */
492 rtems_status_code rtems_disk_init_phys(
493  rtems_disk_device *dd,
494  uint32_t block_size,
495  rtems_blkdev_bnum block_count,
496  rtems_block_device_ioctl handler,
497  void *driver_data
498 );
499 
500 /* Internal function, do not use */
501 rtems_status_code rtems_disk_init_log(
502  rtems_disk_device *dd,
503  rtems_disk_device *phys_dd,
504  rtems_blkdev_bnum block_begin,
505  rtems_blkdev_bnum block_count
506 );
507 
508 #ifdef __cplusplus
509 }
510 #endif
511 
512 #endif
uint32_t block_size
Block size in bytes.
Definition: diskdevs.h:215
This is used to manage each element (node) which is placed on a chain.
Definition: chain.h:65
rtems_disk_device * rtems_disk_next(dev_t dev)
Disk device iterator.
Definition: diskdevs.c:479
Block device read-ahead control.
Definition: diskdevs.h:65
uint32_t rtems_blkdev_bnum
Block device block index type.
Definition: diskdevs.h:46
size_t bds_per_group
Buffer descriptors per group count.
Definition: diskdevs.h:247
Basic IO API.
rtems_blkdev_stats stats
Device statistics for this disk.
Definition: diskdevs.h:268
rtems_chain_node node
Chain node for the read-ahead request queue of the read-ahead task.
Definition: diskdevs.h:69
int(* rtems_block_device_ioctl)(rtems_disk_device *dd, uint32_t req, void *argp)
Block device IO control handler type.
Definition: diskdevs.h:51
rtems_status_code rtems_disk_create_phys(dev_t dev, uint32_t block_size, rtems_blkdev_bnum block_count, rtems_block_device_ioctl handler, void *driver_data, const char *name)
Creates a physical disk with device identifier dev.
Definition: diskdevs.c:233
uint32_t capabilities
Driver capabilities.
Definition: diskdevs.h:173
uint32_t media_block_size
Media block size in bytes.
Definition: diskdevs.h:205
char * name
Disk device name.
Definition: diskdevs.h:178
dev_t dev
Device identifier (concatenation of major and minor number).
Definition: diskdevs.h:162
rtems_blkdev_bnum size
Size of the physical or logical disk in media blocks.
Definition: diskdevs.h:198
rtems_blkdev_read_ahead read_ahead
Read-ahead control for this disk.
Definition: diskdevs.h:273
uint32_t read_blocks
Count of blocks transfered from the device.
Definition: diskdevs.h:121
Block device statistics.
Definition: diskdevs.h:93
Description of a disk device (logical and physical disks).
Definition: diskdevs.h:158
uint32_t read_errors
Read error count.
Definition: diskdevs.h:128
uint32_t read_ahead_transfers
Read-ahead transfer count.
Definition: diskdevs.h:116
rtems_status_code rtems_disk_io_initialize(void)
Initializes the disk device management.
Definition: diskdevs.c:536
rtems_blkdev_bnum block_count
Block count.
Definition: diskdevs.h:222
rtems_status_code
Classic API Status.
Definition: status.h:46
rtems_disk_device * rtems_disk_obtain(dev_t dev)
Returns the disk device descriptor for the device identifier dev.
Definition: diskdevs.c:434
uint32_t media_blocks_per_block
Media blocks per device blocks.
Definition: diskdevs.h:229
uint32_t write_errors
Write error count.
Definition: diskdevs.h:147
rtems_status_code rtems_disk_release(rtems_disk_device *dd)
Releases the disk device descriptor dd.
Definition: diskdevs.c:459
uint32_t write_blocks
Count of blocks transfered to the device.
Definition: diskdevs.h:140
void * driver_data
Private data for the disk driver.
Definition: diskdevs.h:257
int block_to_media_block_shift
Block to media block shift.
Definition: diskdevs.h:240
rtems_status_code rtems_disk_io_done(void)
Releases all resources allocated for disk device management.
Definition: diskdevs.c:579
rtems_blkdev_bnum trigger
Block value to trigger the read-ahead request.
Definition: diskdevs.h:77
rtems_blkdev_bnum start
Start media block number.
Definition: diskdevs.h:193
rtems_disk_device * phys_dev
Physical device identifier (equals the dev entry if it specifies a physical device).
Definition: diskdevs.h:168
Chain API.
unsigned uses
Usage counter.
Definition: diskdevs.h:185
uint32_t read_misses
Read miss count.
Definition: diskdevs.h:109
rtems_status_code rtems_disk_delete(dev_t dev)
Deletes a physical or logical disk device with identifier dev.
Definition: diskdevs.c:408
rtems_blkdev_bnum next
Start block for the next read-ahead request.
Definition: diskdevs.h:85
rtems_block_device_ioctl ioctl
IO control handler for this disk.
Definition: diskdevs.h:252
uint32_t read_hits
Read hit count.
Definition: diskdevs.h:100
bool deleted
Indicates that this disk should be deleted as soon as the last user releases this disk...
Definition: diskdevs.h:263
rtems_status_code rtems_disk_create_log(dev_t dev, dev_t phys, rtems_blkdev_bnum block_begin, rtems_blkdev_bnum block_count, const char *name)
Creates a logical disk with device identifier dev.
Definition: diskdevs.c:292
uint32_t write_transfers
Write transfer count.
Definition: diskdevs.h:135