1*0d6140beSAndroid Build Coastguard Worker /* 2*0d6140beSAndroid Build Coastguard Worker * This file is part of the flashrom project. 3*0d6140beSAndroid Build Coastguard Worker * 4*0d6140beSAndroid Build Coastguard Worker * Copyright (C) 2009 Carl-Daniel Hailfinger 5*0d6140beSAndroid Build Coastguard Worker * 6*0d6140beSAndroid Build Coastguard Worker * This program is free software; you can redistribute it and/or modify 7*0d6140beSAndroid Build Coastguard Worker * it under the terms of the GNU General Public License as published by 8*0d6140beSAndroid Build Coastguard Worker * the Free Software Foundation; version 2 of the License. 9*0d6140beSAndroid Build Coastguard Worker * 10*0d6140beSAndroid Build Coastguard Worker * This program is distributed in the hope that it will be useful, 11*0d6140beSAndroid Build Coastguard Worker * but WITHOUT ANY WARRANTY; without even the implied warranty of 12*0d6140beSAndroid Build Coastguard Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*0d6140beSAndroid Build Coastguard Worker * GNU General Public License for more details. 14*0d6140beSAndroid Build Coastguard Worker * 15*0d6140beSAndroid Build Coastguard Worker * Header file for flash chip drivers. Included from flash.h. 16*0d6140beSAndroid Build Coastguard Worker * As a general rule, every function listed here should take a pointer to 17*0d6140beSAndroid Build Coastguard Worker * struct flashctx as first parameter. 18*0d6140beSAndroid Build Coastguard Worker */ 19*0d6140beSAndroid Build Coastguard Worker 20*0d6140beSAndroid Build Coastguard Worker #ifndef __CHIPDRIVERS_H__ 21*0d6140beSAndroid Build Coastguard Worker #define __CHIPDRIVERS_H__ 1 22*0d6140beSAndroid Build Coastguard Worker 23*0d6140beSAndroid Build Coastguard Worker #include "flash.h" /* for chipaddr and flashctx */ 24*0d6140beSAndroid Build Coastguard Worker 25*0d6140beSAndroid Build Coastguard Worker /* spi.c */ 26*0d6140beSAndroid Build Coastguard Worker int spi_aai_write(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 27*0d6140beSAndroid Build Coastguard Worker int spi_chip_write_256(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 28*0d6140beSAndroid Build Coastguard Worker int spi_chip_read(struct flashctx *flash, uint8_t *buf, unsigned int start, int unsigned len); 29*0d6140beSAndroid Build Coastguard Worker bool spi_probe_opcode(const struct flashctx *flash, uint8_t opcode); 30*0d6140beSAndroid Build Coastguard Worker 31*0d6140beSAndroid Build Coastguard Worker /* spi25.c */ 32*0d6140beSAndroid Build Coastguard Worker int probe_spi_rdid(struct flashctx *flash); 33*0d6140beSAndroid Build Coastguard Worker int probe_spi_rdid4(struct flashctx *flash); 34*0d6140beSAndroid Build Coastguard Worker int probe_spi_rems(struct flashctx *flash); 35*0d6140beSAndroid Build Coastguard Worker int probe_spi_res1(struct flashctx *flash); 36*0d6140beSAndroid Build Coastguard Worker int probe_spi_res2(struct flashctx *flash); 37*0d6140beSAndroid Build Coastguard Worker int probe_spi_res3(struct flashctx *flash); 38*0d6140beSAndroid Build Coastguard Worker int probe_spi_at25f(struct flashctx *flash); 39*0d6140beSAndroid Build Coastguard Worker int spi_write_enable(struct flashctx *flash); 40*0d6140beSAndroid Build Coastguard Worker int spi_write_disable(struct flashctx *flash); 41*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_20(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 42*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_21(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 43*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_50(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 44*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_52(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 45*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_53(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 46*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_5c(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 47*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_60(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 48*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_62(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 49*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_81(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 50*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_c4(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 51*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_c7(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 52*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_d7(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 53*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_d8(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 54*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_db(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 55*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_dc(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 56*0d6140beSAndroid Build Coastguard Worker enum block_erase_func spi25_get_erasefn_from_opcode(uint8_t opcode); 57*0d6140beSAndroid Build Coastguard Worker const uint8_t *spi_get_opcode_from_erasefn(enum block_erase_func func); 58*0d6140beSAndroid Build Coastguard Worker int spi_chip_write_1(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 59*0d6140beSAndroid Build Coastguard Worker int spi_nbyte_read(struct flashctx *flash, unsigned int addr, uint8_t *bytes, unsigned int len); 60*0d6140beSAndroid Build Coastguard Worker int spi_read_chunked(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len, unsigned int chunksize); 61*0d6140beSAndroid Build Coastguard Worker int spi_write_chunked(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len, unsigned int chunksize); 62*0d6140beSAndroid Build Coastguard Worker int spi_enter_4ba(struct flashctx *flash); 63*0d6140beSAndroid Build Coastguard Worker int spi_exit_4ba(struct flashctx *flash); 64*0d6140beSAndroid Build Coastguard Worker int spi_set_extended_address(struct flashctx *, uint8_t addr_high); 65*0d6140beSAndroid Build Coastguard Worker 66*0d6140beSAndroid Build Coastguard Worker 67*0d6140beSAndroid Build Coastguard Worker /* spi25_statusreg.c */ 68*0d6140beSAndroid Build Coastguard Worker int spi_read_register(const struct flashctx *flash, enum flash_reg reg, uint8_t *value); 69*0d6140beSAndroid Build Coastguard Worker int spi_write_register(const struct flashctx *flash, enum flash_reg reg, uint8_t value); 70*0d6140beSAndroid Build Coastguard Worker void spi_prettyprint_status_register_bit(uint8_t status, int bit); 71*0d6140beSAndroid Build Coastguard Worker 72*0d6140beSAndroid Build Coastguard Worker /* sfdp.c */ 73*0d6140beSAndroid Build Coastguard Worker int probe_spi_sfdp(struct flashctx *flash); 74*0d6140beSAndroid Build Coastguard Worker 75*0d6140beSAndroid Build Coastguard Worker /* opaque.c */ 76*0d6140beSAndroid Build Coastguard Worker int probe_opaque(struct flashctx *flash); 77*0d6140beSAndroid Build Coastguard Worker int read_opaque(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len); 78*0d6140beSAndroid Build Coastguard Worker int write_opaque(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 79*0d6140beSAndroid Build Coastguard Worker int erase_opaque(struct flashctx *flash, unsigned int blockaddr, unsigned int blocklen); 80*0d6140beSAndroid Build Coastguard Worker 81*0d6140beSAndroid Build Coastguard Worker /* at45db.c */ 82*0d6140beSAndroid Build Coastguard Worker int probe_spi_at45db(struct flashctx *flash); 83*0d6140beSAndroid Build Coastguard Worker int spi_prettyprint_status_register_at45db(struct flashctx *flash); 84*0d6140beSAndroid Build Coastguard Worker int spi_disable_blockprotect_at45db(struct flashctx *flash); 85*0d6140beSAndroid Build Coastguard Worker int spi_read_at45db(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len); 86*0d6140beSAndroid Build Coastguard Worker int spi_read_at45db_e8(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len); 87*0d6140beSAndroid Build Coastguard Worker int spi_write_at45db(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 88*0d6140beSAndroid Build Coastguard Worker int spi_erase_at45db_page(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 89*0d6140beSAndroid Build Coastguard Worker int spi_erase_at45db_block(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 90*0d6140beSAndroid Build Coastguard Worker int spi_erase_at45db_sector(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 91*0d6140beSAndroid Build Coastguard Worker int spi_erase_at45db_chip(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 92*0d6140beSAndroid Build Coastguard Worker int spi_erase_at45cs_sector(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 93*0d6140beSAndroid Build Coastguard Worker 94*0d6140beSAndroid Build Coastguard Worker /* 82802ab.c */ 95*0d6140beSAndroid Build Coastguard Worker uint8_t wait_82802ab(struct flashctx *flash); 96*0d6140beSAndroid Build Coastguard Worker int probe_82802ab(struct flashctx *flash); 97*0d6140beSAndroid Build Coastguard Worker int erase_block_82802ab(struct flashctx *flash, unsigned int page, unsigned int pagesize); 98*0d6140beSAndroid Build Coastguard Worker int write_82802ab(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 99*0d6140beSAndroid Build Coastguard Worker void print_status_82802ab(uint8_t status); 100*0d6140beSAndroid Build Coastguard Worker blockprotect_func_t *lookup_82802ab_blockprotect_func_ptr(const struct flashchip *const chip); 101*0d6140beSAndroid Build Coastguard Worker 102*0d6140beSAndroid Build Coastguard Worker /* jedec.c */ 103*0d6140beSAndroid Build Coastguard Worker uint8_t oddparity(uint8_t val); 104*0d6140beSAndroid Build Coastguard Worker void toggle_ready_jedec(const struct flashctx *flash, chipaddr dst); 105*0d6140beSAndroid Build Coastguard Worker void data_polling_jedec(const struct flashctx *flash, chipaddr dst, uint8_t data); 106*0d6140beSAndroid Build Coastguard Worker int probe_jedec(struct flashctx *flash); 107*0d6140beSAndroid Build Coastguard Worker int probe_jedec_29gl(struct flashctx *flash); 108*0d6140beSAndroid Build Coastguard Worker int write_jedec(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 109*0d6140beSAndroid Build Coastguard Worker int write_jedec_1(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 110*0d6140beSAndroid Build Coastguard Worker int erase_sector_jedec(struct flashctx *flash, unsigned int page, unsigned int pagesize); 111*0d6140beSAndroid Build Coastguard Worker int erase_block_jedec(struct flashctx *flash, unsigned int page, unsigned int blocksize); 112*0d6140beSAndroid Build Coastguard Worker int erase_chip_block_jedec(struct flashctx *flash, unsigned int page, unsigned int blocksize); 113*0d6140beSAndroid Build Coastguard Worker 114*0d6140beSAndroid Build Coastguard Worker blockprotect_func_t *lookup_jedec_blockprotect_func_ptr(const struct flashchip *const chip); 115*0d6140beSAndroid Build Coastguard Worker int printlock_regspace2_uniform_64k(struct flashctx *flash); 116*0d6140beSAndroid Build Coastguard Worker int printlock_regspace2_block_eraser_0(struct flashctx *flash); 117*0d6140beSAndroid Build Coastguard Worker int printlock_regspace2_block_eraser_1(struct flashctx *flash); 118*0d6140beSAndroid Build Coastguard Worker 119*0d6140beSAndroid Build Coastguard Worker /* sst28sf040.c */ 120*0d6140beSAndroid Build Coastguard Worker int erase_chip_28sf040(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 121*0d6140beSAndroid Build Coastguard Worker int erase_sector_28sf040(struct flashctx *flash, unsigned int address, unsigned int sector_size); 122*0d6140beSAndroid Build Coastguard Worker int write_28sf040(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 123*0d6140beSAndroid Build Coastguard Worker int unprotect_28sf040(struct flashctx *flash); 124*0d6140beSAndroid Build Coastguard Worker int protect_28sf040(struct flashctx *flash); 125*0d6140beSAndroid Build Coastguard Worker 126*0d6140beSAndroid Build Coastguard Worker /* sst49lfxxxc.c */ 127*0d6140beSAndroid Build Coastguard Worker int erase_sector_49lfxxxc(struct flashctx *flash, unsigned int address, unsigned int sector_size); 128*0d6140beSAndroid Build Coastguard Worker 129*0d6140beSAndroid Build Coastguard Worker /* sst_fwhub.c */ 130*0d6140beSAndroid Build Coastguard Worker int printlock_sst_fwhub(struct flashctx *flash); 131*0d6140beSAndroid Build Coastguard Worker int unlock_sst_fwhub(struct flashctx *flash); 132*0d6140beSAndroid Build Coastguard Worker 133*0d6140beSAndroid Build Coastguard Worker /* s25f.c */ 134*0d6140beSAndroid Build Coastguard Worker int probe_spi_big_spansion(struct flashctx *flash); 135*0d6140beSAndroid Build Coastguard Worker int s25fl_block_erase(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 136*0d6140beSAndroid Build Coastguard Worker int s25fs_block_erase_d8(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 137*0d6140beSAndroid Build Coastguard Worker 138*0d6140beSAndroid Build Coastguard Worker /* w39.c */ 139*0d6140beSAndroid Build Coastguard Worker int printlock_w39f010(struct flashctx * flash); 140*0d6140beSAndroid Build Coastguard Worker int printlock_w39l010(struct flashctx * flash); 141*0d6140beSAndroid Build Coastguard Worker int printlock_w39l020(struct flashctx * flash); 142*0d6140beSAndroid Build Coastguard Worker int printlock_w39l040(struct flashctx * flash); 143*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040a(struct flashctx *flash); 144*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040b(struct flashctx *flash); 145*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040c(struct flashctx *flash); 146*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040fa(struct flashctx *flash); 147*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040fb(struct flashctx *flash); 148*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040fc(struct flashctx *flash); 149*0d6140beSAndroid Build Coastguard Worker int printlock_w39v080a(struct flashctx *flash); 150*0d6140beSAndroid Build Coastguard Worker int printlock_w39v080fa(struct flashctx *flash); 151*0d6140beSAndroid Build Coastguard Worker int printlock_w39v080fa_dual(struct flashctx *flash); 152*0d6140beSAndroid Build Coastguard Worker int printlock_at49f(struct flashctx *flash); 153*0d6140beSAndroid Build Coastguard Worker 154*0d6140beSAndroid Build Coastguard Worker /* w29ee011.c */ 155*0d6140beSAndroid Build Coastguard Worker int probe_w29ee011(struct flashctx *flash); 156*0d6140beSAndroid Build Coastguard Worker bool w29ee011_can_override(const char *const chip_name, const char *const override_chip); 157*0d6140beSAndroid Build Coastguard Worker 158*0d6140beSAndroid Build Coastguard Worker /* stm50.c */ 159*0d6140beSAndroid Build Coastguard Worker int erase_sector_stm50(struct flashctx *flash, unsigned int block, unsigned int blocksize); 160*0d6140beSAndroid Build Coastguard Worker 161*0d6140beSAndroid Build Coastguard Worker /* en29lv640b.c */ 162*0d6140beSAndroid Build Coastguard Worker int probe_en29lv640b(struct flashctx *flash); 163*0d6140beSAndroid Build Coastguard Worker int write_en29lv640b(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 164*0d6140beSAndroid Build Coastguard Worker 165*0d6140beSAndroid Build Coastguard Worker /* edi.c */ 166*0d6140beSAndroid Build Coastguard Worker int edi_chip_block_erase(struct flashctx *flash, unsigned int page, unsigned int size); 167*0d6140beSAndroid Build Coastguard Worker int edi_chip_write(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); 168*0d6140beSAndroid Build Coastguard Worker int edi_chip_read(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len); 169*0d6140beSAndroid Build Coastguard Worker int edi_probe_kb9012(struct flashctx *flash); 170*0d6140beSAndroid Build Coastguard Worker 171*0d6140beSAndroid Build Coastguard Worker /* spi95.c */ 172*0d6140beSAndroid Build Coastguard Worker int probe_spi_st95(struct flashctx *flash); 173*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_emulation(struct flashctx *flash, unsigned int addr, unsigned int blocklen); 174*0d6140beSAndroid Build Coastguard Worker 175*0d6140beSAndroid Build Coastguard Worker /* writeprotect_ranges.c */ 176*0d6140beSAndroid Build Coastguard Worker void decode_range_spi25(size_t *start, size_t *len, const struct wp_bits *, size_t chip_len); 177*0d6140beSAndroid Build Coastguard Worker void decode_range_spi25_64k_block(size_t *start, size_t *len, const struct wp_bits *, size_t chip_len); 178*0d6140beSAndroid Build Coastguard Worker void decode_range_spi25_bit_cmp(size_t *start, size_t *len, const struct wp_bits *, size_t chip_len); 179*0d6140beSAndroid Build Coastguard Worker void decode_range_spi25_2x_block(size_t *start, size_t *len, const struct wp_bits *, size_t chip_len); 180*0d6140beSAndroid Build Coastguard Worker 181*0d6140beSAndroid Build Coastguard Worker #endif /* !__CHIPDRIVERS_H__ */ 182