|
Data Structures | |
| struct | dataflash_breq |
| DataFlash specific block device request. More... | |
| struct | dataflash_bdev |
| DataFlash specific block device. More... | |
Defines | |
| #define | DATAFLASH_BLOCK_SIZE 512 |
| The DataFlash block device block size. | |
Functions | |
| static int8_t | dataflash_get_page_block_shift (struct dataflash_breq *df_breq) |
| Get DataFlash page size vs. block size shift value. | |
| static bool | dataflash_is_page_aligned (struct dataflash_breq *df_breq) |
| Test if request currently is aligned into whole page. | |
| static bool | dataflash_store_page_size (struct dataflash_bdev *df_bdev, uint16_t page_size) |
| Store DataFlash page size into shift value. | |
| static uint16_t | dataflash_get_remaining_page_size (struct dataflash_breq *df_breq) |
| Get DataFlash remaining partial page size. | |
| static void | dataflash_submit (struct block_device *bdev, struct block_request *breq) |
| static int | dataflash_submit_buf_list (struct block_device *bdev, struct block_request *breq, struct slist *buf_list) |
| static void | dataflash_prepare_req (struct block_device *bdev, struct block_request *breq, block_addr_t lba, block_len_t nr_blocks, enum block_operation operation) |
| static struct block_request * | dataflash_alloc_req (struct block_device *bdev) |
| static void | dataflash_free_req (struct block_device *bdev, struct block_request *breq) |
| static void | dataflash_detect (struct workqueue_task *task) |
| Scan for AT45 DataFlash device. | |
When refering to buffer, that means the DataFlash built-in page buffer.
| #define DATAFLASH_BLOCK_SIZE 512 |
The DataFlash block device block size.
Definition at line 107 of file dataflash.c.
Referenced by dataflash_detect().
| static struct block_request* dataflash_alloc_req | ( | struct block_device * | bdev | ) | [static, read] |
Definition at line 548 of file dataflash.c.
References block_request::bdev, dataflash_breq::breq, block_request::buf_list, dataflash_submit(), dataflash_submit_buf_list(), mem_pool_alloc(), dataflash_bdev::req_pool, and slist_init().
| static void dataflash_detect | ( | struct workqueue_task * | task | ) | [static] |
Scan for AT45 DataFlash device.
| task | Workqueue task |
Definition at line 586 of file dataflash.c.
References AT45_FLAG_PROTECTED, AT45_FLAG_VALID, at45_identify(), dataflash_bdev::at45d, dataflash_bdev::bdev, BDEV_PRESENT, BDEV_WRITEABLE, blkdev_set_block_size(), DATAFLASH_BLOCK_SIZE, dataflash_store_page_size(), dbg_warning, dataflash_bdev::event_task, block_device::flags, at45_device::flags, main_workqueue, block_device::nr_blocks, at45_device::page_size, set_bit, at45_device::size, test_bit, and workqueue_add_task().
| static void dataflash_free_req | ( | struct block_device * | bdev, | |
| struct block_request * | breq | |||
| ) | [static] |
Definition at line 566 of file dataflash.c.
References mem_pool_free(), and dataflash_bdev::req_pool.
| static int8_t dataflash_get_page_block_shift | ( | struct dataflash_breq * | df_breq | ) | [static] |
Get DataFlash page size vs. block size shift value.
The values for block size and page size are given in power-of-2 values. So this means that the difference between them can be represented as a bit shift operation.
| df_breq | DataFlash block request struct |
| <0 | Page size is smaller than block size | |
| 0 | Identical page size and block size | |
| >0 | Page size is bigger than block size |
Definition at line 180 of file dataflash.c.
References block_request::bdev, dataflash_breq::breq, and dataflash_bdev::page_block_shift.
Referenced by dataflash_get_remaining_page_size(), and dataflash_is_page_aligned().
| static uint16_t dataflash_get_remaining_page_size | ( | struct dataflash_breq * | df_breq | ) | [static] |
Get DataFlash remaining partial page size.
For current transfer posisiton get the ramining size of (parital) page.
| df_breq | DataFlash block request struct |
Definition at line 251 of file dataflash.c.
References assert, dataflash_get_page_block_shift(), dataflash_breq::lba, and dataflash_breq::remaining_blocks.
| static bool dataflash_is_page_aligned | ( | struct dataflash_breq * | df_breq | ) | [static] |
Test if request currently is aligned into whole page.
Tests the alignment between page size and block size. This is tested for the current block request position.
| df_breq | DataFlash block request struct |
| true | Remaining data transfer is aligned toa whole page | |
| false | Remaining data transfer is for a partial page |
Definition at line 197 of file dataflash.c.
References dataflash_get_page_block_shift(), dataflash_breq::lba, and dataflash_breq::remaining_blocks.
| static void dataflash_prepare_req | ( | struct block_device * | bdev, | |
| struct block_request * | breq, | |||
| block_addr_t | lba, | |||
| block_len_t | nr_blocks, | |||
| enum block_operation | operation | |||
| ) | [static] |
Definition at line 531 of file dataflash.c.
References dataflash_breq::lba, dataflash_breq::operation, OPERATION_IN_PROGRESS, dataflash_breq::remaining_blocks, dataflash_breq::sleeping, block_request::status, dataflash_breq::task, and workqueue_task_init().
| static bool dataflash_store_page_size | ( | struct dataflash_bdev * | df_bdev, | |
| uint16_t | page_size | |||
| ) | [static] |
Store DataFlash page size into shift value.
| df_bdev | DataFlash block device struct | |
| page_size | Page size in bytes |
| true | Valid page size to store | |
| false | Invalid page size |
Definition at line 226 of file dataflash.c.
References dataflash_bdev::page_block_shift.
Referenced by dataflash_detect().
| static void dataflash_submit | ( | struct block_device * | bdev, | |
| struct block_request * | breq | |||
| ) | [static] |
Definition at line 504 of file dataflash.c.
References at45_request(), dataflash_bdev::at45d, and dataflash_breq::task.
Referenced by dataflash_alloc_req().
| static int dataflash_submit_buf_list | ( | struct block_device * | bdev, | |
| struct block_request * | breq, | |||
| struct slist * | buf_list | |||
| ) | [static] |
Definition at line 514 of file dataflash.c.
References block_request::buf_list, dbg_verbose, main_workqueue, dataflash_breq::sleeping, slist_move_to_tail(), STATUS_OK, dataflash_breq::task, and workqueue_add_task().
Referenced by dataflash_alloc_req().
1.6.3