From f146a3c0cd4ef1bf7ffefea11d944a0ba0b9f385 Mon Sep 17 00:00:00 2001
From: Angus Gratton <gus@projectgus.com>
Date: Fri, 20 Nov 2015 17:30:02 +1100
Subject: [PATCH] Add in-progress RTC register header (some registers still
 undocumented)

Author for this work is @foogod, extracted from 1da996e (open-libmain branch).

Progress towards #8.
---
 core/include/esp/rtc_regs.h | 56 +++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)
 create mode 100644 core/include/esp/rtc_regs.h

diff --git a/core/include/esp/rtc_regs.h b/core/include/esp/rtc_regs.h
new file mode 100644
index 0000000..ff79e9d
--- /dev/null
+++ b/core/include/esp/rtc_regs.h
@@ -0,0 +1,56 @@
+/* esp/rtc_regs.h
+ *
+ * ESP8266 RTC register definitions
+ *
+ * Not compatible with ESP SDK register access code.
+ */
+
+#ifndef _ESP_RTC_REGS_H
+#define _ESP_RTC_REGS_H
+
+#include "esp/types.h"
+#include "common_macros.h"
+
+#define RTC_BASE 0x60000700
+#define RTC (*(struct RTC_REGS *)(RTC_BASE))
+
+//FIXME: need to understand/clarify distinction between GPIO_CONF and GPIO_CFG[]
+// Note: GPIO_CFG[3] is also known as PAD_XPD_DCDC_CONF in eagle_soc.h
+
+struct RTC_REGS {
+    uint32_t volatile _unknown0;        // 0x00
+    uint32_t volatile COUNTER_ALARM;    // 0x04
+    uint32_t volatile RESET_REASON0;    // 0x08       //FIXME: need better name
+    uint32_t volatile _unknownc[2];     // 0x0c - 0x10
+    uint32_t volatile RESET_REASON1;    // 0x14       //FIXME: need better name
+    uint32_t volatile RESET_REASON2;    // 0x18       //FIXME: need better name
+    uint32_t volatile COUNTER;          // 0x1c
+    uint32_t volatile INT_SET;          // 0x20
+    uint32_t volatile INT_CLEAR;        // 0x24
+    uint32_t volatile INT_ENABLE;       // 0x28
+    uint32_t volatile _unknown2c;       // 0x2c
+    uint32_t volatile SCRATCH[4];       // 0x30 - 3c
+    uint32_t volatile _unknown40[10];   // 0x40 - 0x64
+    uint32_t volatile GPIO_OUT;         // 0x68
+    uint32_t volatile _unknown6c[2];    // 0x6c - 0x70
+    uint32_t volatile GPIO_ENABLE;      // 0x74
+    uint32_t volatile _unknown80[5];    // 0x78 - 0x88
+    uint32_t volatile GPIO_IN;          // 0x8c
+    uint32_t volatile GPIO_CONF;        // 0x90
+    uint32_t volatile GPIO_CFG[6];      // 0x94 - 0xa8
+};
+
+_Static_assert(sizeof(struct RTC_REGS) == 0xac, "RTC_REGS is the wrong size");
+
+/* The following are used in sdk_rtc_get_reset_reason().  Details are still a
+ * bit sketchy regarding exactly what they mean/do.. */
+
+#define RTC_RESET_REASON1_CODE_M  0x0000000f
+#define RTC_RESET_REASON1_CODE_S  0
+
+#define RTC_RESET_REASON2_CODE_M  0x0000003f
+#define RTC_RESET_REASON2_CODE_S  8
+
+#define RTC_RESET_REASON0_SOMETHING  BIT(21)
+
+#endif /* _ESP_RTC_REGS_H */