fls->blk.blk_cnt = FLASH_MEM_SIZE / FLASH_PAGE_SIZE_BYTES;
}
-void flash_hw_init(Flash *fls, int flags)
+void flash_hw_init(Flash *fls, UNUSED_ARG(int, flags))
{
common_init(fls);
fls->blk.priv.vt = &flash_at91_buffered_vt;
- fls->blk.priv.flags |= KB_BUFFERED | KB_PARTIAL_WRITE | flags;
+ fls->blk.priv.flags |= KB_BUFFERED | KB_PARTIAL_WRITE;
fls->blk.priv.buf = flash_buf;
/* Load the first block in the cache */
memcpy(fls->blk.priv.buf, (void *)(FLASH_BASE), fls->blk.blk_size);
}
-void flash_hw_initUnbuffered(Flash *fls, int flags)
+void flash_hw_initUnbuffered(Flash *fls, UNUSED_ARG(int, flags))
{
common_init(fls);
fls->blk.priv.vt = &flash_at91_unbuffered_vt;
- fls->blk.priv.flags |= flags;
}
struct FlashHardware
{
uint8_t status;
+ int flags;
};
#define FLASH_PAGE_CNT FLASH_MEM_SIZE / FLASH_PAGE_SIZE_BYTES
ASSERT(FLASH_PAGE_SIZE_BYTES == size);
Flash *fls = FLASH_CAST(blk);
- if (!(fls->blk.priv.flags & KB_WRITE_ONCE))
+ if (!(fls->hw->flags & FLASH_WRITE_ONCE))
ASSERT(sector_size(idx) <= FLASH_PAGE_SIZE_BYTES);
const uint8_t *buf = (const uint8_t *)_buf;
if (res.status != CMD_SUCCESS)
goto flash_error;
- if ((fls->blk.priv.flags & KB_WRITE_ONCE) &&
+ if ((fls->hw->flags & FLASH_WRITE_ONCE) &&
bitarray_isRangeFull(&lpc2_bitx, idx_sector, erase_group[sector]))
{
kputs("blocchi pieni\n");
}
bool erase = false;
- if ((fls->blk.priv.flags & KB_WRITE_ONCE) &&
+ if ((fls->hw->flags & FLASH_WRITE_ONCE) &&
bitarray_isRangeEmpty(&lpc2_bitx, idx_sector, erase_group[sector]))
erase = true;
- if (!(fls->blk.priv.flags & KB_WRITE_ONCE))
+ if (!(fls->hw->flags & FLASH_WRITE_ONCE))
erase = true;
if (erase)
if (res.status != CMD_SUCCESS)
goto flash_error;
- if (fls->blk.priv.flags & KB_WRITE_ONCE)
+ if (fls->hw->flags & FLASH_WRITE_ONCE)
{
if (bitarray_test(&lpc2_bitx, idx))
{
return blk->blk_size;
flash_error:
+ IRQ_RESTORE(flags);
LOG_ERR("%ld\n", res.status);
fls->hw->status |= FLASH_WR_ERR;
return 0;
static struct FlashHardware flash_lpc2_hw;
static uint8_t flash_buf[FLASH_PAGE_SIZE_BYTES];
-static void common_init(Flash *fls)
+static void common_init(Flash *fls, int flags)
{
memset(fls, 0, sizeof(*fls));
DB(fls->blk.priv.type = KBT_FLASH);
fls->hw = &flash_lpc2_hw;
+ fls->hw->flags = flags;
fls->blk.blk_size = FLASH_PAGE_SIZE_BYTES;
fls->blk.blk_cnt = FLASH_MEM_SIZE / FLASH_PAGE_SIZE_BYTES;
void flash_hw_init(Flash *fls, int flags)
{
- common_init(fls);
+ common_init(fls, flags);
fls->blk.priv.vt = &flash_lpc2_buffered_vt;
- fls->blk.priv.flags |= KB_BUFFERED | KB_PARTIAL_WRITE | flags;
+ fls->blk.priv.flags |= KB_BUFFERED | KB_PARTIAL_WRITE;
fls->blk.priv.buf = flash_buf;
+
/* Load the first block in the cache */
void *flash_start = 0x0;
memcpy(fls->blk.priv.buf, flash_start, fls->blk.blk_size);
void flash_hw_initUnbuffered(Flash *fls, int flags)
{
- common_init(fls);
+ common_init(fls, flags);
fls->blk.priv.vt = &flash_lpc2_unbuffered_vt;
- fls->blk.priv.flags |= flags;
}
}
-void flash_hw_init(Flash *fls, int flags)
+void flash_hw_init(Flash *fls, UNUSED_ARG(int, flags))
{
common_init(fls);
fls->blk.priv.vt = &flash_avr_buffered_vt;
- fls->blk.priv.flags |= KB_BUFFERED | KB_PARTIAL_WRITE | flags;
+ fls->blk.priv.flags |= KB_BUFFERED | KB_PARTIAL_WRITE;
fls->blk.priv.buf = flash_buf;
}
-void flash_hw_initUnbuffered(Flash *fls, int flags)
+void flash_hw_initUnbuffered(Flash *fls, UNUSED_ARG(int, flags))
{
common_init(fls);
fls->blk.priv.vt = &flash_avr_unbuffered_vt;
- fls->blk.priv.flags |= flags;
}
}
-void flash_hw_init(Flash *fls, int flags)
+void flash_hw_init(Flash *fls, UNUSED_ARG(int, flags))
{
common_init(fls);
fls->blk.priv.vt = &flash_lm3s_buffered_vt;
- fls->blk.priv.flags |= KB_BUFFERED | KB_PARTIAL_WRITE | flags;
+ fls->blk.priv.flags |= KB_BUFFERED | KB_PARTIAL_WRITE;
fls->blk.priv.buf = flash_buf;
/* Load the first block in the cache */
memcpy(fls->blk.priv.buf, flash_start, fls->blk.blk_size);
}
-void flash_hw_initUnbuffered(Flash *fls, int flags)
+void flash_hw_initUnbuffered(Flash *fls, UNUSED_ARG(int, flags))
{
common_init(fls);
fls->blk.priv.vt = &flash_lm3s_unbuffered_vt;
- fls->blk.priv.flags |= flags;
}
return true;
}
+#if 0
+// not used for now
static bool stm32_eraseAll(struct KBlock *blk)
{
EMB_FLASH->CR |= CR_MER_SET;
return true;
}
+#endif
static int stm32_flash_error(struct KBlock *blk)
{
}
-void flash_hw_init(Flash *fls, int flags)
+void flash_hw_init(Flash *fls, UNUSED_ARG(int, flags))
{
common_init(fls);
fls->blk.priv.vt = &flash_stm32_buffered_vt;
- fls->blk.priv.flags |= KB_BUFFERED | KB_PARTIAL_WRITE | flags;
+ fls->blk.priv.flags |= KB_BUFFERED | KB_PARTIAL_WRITE;
fls->blk.priv.buf = flash_buf;
/* Load the first block in the cache */
memcpy(fls->blk.priv.buf, flash_start, fls->blk.blk_size);
}
-void flash_hw_initUnbuffered(Flash *fls, int flags)
+void flash_hw_initUnbuffered(Flash *fls, UNUSED_ARG(int, flags))
{
common_init(fls);
fls->blk.priv.vt = &flash_stm32_unbuffered_vt;
- fls->blk.priv.flags |= flags;
}
#include <cpu/attr.h>
#if COMPILER_C99
- #define flash_init(...) PP_CAT(flash_init ## _, COUNT_PARMS(__VA_ARGS__)) (__VA_ARGS__)
+ #define flash_init(...) PP_CAT(flash_init_, COUNT_PARMS(__VA_ARGS__)) (__VA_ARGS__)
#else
- #define flash_init(args...) PP_CAT(flash_init ## _, COUNT_PARMS(args)) (args)
+ #define flash_init(args...) PP_CAT(flash_init_, COUNT_PARMS(args)) (args)
#endif
/*
#define KBT_FLASH MAKE_ID('F', 'L', 'A', 'S')
/**
-* Convert + ASSERT from generic KFile to Flash.
+* Convert + ASSERT from generic KBlock to Flash.
*/
INLINE Flash *FLASH_CAST(KBlock *fls)
{
#include CPU_HEADER(flash)
-#define flash_init_2(fls, flags) (flags & KB_OPEN_UNBUFF) ? \
+#define FLASH_WRITE_ONCE BV(0) ///< Allow only one write per block.
+#define FLASH_BUFFERED BV(1) ///< Open flash memory using page caching, allowing the modification and partial write.
+
+#define flash_init_2(fls, flags) (flags & FLASH_BUFFERED) ? \
flash_hw_initUnbuffered(fls, flags) : flash_hw_init(fls, flags)
#if !CONFIG_FLASH_DISABLE_OLD_API
}
#endif /* !CONFIG_FLASH_DISABLE_OLD_API */
-#include CPU_HEADER(flash)
-
#endif /* DRV_FLASH_H */
-
#define KB_CACHE_DIRTY BV(1) ///< Internal flag: true if the cache is dirty
#define KB_PARTIAL_WRITE BV(2) ///< Internal flag: true if the device allows partial block write
-#define KB_WRITE_ONCE BV(3) ///< Allow only the one write on select block.
-#define KB_OPEN_BUFF BV(4) ///< Open flash memory using page caching, allowing the modification and partial write.
-#define KB_OPEN_UNBUFF BV(5) ///< Open flash memory whitout memory caching.
/*
* KBlock private members.