update chopstx
[gnuk/neug.git] / src / sys.h
1 #define BOARD_ID_CQ_STARM          0xc5480875
2 #define BOARD_ID_FST_01_00         0x613870a9
3 #define BOARD_ID_FST_01            0x696886af
4 #define BOARD_ID_MAPLE_MINI        0x7a445272
5 #define BOARD_ID_OLIMEX_STM32_H103 0xf92bb594
6 #define BOARD_ID_STBEE_MINI        0x1f341961
7 #define BOARD_ID_STBEE             0x945c37e8
8 #define BOARD_ID_STM32_PRIMER2     0x21e5798d
9 #define BOARD_ID_STM8S_DISCOVERY   0x2f0976bb
10
11 extern const uint8_t sys_version[8];
12 extern const uint32_t sys_board_id;
13 extern const uint8_t sys_board_name[];
14
15 typedef void (*handler)(void);
16 extern handler vector[16];
17
18 static inline const uint8_t *
19 unique_device_id (void)
20 {
21   /* STM32F103 has 96-bit unique device identifier */
22   const uint8_t *addr = (const uint8_t *)0x1ffff7e8;
23
24   return addr;
25 }
26
27 static inline void
28 set_led (int on)
29 {
30   void (*func) (int) = (void (*)(int))vector[2];
31
32   return (*func) (on);
33 }
34
35 static inline void
36 flash_unlock (void)
37 {
38   (*vector[3]) ();
39 }
40
41 static inline int
42 flash_program_halfword (uint32_t addr, uint16_t data)
43 {
44   int (*func) (uint32_t, uint16_t) = (int (*)(uint32_t, uint16_t))vector[4];
45
46   return (*func) (addr, data);
47 }
48
49 static inline int
50 flash_erase_page (uint32_t addr)
51 {
52   int (*func) (uint32_t) = (int (*)(uint32_t))vector[5];
53
54   return (*func) (addr);
55 }
56
57 static inline int
58 flash_check_blank (const uint8_t *p_start, size_t size)
59 {
60   int (*func) (const uint8_t *, int) = (int (*)(const uint8_t *, int))vector[6];
61
62   return (*func) (p_start, size);
63 }
64
65 static inline int
66 flash_write (uint32_t dst_addr, const uint8_t *src, size_t len)
67 {
68   int (*func) (uint32_t, const uint8_t *, size_t)
69     = (int (*)(uint32_t, const uint8_t *, size_t))vector[7];
70
71   return (*func) (dst_addr, src, len);
72 }
73
74 static inline int
75 flash_protect (void)
76 {
77   int (*func) (void) = (int (*)(void))vector[8];
78
79   return (*func) ();
80 }
81
82 static inline void __attribute__((noreturn))
83 flash_erase_all_and_exec (void (*entry)(void))
84 {
85   void (*func) (void (*)(void)) = (void (*)(void (*)(void)))vector[9];
86
87   (*func) (entry);
88   for (;;);
89 }
90
91 static inline void
92 usb_lld_sys_init (void)
93 {
94   (*vector[10]) ();
95 }
96
97 static inline void
98 usb_lld_sys_shutdown (void)
99 {
100   (*vector[11]) ();
101 }
102
103 static inline void
104 nvic_system_reset (void)
105 {
106   (*vector[12]) ();
107 }
108
109 /*
110  * Users can override INLINE by 'attribute((used))' to have an
111  * implementation defined.
112  */
113 #if !defined(INLINE)
114 #define INLINE __inline__
115 #endif
116
117 static INLINE void
118 clock_init (void)
119 {
120   (*vector[13]) ();
121 }
122
123 static INLINE void
124 gpio_init (void)
125 {
126   (*vector[14]) ();
127 }