#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 /* 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*/