10d09e41aSPaolo Bonzini #ifndef HW_FLASH_H 2175de524SMarkus Armbruster #define HW_FLASH_H 30d09e41aSPaolo Bonzini 40d09e41aSPaolo Bonzini /* NOR flash devices */ 50d09e41aSPaolo Bonzini 6d4842052SMarkus Armbruster #include "exec/hwaddr.h" 7db1015e9SEduardo Habkost #include "qom/object.h" 80d09e41aSPaolo Bonzini 90d09e41aSPaolo Bonzini /* pflash_cfi01.c */ 1016434065SMarkus Armbruster 11e7b62741SMarkus Armbruster #define TYPE_PFLASH_CFI01 "cfi.pflash01" 128063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(PFlashCFI01, PFLASH_CFI01) 1316434065SMarkus Armbruster 1416434065SMarkus Armbruster 1516434065SMarkus Armbruster PFlashCFI01 *pflash_cfi01_register(hwaddr base, 16940d5b13SMarkus Armbruster const char *name, 170d09e41aSPaolo Bonzini hwaddr size, 184be74634SMarkus Armbruster BlockBackend *blk, 19ce14710fSMarkus Armbruster uint32_t sector_len, 2016434065SMarkus Armbruster int width, 210d09e41aSPaolo Bonzini uint16_t id0, uint16_t id1, 220d09e41aSPaolo Bonzini uint16_t id2, uint16_t id3, 230d09e41aSPaolo Bonzini int be); 24e60cf765SPhilippe Mathieu-Daudé BlockBackend *pflash_cfi01_get_blk(PFlashCFI01 *fl); 2516434065SMarkus Armbruster MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl); 262d731dbdSMarkus Armbruster void pflash_cfi01_legacy_drive(PFlashCFI01 *dev, DriveInfo *dinfo); 270d09e41aSPaolo Bonzini 2816434065SMarkus Armbruster /* pflash_cfi02.c */ 2916434065SMarkus Armbruster 30e7b62741SMarkus Armbruster #define TYPE_PFLASH_CFI02 "cfi.pflash02" 318063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(PFlashCFI02, PFLASH_CFI02) 3216434065SMarkus Armbruster 3316434065SMarkus Armbruster 3416434065SMarkus Armbruster PFlashCFI02 *pflash_cfi02_register(hwaddr base, 35940d5b13SMarkus Armbruster const char *name, 3616434065SMarkus Armbruster hwaddr size, 3716434065SMarkus Armbruster BlockBackend *blk, 38ce14710fSMarkus Armbruster uint32_t sector_len, 3916434065SMarkus Armbruster int nb_mappings, 4016434065SMarkus Armbruster int width, 4116434065SMarkus Armbruster uint16_t id0, uint16_t id1, 4216434065SMarkus Armbruster uint16_t id2, uint16_t id3, 4316434065SMarkus Armbruster uint16_t unlock_addr0, 4416434065SMarkus Armbruster uint16_t unlock_addr1, 4516434065SMarkus Armbruster int be); 460d09e41aSPaolo Bonzini 470d09e41aSPaolo Bonzini /* nand.c */ 484be74634SMarkus Armbruster DeviceState *nand_init(BlockBackend *blk, int manf_id, int chip_id); 490d09e41aSPaolo Bonzini void nand_setpins(DeviceState *dev, uint8_t cle, uint8_t ale, 500d09e41aSPaolo Bonzini uint8_t ce, uint8_t wp, uint8_t gnd); 510d09e41aSPaolo Bonzini void nand_getpins(DeviceState *dev, int *rb); 520d09e41aSPaolo Bonzini void nand_setio(DeviceState *dev, uint32_t value); 530d09e41aSPaolo Bonzini uint32_t nand_getio(DeviceState *dev); 540d09e41aSPaolo Bonzini uint32_t nand_getbuswidth(DeviceState *dev); 550d09e41aSPaolo Bonzini 560d09e41aSPaolo Bonzini #define NAND_MFR_TOSHIBA 0x98 570d09e41aSPaolo Bonzini #define NAND_MFR_SAMSUNG 0xec 580d09e41aSPaolo Bonzini #define NAND_MFR_FUJITSU 0x04 590d09e41aSPaolo Bonzini #define NAND_MFR_NATIONAL 0x8f 600d09e41aSPaolo Bonzini #define NAND_MFR_RENESAS 0x07 610d09e41aSPaolo Bonzini #define NAND_MFR_STMICRO 0x20 620d09e41aSPaolo Bonzini #define NAND_MFR_HYNIX 0xad 630d09e41aSPaolo Bonzini #define NAND_MFR_MICRON 0x2c 640d09e41aSPaolo Bonzini 659ab26b0eSCédric Le Goater /* m25p80.c */ 669ab26b0eSCédric Le Goater 67*a7538ca0SCédric Le Goater #define TYPE_M25P80 "m25p80-generic" 68*a7538ca0SCédric Le Goater 699ab26b0eSCédric Le Goater BlockBackend *m25p80_get_blk(DeviceState *dev); 709ab26b0eSCédric Le Goater 710d09e41aSPaolo Bonzini #endif 72