Version 3 (modified by 10 years ago) (diff) | ,
---|
GIET-VM / RDK Driver
The rdk_driver.c and rdk_driver.h files define the RDK driver.
This driver supports a virtual disk implemented as a memory segment, in the physical address space. This ramdisk vseg must be defined in the mapping.
This driver is called by the generic IOC driver, when the USE_IOC_RDK flag is set in the hard_config.h file.
The _rdk_read() and _rdk_write() blocking functions use a software memcpy, whatever the selected mode (BOOT / KERNEL / USER). These blocking functions return only when the transfer is completed. As the number of concurrent accesses is not bounded, these functions don't use the _ioc_lock variable.
The SEG_RDK_BASE virtual address must be defined in the hard_config.h file when the USE_IOC_RDK flag is set.
#ifndef _GIET_RDK_DRIVERS_H_ #define _GIET_RDK_DRIVERS_H_
unsigned int _rdk_init()
This function does nothing, but is required by the generic IOC API.
unsigned int _rdk_read( unsigned int lba, unsigned int buffer, unsigned int count )
This function transfer data from the RAMDISK to a memory buffer.
- mode : BOOT / KERNEL / USER (unused)
- lba : first block index on the block device
- buffer : virtual base address of the memory buffer
- count : number of blocks to be transfered.
Returns 0 if success, > 0 if error.
unsigned int _rdk_write( unsigned int lba, unsigned int buffer, unsigned int count )
This function transfer data from a memory buffer to the RAMDISK.
- mode : BOOT / KERNEL / USER (unused)
- lba : first block index on the block device
- buffer : virtual base address of the memory buffer
- count : number of blocks to be transfered.
Returns 0 if success, > 0 if error.
unsigned int _rdk_get_block_size()
This function returns the block size.
unsigned int _rdk_get_status()
This function returns always 0, but is required bi the generic IOC API.