This is the mail archive of the
ecos-patches@sources.redhat.com
mailing list for the eCos project.
V2 flash - dataflash driver
- From: Bart Veer <bartv at ecoscentric dot com>
- To: ecos-patches at ecos dot sourceware dot org
- Date: Mon, 22 Nov 2004 21:05:11 +0000 (GMT)
- Subject: V2 flash - dataflash driver
As with the v2 synthetic flash driver, I have merged the config and
priv structures. This revealed some duplication of spi_dev pointers
which I have eliminated, and allowed for more static initialization. I
have also adjusted the device driver functions as per the modified
API.
The CYG_DATAFLASH_FLASH_DRIVER() macro has been redefined as per the
CYG_FLASH_DRIVER() changes, but the macro arguments remain the same so
platform code should be unaffected.
None of the current targets actually instantiate a dataflash driver,
but a quick temporary hack of the eb55 driver allowed me to check that
the changed code still compiles. Otherwise it has not been tested.
Bart
Index: ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos/packages/devs/flash/atmel/dataflash/current/Attic/ChangeLog,v
retrieving revision 1.1.2.6
diff -u -r1.1.2.6 ChangeLog
--- ChangeLog 22 Nov 2004 12:06:10 -0000 1.1.2.6
+++ ChangeLog 22 Nov 2004 20:59:29 -0000
@@ -1,5 +1,10 @@
2004-11-22 Bart Veer <bartv@ecoscentric.com>
+ * include/dataflash.h, src/devs_flash_atmel_dataflash.c,
+ src/devs_flash_atmel_dataflash_flash_dev_funs.c: merge the config
+ and priv structures, removing the duplicate spi_dev data in the
+ process. Adjust device driver API as per changes to the generic
+ flash code.
* src/devs_flash_atmel_dataflash_flash_dev_funs.c (df_flash_init):
Rename cyg_block_info to cyg_flash_block_info
Index: include/dataflash.h
===================================================================
RCS file: /cvs/ecos/ecos/packages/devs/flash/atmel/dataflash/current/include/Attic/dataflash.h,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 dataflash.h
--- include/dataflash.h 7 Oct 2004 19:59:28 -0000 1.1.2.2
+++ include/dataflash.h 22 Nov 2004 20:59:31 -0000
@@ -101,33 +101,33 @@
#ifdef _FLASH_PRIVATE_
#include <cyg/io/flash.h>
-typedef struct cyg_dataflash_flash_dev_config_s
-{
- cyg_spi_device **spi_dev; // SPI device
- cyg_uint32 address; // Memory address (flash driver)
- cyg_int16 start_sector; // Start sector of flash driver space
- cyg_int16 end_sector; // End sector of flash driver space
-} cyg_dataflash_flash_dev_config_t;
-
typedef struct cyg_dataflash_flash_dev_priv_s
{
- cyg_dataflash_device_t dev; // DataFlash device
- cyg_uint32 start_page; // Start page of flash driver space
- cyg_uint32 end_page; // End page of flash driver space
+ cyg_int16 start_sector; // Start sector of flash driver space
+ cyg_int16 end_sector; // End sector of flash driver space
+ cyg_dataflash_device_t dev; // DataFlash device
+ cyg_uint32 start_page; // Start page of flash driver space
+ cyg_uint32 end_page; // End page of flash driver space
+ cyg_flash_block_info_t block_info[1];
} cyg_dataflash_flash_dev_priv_t;
externC struct cyg_flash_dev_funs cyg_dataflash_flash_dev_funs;
-#define CYG_DATAFLASH_FLASH_DRIVER(name, _sdev, _addr, _start, _end) \
- static cyg_dataflash_flash_dev_config_t config_ ## name = { \
- .spi_dev = &_sdev, \
- .address = _addr, \
- .start_sector = _start, \
- .end_sector = _end \
- }; \
- CYG_FLASH_DRIVER(name, &cyg_dataflash_flash_dev_funs, \
- &config_ ## name, 0, \
- sizeof(cyg_dataflash_flash_dev_priv_t))
+#define CYG_DATAFLASH_FLASH_DRIVER(name, _sdev, _addr, _start, _end) \
+ static cyg_dataflash_flash_dev_priv_t cyg_dataflash_priv_ ## name = { \
+ .start_sector = _start, \
+ .end_sector = _end, \
+ .dev.spi_dev = _sdev, \
+ }; \
+ CYG_FLASH_DRIVER(name, \
+ &cyg_dataflash_flash_dev_funs, \
+ 0, \
+ _addr, \
+ 0, \
+ 1, \
+ cyg_dataflash_priv_ ## name.block_info, \
+ & cyg_dataflash_priv_ ## name \
+ )
#endif // _FLASH_PRIVATE_
@@ -183,8 +183,7 @@
//----------------------------------------------------------------------------
-externC int cyg_dataflash_init(cyg_spi_device *spi_dev,
- cyg_bool polled,
+externC int cyg_dataflash_init(cyg_bool polled,
cyg_dataflash_device_t *dev);
externC int cyg_dataflash_aquire(cyg_dataflash_device_t *dev);
Index: src/devs_flash_atmel_dataflash.c
===================================================================
RCS file: /cvs/ecos/ecos/packages/devs/flash/atmel/dataflash/current/src/Attic/devs_flash_atmel_dataflash.c,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 devs_flash_atmel_dataflash.c
--- src/devs_flash_atmel_dataflash.c 7 Oct 2004 19:59:28 -0000 1.1.2.2
+++ src/devs_flash_atmel_dataflash.c 22 Nov 2004 20:59:35 -0000
@@ -287,11 +287,9 @@
// cyg_dataflash_init()
int
-cyg_dataflash_init(cyg_spi_device *spi_dev,
- cyg_bool polled,
+cyg_dataflash_init(cyg_bool polled,
cyg_dataflash_device_t *dev)
{
- dev->spi_dev = spi_dev;
dev->polled = polled;
dev->blocking = false;
dev->state = CYG_DATAFLASH_STATE_IDLE;
Index: src/devs_flash_atmel_dataflash_flash_dev_funs.c
===================================================================
RCS file: /cvs/ecos/ecos/packages/devs/flash/atmel/dataflash/current/src/Attic/devs_flash_atmel_dataflash_flash_dev_funs.c,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 devs_flash_atmel_dataflash_flash_dev_funs.c
--- src/devs_flash_atmel_dataflash_flash_dev_funs.c 22 Nov 2004 12:06:09 -0000 1.1.2.3
+++ src/devs_flash_atmel_dataflash_flash_dev_funs.c 22 Nov 2004 20:59:35 -0000
@@ -73,21 +73,17 @@
static int
df_flash_init(struct cyg_flash_dev *dev)
{
- static cyg_flash_block_info_t block_info[1];
-
- cyg_dataflash_flash_dev_config_t *config;
cyg_dataflash_flash_dev_priv_t *priv;
cyg_dataflash_device_t *df_dev;
int sector_cnt;
- config = (cyg_dataflash_flash_dev_config_t *) dev->config;
priv = (cyg_dataflash_flash_dev_priv_t *) dev->priv;
df_dev = &priv->dev;
#ifdef CYGPKG_REDBOOT
- if (cyg_dataflash_init(*(config->spi_dev), true, df_dev))
+ if (cyg_dataflash_init(true, df_dev))
#else
- if (cyg_dataflash_init(*(config->spi_dev), false, df_dev))
+ if (cyg_dataflash_init(false, df_dev))
#endif
return CYG_DATAFLASH_ERR_WRONG_PART;
@@ -95,53 +91,47 @@
sector_cnt = cyg_dataflash_get_sector_count(df_dev);
- if (config->end_sector < 0)
- config->end_sector = sector_cnt - 1;
+ if (priv->end_sector < 0)
+ priv->end_sector = sector_cnt - 1;
- if (config->start_sector >= sector_cnt ||
- config->end_sector >= sector_cnt ||
- config->end_sector < config->start_sector)
+ if (priv->start_sector >= sector_cnt ||
+ priv->end_sector >= sector_cnt ||
+ priv->end_sector < priv->start_sector)
return CYG_DATAFLASH_ERR_INVALID;
priv->start_page = cyg_dataflash_get_block_size(df_dev) *
- cyg_dataflash_get_sector_start(df_dev, config->start_sector);
+ cyg_dataflash_get_sector_start(df_dev, priv->start_sector);
priv->end_page = cyg_dataflash_get_block_size(df_dev) *
- (cyg_dataflash_get_sector_start(df_dev, config->end_sector) +
- cyg_dataflash_get_sector_size(df_dev, config->end_sector));
+ (cyg_dataflash_get_sector_start(df_dev, priv->end_sector) +
+ cyg_dataflash_get_sector_size(df_dev, priv->end_sector));
- dev->start = (cyg_flashaddr_t)config->address;
- dev->end = (cyg_flashaddr_t)(config->address +
+ dev->end = (cyg_flashaddr_t)(dev->start +
((priv->end_page - priv->start_page) *
cyg_dataflash_get_page_size(df_dev)) - 1);
-
- dev->num_block_infos = 1;
- dev->block_info = block_info;
- block_info[0].block_size = cyg_dataflash_get_page_size(df_dev);
- block_info[0].blocks = priv->end_page - priv->start_page;
+ priv->block_info[0].block_size = cyg_dataflash_get_page_size(df_dev);
+ priv->block_info[0].blocks = priv->end_page - priv->start_page;
return CYG_DATAFLASH_ERR_OK;
}
static size_t
-df_flash_query(struct cyg_flash_dev *dev, void *data, const size_t len)
+df_flash_query(struct cyg_flash_dev *dev, void *data, size_t len)
{
return len;
}
static int
df_flash_erase_block(struct cyg_flash_dev *dev,
- const cyg_flashaddr_t base)
+ cyg_flashaddr_t base)
{
- cyg_dataflash_flash_dev_config_t *config;
cyg_dataflash_flash_dev_priv_t *priv;
cyg_uint32 page;
int err;
- config = (cyg_dataflash_flash_dev_config_t *) dev->config;
priv = (cyg_dataflash_flash_dev_priv_t *) dev->priv;
- page = priv->start_page + ((base - config->address) /
+ page = priv->start_page + ((base - dev->start) /
cyg_dataflash_get_page_size(&priv->dev));
RETURN_ON_ERROR( cyg_dataflash_aquire(&priv->dev) );
@@ -159,19 +149,17 @@
df_flash_program(struct cyg_flash_dev *dev,
cyg_flashaddr_t base,
const void *data,
- const size_t len)
+ size_t len)
{
- cyg_dataflash_flash_dev_config_t *config;
cyg_dataflash_flash_dev_priv_t *priv;
cyg_uint32 page, pos;
int err;
- config = (cyg_dataflash_flash_dev_config_t *) dev->config;
priv = (cyg_dataflash_flash_dev_priv_t *) dev->priv;
- page = priv->start_page + ((base - config->address) /
+ page = priv->start_page + ((base - dev->start) /
cyg_dataflash_get_page_size(&priv->dev));
- pos = (base - config->address) % cyg_dataflash_get_page_size(&priv->dev);
+ pos = (base - dev->start) % cyg_dataflash_get_page_size(&priv->dev);
RETURN_ON_ERROR( cyg_dataflash_aquire(&priv->dev) );
GOTO_ON_ERROR( cyg_dataflash_mem_to_buf(&priv->dev, 1, page) );
@@ -190,19 +178,17 @@
df_flash_read(struct cyg_flash_dev *dev,
const cyg_flashaddr_t base,
void *data,
- const size_t len)
+ size_t len)
{
- cyg_dataflash_flash_dev_config_t *config;
cyg_dataflash_flash_dev_priv_t *priv;
cyg_uint32 page, pos;
int err;
- config = (cyg_dataflash_flash_dev_config_t *) dev->config;
priv = (cyg_dataflash_flash_dev_priv_t *) dev->priv;
- page = priv->start_page + ((base - config->address) /
+ page = priv->start_page + ((base - dev->start) /
cyg_dataflash_get_page_size(&priv->dev));
- pos = (base - config->address) % cyg_dataflash_get_page_size(&priv->dev);
+ pos = (base - dev->start) % cyg_dataflash_get_page_size(&priv->dev);
RETURN_ON_ERROR( cyg_dataflash_aquire(&priv->dev) );
GOTO_ON_ERROR( cyg_dataflash_mem_to_buf(&priv->dev, 1, page) );
@@ -230,6 +216,7 @@
}
}
+#ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING
static int
df_flash_block_lock(struct cyg_flash_dev *dev,
const cyg_flashaddr_t block_base)
@@ -243,6 +230,7 @@
{
return CYG_DATAFLASH_ERR_INVALID;
}
+#endif
// --------------------------------------------------------------------------