RTEMS  5.1
bdbuf.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  * Copyright (C) 2008,2009 Chris Johns <chrisj@rtems.org>
14  * Rewritten to remove score mutex access. Fixes many performance
15  * issues.
16  * Change to support demand driven variable buffer sizes.
17  *
18  * Copyright (c) 2009-2012 embedded brains GmbH.
19  */
20 
21 #ifndef _RTEMS_BDBUF_H
22 #define _RTEMS_BDBUF_H
23 
24 #include <rtems.h>
25 #include <rtems/libio.h>
26 #include <rtems/chain.h>
27 
28 #include <rtems/blkdev.h>
29 #include <rtems/diskdevs.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
238 typedef enum
239 {
244 
249 
254 
259 
264 
269 
274 
279 
284 
289 
295 
299 struct rtems_bdbuf_group;
300 typedef struct rtems_bdbuf_group rtems_bdbuf_group;
301 
308 typedef struct rtems_bdbuf_buffer
309 {
313  {
316  signed char cache;
317  signed char bal;
318  } avl;
319 
324  unsigned char* buffer;
328  uint32_t waiters;
332  uint32_t hold_timer;
336  void* user;
338 
347 {
350  size_t bds_per_group;
353  uint32_t users;
355 };
356 
361 typedef struct rtems_bdbuf_config {
364  uint32_t max_write_blocks;
368  uint32_t swapout_period;
370  uint32_t swap_block_hold;
378  size_t size;
380  uint32_t buffer_min;
381  uint32_t buffer_max;
387 
394 
399 #define RTEMS_BDBUF_MAX_READ_AHEAD_BLOCKS_DEFAULT 0
400 
404 #define RTEMS_BDBUF_MAX_WRITE_BLOCKS_DEFAULT 16
405 
409 #define RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT 15
410 
414 #define RTEMS_BDBUF_SWAPOUT_TASK_SWAP_PERIOD_DEFAULT 250
415 
419 #define RTEMS_BDBUF_SWAPOUT_TASK_BLOCK_HOLD_DEFAULT 1000
420 
424 #define RTEMS_BDBUF_SWAPOUT_WORKER_TASKS_DEFAULT 0
425 
429 #define RTEMS_BDBUF_SWAPOUT_WORKER_TASK_PRIORITY_DEFAULT \
430  RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT
431 
435 #define RTEMS_BDBUF_READ_AHEAD_TASK_PRIORITY_DEFAULT \
436  RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT
437 
441 #define RTEMS_BDBUF_TASK_STACK_SIZE_DEFAULT RTEMS_MINIMUM_STACK_SIZE
442 
446 #define RTEMS_BDBUF_CACHE_MEMORY_SIZE_DEFAULT (64 * 512)
447 
451 #define RTEMS_BDBUF_BUFFER_MIN_SIZE_DEFAULT (512)
452 
456 #define RTEMS_BDBUF_BUFFER_MAX_SIZE_DEFAULT (4096)
457 
471 rtems_bdbuf_init (void);
472 
503  rtems_disk_device *dd,
504  rtems_blkdev_bnum block,
505  rtems_bdbuf_buffer** bd
506 );
507 
537  rtems_disk_device *dd,
538  rtems_blkdev_bnum block,
539  rtems_bdbuf_buffer** bd
540 );
541 
563 
587 
610 
630 
642 void
644 
671  uint32_t block_size,
672  bool sync);
673 
677 void
679  rtems_blkdev_stats *stats);
680 
684 void
686 
689 #ifdef __cplusplus
690 }
691 #endif
692 
693 #endif
void rtems_bdbuf_purge_dev(rtems_disk_device *dd)
Purges all buffers corresponding to the disk device dd.
Definition: bdbuf.c:2861
Definition: chain.h:68
void * user
Definition: bdbuf.h:336
uint32_t rtems_blkdev_bnum
Block device block index type.
Definition: diskdevs.h:45
rtems_bdbuf_group * group
Definition: bdbuf.h:330
Accessed by upper layer with modified data.
Definition: bdbuf.h:263
Basic IO API.
rtems_task_priority swapout_priority
Definition: bdbuf.h:366
void rtems_bdbuf_get_device_stats(const rtems_disk_device *dd, rtems_blkdev_stats *stats)
Returns the block device statistics.
Definition: bdbuf.c:2985
int references
Definition: bdbuf.h:335
uint32_t waiters
Definition: bdbuf.h:328
Definition: bdbuf.h:346
rtems_status_code rtems_bdbuf_syncdev(rtems_disk_device *dd)
Definition: bdbuf.c:2229
signed char cache
Definition: bdbuf.h:316
In transfer by block device driver and purged.
Definition: bdbuf.h:293
size_t swapout_workers
Definition: bdbuf.h:371
struct rtems_bdbuf_buffer * left
Definition: bdbuf.h:314
void sync(void)
Definition: sync.c:85
Scheduled for synchronization.
Definition: bdbuf.h:283
Empty.
Definition: bdbuf.h:248
void rtems_bdbuf_reset_device_stats(rtems_disk_device *dd)
Resets the block device statistics.
Definition: bdbuf.c:2993
size_t size
Definition: bdbuf.h:378
rtems_task_priority swapout_worker_priority
Definition: bdbuf.h:374
size_t task_stack_size
Definition: bdbuf.h:376
rtems_status_code rtems_bdbuf_init(void)
Definition: bdbuf.c:1509
Definition: bdbuf.h:361
uint32_t max_write_blocks
Definition: bdbuf.h:364
unsigned char * buffer
Definition: bdbuf.h:324
Cached.
Definition: bdbuf.h:253
signed char bal
Definition: bdbuf.h:317
rtems_status_code rtems_bdbuf_read(rtems_disk_device *dd, rtems_blkdev_bnum block, rtems_bdbuf_buffer **bd)
Definition: bdbuf.c:2057
size_t bds_per_group
Definition: bdbuf.h:350
Block device statistics.
Definition: diskdevs.h:92
struct rtems_bdbuf_buffer rtems_bdbuf_buffer
Description of a disk device (logical and physical disks).
Definition: diskdevs.h:157
uint32_t max_read_ahead_blocks
Definition: bdbuf.h:362
uint32_t swap_block_hold
Definition: bdbuf.h:370
Modified by upper layer.
Definition: bdbuf.h:278
rtems_status_code
Classic API Status.
Definition: status.h:43
rtems_task_priority read_ahead_priority
Definition: bdbuf.h:384
rtems_status_code rtems_bdbuf_set_block_size(rtems_disk_device *dd, uint32_t block_size, bool sync)
Sets the block size of a disk device.
Definition: bdbuf.c:2869
uint32_t hold_timer
Definition: bdbuf.h:332
rtems_bdbuf_buffer * bdbuf
Definition: bdbuf.h:354
rtems_disk_device * dd
Definition: bdbuf.h:320
Block Device Disk Management API.
rtems_status_code rtems_bdbuf_release(rtems_bdbuf_buffer *bd)
Definition: bdbuf.c:2131
rtems_chain_node link
Definition: bdbuf.h:348
Definition: bdbuf.h:308
struct rtems_bdbuf_buffer * right
Definition: bdbuf.h:315
Chain API.
rtems_status_code rtems_bdbuf_get(rtems_disk_device *dd, rtems_blkdev_bnum block, rtems_bdbuf_buffer **bd)
Definition: bdbuf.c:1789
const rtems_bdbuf_config rtems_bdbuf_configuration
Accessed by upper layer with cached data.
Definition: bdbuf.h:258
rtems_bdbuf_buf_state
State of a buffer of the cache.
Definition: bdbuf.h:238
uint32_t buffer_max
Definition: bdbuf.h:381
rtems_bdbuf_buf_state state
Definition: bdbuf.h:326
Free.
Definition: bdbuf.h:243
rtems_status_code rtems_bdbuf_sync(rtems_bdbuf_buffer *bd)
Definition: bdbuf.c:2197
Accessed by upper layer with purged data.
Definition: bdbuf.h:273
struct rtems_bdbuf_config rtems_bdbuf_config
rtems_blkdev_bnum block
Definition: bdbuf.h:322
uint32_t users
Definition: bdbuf.h:353
uint32_t buffer_min
Definition: bdbuf.h:380
rtems_status_code rtems_bdbuf_release_modified(rtems_bdbuf_buffer *bd)
Definition: bdbuf.c:2165
rtems_chain_node link
Definition: bdbuf.h:310
Block Device Management.
Accessed by upper layer with invalid data.
Definition: bdbuf.h:268
In transfer by block device driver.
Definition: bdbuf.h:288
uint32_t swapout_period
Definition: bdbuf.h:368
uint32_t rtems_task_priority
Definition: tasks.h:55