Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / utils / devbios / flashchips.c
diff --git a/qemu/roms/openbios/utils/devbios/flashchips.c b/qemu/roms/openbios/utils/devbios/flashchips.c
new file mode 100644 (file)
index 0000000..460a85d
--- /dev/null
@@ -0,0 +1,313 @@
+/*
+ *                     OpenBIOS - free your system! 
+ *              ( firmware/flash device driver for Linux )
+ *                          
+ *  flashchips.c - contains all information about supported flash devices. 
+ *  
+ *  This program is part of a free implementation of the IEEE 1275-1994 
+ *  Standard for Boot (Initialization Configuration) Firmware.
+ *
+ *  Copyright (C) 1998-2004  Stefan Reinauer, <stepan@openbios.org>
+ *
+ *  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; version 2 of the License.
+ *
+ *  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., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
+ *
+ */
+// <-- C++ style comments are for experimental comments only.
+// They will disappear as soon as I fixed all the stuff.
+
+#include "bios.h"
+#include "flashchips.h"
+
+unsigned int currflash=0;
+
+const manufacturer_t manufacturers[] =
+{
+       { "AMD",                0x01 },
+       { "AMI",                0x02 },
+       { "Fairchild",          0x83 },
+       { "Fujitsu",            0x04 },
+       { "GTE",                0x85 },
+       { "Harris",             0x86 },
+       { "Hitachi",            0x07 },
+       { "Inmos",              0x08 },
+       { "Intel",              0x89 },
+       { "I.T.T.",             0x8A },
+       { "Intersil",           0x0B },
+       { "Monolithic Memories",0x8C },
+       { "Mostek",             0x0D },
+       { "Motorola",           0x0E },
+       { "National",           0x8F },
+       { "NEC",                0x10 },
+       { "RCA",                0x91 },
+       { "Raytheon",           0x92 },
+       { "Rockwell",           0x13 },
+       { "Seeq",               0x94 },
+       { "Philips Semi.",      0x15 },
+       { "Synertek",           0x16 },
+       { "Texas Instruments",  0x97 },
+       { "Toshiba",            0x98 },
+       { "Xicor",              0x19 },
+       { "Zilog",              0x1A },
+       { "Eurotechnique",      0x9B },
+       { "Mitsubishi",         0x1C },
+       { "PMC Flash",          0x9D },
+       { "Exel",               0x9E },
+       { "Atmel",              0x1F },
+       { "SGS/Thomson",        0x20 },
+       { "Lattice Semi.",      0xA1 },
+       { "NCR",                0xA2 },
+       { "Wafer Scale Integr.",0x23 },
+       { "IBM",                0xA4 },
+       { "Tristar",            0x25 },
+       { "Visic",              0x26 },
+       { "Intl. CMOS Tech.",   0xA7 },
+       { "SSSI",               0xA8 },
+       { "MicrochipTech.",     0x29 },
+       { "Ricoh Ltd.",         0x2A },
+       { "VLSI",               0xAB },
+       { "Micron Technology",  0x2C },
+       { "Hyundai Elect.",     0xAD },
+       { "OKI Semiconductor",  0xAE },
+       { "ACTEL",              0x2F },
+       { "Sharp",              0xB0 },
+       { "Catalyst",           0x31 },
+       { "Panasonic",          0x32 },
+       { "IDT",                0xB3 },
+       { "Cypress",            0x34 },
+       { "DEC",                0xB5 },
+       { "LSI Logic",          0xB6 },
+       { "Plessey",            0x37 },
+       { "UTMC",               0x38 },
+       { "Thinking Machine",   0xB9 },
+       { "Thomson CSF",        0xBA },
+       { "Integ. CMOS(Vertex)",0x3B },
+       { "Honeywell",          0xBC },
+       { "Tektronix",          0x3D },
+       { "Sun Microsystems",   0x3E },
+       { "SST",                0xBF },
+       { "MOSEL",              0x40 },
+       { "Siemens",            0xC1 },
+       { "Macronix",           0xC2 },
+       { "Xerox",              0x43 },
+       { "Plus Logic",         0xC4 },
+       { "SunDisk",            0x45 },
+       { "Elan Circuit Tech.", 0x46 },
+       { "Europ. Silicon Str.",0xC7 },
+       { "Apple Computer",     0xC8 },
+       { "Xilinx",             0xC9 },
+       { "Compaq",             0x4A },
+       { "Protocol Engines",   0xCB },
+       { "SCI",                0x4C },
+       { "Seiko Instruments",  0xCD },
+       { "Samsung",            0xCE },
+       { "I3 Design System",   0x4F },
+       { "Klic",               0xD0 },
+       { "Crosspoint Sol.",    0x51 },
+       { "Alliance Semicond.", 0x52 },
+       { "Tandem",             0xD3 },
+       { "Hewlett-Packard",    0x54 },
+       { "Intg. Silicon Sol.", 0xD5 },
+       { "Brooktree",          0xD6 },
+       { "New Media",          0x57 },
+       { "MHS Electronic",     0x58 },
+       { "Performance Semi.",  0xD9 },
+       { "Winbond",            0xDA },
+       { "Kawasaki Steel",     0x5B },
+       { "Bright Micro",       0xDC },
+       { "TECMAR",             0x5D },
+       { "Exar",               0x5E },
+       { "PCMCIA",             0xDF },
+       { "Goldstar",           0xE0 },
+       { "Northern Telecom",   0x61 },
+       { "Sanyo",              0x62 },
+       { "Array Microsystems", 0xE3 },
+       { "Crystal Semicond.",  0x64 },
+       { "Analog Devices",     0xE5 },
+       { "PMC-Sierra",         0xE6 },
+       { "Asparix",            0x67 },
+       { "Convex Computer",    0x68 },
+       { "Quality Semicond.",  0xE9 },
+       { "Nimbus Technology",  0xEA },
+       { "Transwitch",         0x6B },
+       { "ITT Intermetall",    0xEC },
+       { "Cannon",             0x6D },
+       { "Altera",             0x6E },
+       { "NEXCOM",             0xEF },
+       { "QUALCOMM",           0x70 },
+       { "Sony",               0xF1 },
+       { "Cray Research",      0xF2 },
+       { "AMS(Austria Micro)", 0x73 },
+       { "Vitesse",            0xF4 },
+       { "Aster Electronics",  0x75 },
+       { "Bay Networks(Synoptic)",     0x76 },
+       { "Zentrum Mikroelec.", 0xF7 },
+       { "TRW",                0xF8 },
+       { "Thesys",             0x79 },
+       { "Solbourne Computer", 0x7A },
+       { "Allied-Signal",      0xFB },
+       { "Dialog",             0x7C },
+       { "Media Vision",       0xFD },
+       { "Level One Commun.",  0xFE },
+       { "Eon",                0x7F },
+
+       { "Unknown",            0x00 }
+};
+
+const flashchip_t flashchips[] =
+{
+       /* AMD */
+       { "29F016B",    0xad01,  5, 2048, 0,   1, 1, (int []) { 0,2048 } },
+       { "29F080B",    0xd501,  5, 1024, 0,   1, 1, (int []) { 0,1024 } },
+       { "29F800BT",   0xd601,  5, 1024, 0,   1, 1, (int []) { 0,1024 } },
+       { "29F800BB",   0x5801,  5, 1024, 0,   1, 1, (int []) { 0,1024 } },
+       { "29F040B",    0xa401,  5,  512, 0,   1, 1, (int []) { 0, 512 } },
+       { "29F400T",    0x2301,  5,  512, 0,   1, 1, (int []) { 0, 512 } },
+       { "29LV004T",   0xb501,  3,  512, 0,   1, 1, (int []) { 0, 512 } },
+       { "29LV400T",   0xb901,  3,  512, 0,   1, 1, (int []) { 0, 512 } },
+       { "29F400B",    0xab01,  5,  512, 0,   1, 1, (int []) { 0, 512 } },
+       { "29LV004B",   0xb601,  3,  512, 0,   1, 1, (int []) { 0, 512 } },
+       { "29LV400B",   0xba01,  3,  512, 0,   1, 1, (int []) { 0, 512 } },
+       { "28F020A",    0x2901, 12,  256, 0,   1, 1, (int []) { 0, 256 } },
+       { "28F020",     0x2a01, 12,  256, 0,   1, 1, (int []) { 0, 256 } },
+       { "29F002T",    0xb001,  5,  256, 0,   1, 1, (int []) { 0, 256 } },
+       { "29LV002T",   0x4001,  3,  256, 0,   1, 1, (int []) { 0, 256 } },
+       { "29LV200T",   0x3b01,  3,  256, 0,   1, 1, (int []) { 0, 256 } },
+       { "29F200T",    0x5101,  5,  256, 0,   1, 1, (int []) { 0, 256 } },
+       { "29F002B",    0x3401,  5,  256, 0,   1, 1, (int []) { 0, 256 } },
+       { "29LV002B",   0xc201,  3,  256, 0,   1, 1, (int []) { 0, 256 } },
+       { "29LV200B",   0xbf01,  3,  256, 0,   1, 1, (int []) { 0, 256 } },
+       { "29F200B",    0x5701,  5,  256, 0,   1, 1, (int []) { 0, 256 } },
+       { "29F010",     0x2001,  5,  128, 0,   1, 1, (int []) { 0, 128 } },
+       { "28F010A",    0xa201, 12,  128, 0,   1, 1, (int []) { 0, 128 } },
+       { "28F010",     0xa701, 12,  128, 0,   1, 1, (int []) { 0, 128 } },
+       { "29F100T",    0xd901,  5,   64, 0,   1, 1, (int []) { 0,  64 } },
+       { "29F100B",    0xdf01,  5,   64, 0,   1, 1, (int []) { 0,  64 } },
+       { "28F512A",    0xae01, 12,   64, 0,   1, 1, (int []) { 0,  64 } },
+       { "28F512",     0x2501, 12,   64, 0,   1, 1, (int []) { 0,  64 } },
+       { "28F256A",    0x2f01, 12,   32, 0,   1, 1, (int []) { 0,  32 } },
+       { "28F256",     0xa101, 12,   32, 0, 128, 1, (int []) { 0,  32 } },
+
+       /* Atmel */
+       { "AT49BV010",  0x851f,  3,  128, 0, 128, 1, (int []) { 0, 128 } },
+//Word { "AT49F1025",  0x851f,  5,  128, 0, 256, 1, (int []) { 0, 128 } },
+       { "AT49x020",   0x0b1f,  5,  256, 0, 128, 1, (int []) { 0, 256 } },
+       { "AT49F040",   0x131f,  5,  512, 0, 128, 1, (int []) { 0, 512 } },
+       { "AT49F010",   0x171f,  5,  128, 0, 128, 1, (int []) { 0, 128 } },
+       { "AT49F080",   0x231f,  5, 1024, 0, 128, 1, (int []) { 0,1024 } },
+       { "AT29C040A",  0xa41f,  5,  512, 1, 256, 4, (int []) { 0, 512 } },
+//Word { "AT29C1024",  0x251f,  3,  128, 0, 128, 0, (int []) { 0, 128 } },
+//Word { "AT29LV1024", 0x261f,  3,  128, 0, 128, 0, (int []) { 0, 128 } },
+       { "AT49F080T",  0xa71f,  5, 1024, 0, 128, 1, (int []) { 0,1024 } },
+       { "AT29BV010A", 0x351f,  3,  128, 1, 128, 4, (int []) { 0, 128 } },
+       { "AT29BV020",  0xba1f,  3,  256, 1, 256, 4, (int []) { 0, 256 } },
+       { "AT29LV256",  0xbc1f,  3,   32, 1,  64, 4, (int []) { 0,  32 } },
+       { "AT29LV512",  0x3d1f,  3,   64, 1, 128, 4, (int []) { 0,  64 } },
+       { "AT29BV040A", 0xc41f,  3,  512, 1, 256, 4, (int []) { 0, 512 } },
+       { "AT29C010A",  0xd51f,  5,  128, 1, 128, 4, (int []) { 0, 128 } },
+       { "AT29C020",   0xda1f,  5,  256, 1, 256, 4, (int []) { 0, 256 } },
+       { "AT29C256",   0xdc1f,  3,   32, 1,  64, 4, (int []) { 0,  32 } },
+       { "AT29C512",   0x5d1f,  5,   64, 1, 128, 4, (int []) { 0,  64 } },
+
+       /* Catalyst */
+       { "CAT28F150T", 0x0431, 12,  192, 1, 128, 3, (int []) { 0, 64,160,168,176,192 } },
+       { "CAT28F150B", 0x8531, 12,  192, 1, 128, 3, (int []) { 0, 16, 24, 32,128, 192 } },
+       { "CAT28F001T", 0x9431, 12,  128, 1, 128, 3, (int []) { 0,112,116,120,128 } },
+       { "CAT28F001B", 0x1531, 12,  128, 1, 128, 3, (int []) { 0,  8, 12, 16,128 } },
+       { "CAT29F002T", 0xb031,  5,  256, 0, 128, 1, (int []) { 0, 64,128,192,224,232,240,256 } },
+       { "CAT29F002B", 0x3431,  5,  256, 0, 128, 1, (int []) { 0, 16, 24, 32, 64,128,192,256 } },
+       { "CAT28F002T", 0x7c31, 12,  256, 1, 128, 3, (int []) { 0,128,224,232,240,256 } },
+       { "CAT28F002B", 0xfd31, 12,  256, 1, 128, 3, (int []) { 0, 16, 24, 32,128,256 } },
+       { "CAT28F020" , 0xbd31, 12,  256, 0,   1, 1, (int []) { 0,256 } },
+//Word { "CAT28F102" , 0x5131, 12,  128, 0,   0, 0, (int []) { 0,128 } },
+       { "CAT28F010" , 0xb431, 12,  128, 0,   1, 1, (int []) { 0,128 } },
+       { "CAT28F512" , 0xb831, 12,   64, 0,   1, 1, (int []) { 0, 64 } },
+       
+       { "29F040",     0xa404,  5,  512, 1,   1, 1, (int []) { 0, 64, 128, 192, 256, 320, 384, 448, 512 } }, /* Fujitsu */
+       
+       
+       /* Intel */
+       { "28F010",     0x3489, 12,  128, 0, 128, 1, (int []) { 0,128 } },
+       { "28F020",     0x3d89, 12,  256, 0, 128, 1, (int []) { 0,256 } },
+       { "28F001BX-T", 0x9489, 12,  128, 1, 128, 3, (int []) { 0,112,116,120,128 } },
+       { "28F001BX-B", 0x9589, 12,  128, 1, 128, 3, (int []) { 0,  8, 12, 16,128 } },
+//Word { "28F400BX-T", 0x7089, 12,  512, 0, 256, 3, (int []) { 0,128,256,384,480,488,496,512 } },
+//Word { "28F400BX-B", 0xF189, 12,  512, 0, 256, 3, (int []) { 0, 16, 24, 32,128,256,384,512 } },
+//Word { "28F200-T",   0xF489, 12,  256, 0, 256, 3, (int []) { 0,128,224,232,240,256} },
+//Word { "28F200-B",   0x7589, 12,  256, 0, 256, 3, (int []) { 0, 16, 24, 32,128,256 } },
+       { "28F016B3-T", 0xd089,  3, 1024, 0,   1, 3, (int []) { 0, 2048 } },
+       { "28F016B3-B", 0xd189,  3, 1024, 0,   1, 3, (int []) { 0, 2048 } },
+       { "28F008B3-T", 0xd289,  3, 1024, 0,   1, 3, (int []) { 0, 1024 } },
+       { "28F008B3-B", 0xd389,  3, 1024, 0,   1, 3, (int []) { 0, 1024 } },
+       { "28F004B3-T", 0xd489,  3,  512, 0, 128, 3, (int []) { 0,128,256,384,480,488,496,512 } },
+       { "28F004B3-B", 0xd589,  3,  512, 0, 128, 3, (int []) { 0, 16, 24, 32,128,256,384,512 } },
+       { "28F004BX-T", 0xF889, 12,  512, 1, 128, 3, (int []) { 0,128,256,384,480,488,496,512 } },
+       { "28F004BX-B", 0x7989, 12,  512, 1, 128, 3, (int []) { 0, 16, 24, 32,128,256,384,512 } },
+       { "28F002-T",   0x7c89, 12,  256, 1, 128, 3, (int []) { 0,128,224,232,240,256 } },
+       { "28F002-B",   0xfd89, 12,  256, 1, 256, 3, (int []) { 0, 16, 24, 32,128,256 } },
+       { "28F008??",   0xa289, 12, 1024, 1,   1, 3, (int []) { 0, 64,128,192,256,320,384,448,512,576,640,704,768,832,896,960,1024 } },
+       { "28F008SA",   0xa189, 12, 1024, 1,   1, 3, (int []) { 0, 64,128,192,256,320,384,448,512,576,640,704,768,832,896,960,1024 } },
+       { "28F004??",   0xad89,  5,  512, 0,   1, 3, (int []) { 0, 512} },
+       { "28F008??",   0xac89,  5, 1024, 0,   1, 3, (int []) { 0,1024} },
+
+       /* Eon */
+       { "E28F004S5",  0x7f8f,  5,  512, 1,   1, 3, (int []) { 0, 64,128,192,256,320,384,448,512 } },
+       { "EN29F002B",  0x977f,  5,  256, 1,   1, 1, (int []) { 0, 16, 24, 32,128,256 } },
+       { "EN29F002T",  0x927f,  5,  256, 1,   1, 1, (int []) { 0,128,224,232,240,256 } },
+       
+       /* SST */
+       { "28EE011",    0x01bf,  5,  128, 0, 128, 0, (int []) { 0, 128 } },
+       { "28EE040",    0x04bf,  5,  512, 0, 128, 0, (int []) { 0, 512 } },
+       { "29EE010",    0x07bf,  5,  128, 1, 128, 0, (int []) { 0, 128 } },
+       { "29x010",     0x08bf,  3,  128, 0, 128, 0, (int []) { 0, 128 } },
+       { "29EE020",    0x10bf,  5,  256, 0, 128, 0, (int []) { 0, 256 } },
+       { "29x020",     0x92bf,  3,  256, 0, 128, 0, (int []) { 0, 256 } },
+       { "29x512",     0x3dbf,  3,   64, 0, 128, 0, (int []) { 0,  64 } },
+       { "29EE512",    0x5dbf,  5,   64, 0, 128, 0, (int []) { 0,  64 } },
+       { "29x020",     0x92bf,  3,  256, 0, 128, 0, (int []) { 0, 256 } },
+       { "39SF020",    0xb6bf,  5,  256, 1, 1, 0x81, (int []) { 0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256 } },
+       { "49LF002A",   0x57bf,  3,  256, 0, 1, 0x81, (int[]) {0,256} },
+       { "49LF003A",   0x1bbf,  3,  384, 0, 1, 0x81, (int[]) {0,384} },
+       { "49LF004A",   0x60bf,  3,  512, 1, 1, 0x09, (int[]) {0, 4, 8, 12, 16, 24,28, 32, 512} },
+       { "49LF008A",   0x5abf,  3, 1024, 0, 1, 0x81, (int[]) {0,1024} },
+       { "49LF020",    0x61bf,  3,  256, 1, 4096, 0, (int[]) {0,256} },
+       { "49LF040",    0x51bf,  3,  512, 1, 4096, 0, (int[]) {0,512} },
+       { "49LF080A",   0x5bbf,  3, 1024, 1, 4096, 0, (int[]) {0,1024} },
+       
+       /* Macronix */
+       { "MX28F1000AP",0x1ac2, 12,  128, 0,   1, 1, (int []) { 0, 16, 32, 48, 64, 80, 96,112,116,120,124,128 } },
+       { "MX28F1000P", 0x91c2, 12,  128, 0,   1, 1, (int []) { 0, 16, 32, 48, 64, 80, 96,112,128 } },
+       { "MX28F1000PC",0xf7c2, 12,  128, 0,   1, 1, (int []) { 0, 16, 32, 48, 64, 80, 96,112,128 } },
+//id?  { "MX28F1000PPC",0x7fc2,12,  128, 0,   1, 1, (int []) { 0, 16, 32, 48, 64, 80, 96,112,116,120,124,128 } },
+       { "MX29F1610A", 0xfac2,  5, 2048, 1, 128, 0, (int []) { 0, 2048} },
+
+       /* Winbond */
+       { "W29EE011",   0xc1da,  5,  128, 1, 128, 0, (int []) { 0, 128 } },
+       { "W29C020",    0x45da,  5,  256, 1, 128, 0, (int []) { 0, 256 } },
+       { "W29C040/042",0x46da,  5,  512, 1, 256, 0, (int []) { 0, 512 } },
+       { "W29EE512",   0xc8da,  5,   64, 1, 128, 0, (int []) { 0,  64 } },
+       { "W29C101",    0x4fda,  5,  128, 1, 256, 0, (int []) { 0, 128 } },
+       { "W49V002",    0xb0da,  3,  256, 1,   1, 1, (int []) { 0, 64, 128, 192, 224, 232, 240, 256 } },
+       //{ "W49F002",    0x0bda,  5,  256, 1,   1, 1, (int []) { 0, 64, 128, 192, 224, 232, 240, 256 } },
+       { "W49F002U",   0x0bda,  5,  256, 1, 1,0x09, (int []) { 0, 128, 224, 232, 240, 256 } }, /* Winbond */
+
+       /* SGS/Thomson */
+       { "M29F002B(N)T", 0xb020,  5,  256, 0,   1, 0,    (int[]) {0, 64, 128, 256 } },
+       { "M29F002B(N)B", 0x3420,  5,  256, 0,   1, 0,    (int[]) {0, 256 } },
+       { "M50FW040",   0x2c20,  3,  512, 1, 128, 0x0b, (int []) { 0, 64, 128, 192, 256, 320, 384, 448, 512 } },
+
+       { "Pm29F002T",  0x1d9d,  5,  256, 1, 1, 0x1, (int []) { 0,128,224,232,240,256 } },
+       /* default entry */
+       { "Unknown",    0x0000,  0,    0, 0,   0, 0, (int []) { 0 } }
+};
+