Cast to unsignet type.
[bertos.git] / bertos / drv / dataflash.c
index d9392f9aadb6db27088b7c5206417eaa54982c3a..f70628fb18cf52a1e6e9dc2f4ae6e5b677abb5d8 100644 (file)
  *
  * -->
  *
- *  \brief Function library for AT45DBXX Data Flash memory.
+ *  \brief Function library for dataflash AT45DB family (implementation).
  *
  *
- * \version $Id: dataflash.c 20677 2008-02-19 14:29:52Z batt $
+ * \version $Id: dataflash.c 21658 2008-06-05 16:42:54Z asterix $
  * \author Daniele Basile <asterix@develer.com>
  * \author Francesco Sacchi <batt@develer.com>
  */
 
 #include "dataflash.h"
-#include <appconfig.h>
 
+#include "cfg/cfg_dataflash.h"
 #include <cfg/macros.h>
 #include <cfg/debug.h>
 #include <cfg/module.h>
+
+// Define logging setting (for cfg/log.h module).
+#define LOG_LEVEL         DATAFLASH_LOG_LEVEL
+#define LOG_VERBOSITY     DATAFLASH_LOG_VERBOSITY
+#include <cfg/log.h>
+
 #include <drv/timer.h>
+
 #include <kern/kfile.h>
 
 #if CONFIG_KERNEL
@@ -82,6 +89,14 @@ static const DataflashInfo mem_info[] =
                .page_cnt = 4096,
                .read_cmd = DFO_READ_FLASH_MEM_BYTE_D,
        },
+       {
+               /* AT45DB642D */
+               .density_id = 0x0F,
+               .page_size = 1056,
+               .page_bits = 11,
+               .page_cnt = 8192,
+               .read_cmd = DFO_READ_FLASH_MEM_BYTE_D,
+       },
        /* Add other memories here */
 };
 
@@ -175,9 +190,7 @@ static uint8_t dataflash_stat(KFileDataflash *fd)
         * and reset dataflash command decoder.
         */
        CS_TOGGLE(fd);
-
        kfile_putc(DFO_READ_STATUS, fd->channel);
-
        return kfile_getc(fd->channel);
 }
 
@@ -281,7 +294,7 @@ static int dataflash_flush(KFile *_fd)
 
                fd->page_dirty = false;
 
-               kprintf("Flushing page <%ld>\n", fd->current_page);
+               LOG_INFO("Flushing page {%ld}\n", fd->current_page);
        }
        return 0;
 }
@@ -294,7 +307,7 @@ static int dataflash_flush(KFile *_fd)
 static int dataflash_close(struct KFile *_fd)
 {
        dataflash_flush(_fd);
-       TRACE;
+       LOG_INFO("Close.\n");
        return 0;
 }
 
@@ -312,7 +325,7 @@ static KFile *dataflash_reopen(KFile *_fd)
        /* Load selected page from dataflash memory */
        dataflash_loadPage(fd, fd->current_page);
 
-       TRACE;
+       LOG_INFO("Reopen.\n");
        return &fd->fd;
 }
 
@@ -338,10 +351,10 @@ static size_t dataflash_read(struct KFile *_fd, void *buf, size_t size)
        uint8_t *data = (uint8_t *)buf;
 
 
-       ASSERT(fd->fd.seek_pos + size <= fd->fd.size);
-       size = MIN((uint32_t)size, fd->fd.size - fd->fd.seek_pos);
+       ASSERT(fd->fd.seek_pos + size <= (kfile_size_t)fd->fd.size);
+       size = MIN((kfile_size_t)size, fd->fd.size - fd->fd.seek_pos);
 
-       kprintf("Reading at pos[%lu]\n", fd->fd.seek_pos);
+       LOG_INFO("Reading at pos[%lu]\n", fd->fd.seek_pos);
 
        /*
         * We select page and offest from absolute address.
@@ -349,7 +362,7 @@ static size_t dataflash_read(struct KFile *_fd, void *buf, size_t size)
        page_addr = fd->fd.seek_pos / mem_info[fd->dev].page_size;
        byte_addr = fd->fd.seek_pos % mem_info[fd->dev].page_size;
 
-       kprintf("[page-<%ld>, byte-<%ld>]", page_addr, byte_addr);
+       LOG_INFO("[page-{%ld}, byte-{%ld}]\n", page_addr, byte_addr);
 
        /*
         * Flush current page in main memory if
@@ -363,7 +376,7 @@ static size_t dataflash_read(struct KFile *_fd, void *buf, size_t size)
        dataflash_readBlock(fd, page_addr, byte_addr, mem_info[fd->dev].read_cmd, data, size);
 
        fd->fd.seek_pos += size;
-       kprintf("Read %ld bytes\n", size);
+       LOG_INFO("Read %ld bytes\n", size);
 
        return size;
 }
@@ -389,10 +402,10 @@ static size_t dataflash_write(struct KFile *_fd, const void *_buf, size_t size)
 
        const uint8_t *data = (const uint8_t *) _buf;
 
-       ASSERT(fd->fd.seek_pos + size <= fd->fd.size);
-       size = MIN((uint32_t)size, fd->fd.size - fd->fd.seek_pos);
+       ASSERT(fd->fd.seek_pos + size <= (kfile_off_t)fd->fd.size);
+       size = MIN((kfile_size_t)size, fd->fd.size - fd->fd.seek_pos);
 
-       kprintf("Writing at pos[%lu]\n", fd->fd.seek_pos);
+       LOG_INFO("Writing at pos[%lu]\n", fd->fd.seek_pos);
 
        while (size)
        {
@@ -403,9 +416,9 @@ static size_t dataflash_write(struct KFile *_fd, const void *_buf, size_t size)
                offset = fd->fd.seek_pos % mem_info[fd->dev].page_size;
 
 
-               size_t wr_len = MIN(size, mem_info[fd->dev].page_size - offset);
+               size_t wr_len = MIN((dataflash_size_t)size, mem_info[fd->dev].page_size - offset);
 
-               kprintf(" [page-<%ld>, byte-<%ld>]",new_page, offset);
+               LOG_INFO("[page-{%ld}, byte-{%ld}]\n",new_page, offset);
 
                if (new_page != fd->current_page)
                {
@@ -415,7 +428,7 @@ static size_t dataflash_write(struct KFile *_fd, const void *_buf, size_t size)
                        dataflash_loadPage(fd, new_page);
 
                        fd->current_page = new_page;
-                       kprintf(" >> Load page: <%ld> ", new_page);
+                       LOG_INFO(" >> Load page: {%ld}\n", new_page);
                }
                /*
                * Write byte in current page, and set true
@@ -430,7 +443,7 @@ static size_t dataflash_write(struct KFile *_fd, const void *_buf, size_t size)
                total_write += wr_len;
        }
 
-       kprintf("written %lu bytes\n", total_write);
+       LOG_INFO("written %lu bytes\n", total_write);
        return total_write;
 }
 
@@ -449,7 +462,7 @@ bool dataflash_init(KFileDataflash *fd, KFile *ch, DataflashType dev, dataflash_
 {
        uint8_t stat;
 
-       MOD_CHECK(dataflash_hw);
+       MOD_CHECK(hw_dataflash);
 
        ASSERT(fd);
        ASSERT(ch);
@@ -472,7 +485,6 @@ bool dataflash_init(KFileDataflash *fd, KFile *ch, DataflashType dev, dataflash_
        fd->fd.flush = dataflash_flush;
 
        dataflash_reset(fd);
-
        stat = dataflash_stat(fd);
 
        /*