diff --git a/drivers/include/nvram.h b/drivers/include/nvram.h new file mode 100644 index 0000000000000000000000000000000000000000..7ec41e953c220cd3aed1b77df9c1485af8a60900 --- /dev/null +++ b/drivers/include/nvram.h @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2015 Eistec AB + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License v2.1. See the file LICENSE in the top level directory for more + * details. + */ + +/** + * @defgroup nvram Non-volatile RAM + * @ingroup drivers + * @brief Non-volatile RAM interface + * + * This API is designed around non-volatile memories which do not need blockwise + * erase, such as ferro-electric RAM (FRAM) or magneto-resistive RAM (MRAM). + * + * This interface is not suitable for flash memories. + * + * @{ + * + * @file + * + * @brief Generic non-volatile RAM driver interface + * @author Joakim Gebart <joakim.gebart@eistec.se> + */ + +#ifndef DRIVERS_NVRAM_H_ +#define DRIVERS_NVRAM_H_ + +#include <stdint.h> +#include <stddef.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declaration in order to declare function pointers which take this + * type as a parameter within the struct. */ +struct nvram; + +/** + * @brief Device descriptor for generic NVRAM devices. + */ +typedef struct nvram { + /** + * @brief Pointer to device-specific read function + * + * Copy data from system memory to NVRAM. + * + * @param[in] dev Pointer to NVRAM device descriptor + * @param[out] dst Pointer to the first byte in the system memory address space + * @param[in] src Starting address in the NVRAM device address space + * @param[in] len Number of bytes to copy + * + * @return Number of bytes read on success + * @return <0 on errors + */ + int (*read)(struct nvram *dev, uint8_t *dst, uint32_t src, size_t size); + + /** + * @brief Pointer to device-specific write function + * + * Copy data from NVRAM to system memory. + * + * @param[in] dev Pointer to NVRAM device descriptor + * @param[in] src Pointer to the first byte in the system memory address space + * @param[in] dst Starting address in the NVRAM device address space + * @param[in] len Number of bytes to copy + * + * @return Number of bytes written on success + * @return <0 on errors + */ + int (*write)(struct nvram *dev, uint8_t *src, uint32_t dst, size_t size); + + /** @brief Device capacity */ + size_t size; + + /** @brief Device-specific parameters, if any. */ + void *extra; +} nvram_t; + +#ifdef __cplusplus +} +#endif + +#endif /* DRIVERS_NVRAM_H_ */ +/** @} */