Files
m68k-bdm/m68k/bdmabstraction/Flash.h
Bernd Mueller adfd70813f initial push
2026-06-17 13:44:30 +02:00

259 lines
7.8 KiB
C

#ifndef Flash_Included_M
#define Flash_Included_M
/* @#Copyright:
* Copyright (c) 1999, Rolf Fiedler.
* Copyright (c) 1999-2000, Brett Wuth.
*/
/* @#License:
* This program 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.
*
* This program 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 this program; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* File: Flash.h
* Purpose: Algorithm for manipulating flash independent of access
* method.
* Author: Brett Wuth
* Created: 2000-04-15
*
* Initials:
* BCW - Brett Wuth
* @#[ContactWuth:
* Phone: (403) 627-2460
* E-mail: support@castrov.cuug.ab.ca, wuth@acm.org]
*
* #@[MultiProject:
* MultiProject@castrov.cuug.ab.ca Flash Flash.h
* MultiProject@castrov.cuug.ab.ca CVSROOT=:ext:wuth@hulk.adomo.com:/home/cvs linux-development/bdm-fiedler debug/bdm_abstraction/Flash.h
* MultiProject@castrov.cuug.ab.ca CVSROOT=:ext:wuth@hulk.adomo.com:/home/cvs linux-development/ThinClientFlashWrite Flash.h
*
* This file is shared among multiple projects. The normal way to so
* is to create a separate project and have this project depend on it,
* perhaps linking to a library. But for whatever reason this project
* requires the file to be included with it.
*
* To keep your copy of this file in sync with the other copies add
* your e-mail address, the project name and file path to the list
* above. E-mail a copy of the file to the first address in the list
* now and whenever there are changes.]
*
* HISTORY:
* $Log: Flash.h,v $
* Revision 1.1 2003/12/29 22:18:49 codewiz
* Move tools/bdm_abstraction to m68k/bdmabstraction and autoconfiscate.
*
* Revision 1.2 2003/07/04 22:33:01 codewiz
* Applied SST block-erase patch.
*
* Revision 1.1 2003/06/03 15:42:04 codewiz
* Import userland tools from bdm-fiedler
*
* Revision 1.4 2000/08/03 06:29:18 wuth
* MultiProject Sync; Support Micron-style flash; Report flash model
*
* Revision 1.3 2000/07/25 13:51:09 wuth
* Working sector erase. Better error reports.
*
* Revision 1.2 2000/07/14 18:38:55 wuth
* Flash error status; Fix sector erase support; Command line sector erase
*
* Revision 1.1 2000/04/20 04:56:23 wuth
* GPL. Abstract flash interface.
*
* @#[BasedOnTemplate: template.h version 2]
*/
#include <stdlib.h> /* size_t */
typedef enum FlashError_en {
FlashErrorOkay_c, /* no error */
FlashErrorReadAccess_c, /* can't read flash */
FlashErrorWriteAccess_c, /* can't write to flash */
FlashErrorTimeOut_c, /* flash's internal program timed out */
FlashErrorEraseFail_c, /* flash's internal erase program failed */
FlashErrorWriteFail_c, /* flash's internal write program failed */
FlashErrorProtected_c, /* flash is protected from modification */
/* flash produced contents that are unexpected */
FlashErrorUnexpected_c,
/* the specified width of the flash is invalid or not supported */
FlashErrorWidth_c,
/* the style of flash is not supported */
FlashErrorStyle_c,
FlashErrorCount_c /* number of Flash Errors */
} FlashError_t;
extern char const *FlashErrorDescriptionEnglish[FlashErrorCount_c];
typedef enum FlashStyle_en {
FlashStyleUndefined_c,
FlashStyleAMD_c,
FlashStyleMicron_c,
FlashStyleCount_c /* number of Flash Styles */
} FlashStyle_t;
extern char const *FlashStyleName[FlashStyleCount_c];
typedef unsigned short FlashID_t;
typedef enum FlashManufacturer_en {
FlashManufacturerAMD_c = 0x01,
FlashManufacturerFujitsu_c = 0x04,
FlashManufacturerSGSThomson_c = 0x20,
FlashManufacturerAtmel_c = 0x1F,
FlashManufacturerMicron_c = 0x89,
FlashManufacturerTexasInstruments_c = 0x97,
FlashManufacturerHyundai_c = 0xAD,
FlashManufacturerSST_c = 0xBF,
} FlashManufacturer_t;
char const *
FlashManufacturerName( FlashManufacturer_t Manufacturer );
typedef
FlashError_t
(*FlashElementReadFunc_t)( void *UserData,
unsigned long Location,
unsigned int BytesWide, /* what type of read */
void /*out*/ *Element );
typedef
FlashError_t
(*FlashElementWriteFunc_t)( void *UserData,
unsigned long Location,
unsigned int BytesWide, /* what type of write */
void const *Element );
/* Parameters passed to flash routines.
* This is object-based coding to reduce the proliferation
* of arguments passed to each function.
*/
typedef struct Flash_s {
/* Pointer to data which is used by generic Read and Write
* functions. The actual data is of a type specific to the
* particular functions defined. */
void *UserData;
/* Generic function read a single element out of the array of
* interlaced flash chips. The size of an element is defined by
* ChipWidthBytes. */
FlashElementReadFunc_t Read;
/* Generic function read a single element out of the array of
* interlaced flash chips. The size of an element is defined by
* ChipWidthBytes. */
FlashElementWriteFunc_t Write;
/* The number of bytes written or read in a single access */
unsigned int ChipWidthBytes;
/* Whether the hardware accessing the flash is big-endian or
* little-endian. This is not necessarily the endianness of the CPU
* on which this code is executing, because the generic Read and
* Write functions may fetch the data through some other machine.
* Such happens when an Intel-based computer manipulates the flash
* through a BDM cable connected to a Motorola CPU. The flash
* provides status information on the least significant bits. */
int/*Bool*/ BigEndian;
/* The number of flash chips of the same type which are interleaved.
* For instance, if ChipWidthBytes == 2, one chip may provide bytes
* 0, 1, 4, 5, 8, 9, etc. And another chip provides bytes 2, 3, 6,
* 7, 10, 11, etc. */
unsigned int NumParallelChips;
/* The general type of the flash. Different styles have radically
* different algorithms for burning and erasing. */
FlashStyle_t Style;
} Flash_t;
/* Initialiaze the Flash structure */
FlashError_t
FlashInit( Flash_t /*out*/ *Flash,
void *UserData,
FlashElementReadFunc_t Read,
FlashElementWriteFunc_t Write,
unsigned int ChipWidthBytes,
int/*Bool*/ BigEndian,
unsigned int NumParallelChips );
/* store into flash */
FlashError_t
FlashWrite( Flash_t const *Flash,
unsigned long Location,
void const *Data,
size_t Size /*actual rounded up by ChipWidthBytes*/ );
/* erase the whole flash */
FlashError_t
FlashErase( Flash_t const *Flash );
/* erase one sector of the flash */
FlashError_t
FlashEraseSector( Flash_t const *Flash,
unsigned long OffsetInFlash /* sector identified by offset */ );
/* erase one block of the flash */
FlashError_t
FlashEraseBlock( Flash_t const *Flash,
unsigned long OffsetInFlash /* sector identified by offset */ );
typedef struct FlashInfo_s {
FlashID_t ID;
unsigned long Size;
unsigned long loend; /* start of range of sectors all the same size */
unsigned long hiend; /* end of range of sectors all the same size */
unsigned long sec_size; /* size of sectors which are all the same size */
char const *Model;
} FlashInfo_t;
/*sets Flash->Style */
FlashError_t
FlashProbe( Flash_t *Flash );
/* leaves flash in Array Read mode */
FlashError_t
FlashIDRead( Flash_t const *Flash,
FlashID_t /*out*/ *ID );
FlashError_t
FlashDetect( Flash_t const *Flash,
FlashInfo_t const * /*out*/ *FlashInfo );
#endif /* Flash_Included_M */
/*** Emacs configuration ***/
/* Local Variables: */
/* mode:C */
/* End: */
/*EOF*/