Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | /* * Copyright (c) 2016 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @file * @brief Public API for FLASH drivers */ #ifndef __FLASH_H__ #define __FLASH_H__ /** * @brief FLASH Interface * @defgroup flash_interface FLASH Interface * @ingroup io_interfaces * @{ */ #include <stdint.h> #include <stddef.h> #include <sys/types.h> #include <device.h> #ifdef __cplusplus extern "C" { #endif typedef int (*flash_api_read)(struct device *dev, off_t offset, void *data, size_t len); typedef int (*flash_api_write)(struct device *dev, off_t offset, const void *data, size_t len); typedef int (*flash_api_erase)(struct device *dev, off_t offset, size_t size); typedef int (*flash_api_write_protection)(struct device *dev, bool enable); struct flash_driver_api { flash_api_read read; flash_api_write write; flash_api_erase erase; flash_api_write_protection write_protection; }; /** * @brief Read data from flash * * @param dev : flash dev * @param offset : Offset (byte aligned) to read * @param data : Buffer to store read data * @param len : Number of bytes to read. * * @return 0 on success, negative errno code on fail. */ static inline int flash_read(struct device *dev, off_t offset, void *data, size_t len) { struct flash_driver_api *api = (struct flash_driver_api *)dev->driver_api; return api->read(dev, offset, data, len); } /** * @brief Write buffer into flash memory. * * Prior to the invocation of this API, the flash_write_protection_set needs * to be called first to disable the write protection. * * @param dev : flash device * @param offset : starting offset for the write * @param data : data to write * @param len : Number of bytes to write * * @return 0 on success, negative errno code on fail. */ static inline int flash_write(struct device *dev, off_t offset, const void *data, size_t len) { struct flash_driver_api *api = (struct flash_driver_api *)dev->driver_api; return api->write(dev, offset, data, len); } /** * @brief Erase part or all of a flash memory * * Acceptable values of erase size and offset are subject to * hardware-specific multiples of sector size and offset. Please check the * API implemented by the underlying sub driver. * * Prior to the invocation of this API, the flash_write_protection_set needs * to be called first to disable the write protection. * * @param dev : flash device * @param offset : erase area starting offset * @param size : size of area to be erased * * @return 0 on success, negative errno code on fail. */ static inline int flash_erase(struct device *dev, off_t offset, size_t size) { struct flash_driver_api *api = (struct flash_driver_api *)dev->driver_api; return api->erase(dev, offset, size); } /** * @brief Enable or disable write protection for a flash memory * * This API is required to be called before the invocation of write or erase * API. Please note that on some flash components, the write protection is * automatically turned on again by the device after the completion of each * write or erase calls. Therefore, on those flash parts, write protection needs * to be disabled before each invocation of the write or erase API. Please refer * to the sub-driver API or the data sheet of the flash component to get details * on the write protection behavior. * * @param dev : flash device * @param enable : enable or disable flash write protection * * @return 0 on success, negative errno code on fail. */ static inline int flash_write_protection_set(struct device *dev, bool enable) { struct flash_driver_api *api = (struct flash_driver_api *)dev->driver_api; return api->write_protection(dev, enable); } #ifdef __cplusplus } #endif /** * @} */ #endif /* _FLASH_H_ */ |