rboot-private.h
Go to the documentation of this file.
1 #ifndef __RBOOT_PRIVATE_H__
2 #define __RBOOT_PRIVATE_H__
3 
5 // rBoot open source boot loader for ESP8266.
6 // Copyright 2015 Richard A Burton
7 // richardaburton@gmail.com
8 // See license.txt for license terms.
10 
11 #include <rboot.h>
12 
13 #define NOINLINE __attribute__ ((noinline))
14 
15 #define ROM_MAGIC 0xe9
16 #define ROM_MAGIC_NEW1 0xea
17 #define ROM_MAGIC_NEW2 0x04
18 
19 // buffer size, must be at least 0x10 (size of rom_header_new structure)
20 #define BUFFER_SIZE 0x100
21 
22 // stage2 read chunk maximum size (limit for SPIRead)
23 #define READ_SIZE 0x1000
24 
25 // esp8266 built in rom functions
26 extern uint32_t SPIRead(uint32_t addr, void *outptr, uint32_t len);
27 extern uint32_t SPIEraseSector(int);
28 extern uint32_t SPIWrite(uint32_t addr, void *inptr, uint32_t len);
29 extern void ets_printf(char*, ...);
30 extern void ets_delay_us(int);
31 extern void ets_memset(void*, uint8_t, uint32_t);
32 extern void ets_memcpy(void*, const void*, uint32_t);
33 
34 // functions we'll call by address
35 typedef void stage2a(uint32_t);
36 typedef void usercode(void);
37 
38 // standard rom header
39 typedef struct {
40  // general rom header
41  uint8_t magic;
42  uint8_t count;
43  uint8_t flags1;
44  uint8_t flags2;
46 } rom_header;
47 
48 typedef struct {
49  uint8_t* address;
50  uint32_t length;
52 
53 // new rom header (irom section first) there is
54 // another 8 byte header straight afterward the
55 // standard header
56 typedef struct {
57  // general rom header
58  uint8_t magic;
59  uint8_t count; // second magic for new header
60  uint8_t flags1;
61  uint8_t flags2;
62  uint32_t entry;
63  // new type rom, lib header
64  uint32_t add; // zero
65  uint32_t len; // length of irom section
67 
68 // RTC reset reason values
69 enum rst_reason {
77 };
78 
79 #endif
Definition: rboot-private.h:48
uint32_t entry
Definition: rboot-private.h:62
uint8_t count
Definition: rboot-private.h:42
Definition: rboot-private.h:70
void ets_printf(char *,...)
uint32_t SPIWrite(uint32_t addr, void *inptr, uint32_t len)
void stage2a(uint32_t)
Definition: rboot-private.h:35
uint8_t flags2
Definition: rboot-private.h:61
Definition: rboot-private.h:75
Definition: rboot-private.h:39
uint32_t SPIEraseSector(int)
uint32_t len
Definition: rboot-private.h:65
void ets_memset(void *, uint8_t, uint32_t)
uint8_t flags2
Definition: rboot-private.h:44
uint8_t count
Definition: rboot-private.h:59
uint32_t add
Definition: rboot-private.h:64
void ets_memcpy(void *, const void *, uint32_t)
void ets_delay_us(int)
uint8_t flags1
Definition: rboot-private.h:43
uint8_t magic
Definition: rboot-private.h:58
uint32_t length
Definition: rboot-private.h:50
usercode * entry
Definition: rboot-private.h:45
uint8_t magic
Definition: rboot-private.h:41
uint8_t flags1
Definition: rboot-private.h:60
rst_reason
Definition: rboot-private.h:69
Definition: rboot-private.h:71
Definition: rboot-private.h:56
Definition: rboot-private.h:76
uint8_t * address
Definition: rboot-private.h:49
Definition: rboot-private.h:72
uint32_t SPIRead(uint32_t addr, void *outptr, uint32_t len)
Definition: rboot-private.h:74
void usercode(void)
Definition: rboot-private.h:36
Definition: rboot-private.h:73