From c44092eb0f32b0e1903c99e3f734f3134f01b52c Mon Sep 17 00:00:00 2001 From: barthess Date: Sat, 2 May 2015 20:51:04 +0300 Subject: NAND code changed to use bitmap class --- os/hal/ports/STM32/LLD/FSMCv1/nand_lld.c | 22 ++++++++++++---------- os/hal/ports/STM32/LLD/FSMCv1/nand_lld.h | 23 +++++++++++------------ 2 files changed, 23 insertions(+), 22 deletions(-) (limited to 'os/hal/ports') diff --git a/os/hal/ports/STM32/LLD/FSMCv1/nand_lld.c b/os/hal/ports/STM32/LLD/FSMCv1/nand_lld.c index d187161..cd2f421 100644 --- a/os/hal/ports/STM32/LLD/FSMCv1/nand_lld.c +++ b/os/hal/ports/STM32/LLD/FSMCv1/nand_lld.c @@ -70,7 +70,7 @@ NANDDriver NANDD2; * * @notapi */ -static void wakeup_isr(NANDDriver *nandp){ +static void wakeup_isr(NANDDriver *nandp) { osalDbgCheck(nandp->thread != NULL); osalThreadResumeI(&nandp->thread, MSG_OK); @@ -91,7 +91,7 @@ static void nand_lld_suspend_thread(NANDDriver *nandp) { * * @param[in] nandp pointer to the @p NANDDriver object */ -static uint32_t calc_eccps(NANDDriver *nandp){ +static uint32_t calc_eccps(NANDDriver *nandp) { uint32_t i = 0; uint32_t eccps = nandp->config->page_data_size; @@ -148,7 +148,7 @@ static void nand_ready_isr_disable(NANDDriver *nandp) { * * @notapi */ -static void nand_isr_handler (NANDDriver *nandp){ +static void nand_isr_handler (NANDDriver *nandp) { osalSysLockFromISR(); @@ -252,6 +252,7 @@ void nand_lld_init(void) { NANDD1.map_data = (uint8_t*)FSMC_Bank2_MAP_COMMON_DATA; NANDD1.map_cmd = (uint8_t*)FSMC_Bank2_MAP_COMMON_CMD; NANDD1.map_addr = (uint8_t*)FSMC_Bank2_MAP_COMMON_ADDR; + NANDD1.bb_map = NULL; #endif /* STM32_NAND_USE_FSMC_NAND1 */ #if STM32_NAND_USE_FSMC_NAND2 @@ -265,6 +266,7 @@ void nand_lld_init(void) { NANDD2.map_data = (uint8_t*)FSMC_Bank3_MAP_COMMON_DATA; NANDD2.map_cmd = (uint8_t*)FSMC_Bank3_MAP_COMMON_CMD; NANDD2.map_addr = (uint8_t*)FSMC_Bank3_MAP_COMMON_ADDR; + NANDD2.bb_map = NULL; #endif /* STM32_NAND_USE_FSMC_NAND2 */ } @@ -332,8 +334,8 @@ void nand_lld_stop(NANDDriver *nandp) { * * @notapi */ -void nand_lld_read_data(NANDDriver *nandp, uint8_t *data, - size_t datalen, uint8_t *addr, size_t addrlen, uint32_t *ecc){ +void nand_lld_read_data(NANDDriver *nandp, uint8_t *data, size_t datalen, + uint8_t *addr, size_t addrlen, uint32_t *ecc){ nandp->state = NAND_READ; nandp->rxdata = data; @@ -381,7 +383,7 @@ void nand_lld_read_data(NANDDriver *nandp, uint8_t *data, * @notapi */ uint8_t nand_lld_write_data(NANDDriver *nandp, const uint8_t *data, - size_t datalen, uint8_t *addr, size_t addrlen, uint32_t *ecc){ + size_t datalen, uint8_t *addr, size_t addrlen, uint32_t *ecc) { nandp->state = NAND_WRITE; @@ -425,7 +427,7 @@ uint8_t nand_lld_write_data(NANDDriver *nandp, const uint8_t *data, * * @notapi */ -uint8_t nand_lld_erase(NANDDriver *nandp, uint8_t *addr, size_t addrlen){ +uint8_t nand_lld_erase(NANDDriver *nandp, uint8_t *addr, size_t addrlen) { nandp->state = NAND_ERASE; @@ -451,7 +453,7 @@ uint8_t nand_lld_erase(NANDDriver *nandp, uint8_t *addr, size_t addrlen){ * * @notapi */ -void nand_lld_polled_read_data(NANDDriver *nandp, uint8_t *data, size_t len){ +void nand_lld_polled_read_data(NANDDriver *nandp, uint8_t *data, size_t len) { size_t i = 0; for (i=0; imap_cmd[0] = cmd; } diff --git a/os/hal/ports/STM32/LLD/FSMCv1/nand_lld.h b/os/hal/ports/STM32/LLD/FSMCv1/nand_lld.h index f136df4..1d2edef 100644 --- a/os/hal/ports/STM32/LLD/FSMCv1/nand_lld.h +++ b/os/hal/ports/STM32/LLD/FSMCv1/nand_lld.h @@ -26,6 +26,7 @@ #define _NAND_LLD_H_ #include "fsmc.h" +#include "bitmap.h" #if HAL_USE_NAND || defined(__DOXYGEN__) @@ -167,7 +168,7 @@ typedef struct { /** * @brief Pointer to lower level driver. */ - FSMCDriver *fsmcp; + //const FSMCDriver *fsmcp; /** * @brief Number of erase blocks in NAND device. */ @@ -184,13 +185,6 @@ typedef struct { * @brief Number of pages in block. */ uint32_t pages_per_block; -#if NAND_USE_BAD_MAP - /** - * @brief Pointer to bad block map. - * @details One bit per block. Memory for map must be allocated by user. - */ - uint32_t *bb_map; -#endif /* NAND_USE_BAD_MAP */ /** * @brief Number of write cycles for row addressing. */ @@ -287,6 +281,11 @@ struct NANDDriver { * @brief Memory mapping for addresses. */ uint8_t *map_addr; + /** + * @brief Pointer to bad block map. + * @details One bit per block. All memory allocation is user's responsibility. + */ + bitmap_t *bb_map; }; /*===========================================================================*/ @@ -311,14 +310,14 @@ extern "C" { void nand_lld_init(void); void nand_lld_start(NANDDriver *nandp); void nand_lld_stop(NANDDriver *nandp); - uint8_t nand_lld_write_data(NANDDriver *nandp, const uint8_t *data, - size_t datalen, uint8_t *addr, size_t addrlen, uint32_t *ecc); void nand_lld_read_data(NANDDriver *nandp, uint8_t *data, - size_t datalen, uint8_t *addr, size_t addrlen, uint32_t *ecc); + size_t datalen, uint8_t *addr, size_t addrlen, uint32_t *ecc); void nand_lld_polled_read_data(NANDDriver *nandp, uint8_t *data, size_t len); - uint8_t nand_lld_erase(NANDDriver *nandp, uint8_t *addr, size_t addrlen); void nand_lld_write_addr(NANDDriver *nandp, const uint8_t *addr, size_t len); void nand_lld_write_cmd(NANDDriver *nandp, uint8_t cmd); + uint8_t nand_lld_erase(NANDDriver *nandp, uint8_t *addr, size_t addrlen); + uint8_t nand_lld_write_data(NANDDriver *nandp, const uint8_t *data, + size_t datalen, uint8_t *addr, size_t addrlen, uint32_t *ecc); uint8_t nand_lld_read_status(NANDDriver *nandp); #ifdef __cplusplus } -- cgit v1.2.3