eeprom.h (3433B)
1 // Copyright 2018-2022 QMK 2 // SPDX-License-Identifier: GPL-2.0-or-later 3 #pragma once 4 5 #if defined(__AVR__) && !defined(EEPROM_DRIVER) 6 # include <avr/eeprom.h> 7 #else 8 # include <stdint.h> 9 # include <stdlib.h> 10 11 uint8_t eeprom_read_byte(const uint8_t *__p); 12 uint16_t eeprom_read_word(const uint16_t *__p); 13 uint32_t eeprom_read_dword(const uint32_t *__p); 14 void eeprom_read_block(void *__dst, const void *__src, size_t __n); 15 void eeprom_write_byte(uint8_t *__p, uint8_t __value); 16 void eeprom_write_word(uint16_t *__p, uint16_t __value); 17 void eeprom_write_dword(uint32_t *__p, uint32_t __value); 18 void eeprom_write_block(const void *__src, void *__dst, size_t __n); 19 void eeprom_update_byte(uint8_t *__p, uint8_t __value); 20 void eeprom_update_word(uint16_t *__p, uint16_t __value); 21 void eeprom_update_dword(uint32_t *__p, uint32_t __value); 22 void eeprom_update_block(const void *__src, void *__dst, size_t __n); 23 #endif 24 25 // While newer avr-libc versions may have an implementation 26 // use preprocessor as to not cause conflicts 27 #undef eeprom_write_qword 28 #define eeprom_write_qword(__p, __value) \ 29 do { \ 30 uint64_t tmp = __value; \ 31 eeprom_update_block(&tmp, __p, sizeof(uint64_t)); \ 32 } while (0) 33 34 #if defined(EEPROM_CUSTOM) 35 # ifndef EEPROM_SIZE 36 # error EEPROM_SIZE has not been defined for custom driver. 37 # endif 38 # define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE) 39 #elif defined(EEPROM_WEAR_LEVELING) 40 # include "wear_leveling_drivers.h" 41 # define TOTAL_EEPROM_BYTE_COUNT (WEAR_LEVELING_LOGICAL_SIZE) 42 #elif defined(EEPROM_TRANSIENT) 43 # include "eeprom_transient.h" 44 # define TOTAL_EEPROM_BYTE_COUNT (TRANSIENT_EEPROM_SIZE) 45 #elif defined(EEPROM_I2C) 46 # include "eeprom_i2c.h" 47 # define TOTAL_EEPROM_BYTE_COUNT (EXTERNAL_EEPROM_BYTE_COUNT) 48 #elif defined(EEPROM_SPI) 49 # include "eeprom_spi.h" 50 # define TOTAL_EEPROM_BYTE_COUNT (EXTERNAL_EEPROM_BYTE_COUNT) 51 #elif defined(EEPROM_STM32_L0_L1) 52 # include "eeprom_stm32_L0_L1.h" 53 # define TOTAL_EEPROM_BYTE_COUNT (STM32_ONBOARD_EEPROM_SIZE) 54 #elif defined(EEPROM_KINETIS_FLEXRAM) 55 # include "eeprom_kinetis_flexram.h" 56 # define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE) 57 #elif defined(EEPROM_LEGACY_EMULATED_FLASH) 58 # include "eeprom_legacy_emulated_flash_defs.h" 59 # define TOTAL_EEPROM_BYTE_COUNT (FEE_DENSITY_BYTES) 60 #elif defined(EEPROM_SAMD) 61 # include "eeprom_samd.h" 62 # define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE) 63 #elif defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_AT90USB162__) || defined(__AVR_ATtiny85__) 64 # define TOTAL_EEPROM_BYTE_COUNT 512 65 #elif defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega32A__) 66 # define TOTAL_EEPROM_BYTE_COUNT 1024 67 #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) 68 # define TOTAL_EEPROM_BYTE_COUNT 2048 69 #elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) 70 # define TOTAL_EEPROM_BYTE_COUNT 4096 71 #elif defined(EEPROM_TEST_HARNESS) 72 # ifndef LEGACY_FLASH_OPS_MOCKED 73 // Normal tests 74 # define TOTAL_EEPROM_BYTE_COUNT 32 75 # else 76 // Flash wear-leveling testing 77 # include "eeprom_legacy_emulated_flash_tests.h" 78 # define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE) 79 # endif 80 #else 81 # error Unknown EEPROM driver. 82 #endif