ref: 2459e34d77e2e21ef829c0dfaafd99433899494f
dir: /os/manga/flashif.h/
typedef struct Flash Flash;
/*
* structure defining a flash memory card
*/
struct Flash {
QLock; /* interlock on flash operations */
Flash* next;
/* the following are filled in by devflash before Flash.reset called */
char* name;
void* addr;
ulong size;
void * archdata;
int (*reset)(Flash*);
/* the following are filled in by the reset routine */
int (*eraseall)(Flash*);
int (*erasezone)(Flash*, int);
int (*read)(Flash*, ulong, void*, long); /* reads of correct width and alignment */
int (*write)(Flash*, ulong, void*, long); /* writes of correct width and alignment */
int (*suspend)(Flash*);
int (*resume)(Flash*);
int (*attach)(Flash*);
uchar id; /* flash manufacturer ID */
uchar devid; /* flash device ID */
int width; /* bytes per flash line */
int erasesize; /* size of erasable unit (accounting for width) */
void* data; /* flash type routines' private storage, or nil */
ulong unusable; /* bit mask of unusable sections */
};
/*
* called by link routine of driver for specific flash type: arguments are
* conventional name for card type/model, and card driver's reset routine.
*/
void addflashcard(char*, int (*)(Flash*));
/*
* called by devflash.c:/^flashreset; if flash exists,
* sets type, address, and size in bytes of flash
* and returns 0; returns -1 if flash doesn't exist
*/
int archflashreset(int instance, char*, int, void**, long*, void **archdata);
int archflash12v(int);
void archflashwp(void *archdata, int);
/*
* Architecture specific routines for managing nand devices
*/
/*
* do any device spcific initialisation
*/
void archnand_init(void *archdata);
/*
* if claim is 1, claim device exclusively, and enable it (power it up)
* if claim is 0, release, and disable it (power it down)
* claiming may be as simple as a qlock per device
*/
void archnand_claim(void *archdata, int claim);
/*
* set command latch enable (CLE) and address latch enable (ALE)
* appropriately
*/
void archnand_setCLEandALE(void *archdata, int cle, int ale);
/*
* write a sequence of bytes to the device
*/
void archnand_write(void *archdata, void *buf, int len);
/*
* read a sequence of bytes from the device
* if buf is 0, throw away the data
*/
void archnand_read(void *archdata, void *buf, int len);