qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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