|  | /* | 
|  | * Copyright (c) 2017 Nordic Semiconductor ASA | 
|  | * Copyright (c) 2015 Runtime Inc | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | #ifndef ZEPHYR_INCLUDE_FLASH_MAP_H_ | 
|  | #define ZEPHYR_INCLUDE_FLASH_MAP_H_ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * | 
|  | * Provides abstraction of flash regions for type of use. | 
|  | * I.e. dude where's my image? | 
|  | * | 
|  | * System will contain a map which contains flash areas. Every | 
|  | * region will contain flash identifier, offset within flash and length. | 
|  | * | 
|  | * 1. This system map could be in a file within filesystem (Initializer | 
|  | * must know/figure out where the filesystem is at). | 
|  | * 2. Map could be at fixed location for project (compiled to code) | 
|  | * 3. Map could be at specific place in flash (put in place at mfg time). | 
|  | * | 
|  | * Note that the map you use must be valid for BSP it's for, | 
|  | * match the linker scripts when platform executes from flash, | 
|  | * and match the target offset specified in download script. | 
|  | */ | 
|  | #include <zephyr/types.h> | 
|  | #include <stddef.h> | 
|  | #include <sys/types.h> | 
|  |  | 
|  | #define SOC_FLASH_0_ID 0	/* device_id for SoC flash memory driver */ | 
|  | #define SPI_FLASH_0_ID 1	/* device_id for external SPI flash driver */ | 
|  |  | 
|  | struct flash_area { | 
|  | u8_t fa_id; | 
|  | u8_t fa_device_id; | 
|  | u16_t pad16; | 
|  | off_t fa_off; | 
|  | size_t fa_size; | 
|  | const char *fa_dev_name; | 
|  | }; | 
|  |  | 
|  | struct flash_sector { | 
|  | off_t fs_off; | 
|  | size_t fs_size; | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * Start using flash area. | 
|  | */ | 
|  | int flash_area_open(u8_t id, const struct flash_area **fa); | 
|  |  | 
|  | void flash_area_close(const struct flash_area *fa); | 
|  |  | 
|  | /* | 
|  | * Read/write/erase. Offset is relative from beginning of flash area. | 
|  | */ | 
|  | int flash_area_read(const struct flash_area *fa, off_t off, void *dst, | 
|  | size_t len); | 
|  | int flash_area_write(const struct flash_area *fa, off_t off, const void *src, | 
|  | size_t len); | 
|  | int flash_area_erase(const struct flash_area *fa, off_t off, size_t len); | 
|  | /* int flash_area_is_empty(const struct flash_area *, bool *); */ | 
|  |  | 
|  | /* | 
|  | * Alignment restriction for flash writes. | 
|  | */ | 
|  | u8_t flash_area_align(const struct flash_area *fa); | 
|  |  | 
|  | /* | 
|  | * Given flash area ID, return info about sectors within the area. | 
|  | */ | 
|  | int flash_area_get_sectors(int fa_id, u32_t *count, | 
|  | struct flash_sector *sectors); | 
|  |  | 
|  | /** | 
|  | * Check whether given flash area has supporting flash driver | 
|  | * in the system. | 
|  | * | 
|  | * @param fa Flash area. | 
|  | * | 
|  | * @return 1 On success. -ENODEV if no driver match. | 
|  | */ | 
|  | int flash_area_has_driver(const struct flash_area *fa); | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif /* ZEPHYR_INCLUDE_FLASH_MAP_H_ */ |