diff packages/devs/flash/atmel/dataflash/current/include/dataflash.h @ 1732:1646bf44203c

* cdl/devs_flash_atmel_dataflash.cdl: * include/dataflash.h: * src/devs_flash_atmel_dataflash.c: * src/devs_flash_atmel_dataflash_flash_dev_funs.c: Atmel DataFlash driver implementation.
author asl
date Tue, 05 Oct 2004 09:19:15 +0000
parents
children 0801d20c7256
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/devs/flash/atmel/dataflash/current/include/dataflash.h
@@ -0,0 +1,229 @@
+#ifndef CYGONCE_DATAFLASH_H
+#define CYGONCE_DATAFLASH_H
+//==========================================================================
+//
+//      dataflash.h
+//
+//      DataFlash series flash driver defines
+//
+//==========================================================================
+//####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+//
+// eCos is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 or (at your option) any later version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with eCos; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
+// at http://sources.redhat.com/ecos/ecos-license/
+// -------------------------------------------
+//####ECOSGPLCOPYRIGHTEND####
+
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    Savin Zlobec <savin@elatec.si> 
+// Date:         2004-08-27
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <pkgconf/hal.h>
+#include <pkgconf/devs_flash_atmel_dataflash.h>
+
+#include <cyg/infra/cyg_type.h>
+#include <cyg/hal/drv_api.h>
+#include <cyg/io/spi.h>
+
+//----------------------------------------------------------------------------
+
+typedef struct cyg_dataflash_dev_info_s
+{
+    cyg_uint8  device_id;        // Device ID 
+    cyg_uint16 page_size;        // Page size in bytes
+    cyg_uint16 page_count;       // Total number of pages
+    cyg_uint8  baddr_bits;       // Bits used for byte address in addressing seq
+    cyg_uint16 block_size;       // Block size in pages
+    cyg_uint16 sector_sizes[64]; // Sector sizes in blocks
+    cyg_uint16 sector_count;     // Total number of sectors 
+} cyg_dataflash_dev_info_t;
+
+typedef struct cyg_dataflash_device_s
+{
+    const cyg_dataflash_dev_info_t *info;    // DataFlash device info
+    cyg_spi_device                 *spi_dev; // SPI device
+    cyg_bool                        polled;  // Polled mode flag
+    cyg_drv_mutex_t                 lock;    // Access lock 
+} cyg_dataflash_device_t;
+
+//----------------------------------------------------------------------------
+
+#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_uint32             page_2size_log; // Page (2^n) size log
+} 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))
+
+#endif // _FLASH_PRIVATE_
+    
+//----------------------------------------------------------------------------
+
+static inline cyg_uint8
+cyg_dataflash_get_device_id(cyg_dataflash_device_t *dev)
+{
+    return dev->info->device_id;
+}
+
+static inline cyg_uint16
+cyg_dataflash_get_page_size(cyg_dataflash_device_t *dev)
+{
+    return dev->info->page_size;
+}
+
+static inline cyg_uint16
+cyg_dataflash_get_page_count(cyg_dataflash_device_t *dev)
+{
+    return dev->info->page_size;
+}
+
+static inline cyg_uint16
+cyg_dataflash_get_block_size(cyg_dataflash_device_t *dev)
+{
+    return dev->info->block_size;
+}
+
+static inline cyg_uint16
+cyg_dataflash_get_sector_size(cyg_dataflash_device_t *dev, cyg_uint8 sector_num)
+{
+    return dev->info->sector_sizes[sector_num];
+}
+
+static inline cyg_uint16
+cyg_dataflash_get_sector_count(cyg_dataflash_device_t *dev)
+{
+    return dev->info->sector_count;
+}
+
+static inline void
+cyg_dataflash_set_polled_operation(cyg_dataflash_device_t *dev, cyg_bool polled)
+{
+    dev->polled = polled;
+}
+
+externC cyg_bool cyg_dataflash_init(cyg_spi_device         *spi_dev, 
+                                    cyg_bool                polled,
+                                    cyg_dataflash_device_t *dev);
+
+externC void cyg_dataflash_aquire(cyg_dataflash_device_t *dev);
+
+externC void cyg_dataflash_release(cyg_dataflash_device_t *dev);
+
+externC cyg_uint16 cyg_dataflash_get_sector_start(cyg_dataflash_device_t *dev,
+                                                  cyg_uint16 sector_num);
+
+externC void cyg_dataflash_read_buf(cyg_dataflash_device_t *dev,
+                                    cyg_uint8               buf_num,
+                                    cyg_uint8              *buf, 
+                                    cyg_uint32              len, 
+                                    cyg_uint32              pos); 
+                       
+externC void cyg_dataflash_write_buf(cyg_dataflash_device_t *dev,
+                                     cyg_uint8               buf_num,
+                                     const cyg_uint8        *buf,
+                                     cyg_uint32              len,
+                                     cyg_uint32              pos);
+
+externC void cyg_dataflash_mem_to_buf(cyg_dataflash_device_t *dev,
+                                      cyg_uint8               buf_num,
+                                      cyg_uint32              page_num,
+                                      cyg_bool                wait); 
+
+externC void cyg_dataflash_program_buf(cyg_dataflash_device_t *dev,
+                                       cyg_uint8               buf_num,
+                                       cyg_uint32              page_num,
+                                       cyg_bool                erase,
+                                       cyg_bool                wait);
+
+externC cyg_bool cyg_dataflash_compare_buf(cyg_dataflash_device_t *dev,
+                                           cyg_uint8               buf_num,
+                                           cyg_uint32              page_num);
+
+externC void cyg_dataflash_erase(cyg_dataflash_device_t *dev,
+                                 cyg_uint32              page_num,
+                                 cyg_bool                wait);
+
+externC void cyg_dataflash_erase_block(cyg_dataflash_device_t *dev,
+                                       cyg_uint32              block_num,
+                                       cyg_bool                wait);
+
+externC void cyg_dataflash_auto_rewrite(cyg_dataflash_device_t *dev,
+                                        cyg_uint8               buf_num,
+                                        cyg_uint32              page_num,
+                                        cyg_bool                wait);
+
+externC void cyg_dataflash_read(cyg_dataflash_device_t *dev, 
+                                cyg_uint8              *buf, 
+                                cyg_uint32              len, 
+                                cyg_uint32              pos);
+
+externC cyg_bool cyg_dataflash_program(cyg_dataflash_device_t *dev, 
+                                       const cyg_uint8        *buf, 
+                                       cyg_uint32             *len, 
+                                       cyg_uint32              pos,
+                                       cyg_bool                erase,
+                                       cyg_bool                verify);
+
+//----------------------------------------------------------------------------
+
+#endif // CYGONCE_DATAFLASH_H
+
+//----------------------------------------------------------------------------
+// End of dataflash.h