Revert "Revert "and added files""
[bcm963xx.git] / shared / src / flash_api.c
diff --git a/shared/src/flash_api.c b/shared/src/flash_api.c
new file mode 100755 (executable)
index 0000000..9ac425d
--- /dev/null
@@ -0,0 +1,253 @@
+/*
+<:copyright-broadcom
+
+ Copyright (c) 2005 Broadcom Corporation
+ All Rights Reserved
+ No portions of this material may be reproduced in any form without the
+ written permission of:
+          Broadcom Corporation
+          16215 Alton Parkway
+          Irvine, California 92619
+ All information contained in this document is Broadcom Corporation
+ company private, proprietary, and trade secret.
+
+:>
+*/
+/***************************************************************************
+ * File Name  : flash_api.c
+ *
+ * Description: This file contains the implementation of the wrapper functions
+ *              for the flash device interface.
+ ***************************************************************************/
+
+/** Includes. */
+#ifdef _CFE_                                                
+#include "lib_types.h"
+#include "lib_printf.h"
+#include "lib_string.h"
+#define printk  printf
+#else // Linux
+#include <linux/kernel.h>
+#endif
+
+#include "bcmtypes.h"
+#include "board.h"
+#include "flash_api.h"
+
+
+/** Defines. **/
+#ifndef NULL
+#define NULL 0
+#endif
+
+#if !defined(INC_CFI_FLASH_DRIVER)
+#define INC_CFI_FLASH_DRIVER        1
+#endif
+
+#if !defined(INC_SPI_FLASH_DRIVER)
+#if defined(CONFIG_BCM96348) || defined(BCM96338)
+#define INC_SPI_FLASH_DRIVER        1
+#else
+#define INC_SPI_FLASH_DRIVER        0
+#endif
+#endif
+
+
+/** Externs. **/
+#if (INC_CFI_FLASH_DRIVER==1)
+extern int cfi_flash_init(flash_device_info_t **flash_info);
+#else
+#define cfi_flash_init(x)           FLASH_API_ERROR
+#endif
+
+#if (INC_SPI_FLASH_DRIVER==1)
+extern int spi_flash_init(flash_device_info_t **flash_info);
+#else
+#define spi_flash_init(x)           FLASH_API_ERROR
+#endif
+
+
+/** Variables. **/
+flash_device_info_t *g_flash_info = NULL;
+int g_include_cfi_flash_driver = INC_CFI_FLASH_DRIVER; 
+int g_include_spi_flash_driver = INC_SPI_FLASH_DRIVER; 
+
+
+/***************************************************************************
+ * Function Name: flash_init
+ * Description  : Initialize flash part.
+ * Returns      : FLASH_API_OK or FLASH_API_ERROR
+ ***************************************************************************/
+int flash_init(void)
+{
+    int ret = FLASH_API_ERROR;
+    flash_device_info_t *flash_info = NULL;
+    unsigned short cfi_devid = 0xffff;
+    unsigned short spi_devid = 0xffff;
+    char *type = "";
+
+    if( g_include_cfi_flash_driver )
+    {
+        ret = cfi_flash_init( &flash_info );
+        if( ret == FLASH_API_OK )
+        {
+            g_flash_info = flash_info;
+            type = "Parallel";
+        }
+        else
+            if( flash_info )
+                cfi_devid = flash_info->flash_device_id;
+    }
+
+    if( ret != FLASH_API_OK && g_include_spi_flash_driver )
+    {
+        ret = spi_flash_init( &flash_info );
+        if( ret == FLASH_API_OK )
+        {
+            g_flash_info = flash_info;
+            type = "Serial";
+        }
+        else
+            if( flash_info )
+                spi_devid = flash_info->flash_device_id;
+    }
+
+    if( ret == FLASH_API_OK )
+    {
+        /* Flash initialization OK. */
+        printk( "%s flash device: name %s, id 0x%4.4x, size %dKB\n", type,
+            g_flash_info->flash_device_name, g_flash_info->flash_device_id,
+            flash_get_total_size() / 1024 );
+    }
+    else
+    {
+        /* Flash initialization error. */
+        if( cfi_devid != 0xffff && cfi_devid != 0x0000 )
+        {
+            printk( "Parallel flash device id %4.4x is not supported.\n",
+                cfi_devid );
+        }
+        else
+            if( spi_devid != 0xffff && spi_devid != 0x0000 )
+            {
+                printk( "Serial flash device id %4.4x is not supported.\n",
+                    spi_devid );
+            }
+            else
+                printk( "Flash device is not found.\n" );
+    }
+
+    return( ret );
+} /* flash_init */
+
+/***************************************************************************
+ * Function Name: flash_sector_erase_int
+ * Description  : Erase the specfied flash sector.
+ * Returns      : FLASH_API_OK or FLASH_API_ERROR
+ ***************************************************************************/
+int flash_sector_erase_int(unsigned short sector)
+{
+    return( (g_flash_info)
+        ? (*g_flash_info->fn_flash_sector_erase_int) (sector)
+        : FLASH_API_ERROR );
+} /* flash_sector_erase_int */
+
+/***************************************************************************
+ * Function Name: flash_read_buf
+ * Description  : Reads from flash memory.
+ * Returns      : number of bytes read or FLASH_API_ERROR
+ ***************************************************************************/
+int flash_read_buf(unsigned short sector, int offset, unsigned char *buffer,
+    int numbytes)
+{
+    return( (g_flash_info)
+        ? (*g_flash_info->fn_flash_read_buf) (sector, offset, buffer, numbytes)
+        : FLASH_API_ERROR );
+} /* flash_read_buf */
+
+/***************************************************************************
+ * Function Name: flash_write_buf
+ * Description  : Writes to flash memory.
+ * Returns      : number of bytes written or FLASH_API_ERROR
+ ***************************************************************************/
+int flash_write_buf(unsigned short sector, int offset, unsigned char *buffer,
+    int numbytes)
+{
+    return( (g_flash_info)
+        ? (*g_flash_info->fn_flash_write_buf) (sector, offset, buffer, numbytes)
+        : FLASH_API_ERROR );
+} /* flash_write_buf */
+
+/***************************************************************************
+ * Function Name: flash_get_numsectors
+ * Description  : Returns the number of sectors in the flash device.
+ * Returns      : Number of sectors in the flash device.
+ ***************************************************************************/
+int flash_get_numsectors(void)
+{
+    return( (g_flash_info)
+        ? (*g_flash_info->fn_flash_get_numsectors) ()
+        : FLASH_API_ERROR );
+} /* flash_get_numsectors */
+
+/***************************************************************************
+ * Function Name: flash_get_sector_size
+ * Description  : Returns the number of bytes in the specfied flash sector.
+ * Returns      : Number of bytes in the specfied flash sector.
+ ***************************************************************************/
+int flash_get_sector_size(unsigned short sector)
+{
+    return( (g_flash_info)
+        ? (*g_flash_info->fn_flash_get_sector_size) (sector)
+        : FLASH_API_ERROR );
+} /* flash_get_sector_size */
+
+/***************************************************************************
+ * Function Name: flash_get_memptr
+ * Description  : Returns the base MIPS memory address for the specfied flash
+ *                sector.
+ * Returns      : Base MIPS memory address for the specfied flash sector.
+ ***************************************************************************/
+unsigned char *flash_get_memptr(unsigned short sector)
+{
+    return( (g_flash_info)
+        ? (*g_flash_info->fn_flash_get_memptr) (sector)
+        : NULL );
+} /* flash_get_memptr */
+
+/***************************************************************************
+ * Function Name: flash_get_blk
+ * Description  : Returns the flash sector for the specfied MIPS address.
+ * Returns      : Flash sector for the specfied MIPS address.
+ ***************************************************************************/
+int flash_get_blk(int addr)
+{
+    return( (g_flash_info)
+        ? (*g_flash_info->fn_flash_get_blk) (addr)
+        : FLASH_API_ERROR );
+} /* flash_get_blk */
+
+/***************************************************************************
+ * Function Name: flash_get_total_size
+ * Description  : Returns the number of bytes in the flash device.
+ * Returns      : Number of bytes in the flash device.
+ ***************************************************************************/
+int flash_get_total_size(void)
+{
+    return( (g_flash_info)
+        ? (*g_flash_info->fn_flash_get_total_size) ()
+        : FLASH_API_ERROR );
+} /* flash_get_total_size */
+
+/***************************************************************************
+ * Function Name: flash_get_total_memory_mapped_size
+ * Description  : Returns the number of bytes in the flash device.
+ * Returns      : Number of bytes in the flash device.
+ ***************************************************************************/
+int flash_get_total_memory_mapped_size(void)
+{
+    return( (g_flash_info)
+        ? (*g_flash_info->fn_flash_get_total_memory_mapped_size) ()
+        : FLASH_API_ERROR );
+} /* flash_get_total_memory_mapped_size */
+