logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

eeprom.h (3433B)


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