flash.h 4.2 KB
Newer Older
1 2 3 4 5
/*
 * flash.h: flash programming utility - central include file
 *
 * Copyright 2000 Silicon Integrated System Corporation
 * Copyright 2000 Ronald G. Minnich <rminnich@gmail.com>
6
 * Copyright 2005-2007 coresystems GmbH <stepan@coresystems.de>
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 * 
 *	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 of the License, 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; if not, write to the Free Software
 *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

Ronald G. Minnich's avatar
Ronald G. Minnich committed
24 25 26
#ifndef __FLASH_H__
#define __FLASH_H__ 1

27
#if defined(__GLIBC__)
28
#include <sys/io.h>
29 30
#endif

31
#include <unistd.h>
32
#include <stdint.h>
33 34

struct flashchip {
35
	char *name;
36 37 38 39 40 41
	int manufacture_id;
	int model_id;

	int total_size;
	int page_size;

Uwe Hermann's avatar
Uwe Hermann committed
42 43 44 45
	int (*probe) (struct flashchip *flash);
	int (*erase) (struct flashchip *flash);
	int (*write) (struct flashchip *flash, uint8_t *buf);
	int (*read) (struct flashchip *flash, uint8_t *buf);
Ronald G. Minnich's avatar
Ronald G. Minnich committed
46

47 48 49 50 51
	/* some flash devices have an additional
	 * register space
	 */
	volatile uint8_t *virtual_memory;
	volatile uint8_t *virtual_registers;
52 53
};

54 55
extern struct flashchip flashchips[];

56 57 58 59 60 61
/* Please keep this list sorted alphabetically by manufacturer. The first
 * entry of each section should be the manufacturer ID, followed by the
 * list of devices from that manufacturer (sorted by device IDs).
 */

#define AMD_ID			0x01	/* AMD */
Uwe Hermann's avatar
Uwe Hermann committed
62 63 64
#define AM_29F040B		0xA4
#define AM_29F016D		0xAD

65
#define ASD_ID			0x25	/* ASD */
Uwe Hermann's avatar
Uwe Hermann committed
66 67
#define ASD_AE49F2008		0x52

68 69
#define ATMEL_ID		0x1F	/* Atmel */
#define AT_29C040A		0xA4
70
#define AT_29C020		0xDA
Uwe Hermann's avatar
Uwe Hermann committed
71

72
#define MX_ID			0xC2	/* Macronix (MX) */
Uwe Hermann's avatar
Uwe Hermann committed
73 74
#define MX_29F002		0xB0

75
#define SHARP_ID		0xB0	/* Sharp */
Uwe Hermann's avatar
Uwe Hermann committed
76 77
#define SHARP_LHF00L04		0xCF

78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
#define SST_ID			0xBF	/* SST */
#define SST_29EE020A		0x10
#define SST_28SF040		0x04
#define SST_39SF010		0xB5
#define SST_39SF020		0xB6
#define SST_39SF040		0xB7
#define SST_39VF020		0xD6
#define SST_49LF040B		0x50
#define SST_49LF040		0x51
#define SST_49LF020A		0x52
#define SST_49LF080A		0x5B
#define SST_49LF002A		0x57
#define SST_49LF003A		0x1B
#define SST_49LF004A		0x60
#define SST_49LF008A		0x5A
#define SST_49LF004C		0x54
#define SST_49LF008C		0x59
#define SST_49LF016C		0x5C
#define SST_49LF160C		0x4C

#define PMC_ID			0x9D	/* PMC */
#define PMC_49FL002		0x6D
#define PMC_49FL004		0x6E

#define WINBOND_ID		0xDA	/* Winbond */
#define W_29C011		0xC1
#define W_29C020C		0x45
105
#define W_39V040FA		0x34
106 107 108 109 110 111 112 113
#define W_39V040A		0x3D
#define W_39V040B		0x54
#define W_39V080A		0xD0
#define W_49F002U		0x0B
#define W_49V002A		0xB0
#define W_49V002FA		0x32

#define ST_ID			0x20	/* ST */
114 115
#define ST_M29F002B		0x34
#define ST_M29F002T		0xB0	/* M29F002T / M29F002NT */
Uwe Hermann's avatar
Uwe Hermann committed
116
#define ST_M29F400BT		0xD5
117
#define ST_M29F040B		0xE2
Uwe Hermann's avatar
Uwe Hermann committed
118

119 120
#define EMST_ID			0x8c	/* EMST / EFST */
#define EMST_F49B002UA		0x00
Uwe Hermann's avatar
Uwe Hermann committed
121

122
#define MSYSTEMS_ID		0x156f	/* M-Systems */
Uwe Hermann's avatar
Uwe Hermann committed
123 124 125 126
#define MSYSTEMS_MD2200		0xdb	/* ? */
#define MSYSTEMS_MD2800		0x30	/* hmm -- both 0x30 */
#define MSYSTEMS_MD2802		0x30	/* hmm -- both 0x30 */

127 128 129 130 131
#define SYNCMOS_ID		0x40	/* SyncMOS */
#define S29C51001T		0x01
#define S29C51002T		0x02
#define S29C51004T		0x03
#define S29C31004T		0x63
132

133 134
/* function prototypes from udelay.h */

Stefan Reinauer's avatar
Stefan Reinauer committed
135 136
void myusec_delay(int time);
void myusec_calibrate_delay();
137 138

/* pci handling for board/chipset_enable */
139
struct pci_access *pacc;	/* For board and chipset_enable */
Stefan Reinauer's avatar
Stefan Reinauer committed
140
struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device);
141 142
struct pci_dev *pci_card_find(uint16_t vendor, uint16_t device,
			      uint16_t card_vendor, uint16_t card_device);
143

144 145
int board_flash_enable(char *vendor, char *part);	/* board_enable.c */
int chipset_flash_enable(void);	/* chipset_enable.c */
146 147 148 149 150 151 152 153 154

/* physical memory mapping device */

#if defined (__sun) && (defined(__i386) || defined(__amd64))
#  define MEM_DEV "/dev/xsvc"
#else
#  define MEM_DEV "/dev/mem"
#endif

Stefan Reinauer's avatar
Stefan Reinauer committed
155 156
extern int fd_mem;

157
#endif				/* !__FLASH_H__ */