diff --git a/cpukit/include/rtems/bdbuf.h b/cpukit/include/rtems/bdbuf.h index 2d6c022259..bdadedc0a5 100644 --- a/cpukit/include/rtems/bdbuf.h +++ b/cpukit/include/rtems/bdbuf.h @@ -235,8 +235,7 @@ extern "C" { * * */ -typedef enum -{ +typedef enum { /** * @brief Free. */ @@ -305,35 +304,33 @@ typedef struct rtems_bdbuf_group rtems_bdbuf_group; * speed-up buffer lookup descriptors are organized in AVL-Tree. The fields * 'dd' and 'block' are search keys. */ -typedef struct rtems_bdbuf_buffer -{ - rtems_chain_node link; /**< Link the BD onto a number of lists. */ +typedef struct rtems_bdbuf_buffer { + rtems_chain_node link; /**< Link the BD onto a number of lists. */ - struct rtems_bdbuf_avl_node - { - struct rtems_bdbuf_buffer* left; /**< Left Child */ - struct rtems_bdbuf_buffer* right; /**< Right Child */ - signed char cache; /**< Cache */ - signed char bal; /**< The balance of the sub-tree */ + struct rtems_bdbuf_avl_node { + struct rtems_bdbuf_buffer *left; /**< Left Child */ + struct rtems_bdbuf_buffer *right; /**< Right Child */ + signed char cache; /**< Cache */ + signed char bal; /**< The balance of the sub-tree */ } avl; - rtems_disk_device *dd; /**< disk device */ + rtems_disk_device *dd; /**< disk device */ - rtems_blkdev_bnum block; /**< block number on the device */ + rtems_blkdev_bnum block; /**< block number on the device */ - unsigned char* buffer; /**< Pointer to the buffer memory area */ + unsigned char *buffer; /**< Pointer to the buffer memory area */ - rtems_bdbuf_buf_state state; /**< State of the buffer. */ + rtems_bdbuf_buf_state state; /**< State of the buffer. */ - uint32_t waiters; /**< The number of threads waiting on this + uint32_t waiters; /**< The number of threads waiting on this * buffer. */ - rtems_bdbuf_group* group; /**< Pointer to the group of BDs this BD is + rtems_bdbuf_group *group; /**< Pointer to the group of BDs this BD is * part of. */ - uint32_t hold_timer; /**< Timer to indicate how long a buffer + uint32_t hold_timer; /**< Timer to indicate how long a buffer * has been held in the cache modified. */ - int references; /**< Allow reference counting by owner. */ - void* user; /**< User data. */ + int references; /**< Allow reference counting by owner. */ + void *user; /**< User data. */ } rtems_bdbuf_buffer; /** @@ -343,15 +340,14 @@ typedef struct rtems_bdbuf_buffer * buffers in the group, if there are more than 1 will also be that size. The * number of buffers in a group is a multiple of 2, ie 1, 2, 4, 8, etc. */ -struct rtems_bdbuf_group -{ +struct rtems_bdbuf_group { rtems_chain_node link; /**< Link the groups on a LRU list if they * have no buffers in use. */ size_t bds_per_group; /**< The number of BD allocated to this * group. This value must be a multiple of * 2. */ uint32_t users; /**< How many users the block has. */ - rtems_bdbuf_buffer* bdbuf; /**< First BD this block covers. */ + rtems_bdbuf_buffer *bdbuf; /**< First BD this block covers. */ }; /** @@ -373,15 +369,15 @@ typedef struct rtems_bdbuf_config { * task. */ rtems_task_priority swapout_worker_priority; /**< Priority of the swap out * task. */ - size_t task_stack_size; /**< Task stack size for swap-out + size_t task_stack_size; /**< Task stack size for swap-out * task and worker threads. */ - size_t size; /**< Size of memory in the + size_t size; /**< Size of memory in the * cache */ - uint32_t buffer_min; /**< Minimum buffer size. */ - uint32_t buffer_max; /**< Maximum buffer size + uint32_t buffer_min; /**< Minimum buffer size. */ + uint32_t buffer_max; /**< Maximum buffer size * supported. It is also the * allocation size. */ - rtems_task_priority read_ahead_priority; /**< Priority of the read-ahead + rtems_task_priority read_ahead_priority; /**< Priority of the read-ahead * task. */ } rtems_bdbuf_config; @@ -396,17 +392,17 @@ extern const rtems_bdbuf_config rtems_bdbuf_configuration; * The default value for the maximum read-ahead blocks disables the read-ahead * feature. */ -#define RTEMS_BDBUF_MAX_READ_AHEAD_BLOCKS_DEFAULT 0 +#define RTEMS_BDBUF_MAX_READ_AHEAD_BLOCKS_DEFAULT 0 /** * Default maximum number of blocks to write at once. */ -#define RTEMS_BDBUF_MAX_WRITE_BLOCKS_DEFAULT 16 +#define RTEMS_BDBUF_MAX_WRITE_BLOCKS_DEFAULT 16 /** * Default swap-out task priority. */ -#define RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT 15 +#define RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT 15 /** * Default swap-out task swap period in milli seconds. @@ -416,18 +412,18 @@ extern const rtems_bdbuf_config rtems_bdbuf_configuration; /** * Default swap-out task block hold time in milli seconds. */ -#define RTEMS_BDBUF_SWAPOUT_TASK_BLOCK_HOLD_DEFAULT 1000 +#define RTEMS_BDBUF_SWAPOUT_TASK_BLOCK_HOLD_DEFAULT 1000 /** * Default swap-out worker tasks. Currently disabled. */ -#define RTEMS_BDBUF_SWAPOUT_WORKER_TASKS_DEFAULT 0 +#define RTEMS_BDBUF_SWAPOUT_WORKER_TASKS_DEFAULT 0 /** * Default swap-out worker task priority. The same as the swap-out task. */ #define RTEMS_BDBUF_SWAPOUT_WORKER_TASK_PRIORITY_DEFAULT \ - RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT + RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT /** * Default read-ahead task priority. The same as the swap-out task. @@ -443,17 +439,17 @@ extern const rtems_bdbuf_config rtems_bdbuf_configuration; /** * Default size of memory allocated to the cache. */ -#define RTEMS_BDBUF_CACHE_MEMORY_SIZE_DEFAULT (64 * 512) +#define RTEMS_BDBUF_CACHE_MEMORY_SIZE_DEFAULT ( 64 * 512 ) /** * Default minimum size of buffers. */ -#define RTEMS_BDBUF_BUFFER_MIN_SIZE_DEFAULT (512) +#define RTEMS_BDBUF_BUFFER_MIN_SIZE_DEFAULT ( 512 ) /** * Default maximum size of buffers. */ -#define RTEMS_BDBUF_BUFFER_MAX_SIZE_DEFAULT (4096) +#define RTEMS_BDBUF_BUFFER_MAX_SIZE_DEFAULT ( 4096 ) /** * Prepare buffering layer to work - initialize buffer descritors and (if it is @@ -467,8 +463,7 @@ extern const rtems_bdbuf_config rtems_bdbuf_configuration; * @retval RTEMS_RESOURCE_IN_USE Already initialized. * @retval RTEMS_UNSATISFIED Not enough resources. */ -rtems_status_code -rtems_bdbuf_init (void); +rtems_status_code rtems_bdbuf_init( void ); /** * Get block buffer for data to be written into. The buffers is set to the @@ -498,11 +493,10 @@ rtems_bdbuf_init (void); * @retval RTEMS_SUCCESSFUL Successful operation. * @retval RTEMS_INVALID_ID Invalid block number. */ -rtems_status_code -rtems_bdbuf_get ( - rtems_disk_device *dd, - rtems_blkdev_bnum block, - rtems_bdbuf_buffer** bd +rtems_status_code rtems_bdbuf_get( + rtems_disk_device *dd, + rtems_blkdev_bnum block, + rtems_bdbuf_buffer **bd ); /** @@ -532,11 +526,10 @@ rtems_bdbuf_get ( * @retval RTEMS_INVALID_ID Invalid block number. * @retval RTEMS_IO_ERROR IO error. */ -rtems_status_code -rtems_bdbuf_read ( - rtems_disk_device *dd, - rtems_blkdev_bnum block, - rtems_bdbuf_buffer** bd +rtems_status_code rtems_bdbuf_read( + rtems_disk_device *dd, + rtems_blkdev_bnum block, + rtems_bdbuf_buffer **bd ); /** @@ -555,11 +548,10 @@ rtems_bdbuf_read ( * @param block [in] Linear media block number. * @param nr_blocks [in] Number of consecutive blocks that can be pre-fetched. */ -void -rtems_bdbuf_peek ( +void rtems_bdbuf_peek( rtems_disk_device *dd, - rtems_blkdev_bnum block, - uint32_t nr_blocks + rtems_blkdev_bnum block, + uint32_t nr_blocks ); /** @@ -581,8 +573,7 @@ rtems_bdbuf_peek ( * @retval RTEMS_SUCCESSFUL Successful operation. * @retval RTEMS_INVALID_ADDRESS The reference is NULL. */ -rtems_status_code -rtems_bdbuf_release (rtems_bdbuf_buffer* bd); +rtems_status_code rtems_bdbuf_release( rtems_bdbuf_buffer *bd ); /** * Release the buffer allocated with a get or read call placing it on the @@ -605,8 +596,7 @@ rtems_bdbuf_release (rtems_bdbuf_buffer* bd); * @retval RTEMS_SUCCESSFUL Successful operation. * @retval RTEMS_INVALID_ADDRESS The reference is NULL. */ -rtems_status_code -rtems_bdbuf_release_modified (rtems_bdbuf_buffer* bd); +rtems_status_code rtems_bdbuf_release_modified( rtems_bdbuf_buffer *bd ); /** * Release the buffer as modified and wait until it has been synchronized with @@ -628,8 +618,7 @@ rtems_bdbuf_release_modified (rtems_bdbuf_buffer* bd); * @retval RTEMS_SUCCESSFUL Successful operation. * @retval RTEMS_INVALID_ADDRESS The reference is NULL. */ -rtems_status_code -rtems_bdbuf_sync (rtems_bdbuf_buffer* bd); +rtems_status_code rtems_bdbuf_sync( rtems_bdbuf_buffer *bd ); /** * Synchronize all modified buffers for this device with the disk and wait @@ -648,8 +637,7 @@ rtems_bdbuf_sync (rtems_bdbuf_buffer* bd); * * @retval RTEMS_SUCCESSFUL Successful operation. */ -rtems_status_code -rtems_bdbuf_syncdev (rtems_disk_device *dd); +rtems_status_code rtems_bdbuf_syncdev( rtems_disk_device *dd ); /** * @brief Purges all buffers corresponding to the disk device @a dd. @@ -662,8 +650,7 @@ rtems_bdbuf_syncdev (rtems_disk_device *dd); * * @param dd [in] The disk device. */ -void -rtems_bdbuf_purge_dev (rtems_disk_device *dd); +void rtems_bdbuf_purge_dev( rtems_disk_device *dd ); /** * @brief Sets the block size of a disk device. @@ -689,23 +676,24 @@ rtems_bdbuf_purge_dev (rtems_disk_device *dd); * @retval RTEMS_SUCCESSFUL Successful operation. * @retval RTEMS_INVALID_NUMBER Invalid block size. */ -rtems_status_code -rtems_bdbuf_set_block_size (rtems_disk_device *dd, - uint32_t block_size, - bool sync); +rtems_status_code rtems_bdbuf_set_block_size( + rtems_disk_device *dd, + uint32_t block_size, + bool sync +); /** * @brief Returns the block device statistics. */ -void -rtems_bdbuf_get_device_stats (const rtems_disk_device *dd, - rtems_blkdev_stats *stats); +void rtems_bdbuf_get_device_stats( + const rtems_disk_device *dd, + rtems_blkdev_stats *stats +); /** * @brief Resets the block device statistics. */ -void -rtems_bdbuf_reset_device_stats (rtems_disk_device *dd); +void rtems_bdbuf_reset_device_stats( rtems_disk_device *dd ); /** @} */ diff --git a/cpukit/include/rtems/bdpart.h b/cpukit/include/rtems/bdpart.h index 872fe5ca9f..6cdb3a81cf 100644 --- a/cpukit/include/rtems/bdpart.h +++ b/cpukit/include/rtems/bdpart.h @@ -226,17 +226,17 @@ typedef union { * format recognized on the disk will be stored in @a format. */ rtems_status_code rtems_bdpart_read( - const char *disk_name, - rtems_bdpart_format *format, + const char *disk_name, + rtems_bdpart_format *format, rtems_bdpart_partition *partitions, - size_t *count + size_t *count ); /** * @brief Sorts the partition table @a partitions with @a count partitions to * have ascending begin blocks */ -void rtems_bdpart_sort( rtems_bdpart_partition *partitions, size_t count); +void rtems_bdpart_sort( rtems_bdpart_partition *partitions, size_t count ); /** * @brief Writes the partition table to the physical disk device with name @@ -252,10 +252,10 @@ void rtems_bdpart_sort( rtems_bdpart_partition *partitions, size_t count); * disk. Depending on the output format there are additional constrains. */ rtems_status_code rtems_bdpart_write( - const char *disk_name, - const rtems_bdpart_format *format, + const char *disk_name, + const rtems_bdpart_format *format, const rtems_bdpart_partition *partitions, - size_t count + size_t count ); /** @@ -269,11 +269,11 @@ rtems_status_code rtems_bdpart_write( * with respect to the output format in @a format. */ rtems_status_code rtems_bdpart_create( - const char *disk_name, + const char *disk_name, const rtems_bdpart_format *format, - rtems_bdpart_partition *partitions, - const unsigned *distribution, - size_t count + rtems_bdpart_partition *partitions, + const unsigned *distribution, + size_t count ); /** @@ -288,9 +288,9 @@ rtems_status_code rtems_bdpart_create( * @see rtems_blkdev_create_partition(). */ rtems_status_code rtems_bdpart_register( - const char *disk_name, + const char *disk_name, const rtems_bdpart_partition *partitions, - size_t count + size_t count ); /** @@ -299,7 +299,7 @@ rtems_status_code rtems_bdpart_register( * * @see rtems_bdpart_register() and rtems_fsmount(). */ -rtems_status_code rtems_bdpart_register_from_disk( const char *disk_name); +rtems_status_code rtems_bdpart_register_from_disk( const char *disk_name ); /** * @brief Deletes the logical disks associated with the partitions of the disk @@ -310,22 +310,25 @@ rtems_status_code rtems_bdpart_register_from_disk( const char *disk_name); * rtems_bdpart_read(). */ rtems_status_code rtems_bdpart_unregister( - const char *disk_name, + const char *disk_name, const rtems_bdpart_partition *partitions, - size_t count + size_t count ); /** * @brief Prints the partition table @a partitions with @a count partitions to * standard output. */ -void rtems_bdpart_dump( const rtems_bdpart_partition *partitions, size_t count); +void rtems_bdpart_dump( + const rtems_bdpart_partition *partitions, + size_t count +); /** * @brief Returns the partition type for the MBR partition type value * @a mbr_type in @a type. */ -void rtems_bdpart_to_partition_type( uint8_t mbr_type, uuid_t type); +void rtems_bdpart_to_partition_type( uint8_t mbr_type, uuid_t type ); /** * @brief Converts the partition type in @a type to the MBR partition type. @@ -336,7 +339,7 @@ void rtems_bdpart_to_partition_type( uint8_t mbr_type, uuid_t type); */ bool rtems_bdpart_to_mbr_partition_type( const uuid_t type, - uint8_t *mbr_type + uint8_t *mbr_type ); /** @} */ @@ -352,7 +355,7 @@ bool rtems_bdpart_to_mbr_partition_type( #define RTEMS_BDPART_MBR_OFFSET_TABLE_0 446 #define RTEMS_BDPART_MBR_OFFSET_TABLE_1 \ - (RTEMS_BDPART_MBR_OFFSET_TABLE_0 + RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE) + ( RTEMS_BDPART_MBR_OFFSET_TABLE_0 + RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE ) #define RTEMS_BDPART_MBR_OFFSET_DISK_ID 440 @@ -372,18 +375,16 @@ bool rtems_bdpart_to_mbr_partition_type( #define RTEMS_BDPART_MBR_OFFSET_FLAGS 0 -static inline uint8_t rtems_bdpart_mbr_partition_type( - const uuid_t type -) +static inline uint8_t rtems_bdpart_mbr_partition_type( const uuid_t type ) { - return type [0]; + return type[ 0 ]; } rtems_status_code rtems_bdpart_get_disk_data( - const char *disk_name, - int *fd_ptr, + const char *disk_name, + int *fd_ptr, rtems_disk_device **dd_ptr, - rtems_blkdev_bnum *disk_end + rtems_blkdev_bnum *disk_end ); #ifdef __cplusplus diff --git a/cpukit/include/rtems/blkdev.h b/cpukit/include/rtems/blkdev.h index 31467a4142..df77b3af52 100644 --- a/cpukit/include/rtems/blkdev.h +++ b/cpukit/include/rtems/blkdev.h @@ -47,9 +47,9 @@ extern "C" { * to avoid requests looping for ever. */ typedef enum rtems_blkdev_request_op { - RTEMS_BLKDEV_REQ_READ, /**< Read the requested blocks of data. */ - RTEMS_BLKDEV_REQ_WRITE, /**< Write the requested blocks of data. */ - RTEMS_BLKDEV_REQ_SYNC /**< Sync any data with the media. */ + RTEMS_BLKDEV_REQ_READ, /**< Read the requested blocks of data. */ + RTEMS_BLKDEV_REQ_WRITE, /**< Write the requested blocks of data. */ + RTEMS_BLKDEV_REQ_SYNC /**< Sync any data with the media. */ } rtems_blkdev_request_op; struct rtems_blkdev_request; @@ -57,9 +57,9 @@ struct rtems_blkdev_request; /** * @brief Block device request done callback function type. */ -typedef void (*rtems_blkdev_request_cb)( +typedef void ( *rtems_blkdev_request_cb )( struct rtems_blkdev_request *req, - rtems_status_code status + rtems_status_code status ); /** @@ -142,7 +142,7 @@ typedef struct rtems_blkdev_request { /** * List of scatter or gather buffers. */ - rtems_blkdev_sg_buffer bufs[RTEMS_ZERO_LENGTH_ARRAY]; + rtems_blkdev_sg_buffer bufs[ RTEMS_ZERO_LENGTH_ARRAY ]; } rtems_blkdev_request; /** @@ -158,10 +158,10 @@ typedef struct rtems_blkdev_request { */ static inline void rtems_blkdev_request_done( rtems_blkdev_request *req, - rtems_status_code status + rtems_status_code status ) { - (*req->done)(req, status); + ( *req->done )( req, status ); } /** @@ -170,83 +170,83 @@ static inline void rtems_blkdev_request_done( * Only valid if the driver has returned the * @ref RTEMS_BLKDEV_CAP_MULTISECTOR_CONT capability. */ -#define RTEMS_BLKDEV_START_BLOCK(req) (req->bufs[0].block) +#define RTEMS_BLKDEV_START_BLOCK( req ) ( req->bufs[ 0 ].block ) /** * @name IO Control Request Codes */ /**@{**/ -#define RTEMS_BLKIO_REQUEST _IOWR('B', 1, rtems_blkdev_request) -#define RTEMS_BLKIO_GETMEDIABLKSIZE _IOR('B', 2, uint32_t) -#define RTEMS_BLKIO_GETBLKSIZE _IOR('B', 3, uint32_t) -#define RTEMS_BLKIO_SETBLKSIZE _IOW('B', 4, uint32_t) -#define RTEMS_BLKIO_GETSIZE _IOR('B', 5, rtems_blkdev_bnum) -#define RTEMS_BLKIO_SYNCDEV _IO('B', 6) -#define RTEMS_BLKIO_DELETED _IO('B', 7) -#define RTEMS_BLKIO_CAPABILITIES _IO('B', 8) -#define RTEMS_BLKIO_GETDISKDEV _IOR('B', 9, rtems_disk_device *) -#define RTEMS_BLKIO_PURGEDEV _IO('B', 10) -#define RTEMS_BLKIO_GETDEVSTATS _IOR('B', 11, rtems_blkdev_stats *) -#define RTEMS_BLKIO_RESETDEVSTATS _IO('B', 12) +#define RTEMS_BLKIO_REQUEST _IOWR( 'B', 1, rtems_blkdev_request ) +#define RTEMS_BLKIO_GETMEDIABLKSIZE _IOR( 'B', 2, uint32_t ) +#define RTEMS_BLKIO_GETBLKSIZE _IOR( 'B', 3, uint32_t ) +#define RTEMS_BLKIO_SETBLKSIZE _IOW( 'B', 4, uint32_t ) +#define RTEMS_BLKIO_GETSIZE _IOR( 'B', 5, rtems_blkdev_bnum ) +#define RTEMS_BLKIO_SYNCDEV _IO( 'B', 6 ) +#define RTEMS_BLKIO_DELETED _IO( 'B', 7 ) +#define RTEMS_BLKIO_CAPABILITIES _IO( 'B', 8 ) +#define RTEMS_BLKIO_GETDISKDEV _IOR( 'B', 9, rtems_disk_device * ) +#define RTEMS_BLKIO_PURGEDEV _IO( 'B', 10 ) +#define RTEMS_BLKIO_GETDEVSTATS _IOR( 'B', 11, rtems_blkdev_stats * ) +#define RTEMS_BLKIO_RESETDEVSTATS _IO( 'B', 12 ) /** @} */ static inline int rtems_disk_fd_get_media_block_size( - int fd, + int fd, uint32_t *media_block_size ) { - return ioctl(fd, RTEMS_BLKIO_GETMEDIABLKSIZE, media_block_size); + return ioctl( fd, RTEMS_BLKIO_GETMEDIABLKSIZE, media_block_size ); } -static inline int rtems_disk_fd_get_block_size(int fd, uint32_t *block_size) +static inline int rtems_disk_fd_get_block_size( int fd, uint32_t *block_size ) { - return ioctl(fd, RTEMS_BLKIO_GETBLKSIZE, block_size); + return ioctl( fd, RTEMS_BLKIO_GETBLKSIZE, block_size ); } -static inline int rtems_disk_fd_set_block_size(int fd, uint32_t block_size) +static inline int rtems_disk_fd_set_block_size( int fd, uint32_t block_size ) { - return ioctl(fd, RTEMS_BLKIO_SETBLKSIZE, &block_size); + return ioctl( fd, RTEMS_BLKIO_SETBLKSIZE, &block_size ); } static inline int rtems_disk_fd_get_block_count( - int fd, + int fd, rtems_blkdev_bnum *block_count ) { - return ioctl(fd, RTEMS_BLKIO_GETSIZE, block_count); + return ioctl( fd, RTEMS_BLKIO_GETSIZE, block_count ); } static inline int rtems_disk_fd_get_disk_device( - int fd, + int fd, rtems_disk_device **dd_ptr ) { - return ioctl(fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr); + return ioctl( fd, RTEMS_BLKIO_GETDISKDEV, dd_ptr ); } -static inline int rtems_disk_fd_sync(int fd) +static inline int rtems_disk_fd_sync( int fd ) { - return ioctl(fd, RTEMS_BLKIO_SYNCDEV); + return ioctl( fd, RTEMS_BLKIO_SYNCDEV ); } -static inline int rtems_disk_fd_purge(int fd) +static inline int rtems_disk_fd_purge( int fd ) { - return ioctl(fd, RTEMS_BLKIO_PURGEDEV); + return ioctl( fd, RTEMS_BLKIO_PURGEDEV ); } static inline int rtems_disk_fd_get_device_stats( - int fd, + int fd, rtems_blkdev_stats *stats ) { - return ioctl(fd, RTEMS_BLKIO_GETDEVSTATS, stats); + return ioctl( fd, RTEMS_BLKIO_GETDEVSTATS, stats ); } -static inline int rtems_disk_fd_reset_device_stats(int fd) +static inline int rtems_disk_fd_reset_device_stats( int fd ) { - return ioctl(fd, RTEMS_BLKIO_RESETDEVSTATS); + return ioctl( fd, RTEMS_BLKIO_RESETDEVSTATS ); } /** @@ -261,14 +261,14 @@ static inline int rtems_disk_fd_reset_device_stats(int fd) * inorder so the ATA multi-sector command for example can be used. This is a * hack to work around the current ATA driver. */ -#define RTEMS_BLKDEV_CAP_MULTISECTOR_CONT (1 << 0) +#define RTEMS_BLKDEV_CAP_MULTISECTOR_CONT ( 1 << 0 ) /** * @brief The driver will accept a sync call. * * A sync call is made to a driver after a bdbuf cache sync has finished. */ -#define RTEMS_BLKDEV_CAP_SYNC (1 << 1) +#define RTEMS_BLKDEV_CAP_SYNC ( 1 << 1 ) /** @} */ @@ -278,8 +278,7 @@ static inline int rtems_disk_fd_reset_device_stats(int fd) * Use this in all block devices to handle the common set of IO control * requests. */ -int -rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp); +int rtems_blkdev_ioctl( rtems_disk_device *dd, uint32_t req, void *argp ); /** * @brief Creates a block device. @@ -302,11 +301,11 @@ rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp); * rtems_blkdev_request. */ rtems_status_code rtems_blkdev_create( - const char *device, - uint32_t media_block_size, - rtems_blkdev_bnum media_block_count, + const char *device, + uint32_t media_block_size, + rtems_blkdev_bnum media_block_count, rtems_block_device_ioctl handler, - void *driver_data + void *driver_data ); /** @@ -335,8 +334,8 @@ rtems_status_code rtems_blkdev_create( * @see rtems_blkdev_create() and rtems_bdbuf_set_block_size(). */ rtems_status_code rtems_blkdev_create_partition( - const char *partition, - const char *parent_block_device, + const char *partition, + const char *parent_block_device, rtems_blkdev_bnum media_block_begin, rtems_blkdev_bnum media_block_count ); @@ -346,10 +345,10 @@ rtems_status_code rtems_blkdev_create_partition( */ void rtems_blkdev_print_stats( const rtems_blkdev_stats *stats, - uint32_t media_block_size, - uint32_t media_block_count, - uint32_t block_size, - const rtems_printer* printer + uint32_t media_block_size, + uint32_t media_block_count, + uint32_t block_size, + const rtems_printer *printer ); /** @@ -357,8 +356,8 @@ void rtems_blkdev_print_stats( */ void rtems_blkstats( const rtems_printer *printer, - const char *device, - bool reset + const char *device, + bool reset ); /** @} */ @@ -380,55 +379,49 @@ void rtems_blkstats( * driver should provide an initialize entry point, which registers the * appropriate IO control handler. */ -#define RTEMS_GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES \ - rtems_blkdev_generic_open, \ - rtems_blkdev_generic_close, \ - rtems_blkdev_generic_read, \ - rtems_blkdev_generic_write, \ - rtems_blkdev_generic_ioctl +#define RTEMS_GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES \ + rtems_blkdev_generic_open, rtems_blkdev_generic_close, \ + rtems_blkdev_generic_read, rtems_blkdev_generic_write, \ + rtems_blkdev_generic_ioctl /* Use rtems_blkdev_create() instead */ -RTEMS_DEPRECATED rtems_device_driver -rtems_blkdev_generic_read( - rtems_device_major_number major, - rtems_device_minor_number minor, - void * arg +RTEMS_DEPRECATED rtems_device_driver rtems_blkdev_generic_read( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg ); /* Use rtems_blkdev_create() instead */ -RTEMS_DEPRECATED rtems_device_driver -rtems_blkdev_generic_write( - rtems_device_major_number major, - rtems_device_minor_number minor, - void * arg +RTEMS_DEPRECATED rtems_device_driver rtems_blkdev_generic_write( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg ); /* Use rtems_blkdev_create() instead */ -RTEMS_DEPRECATED rtems_device_driver -rtems_blkdev_generic_open( - rtems_device_major_number major, - rtems_device_minor_number minor, - void * arg +RTEMS_DEPRECATED rtems_device_driver rtems_blkdev_generic_open( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg ); /* Use rtems_blkdev_create() instead */ -RTEMS_DEPRECATED rtems_device_driver -rtems_blkdev_generic_close( - rtems_device_major_number major, - rtems_device_minor_number minor, - void * arg +RTEMS_DEPRECATED rtems_device_driver rtems_blkdev_generic_close( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg ); /* Use rtems_blkdev_create() instead */ -RTEMS_DEPRECATED rtems_device_driver -rtems_blkdev_generic_ioctl( - rtems_device_major_number major, - rtems_device_minor_number minor, - void * arg +RTEMS_DEPRECATED rtems_device_driver rtems_blkdev_generic_ioctl( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg ); /* Use rtems_blkdev_create() instead */ -RTEMS_DEPRECATED extern const rtems_driver_address_table rtems_blkdev_generic_ops; +RTEMS_DEPRECATED extern const rtems_driver_address_table + rtems_blkdev_generic_ops; /** @} */ diff --git a/cpukit/include/rtems/diskdevs.h b/cpukit/include/rtems/diskdevs.h index 527a8cc955..01b3212fc2 100644 --- a/cpukit/include/rtems/diskdevs.h +++ b/cpukit/include/rtems/diskdevs.h @@ -47,21 +47,21 @@ typedef uint32_t rtems_blkdev_bnum; /** * @brief Block device IO control handler type. */ -typedef int (*rtems_block_device_ioctl)( +typedef int ( *rtems_block_device_ioctl )( rtems_disk_device *dd, - uint32_t req, - void *argp + uint32_t req, + void *argp ); /** * @brief Trigger value to disable further read-ahead requests. */ -#define RTEMS_DISK_READ_AHEAD_NO_TRIGGER ((rtems_blkdev_bnum) -1) +#define RTEMS_DISK_READ_AHEAD_NO_TRIGGER ( ( rtems_blkdev_bnum ) - 1 ) /** * @brief Size value to set number of blocks based on config and disk size. */ -#define RTEMS_DISK_READ_AHEAD_SIZE_AUTO (0) +#define RTEMS_DISK_READ_AHEAD_SIZE_AUTO ( 0 ) /** * @brief Block device read-ahead control. @@ -306,24 +306,20 @@ RTEMS_DEPRECATED static inline dev_t rtems_disk_get_device_identifier( } /* Use fstat() instead */ -RTEMS_DEPRECATED static inline rtems_device_major_number rtems_disk_get_major_number( - const rtems_disk_device *dd -) +RTEMS_DEPRECATED static inline rtems_device_major_number +rtems_disk_get_major_number( const rtems_disk_device *dd ) { - return rtems_filesystem_dev_major_t(dd->dev); + return rtems_filesystem_dev_major_t( dd->dev ); } /* Use fstat() instead */ -RTEMS_DEPRECATED static inline rtems_device_minor_number rtems_disk_get_minor_number( - const rtems_disk_device *dd -) +RTEMS_DEPRECATED static inline rtems_device_minor_number +rtems_disk_get_minor_number( const rtems_disk_device *dd ) { - return rtems_filesystem_dev_minor_t(dd->dev); + return rtems_filesystem_dev_minor_t( dd->dev ); } -static inline void *rtems_disk_get_driver_data( - const rtems_disk_device *dd -) +static inline void *rtems_disk_get_driver_data( const rtems_disk_device *dd ) { return dd->driver_data; } @@ -335,9 +331,7 @@ static inline uint32_t rtems_disk_get_media_block_size( return dd->media_block_size; } -static inline uint32_t rtems_disk_get_block_size( - const rtems_disk_device *dd -) +static inline uint32_t rtems_disk_get_block_size( const rtems_disk_device *dd ) { return dd->block_size; } @@ -365,40 +359,40 @@ static inline rtems_blkdev_bnum rtems_disk_get_block_count( /* Use rtems_blkdev_create() instead */ RTEMS_DEPRECATED rtems_status_code rtems_disk_create_phys( - dev_t dev, - uint32_t block_size, - rtems_blkdev_bnum block_count, + dev_t dev, + uint32_t block_size, + rtems_blkdev_bnum block_count, rtems_block_device_ioctl handler, - void *driver_data, - const char *name + void *driver_data, + const char *name ); /* Use rtems_blkdev_create_partition() instead */ RTEMS_DEPRECATED rtems_status_code rtems_disk_create_log( - dev_t dev, - dev_t phys, + dev_t dev, + dev_t phys, rtems_blkdev_bnum block_begin, rtems_blkdev_bnum block_count, - const char *name + const char *name ); /* * Use rtems_blkdev_create() or rtems_blkdev_create_partition and unlink() * instead. */ -RTEMS_DEPRECATED rtems_status_code rtems_disk_delete(dev_t dev); +RTEMS_DEPRECATED rtems_status_code rtems_disk_delete( dev_t dev ); /* * Use rtems_blkdev_create() or rtems_blkdev_create_partition and open() * instead. */ -RTEMS_DEPRECATED rtems_disk_device *rtems_disk_obtain(dev_t dev); +RTEMS_DEPRECATED rtems_disk_device *rtems_disk_obtain( dev_t dev ); /* * Use rtems_blkdev_create() or rtems_blkdev_create_partition and close() * instead. */ -RTEMS_DEPRECATED rtems_status_code rtems_disk_release(rtems_disk_device *dd); +RTEMS_DEPRECATED rtems_status_code rtems_disk_release( rtems_disk_device *dd ); /** @} */ @@ -408,10 +402,10 @@ RTEMS_DEPRECATED rtems_status_code rtems_disk_release(rtems_disk_device *dd); /**@{**/ /* Just remove calls to this function */ -RTEMS_DEPRECATED rtems_status_code rtems_disk_io_initialize(void); +RTEMS_DEPRECATED rtems_status_code rtems_disk_io_initialize( void ); /* Just remove calls to this function */ -RTEMS_DEPRECATED rtems_status_code rtems_disk_io_done(void); +RTEMS_DEPRECATED rtems_status_code rtems_disk_io_done( void ); /** @} */ @@ -421,23 +415,23 @@ RTEMS_DEPRECATED rtems_status_code rtems_disk_io_done(void); * This functionality no longer available. There is no global registration for * disk devices. */ -RTEMS_DEPRECATED rtems_disk_device *rtems_disk_next(dev_t dev); +RTEMS_DEPRECATED rtems_disk_device *rtems_disk_next( dev_t dev ); /* Internal function, do not use */ rtems_status_code rtems_disk_init_phys( - rtems_disk_device *dd, - uint32_t block_size, - rtems_blkdev_bnum block_count, + rtems_disk_device *dd, + uint32_t block_size, + rtems_blkdev_bnum block_count, rtems_block_device_ioctl handler, - void *driver_data + void *driver_data ); /* Internal function, do not use */ rtems_status_code rtems_disk_init_log( rtems_disk_device *dd, rtems_disk_device *phys_dd, - rtems_blkdev_bnum block_begin, - rtems_blkdev_bnum block_count + rtems_blkdev_bnum block_begin, + rtems_blkdev_bnum block_count ); #ifdef __cplusplus diff --git a/cpukit/include/rtems/ide_part_table.h b/cpukit/include/rtems/ide_part_table.h index 2e95fb66d1..5c175b8089 100644 --- a/cpukit/include/rtems/ide_part_table.h +++ b/cpukit/include/rtems/ide_part_table.h @@ -57,42 +57,40 @@ #include /* Minor base number for all logical devices */ -#define RTEMS_IDE_SECTOR_BITS 9 -#define RTEMS_IDE_SECTOR_SIZE 512 -#define RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE 16 -#define RTEMS_IDE_PARTITION_MAX_PARTITION_NUMBER 63 -#define RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER 4 -#define RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX 16 +#define RTEMS_IDE_SECTOR_BITS 9 +#define RTEMS_IDE_SECTOR_SIZE 512 +#define RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE 16 +#define RTEMS_IDE_PARTITION_MAX_PARTITION_NUMBER 63 +#define RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER 4 +#define RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX 16 -#define RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA1 0x55 -#define RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA2 0xaa -#define RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_OFFSET 0x1fe -#define RTEMS_IDE_PARTITION_TABLE_OFFSET 0x1be -#define RTEMS_IDE_PARTITION_TABLE_SIZE (4 * 16) -#define RTEMS_IDE_PARTITION_BOOTABLE_OFFSET 0 -#define RTEMS_IDE_PARTITION_SYS_TYPE_OFFSET 4 -#define RTEMS_IDE_PARTITION_START_OFFSET 8 -#define RTEMS_IDE_PARTITION_SIZE_OFFSET 12 +#define RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA1 0x55 +#define RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA2 0xaa +#define RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_OFFSET 0x1fe +#define RTEMS_IDE_PARTITION_TABLE_OFFSET 0x1be +#define RTEMS_IDE_PARTITION_TABLE_SIZE ( 4 * 16 ) +#define RTEMS_IDE_PARTITION_BOOTABLE_OFFSET 0 +#define RTEMS_IDE_PARTITION_SYS_TYPE_OFFSET 4 +#define RTEMS_IDE_PARTITION_START_OFFSET 8 +#define RTEMS_IDE_PARTITION_SIZE_OFFSET 12 /* * Conversion from and to little-endian byte order. (no-op on i386/i486) */ -#define LE_TO_CPU_U16(v) le16toh(v) -#define LE_TO_CPU_U32(v) le32toh(v) -#define CPU_TO_LE_U16(v) htole16(v) -#define CPU_TO_LE_U32(v) htole32(v) +#define LE_TO_CPU_U16( v ) le16toh( v ) +#define LE_TO_CPU_U32( v ) le32toh( v ) +#define CPU_TO_LE_U16( v ) htole16( v ) +#define CPU_TO_LE_U32( v ) htole32( v ) /* * sector_data_t -- * corresponds to the sector on the device */ -typedef struct rtems_sector_data_s -{ - uint32_t sector_num; /* sector number on the device */ - uint8_t data[RTEMS_ZERO_LENGTH_ARRAY]; /* raw sector data */ +typedef struct rtems_sector_data_s { + uint32_t sector_num; /* sector number on the device */ + uint8_t data[ RTEMS_ZERO_LENGTH_ARRAY ]; /* raw sector data */ } rtems_sector_data_t; - /* * Enum partition types * see list at http://ata-atapi.com/hiwtab.htm @@ -100,24 +98,23 @@ typedef struct rtems_sector_data_s * @todo Should these have RTEMS before them. */ enum { - EMPTY_PARTITION = 0x00, - DOS_FAT12_PARTITION = 0x01, - DOS_FAT16_PARTITION = 0x04, - EXTENDED_PARTITION = 0x05, - DOS_P32MB_PARTITION = 0x06, - FAT32_PARTITION = 0x0B, - FAT32_LBA_PARTITION = 0x0C, - FAT16_LBA_PARTITION = 0x0E, - DM6_PARTITION = 0x54, - EZD_PARTITION = 0x55, - DM6_AUX1PARTITION = 0x51, - DM6_AUX3PARTITION = 0x53, - LINUX_SWAP = 0x82, - LINUX_NATIVE = 0x83, - LINUX_EXTENDED = 0x85 + EMPTY_PARTITION = 0x00, + DOS_FAT12_PARTITION = 0x01, + DOS_FAT16_PARTITION = 0x04, + EXTENDED_PARTITION = 0x05, + DOS_P32MB_PARTITION = 0x06, + FAT32_PARTITION = 0x0B, + FAT32_LBA_PARTITION = 0x0C, + FAT16_LBA_PARTITION = 0x0E, + DM6_PARTITION = 0x54, + EZD_PARTITION = 0x55, + DM6_AUX1PARTITION = 0x51, + DM6_AUX3PARTITION = 0x53, + LINUX_SWAP = 0x82, + LINUX_NATIVE = 0x83, + LINUX_EXTENDED = 0x85 }; - /* Forward declaration */ struct rtems_disk_desc_s; @@ -126,35 +123,34 @@ struct rtems_disk_desc_s; * contains all neccessary information about partition */ typedef struct rtems_part_desc_s { - uint8_t bootable; /* is the partition active */ - uint8_t sys_type; /* type of partition */ - uint8_t log_id; /* logical number of partition */ - uint32_t start; /* first partition sector, in absolute + uint8_t bootable; /* is the partition active */ + uint8_t sys_type; /* type of partition */ + uint8_t log_id; /* logical number of partition */ + uint32_t start; /* first partition sector, in absolute * numeration */ - uint32_t size; /* size in sectors */ - uint32_t end; /* last partition sector, end = start + size - 1 */ - struct rtems_disk_desc_s *disk_desc; /* descriptor of disk, partition + uint32_t size; /* size in sectors */ + uint32_t end; /* last partition sector, end = start + size - 1 */ + struct rtems_disk_desc_s *disk_desc; /* descriptor of disk, partition * contains in */ - struct rtems_part_desc_s *ext_part; /* extended partition containing this + struct rtems_part_desc_s *ext_part; /* extended partition containing this * one */ - /* partitions, containing in this one */ - struct rtems_part_desc_s *sub_part[RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER]; + /* partitions, containing in this one */ + struct rtems_part_desc_s + *sub_part[ RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER ]; } rtems_part_desc_t; - - typedef struct rtems_disk_desc_s { - /* device name in /dev filesystem */ - char dev_name[RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX]; + /* device name in /dev filesystem */ + char dev_name[ RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX ]; - uint32_t sector_size; /* size of sector */ - uint32_t sector_bits; /* the base-2 logarithm of sector_size */ - uint32_t lba_size; /* total amount of sectors in lba address mode */ - int last_log_id; /* used for logical disks enumerating */ + uint32_t sector_size; /* size of sector */ + uint32_t sector_bits; /* the base-2 logarithm of sector_size */ + uint32_t lba_size; /* total amount of sectors in lba address mode */ + int last_log_id; /* used for logical disks enumerating */ - /* primary partition descriptors */ - rtems_part_desc_t *partitions[RTEMS_IDE_PARTITION_MAX_PARTITION_NUMBER]; + /* primary partition descriptors */ + rtems_part_desc_t *partitions[ RTEMS_IDE_PARTITION_MAX_PARTITION_NUMBER ]; } rtems_disk_desc_t; #ifdef __cplusplus @@ -178,7 +174,6 @@ void rtems_ide_part_table_free( rtems_disk_desc_t *disk_desc ) RTEMS_DEPRECATED; - /* * rtems_ide_part_table_get -- * reads partition table structure from the device @@ -195,11 +190,10 @@ void rtems_ide_part_table_free( * @deprecated Use the @ref rtems_bdpart "block device partition module" instead. */ rtems_status_code rtems_ide_part_table_get( - const char *dev_name, + const char *dev_name, rtems_disk_desc_t *disk_desc ) RTEMS_DEPRECATED; - /* * rtems_ide_part_table_initialize -- * initializes logical devices on the physical IDE drive diff --git a/cpukit/include/rtems/ramdisk.h b/cpukit/include/rtems/ramdisk.h index dcc60483dd..6f9caf26e0 100644 --- a/cpukit/include/rtems/ramdisk.h +++ b/cpukit/include/rtems/ramdisk.h @@ -12,7 +12,6 @@ #ifndef _RTEMS_RAMDISK_H #define _RTEMS_RAMDISK_H - #include #include @@ -60,7 +59,7 @@ typedef struct rtems_ramdisk_config { * * The configuration table is provided by the application. */ -extern rtems_ramdisk_config rtems_ramdisk_configuration []; +extern rtems_ramdisk_config rtems_ramdisk_configuration[]; /** * @brief External reference the size of the RAM disk configuration table @@ -74,19 +73,16 @@ extern size_t rtems_ramdisk_configuration_size; * @brief RAM disk driver initialization entry point. */ rtems_device_driver ramdisk_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *arg + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg ); /** * RAM disk driver table entry. */ #define RAMDISK_DRIVER_TABLE_ENTRY \ - { \ - ramdisk_initialize, \ - NULL, NULL, NULL, NULL, NULL \ - } + { ramdisk_initialize, NULL, NULL, NULL, NULL, NULL } #define RAMDISK_DEVICE_BASE_NAME "/dev/rd" @@ -137,7 +133,7 @@ typedef struct ramdisk { bool free_at_delete_request; } ramdisk; -int ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp); +int ramdisk_ioctl( rtems_disk_device *dd, uint32_t req, void *argp ); /** * @brief Allocates and initializes a RAM disk descriptor. @@ -182,15 +178,15 @@ int ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp); * @endcode */ ramdisk *ramdisk_allocate( - void *area_begin, - uint32_t media_block_size, + void *area_begin, + uint32_t media_block_size, rtems_blkdev_bnum media_block_count, - bool trace + bool trace ); -void ramdisk_free(ramdisk *rd); +void ramdisk_free( ramdisk *rd ); -static inline void ramdisk_enable_free_at_delete_request(ramdisk *rd) +static inline void ramdisk_enable_free_at_delete_request( ramdisk *rd ) { rd->free_at_delete_request = true; } @@ -207,10 +203,10 @@ static inline void ramdisk_enable_free_at_delete_request(ramdisk *rd) * @retval RTEMS_UNSATISFIED Something is wrong. */ rtems_status_code ramdisk_register( - uint32_t media_block_size, + uint32_t media_block_size, rtems_blkdev_bnum media_block_count, - bool trace, - const char *disk + bool trace, + const char *disk ); /** @} */ diff --git a/cpukit/libblock/src/bdbuf.c b/cpukit/libblock/src/bdbuf.c index 521713dc4f..efc18e713e 100644 --- a/cpukit/libblock/src/bdbuf.c +++ b/cpukit/libblock/src/bdbuf.c @@ -55,20 +55,18 @@ * A swapout transfer transaction data. This data is passed to a worked thread * to handle the write phase of the transfer. */ -typedef struct rtems_bdbuf_swapout_transfer -{ - rtems_chain_control bds; /**< The transfer list of BDs. */ - rtems_disk_device *dd; /**< The device the transfer is for. */ - bool syncing; /**< The data is a sync'ing. */ - rtems_blkdev_request write_req; /**< The write request. */ +typedef struct rtems_bdbuf_swapout_transfer { + rtems_chain_control bds; /**< The transfer list of BDs. */ + rtems_disk_device *dd; /**< The device the transfer is for. */ + bool syncing; /**< The data is a sync'ing. */ + rtems_blkdev_request write_req; /**< The write request. */ } rtems_bdbuf_swapout_transfer; /** * Swapout worker thread. These are available to take processing from the * main swapout thread and handle the I/O operation. */ -typedef struct rtems_bdbuf_swapout_worker -{ +typedef struct rtems_bdbuf_swapout_worker { rtems_chain_node link; /**< The threads sit on a chain when * idle. */ rtems_id id; /**< The id of the task so we can wake @@ -89,57 +87,57 @@ typedef struct rtems_bdbuf_waiters { /** * The BD buffer cache. */ -typedef struct rtems_bdbuf_cache -{ - rtems_id swapout; /**< Swapout task ID */ - bool swapout_enabled; /**< Swapout is only running if +typedef struct rtems_bdbuf_cache { + rtems_id swapout; /**< Swapout task ID */ + bool swapout_enabled; /**< Swapout is only running if * enabled. Set to false to kill the * swap out task. It deletes itself. */ - rtems_chain_control swapout_free_workers; /**< The work threads for the swapout + rtems_chain_control + swapout_free_workers; /**< The work threads for the swapout * task. */ - rtems_bdbuf_buffer* bds; /**< Pointer to table of buffer + rtems_bdbuf_buffer *bds; /**< Pointer to table of buffer * descriptors. */ - void* buffers; /**< The buffer's memory. */ + void *buffers; /**< The buffer's memory. */ size_t buffer_min_count; /**< Number of minimum size buffers * that fit the buffer memory. */ size_t max_bds_per_group; /**< The number of BDs of minimum * buffer size that fit in a group. */ uint32_t flags; /**< Configuration flags. */ - rtems_mutex lock; /**< The cache lock. It locks all + rtems_mutex lock; /**< The cache lock. It locks all * cache data, BD and lists. */ - rtems_mutex sync_lock; /**< Sync calls block writes. */ - bool sync_active; /**< True if a sync is active. */ - rtems_id sync_requester; /**< The sync requester. */ - rtems_disk_device *sync_device; /**< The device to sync and + rtems_mutex sync_lock; /**< Sync calls block writes. */ + bool sync_active; /**< True if a sync is active. */ + rtems_id sync_requester; /**< The sync requester. */ + rtems_disk_device *sync_device; /**< The device to sync and * BDBUF_INVALID_DEV not a device * sync. */ - rtems_bdbuf_buffer* tree; /**< Buffer descriptor lookup AVL tree + rtems_bdbuf_buffer *tree; /**< Buffer descriptor lookup AVL tree * root. There is only one. */ - rtems_chain_control lru; /**< Least recently used list */ - rtems_chain_control modified; /**< Modified buffers list */ - rtems_chain_control sync; /**< Buffers to sync list */ + rtems_chain_control lru; /**< Least recently used list */ + rtems_chain_control modified; /**< Modified buffers list */ + rtems_chain_control sync; /**< Buffers to sync list */ - rtems_bdbuf_waiters access_waiters; /**< Wait for a buffer in + rtems_bdbuf_waiters access_waiters; /**< Wait for a buffer in * ACCESS_CACHED, ACCESS_MODIFIED or * ACCESS_EMPTY * state. */ - rtems_bdbuf_waiters transfer_waiters; /**< Wait for a buffer in TRANSFER + rtems_bdbuf_waiters transfer_waiters; /**< Wait for a buffer in TRANSFER * state. */ - rtems_bdbuf_waiters buffer_waiters; /**< Wait for a buffer and no one is + rtems_bdbuf_waiters buffer_waiters; /**< Wait for a buffer and no one is * available. */ rtems_bdbuf_swapout_transfer *swapout_transfer; - rtems_bdbuf_swapout_worker *swapout_workers; + rtems_bdbuf_swapout_worker *swapout_workers; - size_t group_count; /**< The number of groups. */ - rtems_bdbuf_group* groups; /**< The groups. */ - rtems_id read_ahead_task; /**< Read-ahead task */ - rtems_chain_control read_ahead_chain; /**< Read-ahead request chain */ + size_t group_count; /**< The number of groups. */ + rtems_bdbuf_group *groups; /**< The groups. */ + rtems_id read_ahead_task; /**< Read-ahead task */ + rtems_chain_control read_ahead_chain; /**< Read-ahead request chain */ bool read_ahead_enabled; /**< Read-ahead enabled */ - rtems_status_code init_status; /**< The initialization status */ + rtems_status_code init_status; /**< The initialization status */ pthread_once_t once; } rtems_bdbuf_cache; @@ -173,24 +171,25 @@ typedef enum { * The events used in this code. These should be system events rather than * application events. */ -#define RTEMS_BDBUF_SWAPOUT_SYNC RTEMS_EVENT_2 +#define RTEMS_BDBUF_SWAPOUT_SYNC RTEMS_EVENT_2 #define RTEMS_BDBUF_READ_AHEAD_WAKE_UP RTEMS_EVENT_1 -static rtems_task rtems_bdbuf_swapout_task(rtems_task_argument arg); +static rtems_task rtems_bdbuf_swapout_task( rtems_task_argument arg ); -static rtems_task rtems_bdbuf_read_ahead_task(rtems_task_argument arg); +static rtems_task rtems_bdbuf_read_ahead_task( rtems_task_argument arg ); /** * The Buffer Descriptor cache. */ static rtems_bdbuf_cache bdbuf_cache = { - .lock = RTEMS_MUTEX_INITIALIZER(NULL), - .sync_lock = RTEMS_MUTEX_INITIALIZER(NULL), - .access_waiters = { .cond_var = RTEMS_CONDITION_VARIABLE_INITIALIZER(NULL) }, - .transfer_waiters = { - .cond_var = RTEMS_CONDITION_VARIABLE_INITIALIZER(NULL) - }, - .buffer_waiters = { .cond_var = RTEMS_CONDITION_VARIABLE_INITIALIZER(NULL) }, + .lock = RTEMS_MUTEX_INITIALIZER( NULL ), + .sync_lock = RTEMS_MUTEX_INITIALIZER( NULL ), + .access_waiters = + { .cond_var = RTEMS_CONDITION_VARIABLE_INITIALIZER( NULL ) }, + .transfer_waiters = + { .cond_var = RTEMS_CONDITION_VARIABLE_INITIALIZER( NULL ) }, + .buffer_waiters = + { .cond_var = RTEMS_CONDITION_VARIABLE_INITIALIZER( NULL ) }, .once = PTHREAD_ONCE_INIT }; @@ -206,15 +205,13 @@ bool rtems_bdbuf_tracer; * @param list The chain control. * @return uint32_t The number of items on the list. */ -uint32_t -rtems_bdbuf_list_count (rtems_chain_control* list) +uint32_t rtems_bdbuf_list_count( rtems_chain_control *list ) { - rtems_chain_node* node = rtems_chain_first (list); + rtems_chain_node *node = rtems_chain_first( list ); uint32_t count = 0; - while (!rtems_chain_is_tail (list, node)) - { + while ( !rtems_chain_is_tail( list, node ) ) { count++; - node = rtems_chain_next (node); + node = rtems_chain_next( node ); } return count; } @@ -222,26 +219,26 @@ rtems_bdbuf_list_count (rtems_chain_control* list) /** * Show the usage for the bdbuf cache. */ -void -rtems_bdbuf_show_usage (void) +void rtems_bdbuf_show_usage( void ) { uint32_t group; uint32_t total = 0; uint32_t val; - for (group = 0; group < bdbuf_cache.group_count; group++) - total += bdbuf_cache.groups[group].users; - printf ("bdbuf:group users=%lu", total); - val = rtems_bdbuf_list_count (&bdbuf_cache.lru); - printf (", lru=%lu", val); + for ( group = 0; group < bdbuf_cache.group_count; group++ ) { + total += bdbuf_cache.groups[ group ].users; + } + printf( "bdbuf:group users=%lu", total ); + val = rtems_bdbuf_list_count( &bdbuf_cache.lru ); + printf( ", lru=%lu", val ); total = val; - val = rtems_bdbuf_list_count (&bdbuf_cache.modified); - printf (", mod=%lu", val); + val = rtems_bdbuf_list_count( &bdbuf_cache.modified ); + printf( ", mod=%lu", val ); total += val; - val = rtems_bdbuf_list_count (&bdbuf_cache.sync); - printf (", sync=%lu", val); + val = rtems_bdbuf_list_count( &bdbuf_cache.sync ); + printf( ", sync=%lu", val ); total += val; - printf (", total=%lu\n", total); + printf( ", total=%lu\n", total ); } /** @@ -250,24 +247,26 @@ rtems_bdbuf_show_usage (void) * @param where A label to show the context of output. * @param bd The bd to show the users of. */ -void -rtems_bdbuf_show_users (const char* where, rtems_bdbuf_buffer* bd) +void rtems_bdbuf_show_users( const char *where, rtems_bdbuf_buffer *bd ) { - const char* states[] = + const char *states[] = { "FR", "EM", "CH", "AC", "AM", "AE", "AP", "MD", "SY", "TR", "TP" }; - printf ("bdbuf:users: %15s: [%" PRIu32 " (%s)] %td:%td = %" PRIu32 " %s\n", - where, - bd->block, states[bd->state], - bd->group - bdbuf_cache.groups, - bd - bdbuf_cache.bds, - bd->group->users, - bd->group->users > 8 ? "<<<<<<<" : ""); + printf( + "bdbuf:users: %15s: [%" PRIu32 " (%s)] %td:%td = %" PRIu32 " %s\n", + where, + bd->block, + states[ bd->state ], + bd->group - bdbuf_cache.groups, + bd - bdbuf_cache.bds, + bd->group->users, + bd->group->users > 8 ? "<<<<<<<" : "" + ); } #else -#define rtems_bdbuf_tracer (0) -#define rtems_bdbuf_show_usage() ((void) 0) -#define rtems_bdbuf_show_users(_w, _b) ((void) 0) +#define rtems_bdbuf_tracer ( 0 ) +#define rtems_bdbuf_show_usage() ( (void) 0 ) +#define rtems_bdbuf_show_users( _w, _b ) ( (void) 0 ) #endif /** @@ -276,20 +275,20 @@ rtems_bdbuf_show_users (const char* where, rtems_bdbuf_buffer* bd) * change this compile-time constant as you wish. */ #ifndef RTEMS_BDBUF_AVL_MAX_HEIGHT -#define RTEMS_BDBUF_AVL_MAX_HEIGHT (32) +#define RTEMS_BDBUF_AVL_MAX_HEIGHT ( 32 ) #endif -static void -rtems_bdbuf_fatal (rtems_fatal_code error) +static void rtems_bdbuf_fatal( rtems_fatal_code error ) { - rtems_fatal (RTEMS_FATAL_SOURCE_BDBUF, error); + rtems_fatal( RTEMS_FATAL_SOURCE_BDBUF, error ); } -static void -rtems_bdbuf_fatal_with_state (rtems_bdbuf_buf_state state, - rtems_bdbuf_fatal_code error) +static void rtems_bdbuf_fatal_with_state( + rtems_bdbuf_buf_state state, + rtems_bdbuf_fatal_code error +) { - rtems_bdbuf_fatal ((((uint32_t) state) << 16) | error); + rtems_bdbuf_fatal( ( ( (uint32_t) state ) << 16 ) | error ); } /** @@ -301,22 +300,21 @@ rtems_bdbuf_fatal_with_state (rtems_bdbuf_buf_state state, * @retval NULL node with the specified dd/block is not found * @return pointer to the node with specified dd/block */ -static rtems_bdbuf_buffer * -rtems_bdbuf_avl_search (rtems_bdbuf_buffer** root, - const rtems_disk_device *dd, - rtems_blkdev_bnum block) +static rtems_bdbuf_buffer *rtems_bdbuf_avl_search( + rtems_bdbuf_buffer **root, + const rtems_disk_device *dd, + rtems_blkdev_bnum block +) { - rtems_bdbuf_buffer* p = *root; + rtems_bdbuf_buffer *p = *root; - while ((p != NULL) && ((p->dd != dd) || (p->block != block))) - { - if (((uintptr_t) p->dd < (uintptr_t) dd) - || ((p->dd == dd) && (p->block < block))) - { + while ( ( p != NULL ) && ( ( p->dd != dd ) || ( p->block != block ) ) ) { + if ( + ( (uintptr_t) p->dd < (uintptr_t) dd ) || + ( ( p->dd == dd ) && ( p->block < block ) ) + ) { p = p->avl.right; - } - else - { + } else { p = p->avl.left; } } @@ -332,24 +330,24 @@ rtems_bdbuf_avl_search (rtems_bdbuf_buffer** root, * @retval 0 The node added successfully * @retval -1 An error occurred */ -static int -rtems_bdbuf_avl_insert(rtems_bdbuf_buffer** root, - rtems_bdbuf_buffer* node) +static int rtems_bdbuf_avl_insert( + rtems_bdbuf_buffer **root, + rtems_bdbuf_buffer *node +) { const rtems_disk_device *dd = node->dd; - rtems_blkdev_bnum block = node->block; + rtems_blkdev_bnum block = node->block; - rtems_bdbuf_buffer* p = *root; - rtems_bdbuf_buffer* q = NULL; - rtems_bdbuf_buffer* p1; - rtems_bdbuf_buffer* p2; - rtems_bdbuf_buffer* buf_stack[RTEMS_BDBUF_AVL_MAX_HEIGHT]; - rtems_bdbuf_buffer** buf_prev = buf_stack; + rtems_bdbuf_buffer *p = *root; + rtems_bdbuf_buffer *q = NULL; + rtems_bdbuf_buffer *p1; + rtems_bdbuf_buffer *p2; + rtems_bdbuf_buffer *buf_stack[ RTEMS_BDBUF_AVL_MAX_HEIGHT ]; + rtems_bdbuf_buffer **buf_prev = buf_stack; bool modified = false; - if (p == NULL) - { + if ( p == NULL ) { *root = node; node->avl.left = NULL; node->avl.right = NULL; @@ -357,35 +355,29 @@ rtems_bdbuf_avl_insert(rtems_bdbuf_buffer** root, return 0; } - while (p != NULL) - { + while ( p != NULL ) { *buf_prev++ = p; - if (((uintptr_t) p->dd < (uintptr_t) dd) - || ((p->dd == dd) && (p->block < block))) - { + if ( + ( (uintptr_t) p->dd < (uintptr_t) dd ) || + ( ( p->dd == dd ) && ( p->block < block ) ) + ) { p->avl.cache = 1; q = p->avl.right; - if (q == NULL) - { + if ( q == NULL ) { q = node; p->avl.right = q = node; break; } - } - else if ((p->dd != dd) || (p->block != block)) - { + } else if ( ( p->dd != dd ) || ( p->block != block ) ) { p->avl.cache = -1; q = p->avl.left; - if (q == NULL) - { + if ( q == NULL ) { q = node; p->avl.left = q; break; } - } - else - { + } else { return -1; } @@ -397,12 +389,9 @@ rtems_bdbuf_avl_insert(rtems_bdbuf_buffer** root, modified = true; buf_prev--; - while (modified) - { - if (p->avl.cache == -1) - { - switch (p->avl.bal) - { + while ( modified ) { + if ( p->avl.cache == -1 ) { + switch ( p->avl.bal ) { case 1: p->avl.bal = 0; modified = false; @@ -414,22 +403,29 @@ rtems_bdbuf_avl_insert(rtems_bdbuf_buffer** root, case -1: p1 = p->avl.left; - if (p1->avl.bal == -1) /* simple LL-turn */ + if ( p1->avl.bal == -1 ) /* simple LL-turn */ { p->avl.left = p1->avl.right; p1->avl.right = p; p->avl.bal = 0; p = p1; - } - else /* double LR-turn */ + } else /* double LR-turn */ { p2 = p1->avl.right; p1->avl.right = p2->avl.left; p2->avl.left = p1; p->avl.left = p2->avl.right; p2->avl.right = p; - if (p2->avl.bal == -1) p->avl.bal = +1; else p->avl.bal = 0; - if (p2->avl.bal == +1) p1->avl.bal = -1; else p1->avl.bal = 0; + if ( p2->avl.bal == -1 ) { + p->avl.bal = +1; + } else { + p->avl.bal = 0; + } + if ( p2->avl.bal == +1 ) { + p1->avl.bal = -1; + } else { + p1->avl.bal = 0; + } p = p2; } p->avl.bal = 0; @@ -439,11 +435,8 @@ rtems_bdbuf_avl_insert(rtems_bdbuf_buffer** root, default: break; } - } - else - { - switch (p->avl.bal) - { + } else { + switch ( p->avl.bal ) { case -1: p->avl.bal = 0; modified = false; @@ -455,22 +448,29 @@ rtems_bdbuf_avl_insert(rtems_bdbuf_buffer** root, case 1: p1 = p->avl.right; - if (p1->avl.bal == 1) /* simple RR-turn */ + if ( p1->avl.bal == 1 ) /* simple RR-turn */ { p->avl.right = p1->avl.left; p1->avl.left = p; p->avl.bal = 0; p = p1; - } - else /* double RL-turn */ + } else /* double RL-turn */ { p2 = p1->avl.left; p1->avl.left = p2->avl.right; p2->avl.right = p1; p->avl.right = p2->avl.left; p2->avl.left = p; - if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0; - if (p2->avl.bal == -1) p1->avl.bal = +1; else p1->avl.bal = 0; + if ( p2->avl.bal == +1 ) { + p->avl.bal = -1; + } else { + p->avl.bal = 0; + } + if ( p2->avl.bal == -1 ) { + p1->avl.bal = +1; + } else { + p1->avl.bal = 0; + } p = p2; } p->avl.bal = 0; @@ -482,21 +482,15 @@ rtems_bdbuf_avl_insert(rtems_bdbuf_buffer** root, } } q = p; - if (buf_prev > buf_stack) - { + if ( buf_prev > buf_stack ) { p = *--buf_prev; - if (p->avl.cache == -1) - { + if ( p->avl.cache == -1 ) { p->avl.left = q; - } - else - { + } else { p->avl.right = q; } - } - else - { + } else { *root = p; break; } @@ -505,7 +499,6 @@ rtems_bdbuf_avl_insert(rtems_bdbuf_buffer** root, return 0; } - /** * Removes the node from the tree. * @@ -514,50 +507,46 @@ rtems_bdbuf_avl_insert(rtems_bdbuf_buffer** root, * @retval 0 Item removed * @retval -1 No such item found */ -static int -rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root, - const rtems_bdbuf_buffer* node) +static int rtems_bdbuf_avl_remove( + rtems_bdbuf_buffer **root, + const rtems_bdbuf_buffer *node +) { const rtems_disk_device *dd = node->dd; - rtems_blkdev_bnum block = node->block; + rtems_blkdev_bnum block = node->block; - rtems_bdbuf_buffer* p = *root; - rtems_bdbuf_buffer* q; - rtems_bdbuf_buffer* r; - rtems_bdbuf_buffer* s; - rtems_bdbuf_buffer* p1; - rtems_bdbuf_buffer* p2; - rtems_bdbuf_buffer* buf_stack[RTEMS_BDBUF_AVL_MAX_HEIGHT]; - rtems_bdbuf_buffer** buf_prev = buf_stack; + rtems_bdbuf_buffer *p = *root; + rtems_bdbuf_buffer *q; + rtems_bdbuf_buffer *r; + rtems_bdbuf_buffer *s; + rtems_bdbuf_buffer *p1; + rtems_bdbuf_buffer *p2; + rtems_bdbuf_buffer *buf_stack[ RTEMS_BDBUF_AVL_MAX_HEIGHT ]; + rtems_bdbuf_buffer **buf_prev = buf_stack; bool modified = false; - memset (buf_stack, 0, sizeof(buf_stack)); + memset( buf_stack, 0, sizeof( buf_stack ) ); - while (p != NULL) - { + while ( p != NULL ) { *buf_prev++ = p; - if (((uintptr_t) p->dd < (uintptr_t) dd) - || ((p->dd == dd) && (p->block < block))) - { + if ( + ( (uintptr_t) p->dd < (uintptr_t) dd ) || + ( ( p->dd == dd ) && ( p->block < block ) ) + ) { p->avl.cache = 1; p = p->avl.right; - } - else if ((p->dd != dd) || (p->block != block)) - { + } else if ( ( p->dd != dd ) || ( p->block != block ) ) { p->avl.cache = -1; p = p->avl.left; - } - else - { + } else { /* node found */ break; } } - if (p == NULL) - { + if ( p == NULL ) { /* there is no such node */ return -1; } @@ -565,45 +554,34 @@ rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root, q = p; buf_prev--; - if (buf_prev > buf_stack) - { - p = *(buf_prev - 1); - } - else - { + if ( buf_prev > buf_stack ) { + p = *( buf_prev - 1 ); + } else { p = NULL; } /* at this moment q - is a node to delete, p is q's parent */ - if (q->avl.right == NULL) - { + if ( q->avl.right == NULL ) { r = q->avl.left; - if (r != NULL) - { + if ( r != NULL ) { r->avl.bal = 0; } q = r; - } - else - { + } else { rtems_bdbuf_buffer **t; r = q->avl.right; - if (r->avl.left == NULL) - { + if ( r->avl.left == NULL ) { r->avl.left = q->avl.left; r->avl.bal = q->avl.bal; r->avl.cache = 1; *buf_prev++ = q = r; - } - else - { + } else { t = buf_prev++; s = r; - while (s->avl.left != NULL) - { + while ( s->avl.left != NULL ) { *buf_prev++ = r = s; s = r->avl.left; r->avl.cache = -1; @@ -619,44 +597,32 @@ rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root, } } - if (p != NULL) - { - if (p->avl.cache == -1) - { + if ( p != NULL ) { + if ( p->avl.cache == -1 ) { p->avl.left = q; - } - else - { + } else { p->avl.right = q; } - } - else - { + } else { *root = q; } modified = true; - while (modified) - { - if (buf_prev > buf_stack) - { + while ( modified ) { + if ( buf_prev > buf_stack ) { p = *--buf_prev; - } - else - { + } else { break; } - if (p->avl.cache == -1) - { + if ( p->avl.cache == -1 ) { /* rebalance left branch */ - switch (p->avl.bal) - { + switch ( p->avl.bal ) { case -1: p->avl.bal = 0; break; - case 0: + case 0: p->avl.bal = 1; modified = false; break; @@ -664,24 +630,20 @@ rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root, case +1: p1 = p->avl.right; - if (p1->avl.bal >= 0) /* simple RR-turn */ + if ( p1->avl.bal >= 0 ) /* simple RR-turn */ { p->avl.right = p1->avl.left; p1->avl.left = p; - if (p1->avl.bal == 0) - { + if ( p1->avl.bal == 0 ) { p1->avl.bal = -1; modified = false; - } - else - { + } else { p->avl.bal = 0; p1->avl.bal = 0; } p = p1; - } - else /* double RL-turn */ + } else /* double RL-turn */ { p2 = p1->avl.left; @@ -690,8 +652,16 @@ rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root, p->avl.right = p2->avl.left; p2->avl.left = p; - if (p2->avl.bal == +1) p->avl.bal = -1; else p->avl.bal = 0; - if (p2->avl.bal == -1) p1->avl.bal = 1; else p1->avl.bal = 0; + if ( p2->avl.bal == +1 ) { + p->avl.bal = -1; + } else { + p->avl.bal = 0; + } + if ( p2->avl.bal == -1 ) { + p1->avl.bal = 1; + } else { + p1->avl.bal = 0; + } p = p2; p2->avl.bal = 0; @@ -701,17 +671,14 @@ rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root, default: break; } - } - else - { + } else { /* rebalance right branch */ - switch (p->avl.bal) - { + switch ( p->avl.bal ) { case +1: p->avl.bal = 0; break; - case 0: + case 0: p->avl.bal = -1; modified = false; break; @@ -719,23 +686,19 @@ rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root, case -1: p1 = p->avl.left; - if (p1->avl.bal <= 0) /* simple LL-turn */ + if ( p1->avl.bal <= 0 ) /* simple LL-turn */ { p->avl.left = p1->avl.right; p1->avl.right = p; - if (p1->avl.bal == 0) - { + if ( p1->avl.bal == 0 ) { p1->avl.bal = 1; modified = false; - } - else - { + } else { p->avl.bal = 0; p1->avl.bal = 0; } p = p1; - } - else /* double LR-turn */ + } else /* double LR-turn */ { p2 = p1->avl.right; @@ -744,8 +707,16 @@ rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root, p->avl.left = p2->avl.right; p2->avl.right = p; - if (p2->avl.bal == -1) p->avl.bal = 1; else p->avl.bal = 0; - if (p2->avl.bal == +1) p1->avl.bal = -1; else p1->avl.bal = 0; + if ( p2->avl.bal == -1 ) { + p->avl.bal = 1; + } else { + p->avl.bal = 0; + } + if ( p2->avl.bal == +1 ) { + p1->avl.bal = -1; + } else { + p1->avl.bal = 0; + } p = p2; p2->avl.bal = 0; @@ -757,48 +728,46 @@ rtems_bdbuf_avl_remove(rtems_bdbuf_buffer** root, } } - if (buf_prev > buf_stack) - { - q = *(buf_prev - 1); + if ( buf_prev > buf_stack ) { + q = *( buf_prev - 1 ); - if (q->avl.cache == -1) - { + if ( q->avl.cache == -1 ) { q->avl.left = p; - } - else - { + } else { q->avl.right = p; } - } - else - { + } else { *root = p; break; } - } return 0; } -static void -rtems_bdbuf_set_state (rtems_bdbuf_buffer *bd, rtems_bdbuf_buf_state state) +static void rtems_bdbuf_set_state( + rtems_bdbuf_buffer *bd, + rtems_bdbuf_buf_state state +) { bd->state = state; } -static rtems_blkdev_bnum -rtems_bdbuf_media_block (const rtems_disk_device *dd, rtems_blkdev_bnum block) +static rtems_blkdev_bnum rtems_bdbuf_media_block( + const rtems_disk_device *dd, + rtems_blkdev_bnum block +) { - if (dd->block_to_media_block_shift >= 0) + if ( dd->block_to_media_block_shift >= 0 ) { return block << dd->block_to_media_block_shift; - else + } else { /* * Change the block number for the block size to the block number for the media * block size. We have to use 64bit maths. There is no short cut here. */ - return (rtems_blkdev_bnum) - ((((uint64_t) block) * dd->block_size) / dd->media_block_size); + return (rtems_blkdev_bnum) ( ( ( (uint64_t) block ) * dd->block_size ) / + dd->media_block_size ); + } } /** @@ -806,10 +775,9 @@ rtems_bdbuf_media_block (const rtems_disk_device *dd, rtems_blkdev_bnum block) * * @param lock The mutex to lock. */ -static void -rtems_bdbuf_lock (rtems_mutex *lock) +static void rtems_bdbuf_lock( rtems_mutex *lock ) { - rtems_mutex_lock (lock); + rtems_mutex_lock( lock ); } /** @@ -817,56 +785,49 @@ rtems_bdbuf_lock (rtems_mutex *lock) * * @param lock The mutex to unlock. */ -static void -rtems_bdbuf_unlock (rtems_mutex *lock) +static void rtems_bdbuf_unlock( rtems_mutex *lock ) { - rtems_mutex_unlock (lock); + rtems_mutex_unlock( lock ); } /** * Lock the cache. A single task can nest calls. */ -static void -rtems_bdbuf_lock_cache (void) +static void rtems_bdbuf_lock_cache( void ) { - rtems_bdbuf_lock (&bdbuf_cache.lock); + rtems_bdbuf_lock( &bdbuf_cache.lock ); } /** * Unlock the cache. */ -static void -rtems_bdbuf_unlock_cache (void) +static void rtems_bdbuf_unlock_cache( void ) { - rtems_bdbuf_unlock (&bdbuf_cache.lock); + rtems_bdbuf_unlock( &bdbuf_cache.lock ); } /** * Lock the cache's sync. A single task can nest calls. */ -static void -rtems_bdbuf_lock_sync (void) +static void rtems_bdbuf_lock_sync( void ) { - rtems_bdbuf_lock (&bdbuf_cache.sync_lock); + rtems_bdbuf_lock( &bdbuf_cache.sync_lock ); } /** * Unlock the cache's sync lock. Any blocked writers are woken. */ -static void -rtems_bdbuf_unlock_sync (void) +static void rtems_bdbuf_unlock_sync( void ) { - rtems_bdbuf_unlock (&bdbuf_cache.sync_lock); + rtems_bdbuf_unlock( &bdbuf_cache.sync_lock ); } -static void -rtems_bdbuf_group_obtain (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_group_obtain( rtems_bdbuf_buffer *bd ) { ++bd->group->users; } -static void -rtems_bdbuf_group_release (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_group_release( rtems_bdbuf_buffer *bd ) { --bd->group->users; } @@ -886,127 +847,122 @@ rtems_bdbuf_group_release (rtems_bdbuf_buffer *bd) * The function assumes the cache is locked on entry and it will be locked on * exit. */ -static void -rtems_bdbuf_anonymous_wait (rtems_bdbuf_waiters *waiters) +static void rtems_bdbuf_anonymous_wait( rtems_bdbuf_waiters *waiters ) { /* * Indicate we are waiting. */ ++waiters->count; - rtems_condition_variable_wait (&waiters->cond_var, &bdbuf_cache.lock); + rtems_condition_variable_wait( &waiters->cond_var, &bdbuf_cache.lock ); --waiters->count; } -static void -rtems_bdbuf_wait (rtems_bdbuf_buffer *bd, rtems_bdbuf_waiters *waiters) +static void rtems_bdbuf_wait( + rtems_bdbuf_buffer *bd, + rtems_bdbuf_waiters *waiters +) { - rtems_bdbuf_group_obtain (bd); + rtems_bdbuf_group_obtain( bd ); ++bd->waiters; - rtems_bdbuf_anonymous_wait (waiters); + rtems_bdbuf_anonymous_wait( waiters ); --bd->waiters; - rtems_bdbuf_group_release (bd); + rtems_bdbuf_group_release( bd ); } /** * Wake a blocked resource. The resource has a counter that lets us know if * there are any waiters. */ -static void -rtems_bdbuf_wake (rtems_bdbuf_waiters *waiters) +static void rtems_bdbuf_wake( rtems_bdbuf_waiters *waiters ) { - if (waiters->count > 0) - { - rtems_condition_variable_broadcast (&waiters->cond_var); + if ( waiters->count > 0 ) { + rtems_condition_variable_broadcast( &waiters->cond_var ); } } -static void -rtems_bdbuf_wake_swapper (void) +static void rtems_bdbuf_wake_swapper( void ) { - rtems_status_code sc = rtems_event_send (bdbuf_cache.swapout, - RTEMS_BDBUF_SWAPOUT_SYNC); - if (sc != RTEMS_SUCCESSFUL) - rtems_bdbuf_fatal (RTEMS_BDBUF_FATAL_SO_WAKE_1); + rtems_status_code sc = rtems_event_send( + bdbuf_cache.swapout, + RTEMS_BDBUF_SWAPOUT_SYNC + ); + if ( sc != RTEMS_SUCCESSFUL ) { + rtems_bdbuf_fatal( RTEMS_BDBUF_FATAL_SO_WAKE_1 ); + } } -static bool -rtems_bdbuf_has_buffer_waiters (void) +static bool rtems_bdbuf_has_buffer_waiters( void ) { return bdbuf_cache.buffer_waiters.count; } -static void -rtems_bdbuf_remove_from_tree (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_remove_from_tree( rtems_bdbuf_buffer *bd ) { - if (rtems_bdbuf_avl_remove (&bdbuf_cache.tree, bd) != 0) - rtems_bdbuf_fatal_with_state (bd->state, RTEMS_BDBUF_FATAL_TREE_RM); + if ( rtems_bdbuf_avl_remove( &bdbuf_cache.tree, bd ) != 0 ) { + rtems_bdbuf_fatal_with_state( bd->state, RTEMS_BDBUF_FATAL_TREE_RM ); + } } -static void -rtems_bdbuf_remove_from_tree_and_lru_list (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_remove_from_tree_and_lru_list( rtems_bdbuf_buffer *bd ) { - switch (bd->state) - { + switch ( bd->state ) { case RTEMS_BDBUF_STATE_FREE: break; case RTEMS_BDBUF_STATE_CACHED: - rtems_bdbuf_remove_from_tree (bd); + rtems_bdbuf_remove_from_tree( bd ); break; default: - rtems_bdbuf_fatal_with_state (bd->state, RTEMS_BDBUF_FATAL_STATE_10); + rtems_bdbuf_fatal_with_state( bd->state, RTEMS_BDBUF_FATAL_STATE_10 ); } - rtems_chain_extract_unprotected (&bd->link); + rtems_chain_extract_unprotected( &bd->link ); } -static void -rtems_bdbuf_make_free_and_add_to_lru_list (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_make_free_and_add_to_lru_list( rtems_bdbuf_buffer *bd ) { - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_FREE); - rtems_chain_prepend_unprotected (&bdbuf_cache.lru, &bd->link); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_FREE ); + rtems_chain_prepend_unprotected( &bdbuf_cache.lru, &bd->link ); } -static void -rtems_bdbuf_make_empty (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_make_empty( rtems_bdbuf_buffer *bd ) { - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_EMPTY); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_EMPTY ); } -static void -rtems_bdbuf_make_cached_and_add_to_lru_list (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_make_cached_and_add_to_lru_list( + rtems_bdbuf_buffer *bd +) { - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_CACHED); - rtems_chain_append_unprotected (&bdbuf_cache.lru, &bd->link); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_CACHED ); + rtems_chain_append_unprotected( &bdbuf_cache.lru, &bd->link ); } -static void -rtems_bdbuf_discard_buffer (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_discard_buffer( rtems_bdbuf_buffer *bd ) { - rtems_bdbuf_make_empty (bd); + rtems_bdbuf_make_empty( bd ); - if (bd->waiters == 0) - { - rtems_bdbuf_remove_from_tree (bd); - rtems_bdbuf_make_free_and_add_to_lru_list (bd); + if ( bd->waiters == 0 ) { + rtems_bdbuf_remove_from_tree( bd ); + rtems_bdbuf_make_free_and_add_to_lru_list( bd ); } } -static void -rtems_bdbuf_add_to_modified_list_after_access (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_add_to_modified_list_after_access( + rtems_bdbuf_buffer *bd +) { - if (bdbuf_cache.sync_active && bdbuf_cache.sync_device == bd->dd) - { - rtems_bdbuf_unlock_cache (); + if ( bdbuf_cache.sync_active && bdbuf_cache.sync_device == bd->dd ) { + rtems_bdbuf_unlock_cache(); /* * Wait for the sync lock. */ - rtems_bdbuf_lock_sync (); + rtems_bdbuf_lock_sync(); - rtems_bdbuf_unlock_sync (); - rtems_bdbuf_lock_cache (); + rtems_bdbuf_unlock_sync(); + rtems_bdbuf_lock_cache(); } /* @@ -1020,29 +976,33 @@ rtems_bdbuf_add_to_modified_list_after_access (rtems_bdbuf_buffer *bd) * only a specific period of time even if still changing and get onto disk * and letting the file system try and recover this position if it can. */ - if (bd->state == RTEMS_BDBUF_STATE_ACCESS_CACHED - || bd->state == RTEMS_BDBUF_STATE_ACCESS_EMPTY) + if ( + bd->state == RTEMS_BDBUF_STATE_ACCESS_CACHED || + bd->state == RTEMS_BDBUF_STATE_ACCESS_EMPTY + ) { bd->hold_timer = bdbuf_config.swap_block_hold; + } - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_MODIFIED); - rtems_chain_append_unprotected (&bdbuf_cache.modified, &bd->link); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_MODIFIED ); + rtems_chain_append_unprotected( &bdbuf_cache.modified, &bd->link ); - if (bd->waiters) - rtems_bdbuf_wake (&bdbuf_cache.access_waiters); - else if (rtems_bdbuf_has_buffer_waiters ()) - rtems_bdbuf_wake_swapper (); + if ( bd->waiters ) { + rtems_bdbuf_wake( &bdbuf_cache.access_waiters ); + } else if ( rtems_bdbuf_has_buffer_waiters() ) { + rtems_bdbuf_wake_swapper(); + } } -static void -rtems_bdbuf_add_to_lru_list_after_access (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_add_to_lru_list_after_access( rtems_bdbuf_buffer *bd ) { - rtems_bdbuf_group_release (bd); - rtems_bdbuf_make_cached_and_add_to_lru_list (bd); + rtems_bdbuf_group_release( bd ); + rtems_bdbuf_make_cached_and_add_to_lru_list( bd ); - if (bd->waiters) - rtems_bdbuf_wake (&bdbuf_cache.access_waiters); - else - rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters); + if ( bd->waiters ) { + rtems_bdbuf_wake( &bdbuf_cache.access_waiters ); + } else { + rtems_bdbuf_wake( &bdbuf_cache.buffer_waiters ); + } } /** @@ -1050,35 +1010,32 @@ rtems_bdbuf_add_to_lru_list_after_access (rtems_bdbuf_buffer *bd) * * @param size The buffer size. It can be any size and we scale up. */ -static size_t -rtems_bdbuf_bds_per_group (size_t size) +static size_t rtems_bdbuf_bds_per_group( size_t size ) { size_t bufs_per_size; size_t bds_per_size; - if (size > bdbuf_config.buffer_max) + if ( size > bdbuf_config.buffer_max ) { return 0; + } - bufs_per_size = ((size - 1) / bdbuf_config.buffer_min) + 1; + bufs_per_size = ( ( size - 1 ) / bdbuf_config.buffer_min ) + 1; - for (bds_per_size = 1; - bds_per_size < bufs_per_size; - bds_per_size <<= 1) - ; + for ( bds_per_size = 1; bds_per_size < bufs_per_size; bds_per_size <<= 1 ); return bdbuf_cache.max_bds_per_group / bds_per_size; } -static void -rtems_bdbuf_discard_buffer_after_access (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_discard_buffer_after_access( rtems_bdbuf_buffer *bd ) { - rtems_bdbuf_group_release (bd); - rtems_bdbuf_discard_buffer (bd); + rtems_bdbuf_group_release( bd ); + rtems_bdbuf_discard_buffer( bd ); - if (bd->waiters) - rtems_bdbuf_wake (&bdbuf_cache.access_waiters); - else - rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters); + if ( bd->waiters ) { + rtems_bdbuf_wake( &bdbuf_cache.access_waiters ); + } else { + rtems_bdbuf_wake( &bdbuf_cache.buffer_waiters ); + } } /** @@ -1090,127 +1047,142 @@ rtems_bdbuf_discard_buffer_after_access (rtems_bdbuf_buffer *bd) * @param new_bds_per_group The new count of BDs per group. * @return A buffer of this group. */ -static rtems_bdbuf_buffer * -rtems_bdbuf_group_realloc (rtems_bdbuf_group* group, size_t new_bds_per_group) +static rtems_bdbuf_buffer *rtems_bdbuf_group_realloc( + rtems_bdbuf_group *group, + size_t new_bds_per_group +) { - rtems_bdbuf_buffer* bd; + rtems_bdbuf_buffer *bd; size_t b; size_t bufs_per_bd; - if (rtems_bdbuf_tracer) - printf ("bdbuf:realloc: %tu: %zd -> %zd\n", - group - bdbuf_cache.groups, group->bds_per_group, - new_bds_per_group); + if ( rtems_bdbuf_tracer ) { + printf( + "bdbuf:realloc: %tu: %zd -> %zd\n", + group - bdbuf_cache.groups, + group->bds_per_group, + new_bds_per_group + ); + } bufs_per_bd = bdbuf_cache.max_bds_per_group / group->bds_per_group; - for (b = 0, bd = group->bdbuf; - b < group->bds_per_group; - b++, bd += bufs_per_bd) - rtems_bdbuf_remove_from_tree_and_lru_list (bd); + for ( + b = 0, bd = group->bdbuf; b < group->bds_per_group; b++, bd += bufs_per_bd + ) { + rtems_bdbuf_remove_from_tree_and_lru_list( bd ); + } group->bds_per_group = new_bds_per_group; bufs_per_bd = bdbuf_cache.max_bds_per_group / new_bds_per_group; - for (b = 1, bd = group->bdbuf + bufs_per_bd; - b < group->bds_per_group; - b++, bd += bufs_per_bd) - rtems_bdbuf_make_free_and_add_to_lru_list (bd); + for ( + b = 1, bd = group->bdbuf + bufs_per_bd; b < group->bds_per_group; + b++, bd += bufs_per_bd + ) { + rtems_bdbuf_make_free_and_add_to_lru_list( bd ); + } - if (b > 1) - rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters); + if ( b > 1 ) { + rtems_bdbuf_wake( &bdbuf_cache.buffer_waiters ); + } return group->bdbuf; } -static void -rtems_bdbuf_setup_empty_buffer (rtems_bdbuf_buffer *bd, - rtems_disk_device *dd, - rtems_blkdev_bnum block) +static void rtems_bdbuf_setup_empty_buffer( + rtems_bdbuf_buffer *bd, + rtems_disk_device *dd, + rtems_blkdev_bnum block +) { - bd->dd = dd ; - bd->block = block; - bd->avl.left = NULL; + bd->dd = dd; + bd->block = block; + bd->avl.left = NULL; bd->avl.right = NULL; - bd->waiters = 0; + bd->waiters = 0; - if (rtems_bdbuf_avl_insert (&bdbuf_cache.tree, bd) != 0) - rtems_bdbuf_fatal (RTEMS_BDBUF_FATAL_RECYCLE); + if ( rtems_bdbuf_avl_insert( &bdbuf_cache.tree, bd ) != 0 ) { + rtems_bdbuf_fatal( RTEMS_BDBUF_FATAL_RECYCLE ); + } - rtems_bdbuf_make_empty (bd); + rtems_bdbuf_make_empty( bd ); } -static rtems_bdbuf_buffer * -rtems_bdbuf_get_buffer_from_lru_list (rtems_disk_device *dd, - rtems_blkdev_bnum block) +static rtems_bdbuf_buffer *rtems_bdbuf_get_buffer_from_lru_list( + rtems_disk_device *dd, + rtems_blkdev_bnum block +) { - rtems_chain_node *node = rtems_chain_first (&bdbuf_cache.lru); + rtems_chain_node *node = rtems_chain_first( &bdbuf_cache.lru ); - while (!rtems_chain_is_tail (&bdbuf_cache.lru, node)) - { + while ( !rtems_chain_is_tail( &bdbuf_cache.lru, node ) ) { rtems_bdbuf_buffer *bd = (rtems_bdbuf_buffer *) node; rtems_bdbuf_buffer *empty_bd = NULL; - if (rtems_bdbuf_tracer) - printf ("bdbuf:next-bd: %tu (%td:%" PRId32 ") %zd -> %zd\n", - bd - bdbuf_cache.bds, - bd->group - bdbuf_cache.groups, bd->group->users, - bd->group->bds_per_group, dd->bds_per_group); + if ( rtems_bdbuf_tracer ) { + printf( + "bdbuf:next-bd: %tu (%td:%" PRId32 ") %zd -> %zd\n", + bd - bdbuf_cache.bds, + bd->group - bdbuf_cache.groups, + bd->group->users, + bd->group->bds_per_group, + dd->bds_per_group + ); + } /* * If nobody waits for this BD, we may recycle it. */ - if (bd->waiters == 0) - { - if (bd->group->bds_per_group == dd->bds_per_group) - { - rtems_bdbuf_remove_from_tree_and_lru_list (bd); + if ( bd->waiters == 0 ) { + if ( bd->group->bds_per_group == dd->bds_per_group ) { + rtems_bdbuf_remove_from_tree_and_lru_list( bd ); empty_bd = bd; + } else if ( bd->group->users == 0 ) { + empty_bd = rtems_bdbuf_group_realloc( bd->group, dd->bds_per_group ); } - else if (bd->group->users == 0) - empty_bd = rtems_bdbuf_group_realloc (bd->group, dd->bds_per_group); } - if (empty_bd != NULL) - { - rtems_bdbuf_setup_empty_buffer (empty_bd, dd, block); + if ( empty_bd != NULL ) { + rtems_bdbuf_setup_empty_buffer( empty_bd, dd, block ); return empty_bd; } - node = rtems_chain_next (node); + node = rtems_chain_next( node ); } return NULL; } -static rtems_status_code -rtems_bdbuf_create_task( - rtems_name name, +static rtems_status_code rtems_bdbuf_create_task( + rtems_name name, rtems_task_priority priority, rtems_task_priority default_priority, - rtems_id *id + rtems_id *id ) { rtems_status_code sc; - size_t stack_size = bdbuf_config.task_stack_size ? - bdbuf_config.task_stack_size : RTEMS_BDBUF_TASK_STACK_SIZE_DEFAULT; + size_t stack_size = bdbuf_config.task_stack_size + ? bdbuf_config.task_stack_size + : RTEMS_BDBUF_TASK_STACK_SIZE_DEFAULT; priority = priority != 0 ? priority : default_priority; - sc = rtems_task_create (name, - priority, - stack_size, - RTEMS_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_NO_ASR, - RTEMS_LOCAL | RTEMS_NO_FLOATING_POINT, - id); + sc = rtems_task_create( + name, + priority, + stack_size, + RTEMS_PREEMPT | RTEMS_NO_TIMESLICE | RTEMS_NO_ASR, + RTEMS_LOCAL | RTEMS_NO_FLOATING_POINT, + id + ); return sc; } -static rtems_bdbuf_swapout_transfer* -rtems_bdbuf_swapout_transfer_alloc (void) +static rtems_bdbuf_swapout_transfer *rtems_bdbuf_swapout_transfer_alloc( void ) { /* * @note chrisj The rtems_blkdev_request and the array at the end is a hack. @@ -1218,19 +1190,23 @@ rtems_bdbuf_swapout_transfer_alloc (void) * have been a rtems_chain_control. Simple, fast and less storage as the node * is already part of the buffer structure. */ - size_t transfer_size = sizeof (rtems_bdbuf_swapout_transfer) - + (bdbuf_config.max_write_blocks * sizeof (rtems_blkdev_sg_buffer)); - return calloc (1, transfer_size); + size_t transfer_size = sizeof( rtems_bdbuf_swapout_transfer ) + + ( bdbuf_config.max_write_blocks * + sizeof( rtems_blkdev_sg_buffer ) ); + return calloc( 1, transfer_size ); } -static void -rtems_bdbuf_transfer_done (rtems_blkdev_request* req, rtems_status_code status); +static void rtems_bdbuf_transfer_done( + rtems_blkdev_request *req, + rtems_status_code status +); -static void -rtems_bdbuf_swapout_transfer_init (rtems_bdbuf_swapout_transfer* transfer, - rtems_id id) +static void rtems_bdbuf_swapout_transfer_init( + rtems_bdbuf_swapout_transfer *transfer, + rtems_id id +) { - rtems_chain_initialize_empty (&transfer->bds); + rtems_chain_initialize_empty( &transfer->bds ); transfer->dd = BDBUF_INVALID_DEV; transfer->syncing = false; transfer->write_req.req = RTEMS_BLKDEV_REQ_WRITE; @@ -1238,172 +1214,196 @@ rtems_bdbuf_swapout_transfer_init (rtems_bdbuf_swapout_transfer* transfer, transfer->write_req.io_task = id; } -static size_t -rtems_bdbuf_swapout_worker_size (void) +static size_t rtems_bdbuf_swapout_worker_size( void ) { - return sizeof (rtems_bdbuf_swapout_worker) - + (bdbuf_config.max_write_blocks * sizeof (rtems_blkdev_sg_buffer)); + return sizeof( rtems_bdbuf_swapout_worker ) + + ( bdbuf_config.max_write_blocks * sizeof( rtems_blkdev_sg_buffer ) ); } -static rtems_task -rtems_bdbuf_swapout_worker_task (rtems_task_argument arg); +static rtems_task rtems_bdbuf_swapout_worker_task( rtems_task_argument arg ); -static rtems_status_code -rtems_bdbuf_swapout_workers_create (void) +static rtems_status_code rtems_bdbuf_swapout_workers_create( void ) { - rtems_status_code sc; - size_t w; - size_t worker_size; - char *worker_current; + rtems_status_code sc; + size_t w; + size_t worker_size; + char *worker_current; - worker_size = rtems_bdbuf_swapout_worker_size (); - worker_current = calloc (1, bdbuf_config.swapout_workers * worker_size); + worker_size = rtems_bdbuf_swapout_worker_size(); + worker_current = calloc( 1, bdbuf_config.swapout_workers * worker_size ); sc = worker_current != NULL ? RTEMS_SUCCESSFUL : RTEMS_NO_MEMORY; bdbuf_cache.swapout_workers = (rtems_bdbuf_swapout_worker *) worker_current; - for (w = 0; - sc == RTEMS_SUCCESSFUL && w < bdbuf_config.swapout_workers; - w++, worker_current += worker_size) - { - rtems_bdbuf_swapout_worker *worker = (rtems_bdbuf_swapout_worker *) worker_current; + for ( + w = 0; sc == RTEMS_SUCCESSFUL && w < bdbuf_config.swapout_workers; + w++, worker_current += worker_size + ) { + rtems_bdbuf_swapout_worker *worker = (rtems_bdbuf_swapout_worker *) + worker_current; - sc = rtems_bdbuf_create_task (rtems_build_name('B', 'D', 'o', 'a' + w), - bdbuf_config.swapout_worker_priority, - RTEMS_BDBUF_SWAPOUT_WORKER_TASK_PRIORITY_DEFAULT, - &worker->id); - if (sc == RTEMS_SUCCESSFUL) - { - rtems_bdbuf_swapout_transfer_init (&worker->transfer, worker->id); + sc = rtems_bdbuf_create_task( + rtems_build_name( 'B', 'D', 'o', 'a' + w ), + bdbuf_config.swapout_worker_priority, + RTEMS_BDBUF_SWAPOUT_WORKER_TASK_PRIORITY_DEFAULT, + &worker->id + ); + if ( sc == RTEMS_SUCCESSFUL ) { + rtems_bdbuf_swapout_transfer_init( &worker->transfer, worker->id ); - rtems_chain_append_unprotected (&bdbuf_cache.swapout_free_workers, &worker->link); + rtems_chain_append_unprotected( + &bdbuf_cache.swapout_free_workers, + &worker->link + ); worker->enabled = true; - sc = rtems_task_start (worker->id, - rtems_bdbuf_swapout_worker_task, - (rtems_task_argument) worker); + sc = rtems_task_start( + worker->id, + rtems_bdbuf_swapout_worker_task, + (rtems_task_argument) worker + ); } } return sc; } -static size_t -rtems_bdbuf_read_request_size (uint32_t transfer_count) +static size_t rtems_bdbuf_read_request_size( uint32_t transfer_count ) { - return sizeof (rtems_blkdev_request) - + sizeof (rtems_blkdev_sg_buffer) * transfer_count; + return sizeof( rtems_blkdev_request ) + + sizeof( rtems_blkdev_sg_buffer ) * transfer_count; } -static rtems_status_code -rtems_bdbuf_do_init (void) +static rtems_status_code rtems_bdbuf_do_init( void ) { - rtems_bdbuf_group* group; - rtems_bdbuf_buffer* bd; - uint8_t* buffer; + rtems_bdbuf_group *group; + rtems_bdbuf_buffer *bd; + uint8_t *buffer; size_t b; rtems_status_code sc; - if (rtems_bdbuf_tracer) - printf ("bdbuf:init\n"); + if ( rtems_bdbuf_tracer ) { + printf( "bdbuf:init\n" ); + } - if (rtems_interrupt_is_in_progress()) + if ( rtems_interrupt_is_in_progress() ) { return RTEMS_CALLED_FROM_ISR; + } /* * Check the configuration table values. */ - if ((bdbuf_config.buffer_max % bdbuf_config.buffer_min) != 0) + if ( ( bdbuf_config.buffer_max % bdbuf_config.buffer_min ) != 0 ) { return RTEMS_INVALID_NUMBER; + } - if (rtems_bdbuf_read_request_size (bdbuf_config.max_read_ahead_blocks) - > RTEMS_MINIMUM_STACK_SIZE / 8U) + if ( + rtems_bdbuf_read_request_size( bdbuf_config.max_read_ahead_blocks ) > + RTEMS_MINIMUM_STACK_SIZE / 8U + ) { return RTEMS_INVALID_NUMBER; + } bdbuf_cache.sync_device = BDBUF_INVALID_DEV; - rtems_chain_initialize_empty (&bdbuf_cache.swapout_free_workers); - rtems_chain_initialize_empty (&bdbuf_cache.lru); - rtems_chain_initialize_empty (&bdbuf_cache.modified); - rtems_chain_initialize_empty (&bdbuf_cache.sync); - rtems_chain_initialize_empty (&bdbuf_cache.read_ahead_chain); + rtems_chain_initialize_empty( &bdbuf_cache.swapout_free_workers ); + rtems_chain_initialize_empty( &bdbuf_cache.lru ); + rtems_chain_initialize_empty( &bdbuf_cache.modified ); + rtems_chain_initialize_empty( &bdbuf_cache.sync ); + rtems_chain_initialize_empty( &bdbuf_cache.read_ahead_chain ); - rtems_mutex_set_name (&bdbuf_cache.lock, "bdbuf lock"); - rtems_mutex_set_name (&bdbuf_cache.sync_lock, "bdbuf sync lock"); - rtems_condition_variable_set_name (&bdbuf_cache.access_waiters.cond_var, - "bdbuf access"); - rtems_condition_variable_set_name (&bdbuf_cache.transfer_waiters.cond_var, - "bdbuf transfer"); - rtems_condition_variable_set_name (&bdbuf_cache.buffer_waiters.cond_var, - "bdbuf buffer"); + rtems_mutex_set_name( &bdbuf_cache.lock, "bdbuf lock" ); + rtems_mutex_set_name( &bdbuf_cache.sync_lock, "bdbuf sync lock" ); + rtems_condition_variable_set_name( + &bdbuf_cache.access_waiters.cond_var, + "bdbuf access" + ); + rtems_condition_variable_set_name( + &bdbuf_cache.transfer_waiters.cond_var, + "bdbuf transfer" + ); + rtems_condition_variable_set_name( + &bdbuf_cache.buffer_waiters.cond_var, + "bdbuf buffer" + ); - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); /* * Compute the various number of elements in the cache. */ - bdbuf_cache.buffer_min_count = - bdbuf_config.size / bdbuf_config.buffer_min; - bdbuf_cache.max_bds_per_group = - bdbuf_config.buffer_max / bdbuf_config.buffer_min; - bdbuf_cache.group_count = - bdbuf_cache.buffer_min_count / bdbuf_cache.max_bds_per_group; + bdbuf_cache.buffer_min_count = bdbuf_config.size / bdbuf_config.buffer_min; + bdbuf_cache.max_bds_per_group = bdbuf_config.buffer_max / + bdbuf_config.buffer_min; + bdbuf_cache.group_count = bdbuf_cache.buffer_min_count / + bdbuf_cache.max_bds_per_group; /* * Allocate the memory for the buffer descriptors. */ - bdbuf_cache.bds = calloc (bdbuf_cache.buffer_min_count, - sizeof (rtems_bdbuf_buffer)); - if (!bdbuf_cache.bds) + bdbuf_cache.bds = calloc( + bdbuf_cache.buffer_min_count, + sizeof( rtems_bdbuf_buffer ) + ); + if ( !bdbuf_cache.bds ) { goto error; + } /* * Allocate the memory for the buffer descriptors. */ - bdbuf_cache.groups = calloc (bdbuf_cache.group_count, - sizeof (rtems_bdbuf_group)); - if (!bdbuf_cache.groups) + bdbuf_cache.groups = calloc( + bdbuf_cache.group_count, + sizeof( rtems_bdbuf_group ) + ); + if ( !bdbuf_cache.groups ) { goto error; + } /* * Allocate memory for buffer memory. The buffer memory will be cache * aligned. It is possible to free the memory allocated by * rtems_cache_aligned_malloc() with free(). */ - bdbuf_cache.buffers = rtems_cache_aligned_malloc(bdbuf_cache.buffer_min_count - * bdbuf_config.buffer_min); - if (bdbuf_cache.buffers == NULL) + bdbuf_cache.buffers = rtems_cache_aligned_malloc( + bdbuf_cache.buffer_min_count * bdbuf_config.buffer_min + ); + if ( bdbuf_cache.buffers == NULL ) { goto error; + } /* * The cache is empty after opening so we need to add all the buffers to it * and initialise the groups. */ - for (b = 0, group = bdbuf_cache.groups, - bd = bdbuf_cache.bds, buffer = bdbuf_cache.buffers; - b < bdbuf_cache.buffer_min_count; - b++, bd++, buffer += bdbuf_config.buffer_min) - { - bd->dd = BDBUF_INVALID_DEV; - bd->group = group; + for ( + b = 0, + group = bdbuf_cache.groups, + bd = bdbuf_cache.bds, + buffer = bdbuf_cache.buffers; + b < bdbuf_cache.buffer_min_count; + b++, bd++, buffer += bdbuf_config.buffer_min + ) { + bd->dd = BDBUF_INVALID_DEV; + bd->group = group; bd->buffer = buffer; - rtems_chain_append_unprotected (&bdbuf_cache.lru, &bd->link); + rtems_chain_append_unprotected( &bdbuf_cache.lru, &bd->link ); - if ((b % bdbuf_cache.max_bds_per_group) == - (bdbuf_cache.max_bds_per_group - 1)) + if ( + ( b % bdbuf_cache.max_bds_per_group ) == + ( bdbuf_cache.max_bds_per_group - 1 ) + ) { group++; + } } - for (b = 0, - group = bdbuf_cache.groups, - bd = bdbuf_cache.bds; - b < bdbuf_cache.group_count; - b++, - group++, - bd += bdbuf_cache.max_bds_per_group) - { + for ( + b = 0, group = bdbuf_cache.groups, bd = bdbuf_cache.bds; + b < bdbuf_cache.group_count; + b++, group++, bd += bdbuf_cache.max_bds_per_group + ) { group->bds_per_group = bdbuf_cache.max_bds_per_group; group->bdbuf = bd; } @@ -1412,147 +1412,161 @@ rtems_bdbuf_do_init (void) * Create and start swapout task. */ - bdbuf_cache.swapout_transfer = rtems_bdbuf_swapout_transfer_alloc (); - if (!bdbuf_cache.swapout_transfer) + bdbuf_cache.swapout_transfer = rtems_bdbuf_swapout_transfer_alloc(); + if ( !bdbuf_cache.swapout_transfer ) { goto error; + } bdbuf_cache.swapout_enabled = true; - sc = rtems_bdbuf_create_task (rtems_build_name('B', 'S', 'W', 'P'), - bdbuf_config.swapout_priority, - RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT, - &bdbuf_cache.swapout); - if (sc != RTEMS_SUCCESSFUL) + sc = rtems_bdbuf_create_task( + rtems_build_name( 'B', 'S', 'W', 'P' ), + bdbuf_config.swapout_priority, + RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT, + &bdbuf_cache.swapout + ); + if ( sc != RTEMS_SUCCESSFUL ) { goto error; - - rtems_bdbuf_swapout_transfer_init (bdbuf_cache.swapout_transfer, bdbuf_cache.swapout); - - sc = rtems_task_start (bdbuf_cache.swapout, - rtems_bdbuf_swapout_task, - (rtems_task_argument) bdbuf_cache.swapout_transfer); - if (sc != RTEMS_SUCCESSFUL) - goto error; - - if (bdbuf_config.swapout_workers > 0) - { - sc = rtems_bdbuf_swapout_workers_create (); - if (sc != RTEMS_SUCCESSFUL) - goto error; } - if (bdbuf_config.max_read_ahead_blocks > 0) - { + rtems_bdbuf_swapout_transfer_init( + bdbuf_cache.swapout_transfer, + bdbuf_cache.swapout + ); + + sc = rtems_task_start( + bdbuf_cache.swapout, + rtems_bdbuf_swapout_task, + (rtems_task_argument) bdbuf_cache.swapout_transfer + ); + if ( sc != RTEMS_SUCCESSFUL ) { + goto error; + } + + if ( bdbuf_config.swapout_workers > 0 ) { + sc = rtems_bdbuf_swapout_workers_create(); + if ( sc != RTEMS_SUCCESSFUL ) { + goto error; + } + } + + if ( bdbuf_config.max_read_ahead_blocks > 0 ) { bdbuf_cache.read_ahead_enabled = true; - sc = rtems_bdbuf_create_task (rtems_build_name('B', 'R', 'D', 'A'), - bdbuf_config.read_ahead_priority, - RTEMS_BDBUF_READ_AHEAD_TASK_PRIORITY_DEFAULT, - &bdbuf_cache.read_ahead_task); - if (sc != RTEMS_SUCCESSFUL) + sc = rtems_bdbuf_create_task( + rtems_build_name( 'B', 'R', 'D', 'A' ), + bdbuf_config.read_ahead_priority, + RTEMS_BDBUF_READ_AHEAD_TASK_PRIORITY_DEFAULT, + &bdbuf_cache.read_ahead_task + ); + if ( sc != RTEMS_SUCCESSFUL ) { goto error; + } - sc = rtems_task_start (bdbuf_cache.read_ahead_task, - rtems_bdbuf_read_ahead_task, - 0); - if (sc != RTEMS_SUCCESSFUL) + sc = rtems_task_start( + bdbuf_cache.read_ahead_task, + rtems_bdbuf_read_ahead_task, + 0 + ); + if ( sc != RTEMS_SUCCESSFUL ) { goto error; + } } - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); return RTEMS_SUCCESSFUL; error: - if (bdbuf_cache.read_ahead_task != 0) - rtems_task_delete (bdbuf_cache.read_ahead_task); + if ( bdbuf_cache.read_ahead_task != 0 ) { + rtems_task_delete( bdbuf_cache.read_ahead_task ); + } - if (bdbuf_cache.swapout != 0) - rtems_task_delete (bdbuf_cache.swapout); + if ( bdbuf_cache.swapout != 0 ) { + rtems_task_delete( bdbuf_cache.swapout ); + } - if (bdbuf_cache.swapout_workers) - { - char *worker_current = (char *) bdbuf_cache.swapout_workers; - size_t worker_size = rtems_bdbuf_swapout_worker_size (); - size_t w; + if ( bdbuf_cache.swapout_workers ) { + char *worker_current = (char *) bdbuf_cache.swapout_workers; + size_t worker_size = rtems_bdbuf_swapout_worker_size(); + size_t w; - for (w = 0; - w < bdbuf_config.swapout_workers; - w++, worker_current += worker_size) - { - rtems_bdbuf_swapout_worker *worker = (rtems_bdbuf_swapout_worker *) worker_current; + for ( + w = 0; w < bdbuf_config.swapout_workers; + w++, worker_current += worker_size + ) { + rtems_bdbuf_swapout_worker *worker = (rtems_bdbuf_swapout_worker *) + worker_current; - if (worker->id != 0) { - rtems_task_delete (worker->id); + if ( worker->id != 0 ) { + rtems_task_delete( worker->id ); } } } - free (bdbuf_cache.buffers); - free (bdbuf_cache.groups); - free (bdbuf_cache.bds); - free (bdbuf_cache.swapout_transfer); - free (bdbuf_cache.swapout_workers); + free( bdbuf_cache.buffers ); + free( bdbuf_cache.groups ); + free( bdbuf_cache.bds ); + free( bdbuf_cache.swapout_transfer ); + free( bdbuf_cache.swapout_workers ); - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); return RTEMS_UNSATISFIED; } -static void -rtems_bdbuf_init_once (void) +static void rtems_bdbuf_init_once( void ) { bdbuf_cache.init_status = rtems_bdbuf_do_init(); } -rtems_status_code -rtems_bdbuf_init (void) +rtems_status_code rtems_bdbuf_init( void ) { int eno; - eno = pthread_once (&bdbuf_cache.once, rtems_bdbuf_init_once); - _Assert (eno == 0); + eno = pthread_once( &bdbuf_cache.once, rtems_bdbuf_init_once ); + _Assert( eno == 0 ); (void) eno; return bdbuf_cache.init_status; } -static void -rtems_bdbuf_wait_for_event (rtems_event_set event) +static void rtems_bdbuf_wait_for_event( rtems_event_set event ) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_event_set out = 0; - sc = rtems_event_receive (event, - RTEMS_EVENT_ALL | RTEMS_WAIT, - RTEMS_NO_TIMEOUT, - &out); + sc = rtems_event_receive( + event, + RTEMS_EVENT_ALL | RTEMS_WAIT, + RTEMS_NO_TIMEOUT, + &out + ); - if (sc != RTEMS_SUCCESSFUL || out != event) - rtems_bdbuf_fatal (RTEMS_BDBUF_FATAL_WAIT_EVNT); + if ( sc != RTEMS_SUCCESSFUL || out != event ) { + rtems_bdbuf_fatal( RTEMS_BDBUF_FATAL_WAIT_EVNT ); + } } -static void -rtems_bdbuf_wait_for_transient_event (void) +static void rtems_bdbuf_wait_for_transient_event( void ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - sc = rtems_event_transient_receive (RTEMS_WAIT, RTEMS_NO_TIMEOUT); - if (sc != RTEMS_SUCCESSFUL) - rtems_bdbuf_fatal (RTEMS_BDBUF_FATAL_WAIT_TRANS_EVNT); + sc = rtems_event_transient_receive( RTEMS_WAIT, RTEMS_NO_TIMEOUT ); + if ( sc != RTEMS_SUCCESSFUL ) { + rtems_bdbuf_fatal( RTEMS_BDBUF_FATAL_WAIT_TRANS_EVNT ); + } } -static void -rtems_bdbuf_wait_for_access (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_wait_for_access( rtems_bdbuf_buffer *bd ) { - while (true) - { - switch (bd->state) - { + while ( true ) { + switch ( bd->state ) { case RTEMS_BDBUF_STATE_MODIFIED: - rtems_bdbuf_group_release (bd); + rtems_bdbuf_group_release( bd ); /* Fall through */ case RTEMS_BDBUF_STATE_CACHED: - rtems_chain_extract_unprotected (&bd->link); + rtems_chain_extract_unprotected( &bd->link ); /* Fall through */ case RTEMS_BDBUF_STATE_EMPTY: return; @@ -1560,26 +1574,27 @@ rtems_bdbuf_wait_for_access (rtems_bdbuf_buffer *bd) case RTEMS_BDBUF_STATE_ACCESS_EMPTY: case RTEMS_BDBUF_STATE_ACCESS_MODIFIED: case RTEMS_BDBUF_STATE_ACCESS_PURGED: - rtems_bdbuf_wait (bd, &bdbuf_cache.access_waiters); + rtems_bdbuf_wait( bd, &bdbuf_cache.access_waiters ); break; case RTEMS_BDBUF_STATE_SYNC: case RTEMS_BDBUF_STATE_TRANSFER: case RTEMS_BDBUF_STATE_TRANSFER_PURGED: - rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters); + rtems_bdbuf_wait( bd, &bdbuf_cache.transfer_waiters ); break; default: - rtems_bdbuf_fatal_with_state (bd->state, RTEMS_BDBUF_FATAL_STATE_7); + rtems_bdbuf_fatal_with_state( bd->state, RTEMS_BDBUF_FATAL_STATE_7 ); } } } -static void -rtems_bdbuf_request_sync_for_modified_buffer (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_request_sync_for_modified_buffer( + rtems_bdbuf_buffer *bd +) { - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_SYNC); - rtems_chain_extract_unprotected (&bd->link); - rtems_chain_append_unprotected (&bdbuf_cache.sync, &bd->link); - rtems_bdbuf_wake_swapper (); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_SYNC ); + rtems_chain_extract_unprotected( &bd->link ); + rtems_chain_append_unprotected( &bdbuf_cache.sync, &bd->link ); + rtems_bdbuf_wake_swapper(); } /** @@ -1588,57 +1603,50 @@ rtems_bdbuf_request_sync_for_modified_buffer (rtems_bdbuf_buffer *bd) * @retval @c true Buffer is valid and may be recycled. * @retval @c false Buffer is invalid and has to searched again. */ -static bool -rtems_bdbuf_wait_for_recycle (rtems_bdbuf_buffer *bd) +static bool rtems_bdbuf_wait_for_recycle( rtems_bdbuf_buffer *bd ) { - while (true) - { - switch (bd->state) - { + while ( true ) { + switch ( bd->state ) { case RTEMS_BDBUF_STATE_FREE: return true; case RTEMS_BDBUF_STATE_MODIFIED: - rtems_bdbuf_request_sync_for_modified_buffer (bd); + rtems_bdbuf_request_sync_for_modified_buffer( bd ); break; case RTEMS_BDBUF_STATE_CACHED: case RTEMS_BDBUF_STATE_EMPTY: - if (bd->waiters == 0) + if ( bd->waiters == 0 ) { return true; - else - { + } else { /* * It is essential that we wait here without a special wait count and * without the group in use. Otherwise we could trigger a wait ping * pong with another recycle waiter. The state of the buffer is * arbitrary afterwards. */ - rtems_bdbuf_anonymous_wait (&bdbuf_cache.buffer_waiters); + rtems_bdbuf_anonymous_wait( &bdbuf_cache.buffer_waiters ); return false; } case RTEMS_BDBUF_STATE_ACCESS_CACHED: case RTEMS_BDBUF_STATE_ACCESS_EMPTY: case RTEMS_BDBUF_STATE_ACCESS_MODIFIED: case RTEMS_BDBUF_STATE_ACCESS_PURGED: - rtems_bdbuf_wait (bd, &bdbuf_cache.access_waiters); + rtems_bdbuf_wait( bd, &bdbuf_cache.access_waiters ); break; case RTEMS_BDBUF_STATE_SYNC: case RTEMS_BDBUF_STATE_TRANSFER: case RTEMS_BDBUF_STATE_TRANSFER_PURGED: - rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters); + rtems_bdbuf_wait( bd, &bdbuf_cache.transfer_waiters ); break; default: - rtems_bdbuf_fatal_with_state (bd->state, RTEMS_BDBUF_FATAL_STATE_8); + rtems_bdbuf_fatal_with_state( bd->state, RTEMS_BDBUF_FATAL_STATE_8 ); } } } -static void -rtems_bdbuf_wait_for_sync_done (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_wait_for_sync_done( rtems_bdbuf_buffer *bd ) { - while (true) - { - switch (bd->state) - { + while ( true ) { + switch ( bd->state ) { case RTEMS_BDBUF_STATE_CACHED: case RTEMS_BDBUF_STATE_EMPTY: case RTEMS_BDBUF_STATE_MODIFIED: @@ -1650,170 +1658,167 @@ rtems_bdbuf_wait_for_sync_done (rtems_bdbuf_buffer *bd) case RTEMS_BDBUF_STATE_SYNC: case RTEMS_BDBUF_STATE_TRANSFER: case RTEMS_BDBUF_STATE_TRANSFER_PURGED: - rtems_bdbuf_wait (bd, &bdbuf_cache.transfer_waiters); + rtems_bdbuf_wait( bd, &bdbuf_cache.transfer_waiters ); break; default: - rtems_bdbuf_fatal_with_state (bd->state, RTEMS_BDBUF_FATAL_STATE_9); + rtems_bdbuf_fatal_with_state( bd->state, RTEMS_BDBUF_FATAL_STATE_9 ); } } } -static void -rtems_bdbuf_wait_for_buffer (void) +static void rtems_bdbuf_wait_for_buffer( void ) { - if (!rtems_chain_is_empty (&bdbuf_cache.modified)) - rtems_bdbuf_wake_swapper (); + if ( !rtems_chain_is_empty( &bdbuf_cache.modified ) ) { + rtems_bdbuf_wake_swapper(); + } - rtems_bdbuf_anonymous_wait (&bdbuf_cache.buffer_waiters); + rtems_bdbuf_anonymous_wait( &bdbuf_cache.buffer_waiters ); } -static void -rtems_bdbuf_sync_after_access (rtems_bdbuf_buffer *bd) +static void rtems_bdbuf_sync_after_access( rtems_bdbuf_buffer *bd ) { - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_SYNC); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_SYNC ); - rtems_chain_append_unprotected (&bdbuf_cache.sync, &bd->link); + rtems_chain_append_unprotected( &bdbuf_cache.sync, &bd->link ); - if (bd->waiters) - rtems_bdbuf_wake (&bdbuf_cache.access_waiters); + if ( bd->waiters ) { + rtems_bdbuf_wake( &bdbuf_cache.access_waiters ); + } - rtems_bdbuf_wake_swapper (); - rtems_bdbuf_wait_for_sync_done (bd); + rtems_bdbuf_wake_swapper(); + rtems_bdbuf_wait_for_sync_done( bd ); /* * We may have created a cached or empty buffer which may be recycled. */ - if (bd->waiters == 0 - && (bd->state == RTEMS_BDBUF_STATE_CACHED - || bd->state == RTEMS_BDBUF_STATE_EMPTY)) - { - if (bd->state == RTEMS_BDBUF_STATE_EMPTY) - { - rtems_bdbuf_remove_from_tree (bd); - rtems_bdbuf_make_free_and_add_to_lru_list (bd); + if ( + bd->waiters == 0 && ( bd->state == RTEMS_BDBUF_STATE_CACHED || + bd->state == RTEMS_BDBUF_STATE_EMPTY ) + ) { + if ( bd->state == RTEMS_BDBUF_STATE_EMPTY ) { + rtems_bdbuf_remove_from_tree( bd ); + rtems_bdbuf_make_free_and_add_to_lru_list( bd ); } - rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters); + rtems_bdbuf_wake( &bdbuf_cache.buffer_waiters ); } } -static rtems_bdbuf_buffer * -rtems_bdbuf_get_buffer_for_read_ahead (rtems_disk_device *dd, - rtems_blkdev_bnum block) +static rtems_bdbuf_buffer *rtems_bdbuf_get_buffer_for_read_ahead( + rtems_disk_device *dd, + rtems_blkdev_bnum block +) { rtems_bdbuf_buffer *bd = NULL; - bd = rtems_bdbuf_avl_search (&bdbuf_cache.tree, dd, block); + bd = rtems_bdbuf_avl_search( &bdbuf_cache.tree, dd, block ); - if (bd == NULL) - { - bd = rtems_bdbuf_get_buffer_from_lru_list (dd, block); + if ( bd == NULL ) { + bd = rtems_bdbuf_get_buffer_from_lru_list( dd, block ); - if (bd != NULL) - rtems_bdbuf_group_obtain (bd); - } - else + if ( bd != NULL ) { + rtems_bdbuf_group_obtain( bd ); + } + } else { /* * The buffer is in the cache. So it is already available or in use, and * thus no need for a read ahead. */ bd = NULL; + } return bd; } -static rtems_bdbuf_buffer * -rtems_bdbuf_get_buffer_for_access (rtems_disk_device *dd, - rtems_blkdev_bnum block) +static rtems_bdbuf_buffer *rtems_bdbuf_get_buffer_for_access( + rtems_disk_device *dd, + rtems_blkdev_bnum block +) { rtems_bdbuf_buffer *bd = NULL; - do - { - bd = rtems_bdbuf_avl_search (&bdbuf_cache.tree, dd, block); + do { + bd = rtems_bdbuf_avl_search( &bdbuf_cache.tree, dd, block ); - if (bd != NULL) - { - if (bd->group->bds_per_group != dd->bds_per_group) - { - if (rtems_bdbuf_wait_for_recycle (bd)) - { - rtems_bdbuf_remove_from_tree_and_lru_list (bd); - rtems_bdbuf_make_free_and_add_to_lru_list (bd); - rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters); + if ( bd != NULL ) { + if ( bd->group->bds_per_group != dd->bds_per_group ) { + if ( rtems_bdbuf_wait_for_recycle( bd ) ) { + rtems_bdbuf_remove_from_tree_and_lru_list( bd ); + rtems_bdbuf_make_free_and_add_to_lru_list( bd ); + rtems_bdbuf_wake( &bdbuf_cache.buffer_waiters ); } bd = NULL; } - } - else - { - bd = rtems_bdbuf_get_buffer_from_lru_list (dd, block); + } else { + bd = rtems_bdbuf_get_buffer_from_lru_list( dd, block ); - if (bd == NULL) - rtems_bdbuf_wait_for_buffer (); + if ( bd == NULL ) { + rtems_bdbuf_wait_for_buffer(); + } } - } - while (bd == NULL); + } while ( bd == NULL ); - rtems_bdbuf_wait_for_access (bd); - rtems_bdbuf_group_obtain (bd); + rtems_bdbuf_wait_for_access( bd ); + rtems_bdbuf_group_obtain( bd ); return bd; } -static rtems_status_code -rtems_bdbuf_get_media_block (const rtems_disk_device *dd, - rtems_blkdev_bnum block, - rtems_blkdev_bnum *media_block_ptr) +static rtems_status_code rtems_bdbuf_get_media_block( + const rtems_disk_device *dd, + rtems_blkdev_bnum block, + rtems_blkdev_bnum *media_block_ptr +) { rtems_status_code sc = RTEMS_SUCCESSFUL; - if (block < dd->block_count) - { + if ( block < dd->block_count ) { /* * Compute the media block number. Drivers work with media block number not * the block number a BD may have as this depends on the block size set by * the user. */ - *media_block_ptr = rtems_bdbuf_media_block (dd, block) + dd->start; - } - else - { + *media_block_ptr = rtems_bdbuf_media_block( dd, block ) + dd->start; + } else { sc = RTEMS_INVALID_ID; } return sc; } -rtems_status_code -rtems_bdbuf_get (rtems_disk_device *dd, - rtems_blkdev_bnum block, - rtems_bdbuf_buffer **bd_ptr) +rtems_status_code rtems_bdbuf_get( + rtems_disk_device *dd, + rtems_blkdev_bnum block, + rtems_bdbuf_buffer **bd_ptr +) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_bdbuf_buffer *bd = NULL; rtems_blkdev_bnum media_block; - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); - sc = rtems_bdbuf_get_media_block (dd, block, &media_block); - if (sc == RTEMS_SUCCESSFUL) - { + sc = rtems_bdbuf_get_media_block( dd, block, &media_block ); + if ( sc == RTEMS_SUCCESSFUL ) { /* * Print the block index relative to the physical disk. */ - if (rtems_bdbuf_tracer) - printf ("bdbuf:get: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n", - media_block, block, (unsigned) dd->dev); + if ( rtems_bdbuf_tracer ) { + printf( + "bdbuf:get: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n", + media_block, + block, + (unsigned) dd->dev + ); + } - bd = rtems_bdbuf_get_buffer_for_access (dd, media_block); + bd = rtems_bdbuf_get_buffer_for_access( dd, media_block ); - switch (bd->state) - { + switch ( bd->state ) { case RTEMS_BDBUF_STATE_CACHED: - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_ACCESS_CACHED ); break; case RTEMS_BDBUF_STATE_EMPTY: - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_EMPTY); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_ACCESS_EMPTY ); break; case RTEMS_BDBUF_STATE_MODIFIED: /* @@ -1823,21 +1828,20 @@ rtems_bdbuf_get (rtems_disk_device *dd, * start and write the whole block and the file system will have no * record of this so just gets the block to fill. */ - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED ); break; default: - rtems_bdbuf_fatal_with_state (bd->state, RTEMS_BDBUF_FATAL_STATE_2); + rtems_bdbuf_fatal_with_state( bd->state, RTEMS_BDBUF_FATAL_STATE_2 ); break; } - if (rtems_bdbuf_tracer) - { - rtems_bdbuf_show_users ("get", bd); - rtems_bdbuf_show_usage (); + if ( rtems_bdbuf_tracer ) { + rtems_bdbuf_show_users( "get", bd ); + rtems_bdbuf_show_usage(); } } - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); *bd_ptr = bd; @@ -1853,407 +1857,420 @@ rtems_bdbuf_get (rtems_disk_device *dd, * block device request structure). * @param status I/O completion status */ -static void -rtems_bdbuf_transfer_done (rtems_blkdev_request* req, rtems_status_code status) +static void rtems_bdbuf_transfer_done( + rtems_blkdev_request *req, + rtems_status_code status +) { req->status = status; - rtems_event_transient_send (req->io_task); + rtems_event_transient_send( req->io_task ); } -static rtems_status_code -rtems_bdbuf_execute_transfer_request (rtems_disk_device *dd, - rtems_blkdev_request *req, - bool cache_locked) +static rtems_status_code rtems_bdbuf_execute_transfer_request( + rtems_disk_device *dd, + rtems_blkdev_request *req, + bool cache_locked +) { rtems_status_code sc = RTEMS_SUCCESSFUL; - uint32_t transfer_index = 0; - bool wake_transfer_waiters = false; - bool wake_buffer_waiters = false; + uint32_t transfer_index = 0; + bool wake_transfer_waiters = false; + bool wake_buffer_waiters = false; - if (cache_locked) - rtems_bdbuf_unlock_cache (); + if ( cache_locked ) { + rtems_bdbuf_unlock_cache(); + } /* The return value will be ignored for transfer requests */ - dd->ioctl (dd->phys_dev, RTEMS_BLKIO_REQUEST, req); + dd->ioctl( dd->phys_dev, RTEMS_BLKIO_REQUEST, req ); /* Wait for transfer request completion */ - rtems_bdbuf_wait_for_transient_event (); + rtems_bdbuf_wait_for_transient_event(); sc = req->status; - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); /* Statistics */ - if (req->req == RTEMS_BLKDEV_REQ_READ) - { + if ( req->req == RTEMS_BLKDEV_REQ_READ ) { dd->stats.read_blocks += req->bufnum; - if (sc != RTEMS_SUCCESSFUL) + if ( sc != RTEMS_SUCCESSFUL ) { ++dd->stats.read_errors; - } - else - { + } + } else { dd->stats.write_blocks += req->bufnum; ++dd->stats.write_transfers; - if (sc != RTEMS_SUCCESSFUL) + if ( sc != RTEMS_SUCCESSFUL ) { ++dd->stats.write_errors; + } } - for (transfer_index = 0; transfer_index < req->bufnum; ++transfer_index) - { - rtems_bdbuf_buffer *bd = req->bufs [transfer_index].user; - bool waiters = bd->waiters; + for ( transfer_index = 0; transfer_index < req->bufnum; ++transfer_index ) { + rtems_bdbuf_buffer *bd = req->bufs[ transfer_index ].user; + bool waiters = bd->waiters; - if (waiters) + if ( waiters ) { wake_transfer_waiters = true; - else + } else { wake_buffer_waiters = true; + } - rtems_bdbuf_group_release (bd); + rtems_bdbuf_group_release( bd ); - if (sc == RTEMS_SUCCESSFUL && bd->state == RTEMS_BDBUF_STATE_TRANSFER) - rtems_bdbuf_make_cached_and_add_to_lru_list (bd); - else - rtems_bdbuf_discard_buffer (bd); + if ( sc == RTEMS_SUCCESSFUL && bd->state == RTEMS_BDBUF_STATE_TRANSFER ) { + rtems_bdbuf_make_cached_and_add_to_lru_list( bd ); + } else { + rtems_bdbuf_discard_buffer( bd ); + } - if (rtems_bdbuf_tracer) - rtems_bdbuf_show_users ("transfer", bd); + if ( rtems_bdbuf_tracer ) { + rtems_bdbuf_show_users( "transfer", bd ); + } } - if (wake_transfer_waiters) - rtems_bdbuf_wake (&bdbuf_cache.transfer_waiters); + if ( wake_transfer_waiters ) { + rtems_bdbuf_wake( &bdbuf_cache.transfer_waiters ); + } - if (wake_buffer_waiters) - rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters); + if ( wake_buffer_waiters ) { + rtems_bdbuf_wake( &bdbuf_cache.buffer_waiters ); + } - if (!cache_locked) - rtems_bdbuf_unlock_cache (); + if ( !cache_locked ) { + rtems_bdbuf_unlock_cache(); + } - if (sc == RTEMS_SUCCESSFUL || sc == RTEMS_UNSATISFIED) + if ( sc == RTEMS_SUCCESSFUL || sc == RTEMS_UNSATISFIED ) { return sc; - else + } else { return RTEMS_IO_ERROR; + } } -static rtems_status_code -rtems_bdbuf_execute_read_request (rtems_disk_device *dd, - rtems_bdbuf_buffer *bd, - uint32_t transfer_count) +static rtems_status_code rtems_bdbuf_execute_read_request( + rtems_disk_device *dd, + rtems_bdbuf_buffer *bd, + uint32_t transfer_count +) { rtems_blkdev_request *req = NULL; - rtems_blkdev_bnum media_block = bd->block; - uint32_t media_blocks_per_block = dd->media_blocks_per_block; - uint32_t block_size = dd->block_size; - uint32_t transfer_index = 1; + rtems_blkdev_bnum media_block = bd->block; + uint32_t media_blocks_per_block = dd->media_blocks_per_block; + uint32_t block_size = dd->block_size; + uint32_t transfer_index = 1; /* * TODO: This type of request structure is wrong and should be removed. */ -#define bdbuf_alloc(size) __builtin_alloca (size) +#define bdbuf_alloc( size ) __builtin_alloca( size ) - req = bdbuf_alloc (rtems_bdbuf_read_request_size (transfer_count)); + req = bdbuf_alloc( rtems_bdbuf_read_request_size( transfer_count ) ); req->req = RTEMS_BLKDEV_REQ_READ; req->done = rtems_bdbuf_transfer_done; - req->io_task = rtems_task_self (); + req->io_task = rtems_task_self(); req->bufnum = 0; - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_TRANSFER ); - req->bufs [0].user = bd; - req->bufs [0].block = media_block; - req->bufs [0].length = block_size; - req->bufs [0].buffer = bd->buffer; + req->bufs[ 0 ].user = bd; + req->bufs[ 0 ].block = media_block; + req->bufs[ 0 ].length = block_size; + req->bufs[ 0 ].buffer = bd->buffer; - if (rtems_bdbuf_tracer) - rtems_bdbuf_show_users ("read", bd); + if ( rtems_bdbuf_tracer ) { + rtems_bdbuf_show_users( "read", bd ); + } - while (transfer_index < transfer_count) - { + while ( transfer_index < transfer_count ) { media_block += media_blocks_per_block; - bd = rtems_bdbuf_get_buffer_for_read_ahead (dd, media_block); + bd = rtems_bdbuf_get_buffer_for_read_ahead( dd, media_block ); - if (bd == NULL) + if ( bd == NULL ) { break; + } - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_TRANSFER ); - req->bufs [transfer_index].user = bd; - req->bufs [transfer_index].block = media_block; - req->bufs [transfer_index].length = block_size; - req->bufs [transfer_index].buffer = bd->buffer; + req->bufs[ transfer_index ].user = bd; + req->bufs[ transfer_index ].block = media_block; + req->bufs[ transfer_index ].length = block_size; + req->bufs[ transfer_index ].buffer = bd->buffer; - if (rtems_bdbuf_tracer) - rtems_bdbuf_show_users ("read", bd); + if ( rtems_bdbuf_tracer ) { + rtems_bdbuf_show_users( "read", bd ); + } ++transfer_index; } req->bufnum = transfer_index; - return rtems_bdbuf_execute_transfer_request (dd, req, true); + return rtems_bdbuf_execute_transfer_request( dd, req, true ); } -static bool -rtems_bdbuf_is_read_ahead_active (const rtems_disk_device *dd) +static bool rtems_bdbuf_is_read_ahead_active( const rtems_disk_device *dd ) { - return !rtems_chain_is_node_off_chain (&dd->read_ahead.node); + return !rtems_chain_is_node_off_chain( &dd->read_ahead.node ); } -static void -rtems_bdbuf_read_ahead_cancel (rtems_disk_device *dd) +static void rtems_bdbuf_read_ahead_cancel( rtems_disk_device *dd ) { - if (rtems_bdbuf_is_read_ahead_active (dd)) - { - rtems_chain_extract_unprotected (&dd->read_ahead.node); - rtems_chain_set_off_chain (&dd->read_ahead.node); + if ( rtems_bdbuf_is_read_ahead_active( dd ) ) { + rtems_chain_extract_unprotected( &dd->read_ahead.node ); + rtems_chain_set_off_chain( &dd->read_ahead.node ); } } -static void -rtems_bdbuf_read_ahead_reset (rtems_disk_device *dd) +static void rtems_bdbuf_read_ahead_reset( rtems_disk_device *dd ) { - rtems_bdbuf_read_ahead_cancel (dd); + rtems_bdbuf_read_ahead_cancel( dd ); dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER; } -static void -rtems_bdbuf_read_ahead_add_to_chain (rtems_disk_device *dd) +static void rtems_bdbuf_read_ahead_add_to_chain( rtems_disk_device *dd ) { - rtems_status_code sc; + rtems_status_code sc; rtems_chain_control *chain = &bdbuf_cache.read_ahead_chain; - if (rtems_chain_is_empty (chain)) - { - sc = rtems_event_send (bdbuf_cache.read_ahead_task, - RTEMS_BDBUF_READ_AHEAD_WAKE_UP); - if (sc != RTEMS_SUCCESSFUL) - rtems_bdbuf_fatal (RTEMS_BDBUF_FATAL_RA_WAKE_UP); + if ( rtems_chain_is_empty( chain ) ) { + sc = rtems_event_send( + bdbuf_cache.read_ahead_task, + RTEMS_BDBUF_READ_AHEAD_WAKE_UP + ); + if ( sc != RTEMS_SUCCESSFUL ) { + rtems_bdbuf_fatal( RTEMS_BDBUF_FATAL_RA_WAKE_UP ); + } } - rtems_chain_append_unprotected (chain, &dd->read_ahead.node); + rtems_chain_append_unprotected( chain, &dd->read_ahead.node ); } -static void -rtems_bdbuf_check_read_ahead_trigger (rtems_disk_device *dd, - rtems_blkdev_bnum block) +static void rtems_bdbuf_check_read_ahead_trigger( + rtems_disk_device *dd, + rtems_blkdev_bnum block +) { - if (bdbuf_cache.read_ahead_task != 0 - && dd->read_ahead.trigger == block - && !rtems_bdbuf_is_read_ahead_active (dd)) - { + if ( + bdbuf_cache.read_ahead_task != 0 && dd->read_ahead.trigger == block && + !rtems_bdbuf_is_read_ahead_active( dd ) + ) { dd->read_ahead.nr_blocks = RTEMS_DISK_READ_AHEAD_SIZE_AUTO; - rtems_bdbuf_read_ahead_add_to_chain(dd); + rtems_bdbuf_read_ahead_add_to_chain( dd ); } } -static void -rtems_bdbuf_set_read_ahead_trigger (rtems_disk_device *dd, - rtems_blkdev_bnum block) +static void rtems_bdbuf_set_read_ahead_trigger( + rtems_disk_device *dd, + rtems_blkdev_bnum block +) { - if (dd->read_ahead.trigger != block) - { - rtems_bdbuf_read_ahead_cancel (dd); + if ( dd->read_ahead.trigger != block ) { + rtems_bdbuf_read_ahead_cancel( dd ); dd->read_ahead.trigger = block + 1; dd->read_ahead.next = block + 2; } } -rtems_status_code -rtems_bdbuf_read (rtems_disk_device *dd, - rtems_blkdev_bnum block, - rtems_bdbuf_buffer **bd_ptr) +rtems_status_code rtems_bdbuf_read( + rtems_disk_device *dd, + rtems_blkdev_bnum block, + rtems_bdbuf_buffer **bd_ptr +) { - rtems_status_code sc = RTEMS_SUCCESSFUL; - rtems_bdbuf_buffer *bd = NULL; - rtems_blkdev_bnum media_block; + rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_bdbuf_buffer *bd = NULL; + rtems_blkdev_bnum media_block; - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); - sc = rtems_bdbuf_get_media_block (dd, block, &media_block); - if (sc == RTEMS_SUCCESSFUL) - { - if (rtems_bdbuf_tracer) - printf ("bdbuf:read: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n", - media_block, block, (unsigned) dd->dev); + sc = rtems_bdbuf_get_media_block( dd, block, &media_block ); + if ( sc == RTEMS_SUCCESSFUL ) { + if ( rtems_bdbuf_tracer ) { + printf( + "bdbuf:read: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n", + media_block, + block, + (unsigned) dd->dev + ); + } - bd = rtems_bdbuf_get_buffer_for_access (dd, media_block); - switch (bd->state) - { + bd = rtems_bdbuf_get_buffer_for_access( dd, media_block ); + switch ( bd->state ) { case RTEMS_BDBUF_STATE_CACHED: ++dd->stats.read_hits; - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_ACCESS_CACHED ); break; case RTEMS_BDBUF_STATE_MODIFIED: ++dd->stats.read_hits; - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED ); break; case RTEMS_BDBUF_STATE_EMPTY: ++dd->stats.read_misses; - rtems_bdbuf_set_read_ahead_trigger (dd, block); - sc = rtems_bdbuf_execute_read_request (dd, bd, 1); - if (sc == RTEMS_SUCCESSFUL) - { - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED); - rtems_chain_extract_unprotected (&bd->link); - rtems_bdbuf_group_obtain (bd); - } - else - { + rtems_bdbuf_set_read_ahead_trigger( dd, block ); + sc = rtems_bdbuf_execute_read_request( dd, bd, 1 ); + if ( sc == RTEMS_SUCCESSFUL ) { + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_ACCESS_CACHED ); + rtems_chain_extract_unprotected( &bd->link ); + rtems_bdbuf_group_obtain( bd ); + } else { bd = NULL; } break; default: - rtems_bdbuf_fatal_with_state (bd->state, RTEMS_BDBUF_FATAL_STATE_4); + rtems_bdbuf_fatal_with_state( bd->state, RTEMS_BDBUF_FATAL_STATE_4 ); break; } - rtems_bdbuf_check_read_ahead_trigger (dd, block); + rtems_bdbuf_check_read_ahead_trigger( dd, block ); } - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); *bd_ptr = bd; return sc; } -void -rtems_bdbuf_peek (rtems_disk_device *dd, - rtems_blkdev_bnum block, - uint32_t nr_blocks) +void rtems_bdbuf_peek( + rtems_disk_device *dd, + rtems_blkdev_bnum block, + uint32_t nr_blocks +) { - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); - if (bdbuf_cache.read_ahead_enabled && nr_blocks > 0) - { - rtems_bdbuf_read_ahead_reset(dd); + if ( bdbuf_cache.read_ahead_enabled && nr_blocks > 0 ) { + rtems_bdbuf_read_ahead_reset( dd ); dd->read_ahead.next = block; dd->read_ahead.nr_blocks = nr_blocks; - rtems_bdbuf_read_ahead_add_to_chain(dd); + rtems_bdbuf_read_ahead_add_to_chain( dd ); } - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); } -static rtems_status_code -rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind) +static rtems_status_code rtems_bdbuf_check_bd_and_lock_cache( + rtems_bdbuf_buffer *bd, + const char *kind +) { - if (bd == NULL) + if ( bd == NULL ) { return RTEMS_INVALID_ADDRESS; - if (rtems_bdbuf_tracer) - { - printf ("bdbuf:%s: %" PRIu32 "\n", kind, bd->block); - rtems_bdbuf_show_users (kind, bd); + } + if ( rtems_bdbuf_tracer ) { + printf( "bdbuf:%s: %" PRIu32 "\n", kind, bd->block ); + rtems_bdbuf_show_users( kind, bd ); } rtems_bdbuf_lock_cache(); return RTEMS_SUCCESSFUL; } -rtems_status_code -rtems_bdbuf_release (rtems_bdbuf_buffer *bd) +rtems_status_code rtems_bdbuf_release( rtems_bdbuf_buffer *bd ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "release"); - if (sc != RTEMS_SUCCESSFUL) + sc = rtems_bdbuf_check_bd_and_lock_cache( bd, "release" ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; + } - switch (bd->state) - { + switch ( bd->state ) { case RTEMS_BDBUF_STATE_ACCESS_CACHED: - rtems_bdbuf_add_to_lru_list_after_access (bd); + rtems_bdbuf_add_to_lru_list_after_access( bd ); break; case RTEMS_BDBUF_STATE_ACCESS_EMPTY: case RTEMS_BDBUF_STATE_ACCESS_PURGED: - rtems_bdbuf_discard_buffer_after_access (bd); + rtems_bdbuf_discard_buffer_after_access( bd ); break; case RTEMS_BDBUF_STATE_ACCESS_MODIFIED: - rtems_bdbuf_add_to_modified_list_after_access (bd); + rtems_bdbuf_add_to_modified_list_after_access( bd ); break; default: - rtems_bdbuf_fatal_with_state (bd->state, RTEMS_BDBUF_FATAL_STATE_0); + rtems_bdbuf_fatal_with_state( bd->state, RTEMS_BDBUF_FATAL_STATE_0 ); break; } - if (rtems_bdbuf_tracer) - rtems_bdbuf_show_usage (); + if ( rtems_bdbuf_tracer ) { + rtems_bdbuf_show_usage(); + } - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); return RTEMS_SUCCESSFUL; } -rtems_status_code -rtems_bdbuf_release_modified (rtems_bdbuf_buffer *bd) +rtems_status_code rtems_bdbuf_release_modified( rtems_bdbuf_buffer *bd ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "release modified"); - if (sc != RTEMS_SUCCESSFUL) + sc = rtems_bdbuf_check_bd_and_lock_cache( bd, "release modified" ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; + } - switch (bd->state) - { + switch ( bd->state ) { case RTEMS_BDBUF_STATE_ACCESS_CACHED: case RTEMS_BDBUF_STATE_ACCESS_EMPTY: case RTEMS_BDBUF_STATE_ACCESS_MODIFIED: - rtems_bdbuf_add_to_modified_list_after_access (bd); + rtems_bdbuf_add_to_modified_list_after_access( bd ); break; case RTEMS_BDBUF_STATE_ACCESS_PURGED: - rtems_bdbuf_discard_buffer_after_access (bd); + rtems_bdbuf_discard_buffer_after_access( bd ); break; default: - rtems_bdbuf_fatal_with_state (bd->state, RTEMS_BDBUF_FATAL_STATE_6); + rtems_bdbuf_fatal_with_state( bd->state, RTEMS_BDBUF_FATAL_STATE_6 ); break; } - if (rtems_bdbuf_tracer) - rtems_bdbuf_show_usage (); + if ( rtems_bdbuf_tracer ) { + rtems_bdbuf_show_usage(); + } - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); return RTEMS_SUCCESSFUL; } -rtems_status_code -rtems_bdbuf_sync (rtems_bdbuf_buffer *bd) +rtems_status_code rtems_bdbuf_sync( rtems_bdbuf_buffer *bd ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - sc = rtems_bdbuf_check_bd_and_lock_cache (bd, "sync"); - if (sc != RTEMS_SUCCESSFUL) + sc = rtems_bdbuf_check_bd_and_lock_cache( bd, "sync" ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; + } - switch (bd->state) - { + switch ( bd->state ) { case RTEMS_BDBUF_STATE_ACCESS_CACHED: case RTEMS_BDBUF_STATE_ACCESS_EMPTY: case RTEMS_BDBUF_STATE_ACCESS_MODIFIED: - rtems_bdbuf_sync_after_access (bd); + rtems_bdbuf_sync_after_access( bd ); break; case RTEMS_BDBUF_STATE_ACCESS_PURGED: - rtems_bdbuf_discard_buffer_after_access (bd); + rtems_bdbuf_discard_buffer_after_access( bd ); break; default: - rtems_bdbuf_fatal_with_state (bd->state, RTEMS_BDBUF_FATAL_STATE_5); + rtems_bdbuf_fatal_with_state( bd->state, RTEMS_BDBUF_FATAL_STATE_5 ); break; } - if (rtems_bdbuf_tracer) - rtems_bdbuf_show_usage (); + if ( rtems_bdbuf_tracer ) { + rtems_bdbuf_show_usage(); + } - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); return RTEMS_SUCCESSFUL; } -rtems_status_code -rtems_bdbuf_syncdev (rtems_disk_device *dd) +rtems_status_code rtems_bdbuf_syncdev( rtems_disk_device *dd ) { - if (rtems_bdbuf_tracer) - printf ("bdbuf:syncdev: %08x\n", (unsigned) dd->dev); + if ( rtems_bdbuf_tracer ) { + printf( "bdbuf:syncdev: %08x\n", (unsigned) dd->dev ); + } /* * Take the sync lock before locking the cache. Once we have the sync lock we @@ -2261,8 +2278,8 @@ rtems_bdbuf_syncdev (rtems_disk_device *dd) * thread to block until it owns the sync lock then it can own the cache. The * sync lock can only be obtained with the cache unlocked. */ - rtems_bdbuf_lock_sync (); - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_sync(); + rtems_bdbuf_lock_cache(); /* * Set the cache to have a sync active for a specific device and let the swap @@ -2271,14 +2288,14 @@ rtems_bdbuf_syncdev (rtems_disk_device *dd) * The swap out task will negate the sync active flag when no more buffers * for the device are held on the "modified for sync" queues. */ - bdbuf_cache.sync_active = true; - bdbuf_cache.sync_requester = rtems_task_self (); - bdbuf_cache.sync_device = dd; + bdbuf_cache.sync_active = true; + bdbuf_cache.sync_requester = rtems_task_self(); + bdbuf_cache.sync_device = dd; - rtems_bdbuf_wake_swapper (); - rtems_bdbuf_unlock_cache (); - rtems_bdbuf_wait_for_transient_event (); - rtems_bdbuf_unlock_sync (); + rtems_bdbuf_wake_swapper(); + rtems_bdbuf_unlock_cache(); + rtems_bdbuf_wait_for_transient_event(); + rtems_bdbuf_unlock_sync(); return RTEMS_SUCCESSFUL; } @@ -2290,19 +2307,18 @@ rtems_bdbuf_syncdev (rtems_disk_device *dd) * * @param transfer The transfer transaction. */ -static void -rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer) +static void rtems_bdbuf_swapout_write( rtems_bdbuf_swapout_transfer *transfer ) { rtems_chain_node *node; - if (rtems_bdbuf_tracer) - printf ("bdbuf:swapout transfer: %08x\n", (unsigned) transfer->dd->dev); + if ( rtems_bdbuf_tracer ) { + printf( "bdbuf:swapout transfer: %08x\n", (unsigned) transfer->dd->dev ); + } /* * If there are buffers to transfer to the media transfer them. */ - if (!rtems_chain_is_empty (&transfer->bds)) - { + if ( !rtems_chain_is_empty( &transfer->bds ) ) { /* * The last block number used when the driver only supports * continuous blocks in a single request. @@ -2310,9 +2326,9 @@ rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer) uint32_t last_block = 0; rtems_disk_device *dd = transfer->dd; - uint32_t media_blocks_per_block = dd->media_blocks_per_block; - bool need_continuous_blocks = - (dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_MULTISECTOR_CONT) != 0; + uint32_t media_blocks_per_block = dd->media_blocks_per_block; + bool need_continuous_blocks = ( dd->phys_dev->capabilities & + RTEMS_BLKDEV_CAP_MULTISECTOR_CONT ) != 0; /* * Take as many buffers as configured and pass to the driver. Note, the @@ -2326,9 +2342,10 @@ rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer) transfer->write_req.status = RTEMS_RESOURCE_IN_USE; transfer->write_req.bufnum = 0; - while ((node = rtems_chain_get_unprotected(&transfer->bds)) != NULL) - { - rtems_bdbuf_buffer* bd = (rtems_bdbuf_buffer*) node; + while ( + ( node = rtems_chain_get_unprotected( &transfer->bds ) ) != NULL + ) { + rtems_bdbuf_buffer *bd = (rtems_bdbuf_buffer *) node; bool write = false; /* @@ -2338,27 +2355,30 @@ rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer) * the committed buffers. */ - if (rtems_bdbuf_tracer) - printf ("bdbuf:swapout write: bd:%" PRIu32 ", bufnum:%" PRIu32 " mode:%s\n", - bd->block, transfer->write_req.bufnum, - need_continuous_blocks ? "MULTI" : "SCAT"); - - if (need_continuous_blocks && transfer->write_req.bufnum && - bd->block != last_block + media_blocks_per_block) - { - rtems_chain_prepend_unprotected (&transfer->bds, &bd->link); - write = true; + if ( rtems_bdbuf_tracer ) { + printf( + "bdbuf:swapout write: bd:%" PRIu32 ", bufnum:%" PRIu32 " mode:%s\n", + bd->block, + transfer->write_req.bufnum, + need_continuous_blocks ? "MULTI" : "SCAT" + ); } - else - { - rtems_blkdev_sg_buffer* buf; - buf = &transfer->write_req.bufs[transfer->write_req.bufnum]; + + if ( + need_continuous_blocks && transfer->write_req.bufnum && + bd->block != last_block + media_blocks_per_block + ) { + rtems_chain_prepend_unprotected( &transfer->bds, &bd->link ); + write = true; + } else { + rtems_blkdev_sg_buffer *buf; + buf = &transfer->write_req.bufs[ transfer->write_req.bufnum ]; transfer->write_req.bufnum++; - buf->user = bd; - buf->block = bd->block; + buf->user = bd; + buf->block = bd->block; buf->length = dd->block_size; buf->buffer = bd->buffer; - last_block = bd->block; + last_block = bd->block; } /* @@ -2366,13 +2386,19 @@ rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer) * size has reached the configured max. value. */ - if (rtems_chain_is_empty (&transfer->bds) || - (transfer->write_req.bufnum >= bdbuf_config.max_write_blocks)) + if ( + rtems_chain_is_empty( &transfer->bds ) || + ( transfer->write_req.bufnum >= bdbuf_config.max_write_blocks ) + ) { write = true; + } - if (write) - { - rtems_bdbuf_execute_transfer_request (dd, &transfer->write_req, false); + if ( write ) { + rtems_bdbuf_execute_transfer_request( + dd, + &transfer->write_req, + false + ); transfer->write_req.status = RTEMS_RESOURCE_IN_USE; transfer->write_req.bufnum = 0; @@ -2383,10 +2409,15 @@ rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer) * If sync'ing and the deivce is capability of handling a sync IO control * call perform the call. */ - if (transfer->syncing && - (dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_SYNC)) - { - /* int result = */ dd->ioctl (dd->phys_dev, RTEMS_BLKDEV_REQ_SYNC, NULL); + if ( + transfer->syncing && + ( dd->phys_dev->capabilities & RTEMS_BLKDEV_CAP_SYNC ) + ) { + /* int result = */ dd->ioctl( + dd->phys_dev, + RTEMS_BLKDEV_REQ_SYNC, + NULL + ); /* How should the error be handled ? */ } } @@ -2406,17 +2437,17 @@ rtems_bdbuf_swapout_write (rtems_bdbuf_swapout_transfer* transfer) * @param timer_delta It update_timers is true update the timers by this * amount. */ -static void -rtems_bdbuf_swapout_modified_processing (rtems_disk_device **dd_ptr, - rtems_chain_control* chain, - rtems_chain_control* transfer, - bool sync_active, - bool update_timers, - uint32_t timer_delta) +static void rtems_bdbuf_swapout_modified_processing( + rtems_disk_device **dd_ptr, + rtems_chain_control *chain, + rtems_chain_control *transfer, + bool sync_active, + bool update_timers, + uint32_t timer_delta +) { - if (!rtems_chain_is_empty (chain)) - { - rtems_chain_node* node = rtems_chain_head (chain); + if ( !rtems_chain_is_empty( chain ) ) { + rtems_chain_node *node = rtems_chain_head( chain ); bool sync_all; node = node->next; @@ -2424,14 +2455,14 @@ rtems_bdbuf_swapout_modified_processing (rtems_disk_device **dd_ptr, /* * A sync active with no valid dev means sync all. */ - if (sync_active && (*dd_ptr == BDBUF_INVALID_DEV)) + if ( sync_active && ( *dd_ptr == BDBUF_INVALID_DEV ) ) { sync_all = true; - else + } else { sync_all = false; + } - while (!rtems_chain_is_tail (chain, node)) - { - rtems_bdbuf_buffer* bd = (rtems_bdbuf_buffer*) node; + while ( !rtems_chain_is_tail( chain, node ) ) { + rtems_bdbuf_buffer *bd = (rtems_bdbuf_buffer *) node; /* * Check if the buffer's hold timer has reached 0. If a sync is active @@ -2440,22 +2471,23 @@ rtems_bdbuf_swapout_modified_processing (rtems_disk_device **dd_ptr, * @note Lots of sync requests will skew this timer. It should be based * on TOD to be accurate. Does it matter ? */ - if (sync_all || (sync_active && (*dd_ptr == bd->dd)) - || rtems_bdbuf_has_buffer_waiters ()) + if ( + sync_all || ( sync_active && ( *dd_ptr == bd->dd ) ) || + rtems_bdbuf_has_buffer_waiters() + ) { bd->hold_timer = 0; + } - if (bd->hold_timer) - { - if (update_timers) - { - if (bd->hold_timer > timer_delta) + if ( bd->hold_timer ) { + if ( update_timers ) { + if ( bd->hold_timer > timer_delta ) { bd->hold_timer -= timer_delta; - else + } else { bd->hold_timer = 0; + } } - if (bd->hold_timer) - { + if ( bd->hold_timer ) { node = node->next; continue; } @@ -2466,13 +2498,13 @@ rtems_bdbuf_swapout_modified_processing (rtems_disk_device **dd_ptr, * assumption. Cannot use the transfer list being empty the sync dev * calls sets the dev to use. */ - if (*dd_ptr == BDBUF_INVALID_DEV) + if ( *dd_ptr == BDBUF_INVALID_DEV ) { *dd_ptr = bd->dd; + } - if (bd->dd == *dd_ptr) - { - rtems_chain_node* next_node = node->next; - rtems_chain_node* tnode = rtems_chain_tail (transfer); + if ( bd->dd == *dd_ptr ) { + rtems_chain_node *next_node = node->next; + rtems_chain_node *tnode = rtems_chain_tail( transfer ); /* * The blocks on the transfer list are sorted in block order. This @@ -2481,32 +2513,29 @@ rtems_bdbuf_swapout_modified_processing (rtems_disk_device **dd_ptr, * help lower head movement. */ - rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER); + rtems_bdbuf_set_state( bd, RTEMS_BDBUF_STATE_TRANSFER ); - rtems_chain_extract_unprotected (node); + rtems_chain_extract_unprotected( node ); tnode = tnode->previous; - while (node && !rtems_chain_is_head (transfer, tnode)) - { - rtems_bdbuf_buffer* tbd = (rtems_bdbuf_buffer*) tnode; + while ( node && !rtems_chain_is_head( transfer, tnode ) ) { + rtems_bdbuf_buffer *tbd = (rtems_bdbuf_buffer *) tnode; - if (bd->block > tbd->block) - { - rtems_chain_insert_unprotected (tnode, node); + if ( bd->block > tbd->block ) { + rtems_chain_insert_unprotected( tnode, node ); node = NULL; - } - else + } else { tnode = tnode->previous; + } } - if (node) - rtems_chain_prepend_unprotected (transfer, node); + if ( node ) { + rtems_chain_prepend_unprotected( transfer, node ); + } node = next_node; - } - else - { + } else { node = node->next; } } @@ -2529,16 +2558,17 @@ rtems_bdbuf_swapout_modified_processing (rtems_disk_device **dd_ptr, * @retval true Buffers where written to disk so scan again. * @retval false No buffers where written to disk. */ -static bool -rtems_bdbuf_swapout_processing (unsigned long timer_delta, - bool update_timers, - rtems_bdbuf_swapout_transfer* transfer) +static bool rtems_bdbuf_swapout_processing( + unsigned long timer_delta, + bool update_timers, + rtems_bdbuf_swapout_transfer *transfer +) { - rtems_bdbuf_swapout_worker* worker; + rtems_bdbuf_swapout_worker *worker; bool transfered_buffers = false; bool sync_active; - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); /* * To set this to true you need the cache and the sync lock. @@ -2554,17 +2584,18 @@ rtems_bdbuf_swapout_processing (unsigned long timer_delta, * lock. The simplest solution is to get the main swap out task perform all * sync operations. */ - if (sync_active) + if ( sync_active ) { worker = NULL; - else - { - worker = (rtems_bdbuf_swapout_worker*) - rtems_chain_get_unprotected (&bdbuf_cache.swapout_free_workers); - if (worker) + } else { + worker = (rtems_bdbuf_swapout_worker *) rtems_chain_get_unprotected( + &bdbuf_cache.swapout_free_workers + ); + if ( worker ) { transfer = &worker->transfer; + } } - rtems_chain_initialize_empty (&transfer->bds); + rtems_chain_initialize_empty( &transfer->bds ); transfer->dd = BDBUF_INVALID_DEV; transfer->syncing = sync_active; @@ -2573,66 +2604,71 @@ rtems_bdbuf_swapout_processing (unsigned long timer_delta, * is for a buffer handle process the devices in the order on the sync * list. This means the dev is BDBUF_INVALID_DEV. */ - if (sync_active) + if ( sync_active ) { transfer->dd = bdbuf_cache.sync_device; + } /* * If we have any buffers in the sync queue move them to the modified * list. The first sync buffer will select the device we use. */ - rtems_bdbuf_swapout_modified_processing (&transfer->dd, - &bdbuf_cache.sync, - &transfer->bds, - true, false, - timer_delta); + rtems_bdbuf_swapout_modified_processing( + &transfer->dd, + &bdbuf_cache.sync, + &transfer->bds, + true, + false, + timer_delta + ); /* * Process the cache's modified list. */ - rtems_bdbuf_swapout_modified_processing (&transfer->dd, - &bdbuf_cache.modified, - &transfer->bds, - sync_active, - update_timers, - timer_delta); + rtems_bdbuf_swapout_modified_processing( + &transfer->dd, + &bdbuf_cache.modified, + &transfer->bds, + sync_active, + update_timers, + timer_delta + ); /* * We have all the buffers that have been modified for this device so the * cache can be unlocked because the state of each buffer has been set to * TRANSFER. */ - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); /* * If there are buffers to transfer to the media transfer them. */ - if (!rtems_chain_is_empty (&transfer->bds)) - { - if (worker) - { - rtems_status_code sc = rtems_event_send (worker->id, - RTEMS_BDBUF_SWAPOUT_SYNC); - if (sc != RTEMS_SUCCESSFUL) - rtems_bdbuf_fatal (RTEMS_BDBUF_FATAL_SO_WAKE_2); - } - else - { - rtems_bdbuf_swapout_write (transfer); + if ( !rtems_chain_is_empty( &transfer->bds ) ) { + if ( worker ) { + rtems_status_code sc = rtems_event_send( + worker->id, + RTEMS_BDBUF_SWAPOUT_SYNC + ); + if ( sc != RTEMS_SUCCESSFUL ) { + rtems_bdbuf_fatal( RTEMS_BDBUF_FATAL_SO_WAKE_2 ); + } + } else { + rtems_bdbuf_swapout_write( transfer ); } transfered_buffers = true; } - if (sync_active && !transfered_buffers) - { + if ( sync_active && !transfered_buffers ) { rtems_id sync_requester; - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); sync_requester = bdbuf_cache.sync_requester; bdbuf_cache.sync_active = false; bdbuf_cache.sync_requester = 0; - rtems_bdbuf_unlock_cache (); - if (sync_requester) - rtems_event_transient_send (sync_requester); + rtems_bdbuf_unlock_cache(); + if ( sync_requester ) { + rtems_event_transient_send( sync_requester ); + } } return transfered_buffers; @@ -2644,28 +2680,29 @@ rtems_bdbuf_swapout_processing (unsigned long timer_delta, * @param arg A pointer to the worker thread's private data. * @return rtems_task Not used. */ -static rtems_task -rtems_bdbuf_swapout_worker_task (rtems_task_argument arg) +static rtems_task rtems_bdbuf_swapout_worker_task( rtems_task_argument arg ) { - rtems_bdbuf_swapout_worker* worker = (rtems_bdbuf_swapout_worker*) arg; + rtems_bdbuf_swapout_worker *worker = (rtems_bdbuf_swapout_worker *) arg; - while (worker->enabled) - { - rtems_bdbuf_wait_for_event (RTEMS_BDBUF_SWAPOUT_SYNC); + while ( worker->enabled ) { + rtems_bdbuf_wait_for_event( RTEMS_BDBUF_SWAPOUT_SYNC ); - rtems_bdbuf_swapout_write (&worker->transfer); + rtems_bdbuf_swapout_write( &worker->transfer ); - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); - rtems_chain_initialize_empty (&worker->transfer.bds); + rtems_chain_initialize_empty( &worker->transfer.bds ); worker->transfer.dd = BDBUF_INVALID_DEV; - rtems_chain_append_unprotected (&bdbuf_cache.swapout_free_workers, &worker->link); + rtems_chain_append_unprotected( + &bdbuf_cache.swapout_free_workers, + &worker->link + ); - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); } - free (worker); + free( worker ); rtems_task_exit(); } @@ -2673,23 +2710,21 @@ rtems_bdbuf_swapout_worker_task (rtems_task_argument arg) /** * Close the swapout worker threads. */ -static void -rtems_bdbuf_swapout_workers_close (void) +static void rtems_bdbuf_swapout_workers_close( void ) { - rtems_chain_node* node; + rtems_chain_node *node; - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); - node = rtems_chain_first (&bdbuf_cache.swapout_free_workers); - while (!rtems_chain_is_tail (&bdbuf_cache.swapout_free_workers, node)) - { - rtems_bdbuf_swapout_worker* worker = (rtems_bdbuf_swapout_worker*) node; + node = rtems_chain_first( &bdbuf_cache.swapout_free_workers ); + while ( !rtems_chain_is_tail( &bdbuf_cache.swapout_free_workers, node ) ) { + rtems_bdbuf_swapout_worker *worker = (rtems_bdbuf_swapout_worker *) node; worker->enabled = false; - rtems_event_send (worker->id, RTEMS_BDBUF_SWAPOUT_SYNC); - node = rtems_chain_next (node); + rtems_event_send( worker->id, RTEMS_BDBUF_SWAPOUT_SYNC ); + node = rtems_chain_next( node ); } - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); } /** @@ -2699,26 +2734,25 @@ rtems_bdbuf_swapout_workers_close (void) * not this. * @return rtems_task Not used. */ -static rtems_task -rtems_bdbuf_swapout_task (rtems_task_argument arg) +static rtems_task rtems_bdbuf_swapout_task( rtems_task_argument arg ) { - rtems_bdbuf_swapout_transfer* transfer = (rtems_bdbuf_swapout_transfer *) arg; - uint32_t period_in_ticks; - const uint32_t period_in_msecs = bdbuf_config.swapout_period; - uint32_t timer_delta; + rtems_bdbuf_swapout_transfer *transfer = (rtems_bdbuf_swapout_transfer *) + arg; + uint32_t period_in_ticks; + const uint32_t period_in_msecs = bdbuf_config.swapout_period; + uint32_t timer_delta; /* * Localise the period. */ - period_in_ticks = RTEMS_MICROSECONDS_TO_TICKS (period_in_msecs * 1000); + period_in_ticks = RTEMS_MICROSECONDS_TO_TICKS( period_in_msecs * 1000 ); /* * This is temporary. Needs to be changed to use the real time clock. */ timer_delta = period_in_msecs; - while (bdbuf_cache.swapout_enabled) - { + while ( bdbuf_cache.swapout_enabled ) { rtems_event_set out; rtems_status_code sc; @@ -2734,8 +2768,7 @@ rtems_bdbuf_swapout_task (rtems_task_argument arg) */ bool transfered_buffers; - do - { + do { transfered_buffers = false; /* @@ -2743,10 +2776,9 @@ rtems_bdbuf_swapout_task (rtems_task_argument arg) * the first one we find on a modified list. Process the sync queue of * buffers first. */ - if (rtems_bdbuf_swapout_processing (timer_delta, - update_timers, - transfer)) - { + if ( + rtems_bdbuf_swapout_processing( timer_delta, update_timers, transfer ) + ) { transfered_buffers = true; } @@ -2754,145 +2786,141 @@ rtems_bdbuf_swapout_task (rtems_task_argument arg) * Only update the timers once. */ update_timers = false; + } while ( transfered_buffers ); + + sc = rtems_event_receive( + RTEMS_BDBUF_SWAPOUT_SYNC, + RTEMS_EVENT_ALL | RTEMS_WAIT, + period_in_ticks, + &out + ); + + if ( ( sc != RTEMS_SUCCESSFUL ) && ( sc != RTEMS_TIMEOUT ) ) { + rtems_bdbuf_fatal( RTEMS_BDBUF_FATAL_SWAPOUT_RE ); } - while (transfered_buffers); - - sc = rtems_event_receive (RTEMS_BDBUF_SWAPOUT_SYNC, - RTEMS_EVENT_ALL | RTEMS_WAIT, - period_in_ticks, - &out); - - if ((sc != RTEMS_SUCCESSFUL) && (sc != RTEMS_TIMEOUT)) - rtems_bdbuf_fatal (RTEMS_BDBUF_FATAL_SWAPOUT_RE); } - rtems_bdbuf_swapout_workers_close (); + rtems_bdbuf_swapout_workers_close(); - free (transfer); + free( transfer ); rtems_task_exit(); } -static void -rtems_bdbuf_purge_list (rtems_chain_control *purge_list) +static void rtems_bdbuf_purge_list( rtems_chain_control *purge_list ) { - bool wake_buffer_waiters = false; + bool wake_buffer_waiters = false; rtems_chain_node *node = NULL; - while ((node = rtems_chain_get_unprotected (purge_list)) != NULL) - { + while ( ( node = rtems_chain_get_unprotected( purge_list ) ) != NULL ) { rtems_bdbuf_buffer *bd = (rtems_bdbuf_buffer *) node; - if (bd->waiters == 0) + if ( bd->waiters == 0 ) { wake_buffer_waiters = true; + } - rtems_bdbuf_discard_buffer (bd); + rtems_bdbuf_discard_buffer( bd ); } - if (wake_buffer_waiters) - rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters); + if ( wake_buffer_waiters ) { + rtems_bdbuf_wake( &bdbuf_cache.buffer_waiters ); + } } -static void -rtems_bdbuf_gather_for_purge (rtems_chain_control *purge_list, - const rtems_disk_device *dd) +static void rtems_bdbuf_gather_for_purge( + rtems_chain_control *purge_list, + const rtems_disk_device *dd +) { - rtems_bdbuf_buffer *stack [RTEMS_BDBUF_AVL_MAX_HEIGHT]; + rtems_bdbuf_buffer *stack[ RTEMS_BDBUF_AVL_MAX_HEIGHT ]; rtems_bdbuf_buffer **prev = stack; - rtems_bdbuf_buffer *cur = bdbuf_cache.tree; + rtems_bdbuf_buffer *cur = bdbuf_cache.tree; *prev = NULL; - while (cur != NULL) - { - if (cur->dd == dd) - { - switch (cur->state) - { + while ( cur != NULL ) { + if ( cur->dd == dd ) { + switch ( cur->state ) { case RTEMS_BDBUF_STATE_FREE: case RTEMS_BDBUF_STATE_EMPTY: case RTEMS_BDBUF_STATE_ACCESS_PURGED: case RTEMS_BDBUF_STATE_TRANSFER_PURGED: break; case RTEMS_BDBUF_STATE_SYNC: - rtems_bdbuf_wake (&bdbuf_cache.transfer_waiters); + rtems_bdbuf_wake( &bdbuf_cache.transfer_waiters ); /* Fall through */ case RTEMS_BDBUF_STATE_MODIFIED: - rtems_bdbuf_group_release (cur); + rtems_bdbuf_group_release( cur ); /* Fall through */ case RTEMS_BDBUF_STATE_CACHED: - rtems_chain_extract_unprotected (&cur->link); - rtems_chain_append_unprotected (purge_list, &cur->link); + rtems_chain_extract_unprotected( &cur->link ); + rtems_chain_append_unprotected( purge_list, &cur->link ); break; case RTEMS_BDBUF_STATE_TRANSFER: - rtems_bdbuf_set_state (cur, RTEMS_BDBUF_STATE_TRANSFER_PURGED); + rtems_bdbuf_set_state( cur, RTEMS_BDBUF_STATE_TRANSFER_PURGED ); break; case RTEMS_BDBUF_STATE_ACCESS_CACHED: case RTEMS_BDBUF_STATE_ACCESS_EMPTY: case RTEMS_BDBUF_STATE_ACCESS_MODIFIED: - rtems_bdbuf_set_state (cur, RTEMS_BDBUF_STATE_ACCESS_PURGED); + rtems_bdbuf_set_state( cur, RTEMS_BDBUF_STATE_ACCESS_PURGED ); break; default: - rtems_bdbuf_fatal (RTEMS_BDBUF_FATAL_STATE_11); + rtems_bdbuf_fatal( RTEMS_BDBUF_FATAL_STATE_11 ); } } - if (cur->avl.left != NULL) - { + if ( cur->avl.left != NULL ) { /* Left */ ++prev; *prev = cur; cur = cur->avl.left; - } - else if (cur->avl.right != NULL) - { + } else if ( cur->avl.right != NULL ) { /* Right */ ++prev; *prev = cur; cur = cur->avl.right; - } - else - { - while (*prev != NULL - && (cur == (*prev)->avl.right || (*prev)->avl.right == NULL)) - { + } else { + while ( + *prev != NULL && + ( cur == ( *prev )->avl.right || ( *prev )->avl.right == NULL ) + ) { /* Up */ cur = *prev; --prev; } - if (*prev != NULL) + if ( *prev != NULL ) { /* Right */ - cur = (*prev)->avl.right; - else + cur = ( *prev )->avl.right; + } else { /* Finished */ cur = NULL; + } } } } -static void -rtems_bdbuf_do_purge_dev (rtems_disk_device *dd) +static void rtems_bdbuf_do_purge_dev( rtems_disk_device *dd ) { rtems_chain_control purge_list; - rtems_chain_initialize_empty (&purge_list); - rtems_bdbuf_read_ahead_reset (dd); - rtems_bdbuf_gather_for_purge (&purge_list, dd); - rtems_bdbuf_purge_list (&purge_list); + rtems_chain_initialize_empty( &purge_list ); + rtems_bdbuf_read_ahead_reset( dd ); + rtems_bdbuf_gather_for_purge( &purge_list, dd ); + rtems_bdbuf_purge_list( &purge_list ); } -void -rtems_bdbuf_purge_dev (rtems_disk_device *dd) +void rtems_bdbuf_purge_dev( rtems_disk_device *dd ) { - rtems_bdbuf_lock_cache (); - rtems_bdbuf_do_purge_dev (dd); - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_lock_cache(); + rtems_bdbuf_do_purge_dev( dd ); + rtems_bdbuf_unlock_cache(); } -rtems_status_code -rtems_bdbuf_set_block_size (rtems_disk_device *dd, - uint32_t block_size, - bool sync) +rtems_status_code rtems_bdbuf_set_block_size( + rtems_disk_device *dd, + uint32_t block_size, + bool sync +) { rtems_status_code sc = RTEMS_SUCCESSFUL; @@ -2900,28 +2928,31 @@ rtems_bdbuf_set_block_size (rtems_disk_device *dd, * We do not care about the synchronization status since we will purge the * device later. */ - if (sync) - (void) rtems_bdbuf_syncdev (dd); + if ( sync ) { + (void) rtems_bdbuf_syncdev( dd ); + } - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); - if (block_size > 0) - { - size_t bds_per_group = rtems_bdbuf_bds_per_group (block_size); + if ( block_size > 0 ) { + size_t bds_per_group = rtems_bdbuf_bds_per_group( block_size ); - if (bds_per_group != 0) - { - int block_to_media_block_shift = 0; + if ( bds_per_group != 0 ) { + int block_to_media_block_shift = 0; uint32_t media_blocks_per_block = block_size / dd->media_block_size; uint32_t one = 1; - while ((one << block_to_media_block_shift) < media_blocks_per_block) - { + while ( + ( one << block_to_media_block_shift ) < media_blocks_per_block + ) { ++block_to_media_block_shift; } - if ((dd->media_block_size << block_to_media_block_shift) != block_size) + if ( + ( dd->media_block_size << block_to_media_block_shift ) != block_size + ) { block_to_media_block_shift = -1; + } dd->block_size = block_size; dd->block_count = dd->size / media_blocks_per_block; @@ -2929,78 +2960,74 @@ rtems_bdbuf_set_block_size (rtems_disk_device *dd, dd->block_to_media_block_shift = block_to_media_block_shift; dd->bds_per_group = bds_per_group; - rtems_bdbuf_do_purge_dev (dd); - } - else - { + rtems_bdbuf_do_purge_dev( dd ); + } else { sc = RTEMS_INVALID_NUMBER; } - } - else - { + } else { sc = RTEMS_INVALID_NUMBER; } - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); return sc; } -static rtems_task -rtems_bdbuf_read_ahead_task (rtems_task_argument arg) +static rtems_task rtems_bdbuf_read_ahead_task( rtems_task_argument arg ) { (void) arg; rtems_chain_control *chain = &bdbuf_cache.read_ahead_chain; - while (bdbuf_cache.read_ahead_enabled) - { + while ( bdbuf_cache.read_ahead_enabled ) { rtems_chain_node *node; - rtems_bdbuf_wait_for_event (RTEMS_BDBUF_READ_AHEAD_WAKE_UP); - rtems_bdbuf_lock_cache (); + rtems_bdbuf_wait_for_event( RTEMS_BDBUF_READ_AHEAD_WAKE_UP ); + rtems_bdbuf_lock_cache(); - while ((node = rtems_chain_get_unprotected (chain)) != NULL) - { - rtems_disk_device *dd = - RTEMS_CONTAINER_OF (node, rtems_disk_device, read_ahead.node); + while ( ( node = rtems_chain_get_unprotected( chain ) ) != NULL ) { + rtems_disk_device *dd = RTEMS_CONTAINER_OF( + node, + rtems_disk_device, + read_ahead.node + ); rtems_blkdev_bnum block = dd->read_ahead.next; rtems_blkdev_bnum media_block = 0; - rtems_status_code sc = - rtems_bdbuf_get_media_block (dd, block, &media_block); + rtems_status_code sc = rtems_bdbuf_get_media_block( + dd, + block, + &media_block + ); - rtems_chain_set_off_chain (&dd->read_ahead.node); + rtems_chain_set_off_chain( &dd->read_ahead.node ); - if (sc == RTEMS_SUCCESSFUL) - { - rtems_bdbuf_buffer *bd = - rtems_bdbuf_get_buffer_for_read_ahead (dd, media_block); + if ( sc == RTEMS_SUCCESSFUL ) { + rtems_bdbuf_buffer *bd = rtems_bdbuf_get_buffer_for_read_ahead( + dd, + media_block + ); - if (bd != NULL) - { + if ( bd != NULL ) { uint32_t transfer_count = dd->read_ahead.nr_blocks; uint32_t blocks_until_end_of_disk = dd->block_count - block; uint32_t max_transfer_count = bdbuf_config.max_read_ahead_blocks; - if (transfer_count == RTEMS_DISK_READ_AHEAD_SIZE_AUTO) { + if ( transfer_count == RTEMS_DISK_READ_AHEAD_SIZE_AUTO ) { transfer_count = blocks_until_end_of_disk; - if (transfer_count >= max_transfer_count) - { + if ( transfer_count >= max_transfer_count ) { transfer_count = max_transfer_count; dd->read_ahead.trigger = block + transfer_count / 2; dd->read_ahead.next = block + transfer_count; - } - else - { + } else { dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER; } } else { - if (transfer_count > blocks_until_end_of_disk) { + if ( transfer_count > blocks_until_end_of_disk ) { transfer_count = blocks_until_end_of_disk; } - if (transfer_count > max_transfer_count) { + if ( transfer_count > max_transfer_count ) { transfer_count = max_transfer_count; } @@ -3008,32 +3035,32 @@ rtems_bdbuf_read_ahead_task (rtems_task_argument arg) } ++dd->stats.read_ahead_transfers; - rtems_bdbuf_execute_read_request (dd, bd, transfer_count); + rtems_bdbuf_execute_read_request( dd, bd, transfer_count ); } - } - else - { + } else { dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER; } } - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); } rtems_task_exit(); } -void rtems_bdbuf_get_device_stats (const rtems_disk_device *dd, - rtems_blkdev_stats *stats) +void rtems_bdbuf_get_device_stats( + const rtems_disk_device *dd, + rtems_blkdev_stats *stats +) { - rtems_bdbuf_lock_cache (); + rtems_bdbuf_lock_cache(); *stats = dd->stats; - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_unlock_cache(); } -void rtems_bdbuf_reset_device_stats (rtems_disk_device *dd) +void rtems_bdbuf_reset_device_stats( rtems_disk_device *dd ) { - rtems_bdbuf_lock_cache (); - memset (&dd->stats, 0, sizeof(dd->stats)); - rtems_bdbuf_unlock_cache (); + rtems_bdbuf_lock_cache(); + memset( &dd->stats, 0, sizeof( dd->stats ) ); + rtems_bdbuf_unlock_cache(); } diff --git a/cpukit/libblock/src/bdpart-create.c b/cpukit/libblock/src/bdpart-create.c index 2e34140f7d..b0583889cc 100644 --- a/cpukit/libblock/src/bdpart-create.c +++ b/cpukit/libblock/src/bdpart-create.c @@ -41,66 +41,67 @@ #include rtems_status_code rtems_bdpart_create( - const char *disk_name, + const char *disk_name, const rtems_bdpart_format *format, - rtems_bdpart_partition *pt, - const unsigned *dist, - size_t count + rtems_bdpart_partition *pt, + const unsigned *dist, + size_t count ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - bool dos_compatibility = format != NULL - && format->type == RTEMS_BDPART_FORMAT_MBR - && format->mbr.dos_compatibility; + bool dos_compatibility = format != NULL && + format->type == RTEMS_BDPART_FORMAT_MBR && + format->mbr.dos_compatibility; rtems_blkdev_bnum disk_end = 0; rtems_blkdev_bnum pos = 0; rtems_blkdev_bnum dist_sum = 0; - rtems_blkdev_bnum record_space = - dos_compatibility ? RTEMS_BDPART_MBR_CYLINDER_SIZE : 1; + rtems_blkdev_bnum record_space = dos_compatibility + ? RTEMS_BDPART_MBR_CYLINDER_SIZE + : 1; rtems_blkdev_bnum overhead = 0; rtems_blkdev_bnum free_space = 0; - size_t i = 0; + size_t i = 0; /* Check if we have something to do */ - if (count == 0) { + if ( count == 0 ) { /* Nothing to do */ return RTEMS_SUCCESSFUL; } /* Check parameter */ - if (format == NULL || pt == NULL || dist == NULL) { + if ( format == NULL || pt == NULL || dist == NULL ) { return RTEMS_INVALID_ADDRESS; } /* Get disk data */ - sc = rtems_bdpart_get_disk_data( disk_name, NULL, NULL, &disk_end); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_get_disk_data( disk_name, NULL, NULL, &disk_end ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; } /* Get distribution sum and check for overflow */ - for (i = 0; i < count; ++i) { + for ( i = 0; i < count; ++i ) { unsigned prev_sum = dist_sum; - dist_sum += dist [i]; + dist_sum += dist[ i ]; - if (dist_sum < prev_sum) { + if ( dist_sum < prev_sum ) { return RTEMS_INVALID_NUMBER; } - if (dist [i] == 0) { + if ( dist[ i ] == 0 ) { return RTEMS_INVALID_NUMBER; } } /* Check format */ - if (format->type != RTEMS_BDPART_FORMAT_MBR) { + if ( format->type != RTEMS_BDPART_FORMAT_MBR ) { return RTEMS_NOT_IMPLEMENTED; } /* Align end of disk on cylinder boundary if necessary */ - if (dos_compatibility) { - disk_end -= (disk_end % record_space); + if ( dos_compatibility ) { + disk_end -= ( disk_end % record_space ); } /* @@ -113,20 +114,20 @@ rtems_status_code rtems_bdpart_create( * In case we need an extended partition and logical partitions we have to * account for the space of each EBR. */ - if (count > 4) { - overhead += (count - 3) * record_space; + if ( count > 4 ) { + overhead += ( count - 3 ) * record_space; } /* * Account space to align every partition on cylinder boundaries if * necessary. */ - if (dos_compatibility) { - overhead += (count - 1) * record_space; + if ( dos_compatibility ) { + overhead += ( count - 1 ) * record_space; } /* Check disk space */ - if ((overhead + count) > disk_end) { + if ( ( overhead + count ) > disk_end ) { return RTEMS_IO_ERROR; } @@ -136,27 +137,27 @@ rtems_status_code rtems_bdpart_create( /* Space for partitions */ free_space = disk_end - overhead; - for (i = 0; i < count; ++i) { + for ( i = 0; i < count; ++i ) { rtems_bdpart_partition *p = pt + i; /* Partition size */ - rtems_blkdev_bnum s = free_space * dist [i]; - if (s < free_space || s < dist [i]) { + rtems_blkdev_bnum s = free_space * dist[ i ]; + if ( s < free_space || s < dist[ i ] ) { /* TODO: Calculate without overflow */ return RTEMS_INVALID_NUMBER; } s /= dist_sum; /* Ensure that the partition is not empty */ - if (s == 0) { + if ( s == 0 ) { s = 1; } /* Align partition upwards */ - s += record_space - (s % record_space); + s += record_space - ( s % record_space ); /* Reserve space for the EBR if necessary */ - if (count > 4 && i > 2) { + if ( count > 4 && i > 2 ) { pos += record_space; } @@ -167,7 +168,7 @@ rtems_status_code rtems_bdpart_create( } /* Expand the last partition to the disk end */ - pt [count - 1].end = disk_end; + pt[ count - 1 ].end = disk_end; return RTEMS_SUCCESSFUL; } diff --git a/cpukit/libblock/src/bdpart-dump.c b/cpukit/libblock/src/bdpart-dump.c index b0e145cfd6..30dc682539 100644 --- a/cpukit/libblock/src/bdpart-dump.c +++ b/cpukit/libblock/src/bdpart-dump.c @@ -43,15 +43,12 @@ #include #include -static void rtems_bdpart_type_to_string( - const uuid_t type, - char str [37] -) +static void rtems_bdpart_type_to_string( const uuid_t type, char str[ 37 ] ) { - uuid_unparse_lower( type, str); + uuid_unparse_lower( type, str ); } -void rtems_bdpart_dump( const rtems_bdpart_partition *pt, size_t count) +void rtems_bdpart_dump( const rtems_bdpart_partition *pt, size_t count ) { size_t i = 0; @@ -63,14 +60,14 @@ void rtems_bdpart_dump( const rtems_bdpart_partition *pt, size_t count) "------------+------------+-----------------------------------------------------\n" ); - for (i = 0; i < count; ++i) { + for ( i = 0; i < count; ++i ) { const rtems_bdpart_partition *p = pt + i; - const char *type = NULL; - char type_buffer [52]; - uint8_t type_mbr = 0; + const char *type = NULL; + char type_buffer[ 52 ]; + uint8_t type_mbr = 0; - if (rtems_bdpart_to_mbr_partition_type( p->type, &type_mbr)) { - switch (type_mbr) { + if ( rtems_bdpart_to_mbr_partition_type( p->type, &type_mbr ) ) { + switch ( type_mbr ) { case RTEMS_BDPART_MBR_FAT_12: type = "FAT 12"; break; @@ -90,12 +87,17 @@ void rtems_bdpart_dump( const rtems_bdpart_partition *pt, size_t count) type = "DATA"; break; default: - snprintf( type_buffer, sizeof( type_buffer), "0x%02" PRIx8, type_mbr); + snprintf( + type_buffer, + sizeof( type_buffer ), + "0x%02" PRIx8, + type_mbr + ); type = type_buffer; break; } } else { - rtems_bdpart_type_to_string( p->type, type_buffer); + rtems_bdpart_type_to_string( p->type, type_buffer ); type = type_buffer; } @@ -107,5 +109,7 @@ void rtems_bdpart_dump( const rtems_bdpart_partition *pt, size_t count) ); } - puts( "------------+------------+-----------------------------------------------------"); + puts( + "------------+------------+-----------------------------------------------------" + ); } diff --git a/cpukit/libblock/src/bdpart-read.c b/cpukit/libblock/src/bdpart-read.c index 06e993b9fd..e85d303169 100644 --- a/cpukit/libblock/src/bdpart-read.c +++ b/cpukit/libblock/src/bdpart-read.c @@ -46,64 +46,71 @@ #include #include -#define RTEMS_BDPART_MBR_PARTITION_TYPE( type) \ - { \ - (type), 0xa2U, 0x2eU, 0x38U, \ - 0x38U, 0xb5U, 0xdeU, 0x11U, \ - 0xbcU, 0x13U, 0x00U, 0x1dU, \ - 0x09U, 0xb0U, 0x5fU, 0xa4U \ - } +#define RTEMS_BDPART_MBR_PARTITION_TYPE( type ) \ + { ( type ), \ + 0xa2U, \ + 0x2eU, \ + 0x38U, \ + 0x38U, \ + 0xb5U, \ + 0xdeU, \ + 0x11U, \ + 0xbcU, \ + 0x13U, \ + 0x00U, \ + 0x1dU, \ + 0x09U, \ + 0xb0U, \ + 0x5fU, \ + 0xa4U } static const uuid_t RTEMS_BDPART_MBR_MASTER_TYPE = - RTEMS_BDPART_MBR_PARTITION_TYPE( RTEMS_BDPART_MBR_EMPTY); + RTEMS_BDPART_MBR_PARTITION_TYPE( RTEMS_BDPART_MBR_EMPTY ); -void rtems_bdpart_to_partition_type( uint8_t mbr_type, uuid_t type) +void rtems_bdpart_to_partition_type( uint8_t mbr_type, uuid_t type ) { - type [0] = mbr_type; - memcpy( type + 1, RTEMS_BDPART_MBR_MASTER_TYPE + 1, sizeof( uuid_t) - 1); + type[ 0 ] = mbr_type; + memcpy( type + 1, RTEMS_BDPART_MBR_MASTER_TYPE + 1, sizeof( uuid_t ) - 1 ); } -bool rtems_bdpart_to_mbr_partition_type( - const uuid_t type, - uint8_t *mbr_type -) +bool rtems_bdpart_to_mbr_partition_type( const uuid_t type, uint8_t *mbr_type ) { - *mbr_type = rtems_bdpart_mbr_partition_type( type); + *mbr_type = rtems_bdpart_mbr_partition_type( type ); return memcmp( - type + 1, - RTEMS_BDPART_MBR_MASTER_TYPE + 1, - sizeof( uuid_t) - 1 - ) == 0; + type + 1, + RTEMS_BDPART_MBR_MASTER_TYPE + 1, + sizeof( uuid_t ) - 1 + ) == 0; } /* * FIXME: This code should the deviceio interface and not the bdbug interface. */ rtems_status_code rtems_bdpart_get_disk_data( - const char *disk_name, - int *fd_ptr, + const char *disk_name, + int *fd_ptr, rtems_disk_device **dd_ptr, - rtems_blkdev_bnum *disk_end + rtems_blkdev_bnum *disk_end ) { - rtems_status_code sc = RTEMS_SUCCESSFUL; - int rv = 0; - int fd; + rtems_status_code sc = RTEMS_SUCCESSFUL; + int rv = 0; + int fd; rtems_disk_device *dd = NULL; - rtems_blkdev_bnum disk_begin = 0; - rtems_blkdev_bnum block_size = 0; + rtems_blkdev_bnum disk_begin = 0; + rtems_blkdev_bnum block_size = 0; /* Open device file */ - fd = open( disk_name, O_RDWR); - if (fd < 0) { + fd = open( disk_name, O_RDWR ); + if ( fd < 0 ) { sc = RTEMS_INVALID_NAME; goto out; } /* Get disk handle */ - rv = rtems_disk_fd_get_disk_device( fd, &dd); - if (rv != 0) { + rv = rtems_disk_fd_get_disk_device( fd, &dd ); + if ( rv != 0 ) { sc = RTEMS_INVALID_NAME; goto error; } @@ -114,45 +121,46 @@ rtems_status_code rtems_bdpart_get_disk_data( block_size = dd->block_size; /* Check block size */ - if (block_size < RTEMS_BDPART_BLOCK_SIZE) { + if ( block_size < RTEMS_BDPART_BLOCK_SIZE ) { sc = RTEMS_IO_ERROR; goto error; } /* Check that we have do not have a logical disk */ - if (disk_begin != 0) { + if ( disk_begin != 0 ) { sc = RTEMS_IO_ERROR; goto error; } error: - if (sc == RTEMS_SUCCESSFUL && fd_ptr != NULL && dd_ptr != NULL) { + if ( sc == RTEMS_SUCCESSFUL && fd_ptr != NULL && dd_ptr != NULL ) { *fd_ptr = fd; *dd_ptr = dd; } else { - close( fd); + close( fd ); } out: return sc; } -static bool rtems_bdpart_is_valid_record( const uint8_t *data) +static bool rtems_bdpart_is_valid_record( const uint8_t *data ) { - return data [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_0] - == RTEMS_BDPART_MBR_SIGNATURE_0 - && data [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_1] - == RTEMS_BDPART_MBR_SIGNATURE_1; + return data[ RTEMS_BDPART_MBR_OFFSET_SIGNATURE_0 ] == + RTEMS_BDPART_MBR_SIGNATURE_0 && + data[ RTEMS_BDPART_MBR_OFFSET_SIGNATURE_1 ] == + RTEMS_BDPART_MBR_SIGNATURE_1; } -static rtems_blkdev_bnum rtems_bdpart_next_ebr( const uint8_t *data) +static rtems_blkdev_bnum rtems_bdpart_next_ebr( const uint8_t *data ) { - rtems_blkdev_bnum begin = - rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN); - uint8_t type = data [RTEMS_BDPART_MBR_OFFSET_TYPE]; + rtems_blkdev_bnum begin = rtems_uint32_from_little_endian( + data + RTEMS_BDPART_MBR_OFFSET_BEGIN + ); + uint8_t type = data[ RTEMS_BDPART_MBR_OFFSET_TYPE ]; - if (type == RTEMS_BDPART_MBR_EXTENDED) { + if ( type == RTEMS_BDPART_MBR_EXTENDED ) { return begin; } else { return 0; @@ -160,65 +168,67 @@ static rtems_blkdev_bnum rtems_bdpart_next_ebr( const uint8_t *data) } static rtems_status_code rtems_bdpart_read_mbr_partition( - const uint8_t *data, - rtems_bdpart_partition **p, + const uint8_t *data, + rtems_bdpart_partition **p, const rtems_bdpart_partition *p_end, - rtems_blkdev_bnum *ep_begin + rtems_blkdev_bnum *ep_begin ) { - rtems_blkdev_bnum begin = - rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_BEGIN); - rtems_blkdev_bnum size = - rtems_uint32_from_little_endian( data + RTEMS_BDPART_MBR_OFFSET_SIZE); + rtems_blkdev_bnum begin = rtems_uint32_from_little_endian( + data + RTEMS_BDPART_MBR_OFFSET_BEGIN + ); + rtems_blkdev_bnum size = rtems_uint32_from_little_endian( + data + RTEMS_BDPART_MBR_OFFSET_SIZE + ); rtems_blkdev_bnum end = begin + size; - uint8_t type = data [RTEMS_BDPART_MBR_OFFSET_TYPE]; + uint8_t type = data[ RTEMS_BDPART_MBR_OFFSET_TYPE ]; - if (type == RTEMS_BDPART_MBR_EMPTY) { + if ( type == RTEMS_BDPART_MBR_EMPTY ) { return RTEMS_SUCCESSFUL; - } else if (*p == p_end) { + } else if ( *p == p_end ) { return RTEMS_TOO_MANY; - } else if (begin >= end) { + } else if ( begin >= end ) { return RTEMS_IO_ERROR; - } else if (type == RTEMS_BDPART_MBR_EXTENDED) { - if (ep_begin != NULL) { + } else if ( type == RTEMS_BDPART_MBR_EXTENDED ) { + if ( ep_begin != NULL ) { *ep_begin = begin; } } else { /* Increment partition index */ - ++(*p); + ++( *p ); /* Clear partition */ - memset( *p, 0, sizeof( rtems_bdpart_partition)); + memset( *p, 0, sizeof( rtems_bdpart_partition ) ); /* Set values */ - (*p)->begin = begin; - (*p)->end = end; - rtems_bdpart_to_partition_type( type, (*p)->type); - (*p)->flags = data [RTEMS_BDPART_MBR_OFFSET_FLAGS]; + ( *p )->begin = begin; + ( *p )->end = end; + rtems_bdpart_to_partition_type( type, ( *p )->type ); + ( *p )->flags = data[ RTEMS_BDPART_MBR_OFFSET_FLAGS ]; } return RTEMS_SUCCESSFUL; } static rtems_status_code rtems_bdpart_read_record( - rtems_disk_device *dd, - rtems_blkdev_bnum index, + rtems_disk_device *dd, + rtems_blkdev_bnum index, rtems_bdbuf_buffer **block ) { rtems_status_code sc = RTEMS_SUCCESSFUL; /* Release previous block if necessary */ - if (*block != NULL) { - sc = rtems_bdbuf_release( *block); - if (sc != RTEMS_SUCCESSFUL) { + if ( *block != NULL ) { + sc = rtems_bdbuf_release( *block ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; } } /* Read the record block */ - sc = rtems_bdbuf_read( dd, index, block); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdbuf_read( dd, index, block ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; } @@ -228,7 +238,7 @@ static rtems_status_code rtems_bdpart_read_record( } /* Check MBR signature */ - if (!rtems_bdpart_is_valid_record( (*block)->buffer)) { + if ( !rtems_bdpart_is_valid_record( ( *block )->buffer ) ) { return RTEMS_IO_ERROR; } @@ -236,27 +246,27 @@ static rtems_status_code rtems_bdpart_read_record( } rtems_status_code rtems_bdpart_read( - const char *disk_name, - rtems_bdpart_format *format, + const char *disk_name, + rtems_bdpart_format *format, rtems_bdpart_partition *pt, - size_t *count + size_t *count ) { - rtems_status_code sc = RTEMS_SUCCESSFUL; - rtems_status_code esc = RTEMS_SUCCESSFUL; - rtems_bdbuf_buffer *block = NULL; - rtems_bdpart_partition *p = pt - 1; - const rtems_bdpart_partition *p_end = pt + (count != NULL ? *count : 0); - rtems_blkdev_bnum ep_begin = 0; /* Extended partition begin */ - rtems_blkdev_bnum ebr = 0; /* Extended boot record block index */ - rtems_blkdev_bnum disk_end = 0; - size_t i = 0; - const uint8_t *data = NULL; - int fd = -1; - rtems_disk_device *dd = NULL; + rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_status_code esc = RTEMS_SUCCESSFUL; + rtems_bdbuf_buffer *block = NULL; + rtems_bdpart_partition *p = pt - 1; + const rtems_bdpart_partition *p_end = pt + ( count != NULL ? *count : 0 ); + rtems_blkdev_bnum ep_begin = 0; /* Extended partition begin */ + rtems_blkdev_bnum ebr = 0; /* Extended boot record block index */ + rtems_blkdev_bnum disk_end = 0; + size_t i = 0; + const uint8_t *data = NULL; + int fd = -1; + rtems_disk_device *dd = NULL; /* Check parameter */ - if (format == NULL || pt == NULL || count == NULL) { + if ( format == NULL || pt == NULL || count == NULL ) { return RTEMS_INVALID_ADDRESS; } @@ -264,28 +274,28 @@ rtems_status_code rtems_bdpart_read( *count = 0; /* Get disk data */ - sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; } /* Read MBR */ - sc = rtems_bdpart_read_record( dd, 0, &block); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_read_record( dd, 0, &block ); + if ( sc != RTEMS_SUCCESSFUL ) { esc = sc; goto cleanup; } /* Read the first partition entry */ data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0; - sc = rtems_bdpart_read_mbr_partition( data, &p, p_end, &ep_begin); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_read_mbr_partition( data, &p, p_end, &ep_begin ); + if ( sc != RTEMS_SUCCESSFUL ) { esc = sc; goto cleanup; } /* Determine if we have a MBR or GPT format */ - if (rtems_bdpart_mbr_partition_type( p->type) == RTEMS_BDPART_MBR_GPT) { + if ( rtems_bdpart_mbr_partition_type( p->type ) == RTEMS_BDPART_MBR_GPT ) { esc = RTEMS_NOT_IMPLEMENTED; goto cleanup; } @@ -298,11 +308,11 @@ rtems_status_code rtems_bdpart_read( format->mbr.dos_compatibility = true; /* Iterate through the rest of the primary partition table */ - for (i = 1; i < 4; ++i) { + for ( i = 1; i < 4; ++i ) { data += RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE; - sc = rtems_bdpart_read_mbr_partition( data, &p, p_end, &ep_begin); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_read_mbr_partition( data, &p, p_end, &ep_begin ); + if ( sc != RTEMS_SUCCESSFUL ) { esc = sc; goto cleanup; } @@ -310,12 +320,12 @@ rtems_status_code rtems_bdpart_read( /* Iterate through the logical partitions within the extended partition */ ebr = ep_begin; - while (ebr != 0) { + while ( ebr != 0 ) { rtems_blkdev_bnum tmp = 0; /* Read EBR */ - sc = rtems_bdpart_read_record( dd, ebr, &block); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_read_record( dd, ebr, &block ); + if ( sc != RTEMS_SUCCESSFUL ) { esc = sc; goto cleanup; } @@ -327,14 +337,14 @@ rtems_status_code rtems_bdpart_read( p_end, NULL ); - if (sc != RTEMS_SUCCESSFUL) { + if ( sc != RTEMS_SUCCESSFUL ) { esc = sc; goto cleanup; } /* Adjust partition begin */ tmp = p->begin + ebr; - if (tmp > p->begin) { + if ( tmp > p->begin ) { p->begin = tmp; } else { esc = RTEMS_IO_ERROR; @@ -343,7 +353,7 @@ rtems_status_code rtems_bdpart_read( /* Adjust partition end */ tmp = p->end + ebr; - if (tmp > p->end) { + if ( tmp > p->end ) { p->end = tmp; } else { esc = RTEMS_IO_ERROR; @@ -354,10 +364,10 @@ rtems_status_code rtems_bdpart_read( ebr = rtems_bdpart_next_ebr( block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_1 ); - if (ebr != 0) { + if ( ebr != 0 ) { /* Adjust partition EBR block index */ tmp = ebr + ep_begin; - if (tmp > ebr) { + if ( tmp > ebr ) { ebr = tmp; } else { esc = RTEMS_IO_ERROR; @@ -367,16 +377,16 @@ rtems_status_code rtems_bdpart_read( } /* Return partition count */ - *count = (size_t) (p - pt + 1); + *count = (size_t) ( p - pt + 1 ); cleanup: - if (fd >= 0) { - close( fd); + if ( fd >= 0 ) { + close( fd ); } - if (block != NULL) { - rtems_bdbuf_release( block); + if ( block != NULL ) { + rtems_bdbuf_release( block ); } return esc; diff --git a/cpukit/libblock/src/bdpart-register.c b/cpukit/libblock/src/bdpart-register.c index b3b1736045..9ce469e580 100644 --- a/cpukit/libblock/src/bdpart-register.c +++ b/cpukit/libblock/src/bdpart-register.c @@ -45,14 +45,16 @@ #include #include -static char *create_logical_disk_name( const char *disk_name, char **marker) +static char *create_logical_disk_name( const char *disk_name, char **marker ) { - size_t disk_name_size = strlen( disk_name); - char *logical_disk_name = malloc( disk_name_size + RTEMS_BDPART_NUMBER_SIZE); + size_t disk_name_size = strlen( disk_name ); + char *logical_disk_name = malloc( + disk_name_size + RTEMS_BDPART_NUMBER_SIZE + ); - if (logical_disk_name != NULL) { + if ( logical_disk_name != NULL ) { /* The string is NUL terminated by (A) ... */ - memcpy( logical_disk_name, disk_name, disk_name_size); + memcpy( logical_disk_name, disk_name, disk_name_size ); *marker = logical_disk_name + disk_name_size; } @@ -60,16 +62,16 @@ static char *create_logical_disk_name( const char *disk_name, char **marker) } static rtems_status_code update_logical_disk_name( - char *logical_disk_marker, + char *logical_disk_marker, size_t i ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - int rv = 0; + int rv = 0; /* ... (A) */ - rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1); - if (rv >= RTEMS_BDPART_NUMBER_SIZE) { + rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1 ); + if ( rv >= RTEMS_BDPART_NUMBER_SIZE ) { sc = RTEMS_INVALID_NAME; } @@ -77,23 +79,23 @@ static rtems_status_code update_logical_disk_name( } rtems_status_code rtems_bdpart_register( - const char *disk_name, + const char *disk_name, const rtems_bdpart_partition *pt, - size_t count + size_t count ) { - rtems_status_code sc = RTEMS_SUCCESSFUL; - rtems_status_code esc = RTEMS_SUCCESSFUL; - rtems_blkdev_bnum disk_end = 0; - char *logical_disk_name = NULL; - char *logical_disk_marker = NULL; - size_t i = 0; - int fd = -1; + rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_status_code esc = RTEMS_SUCCESSFUL; + rtems_blkdev_bnum disk_end = 0; + char *logical_disk_name = NULL; + char *logical_disk_marker = NULL; + size_t i = 0; + int fd = -1; rtems_disk_device *dd = NULL; /* Get disk data */ - sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; } @@ -102,18 +104,18 @@ rtems_status_code rtems_bdpart_register( disk_name, &logical_disk_marker ); - if (logical_disk_name == NULL) { + if ( logical_disk_name == NULL ) { esc = sc; goto cleanup; } /* Create a logical disk for each partition */ - for (i = 0; i < count; ++i) { + for ( i = 0; i < count; ++i ) { const rtems_bdpart_partition *p = pt + i; /* Set partition number for logical disk name */ - sc = update_logical_disk_name( logical_disk_marker, i); - if (sc != RTEMS_SUCCESSFUL) { + sc = update_logical_disk_name( logical_disk_marker, i ); + if ( sc != RTEMS_SUCCESSFUL ) { esc = sc; goto cleanup; } @@ -125,7 +127,7 @@ rtems_status_code rtems_bdpart_register( p->begin, p->end - p->begin ); - if (sc != RTEMS_SUCCESSFUL) { + if ( sc != RTEMS_SUCCESSFUL ) { esc = sc; goto cleanup; } @@ -133,47 +135,47 @@ rtems_status_code rtems_bdpart_register( cleanup: - free( logical_disk_name); - close( fd); + free( logical_disk_name ); + close( fd ); return esc; } -rtems_status_code rtems_bdpart_register_from_disk( const char *disk_name) +rtems_status_code rtems_bdpart_register_from_disk( const char *disk_name ) { - rtems_status_code sc = RTEMS_SUCCESSFUL; - rtems_bdpart_format format; - rtems_bdpart_partition pt [RTEMS_BDPART_PARTITION_NUMBER_HINT]; - size_t count = RTEMS_BDPART_PARTITION_NUMBER_HINT; + rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_bdpart_format format; + rtems_bdpart_partition pt[ RTEMS_BDPART_PARTITION_NUMBER_HINT ]; + size_t count = RTEMS_BDPART_PARTITION_NUMBER_HINT; /* Read partitions */ - sc = rtems_bdpart_read( disk_name, &format, pt, &count); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_read( disk_name, &format, pt, &count ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; } /* Register partitions */ - return rtems_bdpart_register( disk_name, pt, count); + return rtems_bdpart_register( disk_name, pt, count ); } rtems_status_code rtems_bdpart_unregister( - const char *disk_name, + const char *disk_name, const rtems_bdpart_partition *pt RTEMS_UNUSED, - size_t count + size_t count ) { - rtems_status_code sc = RTEMS_SUCCESSFUL; - rtems_status_code esc = RTEMS_SUCCESSFUL; - rtems_blkdev_bnum disk_end = 0; - char *logical_disk_name = NULL; - char *logical_disk_marker = NULL; - size_t i = 0; - int fd = -1; + rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_status_code esc = RTEMS_SUCCESSFUL; + rtems_blkdev_bnum disk_end = 0; + char *logical_disk_name = NULL; + char *logical_disk_marker = NULL; + size_t i = 0; + int fd = -1; rtems_disk_device *dd = NULL; /* Get disk data */ - sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; } @@ -182,25 +184,25 @@ rtems_status_code rtems_bdpart_unregister( disk_name, &logical_disk_marker ); - if (logical_disk_name == NULL) { + if ( logical_disk_name == NULL ) { esc = sc; goto cleanup; } /* Delete the logical disk for each partition */ - for (i = 0; i < count; ++i) { + for ( i = 0; i < count; ++i ) { int rv = 0; /* Set partition number for logical disk name */ - sc = update_logical_disk_name( logical_disk_marker, i); - if (sc != RTEMS_SUCCESSFUL) { + sc = update_logical_disk_name( logical_disk_marker, i ); + if ( sc != RTEMS_SUCCESSFUL ) { esc = sc; goto cleanup; } /* Delete logical disk */ - rv = unlink( logical_disk_name); - if (rv != 0) { + rv = unlink( logical_disk_name ); + if ( rv != 0 ) { esc = sc; goto cleanup; } @@ -212,9 +214,9 @@ cleanup: * When we get here, logical_disk_name is guaranteed to be non-NULL * but fd may be -1. Coverity flagged passing a bad value to close(). */ - free( logical_disk_name); - if (fd >= 0) { - close( fd); + free( logical_disk_name ); + if ( fd >= 0 ) { + close( fd ); } return esc; diff --git a/cpukit/libblock/src/bdpart-sort.c b/cpukit/libblock/src/bdpart-sort.c index 057ec0c6d4..f644ba679f 100644 --- a/cpukit/libblock/src/bdpart-sort.c +++ b/cpukit/libblock/src/bdpart-sort.c @@ -42,21 +42,21 @@ #include #include -static int rtems_bdpart_partition_compare( const void *aa, const void *bb) +static int rtems_bdpart_partition_compare( const void *aa, const void *bb ) { const rtems_bdpart_partition *a = aa; const rtems_bdpart_partition *b = bb; - if (a->begin < b->begin) { + if ( a->begin < b->begin ) { return -1; - } else if (a->begin == b->begin) { + } else if ( a->begin == b->begin ) { return 0; } else { return 1; } } -void rtems_bdpart_sort( rtems_bdpart_partition *pt, size_t count) +void rtems_bdpart_sort( rtems_bdpart_partition *pt, size_t count ) { - qsort( pt, count, sizeof( *pt), rtems_bdpart_partition_compare); + qsort( pt, count, sizeof( *pt ), rtems_bdpart_partition_compare ); } diff --git a/cpukit/libblock/src/bdpart-write.c b/cpukit/libblock/src/bdpart-write.c index 1456dab5d3..111f6e8de3 100644 --- a/cpukit/libblock/src/bdpart-write.c +++ b/cpukit/libblock/src/bdpart-write.c @@ -48,35 +48,35 @@ static void rtems_bdpart_write_mbr_partition( uint8_t *data, uint32_t begin, uint32_t size, - uint8_t type, - uint8_t flags + uint8_t type, + uint8_t flags ) { - rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN); - rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE); - data [RTEMS_BDPART_MBR_OFFSET_TYPE] = type; - data [RTEMS_BDPART_MBR_OFFSET_FLAGS] = flags; + rtems_uint32_to_little_endian( begin, data + RTEMS_BDPART_MBR_OFFSET_BEGIN ); + rtems_uint32_to_little_endian( size, data + RTEMS_BDPART_MBR_OFFSET_SIZE ); + data[ RTEMS_BDPART_MBR_OFFSET_TYPE ] = type; + data[ RTEMS_BDPART_MBR_OFFSET_FLAGS ] = flags; } static rtems_status_code rtems_bdpart_new_record( - rtems_disk_device *dd, - rtems_blkdev_bnum index, + rtems_disk_device *dd, + rtems_blkdev_bnum index, rtems_bdbuf_buffer **block ) { rtems_status_code sc = RTEMS_SUCCESSFUL; /* Synchronize previous block if necessary */ - if (*block != NULL) { - sc = rtems_bdbuf_sync( *block); - if (sc != RTEMS_SUCCESSFUL) { + if ( *block != NULL ) { + sc = rtems_bdbuf_sync( *block ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; } } /* Read the new record block (this accounts for disk block sizes > 512) */ - sc = rtems_bdbuf_read( dd, index, block); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdbuf_read( dd, index, block ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; } @@ -86,86 +86,87 @@ static rtems_status_code rtems_bdpart_new_record( } /* Clear record */ - memset( (*block)->buffer, 0, RTEMS_BDPART_BLOCK_SIZE); + memset( ( *block )->buffer, 0, RTEMS_BDPART_BLOCK_SIZE ); /* Write signature */ - (*block)->buffer [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_0] = + ( *block )->buffer[ RTEMS_BDPART_MBR_OFFSET_SIGNATURE_0 ] = RTEMS_BDPART_MBR_SIGNATURE_0; - (*block)->buffer [RTEMS_BDPART_MBR_OFFSET_SIGNATURE_1] = + ( *block )->buffer[ RTEMS_BDPART_MBR_OFFSET_SIGNATURE_1 ] = RTEMS_BDPART_MBR_SIGNATURE_1; return RTEMS_SUCCESSFUL; } rtems_status_code rtems_bdpart_write( - const char *disk_name, - const rtems_bdpart_format *format, + const char *disk_name, + const rtems_bdpart_format *format, const rtems_bdpart_partition *pt, - size_t count + size_t count ) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_status_code esc = RTEMS_SUCCESSFUL; - bool dos_compatibility = format != NULL - && format->type == RTEMS_BDPART_FORMAT_MBR - && format->mbr.dos_compatibility; + bool dos_compatibility = format != NULL && + format->type == RTEMS_BDPART_FORMAT_MBR && + format->mbr.dos_compatibility; rtems_bdbuf_buffer *block = NULL; - rtems_blkdev_bnum disk_end = 0; - rtems_blkdev_bnum record_space = - dos_compatibility ? RTEMS_BDPART_MBR_CYLINDER_SIZE : 1; - size_t ppc = 0; /* Primary partition count */ - size_t i = 0; - uint8_t *data = NULL; - int fd = -1; - rtems_disk_device *dd = NULL; + rtems_blkdev_bnum disk_end = 0; + rtems_blkdev_bnum record_space = dos_compatibility + ? RTEMS_BDPART_MBR_CYLINDER_SIZE + : 1; + size_t ppc = 0; /* Primary partition count */ + size_t i = 0; + uint8_t *data = NULL; + int fd = -1; + rtems_disk_device *dd = NULL; /* Check if we have something to do */ - if (count == 0) { + if ( count == 0 ) { /* Nothing to do */ return RTEMS_SUCCESSFUL; } /* Check parameter */ - if (format == NULL || pt == NULL) { + if ( format == NULL || pt == NULL ) { return RTEMS_INVALID_ADDRESS; } /* Get disk data */ - sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_get_disk_data( disk_name, &fd, &dd, &disk_end ); + if ( sc != RTEMS_SUCCESSFUL ) { return sc; } /* Align end of disk on cylinder boundary if necessary */ - if (dos_compatibility) { - disk_end -= (disk_end % record_space); + if ( dos_compatibility ) { + disk_end -= ( disk_end % record_space ); } /* Check that we have a consistent partition table */ - for (i = 0; i < count; ++i) { + for ( i = 0; i < count; ++i ) { const rtems_bdpart_partition *p = pt + i; /* Check that begin and end are proper within the disk */ - if (p->begin >= disk_end || p->end > disk_end) { + if ( p->begin >= disk_end || p->end > disk_end ) { esc = RTEMS_INVALID_NUMBER; goto cleanup; } /* Check that begin and end are valid */ - if (p->begin >= p->end) { + if ( p->begin >= p->end ) { esc = RTEMS_INVALID_NUMBER; goto cleanup; } /* Check that partitions do not overlap */ - if (i > 0 && pt [i - 1].end > p->begin) { + if ( i > 0 && pt[ i - 1 ].end > p->begin ) { esc = RTEMS_INVALID_NUMBER; goto cleanup; } } /* Check format */ - if (format->type != RTEMS_BDPART_FORMAT_MBR) { + if ( format->type != RTEMS_BDPART_FORMAT_MBR ) { esc = RTEMS_NOT_IMPLEMENTED; goto cleanup; } @@ -182,7 +183,7 @@ rtems_status_code rtems_bdpart_write( * Check that the first primary partition starts at head one and sector one * under the virtual one head and 63 sectors geometry if necessary. */ - if (dos_compatibility && pt [0].begin != RTEMS_BDPART_MBR_CYLINDER_SIZE) { + if ( dos_compatibility && pt[ 0 ].begin != RTEMS_BDPART_MBR_CYLINDER_SIZE ) { esc = RTEMS_INVALID_NUMBER; goto cleanup; } @@ -196,27 +197,27 @@ rtems_status_code rtems_bdpart_write( * compatibility resides between the partitions. So there have to be gaps of * the appropriate size between the partitions. */ - for (i = ppc; i < count; ++i) { - if ((pt [i].begin - pt [i - 1].end) < record_space) { + for ( i = ppc; i < count; ++i ) { + if ( ( pt[ i ].begin - pt[ i - 1 ].end ) < record_space ) { esc = RTEMS_INVALID_NUMBER; goto cleanup; } } /* Check that we can convert the parition descriptions to the MBR format */ - for (i = 0; i < count; ++i) { + for ( i = 0; i < count; ++i ) { uint8_t type = 0; const rtems_bdpart_partition *p = pt + i; /* Check type */ - if (!rtems_bdpart_to_mbr_partition_type( p->type, &type)) { - esc = RTEMS_INVALID_ID; + if ( !rtems_bdpart_to_mbr_partition_type( p->type, &type ) ) { + esc = RTEMS_INVALID_ID; goto cleanup; } /* Check flags */ - if (p->flags > 0xffU) { + if ( p->flags > 0xffU ) { esc = RTEMS_INVALID_ID; goto cleanup; } @@ -226,8 +227,8 @@ rtems_status_code rtems_bdpart_write( } /* New MBR */ - sc = rtems_bdpart_new_record( dd, 0, &block); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_new_record( dd, 0, &block ); + if ( sc != RTEMS_SUCCESSFUL ) { esc = sc; goto cleanup; } @@ -240,7 +241,7 @@ rtems_status_code rtems_bdpart_write( /* Write primary partition table */ data = block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0; - for (i = 0; i < ppc; ++i) { + for ( i = 0; i < ppc; ++i ) { const rtems_bdpart_partition *p = pt + i; /* Write partition entry */ @@ -248,7 +249,7 @@ rtems_status_code rtems_bdpart_write( data, p->begin, p->end - p->begin, - rtems_bdpart_mbr_partition_type( p->type), + rtems_bdpart_mbr_partition_type( p->type ), (uint8_t) p->flags ); @@ -256,11 +257,11 @@ rtems_status_code rtems_bdpart_write( } /* Write extended partition with logical partitions if necessary */ - if (ppc != count) { + if ( ppc != count ) { rtems_blkdev_bnum ebr = 0; /* Extended boot record block index */ /* Begin of extended partition */ - rtems_blkdev_bnum ep_begin = pt [ppc].begin - record_space; + rtems_blkdev_bnum ep_begin = pt[ ppc ].begin - record_space; /* Write extended partition */ rtems_bdpart_write_mbr_partition( @@ -272,11 +273,11 @@ rtems_status_code rtems_bdpart_write( ); /* Write logical partitions */ - for (i = ppc; i < count; ++i) { + for ( i = ppc; i < count; ++i ) { const rtems_bdpart_partition *p = pt + i; /* Write second partition entry */ - if (i > ppc) { + if ( i > ppc ) { rtems_blkdev_bnum begin = p->begin - record_space; rtems_bdpart_write_mbr_partition( @@ -290,8 +291,8 @@ rtems_status_code rtems_bdpart_write( /* New EBR */ ebr = p->begin - record_space; - sc = rtems_bdpart_new_record( dd, ebr, &block); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_bdpart_new_record( dd, ebr, &block ); + if ( sc != RTEMS_SUCCESSFUL ) { esc = sc; goto cleanup; } @@ -301,7 +302,7 @@ rtems_status_code rtems_bdpart_write( block->buffer + RTEMS_BDPART_MBR_OFFSET_TABLE_0, record_space, p->end - p->begin, - rtems_bdpart_mbr_partition_type( p->type), + rtems_bdpart_mbr_partition_type( p->type ), (uint8_t) p->flags ); } @@ -309,12 +310,12 @@ rtems_status_code rtems_bdpart_write( cleanup: - if (fd >= 0) { - close( fd); + if ( fd >= 0 ) { + close( fd ); } - if (block != NULL) { - rtems_bdbuf_sync( block); + if ( block != NULL ) { + rtems_bdbuf_sync( block ); } return esc; diff --git a/cpukit/libblock/src/blkdev-blkstats.c b/cpukit/libblock/src/blkdev-blkstats.c index b850fc2a95..1659154dca 100644 --- a/cpukit/libblock/src/blkdev-blkstats.c +++ b/cpukit/libblock/src/blkdev-blkstats.c @@ -45,34 +45,42 @@ #include #include -void rtems_blkstats(const rtems_printer* printer, const char *device, bool reset) +void rtems_blkstats( + const rtems_printer *printer, + const char *device, + bool reset +) { - int fd = open(device, O_RDONLY); + int fd = open( device, O_RDONLY ); - if (fd >= 0) { + if ( fd >= 0 ) { struct stat st; - int rv; + int rv; - rv = fstat(fd, &st); - if (rv == 0) { - if (S_ISBLK(st.st_mode)) { - if (reset) { - rv = rtems_disk_fd_reset_device_stats(fd); - if (rv != 0) { - rtems_printf(printer, "error: reset stats: %s\n", strerror(errno)); + rv = fstat( fd, &st ); + if ( rv == 0 ) { + if ( S_ISBLK( st.st_mode ) ) { + if ( reset ) { + rv = rtems_disk_fd_reset_device_stats( fd ); + if ( rv != 0 ) { + rtems_printf( + printer, + "error: reset stats: %s\n", + strerror( errno ) + ); } } else { - uint32_t media_block_size = 0; - uint32_t media_block_count = 0; - uint32_t block_size = 0; + uint32_t media_block_size = 0; + uint32_t media_block_count = 0; + uint32_t block_size = 0; rtems_blkdev_stats stats; - rtems_disk_fd_get_media_block_size(fd, &media_block_size); - rtems_disk_fd_get_block_count(fd, &media_block_count); - rtems_disk_fd_get_block_size(fd, &block_size); + rtems_disk_fd_get_media_block_size( fd, &media_block_size ); + rtems_disk_fd_get_block_count( fd, &media_block_count ); + rtems_disk_fd_get_block_size( fd, &block_size ); - rv = rtems_disk_fd_get_device_stats(fd, &stats); - if (rv == 0) { + rv = rtems_disk_fd_get_device_stats( fd, &stats ); + if ( rv == 0 ) { rtems_blkdev_print_stats( &stats, media_block_size, @@ -81,21 +89,29 @@ void rtems_blkstats(const rtems_printer* printer, const char *device, bool reset printer ); } else { - rtems_printf(printer, "error: get stats: %s\n", strerror(errno)); + rtems_printf( + printer, + "error: get stats: %s\n", + strerror( errno ) + ); } } } else { - rtems_printf(printer, "error: not a block device\n"); + rtems_printf( printer, "error: not a block device\n" ); } } else { - rtems_printf(printer, "error: get file stats: %s\n", strerror(errno)); + rtems_printf( + printer, + "error: get file stats: %s\n", + strerror( errno ) + ); } - rv = close(fd); - if (rv != 0) { - rtems_printf(printer, "error: close device: %s\n", strerror(errno)); + rv = close( fd ); + if ( rv != 0 ) { + rtems_printf( printer, "error: close device: %s\n", strerror( errno ) ); } } else { - rtems_printf(printer, "error: open device: %s\n", strerror(errno)); + rtems_printf( printer, "error: open device: %s\n", strerror( errno ) ); } } diff --git a/cpukit/libblock/src/blkdev-imfs.c b/cpukit/libblock/src/blkdev-imfs.c index e562619d4d..e54c59dbc1 100644 --- a/cpukit/libblock/src/blkdev-imfs.c +++ b/cpukit/libblock/src/blkdev-imfs.c @@ -49,40 +49,40 @@ typedef struct { rtems_disk_device dd; - int fd; + int fd; } rtems_blkdev_imfs_context; static ssize_t rtems_blkdev_imfs_read( rtems_libio_t *iop, - void *buffer, - size_t count + void *buffer, + size_t count ) { - int rv; - rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop); - rtems_disk_device *dd = &ctx->dd; - ssize_t remaining = (ssize_t) count; - off_t offset = iop->offset; - ssize_t block_size = (ssize_t) rtems_disk_get_block_size(dd); - rtems_blkdev_bnum block = (rtems_blkdev_bnum) (offset / block_size); - ssize_t block_offset = (ssize_t) (offset % block_size); - char *dst = buffer; + int rv; + rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop( iop ); + rtems_disk_device *dd = &ctx->dd; + ssize_t remaining = (ssize_t) count; + off_t offset = iop->offset; + ssize_t block_size = (ssize_t) rtems_disk_get_block_size( dd ); + rtems_blkdev_bnum block = (rtems_blkdev_bnum) ( offset / block_size ); + ssize_t block_offset = (ssize_t) ( offset % block_size ); + char *dst = buffer; - while (remaining > 0) { + while ( remaining > 0 ) { rtems_bdbuf_buffer *bd; - rtems_status_code sc = rtems_bdbuf_read(dd, block, &bd); + rtems_status_code sc = rtems_bdbuf_read( dd, block, &bd ); - if (sc == RTEMS_SUCCESSFUL) { + if ( sc == RTEMS_SUCCESSFUL ) { ssize_t copy = block_size - block_offset; - if (copy > remaining) { + if ( copy > remaining ) { copy = remaining; } - memcpy(dst, (char *) bd->buffer + block_offset, (size_t) copy); + memcpy( dst, (char *) bd->buffer + block_offset, (size_t) copy ); - sc = rtems_bdbuf_release(bd); - if (sc == RTEMS_SUCCESSFUL) { + sc = rtems_bdbuf_release( bd ); + if ( sc == RTEMS_SUCCESSFUL ) { block_offset = 0; remaining -= copy; dst += copy; @@ -95,7 +95,7 @@ static ssize_t rtems_blkdev_imfs_read( } } - if (remaining >= 0) { + if ( remaining >= 0 ) { iop->offset += count; rv = (ssize_t) count; } else { @@ -108,41 +108,41 @@ static ssize_t rtems_blkdev_imfs_read( static ssize_t rtems_blkdev_imfs_write( rtems_libio_t *iop, - const void *buffer, - size_t count + const void *buffer, + size_t count ) { - int rv; - rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop); - rtems_disk_device *dd = &ctx->dd; - ssize_t remaining = (ssize_t) count; - off_t offset = iop->offset; - ssize_t block_size = (ssize_t) rtems_disk_get_block_size(dd); - rtems_blkdev_bnum block = (rtems_blkdev_bnum) (offset / block_size); - ssize_t block_offset = (ssize_t) (offset % block_size); - const char *src = buffer; + int rv; + rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop( iop ); + rtems_disk_device *dd = &ctx->dd; + ssize_t remaining = (ssize_t) count; + off_t offset = iop->offset; + ssize_t block_size = (ssize_t) rtems_disk_get_block_size( dd ); + rtems_blkdev_bnum block = (rtems_blkdev_bnum) ( offset / block_size ); + ssize_t block_offset = (ssize_t) ( offset % block_size ); + const char *src = buffer; - while (remaining > 0) { - rtems_status_code sc; + while ( remaining > 0 ) { + rtems_status_code sc; rtems_bdbuf_buffer *bd; - if (block_offset == 0 && remaining >= block_size) { - sc = rtems_bdbuf_get(dd, block, &bd); + if ( block_offset == 0 && remaining >= block_size ) { + sc = rtems_bdbuf_get( dd, block, &bd ); } else { - sc = rtems_bdbuf_read(dd, block, &bd); + sc = rtems_bdbuf_read( dd, block, &bd ); } - if (sc == RTEMS_SUCCESSFUL) { + if ( sc == RTEMS_SUCCESSFUL ) { ssize_t copy = block_size - block_offset; - if (copy > remaining) { + if ( copy > remaining ) { copy = remaining; } - memcpy((char *) bd->buffer + block_offset, src, (size_t) copy); + memcpy( (char *) bd->buffer + block_offset, src, (size_t) copy ); - sc = rtems_bdbuf_release_modified(bd); - if (sc == RTEMS_SUCCESSFUL) { + sc = rtems_bdbuf_release_modified( bd ); + if ( sc == RTEMS_SUCCESSFUL ) { block_offset = 0; remaining -= copy; src += copy; @@ -155,7 +155,7 @@ static ssize_t rtems_blkdev_imfs_write( } } - if (remaining >= 0) { + if ( remaining >= 0 ) { iop->offset += count; rv = (ssize_t) count; } else { @@ -167,18 +167,18 @@ static ssize_t rtems_blkdev_imfs_write( } static int rtems_blkdev_imfs_ioctl( - rtems_libio_t *iop, + rtems_libio_t *iop, ioctl_command_t request, - void *buffer + void *buffer ) { int rv = 0; - if (request != RTEMS_BLKIO_REQUEST) { - rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop); - rtems_disk_device *dd = &ctx->dd; + if ( request != RTEMS_BLKIO_REQUEST ) { + rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop( iop ); + rtems_disk_device *dd = &ctx->dd; - rv = (*dd->ioctl)(dd, request, buffer); + rv = ( *dd->ioctl )( dd, request, buffer ); } else { /* * It is not allowed to directly access the driver circumventing the cache. @@ -192,35 +192,33 @@ static int rtems_blkdev_imfs_ioctl( static int rtems_blkdev_imfs_fstat( const rtems_filesystem_location_info_t *loc, - struct stat *buf + struct stat *buf ) { rtems_blkdev_imfs_context *ctx; - rtems_disk_device *dd; - IMFS_jnode_t *node; + rtems_disk_device *dd; + IMFS_jnode_t *node; - ctx = IMFS_generic_get_context_by_location(loc); + ctx = IMFS_generic_get_context_by_location( loc ); dd = &ctx->dd; - buf->st_blksize = rtems_disk_get_block_size(dd); - buf->st_blocks = rtems_disk_get_block_count(dd); + buf->st_blksize = rtems_disk_get_block_size( dd ); + buf->st_blocks = rtems_disk_get_block_count( dd ); node = loc->node_access; - buf->st_rdev = IMFS_generic_get_device_identifier_by_node(node); + buf->st_rdev = IMFS_generic_get_device_identifier_by_node( node ); - return IMFS_stat(loc, buf); + return IMFS_stat( loc, buf ); } -static int rtems_blkdev_imfs_fsync_or_fdatasync( - rtems_libio_t *iop -) +static int rtems_blkdev_imfs_fsync_or_fdatasync( rtems_libio_t *iop ) { - int rv = 0; - rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop(iop); - rtems_disk_device *dd = &ctx->dd; - rtems_status_code sc = rtems_bdbuf_syncdev(dd); + int rv = 0; + rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_iop( iop ); + rtems_disk_device *dd = &ctx->dd; + rtems_status_code sc = rtems_bdbuf_syncdev( dd ); - if (sc != RTEMS_SUCCESSFUL) { + if ( sc != RTEMS_SUCCESSFUL ) { errno = EIO; rv = -1; } @@ -249,65 +247,65 @@ static const rtems_filesystem_file_handlers_r rtems_blkdev_imfs_node = { static IMFS_jnode_t *rtems_blkdev_imfs_initialize( IMFS_jnode_t *node, - void *arg + void *arg ) { rtems_blkdev_imfs_context *ctx; - rtems_disk_device *dd; + rtems_disk_device *dd; - node = IMFS_node_initialize_generic(node, arg); + node = IMFS_node_initialize_generic( node, arg ); - ctx = IMFS_generic_get_context_by_node(node); + ctx = IMFS_generic_get_context_by_node( node ); dd = &ctx->dd; - dd->dev = IMFS_generic_get_device_identifier_by_node(node); + dd->dev = IMFS_generic_get_device_identifier_by_node( node ); return node; } -static void rtems_blkdev_imfs_destroy(IMFS_jnode_t *node) +static void rtems_blkdev_imfs_destroy( IMFS_jnode_t *node ) { - rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_node(node); - rtems_disk_device *dd = &ctx->dd; + rtems_blkdev_imfs_context *ctx = IMFS_generic_get_context_by_node( node ); + rtems_disk_device *dd = &ctx->dd; - (void) rtems_bdbuf_syncdev(dd); - rtems_bdbuf_purge_dev(dd); + (void) rtems_bdbuf_syncdev( dd ); + rtems_bdbuf_purge_dev( dd ); - if (ctx->fd >= 0) { - close(ctx->fd); + if ( ctx->fd >= 0 ) { + close( ctx->fd ); } else { - (*dd->ioctl)(dd, RTEMS_BLKIO_DELETED, NULL); + ( *dd->ioctl )( dd, RTEMS_BLKIO_DELETED, NULL ); } - free(ctx); + free( ctx ); - IMFS_node_destroy_default(node); + IMFS_node_destroy_default( node ); } -static const IMFS_node_control rtems_blkdev_imfs_control = - IMFS_GENERIC_INITIALIZER( +static const IMFS_node_control + rtems_blkdev_imfs_control = IMFS_GENERIC_INITIALIZER( &rtems_blkdev_imfs_node, rtems_blkdev_imfs_initialize, rtems_blkdev_imfs_destroy ); rtems_status_code rtems_blkdev_create( - const char *device, - uint32_t media_block_size, - rtems_blkdev_bnum media_block_count, + const char *device, + uint32_t media_block_size, + rtems_blkdev_bnum media_block_count, rtems_block_device_ioctl handler, - void *driver_data + void *driver_data ) { - rtems_status_code sc; + rtems_status_code sc; rtems_blkdev_imfs_context *ctx; sc = rtems_bdbuf_init(); - if (sc != RTEMS_SUCCESSFUL) { + if ( sc != RTEMS_SUCCESSFUL ) { return RTEMS_INCORRECT_STATE; } - ctx = malloc(sizeof(*ctx)); - if (ctx != NULL) { + ctx = malloc( sizeof( *ctx ) ); + if ( ctx != NULL ) { sc = rtems_disk_init_phys( &ctx->dd, media_block_size, @@ -318,7 +316,7 @@ rtems_status_code rtems_blkdev_create( ctx->fd = -1; - if (sc == RTEMS_SUCCESSFUL) { + if ( sc == RTEMS_SUCCESSFUL ) { int rv = IMFS_make_generic_node( device, S_IFBLK | S_IRWXU | S_IRWXG | S_IRWXO, @@ -326,12 +324,12 @@ rtems_status_code rtems_blkdev_create( ctx ); - if (rv != 0) { - free(ctx); + if ( rv != 0 ) { + free( ctx ); sc = RTEMS_UNSATISFIED; } } else { - free(ctx); + free( ctx ); } } else { sc = RTEMS_NO_MEMORY; @@ -341,28 +339,28 @@ rtems_status_code rtems_blkdev_create( } rtems_status_code rtems_blkdev_create_partition( - const char *partition, - const char *parent_block_device, + const char *partition, + const char *parent_block_device, rtems_blkdev_bnum media_block_begin, rtems_blkdev_bnum media_block_count ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - int fd = open(parent_block_device, O_RDWR); + int fd = open( parent_block_device, O_RDWR ); - if (fd >= 0) { - int rv; + if ( fd >= 0 ) { + int rv; struct stat st; - rv = fstat(fd, &st); - if (rv == 0 && S_ISBLK(st.st_mode)) { + rv = fstat( fd, &st ); + if ( rv == 0 && S_ISBLK( st.st_mode ) ) { rtems_disk_device *phys_dd; - rv = rtems_disk_fd_get_disk_device(fd, &phys_dd); - if (rv == 0) { - rtems_blkdev_imfs_context *ctx = malloc(sizeof(*ctx)); + rv = rtems_disk_fd_get_disk_device( fd, &phys_dd ); + if ( rv == 0 ) { + rtems_blkdev_imfs_context *ctx = malloc( sizeof( *ctx ) ); - if (ctx != NULL) { + if ( ctx != NULL ) { sc = rtems_disk_init_log( &ctx->dd, phys_dd, @@ -370,7 +368,7 @@ rtems_status_code rtems_blkdev_create_partition( media_block_count ); - if (sc == RTEMS_SUCCESSFUL) { + if ( sc == RTEMS_SUCCESSFUL ) { ctx->fd = fd; rv = IMFS_make_generic_node( @@ -380,12 +378,12 @@ rtems_status_code rtems_blkdev_create_partition( ctx ); - if (rv != 0) { - free(ctx); + if ( rv != 0 ) { + free( ctx ); sc = RTEMS_UNSATISFIED; } } else { - free(ctx); + free( ctx ); } } else { sc = RTEMS_NO_MEMORY; @@ -397,8 +395,8 @@ rtems_status_code rtems_blkdev_create_partition( sc = RTEMS_INVALID_NODE; } - if (sc != RTEMS_SUCCESSFUL) { - close(fd); + if ( sc != RTEMS_SUCCESSFUL ) { + close( fd ); } } else { sc = RTEMS_INVALID_ID; diff --git a/cpukit/libblock/src/blkdev-ioctl.c b/cpukit/libblock/src/blkdev-ioctl.c index 834f892d5c..9465c8cbf3 100644 --- a/cpukit/libblock/src/blkdev-ioctl.c +++ b/cpukit/libblock/src/blkdev-ioctl.c @@ -20,63 +20,61 @@ #include #include -int -rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp) +int rtems_blkdev_ioctl( rtems_disk_device *dd, uint32_t req, void *argp ) { - rtems_status_code sc; - int rc = 0; + rtems_status_code sc; + int rc = 0; - switch (req) - { - case RTEMS_BLKIO_GETMEDIABLKSIZE: - *(uint32_t *) argp = dd->media_block_size; - break; + switch ( req ) { + case RTEMS_BLKIO_GETMEDIABLKSIZE: + *(uint32_t *) argp = dd->media_block_size; + break; - case RTEMS_BLKIO_GETBLKSIZE: - *(uint32_t *) argp = dd->block_size; - break; + case RTEMS_BLKIO_GETBLKSIZE: + *(uint32_t *) argp = dd->block_size; + break; - case RTEMS_BLKIO_SETBLKSIZE: - sc = rtems_bdbuf_set_block_size(dd, *(uint32_t *) argp, true); - if (sc != RTEMS_SUCCESSFUL) { - errno = EIO; - rc = -1; - } - break; + case RTEMS_BLKIO_SETBLKSIZE: + sc = rtems_bdbuf_set_block_size( dd, *(uint32_t *) argp, true ); + if ( sc != RTEMS_SUCCESSFUL ) { + errno = EIO; + rc = -1; + } + break; - case RTEMS_BLKIO_GETSIZE: - *(rtems_blkdev_bnum *) argp = dd->size; - break; + case RTEMS_BLKIO_GETSIZE: + *(rtems_blkdev_bnum *) argp = dd->size; + break; - case RTEMS_BLKIO_SYNCDEV: - sc = rtems_bdbuf_syncdev(dd); - if (sc != RTEMS_SUCCESSFUL) { - errno = EIO; - rc = -1; - } - break; + case RTEMS_BLKIO_SYNCDEV: + sc = rtems_bdbuf_syncdev( dd ); + if ( sc != RTEMS_SUCCESSFUL ) { + errno = EIO; + rc = -1; + } + break; - case RTEMS_BLKIO_GETDISKDEV: - *(rtems_disk_device **) argp = dd; - break; + case RTEMS_BLKIO_GETDISKDEV: + *(rtems_disk_device **) argp = dd; + break; - case RTEMS_BLKIO_PURGEDEV: - rtems_bdbuf_purge_dev(dd); - break; + case RTEMS_BLKIO_PURGEDEV: + rtems_bdbuf_purge_dev( dd ); + break; - case RTEMS_BLKIO_GETDEVSTATS: - rtems_bdbuf_get_device_stats(dd, (rtems_blkdev_stats *) argp); - break; + case RTEMS_BLKIO_GETDEVSTATS: + rtems_bdbuf_get_device_stats( dd, (rtems_blkdev_stats *) argp ); + break; - case RTEMS_BLKIO_RESETDEVSTATS: - rtems_bdbuf_reset_device_stats(dd); - break; + case RTEMS_BLKIO_RESETDEVSTATS: + rtems_bdbuf_reset_device_stats( dd ); + break; - default: - errno = EINVAL; - rc = -1; - break; - } + default: + errno = EINVAL; + rc = -1; + break; + } - return rc; + return rc; } diff --git a/cpukit/libblock/src/blkdev-ops.c b/cpukit/libblock/src/blkdev-ops.c index 84f9a5a5d8..dcac8493b0 100644 --- a/cpukit/libblock/src/blkdev-ops.c +++ b/cpukit/libblock/src/blkdev-ops.c @@ -38,10 +38,10 @@ #pragma GCC diagnostic ignored "-Wdeprecated-declarations" const rtems_driver_address_table rtems_blkdev_generic_ops = { - .initialization_entry = NULL, - .open_entry = rtems_blkdev_generic_open, - .close_entry = rtems_blkdev_generic_close, - .read_entry = rtems_blkdev_generic_read, - .write_entry = rtems_blkdev_generic_write, - .control_entry = rtems_blkdev_generic_ioctl + .initialization_entry = NULL, + .open_entry = rtems_blkdev_generic_open, + .close_entry = rtems_blkdev_generic_close, + .read_entry = rtems_blkdev_generic_read, + .write_entry = rtems_blkdev_generic_write, + .control_entry = rtems_blkdev_generic_ioctl }; diff --git a/cpukit/libblock/src/blkdev-print-stats.c b/cpukit/libblock/src/blkdev-print-stats.c index 7f84254208..9bb24b370c 100644 --- a/cpukit/libblock/src/blkdev-print-stats.c +++ b/cpukit/libblock/src/blkdev-print-stats.c @@ -43,41 +43,41 @@ void rtems_blkdev_print_stats( const rtems_blkdev_stats *stats, - uint32_t media_block_size, - uint32_t media_block_count, - uint32_t block_size, - const rtems_printer* printer + uint32_t media_block_size, + uint32_t media_block_count, + uint32_t block_size, + const rtems_printer *printer ) { rtems_printf( - printer, - "-------------------------------------------------------------------------------\n" - " DEVICE STATISTICS\n" - "----------------------+--------------------------------------------------------\n" - " MEDIA BLOCK SIZE | %" PRIu32 "\n" - " MEDIA BLOCK COUNT | %" PRIu32 "\n" - " BLOCK SIZE | %" PRIu32 "\n" - " READ HITS | %" PRIu32 "\n" - " READ MISSES | %" PRIu32 "\n" - " READ AHEAD TRANSFERS | %" PRIu32 "\n" - " READ AHEAD PEEKS | %" PRIu32 "\n" - " READ BLOCKS | %" PRIu32 "\n" - " READ ERRORS | %" PRIu32 "\n" - " WRITE TRANSFERS | %" PRIu32 "\n" - " WRITE BLOCKS | %" PRIu32 "\n" - " WRITE ERRORS | %" PRIu32 "\n" - "----------------------+--------------------------------------------------------\n", - media_block_size, - media_block_count, - block_size, - stats->read_hits, - stats->read_misses, - stats->read_ahead_transfers, - stats->read_ahead_peeks, - stats->read_blocks, - stats->read_errors, - stats->write_transfers, - stats->write_blocks, - stats->write_errors + printer, + "-------------------------------------------------------------------------------\n" + " DEVICE STATISTICS\n" + "----------------------+--------------------------------------------------------\n" + " MEDIA BLOCK SIZE | %" PRIu32 "\n" + " MEDIA BLOCK COUNT | %" PRIu32 "\n" + " BLOCK SIZE | %" PRIu32 "\n" + " READ HITS | %" PRIu32 "\n" + " READ MISSES | %" PRIu32 "\n" + " READ AHEAD TRANSFERS | %" PRIu32 "\n" + " READ AHEAD PEEKS | %" PRIu32 "\n" + " READ BLOCKS | %" PRIu32 "\n" + " READ ERRORS | %" PRIu32 "\n" + " WRITE TRANSFERS | %" PRIu32 "\n" + " WRITE BLOCKS | %" PRIu32 "\n" + " WRITE ERRORS | %" PRIu32 "\n" + "----------------------+--------------------------------------------------------\n", + media_block_size, + media_block_count, + block_size, + stats->read_hits, + stats->read_misses, + stats->read_ahead_transfers, + stats->read_ahead_peeks, + stats->read_blocks, + stats->read_errors, + stats->write_transfers, + stats->write_blocks, + stats->write_errors ); } diff --git a/cpukit/libblock/src/blkdev.c b/cpukit/libblock/src/blkdev.c index e818129196..c23d9f7341 100644 --- a/cpukit/libblock/src/blkdev.c +++ b/cpukit/libblock/src/blkdev.c @@ -31,139 +31,144 @@ * Generic block device read primitive. Implemented using block device * buffer management primitives. */ -rtems_device_driver -rtems_blkdev_generic_read( - rtems_device_major_number major RTEMS_UNUSED, - rtems_device_minor_number minor RTEMS_UNUSED, - void * arg) +rtems_device_driver rtems_blkdev_generic_read( + rtems_device_major_number major RTEMS_UNUSED, + rtems_device_minor_number minor RTEMS_UNUSED, + void *arg +) { - rtems_status_code rc = RTEMS_SUCCESSFUL; - rtems_libio_rw_args_t *args = arg; - rtems_libio_t *iop = args->iop; - rtems_disk_device *dd = iop->data1; - uint32_t block_size = dd->block_size; - char *buf = args->buffer; - uint32_t count = args->count; - rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size); - uint32_t blkofs = (uint32_t) (args->offset % block_size); + rtems_status_code rc = RTEMS_SUCCESSFUL; + rtems_libio_rw_args_t *args = arg; + rtems_libio_t *iop = args->iop; + rtems_disk_device *dd = iop->data1; + uint32_t block_size = dd->block_size; + char *buf = args->buffer; + uint32_t count = args->count; + rtems_blkdev_bnum block = (rtems_blkdev_bnum) ( args->offset / block_size ); + uint32_t blkofs = (uint32_t) ( args->offset % block_size ); - args->bytes_moved = 0; + args->bytes_moved = 0; - while (count > 0) - { - rtems_bdbuf_buffer *diskbuf; - uint32_t copy; + while ( count > 0 ) { + rtems_bdbuf_buffer *diskbuf; + uint32_t copy; - rc = rtems_bdbuf_read(dd, block, &diskbuf); - if (rc != RTEMS_SUCCESSFUL) - break; - copy = block_size - blkofs; - if (copy > count) - copy = count; - memcpy(buf, (char *)diskbuf->buffer + blkofs, copy); - rc = rtems_bdbuf_release(diskbuf); - args->bytes_moved += copy; - if (rc != RTEMS_SUCCESSFUL) - break; - count -= copy; - buf += copy; - blkofs = 0; - block++; + rc = rtems_bdbuf_read( dd, block, &diskbuf ); + if ( rc != RTEMS_SUCCESSFUL ) { + break; } + copy = block_size - blkofs; + if ( copy > count ) { + copy = count; + } + memcpy( buf, (char *) diskbuf->buffer + blkofs, copy ); + rc = rtems_bdbuf_release( diskbuf ); + args->bytes_moved += copy; + if ( rc != RTEMS_SUCCESSFUL ) { + break; + } + count -= copy; + buf += copy; + blkofs = 0; + block++; + } - return rc; + return rc; } /* rtems_blkdev_generic_write -- * Generic block device write primitive. Implemented using block device * buffer management primitives. */ -rtems_device_driver -rtems_blkdev_generic_write( - rtems_device_major_number major RTEMS_UNUSED, - rtems_device_minor_number minor RTEMS_UNUSED, - void * arg) +rtems_device_driver rtems_blkdev_generic_write( + rtems_device_major_number major RTEMS_UNUSED, + rtems_device_minor_number minor RTEMS_UNUSED, + void *arg +) { - rtems_status_code rc = RTEMS_SUCCESSFUL; - rtems_libio_rw_args_t *args = arg; - rtems_libio_t *iop = args->iop; - rtems_disk_device *dd = iop->data1; - uint32_t block_size = dd->block_size; - char *buf = args->buffer; - uint32_t count = args->count; - rtems_blkdev_bnum block = (rtems_blkdev_bnum) (args->offset / block_size); - uint32_t blkofs = (uint32_t) (args->offset % block_size); + rtems_status_code rc = RTEMS_SUCCESSFUL; + rtems_libio_rw_args_t *args = arg; + rtems_libio_t *iop = args->iop; + rtems_disk_device *dd = iop->data1; + uint32_t block_size = dd->block_size; + char *buf = args->buffer; + uint32_t count = args->count; + rtems_blkdev_bnum block = (rtems_blkdev_bnum) ( args->offset / block_size ); + uint32_t blkofs = (uint32_t) ( args->offset % block_size ); - args->bytes_moved = 0; + args->bytes_moved = 0; - while (count > 0) - { - rtems_bdbuf_buffer *diskbuf; - uint32_t copy; + while ( count > 0 ) { + rtems_bdbuf_buffer *diskbuf; + uint32_t copy; - if ((blkofs == 0) && (count >= block_size)) - rc = rtems_bdbuf_get(dd, block, &diskbuf); - else - rc = rtems_bdbuf_read(dd, block, &diskbuf); - if (rc != RTEMS_SUCCESSFUL) - break; - - copy = block_size - blkofs; - if (copy > count) - copy = count; - memcpy((char *)diskbuf->buffer + blkofs, buf, copy); - args->bytes_moved += copy; - - rc = rtems_bdbuf_release_modified(diskbuf); - if (rc != RTEMS_SUCCESSFUL) - break; - - count -= copy; - buf += copy; - blkofs = 0; - block++; + if ( ( blkofs == 0 ) && ( count >= block_size ) ) { + rc = rtems_bdbuf_get( dd, block, &diskbuf ); + } else { + rc = rtems_bdbuf_read( dd, block, &diskbuf ); + } + if ( rc != RTEMS_SUCCESSFUL ) { + break; } - return rc; + copy = block_size - blkofs; + if ( copy > count ) { + copy = count; + } + memcpy( (char *) diskbuf->buffer + blkofs, buf, copy ); + args->bytes_moved += copy; + + rc = rtems_bdbuf_release_modified( diskbuf ); + if ( rc != RTEMS_SUCCESSFUL ) { + break; + } + + count -= copy; + buf += copy; + blkofs = 0; + block++; + } + + return rc; } /* blkdev_generic_open -- * Generic block device open primitive. */ -rtems_device_driver -rtems_blkdev_generic_open( - rtems_device_major_number major, - rtems_device_minor_number minor, - void * arg) +rtems_device_driver rtems_blkdev_generic_open( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) { rtems_libio_open_close_args_t *oc = arg; - rtems_libio_t *iop = oc->iop; - dev_t dev = rtems_filesystem_make_dev_t(major, minor); - rtems_disk_device *dd = rtems_disk_obtain(dev); + rtems_libio_t *iop = oc->iop; + dev_t dev = rtems_filesystem_make_dev_t( major, minor ); + rtems_disk_device *dd = rtems_disk_obtain( dev ); iop->data1 = dd; - if (dd != NULL) + if ( dd != NULL ) { return RTEMS_SUCCESSFUL; - else + } else { return RTEMS_UNSATISFIED; + } } - /* blkdev_generic_close -- * Generic block device close primitive. */ -rtems_device_driver -rtems_blkdev_generic_close( - rtems_device_major_number major RTEMS_UNUSED, - rtems_device_minor_number minor RTEMS_UNUSED, - void * arg) +rtems_device_driver rtems_blkdev_generic_close( + rtems_device_major_number major RTEMS_UNUSED, + rtems_device_minor_number minor RTEMS_UNUSED, + void *arg +) { rtems_libio_open_close_args_t *oc = arg; - rtems_libio_t *iop = oc->iop; - rtems_disk_device *dd = iop->data1; + rtems_libio_t *iop = oc->iop; + rtems_disk_device *dd = iop->data1; - rtems_disk_release(dd); + rtems_disk_release( dd ); return RTEMS_SUCCESSFUL; } @@ -171,30 +176,25 @@ rtems_blkdev_generic_close( /* blkdev_generic_ioctl -- * Generic block device ioctl primitive. */ -rtems_device_driver -rtems_blkdev_generic_ioctl( - rtems_device_major_number major RTEMS_UNUSED, - rtems_device_minor_number minor RTEMS_UNUSED, - void * arg) +rtems_device_driver rtems_blkdev_generic_ioctl( + rtems_device_major_number major RTEMS_UNUSED, + rtems_device_minor_number minor RTEMS_UNUSED, + void *arg +) { - rtems_libio_ioctl_args_t *args = arg; - rtems_libio_t *iop = args->iop; - rtems_disk_device *dd = iop->data1; + rtems_libio_ioctl_args_t *args = arg; + rtems_libio_t *iop = args->iop; + rtems_disk_device *dd = iop->data1; - if (args->command != RTEMS_BLKIO_REQUEST) - { - args->ioctl_return = dd->ioctl(dd, - args->command, - args->buffer); - } - else - { - /* + if ( args->command != RTEMS_BLKIO_REQUEST ) { + args->ioctl_return = dd->ioctl( dd, args->command, args->buffer ); + } else { + /* * It is not allowed to directly access the driver circumventing the * cache. */ - args->ioctl_return = -1; - } + args->ioctl_return = -1; + } - return RTEMS_SUCCESSFUL; + return RTEMS_SUCCESSFUL; } diff --git a/cpukit/libblock/src/diskdevs-init.c b/cpukit/libblock/src/diskdevs-init.c index 490e03a18c..de8dfabecb 100644 --- a/cpukit/libblock/src/diskdevs-init.c +++ b/cpukit/libblock/src/diskdevs-init.c @@ -43,16 +43,16 @@ #include rtems_status_code rtems_disk_init_phys( - rtems_disk_device *dd, - uint32_t block_size, - rtems_blkdev_bnum block_count, + rtems_disk_device *dd, + uint32_t block_size, + rtems_blkdev_bnum block_count, rtems_block_device_ioctl handler, - void *driver_data + void *driver_data ) { rtems_status_code sc; - dd = memset(dd, 0, sizeof(*dd)); + dd = memset( dd, 0, sizeof( *dd ) ); dd->phys_dev = dd; dd->size = block_count; @@ -61,12 +61,14 @@ rtems_status_code rtems_disk_init_phys( dd->driver_data = driver_data; dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER; - if (block_count > 0) { - if ((*handler)(dd, RTEMS_BLKIO_CAPABILITIES, &dd->capabilities) != 0) { + if ( block_count > 0 ) { + if ( + ( *handler )( dd, RTEMS_BLKIO_CAPABILITIES, &dd->capabilities ) != 0 + ) { dd->capabilities = 0; } - sc = rtems_bdbuf_set_block_size(dd, block_size, false); + sc = rtems_bdbuf_set_block_size( dd, block_size, false ); } else { sc = RTEMS_INVALID_NUMBER; } @@ -77,13 +79,13 @@ rtems_status_code rtems_disk_init_phys( rtems_status_code rtems_disk_init_log( rtems_disk_device *dd, rtems_disk_device *phys_dd, - rtems_blkdev_bnum block_begin, - rtems_blkdev_bnum block_count + rtems_blkdev_bnum block_begin, + rtems_blkdev_bnum block_count ) { rtems_status_code sc; - dd = memset(dd, 0, sizeof(*dd)); + dd = memset( dd, 0, sizeof( *dd ) ); dd->phys_dev = phys_dd; dd->start = block_begin; @@ -93,15 +95,14 @@ rtems_status_code rtems_disk_init_log( dd->driver_data = phys_dd->driver_data; dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER; - if (phys_dd->phys_dev == phys_dd) { + if ( phys_dd->phys_dev == phys_dd ) { rtems_blkdev_bnum phys_block_count = phys_dd->size; if ( - block_begin < phys_block_count - && block_count > 0 - && block_count <= phys_block_count - block_begin + block_begin < phys_block_count && block_count > 0 && + block_count <= phys_block_count - block_begin ) { - sc = rtems_bdbuf_set_block_size(dd, phys_dd->media_block_size, false); + sc = rtems_bdbuf_set_block_size( dd, phys_dd->media_block_size, false ); } else { sc = RTEMS_INVALID_NUMBER; } diff --git a/cpukit/libblock/src/diskdevs.c b/cpukit/libblock/src/diskdevs.c index ee73ab55fb..ce2214f860 100644 --- a/cpukit/libblock/src/diskdevs.c +++ b/cpukit/libblock/src/diskdevs.c @@ -34,8 +34,8 @@ /* Table of disk devices having the same major number */ typedef struct rtems_disk_device_table { - rtems_disk_device **minor; /* minor-indexed disk device table */ - rtems_device_minor_number size; /* Number of entries in the table */ + rtems_disk_device **minor; /* minor-indexed disk device table */ + rtems_device_minor_number size; /* Number of entries in the table */ } rtems_disk_device_table; /* Pointer to [major].minor[minor] indexed array of disk devices */ @@ -45,7 +45,7 @@ static rtems_disk_device_table *disktab; static rtems_device_major_number disktab_size; /* Mutual exclusion semaphore for disk devices table */ -static rtems_mutex diskdevs_mutex = RTEMS_MUTEX_INITIALIZER("diskdevs"); +static rtems_mutex diskdevs_mutex = RTEMS_MUTEX_INITIALIZER( "diskdevs" ); /* diskdevs data structures protection flag. * Normally, only table lookup operations performed. It is quite fast, so @@ -60,40 +60,37 @@ static rtems_mutex diskdevs_mutex = RTEMS_MUTEX_INITIALIZER("diskdevs"); */ static volatile bool diskdevs_protected; -RTEMS_INTERRUPT_LOCK_DEFINE(static, diskdevs_lock, "diskdevs") +RTEMS_INTERRUPT_LOCK_DEFINE( static, diskdevs_lock, "diskdevs" ) -static rtems_status_code disk_delete_locked(dev_t dev); +static rtems_status_code disk_delete_locked( dev_t dev ); -static void -disk_lock(void) +static void disk_lock( void ) { - rtems_mutex_lock(&diskdevs_mutex); + rtems_mutex_lock( &diskdevs_mutex ); diskdevs_protected = true; } -static void -disk_unlock(void) +static void disk_unlock( void ) { diskdevs_protected = false; - rtems_mutex_unlock(&diskdevs_mutex); + rtems_mutex_unlock( &diskdevs_mutex ); } -static rtems_disk_device * -get_disk_entry(dev_t dev, bool lookup_only) +static rtems_disk_device *get_disk_entry( dev_t dev, bool lookup_only ) { rtems_device_major_number major = 0; rtems_device_minor_number minor = 0; - rtems_filesystem_split_dev_t(dev, major, minor); + rtems_filesystem_split_dev_t( dev, major, minor ); - if (major < disktab_size && disktab != NULL) { + if ( major < disktab_size && disktab != NULL ) { rtems_disk_device_table *dtab = disktab + major; - if (minor < dtab->size && dtab->minor != NULL) { - rtems_disk_device *dd = dtab->minor [minor]; + if ( minor < dtab->size && dtab->minor != NULL ) { + rtems_disk_device *dd = dtab->minor[ minor ]; - if (dd != NULL && !lookup_only) { - if (!dd->deleted) { + if ( dd != NULL && !lookup_only ) { + if ( !dd->deleted ) { ++dd->uses; } else { dd = NULL; @@ -107,99 +104,97 @@ get_disk_entry(dev_t dev, bool lookup_only) return NULL; } -static rtems_disk_device ** -create_disk_table_entry(dev_t dev) +static rtems_disk_device **create_disk_table_entry( dev_t dev ) { rtems_device_major_number major = 0; rtems_device_minor_number minor = 0; - rtems_filesystem_split_dev_t(dev, major, minor); + rtems_filesystem_split_dev_t( dev, major, minor ); - if (major >= disktab_size) { - rtems_disk_device_table *table = disktab; + if ( major >= disktab_size ) { + rtems_disk_device_table *table = disktab; rtems_device_major_number old_size = disktab_size; rtems_device_major_number new_size = 2 * old_size; - if (major >= new_size) { + if ( major >= new_size ) { new_size = major + 1; } - table = realloc(table, new_size * sizeof(*table)); - if (table == NULL) { + table = realloc( table, new_size * sizeof( *table ) ); + if ( table == NULL ) { return NULL; } - memset(table + old_size, 0, (new_size - old_size) * sizeof(*table)); + memset( table + old_size, 0, ( new_size - old_size ) * sizeof( *table ) ); disktab = table; disktab_size = new_size; } - if (disktab [major].minor == NULL || minor >= disktab[major].size) { - rtems_disk_device **table = disktab [major].minor; - rtems_device_minor_number old_size = disktab [major].size; + if ( disktab[ major ].minor == NULL || minor >= disktab[ major ].size ) { + rtems_disk_device **table = disktab[ major ].minor; + rtems_device_minor_number old_size = disktab[ major ].size; rtems_device_minor_number new_size = 0; - if (old_size == 0) { + if ( old_size == 0 ) { new_size = DISKTAB_INITIAL_SIZE; } else { new_size = 2 * old_size; } - if (minor >= new_size) { + if ( minor >= new_size ) { new_size = minor + 1; } - table = realloc(table, new_size * sizeof(*table)); - if (table == NULL) { + table = realloc( table, new_size * sizeof( *table ) ); + if ( table == NULL ) { return NULL; } - memset(table + old_size, 0, (new_size - old_size) * sizeof(*table)); - disktab [major].minor = table; - disktab [major].size = new_size; + memset( table + old_size, 0, ( new_size - old_size ) * sizeof( *table ) ); + disktab[ major ].minor = table; + disktab[ major ].size = new_size; } - return disktab [major].minor + minor; + return disktab[ major ].minor + minor; } -static rtems_status_code -create_disk( - dev_t dev, - const char *name, +static rtems_status_code create_disk( + dev_t dev, + const char *name, rtems_disk_device **dd_ptr, - char **alloc_name_ptr + char **alloc_name_ptr ) { - rtems_disk_device **dd_entry = create_disk_table_entry(dev); - rtems_disk_device *dd = NULL; - char *alloc_name = NULL; + rtems_disk_device **dd_entry = create_disk_table_entry( dev ); + rtems_disk_device *dd = NULL; + char *alloc_name = NULL; - if (dd_entry == NULL) { + if ( dd_entry == NULL ) { return RTEMS_NO_MEMORY; } - if (*dd_entry != NULL) { + if ( *dd_entry != NULL ) { return RTEMS_RESOURCE_IN_USE; } - dd = malloc(sizeof(*dd)); - if (dd == NULL) { + dd = malloc( sizeof( *dd ) ); + if ( dd == NULL ) { return RTEMS_NO_MEMORY; } - if (name != NULL) { - alloc_name = strdup(name); + if ( name != NULL ) { + alloc_name = strdup( name ); - if (alloc_name == NULL) { - free(dd); + if ( alloc_name == NULL ) { + free( dd ); return RTEMS_NO_MEMORY; } } - if (name != NULL) { - if (mknod(alloc_name, 0777 | S_IFBLK, dev) < 0) { - free(alloc_name); - free(dd); + if ( name != NULL ) { + if ( mknod( alloc_name, 0777 | S_IFBLK, dev ) < 0 ) { + free( alloc_name ); + free( dd ); return RTEMS_UNSATISFIED; } } @@ -211,11 +206,7 @@ create_disk( return RTEMS_SUCCESSFUL; } -static int null_handler( - rtems_disk_device *dd, - uint32_t req, - void *argp -) +static int null_handler( rtems_disk_device *dd, uint32_t req, void *argp ) { (void) dd; (void) req; @@ -225,26 +216,26 @@ static int null_handler( } rtems_status_code rtems_disk_create_phys( - dev_t dev, - uint32_t block_size, - rtems_blkdev_bnum block_count, + dev_t dev, + uint32_t block_size, + rtems_blkdev_bnum block_count, rtems_block_device_ioctl handler, - void *driver_data, - const char *name + void *driver_data, + const char *name ) { rtems_disk_device *dd = NULL; - rtems_status_code sc = RTEMS_SUCCESSFUL; - char *alloc_name = NULL; + rtems_status_code sc = RTEMS_SUCCESSFUL; + char *alloc_name = NULL; - if (handler == NULL) { + if ( handler == NULL ) { return RTEMS_INVALID_ADDRESS; } disk_lock(); - sc = create_disk(dev, name, &dd, &alloc_name); - if (sc != RTEMS_SUCCESSFUL) { + sc = create_disk( dev, name, &dd, &alloc_name ); + if ( sc != RTEMS_SUCCESSFUL ) { disk_unlock(); return sc; @@ -261,9 +252,9 @@ rtems_status_code rtems_disk_create_phys( dd->dev = dev; dd->name = alloc_name; - if (sc != RTEMS_SUCCESSFUL) { + if ( sc != RTEMS_SUCCESSFUL ) { dd->ioctl = null_handler; - disk_delete_locked(dev); + disk_delete_locked( dev ); disk_unlock(); return sc; @@ -274,56 +265,50 @@ rtems_status_code rtems_disk_create_phys( return RTEMS_SUCCESSFUL; } -static bool -is_physical_disk(const rtems_disk_device *dd) +static bool is_physical_disk( const rtems_disk_device *dd ) { return dd->phys_dev == dd; } rtems_status_code rtems_disk_create_log( - dev_t dev, - dev_t phys, + dev_t dev, + dev_t phys, rtems_blkdev_bnum block_begin, rtems_blkdev_bnum block_count, - const char *name + const char *name ) { - rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_disk_device *phys_dd = NULL; rtems_disk_device *dd = NULL; - char *alloc_name = NULL; + char *alloc_name = NULL; disk_lock(); - phys_dd = get_disk_entry(phys, true); - if (phys_dd == NULL) { + phys_dd = get_disk_entry( phys, true ); + if ( phys_dd == NULL ) { disk_unlock(); return RTEMS_INVALID_ID; } - sc = create_disk(dev, name, &dd, &alloc_name); - if (sc != RTEMS_SUCCESSFUL) { + sc = create_disk( dev, name, &dd, &alloc_name ); + if ( sc != RTEMS_SUCCESSFUL ) { disk_unlock(); return sc; } - sc = rtems_disk_init_log( - dd, - phys_dd, - block_begin, - block_count - ); + sc = rtems_disk_init_log( dd, phys_dd, block_begin, block_count ); dd->dev = dev; dd->name = alloc_name; ++phys_dd->uses; - if (sc != RTEMS_SUCCESSFUL) { + if ( sc != RTEMS_SUCCESSFUL ) { dd->ioctl = null_handler; - disk_delete_locked(dev); + disk_delete_locked( dev ); disk_unlock(); return sc; @@ -334,41 +319,39 @@ rtems_status_code rtems_disk_create_log( return RTEMS_SUCCESSFUL; } -static void -free_disk_device(rtems_disk_device *dd) +static void free_disk_device( rtems_disk_device *dd ) { - if (is_physical_disk(dd)) { - (*dd->ioctl)(dd, RTEMS_BLKIO_DELETED, NULL); + if ( is_physical_disk( dd ) ) { + ( *dd->ioctl )( dd, RTEMS_BLKIO_DELETED, NULL ); } - if (dd->name != NULL) { - unlink(dd->name); - free(dd->name); + if ( dd->name != NULL ) { + unlink( dd->name ); + free( dd->name ); } - free(dd); + free( dd ); } -static void -rtems_disk_cleanup(rtems_disk_device *disk_to_remove) +static void rtems_disk_cleanup( rtems_disk_device *disk_to_remove ) { - rtems_disk_device *const physical_disk = disk_to_remove->phys_dev; + rtems_disk_device *const physical_disk = disk_to_remove->phys_dev; rtems_device_major_number major = 0; rtems_device_minor_number minor = 0; - if (physical_disk->deleted) { - dev_t dev = physical_disk->dev; + if ( physical_disk->deleted ) { + dev_t dev = physical_disk->dev; unsigned deleted_count = 0; - for (major = 0; major < disktab_size; ++major) { + for ( major = 0; major < disktab_size; ++major ) { rtems_disk_device_table *dtab = disktab + major; - for (minor = 0; minor < dtab->size; ++minor) { - rtems_disk_device *dd = dtab->minor [minor]; + for ( minor = 0; minor < dtab->size; ++minor ) { + rtems_disk_device *dd = dtab->minor[ minor ]; - if (dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk) { - if (dd->uses == 0) { + if ( dd != NULL && dd->phys_dev->dev == dev && dd != physical_disk ) { + if ( dd->uses == 0 ) { ++deleted_count; - dtab->minor [minor] = NULL; - free_disk_device(dd); + dtab->minor[ minor ] = NULL; + free_disk_device( dd ); } else { dd->deleted = true; } @@ -377,105 +360,100 @@ rtems_disk_cleanup(rtems_disk_device *disk_to_remove) } physical_disk->uses -= deleted_count; - if (physical_disk->uses == 0) { - rtems_filesystem_split_dev_t(physical_disk->dev, major, minor); - disktab [major].minor [minor] = NULL; - free_disk_device(physical_disk); + if ( physical_disk->uses == 0 ) { + rtems_filesystem_split_dev_t( physical_disk->dev, major, minor ); + disktab[ major ].minor[ minor ] = NULL; + free_disk_device( physical_disk ); } } else { - if (disk_to_remove->uses == 0) { + if ( disk_to_remove->uses == 0 ) { --physical_disk->uses; - rtems_filesystem_split_dev_t(disk_to_remove->dev, major, minor); - disktab [major].minor [minor] = NULL; - free_disk_device(disk_to_remove); + rtems_filesystem_split_dev_t( disk_to_remove->dev, major, minor ); + disktab[ major ].minor[ minor ] = NULL; + free_disk_device( disk_to_remove ); } } } -static rtems_status_code -disk_delete_locked(dev_t dev) +static rtems_status_code disk_delete_locked( dev_t dev ) { rtems_disk_device *dd = NULL; - dd = get_disk_entry(dev, true); - if (dd == NULL) { + dd = get_disk_entry( dev, true ); + if ( dd == NULL ) { return RTEMS_INVALID_ID; } dd->deleted = true; - rtems_disk_cleanup(dd); + rtems_disk_cleanup( dd ); return RTEMS_SUCCESSFUL; } -rtems_status_code -rtems_disk_delete(dev_t dev) +rtems_status_code rtems_disk_delete( dev_t dev ) { rtems_status_code sc; disk_lock(); - sc = disk_delete_locked(dev); + sc = disk_delete_locked( dev ); disk_unlock(); return sc; } -rtems_disk_device * -rtems_disk_obtain(dev_t dev) +rtems_disk_device *rtems_disk_obtain( dev_t dev ) { - rtems_disk_device *dd = NULL; + rtems_disk_device *dd = NULL; rtems_interrupt_lock_context lock_context; - rtems_interrupt_lock_acquire(&diskdevs_lock, &lock_context); - if (!diskdevs_protected) { + rtems_interrupt_lock_acquire( &diskdevs_lock, &lock_context ); + if ( !diskdevs_protected ) { /* Frequent and quickest case */ - dd = get_disk_entry(dev, false); - rtems_interrupt_lock_release(&diskdevs_lock, &lock_context); + dd = get_disk_entry( dev, false ); + rtems_interrupt_lock_release( &diskdevs_lock, &lock_context ); } else { - rtems_interrupt_lock_release(&diskdevs_lock, &lock_context); + rtems_interrupt_lock_release( &diskdevs_lock, &lock_context ); disk_lock(); - dd = get_disk_entry(dev, false); + dd = get_disk_entry( dev, false ); disk_unlock(); } return dd; } -rtems_status_code -rtems_disk_release(rtems_disk_device *dd) +rtems_status_code rtems_disk_release( rtems_disk_device *dd ) { rtems_interrupt_lock_context lock_context; - dev_t dev = dd->dev; - unsigned uses = 0; - bool deleted = false; + dev_t dev = dd->dev; + unsigned uses = 0; + bool deleted = false; - rtems_interrupt_lock_acquire(&diskdevs_lock, &lock_context); + rtems_interrupt_lock_acquire( &diskdevs_lock, &lock_context ); uses = --dd->uses; deleted = dd->deleted; - rtems_interrupt_lock_release(&diskdevs_lock, &lock_context); + rtems_interrupt_lock_release( &diskdevs_lock, &lock_context ); - if (uses == 0 && deleted) { - rtems_disk_delete(dev); + if ( uses == 0 && deleted ) { + rtems_disk_delete( dev ); } return RTEMS_SUCCESSFUL; } -rtems_disk_device * -rtems_disk_next(dev_t dev) +rtems_disk_device *rtems_disk_next( dev_t dev ) { - rtems_disk_device_table *dtab = NULL; + rtems_disk_device_table *dtab = NULL; rtems_device_major_number major = 0; rtems_device_minor_number minor = 0; - if (dev != (dev_t) -1) { - rtems_filesystem_split_dev_t(dev, major, minor); + if ( dev != (dev_t) -1 ) { + rtems_filesystem_split_dev_t( dev, major, minor ); /* If minor wraps around */ - if ((minor + 1) < minor) { + if ( ( minor + 1 ) < minor ) { /* If major wraps around */ - if ((major + 1) < major) { + if ( ( major + 1 ) < major ) { return NULL; } ++major; @@ -487,52 +465,51 @@ rtems_disk_next(dev_t dev) disk_lock(); - if (major >= disktab_size) { + if ( major >= disktab_size ) { disk_unlock(); return NULL; } dtab = disktab + major; - while (true) { - if (dtab->minor == NULL || minor >= dtab->size) { - minor = 0; - ++major; - if (major >= disktab_size) { - disk_unlock(); + while ( true ) { + if ( dtab->minor == NULL || minor >= dtab->size ) { + minor = 0; + ++major; + if ( major >= disktab_size ) { + disk_unlock(); - return NULL; - } - dtab = disktab + major; - } else if (dtab->minor [minor] == NULL) { + return NULL; + } + dtab = disktab + major; + } else if ( dtab->minor[ minor ] == NULL ) { ++minor; } else { - ++dtab->minor [minor]->uses; + ++dtab->minor[ minor ]->uses; disk_unlock(); - return dtab->minor [minor]; + return dtab->minor[ minor ]; } } } -rtems_status_code -rtems_disk_io_initialize(void) +rtems_status_code rtems_disk_io_initialize( void ) { - rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_device_major_number size = DISKTAB_INITIAL_SIZE; - if (disktab_size > 0) { + if ( disktab_size > 0 ) { return RTEMS_SUCCESSFUL; } - disktab = calloc(size, sizeof(rtems_disk_device_table)); - if (disktab == NULL) { + disktab = calloc( size, sizeof( rtems_disk_device_table ) ); + if ( disktab == NULL ) { return RTEMS_NO_MEMORY; } sc = rtems_bdbuf_init(); - if (sc != RTEMS_SUCCESSFUL) { - free(disktab); + if ( sc != RTEMS_SUCCESSFUL ) { + free( disktab ); return RTEMS_UNSATISFIED; } @@ -542,25 +519,24 @@ rtems_disk_io_initialize(void) return RTEMS_SUCCESSFUL; } -rtems_status_code -rtems_disk_io_done(void) +rtems_status_code rtems_disk_io_done( void ) { rtems_device_major_number major = 0; rtems_device_minor_number minor = 0; - for (major = 0; major < disktab_size; ++major) { + for ( major = 0; major < disktab_size; ++major ) { rtems_disk_device_table *dtab = disktab + major; - for (minor = 0; minor < dtab->size; ++minor) { - rtems_disk_device *dd = dtab->minor [minor]; + for ( minor = 0; minor < dtab->size; ++minor ) { + rtems_disk_device *dd = dtab->minor[ minor ]; - if (dd != NULL) { - free_disk_device(dd); + if ( dd != NULL ) { + free_disk_device( dd ); } } - free(dtab->minor); + free( dtab->minor ); } - free(disktab); + free( disktab ); disktab = NULL; disktab_size = 0; diff --git a/cpukit/libblock/src/flashdisk.c b/cpukit/libblock/src/flashdisk.c index 0e10cda881..ddec99b1c2 100644 --- a/cpukit/libblock/src/flashdisk.c +++ b/cpukit/libblock/src/flashdisk.c @@ -72,7 +72,7 @@ * Control tracing. It can be compiled out of the code for small * footprint targets. Leave in by default. */ -#if !defined (RTEMS_FDISK_TRACE) +#if !defined( RTEMS_FDISK_TRACE ) #define RTEMS_FDISK_TRACE 1 #endif @@ -85,38 +85,36 @@ * large like 20+ bits so a large file system would not have * more blocks available than the sequence number. */ -typedef struct rtems_fdisk_page_desc -{ - uint16_t crc; /**< The page's checksum. */ - uint16_t flags; /**< The flags for the page. */ - uint32_t block; /**< The block number. */ +typedef struct rtems_fdisk_page_desc { + uint16_t crc; /**< The page's checksum. */ + uint16_t flags; /**< The flags for the page. */ + uint32_t block; /**< The block number. */ } rtems_fdisk_page_desc; /** * Flag the page as active. */ -#define RTEMS_FDISK_PAGE_ACTIVE (1 << 0) +#define RTEMS_FDISK_PAGE_ACTIVE ( 1 << 0 ) /** * Flag the page as used. */ -#define RTEMS_FDISK_PAGE_USED (1 << 1) +#define RTEMS_FDISK_PAGE_USED ( 1 << 1 ) /** * Flash Segment Control holds the pointer to the segment, number of * pages, various page stats and the memory copy of the page descriptors. */ -typedef struct rtems_fdisk_segment_ctl -{ +typedef struct rtems_fdisk_segment_ctl { /** * Segments with available pages are maintained as a linked list. */ - struct rtems_fdisk_segment_ctl* next; + struct rtems_fdisk_segment_ctl *next; /** * The descriptor provided by the low-level driver. */ - const rtems_fdisk_segment_desc* descriptor; + const rtems_fdisk_segment_desc *descriptor; /** * The device this segment resides on. @@ -133,51 +131,48 @@ typedef struct rtems_fdisk_segment_ctl * The in-memory ocpy of the page descriptors found at * the start of the segment in the flash device. */ - rtems_fdisk_page_desc* page_descriptors; + rtems_fdisk_page_desc *page_descriptors; /* * Page stats. * * A bad page does not checksum or is not erased or has invalid flags. */ - uint32_t pages; /**< Total number of pages in the segment. */ - uint32_t pages_desc; /**< Number of pages used for page descriptors. */ - uint32_t pages_active; /**< Number of pages flagged as active. */ - uint32_t pages_used; /**< Number of pages flagged as used. */ - uint32_t pages_bad; /**< Number of pages detected as bad. */ + uint32_t pages; /**< Total number of pages in the segment. */ + uint32_t pages_desc; /**< Number of pages used for page descriptors. */ + uint32_t pages_active; /**< Number of pages flagged as active. */ + uint32_t pages_used; /**< Number of pages flagged as used. */ + uint32_t pages_bad; /**< Number of pages detected as bad. */ - uint32_t failed; /**< The segment has failed. */ + uint32_t failed; /**< The segment has failed. */ - uint32_t erased; /**< Counter to debugging. Wear support would + uint32_t erased; /**< Counter to debugging. Wear support would remove this. */ } rtems_fdisk_segment_ctl; /** * Segment control table queue. */ -typedef struct rtems_fdisk_segment_ctl_queue -{ - rtems_fdisk_segment_ctl* head; - rtems_fdisk_segment_ctl* tail; +typedef struct rtems_fdisk_segment_ctl_queue { + rtems_fdisk_segment_ctl *head; + rtems_fdisk_segment_ctl *tail; uint32_t count; } rtems_fdisk_segment_ctl_queue; /** * Flash Device Control holds the segment controls */ -typedef struct rtems_fdisk_device_ctl -{ - rtems_fdisk_segment_ctl* segments; /**< Segment controls. */ +typedef struct rtems_fdisk_device_ctl { + rtems_fdisk_segment_ctl *segments; /**< Segment controls. */ uint32_t segment_count; /**< Segment control count. */ - const rtems_fdisk_device_desc* descriptor; /**< Device descriptor. */ + const rtems_fdisk_device_desc *descriptor; /**< Device descriptor. */ } rtems_fdisk_device_ctl; /** * The Block control holds the segment and page with the data. */ -typedef struct rtems_fdisk_block_ctl -{ - rtems_fdisk_segment_ctl* segment; /**< The segment with the block. */ +typedef struct rtems_fdisk_block_ctl { + rtems_fdisk_segment_ctl *segment; /**< The segment with the block. */ uint32_t page; /**< The page in the segment. */ } rtems_fdisk_block_ctl; @@ -185,28 +180,27 @@ typedef struct rtems_fdisk_block_ctl * The virtual block table holds the mapping for blocks as seen by the disk * drivers to the device, segment and page numbers of the physical device. */ -typedef struct rtems_flashdisk -{ - rtems_device_major_number major; /**< The driver's major number. */ - rtems_device_minor_number minor; /**< The driver's minor number. */ +typedef struct rtems_flashdisk { + rtems_device_major_number major; /**< The driver's major number. */ + rtems_device_minor_number minor; /**< The driver's minor number. */ - uint32_t flags; /**< configuration flags. */ + uint32_t flags; /**< configuration flags. */ - uint32_t compact_segs; /**< Max segs to compact at once. */ - uint32_t avail_compact_segs; /**< The number of segments when + uint32_t compact_segs; /**< Max segs to compact at once. */ + uint32_t avail_compact_segs; /**< The number of segments when compaction occurs when writing. */ - uint32_t block_size; /**< The block size for this disk. */ - rtems_fdisk_block_ctl* blocks; /**< The block to segment-page + uint32_t block_size; /**< The block size for this disk. */ + rtems_fdisk_block_ctl *blocks; /**< The block to segment-page mappings. */ - uint32_t block_count; /**< The number of avail. blocks. */ - uint32_t unavail_blocks; /**< The number of unavail blocks. */ - uint32_t starvation_threshold; /**< Erased blocks starvation threshold. */ - uint32_t erased_blocks; /**< The number of erased blocks. */ + uint32_t block_count; /**< The number of avail. blocks. */ + uint32_t unavail_blocks; /**< The number of unavail blocks. */ + uint32_t starvation_threshold; /**< Erased blocks starvation threshold. */ + uint32_t erased_blocks; /**< The number of erased blocks. */ - rtems_fdisk_device_ctl* devices; /**< The flash devices for this + rtems_fdisk_device_ctl *devices; /**< The flash devices for this disk. */ - uint32_t device_count; /**< The number of flash devices. */ + uint32_t device_count; /**< The number of flash devices. */ rtems_fdisk_segment_ctl_queue available; /**< The queue of segments with available pages. */ @@ -214,21 +208,21 @@ typedef struct rtems_flashdisk pages used. */ rtems_fdisk_segment_ctl_queue erase; /**< The list of segments to be erased. */ - rtems_fdisk_segment_ctl_queue failed; /**< The list of segments that failed + rtems_fdisk_segment_ctl_queue failed; /**< The list of segments that failed when being erased. */ - rtems_mutex lock; /**< Mutex for threading protection.*/ + rtems_mutex lock; /**< Mutex for threading protection.*/ - uint8_t* copy_buffer; /**< Copy buf used during compacting */ + uint8_t *copy_buffer; /**< Copy buf used during compacting */ - uint32_t info_level; /**< The info trace level. */ + uint32_t info_level; /**< The info trace level. */ - uint32_t starvations; /**< Erased blocks starvations counter. */ + uint32_t starvations; /**< Erased blocks starvations counter. */ } rtems_flashdisk; /** * The CRC16 factor table. Created during initialisation. */ -static uint16_t* rtems_fdisk_crc16_factor; +static uint16_t *rtems_fdisk_crc16_factor; /** * Calculate the CRC16 checksum. @@ -236,8 +230,9 @@ static uint16_t* rtems_fdisk_crc16_factor; * @param _b The byte to checksum. * @param _c The current checksum. */ -#define rtems_fdisk_calc_crc16(_b, _c) \ - rtems_fdisk_crc16_factor[((_b) ^ ((_c) & 0xff)) & 0xff] ^ (((_c) >> 8) & 0xff) +#define rtems_fdisk_calc_crc16( _b, _c ) \ + rtems_fdisk_crc16_factor[ ( ( _b ) ^ ( ( _c ) & 0xff ) ) & 0xff ] ^ \ + ( ( ( _c ) >> 8 ) & 0xff ) /** * Generate the CRC table. @@ -246,22 +241,22 @@ static uint16_t* rtems_fdisk_crc16_factor; * @relval RTEMS_SUCCESSFUL The table was generated. * @retval RTEMS_NO_MEMORY The table could not be allocated from the heap. */ -static rtems_status_code -rtems_fdisk_crc16_gen_factors (uint16_t pattern) +static rtems_status_code rtems_fdisk_crc16_gen_factors( uint16_t pattern ) { uint32_t b; - rtems_fdisk_crc16_factor = malloc (sizeof (uint16_t) * 256); - if (!rtems_fdisk_crc16_factor) + rtems_fdisk_crc16_factor = malloc( sizeof( uint16_t ) * 256 ); + if ( !rtems_fdisk_crc16_factor ) { return RTEMS_NO_MEMORY; + } - for (b = 0; b < 256; b++) - { + for ( b = 0; b < 256; b++ ) { uint32_t i; uint16_t v = b; - for (i = 8; i--;) - v = v & 1 ? (v >> 1) ^ pattern : v >> 1; - rtems_fdisk_crc16_factor[b] = v & 0xffff; + for ( i = 8; i--; ) { + v = v & 1 ? ( v >> 1 ) ^ pattern : v >> 1; + } + rtems_fdisk_crc16_factor[ b ] = v & 0xffff; } return RTEMS_SUCCESSFUL; } @@ -275,30 +270,32 @@ rtems_fdisk_crc16_gen_factors (uint16_t pattern) * @param ... The arguments for the format text. * @return int The number of bytes written to the output. */ -static int -rtems_fdisk_printf (const rtems_flashdisk* fd, const char *format, ...) +static int rtems_fdisk_printf( + const rtems_flashdisk *fd, + const char *format, + ... +) { int ret = 0; - if (fd->info_level >= 3) - { + if ( fd->info_level >= 3 ) { va_list args; - va_start (args, format); - fprintf (stdout, "fdisk:"); - ret = vfprintf (stdout, format, args); - fprintf (stdout, "\n"); - fflush (stdout); - va_end (args); + va_start( args, format ); + fprintf( stdout, "fdisk:" ); + ret = vfprintf( stdout, format, args ); + fprintf( stdout, "\n" ); + fflush( stdout ); + va_end( args ); } return ret; } -static bool -rtems_fdisk_is_erased_blocks_starvation (rtems_flashdisk* fd) +static bool rtems_fdisk_is_erased_blocks_starvation( rtems_flashdisk *fd ) { bool starvation = fd->erased_blocks < fd->starvation_threshold; - if (starvation) + if ( starvation ) { fd->starvations++; + } return starvation; } @@ -311,19 +308,21 @@ rtems_fdisk_is_erased_blocks_starvation (rtems_flashdisk* fd) * @param ... The arguments for the format text. * @return int The number of bytes written to the output. */ -static int -rtems_fdisk_info (const rtems_flashdisk* fd, const char *format, ...) +static int rtems_fdisk_info( + const rtems_flashdisk *fd, + const char *format, + ... +) { int ret = 0; - if (fd->info_level >= 2) - { + if ( fd->info_level >= 2 ) { va_list args; - va_start (args, format); - fprintf (stdout, "fdisk:"); - ret = vfprintf (stdout, format, args); - fprintf (stdout, "\n"); - fflush (stdout); - va_end (args); + va_start( args, format ); + fprintf( stdout, "fdisk:" ); + ret = vfprintf( stdout, format, args ); + fprintf( stdout, "\n" ); + fflush( stdout ); + va_end( args ); } return ret; } @@ -336,19 +335,21 @@ rtems_fdisk_info (const rtems_flashdisk* fd, const char *format, ...) * @param ... The arguments for the format text. * @return int The number of bytes written to the output. */ -static int -rtems_fdisk_warning (const rtems_flashdisk* fd, const char *format, ...) +static int rtems_fdisk_warning( + const rtems_flashdisk *fd, + const char *format, + ... +) { int ret = 0; - if (fd->info_level >= 1) - { + if ( fd->info_level >= 1 ) { va_list args; - va_start (args, format); - fprintf (stdout, "fdisk:warning:"); - ret = vfprintf (stdout, format, args); - fprintf (stdout, "\n"); - fflush (stdout); - va_end (args); + va_start( args, format ); + fprintf( stdout, "fdisk:warning:" ); + ret = vfprintf( stdout, format, args ); + fprintf( stdout, "\n" ); + fflush( stdout ); + va_end( args ); } return ret; } @@ -361,17 +362,16 @@ rtems_fdisk_warning (const rtems_flashdisk* fd, const char *format, ...) * @param ... The arguments for the format text. * @return int The number of bytes written to the output. */ -static int -rtems_fdisk_error (const char *format, ...) +static int rtems_fdisk_error( const char *format, ... ) { - int ret; + int ret; va_list args; - va_start (args, format); - fprintf (stderr, "fdisk:error:"); - ret = vfprintf (stderr, format, args); - fprintf (stderr, "\n"); - fflush (stderr); - va_end (args); + va_start( args, format ); + fprintf( stderr, "fdisk:error:" ); + ret = vfprintf( stderr, format, args ); + fprintf( stderr, "\n" ); + fflush( stderr ); + va_end( args ); return ret; } @@ -381,24 +381,24 @@ rtems_fdisk_error (const char *format, ...) * @param format The format string. See printf for details. * @param ... The arguments for the format text. */ -static void -rtems_fdisk_abort (const char *format, ...) +static void rtems_fdisk_abort( const char *format, ... ) { va_list args; - va_start (args, format); - fprintf (stderr, "fdisk:abort:"); - vfprintf (stderr, format, args); - fprintf (stderr, "\n"); - fflush (stderr); - va_end (args); - exit (1); + va_start( args, format ); + fprintf( stderr, "fdisk:abort:" ); + vfprintf( stderr, format, args ); + fprintf( stderr, "\n" ); + fflush( stderr ); + va_end( args ); + exit( 1 ); } /** * Initialise the segment control queue. */ -static void -rtems_fdisk_segment_queue_init (rtems_fdisk_segment_ctl_queue* queue) +static void rtems_fdisk_segment_queue_init( + rtems_fdisk_segment_ctl_queue *queue +) { queue->head = queue->tail = 0; queue->count = 0; @@ -407,17 +407,18 @@ rtems_fdisk_segment_queue_init (rtems_fdisk_segment_ctl_queue* queue) /** * Push to the head of the segment control queue. */ -static void -rtems_fdisk_segment_queue_push_head (rtems_fdisk_segment_ctl_queue* queue, - rtems_fdisk_segment_ctl* sc) +static void rtems_fdisk_segment_queue_push_head( + rtems_fdisk_segment_ctl_queue *queue, + rtems_fdisk_segment_ctl *sc +) { - if (sc) - { + if ( sc ) { sc->next = queue->head; queue->head = sc; - if (queue->tail == 0) + if ( queue->tail == 0 ) { queue->tail = sc; + } queue->count++; } } @@ -425,16 +426,17 @@ rtems_fdisk_segment_queue_push_head (rtems_fdisk_segment_ctl_queue* queue, /** * Pop the head of the segment control queue. */ -static rtems_fdisk_segment_ctl* -rtems_fdisk_segment_queue_pop_head (rtems_fdisk_segment_ctl_queue* queue) +static rtems_fdisk_segment_ctl *rtems_fdisk_segment_queue_pop_head( + rtems_fdisk_segment_ctl_queue *queue +) { - if (queue->head) - { - rtems_fdisk_segment_ctl* sc = queue->head; + if ( queue->head ) { + rtems_fdisk_segment_ctl *sc = queue->head; queue->head = sc->next; - if (!queue->head) + if ( !queue->head ) { queue->tail = 0; + } queue->count--; @@ -449,21 +451,18 @@ rtems_fdisk_segment_queue_pop_head (rtems_fdisk_segment_ctl_queue* queue) /** * Push to the tail of the segment control queue. */ -static void -rtems_fdisk_segment_queue_push_tail (rtems_fdisk_segment_ctl_queue* queue, - rtems_fdisk_segment_ctl* sc) +static void rtems_fdisk_segment_queue_push_tail( + rtems_fdisk_segment_ctl_queue *queue, + rtems_fdisk_segment_ctl *sc +) { - if (sc) - { + if ( sc ) { sc->next = 0; - if (queue->head) - { + if ( queue->head ) { queue->tail->next = sc; - queue->tail = sc; - } - else - { + queue->tail = sc; + } else { queue->head = queue->tail = sc; } @@ -474,32 +473,30 @@ rtems_fdisk_segment_queue_push_tail (rtems_fdisk_segment_ctl_queue* queue, /** * Remove from the segment control queue. */ -static void -rtems_fdisk_segment_queue_remove (rtems_fdisk_segment_ctl_queue* queue, - rtems_fdisk_segment_ctl* sc) +static void rtems_fdisk_segment_queue_remove( + rtems_fdisk_segment_ctl_queue *queue, + rtems_fdisk_segment_ctl *sc +) { - rtems_fdisk_segment_ctl* prev = 0; - rtems_fdisk_segment_ctl* it = queue->head; + rtems_fdisk_segment_ctl *prev = 0; + rtems_fdisk_segment_ctl *it = queue->head; /* * Do not change sc->next as sc could be on another queue. */ - while (it) - { - if (sc == it) - { - if (prev == 0) - { + while ( it ) { + if ( sc == it ) { + if ( prev == 0 ) { queue->head = sc->next; - if (queue->head == 0) + if ( queue->head == 0 ) { queue->tail = 0; - } - else - { + } + } else { prev->next = sc->next; - if (queue->tail == sc) + if ( queue->tail == sc ) { queue->tail = prev; + } } sc->next = 0; queue->count--; @@ -515,20 +512,18 @@ rtems_fdisk_segment_queue_remove (rtems_fdisk_segment_ctl_queue* queue, * Insert into the segment control queue before the specific * segment control item. */ -static void -rtems_fdisk_segment_queue_insert_before (rtems_fdisk_segment_ctl_queue* queue, - rtems_fdisk_segment_ctl* item, - rtems_fdisk_segment_ctl* sc) +static void rtems_fdisk_segment_queue_insert_before( + rtems_fdisk_segment_ctl_queue *queue, + rtems_fdisk_segment_ctl *item, + rtems_fdisk_segment_ctl *sc +) { - if (item) - { - rtems_fdisk_segment_ctl** prev = &queue->head; - rtems_fdisk_segment_ctl* it = queue->head; + if ( item ) { + rtems_fdisk_segment_ctl **prev = &queue->head; + rtems_fdisk_segment_ctl *it = queue->head; - while (it) - { - if (item == it) - { + while ( it ) { + if ( item == it ) { sc->next = item; *prev = sc; queue->count++; @@ -540,14 +535,15 @@ rtems_fdisk_segment_queue_insert_before (rtems_fdisk_segment_ctl_queue* queue, } } - rtems_fdisk_segment_queue_push_tail (queue, sc); + rtems_fdisk_segment_queue_push_tail( queue, sc ); } /** * Count the number of elements on the list. */ -static uint32_t -rtems_fdisk_segment_queue_count (rtems_fdisk_segment_ctl_queue* queue) +static uint32_t rtems_fdisk_segment_queue_count( + rtems_fdisk_segment_ctl_queue *queue +) { return queue->count; } @@ -555,14 +551,14 @@ rtems_fdisk_segment_queue_count (rtems_fdisk_segment_ctl_queue* queue) /** * Count the number of elements on the list. */ -static uint32_t -rtems_fdisk_segment_count_queue (rtems_fdisk_segment_ctl_queue* queue) +static uint32_t rtems_fdisk_segment_count_queue( + rtems_fdisk_segment_ctl_queue *queue +) { - rtems_fdisk_segment_ctl* sc = queue->head; + rtems_fdisk_segment_ctl *sc = queue->head; uint32_t count = 0; - while (sc) - { + while ( sc ) { count++; sc = sc->next; } @@ -573,16 +569,17 @@ rtems_fdisk_segment_count_queue (rtems_fdisk_segment_ctl_queue* queue) /** * See if a segment control is present on this queue. */ -static bool -rtems_fdisk_segment_queue_present (rtems_fdisk_segment_ctl_queue* queue, - rtems_fdisk_segment_ctl* sc) +static bool rtems_fdisk_segment_queue_present( + rtems_fdisk_segment_ctl_queue *queue, + rtems_fdisk_segment_ctl *sc +) { - rtems_fdisk_segment_ctl* it = queue->head; + rtems_fdisk_segment_ctl *it = queue->head; - while (it) - { - if (it == sc) + while ( it ) { + if ( it == sc ) { return true; + } it = it->next; } @@ -592,54 +589,64 @@ rtems_fdisk_segment_queue_present (rtems_fdisk_segment_ctl_queue* queue, /** * Format a string with the queue status. */ -static void -rtems_fdisk_queue_status (rtems_flashdisk* fd, - rtems_fdisk_segment_ctl* sc, - char queues[5]) +static void rtems_fdisk_queue_status( + rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *sc, + char queues[ 5 ] +) { - queues[0] = rtems_fdisk_segment_queue_present (&fd->available, sc) ? 'A' : '-'; - queues[1] = rtems_fdisk_segment_queue_present (&fd->used, sc) ? 'U' : '-'; - queues[2] = rtems_fdisk_segment_queue_present (&fd->erase, sc) ? 'E' : '-'; - queues[3] = rtems_fdisk_segment_queue_present (&fd->failed, sc) ? 'F' : '-'; - queues[4] = '\0'; + queues[ 0 ] = rtems_fdisk_segment_queue_present( &fd->available, sc ) ? 'A' + : '-'; + queues[ 1 ] = rtems_fdisk_segment_queue_present( &fd->used, sc ) ? 'U' : '-'; + queues[ 2 ] = rtems_fdisk_segment_queue_present( &fd->erase, sc ) ? 'E' + : '-'; + queues[ 3 ] = rtems_fdisk_segment_queue_present( &fd->failed, sc ) ? 'F' + : '-'; + queues[ 4 ] = '\0'; } /** * Check if the page descriptor is erased. */ -static bool -rtems_fdisk_page_desc_erased (const rtems_fdisk_page_desc* pd) +static bool rtems_fdisk_page_desc_erased( const rtems_fdisk_page_desc *pd ) { - return ((pd->crc == 0xffff) && - (pd->flags == 0xffff) && - (pd->block == 0xffffffff)) ? true : false; + return ( ( pd->crc == 0xffff ) && ( pd->flags == 0xffff ) && + ( pd->block == 0xffffffff ) ) + ? true + : false; } /** * Check if the flags are set. The flags are inverted as we can * only set a flag by changing it from 1 to 0. */ -static bool -rtems_fdisk_page_desc_flags_set (rtems_fdisk_page_desc* pd, uint16_t flags) +static bool rtems_fdisk_page_desc_flags_set( + rtems_fdisk_page_desc *pd, + uint16_t flags +) { - return (pd->flags & flags) == 0 ? true : false; + return ( pd->flags & flags ) == 0 ? true : false; } /** * Check if the flags are clear. The flags are inverted as we can * only set a flag by changing it from 1 to 0. */ -static bool -rtems_fdisk_page_desc_flags_clear (rtems_fdisk_page_desc* pd, uint16_t flags) +static bool rtems_fdisk_page_desc_flags_clear( + rtems_fdisk_page_desc *pd, + uint16_t flags +) { - return (pd->flags & flags) == flags ? true : false; + return ( pd->flags & flags ) == flags ? true : false; } /** * Set the flags. Setting means clear the bit to 0. */ -static void -rtems_fdisk_page_desc_set_flags (rtems_fdisk_page_desc* pd, uint16_t flags) +static void rtems_fdisk_page_desc_set_flags( + rtems_fdisk_page_desc *pd, + uint16_t flags +) { pd->flags &= ~flags; } @@ -648,24 +655,25 @@ rtems_fdisk_page_desc_set_flags (rtems_fdisk_page_desc* pd, uint16_t flags) * Get the segment descriptor for a device and segment. There are * no range checks. */ -static const rtems_fdisk_segment_desc* -rtems_fdisk_seg_descriptor (const rtems_flashdisk* fd, - uint32_t device, - uint32_t segment) +static const rtems_fdisk_segment_desc *rtems_fdisk_seg_descriptor( + const rtems_flashdisk *fd, + uint32_t device, + uint32_t segment +) { - return fd->devices[device].segments[segment].descriptor; + return fd->devices[ device ].segments[ segment ].descriptor; } /** * Count the segments for a device. */ -static uint32_t -rtems_fdisk_count_segments (const rtems_fdisk_device_desc* dd) +static uint32_t rtems_fdisk_count_segments( const rtems_fdisk_device_desc *dd ) { uint32_t count = 0; uint32_t segment; - for (segment = 0; segment < dd->segment_count; segment++) - count += dd->segments[segment].count; + for ( segment = 0; segment < dd->segment_count; segment++ ) { + count += dd->segments[ segment ].count; + } return count; } @@ -676,9 +684,10 @@ rtems_fdisk_count_segments (const rtems_fdisk_device_desc* dd) * @param sd The segment descriptor. * @param page_size The page size in bytes. */ -static uint32_t -rtems_fdisk_pages_in_segment (const rtems_fdisk_segment_desc* sd, - uint32_t page_size) +static uint32_t rtems_fdisk_pages_in_segment( + const rtems_fdisk_segment_desc *sd, + uint32_t page_size +) { return sd->size / page_size; } @@ -690,36 +699,41 @@ rtems_fdisk_pages_in_segment (const rtems_fdisk_segment_desc* sd, * The segment control contains the number of pages used as descriptors * and should be used rather than this call where possible. */ -static uint32_t -rtems_fdisk_page_desc_pages (const rtems_fdisk_segment_desc* sd, - uint32_t page_size) +static uint32_t rtems_fdisk_page_desc_pages( + const rtems_fdisk_segment_desc *sd, + uint32_t page_size +) { - uint32_t pages = rtems_fdisk_pages_in_segment (sd, page_size); - uint32_t bytes = pages * sizeof (rtems_fdisk_page_desc); - return ((bytes - 1) / page_size) + 1; + uint32_t pages = rtems_fdisk_pages_in_segment( sd, page_size ); + uint32_t bytes = pages * sizeof( rtems_fdisk_page_desc ); + return ( ( bytes - 1 ) / page_size ) + 1; } /** * The number of available pages is the total pages less the * active, used and bad pages. */ -static uint32_t -rtems_fdisk_seg_pages_available (const rtems_fdisk_segment_ctl* sc) +static uint32_t rtems_fdisk_seg_pages_available( + const rtems_fdisk_segment_ctl *sc +) { - return sc->pages - (sc->pages_active + sc->pages_used + sc->pages_bad); + return sc->pages - ( sc->pages_active + sc->pages_used + sc->pages_bad ); } /** * Find the next available page in a segment. */ -static uint32_t -rtems_fdisk_seg_next_available_page (rtems_fdisk_segment_ctl* sc) +static uint32_t rtems_fdisk_seg_next_available_page( + rtems_fdisk_segment_ctl *sc +) { - rtems_fdisk_page_desc* pd = &sc->page_descriptors[0]; + rtems_fdisk_page_desc *pd = &sc->page_descriptors[ 0 ]; uint32_t page; - for (page = 0; page < sc->pages; page++, pd++) - if (rtems_fdisk_page_desc_erased (pd)) + for ( page = 0; page < sc->pages; page++, pd++ ) { + if ( rtems_fdisk_page_desc_erased( pd ) ) { break; + } + } return page; } @@ -727,17 +741,20 @@ rtems_fdisk_seg_next_available_page (rtems_fdisk_segment_ctl* sc) /** * Find the segment on the queue that has the most free pages. */ -static rtems_fdisk_segment_ctl* -rtems_fdisk_seg_most_available (const rtems_fdisk_segment_ctl_queue* queue) +static rtems_fdisk_segment_ctl *rtems_fdisk_seg_most_available( + const rtems_fdisk_segment_ctl_queue *queue +) { - rtems_fdisk_segment_ctl* sc = queue->head; - rtems_fdisk_segment_ctl* biggest = queue->head; + rtems_fdisk_segment_ctl *sc = queue->head; + rtems_fdisk_segment_ctl *biggest = queue->head; - while (sc) - { - if (rtems_fdisk_seg_pages_available (sc) > - rtems_fdisk_seg_pages_available (biggest)) + while ( sc ) { + if ( + rtems_fdisk_seg_pages_available( sc ) > + rtems_fdisk_seg_pages_available( biggest ) + ) { biggest = sc; + } sc = sc->next; } @@ -764,18 +781,18 @@ rtems_fdisk_seg_pages_all_used (const rtems_fdisk_segment_ctl* sc) * @param dd The device descriptor. * @param page_size The page size in bytes. */ -static uint32_t -rtems_fdisk_blocks_in_device (const rtems_fdisk_device_desc* dd, - uint32_t page_size) +static uint32_t rtems_fdisk_blocks_in_device( + const rtems_fdisk_device_desc *dd, + uint32_t page_size +) { uint32_t count = 0; uint32_t s; - for (s = 0; s < dd->segment_count; s++) - { - const rtems_fdisk_segment_desc* sd = &dd->segments[s]; - count += - (rtems_fdisk_pages_in_segment (sd, page_size) - - rtems_fdisk_page_desc_pages (sd, page_size)) * sd->count; + for ( s = 0; s < dd->segment_count; s++ ) { + const rtems_fdisk_segment_desc *sd = &dd->segments[ s ]; + count += ( rtems_fdisk_pages_in_segment( sd, page_size ) - + rtems_fdisk_page_desc_pages( sd, page_size ) ) * + sd->count; } return count; } @@ -783,26 +800,33 @@ rtems_fdisk_blocks_in_device (const rtems_fdisk_device_desc* dd, /** * Read a block of data from a segment. */ -static int -rtems_fdisk_seg_read (const rtems_flashdisk* fd, - const rtems_fdisk_segment_ctl* sc, - uint32_t offset, - void* buffer, - uint32_t size) +static int rtems_fdisk_seg_read( + const rtems_flashdisk *fd, + const rtems_fdisk_segment_ctl *sc, + uint32_t offset, + void *buffer, + uint32_t size +) { uint32_t device; uint32_t segment; - const rtems_fdisk_segment_desc* sd; - const rtems_fdisk_driver_handlers* ops; + const rtems_fdisk_segment_desc *sd; + const rtems_fdisk_driver_handlers *ops; device = sc->device; segment = sc->segment; - sd = rtems_fdisk_seg_descriptor (fd, device, segment); - ops = fd->devices[device].descriptor->flash_ops; + sd = rtems_fdisk_seg_descriptor( fd, device, segment ); + ops = fd->devices[ device ].descriptor->flash_ops; #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " seg-read: %02d-%03d: o=%08x s=%d", - device, segment, offset, size); + rtems_fdisk_printf( + fd, + " seg-read: %02d-%03d: o=%08x s=%d", + device, + segment, + offset, + size + ); #endif - return ops->read (sd, device, segment, offset, buffer, size); + return ops->read( sd, device, segment, offset, buffer, size ); } /** @@ -810,29 +834,37 @@ rtems_fdisk_seg_read (const rtems_flashdisk* fd, * location in the segment is erased and able to take the * data. */ -static int -rtems_fdisk_seg_write (const rtems_flashdisk* fd, - rtems_fdisk_segment_ctl* sc, - uint32_t offset, - const void* buffer, - uint32_t size) +static int rtems_fdisk_seg_write( + const rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *sc, + uint32_t offset, + const void *buffer, + uint32_t size +) { - int ret; + int ret; uint32_t device; uint32_t segment; - const rtems_fdisk_segment_desc* sd; - const rtems_fdisk_driver_handlers* ops; + const rtems_fdisk_segment_desc *sd; + const rtems_fdisk_driver_handlers *ops; device = sc->device; segment = sc->segment; - sd = rtems_fdisk_seg_descriptor (fd, device, segment); - ops = fd->devices[device].descriptor->flash_ops; + sd = rtems_fdisk_seg_descriptor( fd, device, segment ); + ops = fd->devices[ device ].descriptor->flash_ops; #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " seg-write: %02d-%03d: o=%08x s=%d", - device, segment, offset, size); + rtems_fdisk_printf( + fd, + " seg-write: %02d-%03d: o=%08x s=%d", + device, + segment, + offset, + size + ); #endif - ret = ops->write (sd, device, segment, offset, buffer, size); - if (ret) + ret = ops->write( sd, device, segment, offset, buffer, size ); + if ( ret ) { sc->failed = true; + } return ret; } @@ -840,220 +872,291 @@ rtems_fdisk_seg_write (const rtems_flashdisk* fd, /** * Blank check the area of a segment. */ -static int -rtems_fdisk_seg_blank_check (const rtems_flashdisk* fd, - rtems_fdisk_segment_ctl* sc, - uint32_t offset, - uint32_t size) +static int rtems_fdisk_seg_blank_check( + const rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *sc, + uint32_t offset, + uint32_t size +) { uint32_t device; uint32_t segment; - const rtems_fdisk_segment_desc* sd; - const rtems_fdisk_driver_handlers* ops; + const rtems_fdisk_segment_desc *sd; + const rtems_fdisk_driver_handlers *ops; device = sc->device; segment = sc->segment; - sd = rtems_fdisk_seg_descriptor (fd, device, segment); - ops = fd->devices[device].descriptor->flash_ops; + sd = rtems_fdisk_seg_descriptor( fd, device, segment ); + ops = fd->devices[ device ].descriptor->flash_ops; #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " seg-blank: %02d-%03d: o=%08x s=%d", - device, segment, offset, size); + rtems_fdisk_printf( + fd, + " seg-blank: %02d-%03d: o=%08x s=%d", + device, + segment, + offset, + size + ); #endif - return ops->blank (sd, device, segment, offset, size); + return ops->blank( sd, device, segment, offset, size ); } /** * Verify the data with the data in a segment. */ -static int -rtems_fdisk_seg_verify (const rtems_flashdisk* fd, - uint32_t device, - uint32_t segment, - uint32_t offset, - const void* buffer, - uint32_t size) +static int rtems_fdisk_seg_verify( + const rtems_flashdisk *fd, + uint32_t device, + uint32_t segment, + uint32_t offset, + const void *buffer, + uint32_t size +) { - const rtems_fdisk_segment_desc* sd; - const rtems_fdisk_driver_handlers* ops; - sd = rtems_fdisk_seg_descriptor (fd, device, segment); - ops = fd->devices[device].descriptor->flash_ops; + const rtems_fdisk_segment_desc *sd; + const rtems_fdisk_driver_handlers *ops; + sd = rtems_fdisk_seg_descriptor( fd, device, segment ); + ops = fd->devices[ device ].descriptor->flash_ops; #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " seg-verify: %02d-%03d: o=%08x s=%d", - device, segment, offset, size); + rtems_fdisk_printf( + fd, + " seg-verify: %02d-%03d: o=%08x s=%d", + device, + segment, + offset, + size + ); #endif - return ops->verify (sd, device, segment, offset, buffer, size); + return ops->verify( sd, device, segment, offset, buffer, size ); } /** * Blank check a page of data in a segment. */ -static int -rtems_fdisk_seg_blank_check_page (const rtems_flashdisk* fd, - rtems_fdisk_segment_ctl* sc, - uint32_t page) +static int rtems_fdisk_seg_blank_check_page( + const rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *sc, + uint32_t page +) { - return rtems_fdisk_seg_blank_check (fd, sc, - page * fd->block_size, fd->block_size); + return rtems_fdisk_seg_blank_check( + fd, + sc, + page * fd->block_size, + fd->block_size + ); } /** * Read a page of data from a segment. */ -static int -rtems_fdisk_seg_read_page (const rtems_flashdisk* fd, - rtems_fdisk_segment_ctl* sc, - uint32_t page, - void* buffer) +static int rtems_fdisk_seg_read_page( + const rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *sc, + uint32_t page, + void *buffer +) { - return rtems_fdisk_seg_read (fd, sc, - page * fd->block_size, buffer, fd->block_size); + return rtems_fdisk_seg_read( + fd, + sc, + page * fd->block_size, + buffer, + fd->block_size + ); } /** * Write a page of data to a segment. */ -static int -rtems_fdisk_seg_write_page (rtems_flashdisk* fd, - rtems_fdisk_segment_ctl* sc, - uint32_t page, - const void* buffer) +static int rtems_fdisk_seg_write_page( + rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *sc, + uint32_t page, + const void *buffer +) { - if ((fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE)) - { - int ret = rtems_fdisk_seg_blank_check_page (fd, sc, page); - if (ret) + if (( fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE )) { + int ret = rtems_fdisk_seg_blank_check_page( fd, sc, page ); + if ( ret ) { return ret; + } } --fd->erased_blocks; - return rtems_fdisk_seg_write (fd, sc, - page * fd->block_size, buffer, fd->block_size); + return rtems_fdisk_seg_write( + fd, + sc, + page * fd->block_size, + buffer, + fd->block_size + ); } /** * Verify a page of data with the data in the segment. */ -static int -rtems_fdisk_seg_verify_page (const rtems_flashdisk* fd, - uint32_t device, - uint32_t segment, - uint32_t page, - const void* buffer) +static int rtems_fdisk_seg_verify_page( + const rtems_flashdisk *fd, + uint32_t device, + uint32_t segment, + uint32_t page, + const void *buffer +) { - return rtems_fdisk_seg_verify (fd, device, segment, - page * fd->block_size, buffer, fd->block_size); + return rtems_fdisk_seg_verify( + fd, + device, + segment, + page * fd->block_size, + buffer, + fd->block_size + ); } /** * Copy a page of data from one segment to another segment. */ -static int -rtems_fdisk_seg_copy_page (rtems_flashdisk* fd, - rtems_fdisk_segment_ctl* src_sc, - uint32_t src_page, - rtems_fdisk_segment_ctl* dst_sc, - uint32_t dst_page) +static int rtems_fdisk_seg_copy_page( + rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *src_sc, + uint32_t src_page, + rtems_fdisk_segment_ctl *dst_sc, + uint32_t dst_page +) { int ret; #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " seg-copy-page: %02d-%03d~%03d=>%02d-%03d~%03d", - src_sc->device, src_sc->segment, src_page, - dst_sc->device, dst_sc->segment, dst_page); + rtems_fdisk_printf( + fd, + " seg-copy-page: %02d-%03d~%03d=>%02d-%03d~%03d", + src_sc->device, + src_sc->segment, + src_page, + dst_sc->device, + dst_sc->segment, + dst_page + ); #endif - ret = rtems_fdisk_seg_read_page (fd, src_sc, src_page, - fd->copy_buffer); - if (ret) + ret = rtems_fdisk_seg_read_page( fd, src_sc, src_page, fd->copy_buffer ); + if ( ret ) { return ret; - return rtems_fdisk_seg_write_page (fd, dst_sc, dst_page, - fd->copy_buffer); + } + return rtems_fdisk_seg_write_page( fd, dst_sc, dst_page, fd->copy_buffer ); } /** * Write the page descriptor to a segment. This code assumes the page * descriptors are located at offset 0 in the segment. */ -static int -rtems_fdisk_seg_write_page_desc (const rtems_flashdisk* fd, - rtems_fdisk_segment_ctl* sc, - uint32_t page, - const rtems_fdisk_page_desc* page_desc) +static int rtems_fdisk_seg_write_page_desc( + const rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *sc, + uint32_t page, + const rtems_fdisk_page_desc *page_desc +) { - uint32_t offset = page * sizeof (rtems_fdisk_page_desc); - if ((fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE)) - { - int ret = rtems_fdisk_seg_blank_check (fd, sc, - offset, - sizeof (rtems_fdisk_page_desc)); - if (ret) + uint32_t offset = page * sizeof( rtems_fdisk_page_desc ); + if (( fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE )) { + int ret = rtems_fdisk_seg_blank_check( + fd, + sc, + offset, + sizeof( rtems_fdisk_page_desc ) + ); + if ( ret ) { return ret; + } } - return rtems_fdisk_seg_write (fd, sc, offset, - page_desc, sizeof (rtems_fdisk_page_desc)); + return rtems_fdisk_seg_write( + fd, + sc, + offset, + page_desc, + sizeof( rtems_fdisk_page_desc ) + ); } /** * Write the page descriptor flags to a segment. This code assumes the page * descriptors are located at offset 0 in the segment. */ -static int -rtems_fdisk_seg_write_page_desc_flags (const rtems_flashdisk* fd, - rtems_fdisk_segment_ctl* sc, - uint32_t page, - const rtems_fdisk_page_desc* page_desc) +static int rtems_fdisk_seg_write_page_desc_flags( + const rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *sc, + uint32_t page, + const rtems_fdisk_page_desc *page_desc +) { - uint32_t offset = ((page * sizeof (rtems_fdisk_page_desc)) + - ((uint8_t*) &page_desc->flags) - ((uint8_t*) page_desc)); - if ((fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE)) - { + uint32_t offset = + ( ( page * sizeof( rtems_fdisk_page_desc ) ) + + ( (uint8_t *) &page_desc->flags ) - ( (uint8_t *) page_desc ) ); + if (( fd->flags & RTEMS_FDISK_BLANK_CHECK_BEFORE_WRITE )) { uint16_t flash_flags; int ret; - ret = rtems_fdisk_seg_read (fd, sc, offset, - &flash_flags, sizeof (flash_flags)); - if (ret) + ret = rtems_fdisk_seg_read( + fd, + sc, + offset, + &flash_flags, + sizeof( flash_flags ) + ); + if ( ret ) { return ret; - if ((flash_flags & page_desc->flags) != page_desc->flags) - { - rtems_fdisk_error (" seg-write-page-flags: %02d-%03d-%03d: " - "flags not erased: 0x%04x-> 0x%04x", - sc->device, sc->segment, page, - flash_flags, page_desc->flags); + } + if ( ( flash_flags & page_desc->flags ) != page_desc->flags ) { + rtems_fdisk_error( + " seg-write-page-flags: %02d-%03d-%03d: " + "flags not erased: 0x%04x-> 0x%04x", + sc->device, + sc->segment, + page, + flash_flags, + page_desc->flags + ); return ret; } } - return rtems_fdisk_seg_write (fd, sc, offset, - &page_desc->flags, sizeof (page_desc->flags)); + return rtems_fdisk_seg_write( + fd, + sc, + offset, + &page_desc->flags, + sizeof( page_desc->flags ) + ); } /** * Erase a device. */ -static int -rtems_fdisk_device_erase (const rtems_flashdisk* fd, uint32_t device) +static int rtems_fdisk_device_erase( + const rtems_flashdisk *fd, + uint32_t device +) { - const rtems_fdisk_driver_handlers* ops; - ops = fd->devices[device].descriptor->flash_ops; + const rtems_fdisk_driver_handlers *ops; + ops = fd->devices[ device ].descriptor->flash_ops; #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " device-erase: %02d", device); + rtems_fdisk_printf( fd, " device-erase: %02d", device ); #endif - return ops->erase_device (fd->devices[device].descriptor, device); + return ops->erase_device( fd->devices[ device ].descriptor, device ); } /** * Erase all flash. */ -static int -rtems_fdisk_erase_flash (const rtems_flashdisk* fd) +static int rtems_fdisk_erase_flash( const rtems_flashdisk *fd ) { uint32_t device; - for (device = 0; device < fd->device_count; device++) - { + for ( device = 0; device < fd->device_count; device++ ) { int ret; #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, " erase-flash:%02d", device); + rtems_fdisk_info( fd, " erase-flash:%02d", device ); #endif - ret = rtems_fdisk_device_erase (fd, device); + ret = rtems_fdisk_device_erase( fd, device ); - if (ret != 0) + if ( ret != 0 ) { return ret; + } } return 0; } @@ -1061,14 +1164,17 @@ rtems_fdisk_erase_flash (const rtems_flashdisk* fd) /** * Calculate the checksum of a page in a segment. */ -static uint16_t -rtems_fdisk_page_checksum (const uint8_t* buffer, uint32_t page_size) +static uint16_t rtems_fdisk_page_checksum( + const uint8_t *buffer, + uint32_t page_size +) { uint16_t cs = 0xffff; uint32_t i; - for (i = 0; i < page_size; i++, buffer++) - cs = rtems_fdisk_calc_crc16 (*buffer, cs); + for ( i = 0; i < page_size; i++, buffer++ ) { + cs = rtems_fdisk_calc_crc16( *buffer, cs ); + } return cs; } @@ -1076,38 +1182,45 @@ rtems_fdisk_page_checksum (const uint8_t* buffer, uint32_t page_size) /** * Erase the segment. */ -static int -rtems_fdisk_erase_segment (rtems_flashdisk* fd, rtems_fdisk_segment_ctl* sc) +static int rtems_fdisk_erase_segment( + rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *sc +) { int ret; uint32_t device; uint32_t segment; - const rtems_fdisk_segment_desc* sd; - const rtems_fdisk_driver_handlers* ops; + const rtems_fdisk_segment_desc *sd; + const rtems_fdisk_driver_handlers *ops; device = sc->device; segment = sc->segment; - sd = rtems_fdisk_seg_descriptor (fd, device, segment); - ops = fd->devices[device].descriptor->flash_ops; - ret = ops->erase (sd, device, segment); - if (ret) - { - rtems_fdisk_error (" erase-segment:%02d-%03d: " \ - "segment erase failed: %s (%d)", - sc->device, sc->segment, strerror (ret), ret); + sd = rtems_fdisk_seg_descriptor( fd, device, segment ); + ops = fd->devices[ device ].descriptor->flash_ops; + ret = ops->erase( sd, device, segment ); + if ( ret ) { + rtems_fdisk_error( + " erase-segment:%02d-%03d: " + "segment erase failed: %s (%d)", + sc->device, + sc->segment, + strerror( ret ), + ret + ); sc->failed = true; - if (!rtems_fdisk_segment_queue_present (&fd->failed, sc)) - rtems_fdisk_segment_queue_push_tail (&fd->failed, sc); + if ( !rtems_fdisk_segment_queue_present( &fd->failed, sc ) ) { + rtems_fdisk_segment_queue_push_tail( &fd->failed, sc ); + } return ret; } fd->erased_blocks += sc->pages; sc->erased++; - memset (sc->page_descriptors, 0xff, sc->pages_desc * fd->block_size); + memset( sc->page_descriptors, 0xff, sc->pages_desc * fd->block_size ); sc->pages_active = 0; - sc->pages_used = 0; - sc->pages_bad = 0; + sc->pages_used = 0; + sc->pages_bad = 0; sc->failed = false; @@ -1116,7 +1229,7 @@ rtems_fdisk_erase_segment (rtems_flashdisk* fd, rtems_fdisk_segment_ctl* sc) * simple type of wear reduction. Every other available * segment will now get a go. */ - rtems_fdisk_segment_queue_push_tail (&fd->available, sc); + rtems_fdisk_segment_queue_push_tail( &fd->available, sc ); return 0; } @@ -1124,21 +1237,20 @@ rtems_fdisk_erase_segment (rtems_flashdisk* fd, rtems_fdisk_segment_ctl* sc) /** * Erase used segment. */ -static int -rtems_fdisk_erase_used (rtems_flashdisk* fd) +static int rtems_fdisk_erase_used( rtems_flashdisk *fd ) { - rtems_fdisk_segment_ctl* sc; + rtems_fdisk_segment_ctl *sc; int latched_ret = 0; - while ((sc = rtems_fdisk_segment_queue_pop_head (&fd->erase))) - { + while (( sc = rtems_fdisk_segment_queue_pop_head( &fd->erase ) )) { /* * The segment will either end up on the available queue or * the failed queue. */ - int ret = rtems_fdisk_erase_segment (fd, sc); - if (ret && !latched_ret) + int ret = rtems_fdisk_erase_segment( fd, sc ); + if ( ret && !latched_ret ) { latched_ret = ret; + } } return latched_ret; @@ -1152,32 +1264,42 @@ rtems_fdisk_erase_used (rtems_flashdisk* fd) * @param fd The flash disk control table. * @param sc The segment control table to be reallocated */ -static void -rtems_fdisk_queue_segment (rtems_flashdisk* fd, rtems_fdisk_segment_ctl* sc) +static void rtems_fdisk_queue_segment( + rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *sc +) { #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, " queue-seg:%02d-%03d: p=%d a=%d u=%d b=%d f=%s n=%s", - sc->device, sc->segment, - sc->pages, sc->pages_active, sc->pages_used, sc->pages_bad, - sc->failed ? "FAILED" : "no", sc->next ? "set" : "null"); + rtems_fdisk_info( + fd, + " queue-seg:%02d-%03d: p=%d a=%d u=%d b=%d f=%s n=%s", + sc->device, + sc->segment, + sc->pages, + sc->pages_active, + sc->pages_used, + sc->pages_bad, + sc->failed ? "FAILED" : "no", + sc->next ? "set" : "null" + ); #endif /* * If the segment has failed then check the failed queue and append * if not failed. */ - if (sc->failed) - { - if (!rtems_fdisk_segment_queue_present (&fd->failed, sc)) - rtems_fdisk_segment_queue_push_tail (&fd->failed, sc); + if ( sc->failed ) { + if ( !rtems_fdisk_segment_queue_present( &fd->failed, sc ) ) { + rtems_fdisk_segment_queue_push_tail( &fd->failed, sc ); + } return; } /* * Remove the queue from the available or used queue. */ - rtems_fdisk_segment_queue_remove (&fd->available, sc); - rtems_fdisk_segment_queue_remove (&fd->used, sc); + rtems_fdisk_segment_queue_remove( &fd->available, sc ); + rtems_fdisk_segment_queue_remove( &fd->used, sc ); /* * Are all the pages in the segment used ? @@ -1186,39 +1308,35 @@ rtems_fdisk_queue_segment (rtems_flashdisk* fd, rtems_fdisk_segment_ctl* sc) * to background erase perform the erase now. * */ - if (rtems_fdisk_seg_pages_available (sc) == 0) - { - if (sc->pages_active) - { + if ( rtems_fdisk_seg_pages_available( sc ) == 0 ) { + if ( sc->pages_active ) { /* * Keep the used queue sorted by the most number of used * pages. When we compact we want to move the pages into * a new segment and cover more than one segment. */ - rtems_fdisk_segment_ctl* seg = fd->used.head; + rtems_fdisk_segment_ctl *seg = fd->used.head; - while (seg) - { - if (sc->pages_used > seg->pages_used) + while ( seg ) { + if ( sc->pages_used > seg->pages_used ) { break; + } seg = seg->next; } - if (seg) - rtems_fdisk_segment_queue_insert_before (&fd->used, seg, sc); - else - rtems_fdisk_segment_queue_push_tail (&fd->used, sc); + if ( seg ) { + rtems_fdisk_segment_queue_insert_before( &fd->used, seg, sc ); + } else { + rtems_fdisk_segment_queue_push_tail( &fd->used, sc ); + } + } else { + if (( fd->flags & RTEMS_FDISK_BACKGROUND_ERASE )) { + rtems_fdisk_segment_queue_push_tail( &fd->erase, sc ); + } else { + rtems_fdisk_erase_segment( fd, sc ); + } } - else - { - if ((fd->flags & RTEMS_FDISK_BACKGROUND_ERASE)) - rtems_fdisk_segment_queue_push_tail (&fd->erase, sc); - else - rtems_fdisk_erase_segment (fd, sc); - } - } - else - { + } else { /* * The segment has pages available so place back onto the * available list. The list is sorted from the least number @@ -1245,99 +1363,125 @@ rtems_fdisk_queue_segment (rtems_flashdisk* fd, rtems_fdisk_segment_ctl* sc) * with all the counters updated with the number of * bits cleared and all bits set back to 1. */ - rtems_fdisk_segment_ctl* seg = fd->available.head; + rtems_fdisk_segment_ctl *seg = fd->available.head; - while (seg) - { - if (rtems_fdisk_seg_pages_available (sc) < - rtems_fdisk_seg_pages_available (seg)) + while ( seg ) { + if ( + rtems_fdisk_seg_pages_available( sc ) < + rtems_fdisk_seg_pages_available( seg ) + ) { break; + } seg = seg->next; } - if (seg) - rtems_fdisk_segment_queue_insert_before (&fd->available, seg, sc); - else - rtems_fdisk_segment_queue_push_tail (&fd->available, sc); + if ( seg ) { + rtems_fdisk_segment_queue_insert_before( &fd->available, seg, sc ); + } else { + rtems_fdisk_segment_queue_push_tail( &fd->available, sc ); + } } } -static int -rtems_fdisk_recycle_segment (rtems_flashdisk* fd, - rtems_fdisk_segment_ctl* ssc, - rtems_fdisk_segment_ctl* dsc, - uint32_t *pages) +static int rtems_fdisk_recycle_segment( + rtems_flashdisk *fd, + rtems_fdisk_segment_ctl *ssc, + rtems_fdisk_segment_ctl *dsc, + uint32_t *pages +) { int ret; uint32_t spage; uint32_t used = 0; uint32_t active = 0; - for (spage = 0; spage < ssc->pages; spage++) - { - rtems_fdisk_page_desc* spd = &ssc->page_descriptors[spage]; + for ( spage = 0; spage < ssc->pages; spage++ ) { + rtems_fdisk_page_desc *spd = &ssc->page_descriptors[ spage ]; - if (rtems_fdisk_page_desc_flags_set (spd, RTEMS_FDISK_PAGE_ACTIVE) && - !rtems_fdisk_page_desc_flags_set (spd, RTEMS_FDISK_PAGE_USED)) - { + if ( + rtems_fdisk_page_desc_flags_set( spd, RTEMS_FDISK_PAGE_ACTIVE ) && + !rtems_fdisk_page_desc_flags_set( spd, RTEMS_FDISK_PAGE_USED ) + ) { uint32_t dst_pages; - rtems_fdisk_page_desc* dpd; + rtems_fdisk_page_desc *dpd; uint32_t dpage; - dpage = rtems_fdisk_seg_next_available_page (dsc); - dpd = &dsc->page_descriptors[dpage]; + dpage = rtems_fdisk_seg_next_available_page( dsc ); + dpd = &dsc->page_descriptors[ dpage ]; active++; - if (dpage >= dsc->pages) - { - rtems_fdisk_error ("recycle: %02d-%03d: " \ - "no page desc available: %d", - dsc->device, dsc->segment, - rtems_fdisk_seg_pages_available (dsc)); + if ( dpage >= dsc->pages ) { + rtems_fdisk_error( + "recycle: %02d-%03d: " + "no page desc available: %d", + dsc->device, + dsc->segment, + rtems_fdisk_seg_pages_available( dsc ) + ); dsc->failed = true; - rtems_fdisk_queue_segment (fd, dsc); - rtems_fdisk_segment_queue_push_head (&fd->used, ssc); + rtems_fdisk_queue_segment( fd, dsc ); + rtems_fdisk_segment_queue_push_head( &fd->used, ssc ); return EIO; } #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, "recycle: %02d-%03d-%03d=>%02d-%03d-%03d", - ssc->device, ssc->segment, spage, - dsc->device, dsc->segment, dpage); + rtems_fdisk_info( + fd, + "recycle: %02d-%03d-%03d=>%02d-%03d-%03d", + ssc->device, + ssc->segment, + spage, + dsc->device, + dsc->segment, + dpage + ); #endif - ret = rtems_fdisk_seg_copy_page (fd, ssc, - spage + ssc->pages_desc, - dsc, - dpage + dsc->pages_desc); - if (ret) - { - rtems_fdisk_error ("recycle: %02d-%03d-%03d=>" \ - "%02d-%03d-%03d: " \ - "copy page failed: %s (%d)", - ssc->device, ssc->segment, spage, - dsc->device, dsc->segment, dpage, - strerror (ret), ret); - rtems_fdisk_queue_segment (fd, dsc); - rtems_fdisk_segment_queue_push_head (&fd->used, ssc); + ret = rtems_fdisk_seg_copy_page( + fd, + ssc, + spage + ssc->pages_desc, + dsc, + dpage + dsc->pages_desc + ); + if ( ret ) { + rtems_fdisk_error( + "recycle: %02d-%03d-%03d=>" + "%02d-%03d-%03d: " + "copy page failed: %s (%d)", + ssc->device, + ssc->segment, + spage, + dsc->device, + dsc->segment, + dpage, + strerror( ret ), + ret + ); + rtems_fdisk_queue_segment( fd, dsc ); + rtems_fdisk_segment_queue_push_head( &fd->used, ssc ); return ret; } *dpd = *spd; - ret = rtems_fdisk_seg_write_page_desc (fd, - dsc, - dpage, dpd); + ret = rtems_fdisk_seg_write_page_desc( fd, dsc, dpage, dpd ); - if (ret) - { - rtems_fdisk_error ("recycle: %02d-%03d-%03d=>" \ - "%02d-%03d-%03d: copy pd failed: %s (%d)", - ssc->device, ssc->segment, spage, - dsc->device, dsc->segment, dpage, - strerror (ret), ret); - rtems_fdisk_queue_segment (fd, dsc); - rtems_fdisk_segment_queue_push_head (&fd->used, ssc); + if ( ret ) { + rtems_fdisk_error( + "recycle: %02d-%03d-%03d=>" + "%02d-%03d-%03d: copy pd failed: %s (%d)", + ssc->device, + ssc->segment, + spage, + dsc->device, + dsc->segment, + dpage, + strerror( ret ), + ret + ); + rtems_fdisk_queue_segment( fd, dsc ); + rtems_fdisk_segment_queue_push_head( &fd->used, ssc ); return ret; } @@ -1353,30 +1497,25 @@ rtems_fdisk_recycle_segment (rtems_flashdisk* fd, ssc->pages_active--; ssc->pages_used++; - fd->blocks[spd->block].segment = dsc; - fd->blocks[spd->block].page = dpage; + fd->blocks[ spd->block ].segment = dsc; + fd->blocks[ spd->block ].page = dpage; /* * Place the segment on to the correct queue. */ - rtems_fdisk_queue_segment (fd, dsc); + rtems_fdisk_queue_segment( fd, dsc ); /* * Get new destination segment if necessary. */ - dst_pages = rtems_fdisk_seg_pages_available (dsc); - if (dst_pages == 0) - { - dsc = rtems_fdisk_seg_most_available (&fd->available); - if (!dsc) - { - if (ssc->pages_active == 0) - { - ret = rtems_fdisk_erase_segment (fd, ssc); - } - else - { - rtems_fdisk_error ("recycle: no available dst segment"); + dst_pages = rtems_fdisk_seg_pages_available( dsc ); + if ( dst_pages == 0 ) { + dsc = rtems_fdisk_seg_most_available( &fd->available ); + if ( !dsc ) { + if ( ssc->pages_active == 0 ) { + ret = rtems_fdisk_erase_segment( fd, ssc ); + } else { + rtems_fdisk_error( "recycle: no available dst segment" ); ret = EIO; } @@ -1384,30 +1523,30 @@ rtems_fdisk_recycle_segment (rtems_flashdisk* fd, } } - (*pages)--; - } - else if (rtems_fdisk_page_desc_erased (spd)) - { + ( *pages )--; + } else if ( rtems_fdisk_page_desc_erased( spd ) ) { --fd->erased_blocks; - } - else - { + } else { used++; } } #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, "ssc end: %d-%d: p=%ld, a=%ld, u=%ld", - ssc->device, ssc->segment, - pages, active, used); + rtems_fdisk_printf( + fd, + "ssc end: %d-%d: p=%ld, a=%ld, u=%ld", + ssc->device, + ssc->segment, + pages, + active, + used + ); #endif - if (ssc->pages_active != 0) - { - rtems_fdisk_error ("compacting: ssc pages not 0: %d", - ssc->pages_active); + if ( ssc->pages_active != 0 ) { + rtems_fdisk_error( "compacting: ssc pages not 0: %d", ssc->pages_active ); } - ret = rtems_fdisk_erase_segment (fd, ssc); + ret = rtems_fdisk_erase_segment( fd, ssc ); return ret; } @@ -1418,72 +1557,68 @@ rtems_fdisk_recycle_segment (rtems_flashdisk* fd, * used segments that will fit. The used queue is sorted on the least * number of active pages. */ -static int -rtems_fdisk_compact (rtems_flashdisk* fd) +static int rtems_fdisk_compact( rtems_flashdisk *fd ) { - int ret; - rtems_fdisk_segment_ctl* dsc; - rtems_fdisk_segment_ctl* ssc; - uint32_t compacted_segs = 0; - uint32_t pages; + int ret; + rtems_fdisk_segment_ctl *dsc; + rtems_fdisk_segment_ctl *ssc; + uint32_t compacted_segs = 0; + uint32_t pages; - if (rtems_fdisk_is_erased_blocks_starvation (fd)) - { + if ( rtems_fdisk_is_erased_blocks_starvation( fd ) ) { #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " resolve starvation"); + rtems_fdisk_printf( fd, " resolve starvation" ); #endif - ssc = rtems_fdisk_segment_queue_pop_head (&fd->used); - if (!ssc) - ssc = rtems_fdisk_segment_queue_pop_head (&fd->available); + ssc = rtems_fdisk_segment_queue_pop_head( &fd->used ); + if ( !ssc ) { + ssc = rtems_fdisk_segment_queue_pop_head( &fd->available ); + } - if (ssc) - { - dsc = rtems_fdisk_seg_most_available (&fd->available); - if (dsc) - { - ret = rtems_fdisk_recycle_segment (fd, ssc, dsc, &pages); - if (ret) + if ( ssc ) { + dsc = rtems_fdisk_seg_most_available( &fd->available ); + if ( dsc ) { + ret = rtems_fdisk_recycle_segment( fd, ssc, dsc, &pages ); + if ( ret ) { return ret; - } - else - { - rtems_fdisk_error ("compacting: starvation"); + } + } else { + rtems_fdisk_error( "compacting: starvation" ); return EIO; } - } - else - { - rtems_fdisk_error ("compacting: nothing to recycle"); + } else { + rtems_fdisk_error( "compacting: nothing to recycle" ); return EIO; } } - while (fd->used.head) - { - uint32_t dst_pages; - uint32_t segments; + while ( fd->used.head ) { + uint32_t dst_pages; + uint32_t segments; #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " compacting"); + rtems_fdisk_printf( fd, " compacting" ); #endif - dsc = rtems_fdisk_seg_most_available (&fd->available); + dsc = rtems_fdisk_seg_most_available( &fd->available ); - if (dsc == 0) - { - rtems_fdisk_error ("compacting: no available segments to compact too"); + if ( dsc == 0 ) { + rtems_fdisk_error( "compacting: no available segments to compact too" ); return EIO; } ssc = fd->used.head; - dst_pages = rtems_fdisk_seg_pages_available (dsc); + dst_pages = rtems_fdisk_seg_pages_available( dsc ); segments = 0; pages = 0; #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " dsc:%02d-%03d: most available", - dsc->device, dsc->segment); + rtems_fdisk_printf( + fd, + " dsc:%02d-%03d: most available", + dsc->device, + dsc->segment + ); #endif /* @@ -1494,10 +1629,10 @@ rtems_fdisk_compact (rtems_flashdisk* fd) * will fill. */ - while (ssc && - ((pages + ssc->pages_active) < dst_pages) && - ((compacted_segs + segments) < fd->compact_segs)) - { + while ( + ssc && ( ( pages + ssc->pages_active ) < dst_pages ) && + ( ( compacted_segs + segments ) < fd->compact_segs ) + ) { pages += ssc->pages_active; segments++; ssc = ssc->next; @@ -1509,35 +1644,38 @@ rtems_fdisk_compact (rtems_flashdisk* fd) * to free at least one more segment. */ - if (!ssc || (pages == 0) || ((compacted_segs + segments) == 1)) - { + if ( !ssc || ( pages == 0 ) || ( ( compacted_segs + segments ) == 1 ) ) { #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " nothing to compact"); + rtems_fdisk_printf( fd, " nothing to compact" ); #endif break; } #if RTEMS_FDISK_TRACE - rtems_fdisk_printf (fd, " ssc scan: %d-%d: p=%ld, seg=%ld", - ssc->device, ssc->segment, - pages, segments); + rtems_fdisk_printf( + fd, + " ssc scan: %d-%d: p=%ld, seg=%ld", + ssc->device, + ssc->segment, + pages, + segments + ); #endif - rtems_fdisk_segment_queue_remove (&fd->available, dsc); + rtems_fdisk_segment_queue_remove( &fd->available, dsc ); /* * We now copy the pages to the new segment. */ - while (pages) - { - ssc = rtems_fdisk_segment_queue_pop_head (&fd->used); + while ( pages ) { + ssc = rtems_fdisk_segment_queue_pop_head( &fd->used ); - if (ssc) - { - ret = rtems_fdisk_recycle_segment (fd, ssc, dsc, &pages); - if (ret) + if ( ssc ) { + ret = rtems_fdisk_recycle_segment( fd, ssc, dsc, &pages ); + if ( ret ) { return ret; + } } } @@ -1550,61 +1688,68 @@ rtems_fdisk_compact (rtems_flashdisk* fd) /** * Recover the block mappings from the devices. */ -static int -rtems_fdisk_recover_block_mappings (rtems_flashdisk* fd) +static int rtems_fdisk_recover_block_mappings( rtems_flashdisk *fd ) { uint32_t device; /* * Clear the queues. */ - rtems_fdisk_segment_queue_init (&fd->available); - rtems_fdisk_segment_queue_init (&fd->used); - rtems_fdisk_segment_queue_init (&fd->erase); - rtems_fdisk_segment_queue_init (&fd->failed); + rtems_fdisk_segment_queue_init( &fd->available ); + rtems_fdisk_segment_queue_init( &fd->used ); + rtems_fdisk_segment_queue_init( &fd->erase ); + rtems_fdisk_segment_queue_init( &fd->failed ); /* * Clear the lock mappings. */ - memset (fd->blocks, 0, fd->block_count * sizeof (rtems_fdisk_block_ctl)); + memset( fd->blocks, 0, fd->block_count * sizeof( rtems_fdisk_block_ctl ) ); /* * Scan each segment or each device recovering the valid pages. */ fd->erased_blocks = 0; fd->starvation_threshold = 0; - for (device = 0; device < fd->device_count; device++) - { + for ( device = 0; device < fd->device_count; device++ ) { uint32_t segment; - for (segment = 0; segment < fd->devices[device].segment_count; segment++) - { - rtems_fdisk_segment_ctl* sc = &fd->devices[device].segments[segment]; - const rtems_fdisk_segment_desc* sd = sc->descriptor; - rtems_fdisk_page_desc* pd; + for ( + segment = 0; segment < fd->devices[ device ].segment_count; segment++ + ) { + rtems_fdisk_segment_ctl *sc = &fd->devices[ device ].segments[ segment ]; + const rtems_fdisk_segment_desc *sd = sc->descriptor; + rtems_fdisk_page_desc *pd; uint32_t page; int ret; #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, "recover-block-mappings:%02d-%03d", device, segment); + rtems_fdisk_info( + fd, + "recover-block-mappings:%02d-%03d", + device, + segment + ); #endif - sc->pages_desc = rtems_fdisk_page_desc_pages (sd, fd->block_size); - sc->pages = - rtems_fdisk_pages_in_segment (sd, fd->block_size) - sc->pages_desc; - if (sc->pages > fd->starvation_threshold) + sc->pages_desc = rtems_fdisk_page_desc_pages( sd, fd->block_size ); + sc->pages = rtems_fdisk_pages_in_segment( sd, fd->block_size ) - + sc->pages_desc; + if ( sc->pages > fd->starvation_threshold ) { fd->starvation_threshold = sc->pages; + } sc->pages_active = 0; - sc->pages_used = 0; - sc->pages_bad = 0; + sc->pages_used = 0; + sc->pages_bad = 0; sc->failed = false; - if (!sc->page_descriptors) - sc->page_descriptors = malloc (sc->pages_desc * fd->block_size); + if ( !sc->page_descriptors ) { + sc->page_descriptors = malloc( sc->pages_desc * fd->block_size ); + } - if (!sc->page_descriptors) - rtems_fdisk_abort ("no memory for page descriptors"); + if ( !sc->page_descriptors ) { + rtems_fdisk_abort( "no memory for page descriptors" ); + } pd = sc->page_descriptors; @@ -1616,14 +1761,23 @@ rtems_fdisk_recover_block_mappings (rtems_flashdisk* fd) * @todo It may be better to ask the driver to get these value * so NAND flash could be better supported. */ - ret = rtems_fdisk_seg_read (fd, sc, 0, (void*) pd, - sc->pages_desc * fd->block_size); + ret = rtems_fdisk_seg_read( + fd, + sc, + 0, + (void *) pd, + sc->pages_desc * fd->block_size + ); - if (ret) - { - rtems_fdisk_error ("recover-block-mappings:%02d-%03d: " \ - "read page desc failed: %s (%d)", - device, segment, strerror (ret), ret); + if ( ret ) { + rtems_fdisk_error( + "recover-block-mappings:%02d-%03d: " + "read page desc failed: %s (%d)", + device, + segment, + strerror( ret ), + ret + ); return ret; } @@ -1635,59 +1789,64 @@ rtems_fdisk_recover_block_mappings (rtems_flashdisk* fd) * If the page is active see if the block is with-in range and * if the block is a duplicate. */ - for (page = 0; page < sc->pages; page++, pd++) - { - if (rtems_fdisk_page_desc_erased (pd)) - { + for ( page = 0; page < sc->pages; page++, pd++ ) { + if ( rtems_fdisk_page_desc_erased( pd ) ) { /* * Is the page erased ? */ - ret = rtems_fdisk_seg_blank_check_page (fd, sc, - page + sc->pages_desc); + ret = rtems_fdisk_seg_blank_check_page( + fd, + sc, + page + sc->pages_desc + ); - if (ret == 0) - { + if ( ret == 0 ) { ++fd->erased_blocks; - } - else - { + } else { #if RTEMS_FDISK_TRACE - rtems_fdisk_warning (fd, "page not blank: %d-%d-%d", - device, segment, page, pd->block); + rtems_fdisk_warning( + fd, + "page not blank: %d-%d-%d", + device, + segment, + page, + pd->block + ); #endif - rtems_fdisk_page_desc_set_flags (pd, RTEMS_FDISK_PAGE_USED); + rtems_fdisk_page_desc_set_flags( pd, RTEMS_FDISK_PAGE_USED ); - ret = rtems_fdisk_seg_write_page_desc (fd, sc, - page, pd); + ret = rtems_fdisk_seg_write_page_desc( fd, sc, page, pd ); - if (ret) - { - rtems_fdisk_error ("forcing page to used failed: %d-%d-%d", - device, segment, page); + if ( ret ) { + rtems_fdisk_error( + "forcing page to used failed: %d-%d-%d", + device, + segment, + page + ); } sc->pages_used++; } - } - else - { - if (rtems_fdisk_page_desc_flags_set (pd, RTEMS_FDISK_PAGE_USED)) - { + } else { + if ( rtems_fdisk_page_desc_flags_set( pd, RTEMS_FDISK_PAGE_USED ) ) { sc->pages_used++; - } - else if (rtems_fdisk_page_desc_flags_set (pd, RTEMS_FDISK_PAGE_ACTIVE)) - { - if (pd->block >= fd->block_count) - { + } else if ( + rtems_fdisk_page_desc_flags_set( pd, RTEMS_FDISK_PAGE_ACTIVE ) + ) { + if ( pd->block >= fd->block_count ) { #if RTEMS_FDISK_TRACE - rtems_fdisk_warning (fd, - "invalid block number: %d-%d-%d: block: %d", - device, segment, page, pd->block); + rtems_fdisk_warning( + fd, + "invalid block number: %d-%d-%d: block: %d", + device, + segment, + page, + pd->block + ); #endif sc->pages_bad++; - } - else if (fd->blocks[pd->block].segment) - { + } else if ( fd->blocks[ pd->block ].segment ) { /** * @todo * This may need more work later. Maybe a counter is stored with @@ -1695,38 +1854,42 @@ rtems_fdisk_recover_block_mappings (rtems_flashdisk* fd) * duplicates appear. A power down with a failed wirte could cause * a duplicate. */ - const rtems_fdisk_segment_ctl* bsc = fd->blocks[pd->block].segment; - rtems_fdisk_error ("duplicate block: %d-%d-%d: " \ - "duplicate: %d-%d-%d", - bsc->device, bsc->segment, - fd->blocks[pd->block].page, - device, segment, page); + const rtems_fdisk_segment_ctl + *bsc = fd->blocks[ pd->block ].segment; + rtems_fdisk_error( + "duplicate block: %d-%d-%d: " + "duplicate: %d-%d-%d", + bsc->device, + bsc->segment, + fd->blocks[ pd->block ].page, + device, + segment, + page + ); sc->pages_bad++; - } - else - { + } else { /** * @todo * Add start up crc checks here. */ - fd->blocks[pd->block].segment = sc; - fd->blocks[pd->block].page = page; + fd->blocks[ pd->block ].segment = sc; + fd->blocks[ pd->block ].page = page; /* * The page is active. */ sc->pages_active++; } - } - else + } else { sc->pages_bad++; + } } } /* * Place the segment on to the correct queue. */ - rtems_fdisk_queue_segment (fd, sc); + rtems_fdisk_queue_segment( fd, sc ); } } @@ -1744,95 +1907,121 @@ rtems_fdisk_recover_block_mappings (rtems_flashdisk* fd) * @return EIO Invalid block size, block number, segment pointer, crc, * page flags. */ -static bool -rtems_fdisk_read_block (rtems_flashdisk* fd, - uint32_t block, - uint8_t* buffer) +static bool rtems_fdisk_read_block( + rtems_flashdisk *fd, + uint32_t block, + uint8_t *buffer +) { - rtems_fdisk_block_ctl* bc; - rtems_fdisk_segment_ctl* sc; - rtems_fdisk_page_desc* pd; + rtems_fdisk_block_ctl *bc; + rtems_fdisk_segment_ctl *sc; + rtems_fdisk_page_desc *pd; #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, "read-block:%d", block); + rtems_fdisk_info( fd, "read-block:%d", block ); #endif /* * Broken out to allow info messages when testing. */ - if (block >= (fd->block_count - fd->unavail_blocks)) - { - rtems_fdisk_error ("read-block: block out of range: %d", block); + if ( block >= ( fd->block_count - fd->unavail_blocks ) ) { + rtems_fdisk_error( "read-block: block out of range: %d", block ); return EIO; } - bc = &fd->blocks[block]; + bc = &fd->blocks[ block ]; - if (!bc->segment) - { + if ( !bc->segment ) { #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, "read-block: no segment mapping: %d", block); + rtems_fdisk_info( fd, "read-block: no segment mapping: %d", block ); #endif - memset (buffer, 0xff, fd->block_size); + memset( buffer, 0xff, fd->block_size ); return 0; } - sc = fd->blocks[block].segment; - pd = &sc->page_descriptors[bc->page]; + sc = fd->blocks[ block ].segment; + pd = &sc->page_descriptors[ bc->page ]; #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, - " read:%d=>%02d-%03d-%03d: p=%d a=%d u=%d b=%d n=%s: " \ - "f=%04x c=%04x b=%d", - block, sc->device, sc->segment, bc->page, - sc->pages, sc->pages_active, sc->pages_used, sc->pages_bad, - sc->next ? "set" : "null", - pd->flags, pd->crc, pd->block); + rtems_fdisk_info( + fd, + " read:%d=>%02d-%03d-%03d: p=%d a=%d u=%d b=%d n=%s: " + "f=%04x c=%04x b=%d", + block, + sc->device, + sc->segment, + bc->page, + sc->pages, + sc->pages_active, + sc->pages_used, + sc->pages_bad, + sc->next ? "set" : "null", + pd->flags, + pd->crc, + pd->block + ); #endif - if (rtems_fdisk_page_desc_flags_set (pd, RTEMS_FDISK_PAGE_ACTIVE)) - { - if (rtems_fdisk_page_desc_flags_clear (pd, RTEMS_FDISK_PAGE_USED)) - { + if ( rtems_fdisk_page_desc_flags_set( pd, RTEMS_FDISK_PAGE_ACTIVE ) ) { + if ( rtems_fdisk_page_desc_flags_clear( pd, RTEMS_FDISK_PAGE_USED ) ) { uint16_t cs; /* * We use the segment page offset not the page number used in the * driver. This skips the page descriptors. */ - int ret = rtems_fdisk_seg_read_page (fd, sc, - bc->page + sc->pages_desc, buffer); + int ret = rtems_fdisk_seg_read_page( + fd, + sc, + bc->page + sc->pages_desc, + buffer + ); - if (ret) - { + if ( ret ) { #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, - "read-block:%02d-%03d-%03d: read page failed: %s (%d)", - sc->device, sc->segment, bc->page, - strerror (ret), ret); + rtems_fdisk_info( + fd, + "read-block:%02d-%03d-%03d: read page failed: %s (%d)", + sc->device, + sc->segment, + bc->page, + strerror( ret ), + ret + ); #endif return ret; } - cs = rtems_fdisk_page_checksum (buffer, fd->block_size); + cs = rtems_fdisk_page_checksum( buffer, fd->block_size ); - if (cs == pd->crc) + if ( cs == pd->crc ) { return 0; + } - rtems_fdisk_error ("read-block: crc failure: %d: buffer:%04x page:%04x", - block, cs, pd->crc); + rtems_fdisk_error( + "read-block: crc failure: %d: buffer:%04x page:%04x", + block, + cs, + pd->crc + ); + } else { + rtems_fdisk_error( + "read-block: block points to used page: %d: %d-%d-%d", + block, + sc->device, + sc->segment, + bc->page + ); } - else - { - rtems_fdisk_error ("read-block: block points to used page: %d: %d-%d-%d", - block, sc->device, sc->segment, bc->page); - } - } - else - { - rtems_fdisk_error ("read-block: block page not active: %d: %d-%d-%d", - block, sc->device, sc->segment, bc->page); + } else { + rtems_fdisk_error( + "read-block: block page not active: %d: %d-%d-%d", + block, + sc->device, + sc->segment, + bc->page + ); } return EIO; @@ -1863,55 +2052,71 @@ rtems_fdisk_read_block (rtems_flashdisk* fd, * @return EIO Invalid block size, block number, segment pointer, crc, * page flags. */ -static int -rtems_fdisk_write_block (rtems_flashdisk* fd, - uint32_t block, - const uint8_t* buffer) +static int rtems_fdisk_write_block( + rtems_flashdisk *fd, + uint32_t block, + const uint8_t *buffer +) { - rtems_fdisk_block_ctl* bc; - rtems_fdisk_segment_ctl* sc; - rtems_fdisk_page_desc* pd; + rtems_fdisk_block_ctl *bc; + rtems_fdisk_segment_ctl *sc; + rtems_fdisk_page_desc *pd; uint32_t page; int ret; #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, "write-block:%d", block); + rtems_fdisk_info( fd, "write-block:%d", block ); #endif /* * Broken out to allow info messages when testing. */ - if (block >= (fd->block_count - fd->unavail_blocks)) - { - rtems_fdisk_error ("write-block: block out of range: %d", block); + if ( block >= ( fd->block_count - fd->unavail_blocks ) ) { + rtems_fdisk_error( "write-block: block out of range: %d", block ); return EIO; } - bc = &fd->blocks[block]; + bc = &fd->blocks[ block ]; /* * Does the page exist in flash ? */ - if (bc->segment) - { + if ( bc->segment ) { sc = bc->segment; - pd = &sc->page_descriptors[bc->page]; + pd = &sc->page_descriptors[ bc->page ]; #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, " write:%02d-%03d-%03d: flag used", - sc->device, sc->segment, bc->page); + rtems_fdisk_info( + fd, + " write:%02d-%03d-%03d: flag used", + sc->device, + sc->segment, + bc->page + ); #endif /* * The page exists in flash so see if the page has been changed. */ - if (rtems_fdisk_seg_verify_page (fd, sc->device, sc->segment, - bc->page + sc->pages_desc, buffer) == 0) - { + if ( + rtems_fdisk_seg_verify_page( + fd, + sc->device, + sc->segment, + bc->page + sc->pages_desc, + buffer + ) == 0 + ) { #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, "write-block:%d=>%02d-%03d-%03d: page verified", - block, sc->device, sc->segment, bc->page); + rtems_fdisk_info( + fd, + "write-block:%d=>%02d-%03d-%03d: page verified", + block, + sc->device, + sc->segment, + bc->page + ); #endif return 0; } @@ -1923,21 +2128,24 @@ rtems_fdisk_write_block (rtems_flashdisk* fd, * matches the flash device. */ - rtems_fdisk_page_desc_set_flags (pd, RTEMS_FDISK_PAGE_USED); + rtems_fdisk_page_desc_set_flags( pd, RTEMS_FDISK_PAGE_USED ); - ret = rtems_fdisk_seg_write_page_desc_flags (fd, sc, bc->page, pd); + ret = rtems_fdisk_seg_write_page_desc_flags( fd, sc, bc->page, pd ); - if (ret) - { + if ( ret ) { #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, " write:%02d-%03d-%03d: " \ - "write used page desc failed: %s (%d)", - sc->device, sc->segment, bc->page, - strerror (ret), ret); + rtems_fdisk_info( + fd, + " write:%02d-%03d-%03d: " + "write used page desc failed: %s (%d)", + sc->device, + sc->segment, + bc->page, + strerror( ret ), + ret + ); #endif - } - else - { + } else { sc->pages_active--; sc->pages_used++; } @@ -1947,15 +2155,16 @@ rtems_fdisk_write_block (rtems_flashdisk* fd, * needs to be removed from the available list and placed * back if space is still available. */ - rtems_fdisk_queue_segment (fd, sc); + rtems_fdisk_queue_segment( fd, sc ); /* * If no background compacting then compact in the forground. * If we compact we ignore the error as there is little we * can do from here. The write may will work. */ - if ((fd->flags & RTEMS_FDISK_BACKGROUND_COMPACT) == 0) - rtems_fdisk_compact (fd); + if ( ( fd->flags & RTEMS_FDISK_BACKGROUND_COMPACT ) == 0 ) { + rtems_fdisk_compact( fd ); + } } /* @@ -1963,46 +2172,52 @@ rtems_fdisk_write_block (rtems_flashdisk* fd, * * We override the background compaction configruation. */ - if (rtems_fdisk_segment_count_queue (&fd->available) <= - fd->avail_compact_segs) - rtems_fdisk_compact (fd); + if ( + rtems_fdisk_segment_count_queue( &fd->available ) <= fd->avail_compact_segs + ) { + rtems_fdisk_compact( fd ); + } /* * Get the next avaliable segment. */ - sc = rtems_fdisk_segment_queue_pop_head (&fd->available); + sc = rtems_fdisk_segment_queue_pop_head( &fd->available ); /* * Is the flash disk full ? */ - if (!sc) - { + if ( !sc ) { /* * If compacting is configured for the background do it now * to see if we can get some space back. */ - if ((fd->flags & RTEMS_FDISK_BACKGROUND_COMPACT)) - rtems_fdisk_compact (fd); + if (( fd->flags & RTEMS_FDISK_BACKGROUND_COMPACT )) { + rtems_fdisk_compact( fd ); + } /* * Try again for some free space. */ - sc = rtems_fdisk_segment_queue_pop_head (&fd->available); + sc = rtems_fdisk_segment_queue_pop_head( &fd->available ); - if (!sc) - { - rtems_fdisk_error ("write-block: no available pages"); + if ( !sc ) { + rtems_fdisk_error( "write-block: no available pages" ); return ENOSPC; } } #if RTEMS_FDISK_TRACE - if (fd->info_level >= 3) - { - char queues[5]; - rtems_fdisk_queue_status (fd, sc, queues); - rtems_fdisk_info (fd, " write:%d=>%02d-%03d: queue check: %s", - block, sc->device, sc->segment, queues); + if ( fd->info_level >= 3 ) { + char queues[ 5 ]; + rtems_fdisk_queue_status( fd, sc, queues ); + rtems_fdisk_info( + fd, + " write:%d=>%02d-%03d: queue check: %s", + block, + sc->device, + sc->segment, + queues + ); } #endif @@ -2012,72 +2227,97 @@ rtems_fdisk_write_block (rtems_flashdisk* fd, pd = sc->page_descriptors; - for (page = 0; page < sc->pages; page++, pd++) - { - if (rtems_fdisk_page_desc_erased (pd)) - { - pd->crc = rtems_fdisk_page_checksum (buffer, fd->block_size); + for ( page = 0; page < sc->pages; page++, pd++ ) { + if ( rtems_fdisk_page_desc_erased( pd ) ) { + pd->crc = rtems_fdisk_page_checksum( buffer, fd->block_size ); pd->block = block; bc->segment = sc; - bc->page = page; + bc->page = page; - rtems_fdisk_page_desc_set_flags (pd, RTEMS_FDISK_PAGE_ACTIVE); + rtems_fdisk_page_desc_set_flags( pd, RTEMS_FDISK_PAGE_ACTIVE ); #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, " write:%d=>%02d-%03d-%03d: write: " \ - "p=%d a=%d u=%d b=%d n=%s: f=%04x c=%04x b=%d", - block, sc->device, sc->segment, page, - sc->pages, sc->pages_active, sc->pages_used, - sc->pages_bad, sc->next ? "set" : "null", - pd->flags, pd->crc, pd->block); + rtems_fdisk_info( + fd, + " write:%d=>%02d-%03d-%03d: write: " + "p=%d a=%d u=%d b=%d n=%s: f=%04x c=%04x b=%d", + block, + sc->device, + sc->segment, + page, + sc->pages, + sc->pages_active, + sc->pages_used, + sc->pages_bad, + sc->next ? "set" : "null", + pd->flags, + pd->crc, + pd->block + ); #endif /* * We use the segment page offset not the page number used in the * driver. This skips the page descriptors. */ - ret = rtems_fdisk_seg_write_page (fd, sc, page + sc->pages_desc, buffer); - if (ret) - { + ret = rtems_fdisk_seg_write_page( + fd, + sc, + page + sc->pages_desc, + buffer + ); + if ( ret ) { #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, "write-block:%02d-%03d-%03d: write page failed: " \ - "%s (%d)", sc->device, sc->segment, page, - strerror (ret), ret); + rtems_fdisk_info( + fd, + "write-block:%02d-%03d-%03d: write page failed: " + "%s (%d)", + sc->device, + sc->segment, + page, + strerror( ret ), + ret + ); #endif - } - else - { - ret = rtems_fdisk_seg_write_page_desc (fd, sc, page, pd); - if (ret) - { + } else { + ret = rtems_fdisk_seg_write_page_desc( fd, sc, page, pd ); + if ( ret ) { #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, "write-block:%02d-%03d-%03d: " \ - "write page desc failed: %s (%d)", - sc->device, sc->segment, bc->page, - strerror (ret), ret); + rtems_fdisk_info( + fd, + "write-block:%02d-%03d-%03d: " + "write page desc failed: %s (%d)", + sc->device, + sc->segment, + bc->page, + strerror( ret ), + ret + ); #endif - } - else - { + } else { sc->pages_active++; } } - rtems_fdisk_queue_segment (fd, sc); + rtems_fdisk_queue_segment( fd, sc ); - if (rtems_fdisk_is_erased_blocks_starvation (fd)) - rtems_fdisk_compact (fd); + if ( rtems_fdisk_is_erased_blocks_starvation( fd ) ) { + rtems_fdisk_compact( fd ); + } return ret; } } - rtems_fdisk_error ("write-block: no erased page descs in segment: %d-%d", - sc->device, sc->segment); + rtems_fdisk_error( + "write-block: no erased page descs in segment: %d-%d", + sc->device, + sc->segment + ); sc->failed = true; - rtems_fdisk_queue_segment (fd, sc); + rtems_fdisk_queue_segment( fd, sc ); return EIO; } @@ -2090,29 +2330,27 @@ rtems_fdisk_write_block (rtems_flashdisk* fd, * @param req Pointer to the READ block device request info. * @retval 0 Always. The request done callback contains the status. */ -static int -rtems_fdisk_read (rtems_flashdisk* fd, rtems_blkdev_request* req) +static int rtems_fdisk_read( rtems_flashdisk *fd, rtems_blkdev_request *req ) { - rtems_blkdev_sg_buffer* sg = req->bufs; + rtems_blkdev_sg_buffer *sg = req->bufs; uint32_t buf; int ret = 0; - for (buf = 0; (ret == 0) && (buf < req->bufnum); buf++, sg++) - { - uint8_t* data; + for ( buf = 0; ( ret == 0 ) && ( buf < req->bufnum ); buf++, sg++ ) { + uint8_t *data; uint32_t fb; uint32_t b; fb = sg->length / fd->block_size; data = sg->buffer; - for (b = 0; b < fb; b++, data += fd->block_size) - { - ret = rtems_fdisk_read_block (fd, sg->block + b, data); - if (ret) + for ( b = 0; b < fb; b++, data += fd->block_size ) { + ret = rtems_fdisk_read_block( fd, sg->block + b, data ); + if ( ret ) { break; + } } } - rtems_blkdev_request_done (req, ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL); + rtems_blkdev_request_done( req, ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL ); return 0; } @@ -2125,29 +2363,27 @@ rtems_fdisk_read (rtems_flashdisk* fd, rtems_blkdev_request* req) * @param req Pointers to the WRITE block device request info. * @retval 0 Always. The request done callback contains the status. */ -static int -rtems_fdisk_write (rtems_flashdisk* fd, rtems_blkdev_request* req) +static int rtems_fdisk_write( rtems_flashdisk *fd, rtems_blkdev_request *req ) { - rtems_blkdev_sg_buffer* sg = req->bufs; + rtems_blkdev_sg_buffer *sg = req->bufs; uint32_t buf; int ret = 0; - for (buf = 0; (ret == 0) && (buf < req->bufnum); buf++, sg++) - { - uint8_t* data; + for ( buf = 0; ( ret == 0 ) && ( buf < req->bufnum ); buf++, sg++ ) { + uint8_t *data; uint32_t fb; uint32_t b; fb = sg->length / fd->block_size; data = sg->buffer; - for (b = 0; b < fb; b++, data += fd->block_size) - { - ret = rtems_fdisk_write_block (fd, sg->block + b, data); - if (ret) + for ( b = 0; b < fb; b++, data += fd->block_size ) { + ret = rtems_fdisk_write_block( fd, sg->block + b, data ); + if ( ret ) { break; + } } } - rtems_blkdev_request_done (req, ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL); + rtems_blkdev_request_done( req, ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL ); return 0; } @@ -2158,28 +2394,27 @@ rtems_fdisk_write (rtems_flashdisk* fd, rtems_blkdev_request* req) * @param fd The flashdisk data. * @retval int The ioctl return value. */ -static int -rtems_fdisk_erase_disk (rtems_flashdisk* fd) +static int rtems_fdisk_erase_disk( rtems_flashdisk *fd ) { uint32_t device; int ret; #if RTEMS_FDISK_TRACE - rtems_fdisk_info (fd, "erase-disk"); + rtems_fdisk_info( fd, "erase-disk" ); #endif - ret = rtems_fdisk_erase_flash (fd); + ret = rtems_fdisk_erase_flash( fd ); - if (ret == 0) - { - for (device = 0; device < fd->device_count; device++) - { - if (!fd->devices[device].segments) + if ( ret == 0 ) { + for ( device = 0; device < fd->device_count; device++ ) { + if ( !fd->devices[ device ].segments ) { return ENOMEM; + } - ret = rtems_fdisk_recover_block_mappings (fd); - if (ret) + ret = rtems_fdisk_recover_block_mappings( fd ); + if ( ret ) { break; + } } } @@ -2190,49 +2425,50 @@ rtems_fdisk_erase_disk (rtems_flashdisk* fd) * Flash Disk Monitoring data is return in the monitoring data * structure. */ -static int -rtems_fdisk_monitoring_data (rtems_flashdisk* fd, - rtems_fdisk_monitor_data* data) +static int rtems_fdisk_monitoring_data( + rtems_flashdisk *fd, + rtems_fdisk_monitor_data *data +) { uint32_t i; uint32_t j; - data->block_size = fd->block_size; - data->block_count = fd->block_count; + data->block_size = fd->block_size; + data->block_count = fd->block_count; data->unavail_blocks = fd->unavail_blocks; - data->device_count = fd->device_count; + data->device_count = fd->device_count; data->blocks_used = 0; - for (i = 0; i < fd->block_count; i++) - if (fd->blocks[i].segment) + for ( i = 0; i < fd->block_count; i++ ) { + if ( fd->blocks[ i ].segment ) { data->blocks_used++; + } + } - data->segs_available = rtems_fdisk_segment_count_queue (&fd->available); - data->segs_used = rtems_fdisk_segment_count_queue (&fd->used); - data->segs_failed = rtems_fdisk_segment_count_queue (&fd->failed); + data->segs_available = rtems_fdisk_segment_count_queue( &fd->available ); + data->segs_used = rtems_fdisk_segment_count_queue( &fd->used ); + data->segs_failed = rtems_fdisk_segment_count_queue( &fd->failed ); data->segment_count = 0; - data->page_count = 0; - data->pages_desc = 0; - data->pages_active = 0; - data->pages_used = 0; - data->pages_bad = 0; - data->seg_erases = 0; + data->page_count = 0; + data->pages_desc = 0; + data->pages_active = 0; + data->pages_used = 0; + data->pages_bad = 0; + data->seg_erases = 0; - for (i = 0; i < fd->device_count; i++) - { - data->segment_count += fd->devices[i].segment_count; + for ( i = 0; i < fd->device_count; i++ ) { + data->segment_count += fd->devices[ i ].segment_count; - for (j = 0; j < fd->devices[i].segment_count; j++) - { - rtems_fdisk_segment_ctl* sc = &fd->devices[i].segments[j]; + for ( j = 0; j < fd->devices[ i ].segment_count; j++ ) { + rtems_fdisk_segment_ctl *sc = &fd->devices[ i ].segments[ j ]; - data->page_count += sc->pages; - data->pages_desc += sc->pages_desc; + data->page_count += sc->pages; + data->pages_desc += sc->pages_desc; data->pages_active += sc->pages_active; - data->pages_used += sc->pages_used; - data->pages_bad += sc->pages_bad; - data->seg_erases += sc->erased; + data->pages_used += sc->pages_used; + data->pages_bad += sc->pages_bad; + data->seg_erases += sc->erased; } } @@ -2243,8 +2479,7 @@ rtems_fdisk_monitoring_data (rtems_flashdisk* fd, /** * Print to stdout the status of the driver. This is a debugging aid. */ -static int -rtems_fdisk_print_status (rtems_flashdisk* fd) +static int rtems_fdisk_print_status( rtems_flashdisk *fd ) { #if RTEMS_FDISK_TRACE uint32_t current_info_level = fd->info_level; @@ -2254,113 +2489,166 @@ rtems_fdisk_print_status (rtems_flashdisk* fd) fd->info_level = 3; - rtems_fdisk_printf (fd, - "Flash Disk Driver Status : %d.%d", fd->major, fd->minor); + rtems_fdisk_printf( + fd, + "Flash Disk Driver Status : %d.%d", + fd->major, + fd->minor + ); - rtems_fdisk_printf (fd, "Block count\t%d", fd->block_count); - rtems_fdisk_printf (fd, "Unavail blocks\t%d", fd->unavail_blocks); - rtems_fdisk_printf (fd, "Starvation threshold\t%d", fd->starvation_threshold); - rtems_fdisk_printf (fd, "Starvations\t%d", fd->starvations); - count = rtems_fdisk_segment_count_queue (&fd->available); + rtems_fdisk_printf( fd, "Block count\t%d", fd->block_count ); + rtems_fdisk_printf( fd, "Unavail blocks\t%d", fd->unavail_blocks ); + rtems_fdisk_printf( + fd, + "Starvation threshold\t%d", + fd->starvation_threshold + ); + rtems_fdisk_printf( fd, "Starvations\t%d", fd->starvations ); + count = rtems_fdisk_segment_count_queue( &fd->available ); total = count; - rtems_fdisk_printf (fd, "Available queue\t%ld (%ld)", - count, rtems_fdisk_segment_queue_count (&fd->available)); - count = rtems_fdisk_segment_count_queue (&fd->used); + rtems_fdisk_printf( + fd, + "Available queue\t%ld (%ld)", + count, + rtems_fdisk_segment_queue_count( &fd->available ) + ); + count = rtems_fdisk_segment_count_queue( &fd->used ); total += count; - rtems_fdisk_printf (fd, "Used queue\t%ld (%ld)", - count, rtems_fdisk_segment_queue_count (&fd->used)); - count = rtems_fdisk_segment_count_queue (&fd->erase); + rtems_fdisk_printf( + fd, + "Used queue\t%ld (%ld)", + count, + rtems_fdisk_segment_queue_count( &fd->used ) + ); + count = rtems_fdisk_segment_count_queue( &fd->erase ); total += count; - rtems_fdisk_printf (fd, "Erase queue\t%ld (%ld)", - count, rtems_fdisk_segment_queue_count (&fd->erase)); - count = rtems_fdisk_segment_count_queue (&fd->failed); + rtems_fdisk_printf( + fd, + "Erase queue\t%ld (%ld)", + count, + rtems_fdisk_segment_queue_count( &fd->erase ) + ); + count = rtems_fdisk_segment_count_queue( &fd->failed ); total += count; - rtems_fdisk_printf (fd, "Failed queue\t%ld (%ld)", - count, rtems_fdisk_segment_queue_count (&fd->failed)); + rtems_fdisk_printf( + fd, + "Failed queue\t%ld (%ld)", + count, + rtems_fdisk_segment_queue_count( &fd->failed ) + ); count = 0; - for (device = 0; device < fd->device_count; device++) - count += fd->devices[device].segment_count; + for ( device = 0; device < fd->device_count; device++ ) { + count += fd->devices[ device ].segment_count; + } - rtems_fdisk_printf (fd, "Queue total\t%ld of %ld, %s", total, count, - total == count ? "ok" : "MISSING"); + rtems_fdisk_printf( + fd, + "Queue total\t%ld of %ld, %s", + total, + count, + total == count ? "ok" : "MISSING" + ); - rtems_fdisk_printf (fd, "Device count\t%d", fd->device_count); + rtems_fdisk_printf( fd, "Device count\t%d", fd->device_count ); - for (device = 0; device < fd->device_count; device++) - { + for ( device = 0; device < fd->device_count; device++ ) { uint32_t block; uint32_t seg; - rtems_fdisk_printf (fd, " Device\t\t%ld", device); - rtems_fdisk_printf (fd, " Segment count\t%ld", - fd->devices[device].segment_count); + rtems_fdisk_printf( fd, " Device\t\t%ld", device ); + rtems_fdisk_printf( + fd, + " Segment count\t%ld", + fd->devices[ device ].segment_count + ); - for (seg = 0; seg < fd->devices[device].segment_count; seg++) - { - rtems_fdisk_segment_ctl* sc = &fd->devices[device].segments[seg]; + for ( seg = 0; seg < fd->devices[ device ].segment_count; seg++ ) { + rtems_fdisk_segment_ctl *sc = &fd->devices[ device ].segments[ seg ]; uint32_t page; uint32_t erased = 0; uint32_t active = 0; uint32_t used = 0; bool is_active = false; - char queues[5]; + char queues[ 5 ]; - rtems_fdisk_queue_status (fd, sc, queues); + rtems_fdisk_queue_status( fd, sc, queues ); - for (page = 0; page < sc->pages; page++) - { - if (rtems_fdisk_page_desc_erased (&sc->page_descriptors[page])) + for ( page = 0; page < sc->pages; page++ ) { + if ( rtems_fdisk_page_desc_erased( &sc->page_descriptors[ page ] ) ) { erased++; - else if (rtems_fdisk_page_desc_flags_set (&sc->page_descriptors[page], - RTEMS_FDISK_PAGE_ACTIVE)) - { - if (rtems_fdisk_page_desc_flags_set (&sc->page_descriptors[page], - RTEMS_FDISK_PAGE_USED)) + } else if ( + rtems_fdisk_page_desc_flags_set( + &sc->page_descriptors[ page ], + RTEMS_FDISK_PAGE_ACTIVE + ) + ) { + if ( + rtems_fdisk_page_desc_flags_set( + &sc->page_descriptors[ page ], + RTEMS_FDISK_PAGE_USED + ) + ) { used++; - else - { + } else { active++; is_active = true; } } - for (block = 0; block < fd->block_count; block++) - { - if ((fd->blocks[block].segment == sc) && - (fd->blocks[block].page == page) && !is_active) - rtems_fdisk_printf (fd, - " %ld\t not active when mapped by block %ld", - page, block); + for ( block = 0; block < fd->block_count; block++ ) { + if ( + ( fd->blocks[ block ].segment == sc ) && + ( fd->blocks[ block ].page == page ) && !is_active + ) { + rtems_fdisk_printf( + fd, + " %ld\t not active when mapped by block %ld", + page, + block + ); + } } } count = 0; - for (block = 0; block < fd->block_count; block++) - { - if (fd->blocks[block].segment == sc) + for ( block = 0; block < fd->block_count; block++ ) { + if ( fd->blocks[ block ].segment == sc ) { count++; + } } - rtems_fdisk_printf (fd, " %3ld %s p:%3ld a:%3ld/%3ld" \ - " u:%3ld/%3ld e:%3ld/%3ld br:%ld", - seg, queues, - sc->pages, sc->pages_active, active, - sc->pages_used, used, erased, - sc->pages - (sc->pages_active + - sc->pages_used + sc->pages_bad), - count); + rtems_fdisk_printf( + fd, + " %3ld %s p:%3ld a:%3ld/%3ld" + " u:%3ld/%3ld e:%3ld/%3ld br:%ld", + seg, + queues, + sc->pages, + sc->pages_active, + active, + sc->pages_used, + used, + erased, + sc->pages - ( sc->pages_active + sc->pages_used + sc->pages_bad ), + count + ); } } { - rtems_fdisk_segment_ctl* sc = fd->used.head; - int count = 0; - rtems_fdisk_printf (fd, "Used List:"); - while (sc) - { - rtems_fdisk_printf (fd, " %3d %02d:%03d u:%3ld", - count, sc->device, sc->segment, sc->pages_used); + rtems_fdisk_segment_ctl *sc = fd->used.head; + int count = 0; + rtems_fdisk_printf( fd, "Used List:" ); + while ( sc ) { + rtems_fdisk_printf( + fd, + " %3d %02d:%03d u:%3ld", + count, + sc->device, + sc->segment, + sc->pages_used + ); sc = sc->next; count++; } @@ -2381,33 +2669,27 @@ rtems_fdisk_print_status (rtems_flashdisk* fd) * @param argp IOCTL argument. * @retval The IOCTL return value */ -static int -rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp) +static int rtems_fdisk_ioctl( rtems_disk_device *dd, uint32_t req, void *argp ) { - rtems_flashdisk* fd = rtems_disk_get_driver_data (dd); - rtems_blkdev_request* r = argp; + rtems_flashdisk *fd = rtems_disk_get_driver_data( dd ); + rtems_blkdev_request *r = argp; errno = 0; - rtems_mutex_lock (&fd->lock); + rtems_mutex_lock( &fd->lock ); - switch (req) - { + switch ( req ) { case RTEMS_BLKIO_REQUEST: - if (fd->device_count == 0) - { + if ( fd->device_count == 0 ) { errno = ENODEV; - } - else - { - switch (r->req) - { + } else { + switch ( r->req ) { case RTEMS_BLKDEV_REQ_READ: - errno = rtems_fdisk_read (fd, r); + errno = rtems_fdisk_read( fd, r ); break; case RTEMS_BLKDEV_REQ_WRITE: - errno = rtems_fdisk_write (fd, r); + errno = rtems_fdisk_write( fd, r ); break; default: @@ -2418,20 +2700,22 @@ rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp) break; case RTEMS_FDISK_IOCTL_ERASE_DISK: - errno = rtems_fdisk_erase_disk (fd); + errno = rtems_fdisk_erase_disk( fd ); break; case RTEMS_FDISK_IOCTL_COMPACT: - errno = rtems_fdisk_compact (fd); + errno = rtems_fdisk_compact( fd ); break; case RTEMS_FDISK_IOCTL_ERASE_USED: - errno = rtems_fdisk_erase_used (fd); + errno = rtems_fdisk_erase_used( fd ); break; case RTEMS_FDISK_IOCTL_MONITORING: - errno = rtems_fdisk_monitoring_data (fd, - (rtems_fdisk_monitor_data*) argp); + errno = rtems_fdisk_monitoring_data( + fd, + (rtems_fdisk_monitor_data *) argp + ); break; case RTEMS_FDISK_IOCTL_INFO_LEVEL: @@ -2439,15 +2723,15 @@ rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp) break; case RTEMS_FDISK_IOCTL_PRINT_STATUS: - errno = rtems_fdisk_print_status (fd); + errno = rtems_fdisk_print_status( fd ); break; default: - rtems_blkdev_ioctl (dd, req, argp); + rtems_blkdev_ioctl( dd, req, argp ); break; } - rtems_mutex_unlock (&fd->lock); + rtems_mutex_unlock( &fd->lock ); return errno == 0 ? 0 : -1; } @@ -2461,143 +2745,161 @@ rtems_fdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp) * @param minor Minor device number, not applicable. * @param arg Initialization argument, not applicable. */ -rtems_device_driver -rtems_fdisk_initialize (rtems_device_major_number major, - rtems_device_minor_number minor, - void* arg RTEMS_UNUSED) +rtems_device_driver rtems_fdisk_initialize( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg RTEMS_UNUSED +) { - const rtems_flashdisk_config* c = rtems_flashdisk_configuration; - rtems_flashdisk* fd; + const rtems_flashdisk_config *c = rtems_flashdisk_configuration; + rtems_flashdisk *fd; rtems_status_code sc; - sc = rtems_fdisk_crc16_gen_factors (0x8408); - if (sc != RTEMS_SUCCESSFUL) - return sc; + sc = rtems_fdisk_crc16_gen_factors( 0x8408 ); + if ( sc != RTEMS_SUCCESSFUL ) { + return sc; + } - fd = calloc (rtems_flashdisk_configuration_size, sizeof (*fd)); - if (!fd) + fd = calloc( rtems_flashdisk_configuration_size, sizeof( *fd ) ); + if ( !fd ) { return RTEMS_NO_MEMORY; + } - for (minor = 0; minor < rtems_flashdisk_configuration_size; minor++, c++, fd++) - { + for ( + minor = 0; minor < rtems_flashdisk_configuration_size; minor++, c++, fd++ + ) { char name[] = RTEMS_FLASHDISK_DEVICE_BASE_NAME "a"; uint32_t device; uint32_t blocks = 0; int ret; - name [sizeof(RTEMS_FLASHDISK_DEVICE_BASE_NAME)] += minor; + name[ sizeof( RTEMS_FLASHDISK_DEVICE_BASE_NAME ) ] += minor; - fd->major = major; - fd->minor = minor; - fd->flags = c->flags; - fd->compact_segs = c->compact_segs; + fd->major = major; + fd->minor = minor; + fd->flags = c->flags; + fd->compact_segs = c->compact_segs; fd->avail_compact_segs = c->avail_compact_segs; - fd->block_size = c->block_size; - fd->unavail_blocks = c->unavail_blocks; - fd->info_level = c->info_level; + fd->block_size = c->block_size; + fd->unavail_blocks = c->unavail_blocks; + fd->info_level = c->info_level; - for (device = 0; device < c->device_count; device++) - blocks += rtems_fdisk_blocks_in_device (&c->devices[device], - c->block_size); + for ( device = 0; device < c->device_count; device++ ) { + blocks += rtems_fdisk_blocks_in_device( + &c->devices[ device ], + c->block_size + ); + } /* * One copy buffer of a page size. */ - fd->copy_buffer = malloc (c->block_size); - if (!fd->copy_buffer) + fd->copy_buffer = malloc( c->block_size ); + if ( !fd->copy_buffer ) { return RTEMS_NO_MEMORY; + } - fd->blocks = calloc (blocks, sizeof (rtems_fdisk_block_ctl)); - if (!fd->blocks) + fd->blocks = calloc( blocks, sizeof( rtems_fdisk_block_ctl ) ); + if ( !fd->blocks ) { return RTEMS_NO_MEMORY; + } fd->block_count = blocks; - fd->devices = calloc (c->device_count, sizeof (rtems_fdisk_device_ctl)); - if (!fd->devices) + fd->devices = calloc( c->device_count, sizeof( rtems_fdisk_device_ctl ) ); + if ( !fd->devices ) { return RTEMS_NO_MEMORY; + } - rtems_mutex_init (&fd->lock, "Flash Disk"); + rtems_mutex_init( &fd->lock, "Flash Disk" ); - sc = rtems_blkdev_create(name, c->block_size, blocks - fd->unavail_blocks, - rtems_fdisk_ioctl, fd); - if (sc != RTEMS_SUCCESSFUL) - { - rtems_mutex_destroy (&fd->lock); - free (fd->copy_buffer); - free (fd->blocks); - free (fd->devices); - rtems_fdisk_error ("disk create phy failed"); + sc = rtems_blkdev_create( + name, + c->block_size, + blocks - fd->unavail_blocks, + rtems_fdisk_ioctl, + fd + ); + if ( sc != RTEMS_SUCCESSFUL ) { + rtems_mutex_destroy( &fd->lock ); + free( fd->copy_buffer ); + free( fd->blocks ); + free( fd->devices ); + rtems_fdisk_error( "disk create phy failed" ); return sc; } - for (device = 0; device < c->device_count; device++) - { - rtems_fdisk_segment_ctl* sc; + for ( device = 0; device < c->device_count; device++ ) { + rtems_fdisk_segment_ctl *sc; uint32_t segment_count; uint32_t segment; - segment_count = rtems_fdisk_count_segments (&c->devices[device]); + segment_count = rtems_fdisk_count_segments( &c->devices[ device ] ); - fd->devices[device].segments = calloc (segment_count, - sizeof (rtems_fdisk_segment_ctl)); - if (!fd->devices[device].segments) - { - unlink (name); - rtems_mutex_destroy (&fd->lock); - free (fd->copy_buffer); - free (fd->blocks); - free (fd->devices); + fd->devices[ device ].segments = calloc( + segment_count, + sizeof( rtems_fdisk_segment_ctl ) + ); + if ( !fd->devices[ device ].segments ) { + unlink( name ); + rtems_mutex_destroy( &fd->lock ); + free( fd->copy_buffer ); + free( fd->blocks ); + free( fd->devices ); return RTEMS_NO_MEMORY; } - sc = fd->devices[device].segments; + sc = fd->devices[ device ].segments; - for (segment = 0; segment < c->devices[device].segment_count; segment++) - { - const rtems_fdisk_segment_desc* sd; + for ( + segment = 0; segment < c->devices[ device ].segment_count; segment++ + ) { + const rtems_fdisk_segment_desc *sd; uint32_t seg_segment; - sd = &c->devices[device].segments[segment]; + sd = &c->devices[ device ].segments[ segment ]; - for (seg_segment = 0; seg_segment < sd->count; seg_segment++, sc++) - { + for ( seg_segment = 0; seg_segment < sd->count; seg_segment++, sc++ ) { sc->descriptor = sd; - sc->device = device; - sc->segment = seg_segment; - sc->erased = 0; + sc->device = device; + sc->segment = seg_segment; + sc->erased = 0; } } - fd->devices[device].segment_count = segment_count; - fd->devices[device].descriptor = &c->devices[device]; + fd->devices[ device ].segment_count = segment_count; + fd->devices[ device ].descriptor = &c->devices[ device ]; } fd->device_count = c->device_count; - ret = rtems_fdisk_recover_block_mappings (fd); - if (ret) - { - unlink (name); - rtems_mutex_destroy (&fd->lock); - free (fd->copy_buffer); - free (fd->blocks); - free (fd->devices); - rtems_fdisk_error ("recovery of disk failed: %s (%d)", - strerror (ret), ret); + ret = rtems_fdisk_recover_block_mappings( fd ); + if ( ret ) { + unlink( name ); + rtems_mutex_destroy( &fd->lock ); + free( fd->copy_buffer ); + free( fd->blocks ); + free( fd->devices ); + rtems_fdisk_error( + "recovery of disk failed: %s (%d)", + strerror( ret ), + ret + ); return ret; } - ret = rtems_fdisk_compact (fd); - if (ret) - { - unlink (name); - rtems_mutex_destroy (&fd->lock); - free (fd->copy_buffer); - free (fd->blocks); - free (fd->devices); - rtems_fdisk_error ("compacting of disk failed: %s (%d)", - strerror (ret), ret); + ret = rtems_fdisk_compact( fd ); + if ( ret ) { + unlink( name ); + rtems_mutex_destroy( &fd->lock ); + free( fd->copy_buffer ); + free( fd->blocks ); + free( fd->devices ); + rtems_fdisk_error( + "compacting of disk failed: %s (%d)", + strerror( ret ), + ret + ); return ret; } } diff --git a/cpukit/libblock/src/ide_part_table.c b/cpukit/libblock/src/ide_part_table.c index 2ce48c37aa..901bb685bd 100644 --- a/cpukit/libblock/src/ide_part_table.c +++ b/cpukit/libblock/src/ide_part_table.c @@ -64,48 +64,47 @@ * get_sector() operates with device via bdbuf library, * and does not support devices with sector size other than 512 bytes */ -static rtems_status_code -get_sector(int fd, - uint32_t sector_num, - rtems_sector_data_t **sector) +static rtems_status_code get_sector( + int fd, + uint32_t sector_num, + rtems_sector_data_t **sector +) { - rtems_sector_data_t *s; - ssize_t n; - off_t off; - off_t new_off; + rtems_sector_data_t *s; + ssize_t n; + off_t off; + off_t new_off; - if (sector == NULL) - { - return RTEMS_INTERNAL_ERROR; - } + if ( sector == NULL ) { + return RTEMS_INTERNAL_ERROR; + } - off = sector_num * RTEMS_IDE_SECTOR_SIZE; - new_off = lseek(fd, off, SEEK_SET); - if (new_off != off) { - return RTEMS_IO_ERROR; - } + off = sector_num * RTEMS_IDE_SECTOR_SIZE; + new_off = lseek( fd, off, SEEK_SET ); + if ( new_off != off ) { + return RTEMS_IO_ERROR; + } - s = (rtems_sector_data_t *) malloc(sizeof(rtems_sector_data_t) + RTEMS_IDE_SECTOR_SIZE); - if (s == NULL) - { - return RTEMS_NO_MEMORY; - } + s = (rtems_sector_data_t *) malloc( + sizeof( rtems_sector_data_t ) + RTEMS_IDE_SECTOR_SIZE + ); + if ( s == NULL ) { + return RTEMS_NO_MEMORY; + } - n = read(fd, s->data, RTEMS_IDE_SECTOR_SIZE); - if (n != RTEMS_IDE_SECTOR_SIZE) - { - free(s); - return RTEMS_IO_ERROR; - } + n = read( fd, s->data, RTEMS_IDE_SECTOR_SIZE ); + if ( n != RTEMS_IDE_SECTOR_SIZE ) { + free( s ); + return RTEMS_IO_ERROR; + } - s->sector_num = sector_num; + s->sector_num = sector_num; - *sector = s; + *sector = s; - return RTEMS_SUCCESSFUL; + return RTEMS_SUCCESSFUL; } - /* * msdos_signature_check -- * checks if the partition table sector has msdos signature @@ -116,16 +115,16 @@ get_sector(int fd, * RETURNS: * true if sector has msdos signature, false otherwise */ -static bool -msdos_signature_check (rtems_sector_data_t *sector) +static bool msdos_signature_check( rtems_sector_data_t *sector ) { - uint8_t *p = sector->data + RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_OFFSET; + uint8_t *p = sector->data + RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_OFFSET; - return ((p[0] == RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA1) && - (p[1] == RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA2)); + return ( + ( p[ 0 ] == RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA1 ) && + ( p[ 1 ] == RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA2 ) + ); } - /* * is_extended -- * checks if the partition type is extended @@ -136,10 +135,9 @@ msdos_signature_check (rtems_sector_data_t *sector) * RETURNS: * true if partition type is extended, false otherwise */ -static bool -is_extended(uint8_t type) +static bool is_extended( uint8_t type ) { - return ((type == EXTENDED_PARTITION) || (type == LINUX_EXTENDED)); + return ( ( type == EXTENDED_PARTITION ) || ( type == LINUX_EXTENDED ) ); } /* @@ -152,20 +150,20 @@ is_extended(uint8_t type) * RETURNS: * true if partition type is extended, false otherwise */ -static bool -is_fat_partition(uint8_t type) +static bool is_fat_partition( uint8_t type ) { static const uint8_t fat_part_types[] = { - DOS_FAT12_PARTITION,DOS_FAT16_PARTITION, + DOS_FAT12_PARTITION, + DOS_FAT16_PARTITION, DOS_P32MB_PARTITION, - FAT32_PARTITION ,FAT32_LBA_PARTITION, + FAT32_PARTITION, + FAT32_LBA_PARTITION, FAT16_LBA_PARTITION }; - return (NULL != memchr(fat_part_types,type,sizeof(fat_part_types))); + return ( NULL != memchr( fat_part_types, type, sizeof( fat_part_types ) ) ); } - /* * data_to_part_desc -- * parses raw partition table sector data @@ -180,54 +178,54 @@ is_fat_partition(uint8_t type) * RTEMS_NO_MEMOTY, if cannot allocate memory for part_desc_t strucure; * RTEMS_INTERNAL_ERROR, if other error occurs. */ -static rtems_status_code -data_to_part_desc(uint8_t *data, rtems_part_desc_t **new_part_desc) +static rtems_status_code data_to_part_desc( + uint8_t *data, + rtems_part_desc_t **new_part_desc +) { - rtems_part_desc_t *part_desc; - uint32_t temp; + rtems_part_desc_t *part_desc; + uint32_t temp; - if (new_part_desc == NULL) - { - return RTEMS_INTERNAL_ERROR; - } + if ( new_part_desc == NULL ) { + return RTEMS_INTERNAL_ERROR; + } - *new_part_desc = NULL; + *new_part_desc = NULL; - if ((part_desc = calloc(1, sizeof(rtems_part_desc_t))) == NULL) - { - return RTEMS_NO_MEMORY; - } + if ( ( part_desc = calloc( 1, sizeof( rtems_part_desc_t ) ) ) == NULL ) { + return RTEMS_NO_MEMORY; + } - part_desc->bootable = *(data + RTEMS_IDE_PARTITION_BOOTABLE_OFFSET); - part_desc->sys_type = *(data + RTEMS_IDE_PARTITION_SYS_TYPE_OFFSET); + part_desc->bootable = *( data + RTEMS_IDE_PARTITION_BOOTABLE_OFFSET ); + part_desc->sys_type = *( data + RTEMS_IDE_PARTITION_SYS_TYPE_OFFSET ); - /* read the offset start position and partition size in sectors */ + /* read the offset start position and partition size in sectors */ - /* due to incorrect data alignment one have to align data first */ - memcpy(&temp, data + RTEMS_IDE_PARTITION_START_OFFSET, sizeof(uint32_t)); - part_desc->start = LE_TO_CPU_U32(temp); + /* due to incorrect data alignment one have to align data first */ + memcpy( &temp, data + RTEMS_IDE_PARTITION_START_OFFSET, sizeof( uint32_t ) ); + part_desc->start = LE_TO_CPU_U32( temp ); - memcpy(&temp, data + RTEMS_IDE_PARTITION_SIZE_OFFSET, sizeof(uint32_t)); - part_desc->size = LE_TO_CPU_U32(temp); + memcpy( &temp, data + RTEMS_IDE_PARTITION_SIZE_OFFSET, sizeof( uint32_t ) ); + part_desc->size = LE_TO_CPU_U32( temp ); - /* + /* * use partitions that are * - extended * or * - FAT type and non-zero */ - if (is_extended(part_desc->sys_type) || - ((is_fat_partition(part_desc->sys_type)) && (part_desc->size != 0))) { - *new_part_desc = part_desc; - } - else { - /* empty partition */ - free(part_desc); - } - return RTEMS_SUCCESSFUL; + if ( + is_extended( part_desc->sys_type ) || + ( ( is_fat_partition( part_desc->sys_type ) ) && ( part_desc->size != 0 ) ) + ) { + *new_part_desc = part_desc; + } else { + /* empty partition */ + free( part_desc ); + } + return RTEMS_SUCCESSFUL; } - /* * read_extended_partition -- * recursively reads extended partition sector from the device @@ -244,89 +242,83 @@ data_to_part_desc(uint8_t *data, rtems_part_desc_t **new_part_desc) * RTEMS_NO_MEMOTY if cannot allocate memory for part_desc_t strucure, * RTEMS_INTERNAL_ERROR if other error occurs. */ -static rtems_status_code -read_extended_partition(int fd, uint32_t start, rtems_part_desc_t *ext_part) +static rtems_status_code read_extended_partition( + int fd, + uint32_t start, + rtems_part_desc_t *ext_part +) { - int i; - rtems_sector_data_t *sector = NULL; - uint32_t here; - uint8_t *data; - rtems_part_desc_t *new_part_desc; - rtems_status_code rc; + int i; + rtems_sector_data_t *sector = NULL; + uint32_t here; + uint8_t *data; + rtems_part_desc_t *new_part_desc; + rtems_status_code rc; - if ((ext_part == NULL) || (ext_part->disk_desc == NULL)) - { - return RTEMS_INTERNAL_ERROR; + if ( ( ext_part == NULL ) || ( ext_part->disk_desc == NULL ) ) { + return RTEMS_INTERNAL_ERROR; + } + + /* get start sector of current extended partition */ + here = ext_part->start; + + /* get first extended partition sector */ + + rc = get_sector( fd, here, §or ); + if ( rc != RTEMS_SUCCESSFUL ) { + if ( sector ) { + free( sector ); } + return rc; + } - /* get start sector of current extended partition */ - here = ext_part->start; + if ( !msdos_signature_check( sector ) ) { + free( sector ); + return RTEMS_INTERNAL_ERROR; + } - /* get first extended partition sector */ + /* read and process up to 4 logical partition descriptors */ - rc = get_sector(fd, here, §or); - if (rc != RTEMS_SUCCESSFUL) - { - if (sector) - free(sector); - return rc; - } + data = sector->data + RTEMS_IDE_PARTITION_TABLE_OFFSET; - if (!msdos_signature_check(sector)) - { - free(sector); - return RTEMS_INTERNAL_ERROR; - } - - /* read and process up to 4 logical partition descriptors */ - - data = sector->data + RTEMS_IDE_PARTITION_TABLE_OFFSET; - - for (i = 0; i < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; i++) - { - /* if data_to_part_desc fails skip this partition + for ( i = 0; i < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; i++ ) { + /* if data_to_part_desc fails skip this partition * and parse the next one */ - rc = data_to_part_desc(data, &new_part_desc); - if (rc != RTEMS_SUCCESSFUL) - { - free(sector); - return rc; - } - - if (new_part_desc == NULL) - { - data += RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE; - continue; - } - - ext_part->sub_part[i] = new_part_desc; - new_part_desc->ext_part = ext_part; - new_part_desc->disk_desc = ext_part->disk_desc; - - if (is_extended(new_part_desc->sys_type)) - { - new_part_desc->log_id = EMPTY_PARTITION; - new_part_desc->start += start; - read_extended_partition(fd, start, new_part_desc); - } - else - { - rtems_disk_desc_t *disk_desc = new_part_desc->disk_desc; - disk_desc->partitions[disk_desc->last_log_id] = new_part_desc; - new_part_desc->log_id = ++disk_desc->last_log_id; - new_part_desc->start += here; - new_part_desc->end = new_part_desc->start + new_part_desc->size - 1; - } - data += RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE; + rc = data_to_part_desc( data, &new_part_desc ); + if ( rc != RTEMS_SUCCESSFUL ) { + free( sector ); + return rc; } - free(sector); + if ( new_part_desc == NULL ) { + data += RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE; + continue; + } - return RTEMS_SUCCESSFUL; + ext_part->sub_part[ i ] = new_part_desc; + new_part_desc->ext_part = ext_part; + new_part_desc->disk_desc = ext_part->disk_desc; + + if ( is_extended( new_part_desc->sys_type ) ) { + new_part_desc->log_id = EMPTY_PARTITION; + new_part_desc->start += start; + read_extended_partition( fd, start, new_part_desc ); + } else { + rtems_disk_desc_t *disk_desc = new_part_desc->disk_desc; + disk_desc->partitions[ disk_desc->last_log_id ] = new_part_desc; + new_part_desc->log_id = ++disk_desc->last_log_id; + new_part_desc->start += here; + new_part_desc->end = new_part_desc->start + new_part_desc->size - 1; + } + data += RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE; + } + + free( sector ); + + return RTEMS_SUCCESSFUL; } - /* * read_mbr -- * reads Master Boot Record (sector 0) of physical device and @@ -339,84 +331,76 @@ read_extended_partition(int fd, uint32_t start, rtems_part_desc_t *ext_part) * RTEMS_SUCCESSFUL if success, * RTEMS_INTERNAL_ERROR otherwise */ -static rtems_status_code -read_mbr(int fd, rtems_disk_desc_t *disk_desc) +static rtems_status_code read_mbr( int fd, rtems_disk_desc_t *disk_desc ) { - int part_num; - rtems_sector_data_t *sector = NULL; - rtems_part_desc_t *part_desc; - uint8_t *data; - rtems_status_code rc; + int part_num; + rtems_sector_data_t *sector = NULL; + rtems_part_desc_t *part_desc; + uint8_t *data; + rtems_status_code rc; - /* get MBR sector */ - rc = get_sector(fd, 0, §or); - if (rc != RTEMS_SUCCESSFUL) - { - if (sector) - free(sector); - return rc; + /* get MBR sector */ + rc = get_sector( fd, 0, §or ); + if ( rc != RTEMS_SUCCESSFUL ) { + if ( sector ) { + free( sector ); + } + return rc; + } + + /* check if the partition table structure is MS-DOS style */ + if ( !msdos_signature_check( sector ) ) { + free( sector ); + return RTEMS_INTERNAL_ERROR; + } + + /* read and process 4 primary partition descriptors */ + + data = sector->data + RTEMS_IDE_PARTITION_TABLE_OFFSET; + + for ( + part_num = 0; part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; + part_num++ + ) { + rc = data_to_part_desc( data, &part_desc ); + if ( rc != RTEMS_SUCCESSFUL ) { + free( sector ); + return rc; } - /* check if the partition table structure is MS-DOS style */ - if (!msdos_signature_check(sector)) - { - free(sector); - return RTEMS_INTERNAL_ERROR; + if ( part_desc != NULL ) { + part_desc->log_id = part_num + 1; + part_desc->disk_desc = disk_desc; + part_desc->end = part_desc->start + part_desc->size - 1; + disk_desc->partitions[ part_num ] = part_desc; + } else { + disk_desc->partitions[ part_num ] = NULL; } - /* read and process 4 primary partition descriptors */ + data += RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE; + } - data = sector->data + RTEMS_IDE_PARTITION_TABLE_OFFSET; + free( sector ); - for (part_num = 0; - part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; - part_num++) - { - rc = data_to_part_desc(data, &part_desc); - if (rc != RTEMS_SUCCESSFUL) - { - free(sector); - return rc; - } + disk_desc->last_log_id = RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; - if (part_desc != NULL) - { - part_desc->log_id = part_num + 1; - part_desc->disk_desc = disk_desc; - part_desc->end = part_desc->start + part_desc->size - 1; - disk_desc->partitions[part_num] = part_desc; - } - else - { - disk_desc->partitions[part_num] = NULL; - } - - data += RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE; - } - - free(sector); - - disk_desc->last_log_id = RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; - - /* There cannot be more than one extended partition, + /* There cannot be more than one extended partition, but we are to process each primary partition */ - for (part_num = 0; - part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; - part_num++) - { - part_desc = disk_desc->partitions[part_num]; - if (part_desc != NULL && is_extended(part_desc->sys_type)) - { - read_extended_partition(fd, part_desc->start, part_desc); - free(part_desc); - disk_desc->partitions[part_num] = NULL; - } + for ( + part_num = 0; part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; + part_num++ + ) { + part_desc = disk_desc->partitions[ part_num ]; + if ( part_desc != NULL && is_extended( part_desc->sys_type ) ) { + read_extended_partition( fd, part_desc->start, part_desc ); + free( part_desc ); + disk_desc->partitions[ part_num ] = NULL; } + } - return RTEMS_SUCCESSFUL; + return RTEMS_SUCCESSFUL; } - /* * partition free -- * frees partition description structure @@ -427,28 +411,26 @@ read_mbr(int fd, rtems_disk_desc_t *disk_desc) * RETURNS: * N/A */ -static void -partition_free(rtems_part_desc_t *part_desc) +static void partition_free( rtems_part_desc_t *part_desc ) { - int part_num; + int part_num; - if (part_desc == NULL) - return; + if ( part_desc == NULL ) { + return; + } - if (is_extended(part_desc->sys_type)) - { - for (part_num = 0; - part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; - part_num++) - { - partition_free(part_desc->sub_part[part_num]); - } + if ( is_extended( part_desc->sys_type ) ) { + for ( + part_num = 0; part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; + part_num++ + ) { + partition_free( part_desc->sub_part[ part_num ] ); } + } - free(part_desc); + free( part_desc ); } - /* * partition_table_free - frees disk descriptor structure * @@ -458,22 +440,20 @@ partition_free(rtems_part_desc_t *part_desc) * RETURNS: * N/A */ -static void -partition_table_free(rtems_disk_desc_t *disk_desc) +static void partition_table_free( rtems_disk_desc_t *disk_desc ) { - int part_num; + int part_num; - for (part_num = 0; - part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; - part_num++) - { - partition_free(disk_desc->partitions[part_num]); - } + for ( + part_num = 0; part_num < RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER; + part_num++ + ) { + partition_free( disk_desc->partitions[ part_num ] ); + } - free(disk_desc); + free( disk_desc ); } - /* * partition_table_get - reads partition table structure from the device * and creates disk description structure @@ -486,38 +466,37 @@ partition_table_free(rtems_disk_desc_t *disk_desc) * RTEMS_SUCCESSFUL if success, * RTEMS_INTERNAL_ERROR otherwise */ -static rtems_status_code -partition_table_get(const char *dev_name, rtems_disk_desc_t *disk_desc) +static rtems_status_code partition_table_get( + const char *dev_name, + rtems_disk_desc_t *disk_desc +) { - struct stat dev_stat; - rtems_status_code rc; - int fd; + struct stat dev_stat; + rtems_status_code rc; + int fd; - fd = open(dev_name, O_RDONLY); - if (fd < 0) - { - return RTEMS_INTERNAL_ERROR; - } + fd = open( dev_name, O_RDONLY ); + if ( fd < 0 ) { + return RTEMS_INTERNAL_ERROR; + } - rc = fstat(fd, &dev_stat); - if (rc != RTEMS_SUCCESSFUL) - { - close(fd); - return RTEMS_INTERNAL_ERROR; - } + rc = fstat( fd, &dev_stat ); + if ( rc != RTEMS_SUCCESSFUL ) { + close( fd ); + return RTEMS_INTERNAL_ERROR; + } - strncpy (disk_desc->dev_name, dev_name, 15); - disk_desc->sector_size = (dev_stat.st_blksize) ? dev_stat.st_blksize : - RTEMS_IDE_SECTOR_SIZE; + strncpy( disk_desc->dev_name, dev_name, 15 ); + disk_desc->sector_size = ( dev_stat.st_blksize ) ? dev_stat.st_blksize + : RTEMS_IDE_SECTOR_SIZE; - rc = read_mbr(fd, disk_desc); + rc = read_mbr( fd, disk_desc ); - close(fd); + close( fd ); - return rc; + return rc; } - /* * rtems_ide_part_table_free - frees disk descriptor structure * @@ -527,13 +506,11 @@ partition_table_get(const char *dev_name, rtems_disk_desc_t *disk_desc) * RETURNS: * N/A */ -void -rtems_ide_part_table_free(rtems_disk_desc_t *disk_desc) +void rtems_ide_part_table_free( rtems_disk_desc_t *disk_desc ) { - partition_table_free( disk_desc ); + partition_table_free( disk_desc ); } - /* * rtems_ide_part_table_get - reads partition table structure from the device * and creates disk description structure @@ -546,13 +523,14 @@ rtems_ide_part_table_free(rtems_disk_desc_t *disk_desc) * RTEMS_SUCCESSFUL if success, * RTEMS_INTERNAL_ERROR otherwise */ -rtems_status_code -rtems_ide_part_table_get(const char *dev_name, rtems_disk_desc_t *disk_desc) +rtems_status_code rtems_ide_part_table_get( + const char *dev_name, + rtems_disk_desc_t *disk_desc +) { - return partition_table_get( dev_name, disk_desc ); + return partition_table_get( dev_name, disk_desc ); } - /* * rtems_ide_part_table_initialize - initializes logical devices * on the physical IDE drive @@ -565,52 +543,50 @@ rtems_ide_part_table_get(const char *dev_name, rtems_disk_desc_t *disk_desc) * RTEMS_NO_MEMOTY if cannot have not enough memory, * RTEMS_INTERNAL_ERROR if other error occurs. */ -rtems_status_code -rtems_ide_part_table_initialize(const char *dev_name) +rtems_status_code rtems_ide_part_table_initialize( const char *dev_name ) { - int part_num; - rtems_disk_desc_t *disk_desc; - rtems_status_code rc; - rtems_part_desc_t *part_desc; + int part_num; + rtems_disk_desc_t *disk_desc; + rtems_status_code rc; + rtems_part_desc_t *part_desc; - /* logical device name /dev/hdxyy */ - char name[RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX]; + /* logical device name /dev/hdxyy */ + char name[ RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX ]; - disk_desc = (rtems_disk_desc_t *) calloc(1, sizeof(rtems_disk_desc_t)); - if (disk_desc == NULL) - { - return RTEMS_NO_MEMORY; + disk_desc = (rtems_disk_desc_t *) calloc( 1, sizeof( rtems_disk_desc_t ) ); + if ( disk_desc == NULL ) { + return RTEMS_NO_MEMORY; + } + + /* get partition table */ + rc = partition_table_get( dev_name, disk_desc ); + if ( rc != RTEMS_SUCCESSFUL ) { + free( disk_desc ); + return rc; + } + + /* create logical disks on the physical one */ + for ( part_num = 0; part_num < disk_desc->last_log_id; part_num++ ) { + sprintf( name, "%s%d", dev_name, part_num + 1 ); + + part_desc = disk_desc->partitions[ part_num ]; + if ( part_desc == NULL ) { + continue; } - /* get partition table */ - rc = partition_table_get(dev_name, disk_desc); - if (rc != RTEMS_SUCCESSFUL) - { - free(disk_desc); - return rc; + rc = rtems_blkdev_create_partition( + name, + dev_name, + part_desc->start, + part_desc->size + ); + if ( rc != RTEMS_SUCCESSFUL ) { + fprintf( stdout, "Cannot create device %s, error code %d\n", name, rc ); + continue; } + } - /* create logical disks on the physical one */ - for (part_num = 0; part_num < disk_desc->last_log_id; part_num++) - { - sprintf(name, "%s%d", dev_name, part_num + 1); + partition_table_free( disk_desc ); - part_desc = disk_desc->partitions[part_num]; - if (part_desc == NULL) - { - continue; - } - - rc = rtems_blkdev_create_partition(name, dev_name, part_desc->start, - part_desc->size); - if (rc != RTEMS_SUCCESSFUL) - { - fprintf(stdout,"Cannot create device %s, error code %d\n", name, rc); - continue; - } - } - - partition_table_free(disk_desc); - - return RTEMS_SUCCESSFUL; + return RTEMS_SUCCESSFUL; } diff --git a/cpukit/libblock/src/media-desc.c b/cpukit/libblock/src/media-desc.c index e68cd69d8c..9244dea806 100644 --- a/cpukit/libblock/src/media-desc.c +++ b/cpukit/libblock/src/media-desc.c @@ -35,7 +35,7 @@ #include -static const char *const rtems_media_event_desc_table [] = { +static const char *const rtems_media_event_desc_table[] = { [RTEMS_MEDIA_EVENT_DISK_ATTACH] = "DISK ATTACH", [RTEMS_MEDIA_EVENT_DISK_DETACH] = "DISK DETACH", [RTEMS_MEDIA_EVENT_MOUNT] = "MOUNT", @@ -45,7 +45,7 @@ static const char *const rtems_media_event_desc_table [] = { [RTEMS_MEDIA_EVENT_PARTITION_DETACH] = "PARTITION DETACH" }; -static const char *const rtems_media_state_desc_table [] = { +static const char *const rtems_media_state_desc_table[] = { [RTEMS_MEDIA_STATE_INQUIRY] = "INQUIRY", [RTEMS_MEDIA_STATE_ABORTED] = "ABORTED", [RTEMS_MEDIA_STATE_READY] = "SUCCESS", @@ -53,32 +53,36 @@ static const char *const rtems_media_state_desc_table [] = { [RTEMS_MEDIA_STATE_SUCCESS] = "SUCCESS", [RTEMS_MEDIA_ERROR_DISK_UNKNOWN] = "ERROR DISK UNKNOWN", [RTEMS_MEDIA_ERROR_DISK_EXISTS] = "ERROR DISK EXISTS", - [RTEMS_MEDIA_ERROR_DISK_OR_PARTITION_UNKNOWN] = "ERROR DISK OR PARTITION UNKNOWN", - [RTEMS_MEDIA_ERROR_DISK_OR_PARTITION_EXISTS] = "ERROR DISK OR PARTITION EXISTS", + [RTEMS_MEDIA_ERROR_DISK_OR_PARTITION_UNKNOWN] = + "ERROR DISK OR PARTITION UNKNOWN", + [RTEMS_MEDIA_ERROR_DISK_OR_PARTITION_EXISTS] = + "ERROR DISK OR PARTITION EXISTS", [RTEMS_MEDIA_ERROR_PARTITION_UNKNOWN] = "ERROR PARTITION UNKNOWN", [RTEMS_MEDIA_ERROR_PARTITION_ORPHAN] = "ERROR PARTITION ORPHAN", - [RTEMS_MEDIA_ERROR_PARTITION_DETACH_WITH_MOUNT] = "ERROR PARTITION DETACH WITH MOUNT", - [RTEMS_MEDIA_ERROR_PARTITION_WITH_UNKNOWN_DISK] = "ERROR PARTITION WITH UNKNOWN DISK", + [RTEMS_MEDIA_ERROR_PARTITION_DETACH_WITH_MOUNT] = + "ERROR PARTITION DETACH WITH MOUNT", + [RTEMS_MEDIA_ERROR_PARTITION_WITH_UNKNOWN_DISK] = + "ERROR PARTITION WITH UNKNOWN DISK", [RTEMS_MEDIA_ERROR_MOUNT_POINT_UNKNOWN] = "ERROR MOUNT POINT UNKNOWN", [RTEMS_MEDIA_ERROR_MOUNT_POINT_EXISTS] = "ERROR MOUNT POINT EXISTS", [RTEMS_MEDIA_ERROR_MOUNT_POINT_ORPHAN] = "ERROR MOUNT POINT ORPHAN" }; -#define TC(table) (sizeof(table) / sizeof(table [0])) +#define TC( table ) ( sizeof( table ) / sizeof( table[ 0 ] ) ) -const char *rtems_media_event_description(rtems_media_event event) +const char *rtems_media_event_description( rtems_media_event event ) { - if ((size_t) event < TC(rtems_media_event_desc_table)) { - return rtems_media_event_desc_table [event]; - } else { - return "INVALID"; - } -} - -const char *rtems_media_state_description(rtems_media_state state) -{ - if ((size_t) state < TC(rtems_media_state_desc_table)) { - return rtems_media_state_desc_table [state]; + if ( (size_t) event < TC( rtems_media_event_desc_table ) ) { + return rtems_media_event_desc_table[ event ]; + } else { + return "INVALID"; + } +} + +const char *rtems_media_state_description( rtems_media_state state ) +{ + if ( (size_t) state < TC( rtems_media_state_desc_table ) ) { + return rtems_media_state_desc_table[ state ]; } else { return "INVALID"; } diff --git a/cpukit/libblock/src/media-dev-ident.c b/cpukit/libblock/src/media-dev-ident.c index 8dbf12963e..6051b32c87 100644 --- a/cpukit/libblock/src/media-dev-ident.c +++ b/cpukit/libblock/src/media-dev-ident.c @@ -43,14 +43,14 @@ rtems_status_code rtems_media_get_device_identifier( const char *device_path, - dev_t *device_identifier + dev_t *device_identifier ) { - int rv = 0; + int rv = 0; struct stat st; - rv = stat(device_path, &st); - if (rv != 0) { + rv = stat( device_path, &st ); + if ( rv != 0 ) { return RTEMS_INVALID_ID; } diff --git a/cpukit/libblock/src/media-path.c b/cpukit/libblock/src/media-path.c index 90064341db..fb8743dfba 100644 --- a/cpukit/libblock/src/media-path.c +++ b/cpukit/libblock/src/media-path.c @@ -42,57 +42,57 @@ #include char *rtems_media_create_path( - const char *prefix, - const char *name, + const char *prefix, + const char *name, rtems_device_major_number major ) { - size_t const size = strlen(prefix) + 1 + strlen(name) + 1 + 10 + 1; - char *const s = malloc(size); + size_t const size = strlen( prefix ) + 1 + strlen( name ) + 1 + 10 + 1; + char *const s = malloc( size ); - if (s != NULL) { + if ( s != NULL ) { #ifndef NDEBUG - int rv = + int rv = #endif - snprintf(s, size, "%s/%s-%" PRIu32, prefix, name, major); - assert(rv < (int) size); + snprintf( s, size, "%s/%s-%" PRIu32, prefix, name, major ); + assert( rv < (int) size ); } return s; } -char *rtems_media_replace_prefix(const char *new_prefix, const char *path) +char *rtems_media_replace_prefix( const char *new_prefix, const char *path ) { - const char *const name_try = strrchr(path, '/'); - const char *const name = (name_try == NULL) ? path : name_try + 1; - size_t const new_prefix_len = strlen(new_prefix); - size_t const name_size = strlen(name) + 1; - size_t const size = new_prefix_len + 1 + name_size; - char *const s = malloc(size); + const char *const name_try = strrchr( path, '/' ); + const char *const name = ( name_try == NULL ) ? path : name_try + 1; + size_t const new_prefix_len = strlen( new_prefix ); + size_t const name_size = strlen( name ) + 1; + size_t const size = new_prefix_len + 1 + name_size; + char *const s = malloc( size ); - if (s != NULL) { - memcpy(s, new_prefix, new_prefix_len); - s [new_prefix_len] = '/'; - memcpy(s + new_prefix_len + 1, name, name_size); + if ( s != NULL ) { + memcpy( s, new_prefix, new_prefix_len ); + s[ new_prefix_len ] = '/'; + memcpy( s + new_prefix_len + 1, name, name_size ); } return s; } char *rtems_media_append_minor( - const char *path, + const char *path, rtems_device_minor_number minor ) { - size_t const size = strlen(path) + 1 + 10 + 1; - char *const s = malloc(size); + size_t const size = strlen( path ) + 1 + 10 + 1; + char *const s = malloc( size ); - if (s != NULL) { + if ( s != NULL ) { #ifndef NDEBUG - int rv = + int rv = #endif - snprintf(s, size, "%s-%" PRIu32, path, minor); - assert(rv < (int) size); + snprintf( s, size, "%s-%" PRIu32, path, minor ); + assert( rv < (int) size ); } return s; diff --git a/cpukit/libblock/src/media-server.c b/cpukit/libblock/src/media-server.c index 1f20f38cfd..3b4ed2e184 100644 --- a/cpukit/libblock/src/media-server.c +++ b/cpukit/libblock/src/media-server.c @@ -44,22 +44,22 @@ #define EVENT RTEMS_EVENT_13 typedef struct { - rtems_chain_node node; - rtems_media_event event; - const char *src; + rtems_chain_node node; + rtems_media_event event; + const char *src; rtems_media_worker worker; - void *worker_arg; + void *worker_arg; } message; -static RTEMS_CHAIN_DEFINE_EMPTY(message_chain); +static RTEMS_CHAIN_DEFINE_EMPTY( message_chain ); static rtems_id server_id = RTEMS_ID_NONE; -static void media_server(rtems_task_argument arg RTEMS_UNUSED) +static void media_server( rtems_task_argument arg RTEMS_UNUSED ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - while (true) { + while ( true ) { message *msg = NULL; sc = rtems_chain_get_with_wait( @@ -68,8 +68,8 @@ static void media_server(rtems_task_argument arg RTEMS_UNUSED) RTEMS_NO_TIMEOUT, (rtems_chain_node **) &msg ); - assert(sc == RTEMS_SUCCESSFUL); - assert(msg != NULL); + assert( sc == RTEMS_SUCCESSFUL ); + assert( msg != NULL ); rtems_media_post_event( msg->event, @@ -79,75 +79,75 @@ static void media_server(rtems_task_argument arg RTEMS_UNUSED) msg->worker_arg ); - free(msg); + free( msg ); } } rtems_status_code rtems_media_server_initialize( rtems_task_priority priority, - size_t stack_size, - rtems_mode modes, - rtems_attribute attributes + size_t stack_size, + rtems_mode modes, + rtems_attribute attributes ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - if (server_id == RTEMS_ID_NONE) { + if ( server_id == RTEMS_ID_NONE ) { sc = rtems_media_initialize(); - if (sc != RTEMS_SUCCESSFUL) { + if ( sc != RTEMS_SUCCESSFUL ) { goto error; } sc = rtems_task_create( - rtems_build_name('M', 'D', 'I', 'A'), + rtems_build_name( 'M', 'D', 'I', 'A' ), priority, stack_size, modes, attributes, &server_id ); - if (sc != RTEMS_SUCCESSFUL) { + if ( sc != RTEMS_SUCCESSFUL ) { goto error; } - sc = rtems_task_start(server_id, media_server, 0); - if (sc != RTEMS_SUCCESSFUL) { + sc = rtems_task_start( server_id, media_server, 0 ); + if ( sc != RTEMS_SUCCESSFUL ) { goto error; } } - + return RTEMS_SUCCESSFUL; error: - if (server_id != RTEMS_ID_NONE) { - rtems_task_delete(server_id); + if ( server_id != RTEMS_ID_NONE ) { + rtems_task_delete( server_id ); } return RTEMS_NO_MEMORY; } rtems_status_code rtems_media_server_post_event( - rtems_media_event event, - const char *src, + rtems_media_event event, + const char *src, rtems_media_worker worker, - void *worker_arg + void *worker_arg ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - size_t src_size = strlen(src) + 1; - message *msg = malloc(sizeof(*msg) + src_size); + size_t src_size = strlen( src ) + 1; + message *msg = malloc( sizeof( *msg ) + src_size ); - if (msg != NULL) { - char *s = (char *) msg + sizeof(*msg); + if ( msg != NULL ) { + char *s = (char *) msg + sizeof( *msg ); - memcpy(s, src, src_size); + memcpy( s, src, src_size ); msg->event = event; msg->src = s; msg->worker = worker; msg->worker_arg = worker_arg; - rtems_chain_initialize_node(&msg->node); + rtems_chain_initialize_node( &msg->node ); sc = rtems_chain_append_with_notification( &message_chain, @@ -155,7 +155,7 @@ rtems_status_code rtems_media_server_post_event( server_id, EVENT ); - if (sc != RTEMS_SUCCESSFUL) { + if ( sc != RTEMS_SUCCESSFUL ) { sc = RTEMS_NOT_CONFIGURED; } } else { diff --git a/cpukit/libblock/src/media.c b/cpukit/libblock/src/media.c index cc6bb70f91..c58a26a383 100644 --- a/cpukit/libblock/src/media.c +++ b/cpukit/libblock/src/media.c @@ -50,59 +50,59 @@ typedef struct { rtems_bdpart_partition *partitions; - size_t *count; + size_t *count; } partition_table; typedef struct { - size_t index; + size_t index; rtems_blkdev_bnum begin; rtems_blkdev_bnum count; } partition; typedef struct media_item { - rtems_chain_node node; + rtems_chain_node node; struct media_item *parent; - char *disk_path; - char *mount_path; + char *disk_path; + char *mount_path; } media_item; typedef struct listener_item { - rtems_chain_node node; + rtems_chain_node node; rtems_media_listener listener; - void *listener_arg; + void *listener_arg; } listener_item; -static RTEMS_CHAIN_DEFINE_EMPTY(listener_item_chain); +static RTEMS_CHAIN_DEFINE_EMPTY( listener_item_chain ); -static RTEMS_CHAIN_DEFINE_EMPTY(media_item_chain); +static RTEMS_CHAIN_DEFINE_EMPTY( media_item_chain ); -static rtems_mutex media_mutex = RTEMS_MUTEX_INITIALIZER("Media"); +static rtems_mutex media_mutex = RTEMS_MUTEX_INITIALIZER( "Media" ); -static void lock(void) +static void lock( void ) { - rtems_mutex_lock(&media_mutex); + rtems_mutex_lock( &media_mutex ); } -static void unlock(void) +static void unlock( void ) { - rtems_mutex_unlock(&media_mutex); + rtems_mutex_unlock( &media_mutex ); } static listener_item *find_listener( rtems_media_listener listener, - void *listener_arg + void *listener_arg ) { - rtems_chain_node *node = rtems_chain_first(&listener_item_chain); + rtems_chain_node *node = rtems_chain_first( &listener_item_chain ); - while (!rtems_chain_is_tail(&listener_item_chain, node)) { + while ( !rtems_chain_is_tail( &listener_item_chain, node ) ) { listener_item *item = (listener_item *) node; - if (item->listener == listener && item->listener_arg == listener_arg) { + if ( item->listener == listener && item->listener_arg == listener_arg ) { return item; } - node = rtems_chain_next(node); + node = rtems_chain_next( node ); } return NULL; @@ -110,23 +110,23 @@ static listener_item *find_listener( rtems_status_code rtems_media_listener_add( rtems_media_listener listener, - void *listener_arg + void *listener_arg ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - listener_item *item; + listener_item *item; lock(); - item = find_listener(listener, listener_arg); + item = find_listener( listener, listener_arg ); - if (item == NULL) { - item = malloc(sizeof(*item)); - if (item != NULL) { + if ( item == NULL ) { + item = malloc( sizeof( *item ) ); + if ( item != NULL ) { item->listener = listener; item->listener_arg = listener_arg; - rtems_chain_initialize_node(&item->node); - rtems_chain_append_unprotected(&listener_item_chain, &item->node); + rtems_chain_initialize_node( &item->node ); + rtems_chain_append_unprotected( &listener_item_chain, &item->node ); } else { sc = RTEMS_NO_MEMORY; } @@ -141,19 +141,19 @@ rtems_status_code rtems_media_listener_add( rtems_status_code rtems_media_listener_remove( rtems_media_listener listener, - void *listener_arg + void *listener_arg ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - listener_item *item; + listener_item *item; lock(); - item = find_listener(listener, listener_arg); + item = find_listener( listener, listener_arg ); - if (item != NULL) { - rtems_chain_extract_unprotected(&item->node); - free(item); + if ( item != NULL ) { + rtems_chain_extract_unprotected( &item->node ); + free( item ); } else { sc = RTEMS_INVALID_ID; } @@ -166,35 +166,31 @@ rtems_status_code rtems_media_listener_remove( static rtems_status_code notify( rtems_media_event event, rtems_media_state state, - const char *src, - const char *dest + const char *src, + const char *dest ) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_status_code rsc = RTEMS_SUCCESSFUL; - rtems_chain_node *node = rtems_chain_first(&listener_item_chain); + rtems_chain_node *node = rtems_chain_first( &listener_item_chain ); - while (!rtems_chain_is_tail(&listener_item_chain, node)) { + while ( !rtems_chain_is_tail( &listener_item_chain, node ) ) { listener_item *item = (listener_item *) node; - sc = (*item->listener)(event, state, src, dest, item->listener_arg); - if (sc != RTEMS_SUCCESSFUL) { + sc = ( *item->listener )( event, state, src, dest, item->listener_arg ); + if ( sc != RTEMS_SUCCESSFUL ) { rsc = sc; } - node = rtems_chain_next(node); + node = rtems_chain_next( node ); } return rsc; } -static void error( - rtems_media_state state, - const char *src, - const char *dest -) +static void error( rtems_media_state state, const char *src, const char *dest ) { - (void) notify(RTEMS_MEDIA_EVENT_ERROR, state, src, dest); + (void) notify( RTEMS_MEDIA_EVENT_ERROR, state, src, dest ); } static media_item *get_media_item( @@ -202,31 +198,30 @@ static media_item *get_media_item( const char *mount_path ) { - rtems_chain_node *node = rtems_chain_first(&media_item_chain); + rtems_chain_node *node = rtems_chain_first( &media_item_chain ); - while (!rtems_chain_is_tail(&media_item_chain, node)) { + while ( !rtems_chain_is_tail( &media_item_chain, node ) ) { media_item *item = (media_item *) node; if ( - (disk_path == NULL || strcmp(disk_path, item->disk_path) == 0) - && (mount_path == NULL - || (item->mount_path != NULL - && strcmp(mount_path, item->mount_path) == 0)) + ( disk_path == NULL || strcmp( disk_path, item->disk_path ) == 0 ) && + ( mount_path == NULL || ( item->mount_path != NULL && + strcmp( mount_path, item->mount_path ) == 0 ) ) ) { return item; } - node = rtems_chain_next(node); + node = rtems_chain_next( node ); } return NULL; } -static void free_item(media_item *item) +static void free_item( media_item *item ) { - rtems_chain_extract_unprotected(&item->node); - free(item->mount_path); - free(item); + rtems_chain_extract_unprotected( &item->node ); + free( item->mount_path ); + free( item ); } static void create_item( @@ -235,15 +230,15 @@ static void create_item( const char *mount_path ) { - size_t disk_path_size = strlen(disk_path) + 1; - media_item *item = malloc(sizeof(*item) + disk_path_size); + size_t disk_path_size = strlen( disk_path ) + 1; + media_item *item = malloc( sizeof( *item ) + disk_path_size ); - if (item != NULL) { - if (mount_path != NULL) { - item->mount_path = strdup(mount_path); + if ( item != NULL ) { + if ( mount_path != NULL ) { + item->mount_path = strdup( mount_path ); - if (item->mount_path == NULL) { - free(item); + if ( item->mount_path == NULL ) { + free( item ); return; } @@ -252,98 +247,102 @@ static void create_item( } item->parent = parent; - item->disk_path = (char *) item + sizeof(*item); - memcpy(item->disk_path, disk_path, disk_path_size); - rtems_chain_initialize_node(&item->node); - rtems_chain_append(&media_item_chain, &item->node); + item->disk_path = (char *) item + sizeof( *item ); + memcpy( item->disk_path, disk_path, disk_path_size ); + rtems_chain_initialize_node( &item->node ); + rtems_chain_append( &media_item_chain, &item->node ); } } -static void remove_mount_point(const char *mount_path) +static void remove_mount_point( const char *mount_path ) { - media_item *item = get_media_item(NULL, mount_path); + media_item *item = get_media_item( NULL, mount_path ); - if (item != NULL) { - free(item->mount_path); + if ( item != NULL ) { + free( item->mount_path ); item->mount_path = NULL; } else { - error(RTEMS_MEDIA_ERROR_MOUNT_POINT_UNKNOWN, mount_path, NULL); + error( RTEMS_MEDIA_ERROR_MOUNT_POINT_UNKNOWN, mount_path, NULL ); } } -static void remove_partition(const char *partition_path) +static void remove_partition( const char *partition_path ) { - media_item *item = get_media_item(partition_path, NULL); + media_item *item = get_media_item( partition_path, NULL ); - if (item != NULL) { - if (item->mount_path != NULL) { + if ( item != NULL ) { + if ( item->mount_path != NULL ) { error( RTEMS_MEDIA_ERROR_PARTITION_DETACH_WITH_MOUNT, partition_path, item->mount_path ); } - free_item(item); + free_item( item ); } else { - error(RTEMS_MEDIA_ERROR_PARTITION_UNKNOWN, partition_path, NULL); + error( RTEMS_MEDIA_ERROR_PARTITION_UNKNOWN, partition_path, NULL ); } } -static void remove_disk(const char *disk_path) +static void remove_disk( const char *disk_path ) { - media_item *item = get_media_item(disk_path, NULL); + media_item *item = get_media_item( disk_path, NULL ); - if (item != NULL) { - rtems_chain_node *node = rtems_chain_first(&media_item_chain); + if ( item != NULL ) { + rtems_chain_node *node = rtems_chain_first( &media_item_chain ); - while (!rtems_chain_is_tail(&media_item_chain, node)) { + while ( !rtems_chain_is_tail( &media_item_chain, node ) ) { media_item *child = (media_item *) node; - node = rtems_chain_next(node); + node = rtems_chain_next( node ); - if (child->parent == item) { - if (child->mount_path != NULL) { + if ( child->parent == item ) { + if ( child->mount_path != NULL ) { error( RTEMS_MEDIA_ERROR_MOUNT_POINT_ORPHAN, child->mount_path, disk_path ); } - error(RTEMS_MEDIA_ERROR_PARTITION_ORPHAN, child->disk_path, disk_path); - free_item(child); + error( + RTEMS_MEDIA_ERROR_PARTITION_ORPHAN, + child->disk_path, + disk_path + ); + free_item( child ); } } - free_item(item); + free_item( item ); } else { - error(RTEMS_MEDIA_ERROR_DISK_UNKNOWN, disk_path, NULL); + error( RTEMS_MEDIA_ERROR_DISK_UNKNOWN, disk_path, NULL ); } } -static void add_disk(const char *disk_path) +static void add_disk( const char *disk_path ) { - media_item *item = get_media_item(disk_path, NULL); + media_item *item = get_media_item( disk_path, NULL ); - if (item != NULL) { - error(RTEMS_MEDIA_ERROR_DISK_EXISTS, disk_path, NULL); - remove_disk(disk_path); + if ( item != NULL ) { + error( RTEMS_MEDIA_ERROR_DISK_EXISTS, disk_path, NULL ); + remove_disk( disk_path ); } - create_item(NULL, disk_path, NULL); + create_item( NULL, disk_path, NULL ); } -static void add_partition(const char *disk_path, const char *partition_path) +static void add_partition( const char *disk_path, const char *partition_path ) { - media_item *item = get_media_item(partition_path, NULL); - media_item *parent = get_media_item(disk_path, NULL); + media_item *item = get_media_item( partition_path, NULL ); + media_item *parent = get_media_item( disk_path, NULL ); - if (item != NULL) { - error(RTEMS_MEDIA_ERROR_DISK_OR_PARTITION_EXISTS, partition_path, NULL); - remove_disk(partition_path); + if ( item != NULL ) { + error( RTEMS_MEDIA_ERROR_DISK_OR_PARTITION_EXISTS, partition_path, NULL ); + remove_disk( partition_path ); } - if (parent != NULL) { - create_item(parent, partition_path, NULL); + if ( parent != NULL ) { + create_item( parent, partition_path, NULL ); } else { error( RTEMS_MEDIA_ERROR_PARTITION_WITH_UNKNOWN_DISK, @@ -353,68 +352,68 @@ static void add_partition(const char *disk_path, const char *partition_path) } } -static void add_mount_point(const char *disk_path, const char *mount_path) +static void add_mount_point( const char *disk_path, const char *mount_path ) { - media_item *item = get_media_item(disk_path, NULL); + media_item *item = get_media_item( disk_path, NULL ); - if (item != NULL) { - if (item->mount_path != NULL) { - error(RTEMS_MEDIA_ERROR_MOUNT_POINT_EXISTS, item->mount_path, NULL); - free(item->mount_path); + if ( item != NULL ) { + if ( item->mount_path != NULL ) { + error( RTEMS_MEDIA_ERROR_MOUNT_POINT_EXISTS, item->mount_path, NULL ); + free( item->mount_path ); } - item->mount_path = strdup(mount_path); + item->mount_path = strdup( mount_path ); } else { - error(RTEMS_MEDIA_ERROR_DISK_OR_PARTITION_UNKNOWN, disk_path, NULL); + error( RTEMS_MEDIA_ERROR_DISK_OR_PARTITION_UNKNOWN, disk_path, NULL ); } } -static bool is_add_state(rtems_media_state state) +static bool is_add_state( rtems_media_state state ) { return state == RTEMS_MEDIA_STATE_SUCCESS; } -static bool is_remove_state(rtems_media_state state) +static bool is_remove_state( rtems_media_state state ) { - return state == RTEMS_MEDIA_STATE_SUCCESS - || state == RTEMS_MEDIA_STATE_FAILED; + return state == RTEMS_MEDIA_STATE_SUCCESS || + state == RTEMS_MEDIA_STATE_FAILED; } static rtems_status_code remember_event( rtems_media_event event, rtems_media_state state, - const char *src, - const char *dest + const char *src, + const char *dest ) { - switch (event) { + switch ( event ) { case RTEMS_MEDIA_EVENT_DISK_ATTACH: - if (is_add_state(state)) { - add_disk(dest); + if ( is_add_state( state ) ) { + add_disk( dest ); } break; case RTEMS_MEDIA_EVENT_PARTITION_ATTACH: - if (is_add_state(state)) { - add_partition(src, dest); + if ( is_add_state( state ) ) { + add_partition( src, dest ); } break; case RTEMS_MEDIA_EVENT_MOUNT: - if (is_add_state(state)) { - add_mount_point(src, dest); + if ( is_add_state( state ) ) { + add_mount_point( src, dest ); } break; case RTEMS_MEDIA_EVENT_UNMOUNT: - if (is_remove_state(state)) { - remove_mount_point(src); + if ( is_remove_state( state ) ) { + remove_mount_point( src ); } break; case RTEMS_MEDIA_EVENT_PARTITION_DETACH: - if (is_remove_state(state)) { - remove_partition(src); + if ( is_remove_state( state ) ) { + remove_partition( src ); } break; case RTEMS_MEDIA_EVENT_DISK_DETACH: - if (is_remove_state(state)) { - remove_disk(src); + if ( is_remove_state( state ) ) { + remove_disk( src ); } break; default: @@ -425,52 +424,53 @@ static rtems_status_code remember_event( } static rtems_status_code process_event( - rtems_media_event event, - const char *src, - char **dest_ptr, + rtems_media_event event, + const char *src, + char **dest_ptr, rtems_media_worker worker, - void *worker_arg + void *worker_arg ) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_status_code sc_retry = RTEMS_SUCCESSFUL; rtems_media_state state; - char *dest = NULL; + char *dest = NULL; do { - sc = notify(event, RTEMS_MEDIA_STATE_INQUIRY, src, NULL); - if (sc == RTEMS_SUCCESSFUL) { + sc = notify( event, RTEMS_MEDIA_STATE_INQUIRY, src, NULL ); + if ( sc == RTEMS_SUCCESSFUL ) { state = RTEMS_MEDIA_STATE_READY; } else { state = RTEMS_MEDIA_STATE_ABORTED; } - sc = (*worker)(state, src, &dest, worker_arg); - if (state == RTEMS_MEDIA_STATE_READY) { - if (sc == RTEMS_SUCCESSFUL) { + sc = ( *worker )( state, src, &dest, worker_arg ); + if ( state == RTEMS_MEDIA_STATE_READY ) { + if ( sc == RTEMS_SUCCESSFUL ) { state = RTEMS_MEDIA_STATE_SUCCESS; } else { state = RTEMS_MEDIA_STATE_FAILED; } } - sc_retry = notify(event, state, src, dest); - } while (state == RTEMS_MEDIA_STATE_FAILED - && sc_retry == RTEMS_INCORRECT_STATE); - remember_event(event, state, src, dest); + sc_retry = notify( event, state, src, dest ); + } while ( + state == RTEMS_MEDIA_STATE_FAILED && sc_retry == RTEMS_INCORRECT_STATE + ); + remember_event( event, state, src, dest ); - if (state == RTEMS_MEDIA_STATE_SUCCESS) { + if ( state == RTEMS_MEDIA_STATE_SUCCESS ) { sc = RTEMS_SUCCESSFUL; - } else if (state == RTEMS_MEDIA_STATE_ABORTED) { + } else if ( state == RTEMS_MEDIA_STATE_ABORTED ) { sc = RTEMS_UNSATISFIED; } else { sc = RTEMS_IO_ERROR; } - if (dest_ptr != NULL && sc == RTEMS_SUCCESSFUL) { + if ( dest_ptr != NULL && sc == RTEMS_SUCCESSFUL ) { *dest_ptr = dest; } else { - free(dest); + free( dest ); } return sc; @@ -478,38 +478,38 @@ static rtems_status_code process_event( static rtems_status_code mount_worker( rtems_media_state state, - const char *src, - char **dest, - void *worker_arg + const char *src, + char **dest, + void *worker_arg ) { int rv = 0; - if (state == RTEMS_MEDIA_STATE_READY) { + if ( state == RTEMS_MEDIA_STATE_READY ) { rtems_dosfs_mount_options mount_options; - char *mount_path = NULL; + char *mount_path = NULL; - if (worker_arg == NULL) { - mount_path = rtems_media_replace_prefix(RTEMS_MEDIA_MOUNT_BASE, src); + if ( worker_arg == NULL ) { + mount_path = rtems_media_replace_prefix( RTEMS_MEDIA_MOUNT_BASE, src ); } else { - mount_path = strdup(worker_arg); + mount_path = strdup( worker_arg ); } - if (mount_path == NULL) { + if ( mount_path == NULL ) { return RTEMS_IO_ERROR; } - rv = rtems_mkdir(mount_path, S_IRWXU | S_IRWXG | S_IRWXO); - if (rv != 0) { - free(mount_path); + rv = rtems_mkdir( mount_path, S_IRWXU | S_IRWXG | S_IRWXO ); + if ( rv != 0 ) { + free( mount_path ); return RTEMS_IO_ERROR; } - memset(&mount_options, 0, sizeof(mount_options)); + memset( &mount_options, 0, sizeof( mount_options ) ); /* In case this fails, we fall back to use the default converter */ - mount_options.converter = rtems_dosfs_create_utf8_converter("CP850"); + mount_options.converter = rtems_dosfs_create_utf8_converter( "CP850" ); rv = mount( src, @@ -518,10 +518,12 @@ static rtems_status_code mount_worker( RTEMS_FILESYSTEM_READ_WRITE, &mount_options ); - if (rv != 0) { - (void) rmdir(mount_path); - free(mount_path); - (*mount_options.converter->handler->destroy)(mount_options.converter); + if ( rv != 0 ) { + (void) rmdir( mount_path ); + free( mount_path ); + ( *mount_options.converter->handler->destroy )( + mount_options.converter + ); return RTEMS_IO_ERROR; } @@ -533,13 +535,13 @@ static rtems_status_code mount_worker( } static rtems_status_code do_mount( - const char *src, - char **dest_ptr, + const char *src, + char **dest_ptr, rtems_media_worker worker, - void *worker_arg + void *worker_arg ) { - if (worker == NULL) { + if ( worker == NULL ) { worker = mount_worker; } @@ -553,16 +555,16 @@ static rtems_status_code do_mount( } static rtems_status_code do_partition_attach( - const char *src, - char **dest_ptr, + const char *src, + char **dest_ptr, rtems_media_worker worker, - void *worker_arg + void *worker_arg ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - char *part_path = NULL; + char *part_path = NULL; - if (worker != NULL) { + if ( worker != NULL ) { sc = process_event( RTEMS_MEDIA_EVENT_PARTITION_ATTACH, src, @@ -571,17 +573,17 @@ static rtems_status_code do_partition_attach( worker_arg ); - if (sc == RTEMS_SUCCESSFUL) { - sc = do_mount(part_path, NULL, NULL, NULL); + if ( sc == RTEMS_SUCCESSFUL ) { + sc = do_mount( part_path, NULL, NULL, NULL ); } } else { sc = RTEMS_INVALID_ADDRESS; } - if (dest_ptr != NULL && sc == RTEMS_SUCCESSFUL) { + if ( dest_ptr != NULL && sc == RTEMS_SUCCESSFUL ) { *dest_ptr = part_path; } else { - free(part_path); + free( part_path ); } return sc; @@ -589,18 +591,18 @@ static rtems_status_code do_partition_attach( static rtems_status_code partition_attach_worker( rtems_media_state state, - const char *src, - char **dest, - void *worker_arg + const char *src, + char **dest, + void *worker_arg ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - if (state == RTEMS_MEDIA_STATE_READY) { + if ( state == RTEMS_MEDIA_STATE_READY ) { partition *part = worker_arg; - char *part_path = rtems_media_append_minor(src, part->index); + char *part_path = rtems_media_append_minor( src, part->index ); - if (part_path == NULL) { + if ( part_path == NULL ) { return RTEMS_IO_ERROR; } @@ -610,8 +612,8 @@ static rtems_status_code partition_attach_worker( part->begin, part->count ); - if (sc != RTEMS_SUCCESSFUL) { - free(part_path); + if ( sc != RTEMS_SUCCESSFUL ) { + free( part_path ); return RTEMS_IO_ERROR; } @@ -623,19 +625,19 @@ static rtems_status_code partition_attach_worker( } static rtems_status_code attach_and_mount_partitions( - const char *disk_path, + const char *disk_path, const rtems_bdpart_partition *partitions, - size_t count + size_t count ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - size_t i = 0; + size_t i = 0; - for (i = 0; i < count; ++i) { + for ( i = 0; i < count; ++i ) { partition part_desc = { .index = i, - .begin = partitions [i].begin, - .count = partitions [i].end - partitions [i].begin + .begin = partitions[ i ].begin, + .count = partitions[ i ].end - partitions[ i ].begin }; char *part_path = NULL; @@ -647,11 +649,11 @@ static rtems_status_code attach_and_mount_partitions( &part_desc ); - if (sc == RTEMS_SUCCESSFUL) { - sc = do_mount(part_path, NULL, NULL, NULL); + if ( sc == RTEMS_SUCCESSFUL ) { + sc = do_mount( part_path, NULL, NULL, NULL ); } - free(part_path); + free( part_path ); } return sc; @@ -659,19 +661,19 @@ static rtems_status_code attach_and_mount_partitions( static rtems_status_code partition_inquiry_worker( rtems_media_state state, - const char *src, - char **dest RTEMS_UNUSED, - void *worker_arg + const char *src, + char **dest RTEMS_UNUSED, + void *worker_arg ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - if (state == RTEMS_MEDIA_STATE_READY) { - partition_table *pt = worker_arg; + if ( state == RTEMS_MEDIA_STATE_READY ) { + partition_table *pt = worker_arg; rtems_bdpart_format format; - sc = rtems_bdpart_read(src, &format, pt->partitions, pt->count); - if (sc != RTEMS_SUCCESSFUL || *pt->count == 0) { + sc = rtems_bdpart_read( src, &format, pt->partitions, pt->count ); + if ( sc != RTEMS_SUCCESSFUL || *pt->count == 0 ) { return RTEMS_IO_ERROR; } } @@ -680,21 +682,18 @@ static rtems_status_code partition_inquiry_worker( } static rtems_status_code do_partition_inquiry( - const char *src, - char **dest_ptr, + const char *src, + char **dest_ptr, rtems_media_worker worker, - void *worker_arg + void *worker_arg ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - if (worker == NULL) { - rtems_bdpart_partition partitions [RTEMS_BDPART_PARTITION_NUMBER_HINT]; - size_t count = RTEMS_BDPART_PARTITION_NUMBER_HINT; - partition_table pt = { - .partitions = partitions, - .count = &count - }; + if ( worker == NULL ) { + rtems_bdpart_partition partitions[ RTEMS_BDPART_PARTITION_NUMBER_HINT ]; + size_t count = RTEMS_BDPART_PARTITION_NUMBER_HINT; + partition_table pt = { .partitions = partitions, .count = &count }; sc = process_event( RTEMS_MEDIA_EVENT_PARTITION_INQUIRY, @@ -704,8 +703,8 @@ static rtems_status_code do_partition_inquiry( &pt ); - if (sc == RTEMS_SUCCESSFUL) { - sc = attach_and_mount_partitions(src, partitions, count); + if ( sc == RTEMS_SUCCESSFUL ) { + sc = attach_and_mount_partitions( src, partitions, count ); } } else { sc = process_event( @@ -721,17 +720,17 @@ static rtems_status_code do_partition_inquiry( } static rtems_status_code do_disk_attach( - const char *src, - char **dest_ptr, + const char *src, + char **dest_ptr, rtems_media_worker worker, - void *worker_arg + void *worker_arg ) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_status_code rsc = RTEMS_SUCCESSFUL; - char *disk_path = NULL; + char *disk_path = NULL; - if (worker != NULL) { + if ( worker != NULL ) { rsc = process_event( RTEMS_MEDIA_EVENT_DISK_ATTACH, src, @@ -739,22 +738,22 @@ static rtems_status_code do_disk_attach( worker, worker_arg ); - - if (rsc == RTEMS_SUCCESSFUL) { - sc = do_mount(disk_path, NULL, NULL, NULL); - if (sc != RTEMS_SUCCESSFUL) { - do_partition_inquiry(disk_path, NULL, NULL, NULL); + if ( rsc == RTEMS_SUCCESSFUL ) { + sc = do_mount( disk_path, NULL, NULL, NULL ); + + if ( sc != RTEMS_SUCCESSFUL ) { + do_partition_inquiry( disk_path, NULL, NULL, NULL ); } } } else { rsc = RTEMS_INVALID_ADDRESS; } - if (dest_ptr != NULL && rsc == RTEMS_SUCCESSFUL) { + if ( dest_ptr != NULL && rsc == RTEMS_SUCCESSFUL ) { *dest_ptr = disk_path; } else { - free(disk_path); + free( disk_path ); } return rsc; @@ -762,19 +761,19 @@ static rtems_status_code do_disk_attach( static rtems_status_code unmount_worker( rtems_media_state state, - const char *src, - char **dest RTEMS_UNUSED, - void *worker_arg RTEMS_UNUSED + const char *src, + char **dest RTEMS_UNUSED, + void *worker_arg RTEMS_UNUSED ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - if (state == RTEMS_MEDIA_STATE_READY) { - int rv = unmount(src); + if ( state == RTEMS_MEDIA_STATE_READY ) { + int rv = unmount( src ); - if (rv == 0) { - rv = rmdir(src); - if (rv != 0) { + if ( rv == 0 ) { + rv = rmdir( src ); + if ( rv != 0 ) { sc = RTEMS_IO_ERROR; } } else { @@ -786,13 +785,13 @@ static rtems_status_code unmount_worker( } static rtems_status_code do_unmount( - const char *src, - char **dest_ptr, + const char *src, + char **dest_ptr, rtems_media_worker worker, - void *worker_arg + void *worker_arg ) { - if (worker == NULL) { + if ( worker == NULL ) { worker = unmount_worker; worker_arg = NULL; } @@ -808,17 +807,17 @@ static rtems_status_code do_unmount( static rtems_status_code disk_detach_worker( rtems_media_state state, - const char *src, - char **dest RTEMS_UNUSED, - void *worker_arg RTEMS_UNUSED + const char *src, + char **dest RTEMS_UNUSED, + void *worker_arg RTEMS_UNUSED ) { rtems_status_code rsc = RTEMS_SUCCESSFUL; - if (state == RTEMS_MEDIA_STATE_READY) { - int rv = unlink(src); + if ( state == RTEMS_MEDIA_STATE_READY ) { + int rv = unlink( src ); - if (rv != 0) { + if ( rv != 0 ) { rsc = RTEMS_IO_ERROR; } } @@ -826,48 +825,51 @@ static rtems_status_code disk_detach_worker( return rsc; } -static rtems_status_code detach_item(rtems_media_event event, media_item *item) +static rtems_status_code detach_item( + rtems_media_event event, + media_item *item +) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_status_code rsc = RTEMS_SUCCESSFUL; - if (item->mount_path != NULL) { - sc = do_unmount(item->mount_path, NULL, NULL, NULL); - if (sc != RTEMS_SUCCESSFUL) { + if ( item->mount_path != NULL ) { + sc = do_unmount( item->mount_path, NULL, NULL, NULL ); + if ( sc != RTEMS_SUCCESSFUL ) { rsc = RTEMS_IO_ERROR; } } - sc = process_event(event, item->disk_path, NULL, disk_detach_worker, NULL); - if (sc != RTEMS_SUCCESSFUL) { + sc = process_event( event, item->disk_path, NULL, disk_detach_worker, NULL ); + if ( sc != RTEMS_SUCCESSFUL ) { rsc = RTEMS_IO_ERROR; } return rsc; } -static rtems_status_code detach_parent_item(media_item *parent) +static rtems_status_code detach_parent_item( media_item *parent ) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_status_code rsc = RTEMS_SUCCESSFUL; - rtems_chain_node *node = rtems_chain_first(&media_item_chain); + rtems_chain_node *node = rtems_chain_first( &media_item_chain ); - while (!rtems_chain_is_tail(&media_item_chain, node)) { + while ( !rtems_chain_is_tail( &media_item_chain, node ) ) { media_item *child = (media_item *) node; - node = rtems_chain_next(node); + node = rtems_chain_next( node ); - if (child->parent == parent) { - sc = detach_item(RTEMS_MEDIA_EVENT_PARTITION_DETACH, child); - if (sc != RTEMS_SUCCESSFUL) { + if ( child->parent == parent ) { + sc = detach_item( RTEMS_MEDIA_EVENT_PARTITION_DETACH, child ); + if ( sc != RTEMS_SUCCESSFUL ) { rsc = RTEMS_IO_ERROR; } } } - sc = detach_item(RTEMS_MEDIA_EVENT_DISK_DETACH, parent); - if (sc != RTEMS_SUCCESSFUL) { + sc = detach_item( RTEMS_MEDIA_EVENT_DISK_DETACH, parent ); + if ( sc != RTEMS_SUCCESSFUL ) { rsc = RTEMS_IO_ERROR; } @@ -875,17 +877,17 @@ static rtems_status_code detach_parent_item(media_item *parent) } static rtems_status_code do_disk_detach( - const char *src, - char **dest_ptr, + const char *src, + char **dest_ptr, rtems_media_worker worker, - void *worker_arg + void *worker_arg ) { - if (worker == NULL) { - media_item *parent = get_media_item(src, NULL); + if ( worker == NULL ) { + media_item *parent = get_media_item( src, NULL ); - if (parent != NULL) { - return detach_parent_item(parent); + if ( parent != NULL ) { + return detach_parent_item( parent ); } worker = disk_detach_worker; @@ -902,17 +904,17 @@ static rtems_status_code do_disk_detach( } static rtems_status_code do_partition_detach( - const char *src, - char **dest_ptr, + const char *src, + char **dest_ptr, rtems_media_worker worker, - void *worker_arg + void *worker_arg ) { - if (worker == NULL) { - media_item *item = get_media_item(src, NULL); + if ( worker == NULL ) { + media_item *item = get_media_item( src, NULL ); - if (item != NULL) { - return detach_item(RTEMS_MEDIA_EVENT_PARTITION_DETACH, item); + if ( item != NULL ) { + return detach_item( RTEMS_MEDIA_EVENT_PARTITION_DETACH, item ); } worker = disk_detach_worker; @@ -929,38 +931,38 @@ static rtems_status_code do_partition_detach( } rtems_status_code rtems_media_post_event( - rtems_media_event event, - const char *src, - char **dest_ptr, + rtems_media_event event, + const char *src, + char **dest_ptr, rtems_media_worker worker, - void *worker_arg + void *worker_arg ) { rtems_status_code sc = RTEMS_SUCCESSFUL; lock(); - switch (event) { + switch ( event ) { case RTEMS_MEDIA_EVENT_DISK_ATTACH: - sc = do_disk_attach(src, dest_ptr, worker, worker_arg); + sc = do_disk_attach( src, dest_ptr, worker, worker_arg ); break; case RTEMS_MEDIA_EVENT_DISK_DETACH: - sc = do_disk_detach(src, dest_ptr, worker, worker_arg); + sc = do_disk_detach( src, dest_ptr, worker, worker_arg ); break; case RTEMS_MEDIA_EVENT_MOUNT: - sc = do_mount(src, dest_ptr, worker, worker_arg); + sc = do_mount( src, dest_ptr, worker, worker_arg ); break; case RTEMS_MEDIA_EVENT_UNMOUNT: - sc = do_unmount(src, dest_ptr, worker, worker_arg); + sc = do_unmount( src, dest_ptr, worker, worker_arg ); break; case RTEMS_MEDIA_EVENT_PARTITION_INQUIRY: - sc = do_partition_inquiry(src, dest_ptr, worker, worker_arg); + sc = do_partition_inquiry( src, dest_ptr, worker, worker_arg ); break; case RTEMS_MEDIA_EVENT_PARTITION_ATTACH: - sc = do_partition_attach(src, dest_ptr, worker, worker_arg); + sc = do_partition_attach( src, dest_ptr, worker, worker_arg ); break; case RTEMS_MEDIA_EVENT_PARTITION_DETACH: - sc = do_partition_detach(src, dest_ptr, worker, worker_arg); + sc = do_partition_detach( src, dest_ptr, worker, worker_arg ); break; default: sc = RTEMS_INVALID_ID; diff --git a/cpukit/libblock/src/nvdisk-sram.c b/cpukit/libblock/src/nvdisk-sram.c index 677edbcedd..4dab09226c 100644 --- a/cpukit/libblock/src/nvdisk-sram.c +++ b/cpukit/libblock/src/nvdisk-sram.c @@ -46,48 +46,49 @@ #include #ifndef NVDISK_SRAM_ERROR_TRACE -#define NVDISK_SRAM_ERROR_TRACE (0) +#define NVDISK_SRAM_ERROR_TRACE ( 0 ) #endif -static int -rtems_nvdisk_sram_read (uint32_t device RTEMS_UNUSED, - uint32_t flags RTEMS_UNUSED, - void* base, - uint32_t offset, - void* buffer, - size_t size) +static int rtems_nvdisk_sram_read( + uint32_t device RTEMS_UNUSED, + uint32_t flags RTEMS_UNUSED, + void *base, + uint32_t offset, + void *buffer, + size_t size +) { - memcpy (buffer, (base + offset), size); + memcpy( buffer, ( base + offset ), size ); return 0; } -static int -rtems_nvdisk_sram_write (uint32_t device RTEMS_UNUSED, - uint32_t flags RTEMS_UNUSED, - void* base, - uint32_t offset, - const void* buffer, - size_t size) +static int rtems_nvdisk_sram_write( + uint32_t device RTEMS_UNUSED, + uint32_t flags RTEMS_UNUSED, + void *base, + uint32_t offset, + const void *buffer, + size_t size +) { - memcpy ((base + offset), buffer, size); + memcpy( ( base + offset ), buffer, size ); return 0; } -static int -rtems_nvdisk_sram_verify (uint32_t device RTEMS_UNUSED, - uint32_t flags RTEMS_UNUSED, - void* base, - uint32_t offset, - const void* buffer, - size_t size) +static int rtems_nvdisk_sram_verify( + uint32_t device RTEMS_UNUSED, + uint32_t flags RTEMS_UNUSED, + void *base, + uint32_t offset, + const void *buffer, + size_t size +) { - return memcmp ((base + offset), buffer, size) == 0 ? 0 : EIO; + return memcmp( ( base + offset ), buffer, size ) == 0 ? 0 : EIO; } - -const rtems_nvdisk_driver_handlers rtems_nvdisk_sram_handlers = -{ - .read = rtems_nvdisk_sram_read, - .write = rtems_nvdisk_sram_write, +const rtems_nvdisk_driver_handlers rtems_nvdisk_sram_handlers = { + .read = rtems_nvdisk_sram_read, + .write = rtems_nvdisk_sram_write, .verify = rtems_nvdisk_sram_verify }; diff --git a/cpukit/libblock/src/nvdisk.c b/cpukit/libblock/src/nvdisk.c index ae44f97479..f6abfda93d 100644 --- a/cpukit/libblock/src/nvdisk.c +++ b/cpukit/libblock/src/nvdisk.c @@ -73,15 +73,14 @@ * Control tracing. It can be compiled out of the code for small * footprint targets. Leave in by default. */ -#if !defined (RTEMS_NVDISK_TRACE) +#if !defined( RTEMS_NVDISK_TRACE ) #define RTEMS_NVDISK_TRACE 0 #endif /** * NV Device Control holds the segment controls */ -typedef struct rtems_nvdisk_device_ctl -{ +typedef struct rtems_nvdisk_device_ctl { /** * The device this segment resides on. */ @@ -105,29 +104,28 @@ typedef struct rtems_nvdisk_device_ctl /** * Device descriptor. */ - const rtems_nvdisk_device_desc* descriptor; + const rtems_nvdisk_device_desc *descriptor; } rtems_nvdisk_device_ctl; /** * The NV disk control structure for a single disk. There is one * for each minor disk in the system. */ -typedef struct -{ - uint32_t flags; /**< configuration flags. */ - uint32_t block_size; /**< The block size for this disk. */ - uint32_t block_count; /**< The number of available blocks. */ - rtems_nvdisk_device_ctl* devices; /**< The NV devices for this disk. */ - uint32_t device_count; /**< The number of NV devices. */ - uint32_t cs_pages; /**< The num of pages of checksums. */ - rtems_mutex lock; /**< Mutex for threading protection.*/ - uint32_t info_level; /**< The info trace level. */ +typedef struct { + uint32_t flags; /**< configuration flags. */ + uint32_t block_size; /**< The block size for this disk. */ + uint32_t block_count; /**< The number of available blocks. */ + rtems_nvdisk_device_ctl *devices; /**< The NV devices for this disk. */ + uint32_t device_count; /**< The number of NV devices. */ + uint32_t cs_pages; /**< The num of pages of checksums. */ + rtems_mutex lock; /**< Mutex for threading protection.*/ + uint32_t info_level; /**< The info trace level. */ } rtems_nvdisk; /** * The CRC16 factor table. Created during initialisation. */ -static uint16_t* rtems_nvdisk_crc16_factor; +static uint16_t *rtems_nvdisk_crc16_factor; /** * Calculate the CRC16 checksum. @@ -135,8 +133,9 @@ static uint16_t* rtems_nvdisk_crc16_factor; * @param _b The byte to checksum. * @param _c The current checksum. */ -#define rtems_nvdisk_calc_crc16(_b, _c) \ - rtems_nvdisk_crc16_factor[((_b) ^ ((_c) & 0xff)) & 0xff] ^ (((_c) >> 8) & 0xff) +#define rtems_nvdisk_calc_crc16( _b, _c ) \ + rtems_nvdisk_crc16_factor[ ( ( _b ) ^ ( ( _c ) & 0xff ) ) & 0xff ] ^ \ + ( ( ( _c ) >> 8 ) & 0xff ) /** * Generate the CRC table. @@ -145,22 +144,22 @@ static uint16_t* rtems_nvdisk_crc16_factor; * @relval RTEMS_SUCCESSFUL The table was generated. * @retval RTEMS_NO_MEMORY The table could not be allocated from the heap. */ -static rtems_status_code -rtems_nvdisk_crc16_gen_factors (uint16_t pattern) +static rtems_status_code rtems_nvdisk_crc16_gen_factors( uint16_t pattern ) { uint32_t b; - rtems_nvdisk_crc16_factor = malloc (sizeof (uint16_t) * 256); - if (!rtems_nvdisk_crc16_factor) + rtems_nvdisk_crc16_factor = malloc( sizeof( uint16_t ) * 256 ); + if ( !rtems_nvdisk_crc16_factor ) { return RTEMS_NO_MEMORY; + } - for (b = 0; b < 256; b++) - { + for ( b = 0; b < 256; b++ ) { uint32_t i; uint16_t v = b; - for (i = 8; i--;) - v = v & 1 ? (v >> 1) ^ pattern : v >> 1; - rtems_nvdisk_crc16_factor[b] = v & 0xffff; + for ( i = 8; i--; ) { + v = v & 1 ? ( v >> 1 ) ^ pattern : v >> 1; + } + rtems_nvdisk_crc16_factor[ b ] = v & 0xffff; } return RTEMS_SUCCESSFUL; } @@ -174,19 +173,21 @@ rtems_nvdisk_crc16_gen_factors (uint16_t pattern) * @param ... The arguments for the format text. * @return int The number of bytes written to the output. */ -static int -rtems_nvdisk_printf (const rtems_nvdisk* nvd, const char *format, ...) +static int rtems_nvdisk_printf( + const rtems_nvdisk *nvd, + const char *format, + ... +) { int ret = 0; - if (nvd->info_level >= 3) - { + if ( nvd->info_level >= 3 ) { va_list args; - va_start (args, format); - fprintf (stdout, "nvdisk:"); - ret = vfprintf (stdout, format, args); - fprintf (stdout, "\n"); - fflush (stdout); - va_end (args); + va_start( args, format ); + fprintf( stdout, "nvdisk:" ); + ret = vfprintf( stdout, format, args ); + fprintf( stdout, "\n" ); + fflush( stdout ); + va_end( args ); } return ret; } @@ -199,19 +200,21 @@ rtems_nvdisk_printf (const rtems_nvdisk* nvd, const char *format, ...) * @param ... The arguments for the format text. * @return int The number of bytes written to the output. */ -static int -rtems_nvdisk_info (const rtems_nvdisk* nvd, const char *format, ...) +static int rtems_nvdisk_info( + const rtems_nvdisk *nvd, + const char *format, + ... +) { int ret = 0; - if (nvd->info_level >= 2) - { + if ( nvd->info_level >= 2 ) { va_list args; - va_start (args, format); - fprintf (stdout, "nvdisk:"); - ret = vfprintf (stdout, format, args); - fprintf (stdout, "\n"); - fflush (stdout); - va_end (args); + va_start( args, format ); + fprintf( stdout, "nvdisk:" ); + ret = vfprintf( stdout, format, args ); + fprintf( stdout, "\n" ); + fflush( stdout ); + va_end( args ); } return ret; } @@ -224,19 +227,21 @@ rtems_nvdisk_info (const rtems_nvdisk* nvd, const char *format, ...) * @param ... The arguments for the format text. * @return int The number of bytes written to the output. */ -static int -rtems_nvdisk_warning (const rtems_nvdisk* nvd, const char *format, ...) +static int rtems_nvdisk_warning( + const rtems_nvdisk *nvd, + const char *format, + ... +) { int ret = 0; - if (nvd->info_level >= 1) - { + if ( nvd->info_level >= 1 ) { va_list args; - va_start (args, format); - fprintf (stdout, "nvdisk:warning:"); - ret = vfprintf (stdout, format, args); - fprintf (stdout, "\n"); - fflush (stdout); - va_end (args); + va_start( args, format ); + fprintf( stdout, "nvdisk:warning:" ); + ret = vfprintf( stdout, format, args ); + fprintf( stdout, "\n" ); + fflush( stdout ); + va_end( args ); } return ret; } @@ -249,148 +254,187 @@ rtems_nvdisk_warning (const rtems_nvdisk* nvd, const char *format, ...) * @param ... The arguments for the format text. * @return int The number of bytes written to the output. */ -static int -rtems_nvdisk_error (const char *format, ...) +static int rtems_nvdisk_error( const char *format, ... ) { - int ret; + int ret; va_list args; - va_start (args, format); - fprintf (stderr, "nvdisk:error:"); - ret = vfprintf (stderr, format, args); - fprintf (stderr, "\n"); - fflush (stderr); - va_end (args); + va_start( args, format ); + fprintf( stderr, "nvdisk:error:" ); + ret = vfprintf( stderr, format, args ); + fprintf( stderr, "\n" ); + fflush( stderr ); + va_end( args ); return ret; } /** * Get the descriptor for a device. */ -static const rtems_nvdisk_device_desc* -rtems_nvdisk_device_descriptor (const rtems_nvdisk* nvd, uint32_t device) +static const rtems_nvdisk_device_desc *rtems_nvdisk_device_descriptor( + const rtems_nvdisk *nvd, + uint32_t device +) { - return nvd->devices[device].descriptor; + return nvd->devices[ device ].descriptor; } /** * Read a block of data from a device. */ -static int -rtems_nvdisk_device_read (const rtems_nvdisk* nvd, - uint32_t device, - uint32_t offset, - void* buffer, - uint32_t size) +static int rtems_nvdisk_device_read( + const rtems_nvdisk *nvd, + uint32_t device, + uint32_t offset, + void *buffer, + uint32_t size +) { - const rtems_nvdisk_device_desc* dd; - const rtems_nvdisk_driver_handlers* ops; - dd = rtems_nvdisk_device_descriptor (nvd, device); - ops = nvd->devices[device].descriptor->nv_ops; + const rtems_nvdisk_device_desc *dd; + const rtems_nvdisk_driver_handlers *ops; + dd = rtems_nvdisk_device_descriptor( nvd, device ); + ops = nvd->devices[ device ].descriptor->nv_ops; #if RTEMS_NVDISK_TRACE - rtems_nvdisk_printf (nvd, " dev-read: %02d-%08x: s=%d", - device, offset, size); + rtems_nvdisk_printf( + nvd, + " dev-read: %02d-%08x: s=%d", + device, + offset, + size + ); #endif - return ops->read (device, dd->flags, dd->base, offset, buffer, size); + return ops->read( device, dd->flags, dd->base, offset, buffer, size ); } /** * Write a block of data to a device. */ -static int -rtems_nvdisk_device_write (const rtems_nvdisk* nvd, - uint32_t device, - uint32_t offset, - const void* buffer, - uint32_t size) +static int rtems_nvdisk_device_write( + const rtems_nvdisk *nvd, + uint32_t device, + uint32_t offset, + const void *buffer, + uint32_t size +) { - const rtems_nvdisk_device_desc* dd; - const rtems_nvdisk_driver_handlers* ops; - dd = rtems_nvdisk_device_descriptor (nvd, device); - ops = nvd->devices[device].descriptor->nv_ops; + const rtems_nvdisk_device_desc *dd; + const rtems_nvdisk_driver_handlers *ops; + dd = rtems_nvdisk_device_descriptor( nvd, device ); + ops = nvd->devices[ device ].descriptor->nv_ops; #if RTEMS_NVDISK_TRACE - rtems_nvdisk_printf (nvd, " dev-write: %02d-%08x: s=%d", - device, offset, size); + rtems_nvdisk_printf( + nvd, + " dev-write: %02d-%08x: s=%d", + device, + offset, + size + ); #endif - return ops->write (device, dd->flags, dd->base, offset, buffer, size); + return ops->write( device, dd->flags, dd->base, offset, buffer, size ); } #if NOT_USED /** * Verify the data with the data in a segment. */ -static int -rtems_nvdisk_device_verify (const rtems_nvdisk* nvd, - uint32_t device, - uint32_t offset, - const void* buffer, - uint32_t size) +static int rtems_nvdisk_device_verify( + const rtems_nvdisk *nvd, + uint32_t device, + uint32_t offset, + const void *buffer, + uint32_t size +) { - const rtems_nvdisk_device_desc* dd; - const rtems_nvdisk_driver_handlers* ops; - dd = rtems_nvdisk_device_descriptor (nvd, device); - ops = nvd->devices[device].descriptor->nv_ops; + const rtems_nvdisk_device_desc *dd; + const rtems_nvdisk_driver_handlers *ops; + dd = rtems_nvdisk_device_descriptor( nvd, device ); + ops = nvd->devices[ device ].descriptor->nv_ops; #if RTEMS_NVDISK_TRACE - rtems_nvdisk_printf (nvd, " seg-verify: %02d-%08x: s=%d", - device, offset, size); + rtems_nvdisk_printf( + nvd, + " seg-verify: %02d-%08x: s=%d", + device, + offset, + size + ); #endif - return ops->verify (device, dd->flags, dd->base, offset, buffer, size); + return ops->verify( device, dd->flags, dd->base, offset, buffer, size ); } #endif /** * Read a page of data from the device. */ -static int -rtems_nvdisk_read_page (const rtems_nvdisk* nvd, - uint32_t device, - uint32_t page, - void* buffer) +static int rtems_nvdisk_read_page( + const rtems_nvdisk *nvd, + uint32_t device, + uint32_t page, + void *buffer +) { - return rtems_nvdisk_device_read (nvd, device, - page * nvd->block_size, buffer, - nvd->block_size); + return rtems_nvdisk_device_read( + nvd, + device, + page * nvd->block_size, + buffer, + nvd->block_size + ); } /** * Write a page of data to a device. */ -static int -rtems_nvdisk_write_page (const rtems_nvdisk* nvd, - uint32_t device, - uint32_t page, - const void* buffer) +static int rtems_nvdisk_write_page( + const rtems_nvdisk *nvd, + uint32_t device, + uint32_t page, + const void *buffer +) { - return rtems_nvdisk_device_write (nvd, device, - page * nvd->block_size, - buffer, nvd->block_size); + return rtems_nvdisk_device_write( + nvd, + device, + page * nvd->block_size, + buffer, + nvd->block_size + ); } /** * Read the checksum from the device. */ -static int -rtems_nvdisk_read_checksum (const rtems_nvdisk* nvd, - uint32_t device, - uint32_t page, - uint16_t* cs) +static int rtems_nvdisk_read_checksum( + const rtems_nvdisk *nvd, + uint32_t device, + uint32_t page, + uint16_t *cs +) { - return rtems_nvdisk_device_read (nvd, device, - page * sizeof (uint16_t), - cs, sizeof (uint16_t)); + return rtems_nvdisk_device_read( + nvd, + device, + page * sizeof( uint16_t ), + cs, + sizeof( uint16_t ) + ); } /** * Write the checksum to the device. */ -static int -rtems_nvdisk_write_checksum (const rtems_nvdisk* nvd, - uint32_t device, - uint32_t page, - const uint16_t cs) +static int rtems_nvdisk_write_checksum( + const rtems_nvdisk *nvd, + uint32_t device, + uint32_t page, + const uint16_t cs +) { - return rtems_nvdisk_device_write (nvd, device, - page * sizeof (uint16_t), - &cs, sizeof (uint16_t)); + return rtems_nvdisk_device_write( + nvd, + device, + page * sizeof( uint16_t ), + &cs, + sizeof( uint16_t ) + ); } /** @@ -400,9 +444,10 @@ rtems_nvdisk_write_checksum (const rtems_nvdisk* nvd, * @param dd The device descriptor. * @param page_size The page size in bytes. */ -static uint32_t -rtems_nvdisk_pages_in_device (const rtems_nvdisk* nvd, - const rtems_nvdisk_device_desc* dd) +static uint32_t rtems_nvdisk_pages_in_device( + const rtems_nvdisk *nvd, + const rtems_nvdisk_device_desc *dd +) { return dd->size / nvd->block_size; } @@ -411,26 +456,30 @@ rtems_nvdisk_pages_in_device (const rtems_nvdisk* nvd, * Calculate the number of pages needed to hold the page descriptors. * The calculation need to round up. */ -static uint32_t -rtems_nvdisk_page_desc_pages (const rtems_nvdisk* nvd, - const rtems_nvdisk_device_desc* dd) +static uint32_t rtems_nvdisk_page_desc_pages( + const rtems_nvdisk *nvd, + const rtems_nvdisk_device_desc *dd +) { - uint32_t pages = rtems_nvdisk_pages_in_device (nvd, dd); - uint32_t bytes = pages * sizeof (uint16_t); - return ((bytes - 1) / nvd->block_size) + 1; + uint32_t pages = rtems_nvdisk_pages_in_device( nvd, dd ); + uint32_t bytes = pages * sizeof( uint16_t ); + return ( ( bytes - 1 ) / nvd->block_size ) + 1; } /** * Calculate the checksum of a page. */ -static uint16_t -rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size) +static uint16_t rtems_nvdisk_page_checksum( + const uint8_t *buffer, + uint32_t page_size +) { uint16_t cs = 0xffff; uint32_t i; - for (i = 0; i < page_size; i++, buffer++) - cs = rtems_nvdisk_calc_crc16 (*buffer, cs); + for ( i = 0; i < page_size; i++, buffer++ ) { + cs = rtems_nvdisk_calc_crc16( *buffer, cs ); + } return cs; } @@ -438,26 +487,29 @@ rtems_nvdisk_page_checksum (const uint8_t* buffer, uint32_t page_size) /** * Map a block to a device. */ -static rtems_nvdisk_device_ctl* -rtems_nvdisk_get_device (rtems_nvdisk* nvd, uint32_t block) +static rtems_nvdisk_device_ctl *rtems_nvdisk_get_device( + rtems_nvdisk *nvd, + uint32_t block +) { uint32_t device; - if (block >= nvd->block_count) - { - rtems_nvdisk_error ("read-block: bad block: %d", block); + if ( block >= nvd->block_count ) { + rtems_nvdisk_error( "read-block: bad block: %d", block ); return NULL; } - for (device = 0; device < nvd->device_count; device++) - { - rtems_nvdisk_device_ctl* dc = &nvd->devices[device]; - if ((block >= dc->block_base) && - (block < (dc->block_base + dc->pages - dc->pages_desc))) + for ( device = 0; device < nvd->device_count; device++ ) { + rtems_nvdisk_device_ctl *dc = &nvd->devices[ device ]; + if ( + ( block >= dc->block_base ) && + ( block < ( dc->block_base + dc->pages - dc->pages_desc ) ) + ) { return dc; + } } - rtems_nvdisk_error ("map-block:%d: no device/page map found", block); + rtems_nvdisk_error( "map-block:%d: no device/page map found", block ); return NULL; } @@ -465,9 +517,10 @@ rtems_nvdisk_get_device (rtems_nvdisk* nvd, uint32_t block) /** * Get the page for a block in a device. */ -static uint32_t -rtems_nvdisk_get_page (rtems_nvdisk_device_ctl* dc, - uint32_t block) +static uint32_t rtems_nvdisk_get_page( + rtems_nvdisk_device_ctl *dc, + uint32_t block +) { return block - dc->block_base; } @@ -482,52 +535,71 @@ rtems_nvdisk_get_page (rtems_nvdisk_device_ctl* dc, * @return 0 No error. * @return EIO Invalid block number or crc. */ -static int -rtems_nvdisk_read_block (rtems_nvdisk* nvd, uint32_t block, uint8_t* buffer) +static int rtems_nvdisk_read_block( + rtems_nvdisk *nvd, + uint32_t block, + uint8_t *buffer +) { - rtems_nvdisk_device_ctl* dc; + rtems_nvdisk_device_ctl *dc; uint32_t page; uint16_t crc; uint16_t cs; int ret; - dc = rtems_nvdisk_get_device (nvd, block); + dc = rtems_nvdisk_get_device( nvd, block ); - if (!dc) + if ( !dc ) { return EIO; + } - page = rtems_nvdisk_get_page (dc, block); + page = rtems_nvdisk_get_page( dc, block ); #if RTEMS_NVDISK_TRACE - rtems_nvdisk_info (nvd, " read-block:%d=>%02d-%03d, cs:%04x", - block, dc->device, page, crc); + rtems_nvdisk_info( + nvd, + " read-block:%d=>%02d-%03d, cs:%04x", + block, + dc->device, + page, + crc + ); #endif - ret = rtems_nvdisk_read_checksum (nvd, dc->device, page, &crc); + ret = rtems_nvdisk_read_checksum( nvd, dc->device, page, &crc ); - if (ret) + if ( ret ) { return ret; + } - if (crc == 0xffff) - { + if ( crc == 0xffff ) { #if RTEMS_NVDISK_TRACE - rtems_nvdisk_warning (nvd, "read-block: crc not set: %d", block); + rtems_nvdisk_warning( nvd, "read-block: crc not set: %d", block ); #endif - memset (buffer, 0, nvd->block_size); + memset( buffer, 0, nvd->block_size ); return 0; } - ret = rtems_nvdisk_read_page (nvd, dc->device, page + dc->pages_desc, buffer); + ret = rtems_nvdisk_read_page( + nvd, + dc->device, + page + dc->pages_desc, + buffer + ); - if (ret) + if ( ret ) { return ret; + } - cs = rtems_nvdisk_page_checksum (buffer, nvd->block_size); + cs = rtems_nvdisk_page_checksum( buffer, nvd->block_size ); - if (cs != crc) - { - rtems_nvdisk_error ("read-block: crc failure: %d: buffer:%04x page:%04x", - block, cs, crc); + if ( cs != crc ) { + rtems_nvdisk_error( + "read-block: crc failure: %d: buffer:%04x page:%04x", + block, + cs, + crc + ); return EIO; } @@ -545,35 +617,49 @@ rtems_nvdisk_read_block (rtems_nvdisk* nvd, uint32_t block, uint8_t* buffer) * @return EIO Invalid block size, block number, segment pointer, crc, * page flags. */ -static int -rtems_nvdisk_write_block (rtems_nvdisk* nvd, - uint32_t block, - const unsigned char* buffer) +static int rtems_nvdisk_write_block( + rtems_nvdisk *nvd, + uint32_t block, + const unsigned char *buffer +) { - rtems_nvdisk_device_ctl* dc; + rtems_nvdisk_device_ctl *dc; uint32_t page; uint16_t cs; int ret; - dc = rtems_nvdisk_get_device (nvd, block); + dc = rtems_nvdisk_get_device( nvd, block ); - if (!dc) + if ( !dc ) { return EIO; + } - page = rtems_nvdisk_get_page (dc, block); + page = rtems_nvdisk_get_page( dc, block ); - cs = rtems_nvdisk_page_checksum (buffer, nvd->block_size); + cs = rtems_nvdisk_page_checksum( buffer, nvd->block_size ); #if RTEMS_NVDISK_TRACE - rtems_nvdisk_info (nvd, " write-block:%d=>%02d-%03d", block, dc->device, page); + rtems_nvdisk_info( + nvd, + " write-block:%d=>%02d-%03d", + block, + dc->device, + page + ); #endif - ret = rtems_nvdisk_write_page (nvd, dc->device, page + dc->pages_desc, buffer); + ret = rtems_nvdisk_write_page( + nvd, + dc->device, + page + dc->pages_desc, + buffer + ); - if (ret) + if ( ret ) { return ret; + } - return rtems_nvdisk_write_checksum (nvd, dc->device, page, cs); + return rtems_nvdisk_write_checksum( nvd, dc->device, page, cs ); } /** @@ -584,33 +670,31 @@ rtems_nvdisk_write_block (rtems_nvdisk* nvd, * @param req Pointer to the READ block device request info. * @retval int The ioctl return value. */ -static int -rtems_nvdisk_read (rtems_nvdisk* nvd, rtems_blkdev_request* req) +static int rtems_nvdisk_read( rtems_nvdisk *nvd, rtems_blkdev_request *req ) { - rtems_blkdev_sg_buffer* sg = req->bufs; + rtems_blkdev_sg_buffer *sg = req->bufs; uint32_t bufs; int ret = 0; #if RTEMS_NVDISK_TRACE - rtems_nvdisk_info (nvd, "read: blocks=%d", req->bufnum); + rtems_nvdisk_info( nvd, "read: blocks=%d", req->bufnum ); #endif - for (bufs = 0; (ret == 0) && (bufs < req->bufnum); bufs++, sg++) - { - uint8_t* data; + for ( bufs = 0; ( ret == 0 ) && ( bufs < req->bufnum ); bufs++, sg++ ) { + uint8_t *data; uint32_t nvb; uint32_t b; nvb = sg->length / nvd->block_size; data = sg->buffer; - for (b = 0; b < nvb; b++, data += nvd->block_size) - { - ret = rtems_nvdisk_read_block (nvd, sg->block + b, data); - if (ret) + for ( b = 0; b < nvb; b++, data += nvd->block_size ) { + ret = rtems_nvdisk_read_block( nvd, sg->block + b, data ); + if ( ret ) { break; + } } } - rtems_blkdev_request_done (req, ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL); + rtems_blkdev_request_done( req, ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL ); return 0; } @@ -623,33 +707,31 @@ rtems_nvdisk_read (rtems_nvdisk* nvd, rtems_blkdev_request* req) * @param req Pointers to the WRITE block device request info. * @retval int The ioctl return value. */ -static int -rtems_nvdisk_write (rtems_nvdisk* nvd, rtems_blkdev_request* req) +static int rtems_nvdisk_write( rtems_nvdisk *nvd, rtems_blkdev_request *req ) { - rtems_blkdev_sg_buffer* sg = req->bufs; + rtems_blkdev_sg_buffer *sg = req->bufs; uint32_t bufs; int ret = 0; #if RTEMS_NVDISK_TRACE - rtems_nvdisk_info (nvd, "write: blocks=%d", req->bufnum); + rtems_nvdisk_info( nvd, "write: blocks=%d", req->bufnum ); #endif - for (bufs = 0; (ret == 0) && (bufs < req->bufnum); bufs++, sg++) - { - uint8_t* data; + for ( bufs = 0; ( ret == 0 ) && ( bufs < req->bufnum ); bufs++, sg++ ) { + uint8_t *data; uint32_t nvb; uint32_t b; nvb = sg->length / nvd->block_size; data = sg->buffer; - for (b = 0; b < nvb; b++, data += nvd->block_size) - { - ret = rtems_nvdisk_write_block (nvd, sg->block + b, data); - if (ret) + for ( b = 0; b < nvb; b++, data += nvd->block_size ) { + ret = rtems_nvdisk_write_block( nvd, sg->block + b, data ); + if ( ret ) { break; + } } } - rtems_blkdev_request_done (req, ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL); + rtems_blkdev_request_done( req, ret ? RTEMS_IO_ERROR : RTEMS_SUCCESSFUL ); return 0; } @@ -660,24 +742,22 @@ rtems_nvdisk_write (rtems_nvdisk* nvd, rtems_blkdev_request* req) * @param nvd The nvdisk data. * @retval int The ioctl return value. */ -static int -rtems_nvdisk_erase_disk (rtems_nvdisk* nvd) +static int rtems_nvdisk_erase_disk( rtems_nvdisk *nvd ) { uint32_t device; #if RTEMS_NVDISK_TRACE - rtems_nvdisk_info (nvd, "erase-disk"); + rtems_nvdisk_info( nvd, "erase-disk" ); #endif - for (device = 0; device < nvd->device_count; device++) - { - rtems_nvdisk_device_ctl* dc = &nvd->devices[device]; + for ( device = 0; device < nvd->device_count; device++ ) { + rtems_nvdisk_device_ctl *dc = &nvd->devices[ device ]; uint32_t page; - for (page = 0; page < (dc->pages - dc->pages_desc); page++) - { - int ret = rtems_nvdisk_write_checksum (nvd, dc->device, page, 0xffff); - if (ret) + for ( page = 0; page < ( dc->pages - dc->pages_desc ); page++ ) { + int ret = rtems_nvdisk_write_checksum( nvd, dc->device, page, 0xffff ); + if ( ret ) { return ret; + } } } @@ -692,33 +772,33 @@ rtems_nvdisk_erase_disk (rtems_nvdisk* nvd) * @param argp IOCTL argument. * @retval The IOCTL return value */ -static int -rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp) +static int rtems_nvdisk_ioctl( + rtems_disk_device *dd, + uint32_t req, + void *argp +) { - rtems_nvdisk* nvd = rtems_disk_get_driver_data (dd); - rtems_blkdev_request* r = argp; + rtems_nvdisk *nvd = rtems_disk_get_driver_data( dd ); + rtems_blkdev_request *r = argp; - if (nvd->device_count == 0) - { + if ( nvd->device_count == 0 ) { errno = ENODEV; return -1; } errno = 0; - rtems_mutex_lock (&nvd->lock); + rtems_mutex_lock( &nvd->lock ); - switch (req) - { + switch ( req ) { case RTEMS_BLKIO_REQUEST: - switch (r->req) - { + switch ( r->req ) { case RTEMS_BLKDEV_REQ_READ: - errno = rtems_nvdisk_read (nvd, r); + errno = rtems_nvdisk_read( nvd, r ); break; case RTEMS_BLKDEV_REQ_WRITE: - errno = rtems_nvdisk_write (nvd, r); + errno = rtems_nvdisk_write( nvd, r ); break; default: @@ -728,7 +808,7 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp) break; case RTEMS_NVDISK_IOCTL_ERASE_DISK: - errno = rtems_nvdisk_erase_disk (nvd); + errno = rtems_nvdisk_erase_disk( nvd ); break; case RTEMS_NVDISK_IOCTL_INFO_LEVEL: @@ -736,11 +816,11 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp) break; default: - rtems_blkdev_ioctl (dd, req, argp); + rtems_blkdev_ioctl( dd, req, argp ); break; } - rtems_mutex_unlock (&nvd->lock); + rtems_mutex_unlock( &nvd->lock ); return errno == 0 ? 0 : -1; } @@ -754,66 +834,78 @@ rtems_nvdisk_ioctl (rtems_disk_device *dd, uint32_t req, void* argp) * @param minor Minor device number, not applicable. * @param arg Initialization argument, not applicable. */ -rtems_device_driver -rtems_nvdisk_initialize (rtems_device_major_number major RTEMS_UNUSED, - rtems_device_minor_number minor RTEMS_UNUSED, - void* arg RTEMS_UNUSED) +rtems_device_driver rtems_nvdisk_initialize( + rtems_device_major_number major RTEMS_UNUSED, + rtems_device_minor_number minor RTEMS_UNUSED, + void *arg RTEMS_UNUSED +) { - const rtems_nvdisk_config* c = rtems_nvdisk_configuration; - rtems_nvdisk* nvd; + const rtems_nvdisk_config *c = rtems_nvdisk_configuration; + rtems_nvdisk *nvd; rtems_status_code sc; uint32_t i; - sc = rtems_nvdisk_crc16_gen_factors (0x8408); - if (sc != RTEMS_SUCCESSFUL) - return sc; + sc = rtems_nvdisk_crc16_gen_factors( 0x8408 ); + if ( sc != RTEMS_SUCCESSFUL ) { + return sc; + } - nvd = calloc (rtems_nvdisk_configuration_size, sizeof (*nvd)); - if (!nvd) + nvd = calloc( rtems_nvdisk_configuration_size, sizeof( *nvd ) ); + if ( !nvd ) { return RTEMS_NO_MEMORY; + } - for (i = 0; i < rtems_nvdisk_configuration_size; i++, c++, nvd++) - { + for ( i = 0; i < rtems_nvdisk_configuration_size; i++, c++, nvd++ ) { char name[] = RTEMS_NVDISK_DEVICE_BASE_NAME "a"; uint32_t device; uint32_t blocks = 0; - name [sizeof(RTEMS_NVDISK_DEVICE_BASE_NAME)] += i; + name[ sizeof( RTEMS_NVDISK_DEVICE_BASE_NAME ) ] += i; - nvd->flags = c->flags; - nvd->block_size = c->block_size; - nvd->info_level = c->info_level; + nvd->flags = c->flags; + nvd->block_size = c->block_size; + nvd->info_level = c->info_level; - nvd->devices = calloc (c->device_count, sizeof (rtems_nvdisk_device_ctl)); - if (!nvd->devices) + nvd->devices = calloc( + c->device_count, + sizeof( rtems_nvdisk_device_ctl ) + ); + if ( !nvd->devices ) { return RTEMS_NO_MEMORY; + } - for (device = 0; device < c->device_count; device++) - { - rtems_nvdisk_device_ctl* dc = &nvd->devices[device]; + for ( device = 0; device < c->device_count; device++ ) { + rtems_nvdisk_device_ctl *dc = &nvd->devices[ device ]; - dc->device = device; - dc->pages = rtems_nvdisk_pages_in_device (nvd, &c->devices[device]); - dc->pages_desc = rtems_nvdisk_page_desc_pages (nvd, &c->devices[device]); + dc->device = device; + dc->pages = rtems_nvdisk_pages_in_device( nvd, &c->devices[ device ] ); + dc->pages_desc = rtems_nvdisk_page_desc_pages( + nvd, + &c->devices[ device ] + ); dc->block_base = blocks; blocks += dc->pages - dc->pages_desc; - dc->descriptor = &c->devices[device]; + dc->descriptor = &c->devices[ device ]; } - nvd->block_count = blocks; + nvd->block_count = blocks; nvd->device_count = c->device_count; - sc = rtems_blkdev_create(name, c->block_size, blocks, - rtems_nvdisk_ioctl, nvd); - if (sc != RTEMS_SUCCESSFUL) - { - rtems_nvdisk_error ("disk create phy failed"); + sc = rtems_blkdev_create( + name, + c->block_size, + blocks, + rtems_nvdisk_ioctl, + nvd + ); + if ( sc != RTEMS_SUCCESSFUL ) { + rtems_nvdisk_error( "disk create phy failed" ); return sc; } - rtems_mutex_init (&nvd->lock, "NV Disk"); + rtems_mutex_init( &nvd->lock, "NV Disk" ); } return RTEMS_SUCCESSFUL; diff --git a/cpukit/libblock/src/ramdisk-config.c b/cpukit/libblock/src/ramdisk-config.c index 8e1b277674..c090fee23d 100644 --- a/cpukit/libblock/src/ramdisk-config.c +++ b/cpukit/libblock/src/ramdisk-config.c @@ -21,18 +21,18 @@ #include #include -rtems_device_driver -ramdisk_initialize( - rtems_device_major_number major RTEMS_UNUSED, - rtems_device_minor_number minor RTEMS_UNUSED, - void *arg RTEMS_UNUSED) +rtems_device_driver ramdisk_initialize( + rtems_device_major_number major RTEMS_UNUSED, + rtems_device_minor_number minor RTEMS_UNUSED, + void *arg RTEMS_UNUSED +) { - rtems_device_minor_number i; - rtems_ramdisk_config *c = rtems_ramdisk_configuration; - struct ramdisk *r; - rtems_status_code rc; + rtems_device_minor_number i; + rtems_ramdisk_config *c = rtems_ramdisk_configuration; + struct ramdisk *r; + rtems_status_code rc; - /* + /* * Coverity Id 27 notes that this calloc() is a resource leak. * * This is allocating memory for a RAM disk which will persist for @@ -40,44 +40,41 @@ ramdisk_initialize( * so there is no corresponding free(r). Coverity is correct that * it is never freed but this is not a problem. */ - r = calloc(rtems_ramdisk_configuration_size, sizeof(struct ramdisk)); - r->trace = false; - for (i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++) - { - char name [] = RAMDISK_DEVICE_BASE_NAME "a"; - name [sizeof(RAMDISK_DEVICE_BASE_NAME) - 1] += i; - r->block_size = c->block_size; - r->block_num = c->block_num; - if (c->location == NULL) - { - r->malloced = true; - r->area = malloc(r->block_size * r->block_num); - if (r->area == NULL) /* No enough memory for this disk */ - { - r->initialized = false; - continue; - } - else - { - r->initialized = true; - } - } - else - { - r->malloced = false; - r->initialized = true; - r->area = c->location; - } - rc = rtems_blkdev_create(name, c->block_size, c->block_num, - ramdisk_ioctl, r); - if (rc != RTEMS_SUCCESSFUL) - { - if (r->malloced) - { - free(r->area); - } - r->initialized = false; - } + r = calloc( rtems_ramdisk_configuration_size, sizeof( struct ramdisk ) ); + r->trace = false; + for ( i = 0; i < rtems_ramdisk_configuration_size; i++, c++, r++ ) { + char name[] = RAMDISK_DEVICE_BASE_NAME "a"; + name[ sizeof( RAMDISK_DEVICE_BASE_NAME ) - 1 ] += i; + r->block_size = c->block_size; + r->block_num = c->block_num; + if ( c->location == NULL ) { + r->malloced = true; + r->area = malloc( r->block_size * r->block_num ); + if ( r->area == NULL ) /* No enough memory for this disk */ + { + r->initialized = false; + continue; + } else { + r->initialized = true; + } + } else { + r->malloced = false; + r->initialized = true; + r->area = c->location; } - return RTEMS_SUCCESSFUL; + rc = rtems_blkdev_create( + name, + c->block_size, + c->block_num, + ramdisk_ioctl, + r + ); + if ( rc != RTEMS_SUCCESSFUL ) { + if ( r->malloced ) { + free( r->area ); + } + r->initialized = false; + } + } + return RTEMS_SUCCESSFUL; } diff --git a/cpukit/libblock/src/ramdisk-driver.c b/cpukit/libblock/src/ramdisk-driver.c index 881b7df2a5..a2658a73b6 100644 --- a/cpukit/libblock/src/ramdisk-driver.c +++ b/cpukit/libblock/src/ramdisk-driver.c @@ -16,7 +16,7 @@ #endif /* FIXME: How to set this define? */ -#if !defined(RTEMS_RAMDISK_TRACE) +#if !defined( RTEMS_RAMDISK_TRACE ) #define RTEMS_RAMDISK_TRACE 0 #endif @@ -32,106 +32,116 @@ #include #if RTEMS_RAMDISK_TRACE - static void - rtems_ramdisk_printf (const ramdisk *rd, const char *format, ...) - { - if (rd->trace) - { - va_list args; - va_start (args, format); - printf ("ramdisk:"); - vprintf (format, args); - printf ("\n"); - } - } -#endif - -static int -ramdisk_read(struct ramdisk *rd, rtems_blkdev_request *req) +static void rtems_ramdisk_printf( const ramdisk *rd, const char *format, ... ) { - uint8_t *from = rd->area; - uint32_t i; - rtems_blkdev_sg_buffer *sg; - -#if RTEMS_RAMDISK_TRACE - rtems_ramdisk_printf (rd, "ramdisk read: start=%d, blocks=%d", - req->bufs[0].block, req->bufnum); + if ( rd->trace ) { + va_list args; + va_start( args, format ); + printf( "ramdisk:" ); + vprintf( format, args ); + printf( "\n" ); + } +} #endif - for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++) - { +static int ramdisk_read( struct ramdisk *rd, rtems_blkdev_request *req ) +{ + uint8_t *from = rd->area; + uint32_t i; + rtems_blkdev_sg_buffer *sg; + #if RTEMS_RAMDISK_TRACE - rtems_ramdisk_printf (rd, "ramdisk read: buf=%d block=%d length=%d off=%d addr=%p", - i, sg->block, sg->length, sg->block * rd->block_size, - from + (sg->block * rd->block_size)); + rtems_ramdisk_printf( + rd, + "ramdisk read: start=%d, blocks=%d", + req->bufs[ 0 ].block, + req->bufnum + ); #endif - memcpy(sg->buffer, from + (sg->block * rd->block_size), sg->length); - } - rtems_blkdev_request_done (req, RTEMS_SUCCESSFUL); - return 0; + + for ( i = 0, sg = req->bufs; i < req->bufnum; i++, sg++ ) { +#if RTEMS_RAMDISK_TRACE + rtems_ramdisk_printf( + rd, + "ramdisk read: buf=%d block=%d length=%d off=%d addr=%p", + i, + sg->block, + sg->length, + sg->block * rd->block_size, + from + ( sg->block * rd->block_size ) + ); +#endif + memcpy( sg->buffer, from + ( sg->block * rd->block_size ), sg->length ); + } + rtems_blkdev_request_done( req, RTEMS_SUCCESSFUL ); + return 0; } -static int -ramdisk_write(struct ramdisk *rd, rtems_blkdev_request *req) +static int ramdisk_write( struct ramdisk *rd, rtems_blkdev_request *req ) { - uint8_t *to = rd->area; - uint32_t i; - rtems_blkdev_sg_buffer *sg; + uint8_t *to = rd->area; + uint32_t i; + rtems_blkdev_sg_buffer *sg; #if RTEMS_RAMDISK_TRACE - rtems_ramdisk_printf (rd, "ramdisk write: start=%d, blocks=%d", - req->bufs[0].block, req->bufnum); + rtems_ramdisk_printf( + rd, + "ramdisk write: start=%d, blocks=%d", + req->bufs[ 0 ].block, + req->bufnum + ); #endif - for (i = 0, sg = req->bufs; i < req->bufnum; i++, sg++) - { + for ( i = 0, sg = req->bufs; i < req->bufnum; i++, sg++ ) { #if RTEMS_RAMDISK_TRACE - rtems_ramdisk_printf (rd, "ramdisk write: buf=%d block=%d length=%d off=%d addr=%p", - i, sg->block, sg->length, sg->block * rd->block_size, - to + (sg->block * rd->block_size)); + rtems_ramdisk_printf( + rd, + "ramdisk write: buf=%d block=%d length=%d off=%d addr=%p", + i, + sg->block, + sg->length, + sg->block * rd->block_size, + to + ( sg->block * rd->block_size ) + ); #endif - memcpy(to + (sg->block * rd->block_size), sg->buffer, sg->length); - } - rtems_blkdev_request_done (req, RTEMS_SUCCESSFUL); - return 0; + memcpy( to + ( sg->block * rd->block_size ), sg->buffer, sg->length ); + } + rtems_blkdev_request_done( req, RTEMS_SUCCESSFUL ); + return 0; } -int -ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp) +int ramdisk_ioctl( rtems_disk_device *dd, uint32_t req, void *argp ) { - struct ramdisk *rd = rtems_disk_get_driver_data(dd); + struct ramdisk *rd = rtems_disk_get_driver_data( dd ); - switch (req) - { - case RTEMS_BLKIO_REQUEST: - { - rtems_blkdev_request *r = argp; + switch ( req ) { + case RTEMS_BLKIO_REQUEST: { + rtems_blkdev_request *r = argp; - switch (r->req) - { - case RTEMS_BLKDEV_REQ_READ: - return ramdisk_read(rd, r); + switch ( r->req ) { + case RTEMS_BLKDEV_REQ_READ: + return ramdisk_read( rd, r ); - case RTEMS_BLKDEV_REQ_WRITE: - return ramdisk_write(rd, r); - - default: - errno = EINVAL; - return -1; - } - break; - } - - case RTEMS_BLKIO_DELETED: - if (rd->free_at_delete_request) { - ramdisk_free(rd); - } - break; + case RTEMS_BLKDEV_REQ_WRITE: + return ramdisk_write( rd, r ); default: - return rtems_blkdev_ioctl (dd, req, argp); - break; + errno = EINVAL; + return -1; + } + break; } - errno = EINVAL; - return -1; + case RTEMS_BLKIO_DELETED: + if ( rd->free_at_delete_request ) { + ramdisk_free( rd ); + } + break; + + default: + return rtems_blkdev_ioctl( dd, req, argp ); + break; + } + + errno = EINVAL; + return -1; } diff --git a/cpukit/libblock/src/ramdisk-init.c b/cpukit/libblock/src/ramdisk-init.c index e9b73cada2..28f1d43c4a 100644 --- a/cpukit/libblock/src/ramdisk-init.c +++ b/cpukit/libblock/src/ramdisk-init.c @@ -43,22 +43,22 @@ #include ramdisk *ramdisk_allocate( - void *area_begin, - uint32_t media_block_size, + void *area_begin, + uint32_t media_block_size, rtems_blkdev_bnum media_block_count, - bool trace + bool trace ) { - struct ramdisk *rd = calloc(1, sizeof(*rd)); + struct ramdisk *rd = calloc( 1, sizeof( *rd ) ); - if (rd == NULL) { + if ( rd == NULL ) { return NULL; } - if (area_begin == NULL) { - area_begin = calloc(media_block_count, media_block_size); - if (area_begin == NULL) { - free(rd); + if ( area_begin == NULL ) { + area_begin = calloc( media_block_count, media_block_size ); + if ( area_begin == NULL ) { + free( rd ); return NULL; } @@ -75,12 +75,12 @@ ramdisk *ramdisk_allocate( return rd; } -void ramdisk_free(ramdisk *rd) +void ramdisk_free( ramdisk *rd ) { - if (rd != NULL) { - if (rd->malloced) { - free(rd->area); + if ( rd != NULL ) { + if ( rd->malloced ) { + free( rd->area ); } - free(rd); + free( rd ); } } diff --git a/cpukit/libblock/src/ramdisk-register.c b/cpukit/libblock/src/ramdisk-register.c index dd513c6514..e3236507b2 100644 --- a/cpukit/libblock/src/ramdisk-register.c +++ b/cpukit/libblock/src/ramdisk-register.c @@ -40,17 +40,17 @@ #include rtems_status_code ramdisk_register( - uint32_t media_block_size, + uint32_t media_block_size, rtems_blkdev_bnum media_block_count, - bool trace, - const char *disk + bool trace, + const char *disk ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - ramdisk *rd = NULL; + ramdisk *rd = NULL; - rd = ramdisk_allocate(NULL, media_block_size, media_block_count, trace); - if (rd == NULL) { + rd = ramdisk_allocate( NULL, media_block_size, media_block_count, trace ); + if ( rd == NULL ) { return RTEMS_UNSATISFIED; } @@ -61,8 +61,8 @@ rtems_status_code ramdisk_register( ramdisk_ioctl, rd ); - if (sc != RTEMS_SUCCESSFUL) { - ramdisk_free(rd); + if ( sc != RTEMS_SUCCESSFUL ) { + ramdisk_free( rd ); return RTEMS_UNSATISFIED; } diff --git a/cpukit/libblock/src/show_bdbuf.c b/cpukit/libblock/src/show_bdbuf.c index c7a10d77e5..2c92422014 100644 --- a/cpukit/libblock/src/show_bdbuf.c +++ b/cpukit/libblock/src/show_bdbuf.c @@ -53,11 +53,11 @@ #include typedef struct { - bool bdbuf_modified; - bool bdbuf_in_progress; - bool bdbuf_actual; - bool bdbuf_used; - bool bdbuf_all; + bool bdbuf_modified; + bool bdbuf_in_progress; + bool bdbuf_actual; + bool bdbuf_used; + bool bdbuf_all; rtems_bdpool_id pool_id; } show_bdbuf_filter_t; @@ -73,52 +73,53 @@ typedef struct { bool show_sema; } show_bdbuf_selector_t; -typedef enum {bdbuf_chain_ident_none, - bdbuf_chain_ident_free, - bdbuf_chain_ident_lru, - bdbuf_chain_ident_mod} bdbuf_chain_identifier_t; +typedef enum { + bdbuf_chain_ident_none, + bdbuf_chain_ident_free, + bdbuf_chain_ident_lru, + bdbuf_chain_ident_mod +} bdbuf_chain_identifier_t; typedef struct { - rtems_bdpool_id pool_id; - int index; - bdbuf_chain_identifier_t in_chain; - dev_t dev; - blkdev_bnum blknum; - rtems_status_code status; - int error; - bool modified; - bool in_progress; - bool actual; - int use_count; + rtems_bdpool_id pool_id; + int index; + bdbuf_chain_identifier_t in_chain; + dev_t dev; + blkdev_bnum blknum; + rtems_status_code status; + int error; + bool modified; + bool in_progress; + bool actual; + int use_count; const CORE_mutex_Control *sema; } show_bdbuf_bdbuf_info_t; typedef rtems_mode preemption_key_t; -#define DISABLE_PREEMPTION(key) \ - do { \ - rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &(key)); \ - } while (0) +#define DISABLE_PREEMPTION( key ) \ + do { \ + rtems_task_mode( RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &( key ) ); \ + } while ( 0 ) -#define ENABLE_PREEMPTION(key) \ - do { \ - rtems_mode temp; \ - rtems_task_mode((key), RTEMS_PREEMPT_MASK, &temp); \ - } while (0) +#define ENABLE_PREEMPTION( key ) \ + do { \ + rtems_mode temp; \ + rtems_task_mode( ( key ), RTEMS_PREEMPT_MASK, &temp ); \ + } while ( 0 ) /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -rtems_status_code rtems_bdbuf_show_follow_chain_node_to_head -( -/*-------------------------------------------------------------------------*\ +rtems_status_code rtems_bdbuf_show_follow_chain_node_to_head( + /*-------------------------------------------------------------------------*\ | Purpose: | | follow a given chain to its head | | XXX: this is executed with preemption disabled | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - const Chain_Node *the_node, /* input: node to track to its head */ - Chain_Control **the_head /* storage for pointer to chain head */ + const Chain_Node *the_node, /* input: node to track to its head */ + Chain_Control **the_head /* storage for pointer to chain head */ ) /*-------------------------------------------------------------------------*\ | Return Value: | @@ -126,34 +127,34 @@ rtems_status_code rtems_bdbuf_show_follow_chain_node_to_head \*=========================================================================*/ { rtems_status_code rc = RTEMS_SUCCESSFUL; - preemption_key_t preempt_key; - bool preempt_disabled = false; + preemption_key_t preempt_key; + bool preempt_disabled = false; /* * disable preemption */ - if (rc == RTEMS_SUCCESSFUL) { - DISABLE_PREEMPTION(preempt_key); + if ( rc == RTEMS_SUCCESSFUL ) { + DISABLE_PREEMPTION( preempt_key ); } /* * follow node to its head * XXX: this is highly dependent on the chain implementation * in score/src/chain.c and friends */ - while (the_node->previous != NULL) { + while ( the_node->previous != NULL ) { the_node = the_node->previous; } /* * reenable preemption, if disabled */ - if (preempt_disabled) { - ENABLE_PREEMPTION(preempt_key); + if ( preempt_disabled ) { + ENABLE_PREEMPTION( preempt_key ); } /* * XXX: this depends n the chain implementation in * score/include/rtems/score/chain.h: * Chain_Control is overlayed by two Cohain_Nodes */ - *the_head = (Chain_Control *)the_node; + *the_head = (Chain_Control *) the_node; return rc; } @@ -161,17 +162,16 @@ rtems_status_code rtems_bdbuf_show_follow_chain_node_to_head /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -rtems_status_code rtems_bdbuf_show_determine_chain_of_bdbuf -( -/*-------------------------------------------------------------------------*\ +rtems_status_code rtems_bdbuf_show_determine_chain_of_bdbuf( + /*-------------------------------------------------------------------------*\ | Purpose: | | find out, which chain this bdbuf is linked in | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - const bdbuf_buffer *the_bdbuf, /* this is the bdbuf structure */ - const bdbuf_pool *curr_pool, /* the pool this buffer belongs to */ - bdbuf_chain_identifier_t *chn_ident /* result: identifier for chain */ + const bdbuf_buffer *the_bdbuf, /* this is the bdbuf structure */ + const bdbuf_pool *curr_pool, /* the pool this buffer belongs to */ + bdbuf_chain_identifier_t *chn_ident /* result: identifier for chain */ ) /*-------------------------------------------------------------------------*\ | Return Value: | @@ -179,22 +179,21 @@ rtems_status_code rtems_bdbuf_show_determine_chain_of_bdbuf \*=========================================================================*/ { rtems_status_code rc = RTEMS_SUCCESSFUL; - Chain_Control *the_chain_control; - + Chain_Control *the_chain_control; *chn_ident = bdbuf_chain_ident_none; - if (rc == RTEMS_SUCCESSFUL) { - rc = rtems_bdbuf_show_follow_chain_node_to_head(&(the_bdbuf->link), - &(the_chain_control)); + if ( rc == RTEMS_SUCCESSFUL ) { + rc = rtems_bdbuf_show_follow_chain_node_to_head( + &( the_bdbuf->link ), + &( the_chain_control ) + ); } - if (rc == RTEMS_SUCCESSFUL) { - if (the_chain_control == &(curr_pool->free)) { + if ( rc == RTEMS_SUCCESSFUL ) { + if ( the_chain_control == &( curr_pool->free ) ) { *chn_ident = bdbuf_chain_ident_free; - } - else if (the_chain_control == &(curr_pool->lru)) { + } else if ( the_chain_control == &( curr_pool->lru ) ) { *chn_ident = bdbuf_chain_ident_lru; - } - else if (the_chain_control == &(rtems_bdbuf_ctx.mod)) { + } else if ( the_chain_control == &( rtems_bdbuf_ctx.mod ) ) { *chn_ident = bdbuf_chain_ident_mod; } } @@ -204,18 +203,17 @@ rtems_status_code rtems_bdbuf_show_determine_chain_of_bdbuf /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -rtems_status_code rtems_bdbuf_show_getargs -( -/*-------------------------------------------------------------------------*\ +rtems_status_code rtems_bdbuf_show_getargs( + /*-------------------------------------------------------------------------*\ | Purpose: | | analyze cmd arguments | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - int argc, - char **argv, - show_bdbuf_filter_t *filter, - show_bdbuf_selector_t *selector + int argc, + char **argv, + show_bdbuf_filter_t *filter, + show_bdbuf_selector_t *selector ) /*-------------------------------------------------------------------------*\ | Return Value: | @@ -223,107 +221,104 @@ rtems_status_code rtems_bdbuf_show_getargs \*=========================================================================*/ { rtems_status_code sc = RTEMS_SUCCESSFUL; - int arg_error = 0; - int i; - char *tmp_ptr; - int nm_argc = 0; + int arg_error = 0; + int i; + char *tmp_ptr; + int nm_argc = 0; /* * set filter and selector to default */ - memset(filter,0,sizeof(*filter)); - filter->bdbuf_all = true; - memset(selector,0,sizeof(*selector)); + memset( filter, 0, sizeof( *filter ) ); + filter->bdbuf_all = true; + memset( selector, 0, sizeof( *selector ) ); selector->show_all = true; /* * scan arguments */ - for (i = 1; - (i < argc) && (arg_error == 0); - i++) { - if (argv[i][0] == '-') { + for ( i = 1; ( i < argc ) && ( arg_error == 0 ); i++ ) { + if ( argv[ i ][ 0 ] == '-' ) { /* * modifier arguments */ - switch(tolower(argv[i][1])) { - /* + switch ( tolower( argv[ i ][ 1 ] ) ) { + /* * selection, which bdbufs to show */ - case 'm': /* only show bdbufs modified */ - filter->bdbuf_modified = true ; - filter->bdbuf_all = false; - break; - case 'i': /* only show bdbufs in progress*/ - filter->bdbuf_in_progress = true ; - filter->bdbuf_all = false; - break; - case 'v': /* only show bdbufs, which have valid data*/ - filter->bdbuf_actual = true ; - filter->bdbuf_all = false; - break; - case 'u': /* only show bdbufs, which are in use */ - filter->bdbuf_used = true ; - filter->bdbuf_all = false; - break; - case 'p': /* only show bdbufs, which belong to pool */ - filter->pool_id = strtol(argv[i]+2,&tmp_ptr,0); - if (tmp_ptr == argv[i]+2) { /* no conversion performed... */ - arg_error = i; - } - filter->bdbuf_all = false; - break; - /* + case 'm': /* only show bdbufs modified */ + filter->bdbuf_modified = true; + filter->bdbuf_all = false; + break; + case 'i': /* only show bdbufs in progress*/ + filter->bdbuf_in_progress = true; + filter->bdbuf_all = false; + break; + case 'v': /* only show bdbufs, which have valid data*/ + filter->bdbuf_actual = true; + filter->bdbuf_all = false; + break; + case 'u': /* only show bdbufs, which are in use */ + filter->bdbuf_used = true; + filter->bdbuf_all = false; + break; + case 'p': /* only show bdbufs, which belong to pool */ + filter->pool_id = strtol( argv[ i ] + 2, &tmp_ptr, 0 ); + if ( tmp_ptr == argv[ i ] + 2 ) { /* no conversion performed... */ + arg_error = i; + } + filter->bdbuf_all = false; + break; + /* * selection, what fields to show */ - case 'n': /* show bdbuf node_chain */ - selector->show_node_chain = true ; - selector->show_all = false; - break; - case 'd': /* show device */ - selector->show_dev = true ; - selector->show_all = false; - break; - case 'b': /* show blocknum */ - selector->show_blocknum = true ; - selector->show_all = false; - break; - case 'e': /* show bdbuf error status */ - selector->show_error = true ; - selector->show_all = false; - break; - case 's': /* show bdbuf state */ - selector->show_state = true ; - selector->show_all = false; - break; - case 'c': /* show bdbuf use count */ - selector->show_use_count = true ; - selector->show_all = false; - break; - case 'l': /* show bdbuf pool id */ - selector->show_pool_id = true ; - selector->show_all = false; - break; - case 't': /* show bdbuf transfer sema */ - selector->show_sema = true ; - break; - default: - arg_error = i; - break; + case 'n': /* show bdbuf node_chain */ + selector->show_node_chain = true; + selector->show_all = false; + break; + case 'd': /* show device */ + selector->show_dev = true; + selector->show_all = false; + break; + case 'b': /* show blocknum */ + selector->show_blocknum = true; + selector->show_all = false; + break; + case 'e': /* show bdbuf error status */ + selector->show_error = true; + selector->show_all = false; + break; + case 's': /* show bdbuf state */ + selector->show_state = true; + selector->show_all = false; + break; + case 'c': /* show bdbuf use count */ + selector->show_use_count = true; + selector->show_all = false; + break; + case 'l': /* show bdbuf pool id */ + selector->show_pool_id = true; + selector->show_all = false; + break; + case 't': /* show bdbuf transfer sema */ + selector->show_sema = true; + break; + default: + arg_error = i; + break; } - } - else { + } else { /* * non-modifier arguments */ - switch(++nm_argc) { - default: /* no further arguments defined */ - arg_error = i; - break; + switch ( ++nm_argc ) { + default: /* no further arguments defined */ + arg_error = i; + break; } } } - if (arg_error) { - printf("%s: unknown argument %s\n",argv[0],argv[arg_error]); + if ( arg_error ) { + printf( "%s: unknown argument %s\n", argv[ 0 ], argv[ arg_error ] ); sc = RTEMS_NOT_DEFINED; } return sc; @@ -332,17 +327,16 @@ rtems_status_code rtems_bdbuf_show_getargs /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -rtems_status_code rtems_bdbuf_show_get_bufpool -( -/*-------------------------------------------------------------------------*\ +rtems_status_code rtems_bdbuf_show_get_bufpool( + /*-------------------------------------------------------------------------*\ | Purpose: | | get buffer pool information | | XXX: this should be coupled closer to the bdbuf.c module | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - struct bdbuf_pool **pool_base_pptr, - int *pool_cnt_ptr + struct bdbuf_pool **pool_base_pptr, + int *pool_cnt_ptr ) /*-------------------------------------------------------------------------*\ | Return Value: | @@ -392,9 +386,9 @@ rtems_status_code rtems_bdbuf_show_get_bufpool *pool_cnt_ptr = pool_cnt; } #else - if (rc == RTEMS_SUCCESSFUL) { + if ( rc == RTEMS_SUCCESSFUL ) { *pool_base_pptr = rtems_bdbuf_ctx.pool; - *pool_cnt_ptr = rtems_bdbuf_ctx.npools; + *pool_cnt_ptr = rtems_bdbuf_ctx.npools; } #endif return rc; @@ -403,34 +397,39 @@ rtems_status_code rtems_bdbuf_show_get_bufpool /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -rtems_status_code rtems_bdbuf_show_pool_header -( -/*-------------------------------------------------------------------------*\ +rtems_status_code rtems_bdbuf_show_pool_header( + /*-------------------------------------------------------------------------*\ | Purpose: | | print buffer pool information | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - int pool_idx, - bdbuf_pool *pool_ptr + int pool_idx, + bdbuf_pool *pool_ptr ) /*-------------------------------------------------------------------------*\ | Return Value: | | rtems_status_code | \*=========================================================================*/ { - rtems_status_code rc = RTEMS_SUCCESSFUL; - if (rc == RTEMS_SUCCESSFUL) { - printf("------------------------------------------------------------------------------\n"); - printf(" pool #%03d: blksize=%5u nblks=%5u buf_mem=0x%08" PRIxPTR " bdbuf_mem=0x%08" PRIxPTR "\n", - pool_idx, - pool_ptr->blksize, - pool_ptr->nblks, - (intptr_t) pool_ptr->mallocd_bufs, - (intptr_t) pool_ptr->bdbufs); - printf("------------------------------------------------------------------------------\n"); + if ( rc == RTEMS_SUCCESSFUL ) { + printf( + "------------------------------------------------------------------------------\n" + ); + printf( + " pool #%03d: blksize=%5u nblks=%5u buf_mem=0x%08" PRIxPTR + " bdbuf_mem=0x%08" PRIxPTR "\n", + pool_idx, + pool_ptr->blksize, + pool_ptr->nblks, + (intptr_t) pool_ptr->mallocd_bufs, + (intptr_t) pool_ptr->bdbufs + ); + printf( + "------------------------------------------------------------------------------\n" + ); } return rc; } @@ -438,52 +437,53 @@ rtems_status_code rtems_bdbuf_show_pool_header /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -rtems_status_code rtems_show_bdbuf_get_bdbuf_info -( -/*-------------------------------------------------------------------------*\ +rtems_status_code rtems_show_bdbuf_get_bdbuf_info( + /*-------------------------------------------------------------------------*\ | Purpose: | | get buffer pool information | | XXX: this should be coupled closer to the bdbuf.c module | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - const bdbuf_buffer *the_bdbuf, /* this is the bdbuf structure */ - int bdbuf_idx, /* index of bdbuf */ - const bdbuf_pool *curr_pool, /* the pool this buffer belongs to */ - show_bdbuf_bdbuf_info_t *bdbuf_info /* struct to store info of bdbuf */ + const bdbuf_buffer *the_bdbuf, /* this is the bdbuf structure */ + int bdbuf_idx, /* index of bdbuf */ + const bdbuf_pool *curr_pool, /* the pool this buffer belongs to */ + show_bdbuf_bdbuf_info_t *bdbuf_info /* struct to store info of bdbuf */ ) /*-------------------------------------------------------------------------*\ | Return Value: | | rtems_status_code | \*=========================================================================*/ { - rtems_status_code rc = RTEMS_SUCCESSFUL; /* * determine the chain we are in */ - if (rc == RTEMS_SUCCESSFUL) { - rc = rtems_bdbuf_show_determine_chain_of_bdbuf(the_bdbuf,curr_pool, - &(bdbuf_info->in_chain)); - if (rc != RTEMS_SUCCESSFUL) { + if ( rc == RTEMS_SUCCESSFUL ) { + rc = rtems_bdbuf_show_determine_chain_of_bdbuf( + the_bdbuf, + curr_pool, + &( bdbuf_info->in_chain ) + ); + if ( rc != RTEMS_SUCCESSFUL ) { bdbuf_info->in_chain = bdbuf_chain_ident_none; rc = RTEMS_SUCCESSFUL; } } - if (rc == RTEMS_SUCCESSFUL) { - bdbuf_info->index = bdbuf_idx; - bdbuf_info->dev = the_bdbuf->dev; - bdbuf_info->blknum = the_bdbuf->block; - bdbuf_info->status = the_bdbuf->status; - bdbuf_info->error = the_bdbuf->error; - bdbuf_info->modified = the_bdbuf->modified; + if ( rc == RTEMS_SUCCESSFUL ) { + bdbuf_info->index = bdbuf_idx; + bdbuf_info->dev = the_bdbuf->dev; + bdbuf_info->blknum = the_bdbuf->block; + bdbuf_info->status = the_bdbuf->status; + bdbuf_info->error = the_bdbuf->error; + bdbuf_info->modified = the_bdbuf->modified; bdbuf_info->in_progress = the_bdbuf->in_progress; - bdbuf_info->actual = the_bdbuf->actual; - bdbuf_info->use_count = the_bdbuf->use_count; - bdbuf_info->sema = &(the_bdbuf->transfer_sema); - bdbuf_info->pool_id = the_bdbuf->pool; + bdbuf_info->actual = the_bdbuf->actual; + bdbuf_info->use_count = the_bdbuf->use_count; + bdbuf_info->sema = &( the_bdbuf->transfer_sema ); + bdbuf_info->pool_id = the_bdbuf->pool; } return rc; } @@ -491,37 +491,35 @@ rtems_status_code rtems_show_bdbuf_get_bdbuf_info /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -rtems_status_code rtems_show_bdbuf_match_filter -( -/*-------------------------------------------------------------------------*\ +rtems_status_code rtems_show_bdbuf_match_filter( + /*-------------------------------------------------------------------------*\ | Purpose: | | match bdbuf info with given filter | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - const show_bdbuf_bdbuf_info_t *bdbuf_info, /* struct to store info of bdbuf */ - const show_bdbuf_filter_t *filter, - bool *is_match + const show_bdbuf_bdbuf_info_t + *bdbuf_info, /* struct to store info of bdbuf */ + const show_bdbuf_filter_t *filter, + bool *is_match ) /*-------------------------------------------------------------------------*\ | Return Value: | | rtems_status_code | \*=========================================================================*/ { - rtems_status_code rc = RTEMS_SUCCESSFUL; - bool unmatch = false; + bool unmatch = false; - if (rc == RTEMS_SUCCESSFUL) { - if (filter->bdbuf_all) { + if ( rc == RTEMS_SUCCESSFUL ) { + if ( filter->bdbuf_all ) { unmatch = false; - } - else { - unmatch = ((filter->bdbuf_modified && !bdbuf_info->modified) || - (filter->bdbuf_in_progress && !bdbuf_info->in_progress) || - (filter->bdbuf_actual && !bdbuf_info->actual) || - (filter->bdbuf_used && !(bdbuf_info->use_count > 0))); - + } else { + unmatch = + ( ( filter->bdbuf_modified && !bdbuf_info->modified ) || + ( filter->bdbuf_in_progress && !bdbuf_info->in_progress ) || + ( filter->bdbuf_actual && !bdbuf_info->actual ) || + ( filter->bdbuf_used && !( bdbuf_info->use_count > 0 ) ) ); } *is_match = !unmatch; } @@ -531,54 +529,58 @@ rtems_status_code rtems_show_bdbuf_match_filter /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -rtems_status_code rtems_show_bdbuf_print_wait_chain -( -/*-------------------------------------------------------------------------*\ +rtems_status_code rtems_show_bdbuf_print_wait_chain( + /*-------------------------------------------------------------------------*\ | Purpose: | | list tasks waiting in "transfer_sema" chain | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - bdbuf_buffer *the_bdbuf /* this is the bdbuf structure */ + bdbuf_buffer *the_bdbuf /* this is the bdbuf structure */ ) /*-------------------------------------------------------------------------*\ | Return Value: | | rtems_status_code | \*=========================================================================*/ { - rtems_status_code rc = RTEMS_SUCCESSFUL; - Chain_Control *the_chain_head; - const Chain_Node *the_chain_node; - int thread_cnt = 0; + rtems_status_code rc = RTEMS_SUCCESSFUL; + Chain_Control *the_chain_head; + const Chain_Node *the_chain_node; + int thread_cnt = 0; const Thread_Control *the_thread; - Objects_Id thread_id; - Objects_Name thread_name; - uint32_t thread_name_nonstring; + Objects_Id thread_id; + Objects_Name thread_name; + uint32_t thread_name_nonstring; /* * get head of (fifo) wait chain */ - if (rc == RTEMS_SUCCESSFUL) { - the_chain_head = &(the_bdbuf->transfer_sema.Wait_queue.Queues.Fifo); - the_chain_node = _Chain_First(the_chain_head); + if ( rc == RTEMS_SUCCESSFUL ) { + the_chain_head = &( the_bdbuf->transfer_sema.Wait_queue.Queues.Fifo ); + the_chain_node = _Chain_First( the_chain_head ); } /* * walk through thread chain */ - while ((rc == RTEMS_SUCCESSFUL) && - (the_chain_node != _Chain_Tail( the_chain_head ))) { + while ( + ( rc == RTEMS_SUCCESSFUL ) && + ( the_chain_node != _Chain_Tail( the_chain_head ) ) + ) { thread_cnt++; - the_thread = (const Thread_Control *)the_chain_node; + the_thread = (const Thread_Control *) the_chain_node; - thread_id = the_thread->Object.id; + thread_id = the_thread->Object.id; thread_name = the_thread->Object.name; - thread_name_nonstring = (uint32_t)thread_name.name_u32; - printf("%20s %3d (0x%08" PRIx32 ") %c%c%c%c\n", - ((thread_cnt == 1) ? "Threads waiting:" : ""), - thread_cnt,thread_id, - (char)((thread_name_nonstring >> 24) & 0xff), - (char)((thread_name_nonstring >> 16) & 0xff), - (char)((thread_name_nonstring >> 8) & 0xff), - (char)((thread_name_nonstring >> 0) & 0xff)); + thread_name_nonstring = (uint32_t) thread_name.name_u32; + printf( + "%20s %3d (0x%08" PRIx32 ") %c%c%c%c\n", + ( ( thread_cnt == 1 ) ? "Threads waiting:" : "" ), + thread_cnt, + thread_id, + (char) ( ( thread_name_nonstring >> 24 ) & 0xff ), + (char) ( ( thread_name_nonstring >> 16 ) & 0xff ), + (char) ( ( thread_name_nonstring >> 8 ) & 0xff ), + (char) ( ( thread_name_nonstring >> 0 ) & 0xff ) + ); the_chain_node = the_chain_node->next; } @@ -589,311 +591,316 @@ rtems_status_code rtems_show_bdbuf_print_wait_chain /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -rtems_status_code rtems_show_bdbuf_print -( -/*-------------------------------------------------------------------------*\ +rtems_status_code rtems_show_bdbuf_print( + /*-------------------------------------------------------------------------*\ | Purpose: | | print requested bdbuffer information | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - const show_bdbuf_bdbuf_info_t *bdbuf_info, /* info of bdbuf */ - show_bdbuf_selector_t * selector, /* selector, what to show */ - bool print_header /* true: print header, not info */ + const show_bdbuf_bdbuf_info_t *bdbuf_info, /* info of bdbuf */ + show_bdbuf_selector_t *selector, /* selector, what to show */ + bool print_header /* true: print header, not info */ ) /*-------------------------------------------------------------------------*\ | Return Value: | | rtems_status_code | \*=========================================================================*/ { - rtems_status_code rc = RTEMS_SUCCESSFUL; /* * 6 chars: print index of buffer */ - if (rc == RTEMS_SUCCESSFUL) { - if (print_header) { - printf("INDEX "); - } - else { - printf("%5u ",bdbuf_info->index); + if ( rc == RTEMS_SUCCESSFUL ) { + if ( print_header ) { + printf( "INDEX " ); + } else { + printf( "%5u ", bdbuf_info->index ); } } /* * 3 chars: print info about the pool id of this buffer */ - if ((rc == RTEMS_SUCCESSFUL) && - ((selector->show_all) || - (selector->show_use_count))) { - if (print_header) { - printf("PL "); - } - else { - printf("%2u ",bdbuf_info->pool_id); + if ( + ( rc == RTEMS_SUCCESSFUL ) && + ( ( selector->show_all ) || ( selector->show_use_count ) ) + ) { + if ( print_header ) { + printf( "PL " ); + } else { + printf( "%2u ", bdbuf_info->pool_id ); } } /* * 4 chars: print info about chain (lru/free/mod) of this buffer */ - if ((rc == RTEMS_SUCCESSFUL) && - ((selector->show_all) || - (selector->show_node_chain))) { - if (print_header) { - printf("CHN "); - } - else { - printf("%3s ", - ((bdbuf_info->in_chain == bdbuf_chain_ident_free) ? "FRE" - : (bdbuf_info->in_chain == bdbuf_chain_ident_lru) ? "LRU" - : (bdbuf_info->in_chain == bdbuf_chain_ident_mod) ? "MOD" - : "???")); + if ( + ( rc == RTEMS_SUCCESSFUL ) && + ( ( selector->show_all ) || ( selector->show_node_chain ) ) + ) { + if ( print_header ) { + printf( "CHN " ); + } else { + printf( + "%3s ", + ( ( bdbuf_info->in_chain == bdbuf_chain_ident_free ) ? "FRE" + : ( bdbuf_info->in_chain == bdbuf_chain_ident_lru ) ? "LRU" + : ( bdbuf_info->in_chain == bdbuf_chain_ident_mod ) ? "MOD" + : "???" ) + ); } } /* * 7 chars: print info about device of this buffer */ - if ((rc == RTEMS_SUCCESSFUL) && - ((selector->show_all) || - (selector->show_dev))) { - if (print_header) { - printf("DEVICE "); - } - else { - printf("%3" PRIu32 "%2" PRIu32, - ((bdbuf_info->dev == -1) - ? 0 : rtems_filesystem_dev_major_t(bdbuf_info->dev)), - ((bdbuf_info->dev == -1) - ? 0 : rtems_filesystem_dev_minor_t(bdbuf_info->dev))); + if ( + ( rc == RTEMS_SUCCESSFUL ) && + ( ( selector->show_all ) || ( selector->show_dev ) ) + ) { + if ( print_header ) { + printf( "DEVICE " ); + } else { + printf( + "%3" PRIu32 "%2" PRIu32, + ( ( bdbuf_info->dev == -1 ) + ? 0 + : rtems_filesystem_dev_major_t( bdbuf_info->dev ) ), + ( ( bdbuf_info->dev == -1 ) + ? 0 + : rtems_filesystem_dev_minor_t( bdbuf_info->dev ) ) + ); } } /* * 7 chars: print info about block number of this buffer */ - if ((rc == RTEMS_SUCCESSFUL) && - ((selector->show_all) || - (selector->show_blocknum))) { - if (print_header) { - printf("BLOCK "); - } - else { - printf("%6" PRIu32,bdbuf_info->blknum); + if ( + ( rc == RTEMS_SUCCESSFUL ) && + ( ( selector->show_all ) || ( selector->show_blocknum ) ) + ) { + if ( print_header ) { + printf( "BLOCK " ); + } else { + printf( "%6" PRIu32, bdbuf_info->blknum ); } } /* * 4 chars: print info about use count of this buffer */ - if ((rc == RTEMS_SUCCESSFUL) && - ((selector->show_all) || - (selector->show_use_count))) { - if (print_header) { - printf("USE "); - } - else { - printf("%3u ",bdbuf_info->use_count); + if ( + ( rc == RTEMS_SUCCESSFUL ) && + ( ( selector->show_all ) || ( selector->show_use_count ) ) + ) { + if ( print_header ) { + printf( "USE " ); + } else { + printf( "%3u ", bdbuf_info->use_count ); } } /* * 4 chars: print info about state of this buffer */ - if ((rc == RTEMS_SUCCESSFUL) && - ((selector->show_all) || - (selector->show_state))) { - if (print_header) { - printf("STA "); - } - else { - printf("%c%c%c ", - (bdbuf_info->modified ? 'M' : '.'), - (bdbuf_info->in_progress ? 'P' : '.'), - (bdbuf_info->actual ? 'A' : '.')); + if ( + ( rc == RTEMS_SUCCESSFUL ) && + ( ( selector->show_all ) || ( selector->show_state ) ) + ) { + if ( print_header ) { + printf( "STA " ); + } else { + printf( + "%c%c%c ", + ( bdbuf_info->modified ? 'M' : '.' ), + ( bdbuf_info->in_progress ? 'P' : '.' ), + ( bdbuf_info->actual ? 'A' : '.' ) + ); } } /* * 42 chars: print info about error of this buffer */ - if ((rc == RTEMS_SUCCESSFUL) && - ((selector->show_all) || - (selector->show_error))) { - if (print_header) { - printf("%20s:%-10s ","RTEMS STATUS","ERRNO"); - } - else { - printf("%20s:%-10s ", - ((bdbuf_info->status == RTEMS_SUCCESSFUL) - ? "SUCCESSFUL" : rtems_status_text(bdbuf_info->status)), - ((bdbuf_info->status == RTEMS_SUCCESSFUL) - ? "" : strerror(bdbuf_info->error))); + if ( + ( rc == RTEMS_SUCCESSFUL ) && + ( ( selector->show_all ) || ( selector->show_error ) ) + ) { + if ( print_header ) { + printf( "%20s:%-10s ", "RTEMS STATUS", "ERRNO" ); + } else { + printf( + "%20s:%-10s ", + ( ( bdbuf_info->status == RTEMS_SUCCESSFUL ) + ? "SUCCESSFUL" + : rtems_status_text( bdbuf_info->status ) ), + ( ( bdbuf_info->status == RTEMS_SUCCESSFUL ) + ? "" + : strerror( bdbuf_info->error ) ) + ); } } /* * FIXME: add info about waiting chain */ - printf("\n"); + printf( "\n" ); return rc; } /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -void rtems_bdbuf_show_fnc -( -/*-------------------------------------------------------------------------*\ +void rtems_bdbuf_show_fnc( + /*-------------------------------------------------------------------------*\ | Purpose: | | list all bdbufs with their content | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - int argc, - char **argv, - rtems_monitor_command_arg_t* command_arg, - bool verbose + int argc, + char **argv, + rtems_monitor_command_arg_t *command_arg, + bool verbose ) /*-------------------------------------------------------------------------*\ | Return Value: | | rtems_status_code | \*=========================================================================*/ { - rtems_status_code rc = RTEMS_SUCCESSFUL; - show_bdbuf_filter_t filter; - show_bdbuf_selector_t selector; + rtems_status_code rc = RTEMS_SUCCESSFUL; + show_bdbuf_filter_t filter; + show_bdbuf_selector_t selector; show_bdbuf_bdbuf_info_t bdbuf_info; - bdbuf_pool *curr_pool,*pool_base; - int pool_cnt,pool_idx; - int bdbuf_idx; - bool bdbuf_matches; - int matched_cnt,un_matched_cnt; + bdbuf_pool *curr_pool, *pool_base; + int pool_cnt, pool_idx; + int bdbuf_idx; + bool bdbuf_matches; + int matched_cnt, un_matched_cnt; /* * analyze command line options */ - if (rc == RTEMS_SUCCESSFUL) { - rc = rtems_bdbuf_show_getargs (argc,argv, - &filter,&selector); + if ( rc == RTEMS_SUCCESSFUL ) { + rc = rtems_bdbuf_show_getargs( argc, argv, &filter, &selector ); } /* * get buffer pool information */ - if (rc == RTEMS_SUCCESSFUL) { - rc = rtems_bdbuf_show_get_bufpool(&pool_base,&pool_cnt); - if (rc != RTEMS_SUCCESSFUL) { - printf("%s: ERROR: no buffer pool found\n",argv[0]); + if ( rc == RTEMS_SUCCESSFUL ) { + rc = rtems_bdbuf_show_get_bufpool( &pool_base, &pool_cnt ); + if ( rc != RTEMS_SUCCESSFUL ) { + printf( "%s: ERROR: no buffer pool found\n", argv[ 0 ] ); } } /* * for all or selected buffer pool(s) */ - for (pool_idx = 0; - (rc == RTEMS_SUCCESSFUL) && (pool_idx < pool_cnt); - pool_idx++) { - if ((filter.pool_id < 0) || - (filter.pool_id == pool_idx)) { + for ( + pool_idx = 0; ( rc == RTEMS_SUCCESSFUL ) && ( pool_idx < pool_cnt ); + pool_idx++ + ) { + if ( ( filter.pool_id < 0 ) || ( filter.pool_id == pool_idx ) ) { curr_pool = pool_base + pool_idx; /* * print pool header */ - if (rc == RTEMS_SUCCESSFUL) { - rc = rtems_bdbuf_show_pool_header(pool_idx,curr_pool); + if ( rc == RTEMS_SUCCESSFUL ) { + rc = rtems_bdbuf_show_pool_header( pool_idx, curr_pool ); } - if (rc == RTEMS_SUCCESSFUL) { - matched_cnt = 0; - un_matched_cnt = 0; - /* + if ( rc == RTEMS_SUCCESSFUL ) { + matched_cnt = 0; + un_matched_cnt = 0; + /* * print header for bdbuf */ - if (rc == RTEMS_SUCCESSFUL) { - rc = rtems_show_bdbuf_print(NULL,&selector, - true); - } - /* + if ( rc == RTEMS_SUCCESSFUL ) { + rc = rtems_show_bdbuf_print( NULL, &selector, true ); + } + /* * for all bdbufs in this pool */ - for (bdbuf_idx = 0; - ((rc == RTEMS_SUCCESSFUL) && - (bdbuf_idx < curr_pool->nblks)); - bdbuf_idx++) { - /* + for ( + bdbuf_idx = 0; + ( ( rc == RTEMS_SUCCESSFUL ) && ( bdbuf_idx < curr_pool->nblks ) ); + bdbuf_idx++ + ) { + /* * get infos about bdbuf */ - if (rc == RTEMS_SUCCESSFUL) { - rc = rtems_show_bdbuf_get_bdbuf_info - (&(curr_pool->bdbufs[bdbuf_idx]), - bdbuf_idx, - curr_pool, - &bdbuf_info); - } - /* + if ( rc == RTEMS_SUCCESSFUL ) { + rc = rtems_show_bdbuf_get_bdbuf_info( + &( curr_pool->bdbufs[ bdbuf_idx ] ), + bdbuf_idx, + curr_pool, + &bdbuf_info + ); + } + /* * check, if bdbuf matches selection criteria */ - if (rc == RTEMS_SUCCESSFUL) { - rc = rtems_show_bdbuf_match_filter(&bdbuf_info,&filter, - &bdbuf_matches); - } - /* + if ( rc == RTEMS_SUCCESSFUL ) { + rc = rtems_show_bdbuf_match_filter( + &bdbuf_info, + &filter, + &bdbuf_matches + ); + } + /* * print info about bdbuf */ - if (rc == RTEMS_SUCCESSFUL) { - if (bdbuf_matches) { - rc = rtems_show_bdbuf_print(&bdbuf_info,&selector, - false); - if ((rc == RTEMS_SUCCESSFUL) && - selector.show_sema) { - rc = rtems_show_bdbuf_print_wait_chain(&(curr_pool->bdbufs[bdbuf_idx])); - } - matched_cnt++; - } - else { - un_matched_cnt++; - } - } - } - /* + if ( rc == RTEMS_SUCCESSFUL ) { + if ( bdbuf_matches ) { + rc = rtems_show_bdbuf_print( &bdbuf_info, &selector, false ); + if ( ( rc == RTEMS_SUCCESSFUL ) && selector.show_sema ) { + rc = rtems_show_bdbuf_print_wait_chain( + &( curr_pool->bdbufs[ bdbuf_idx ] ) + ); + } + matched_cnt++; + } else { + un_matched_cnt++; + } + } + } + /* * print match statistics and footer */ - if (rc == RTEMS_SUCCESSFUL) { - printf("%d bdbufs printed, %d bdbufs suppressed\n", - matched_cnt,un_matched_cnt); - } + if ( rc == RTEMS_SUCCESSFUL ) { + printf( + "%d bdbufs printed, %d bdbufs suppressed\n", + matched_cnt, + un_matched_cnt + ); + } } } } } static rtems_monitor_command_entry_t rtems_show_bdbuf_cmds[] = { - { - "bdbuf_show", - "usage: bdbuf_show\n", - 0, - rtems_bdbuf_show_fnc, - { 0 }, - 0 - } + { "bdbuf_show", "usage: bdbuf_show\n", 0, rtems_bdbuf_show_fnc, { 0 }, 0 } }; #ifndef ARRAY_CNT -#define ARRAY_CNT(arr) (sizeof((arr))/sizeof((arr)[0])) +#define ARRAY_CNT( arr ) ( sizeof(( arr )) / sizeof( ( arr )[ 0 ] ) ) #endif /*=========================================================================*\ | Function: | \*-------------------------------------------------------------------------*/ -rtems_status_code rtems_bdbuf_show_init -( -/*-------------------------------------------------------------------------*\ +rtems_status_code rtems_bdbuf_show_init( + /*-------------------------------------------------------------------------*\ | Purpose: | | add command(s) to monitor | +---------------------------------------------------------------------------+ | Input Parameters: | \*-------------------------------------------------------------------------*/ - void /* none up to now */ + void /* none up to now */ ) /*-------------------------------------------------------------------------*\ | Return Value: | @@ -901,12 +908,14 @@ rtems_status_code rtems_bdbuf_show_init \*=========================================================================*/ { rtems_status_code sc = RTEMS_SUCCESSFUL; - int item; + int item; - for (item = 0; - (sc == RTEMS_SUCCESSFUL) && (item < ARRAY_CNT(rtems_show_bdbuf_cmds)); - item++) { - if (0 == rtems_monitor_insert_cmd (&rtems_show_bdbuf_cmds[item])) { + for ( + item = 0; ( sc == RTEMS_SUCCESSFUL ) && + ( item < ARRAY_CNT( rtems_show_bdbuf_cmds ) ); + item++ + ) { + if ( 0 == rtems_monitor_insert_cmd( &rtems_show_bdbuf_cmds[ item ] ) ) { sc = RTEMS_INVALID_NAME; } } diff --git a/cpukit/libblock/src/sparse-disk.c b/cpukit/libblock/src/sparse-disk.c index b8e0640f2a..8d16bc6551 100644 --- a/cpukit/libblock/src/sparse-disk.c +++ b/cpukit/libblock/src/sparse-disk.c @@ -48,16 +48,16 @@ */ static rtems_sparse_disk *sparse_disk_allocate( const uint32_t media_block_size, - const rtems_blkdev_bnum blocks_with_buffer ) + const rtems_blkdev_bnum blocks_with_buffer +) { - size_t const key_table_size = blocks_with_buffer - * sizeof( rtems_sparse_disk_key ); - size_t const data_size = blocks_with_buffer * media_block_size; - size_t const alloc_size = sizeof( rtems_sparse_disk ) - + key_table_size + data_size; + size_t const key_table_size = blocks_with_buffer * + sizeof( rtems_sparse_disk_key ); + size_t const data_size = blocks_with_buffer * media_block_size; + size_t const alloc_size = sizeof( rtems_sparse_disk ) + key_table_size + + data_size; - rtems_sparse_disk *const sd = (rtems_sparse_disk *) malloc( - alloc_size ); + rtems_sparse_disk *const sd = (rtems_sparse_disk *) malloc( alloc_size ); return sd; } @@ -65,42 +65,47 @@ static rtems_sparse_disk *sparse_disk_allocate( /* * Initialize sparse disk data */ -static rtems_status_code sparse_disk_initialize( rtems_sparse_disk *sd, - const uint32_t media_block_size, - const rtems_blkdev_bnum blocks_with_buffer, - const rtems_sparse_disk_delete_handler sparse_disk_delete, - const uint8_t fill_pattern ) +static rtems_status_code sparse_disk_initialize( + rtems_sparse_disk *sd, + const uint32_t media_block_size, + const rtems_blkdev_bnum blocks_with_buffer, + const rtems_sparse_disk_delete_handler sparse_disk_delete, + const uint8_t fill_pattern +) { rtems_blkdev_bnum i; - if ( NULL == sd ) + if ( NULL == sd ) { return RTEMS_INVALID_ADDRESS; + } - uint8_t *data = (uint8_t *) sd; - size_t const key_table_size = blocks_with_buffer - * sizeof( rtems_sparse_disk_key ); - size_t const data_size = blocks_with_buffer * media_block_size; + uint8_t *data = (uint8_t *) sd; + size_t const key_table_size = blocks_with_buffer * + sizeof( rtems_sparse_disk_key ); + size_t const data_size = blocks_with_buffer * media_block_size; memset( data, 0, sizeof( rtems_sparse_disk ) + key_table_size ); sd->fill_pattern = fill_pattern; - memset( (uint8_t *) ( data + sizeof( rtems_sparse_disk ) + key_table_size ), - sd->fill_pattern, - data_size ); + memset( + (uint8_t *) ( data + sizeof( rtems_sparse_disk ) + key_table_size ), + sd->fill_pattern, + data_size + ); sd->delete_handler = sparse_disk_delete; rtems_mutex_init( &sd->mutex, "Sparse Disk" ); - data += sizeof( rtems_sparse_disk ); + data += sizeof( rtems_sparse_disk ); sd->blocks_with_buffer = blocks_with_buffer; - sd->key_table = (rtems_sparse_disk_key *) data; + sd->key_table = (rtems_sparse_disk_key *) data; - data += key_table_size; + data += key_table_size; for ( i = 0; i < blocks_with_buffer; ++i, data += media_block_size ) { - sd->key_table[i].data = data; + sd->key_table[ i ].data = data; } sd->media_block_size = media_block_size; @@ -167,20 +172,23 @@ static int sparse_disk_read_block( const rtems_sparse_disk *sparse_disk, const rtems_blkdev_bnum block, uint8_t *buffer, - const size_t buffer_size ) + const size_t buffer_size +) { size_t bytes_to_copy = sparse_disk->media_block_size; rtems_sparse_disk_key *key; - if ( buffer_size < bytes_to_copy ) + if ( buffer_size < bytes_to_copy ) { bytes_to_copy = buffer_size; + } key = sparse_disk_find_block( sparse_disk, block ); - if ( NULL != key ) + if ( NULL != key ) { memcpy( buffer, key->data, bytes_to_copy ); - else + } else { memset( buffer, sparse_disk->fill_pattern, buffer_size ); + } return bytes_to_copy; } @@ -189,15 +197,17 @@ static int sparse_disk_write_block( rtems_sparse_disk *sparse_disk, const rtems_blkdev_bnum block, const uint8_t *buffer, - const size_t buffer_size ) + const size_t buffer_size +) { size_t bytes_to_copy = sparse_disk->media_block_size; bool block_needs_writing = false; rtems_sparse_disk_key *key; size_t i; - if ( buffer_size < bytes_to_copy ) + if ( buffer_size < bytes_to_copy ) { bytes_to_copy = buffer_size; + } /* we only need to write the block if it is different from the fill pattern. * If the read method does not find a block it will deliver the fill pattern anyway. @@ -207,8 +217,9 @@ static int sparse_disk_write_block( if ( NULL == key ) { for ( i = 0; ( !block_needs_writing ) && ( i < bytes_to_copy ); ++i ) { - if ( buffer[i] != sparse_disk->fill_pattern ) + if ( buffer[ i ] != sparse_disk->fill_pattern ) { block_needs_writing = true; + } } if ( block_needs_writing ) { @@ -216,10 +227,11 @@ static int sparse_disk_write_block( } } - if ( NULL != key ) + if ( NULL != key ) { memcpy( key->data, buffer, bytes_to_copy ); - else if ( block_needs_writing ) + } else if ( block_needs_writing ) { return -1; + } return bytes_to_copy; } @@ -230,7 +242,8 @@ static int sparse_disk_write_block( static int sparse_disk_read_write( rtems_sparse_disk *sparse_disk, rtems_blkdev_request *req, - const bool read ) + const bool read +) { int rv = 0; uint32_t req_buffer; @@ -242,40 +255,46 @@ static int sparse_disk_read_write( rtems_mutex_lock( &sparse_disk->mutex ); - for ( req_buffer = 0; - ( 0 <= rv ) && ( req_buffer < req->bufnum ); - ++req_buffer ) { - scatter_gather = &req->bufs[req_buffer]; + for ( + req_buffer = 0; ( 0 <= rv ) && ( req_buffer < req->bufnum ); ++req_buffer + ) { + scatter_gather = &req->bufs[ req_buffer ]; - bytes_handled = 0; - buff = (uint8_t *) scatter_gather->buffer; - block = scatter_gather->block; - buff_size = scatter_gather->length; + bytes_handled = 0; + buff = (uint8_t *) scatter_gather->buffer; + block = scatter_gather->block; + buff_size = scatter_gather->length; while ( ( 0 <= rv ) && ( 0 < buff_size ) ) { - if ( read ) - rv = sparse_disk_read_block( sparse_disk, - block, - &buff[bytes_handled], - buff_size ); - else - rv = sparse_disk_write_block( sparse_disk, - block, - &buff[bytes_handled], - buff_size ); + if ( read ) { + rv = sparse_disk_read_block( + sparse_disk, + block, + &buff[ bytes_handled ], + buff_size + ); + } else { + rv = sparse_disk_write_block( + sparse_disk, + block, + &buff[ bytes_handled ], + buff_size + ); + } ++block; bytes_handled += rv; - buff_size -= rv; + buff_size -= rv; } } rtems_mutex_unlock( &sparse_disk->mutex ); - if ( 0 > rv ) + if ( 0 > rv ) { rtems_blkdev_request_done( req, RTEMS_IO_ERROR ); - else + } else { rtems_blkdev_request_done( req, RTEMS_SUCCESSFUL ); + } return 0; } @@ -293,15 +312,20 @@ static int sparse_disk_ioctl( rtems_disk_device *dd, uint32_t req, void *argp ) switch ( r->req ) { case RTEMS_BLKDEV_REQ_READ: case RTEMS_BLKDEV_REQ_WRITE: - return sparse_disk_read_write( sd, r, r->req == RTEMS_BLKDEV_REQ_READ ); + return sparse_disk_read_write( + sd, + r, + r->req == RTEMS_BLKDEV_REQ_READ + ); default: break; } } else if ( RTEMS_BLKIO_DELETED == req ) { rtems_mutex_destroy( &sd->mutex ); - if ( NULL != sd->delete_handler ) + if ( NULL != sd->delete_handler ) { ( *sd->delete_handler )( sd ); + } return 0; } else { @@ -322,9 +346,10 @@ rtems_status_code rtems_sparse_disk_create_and_register( uint32_t media_block_size, rtems_blkdev_bnum blocks_with_buffer, rtems_blkdev_bnum media_block_count, - uint8_t fill_pattern ) + uint8_t fill_pattern +) { - rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_sparse_disk *sparse_disk = sparse_disk_allocate( media_block_size, blocks_with_buffer @@ -354,7 +379,8 @@ rtems_status_code rtems_sparse_disk_register( rtems_blkdev_bnum blocks_with_buffer, rtems_blkdev_bnum media_block_count, uint8_t fill_pattern, - rtems_sparse_disk_delete_handler sparse_disk_delete ) + rtems_sparse_disk_delete_handler sparse_disk_delete +) { rtems_status_code sc;