diff options
author | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
---|---|---|
committer | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/libflash/libflash.h | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/libflash/libflash.h')
-rw-r--r-- | roms/skiboot/libflash/libflash.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/roms/skiboot/libflash/libflash.h b/roms/skiboot/libflash/libflash.h new file mode 100644 index 000000000..9e83d4198 --- /dev/null +++ b/roms/skiboot/libflash/libflash.h @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +/* Copyright 2013-2017 IBM Corp. */ + +#ifndef __LIBFLASH_H +#define __LIBFLASH_H + +#include <stdint.h> +#include <stdbool.h> +#include <libflash/blocklevel.h> + +/* API status/return: + * + * <0 = flash controller errors passed through, + * 0 = success + * >0 = libflash error + */ +#include <libflash/errors.h> + +#ifndef MIN +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif + +/* Flash chip, opaque */ +struct flash_chip; +struct spi_flash_ctrl; + +int flash_init(struct spi_flash_ctrl *ctrl, struct blocklevel_device **bl, + struct flash_chip **flash_chip); +void flash_exit(struct blocklevel_device *bl); + +/* + * Function which till call close on the underlying struct spi_flash_ctrl + */ +void flash_exit_close(struct blocklevel_device *bl, void (*close)(struct spi_flash_ctrl *ctrl)); + +/* libflash sets the 4b mode automatically based on the flash + * size and controller capabilities but it can be overriden + */ +int flash_force_4b_mode(struct flash_chip *c, bool enable_4b); + +/* + * This provides a wapper around flash_read() on ECCed data. All params are + * the same as to flash_read(). Not passing true in ecc is akin to calling + * flash_read() directly. + * + * len is length of data without ecc attached therefore this will read beyond + * pos + len. + */ +int flash_read_corrected(struct blocklevel_device *bl, uint32_t pos, void *buf, + uint32_t len, bool ecc); + +/* + * This provides a wrapper around flash_write() on ECCed data. All params are + * the same as to flash_write(). Not passing true in ecc is akin to calling + * flash_write() directly. + * + * size is length of data without ECC attached therefore this will write beyond + * dst + size. + */ +int flash_write_corrected(struct blocklevel_device *bl, uint32_t dst, const void *src, + uint32_t size, bool verify, bool ecc); + +/* + * This provides a wrapper around flash_smart_write() on ECCed data. All + * params are the same as to flash_smart_write(). Not passing true in ecc is + * akin to calling flash_smart_write() directly. + * + * size is length of data without ECC attached therefore this will write beyond + * dst + size. + */ +int flash_smart_write_corrected(struct blocklevel_device *bl, uint32_t dst, const void *src, + uint32_t size, bool ecc); + +/* chip erase may not be supported by all chips/controllers, get ready + * for FLASH_ERR_CHIP_ER_NOT_SUPPORTED + */ +int flash_erase_chip(struct flash_chip *c); + +#endif /* __LIBFLASH_H */ |