|
RTEMS CPU Kit with SuperCore
4.11.2
|
This module provides functions to manage disk devices. More...
|
Files | |
| file | diskdevs.h |
| Block Device Disk Management API. | |
| file | diskdevs-init.c |
| Block Device Disk Management Initialize. | |
| file | diskdevs.c |
| Block device disk management implementation. | |
Data Structures | |
| struct | rtems_blkdev_read_ahead |
| Block device read-ahead control. More... | |
| struct | rtems_blkdev_stats |
| Block device statistics. More... | |
| struct | rtems_disk_device |
| Description of a disk device (logical and physical disks). More... | |
Macros | |
| #define | RTEMS_DISK_READ_AHEAD_NO_TRIGGER ((rtems_blkdev_bnum) -1) |
| Trigger value to disable further read-ahead requests. | |
Typedefs | |
| typedef uint32_t | rtems_blkdev_bnum |
| Block device block index type. | |
| typedef int(* | rtems_block_device_ioctl) (rtems_disk_device *dd, uint32_t req, void *argp) |
| Block device IO control handler type. | |
Disk Device Maintainance | |
| 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. More... | |
| 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. More... | |
| rtems_status_code | rtems_disk_delete (dev_t dev) |
| Deletes a physical or logical disk device with identifier dev. More... | |
| rtems_disk_device * | rtems_disk_obtain (dev_t dev) |
| Returns the disk device descriptor for the device identifier dev. More... | |
| rtems_status_code | rtems_disk_release (rtems_disk_device *dd) |
| Releases the disk device descriptor dd. More... | |
Disk Management | |
| rtems_status_code | rtems_disk_io_initialize (void) |
| Initializes the disk device management. More... | |
| rtems_status_code | rtems_disk_io_done (void) |
| Releases all resources allocated for disk device management. More... | |
This module provides functions to manage disk devices.
A disk is a set of blocks which are identified by a consecutive set of non-negative integers starting at zero. There are also logical disks which contain a subset of consecutive disk blocks. The logical disks are used to represent the partitions of a disk. The disk devices are accessed via the block device buffer module.
| 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.
A logical disk manages a subset of consecutive blocks contained in the physical disk with identifier phys. The start block index of the logical disk device is block_begin. The block count of the logcal disk will be block_count. The blocks must be within the range of blocks managed by the associated physical disk device. A device node will be registered in the file system with absolute path name, if name is not NULL. The block size and IO control handler are inherited by the physical disk.
| RTEMS_SUCCESSFUL | Successful operation. |
| RTEMS_NOT_CONFIGURED | Cannot lock disk device operation mutex. |
| RTEMS_INVALID_ID | Specified physical disk identifier does not correspond to a physical disk. |
| RTEMS_INVALID_NUMBER | Begin block or block count are out of range. |
| RTEMS_NO_MEMORY | Not enough memory. |
| RTEMS_RESOURCE_IN_USE | Disk device descriptor for logical disk identifier is already in use. |
| RTEMS_UNSATISFIED | Cannot create device node. |
References RTEMS_SUCCESSFUL.
| 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.
The block size block_size must be positive. The disk will have block_count blocks. The block index starts with zero. The associated disk device driver will be invoked via the IO control handler handler. A device node will be registered in the file system with absolute path name, if name is not NULL. This function is usually invoked from a block device driver during initialization when a physical device is detected in the system. The device driver provides an IO control handler to allow block device operations.
| RTEMS_SUCCESSFUL | Successful operation. |
| RTEMS_NOT_CONFIGURED | Cannot lock disk device operation mutex. |
| RTEMS_INVALID_ADDRESS | IO control handler is NULL. |
| RTEMS_INVALID_NUMBER | Block size is invalid. |
| RTEMS_NO_MEMORY | Not enough memory. |
| RTEMS_RESOURCE_IN_USE | Disk device descriptor is already in use. |
| RTEMS_UNSATISFIED | Cannot create device node. |
References RTEMS_INVALID_ADDRESS, and RTEMS_SUCCESSFUL.
| rtems_status_code rtems_disk_delete | ( | dev_t | dev | ) |
Deletes a physical or logical disk device with identifier dev.
Marks the disk device as deleted. When a physical disk device is deleted, all corresponding logical disk devices will marked as deleted too. Disks that are marked as deleted and have a usage counter of zero will be deleted. The corresponding device nodes will be removed from the file system. In case of a physical disk deletion the IO control handler will be invoked with a RTEMS_BLKIO_DELETED request. Disks that are still in use will be deleted upon release.
| RTEMS_SUCCESSFUL | Successful operation. |
| RTEMS_NOT_CONFIGURED | Cannot lock disk device operation mutex. |
| RTEMS_INVALID_ID | No disk for specified device identifier. |
References RTEMS_SUCCESSFUL.
Referenced by rtems_disk_release().
| rtems_status_code rtems_disk_io_done | ( | void | ) |
Releases all resources allocated for disk device management.
There is no protection against concurrent access. If parts of the system are still in use the behaviour is undefined.
| RTEMS_SUCCESSFUL | Successful operation. |
| rtems_status_code rtems_disk_io_initialize | ( | void | ) |
Initializes the disk device management.
This functions returns successful if the disk device management is already initialized. There is no protection against concurrent access.
| RTEMS_SUCCESSFUL | Successful initialization. |
| RTEMS_NO_MEMORY | Not enough memory or no semaphore available. |
| RTEMS_UNSATISFIED | Block device buffer initialization failed. |
References RTEMS_SUCCESSFUL.
| rtems_disk_device* rtems_disk_obtain | ( | dev_t | dev | ) |
Returns the disk device descriptor for the device identifier dev.
Increments usage counter by one. You should release the disk device descriptor with rtems_disk_release().
NULL if no corresponding disk exists. References rtems_interrupt_lock_acquire, and RTEMS_SUCCESSFUL.
| rtems_status_code rtems_disk_release | ( | rtems_disk_device * | dd | ) |
Releases the disk device descriptor dd.
Decrements usage counter by one.
| RTEMS_SUCCESSFUL | Successful operation. |
References rtems_disk_device::deleted, rtems_disk_device::dev, rtems_disk_delete(), rtems_interrupt_lock_acquire, rtems_interrupt_lock_release, RTEMS_SUCCESSFUL, and rtems_disk_device::uses.
1.8.13