]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1_FreedomStudio/bsp/metal-inline.h
8c0cd048b017d2216f0b8ca182c182f5ef152105
[freertos] / FreeRTOS / Demo / RISC-V_RV32_SiFive_HiFive1_FreedomStudio / bsp / metal-inline.h
1 /* Copyright 2019 SiFive, Inc */
2 /* SPDX-License-Identifier: Apache-2.0 */
3 /* ----------------------------------- */
4 /* ----------------------------------- */
5
6 #ifndef ASSEMBLY
7
8 #ifndef SIFIVE_HIFIVE1_REVB____METAL_INLINE_H
9 #define SIFIVE_HIFIVE1_REVB____METAL_INLINE_H
10
11 #include <metal/machine.h>
12
13
14 /* --------------------- fixed_clock ------------ */
15 extern inline unsigned long __metal_driver_fixed_clock_rate(const struct metal_clock *clock);
16
17
18 /* --------------------- fixed_factor_clock ------------ */
19
20
21 /* --------------------- sifive_clint0 ------------ */
22 extern inline unsigned long __metal_driver_sifive_clint0_control_base(struct metal_interrupt *controller);
23 extern inline unsigned long __metal_driver_sifive_clint0_control_size(struct metal_interrupt *controller);
24 extern inline int __metal_driver_sifive_clint0_num_interrupts(struct metal_interrupt *controller);
25 extern inline struct metal_interrupt * __metal_driver_sifive_clint0_interrupt_parents(struct metal_interrupt *controller, int idx);
26 extern inline int __metal_driver_sifive_clint0_interrupt_lines(struct metal_interrupt *controller, int idx);
27
28
29 /* --------------------- cpu ------------ */
30 extern inline int __metal_driver_cpu_hartid(struct metal_cpu *cpu);
31 extern inline int __metal_driver_cpu_timebase(struct metal_cpu *cpu);
32 extern inline struct metal_interrupt * __metal_driver_cpu_interrupt_controller(struct metal_cpu *cpu);
33 extern inline int __metal_driver_cpu_num_pmp_regions(struct metal_cpu *cpu);
34
35
36 /* --------------------- sifive_plic0 ------------ */
37 extern inline unsigned long __metal_driver_sifive_plic0_control_base(struct metal_interrupt *controller);
38 extern inline unsigned long __metal_driver_sifive_plic0_control_size(struct metal_interrupt *controller);
39 extern inline int __metal_driver_sifive_plic0_num_interrupts(struct metal_interrupt *controller);
40 extern inline int __metal_driver_sifive_plic0_max_priority(struct metal_interrupt *controller);
41 extern inline struct metal_interrupt * __metal_driver_sifive_plic0_interrupt_parents(struct metal_interrupt *controller, int idx);
42 extern inline int __metal_driver_sifive_plic0_interrupt_lines(struct metal_interrupt *controller, int idx);
43
44
45 /* --------------------- sifive_clic0 ------------ */
46
47
48 /* --------------------- sifive_local_external_interrupts0 ------------ */
49 extern inline struct metal_interrupt * __metal_driver_sifive_local_external_interrupts0_interrupt_parent(struct metal_interrupt *controller);
50 extern inline int __metal_driver_sifive_local_external_interrupts0_num_interrupts(struct metal_interrupt *controller);
51 extern inline int __metal_driver_sifive_local_external_interrupts0_interrupt_lines(struct metal_interrupt *controller, int idx);
52
53
54 /* --------------------- sifive_global_external_interrupts0 ------------ */
55
56
57 /* --------------------- sifive_gpio0 ------------ */
58 extern inline unsigned long __metal_driver_sifive_gpio0_base(struct metal_gpio *gpio);
59 extern inline unsigned long __metal_driver_sifive_gpio0_size(struct metal_gpio *gpio);
60 extern inline int __metal_driver_sifive_gpio0_num_interrupts(struct metal_gpio *gpio);
61 extern inline struct metal_interrupt * __metal_driver_sifive_gpio0_interrupt_parent(struct metal_gpio *gpio);
62 extern inline int __metal_driver_sifive_gpio0_interrupt_lines(struct metal_gpio *gpio, int idx);
63
64
65 /* --------------------- sifive_gpio_button ------------ */
66
67
68 /* --------------------- sifive_gpio_led ------------ */
69 extern inline struct metal_gpio * __metal_driver_sifive_gpio_led_gpio(struct metal_led *led);
70 extern inline int __metal_driver_sifive_gpio_led_pin(struct metal_led *led);
71 extern inline char * __metal_driver_sifive_gpio_led_label(struct metal_led *led);
72
73
74 /* --------------------- sifive_gpio_switch ------------ */
75
76
77 /* --------------------- sifive_spi0 ------------ */
78 extern inline unsigned long __metal_driver_sifive_spi0_control_base(struct metal_spi *spi);
79 extern inline unsigned long __metal_driver_sifive_spi0_control_size(struct metal_spi *spi);
80 extern inline struct __metal_driver_sifive_gpio0 * __metal_driver_sifive_spi0_pinmux(struct metal_spi *spi);
81 extern inline unsigned long __metal_driver_sifive_spi0_pinmux_output_selector(struct metal_spi *spi);
82 extern inline unsigned long __metal_driver_sifive_spi0_pinmux_source_selector(struct metal_spi *spi);
83
84
85 /* --------------------- sifive_test0 ------------ */
86
87
88 /* --------------------- sifive_uart0 ------------ */
89 extern inline unsigned long __metal_driver_sifive_uart0_control_base(struct metal_uart *uart);
90 extern inline unsigned long __metal_driver_sifive_uart0_control_size(struct metal_uart *uart);
91 extern inline int __metal_driver_sifive_uart0_num_interrupts(struct metal_uart *uart);
92 extern inline struct metal_interrupt * __metal_driver_sifive_uart0_interrupt_parent(struct metal_uart *uart);
93 extern inline int __metal_driver_sifive_uart0_interrupt_line(struct metal_uart *uart);
94 extern inline struct metal_clock * __metal_driver_sifive_uart0_clock(struct metal_uart *uart);
95 extern inline struct __metal_driver_sifive_gpio0 * __metal_driver_sifive_uart0_pinmux(struct metal_uart *uart);
96 extern inline unsigned long __metal_driver_sifive_uart0_pinmux_output_selector(struct metal_uart *uart);
97 extern inline unsigned long __metal_driver_sifive_uart0_pinmux_source_selector(struct metal_uart *uart);
98
99
100 /* --------------------- sifive_fe310_g000_hfrosc ------------ */
101 extern inline struct metal_clock * __metal_driver_sifive_fe310_g000_hfrosc_ref(const struct metal_clock *clock);
102 extern inline struct __metal_driver_sifive_fe310_g000_prci * __metal_driver_sifive_fe310_g000_hfrosc_config_base(const struct metal_clock *clock);
103 extern inline const struct __metal_driver_vtable_sifive_fe310_g000_prci * __metal_driver_sifive_fe310_g000_hfrosc_config_vtable(struct metal_clock *clock);
104 extern inline long __metal_driver_sifive_fe310_g000_hfrosc_config_offset(const struct metal_clock *clock);
105
106
107 /* --------------------- sifive_fe310_g000_hfxosc ------------ */
108 extern inline struct metal_clock * __metal_driver_sifive_fe310_g000_hfxosc_ref(const struct metal_clock *clock);
109 extern inline struct __metal_driver_sifive_fe310_g000_prci * __metal_driver_sifive_fe310_g000_hfxosc_config_base(const struct metal_clock *clock);
110 extern inline long __metal_driver_sifive_fe310_g000_hfxosc_config_offset(const struct metal_clock *clock);
111
112
113 /* --------------------- sifive_fe310_g000_pll ------------ */
114 extern inline struct metal_clock * __metal_driver_sifive_fe310_g000_pll_pllsel0(const struct metal_clock *clock);
115 extern inline struct metal_clock * __metal_driver_sifive_fe310_g000_pll_pllref(const struct metal_clock *clock);
116 extern inline struct __metal_driver_sifive_fe310_g000_prci * __metal_driver_sifive_fe310_g000_pll_config_base( );
117 extern inline long __metal_driver_sifive_fe310_g000_pll_config_offset( );
118 extern inline struct __metal_driver_sifive_fe310_g000_prci * __metal_driver_sifive_fe310_g000_pll_divider_base(const struct metal_clock *clock);
119 extern inline long __metal_driver_sifive_fe310_g000_pll_divider_offset(const struct metal_clock *clock);
120 extern inline long __metal_driver_sifive_fe310_g000_pll_init_rate( );
121
122
123 /* --------------------- fe310_g000_prci ------------ */
124 extern inline long __metal_driver_sifive_fe310_g000_prci_base( );
125 extern inline long __metal_driver_sifive_fe310_g000_prci_size( );
126 extern inline const struct __metal_driver_vtable_sifive_fe310_g000_prci * __metal_driver_sifive_fe310_g000_prci_vtable( );
127
128
129 /* --------------------- sifive_fu540_c000_l2 ------------ */
130
131
132 /* From clock@0 */
133 struct __metal_driver_fixed_clock __metal_dt_clock_0 = {
134     .clock.vtable = &__metal_driver_vtable_fixed_clock.clock,
135 };
136
137 /* From clock@2 */
138 struct __metal_driver_fixed_clock __metal_dt_clock_2 = {
139     .clock.vtable = &__metal_driver_vtable_fixed_clock.clock,
140 };
141
142 /* From clock@5 */
143 struct __metal_driver_fixed_clock __metal_dt_clock_5 = {
144     .clock.vtable = &__metal_driver_vtable_fixed_clock.clock,
145 };
146
147 struct metal_memory __metal_dt_mem_dtim_80000000 = {
148     ._base_address = 2147483648UL,
149     ._size = 16384UL,
150     ._attrs = {
151         .R = 1,
152         .W = 1,
153         .X = 1,
154         .C = 1,
155         .A = 1},
156 };
157
158 struct metal_memory __metal_dt_mem_spi_10014000 = {
159     ._base_address = 536870912UL,
160     ._size = 500000UL,
161     ._attrs = {
162         .R = 1,
163         .W = 1,
164         .X = 1,
165         .C = 1,
166         .A = 1},
167 };
168
169 /* From clint@2000000 */
170 struct __metal_driver_riscv_clint0 __metal_dt_clint_2000000 = {
171     .controller.vtable = &__metal_driver_vtable_riscv_clint0.clint_vtable,
172     .init_done = 0,
173 };
174
175 /* From cpu@0 */
176 struct __metal_driver_cpu __metal_dt_cpu_0 = {
177     .cpu.vtable = &__metal_driver_vtable_cpu.cpu_vtable,
178 };
179
180 /* From interrupt_controller */
181 struct __metal_driver_riscv_cpu_intc __metal_dt_cpu_0_interrupt_controller = {
182     .controller.vtable = &__metal_driver_vtable_riscv_cpu_intc.controller_vtable,
183     .init_done = 0,
184 };
185
186 /* From interrupt_controller@c000000 */
187 struct __metal_driver_riscv_plic0 __metal_dt_interrupt_controller_c000000 = {
188     .controller.vtable = &__metal_driver_vtable_riscv_plic0.plic_vtable,
189     .init_done = 0,
190 };
191
192 /* From local_external_interrupts_0 */
193 struct __metal_driver_sifive_local_external_interrupts0 __metal_dt_local_external_interrupts_0 = {
194     .irc.vtable = &__metal_driver_vtable_sifive_local_external_interrupts0.local0_vtable,
195     .init_done = 0,
196 };
197
198 /* From gpio@10012000 */
199 struct __metal_driver_sifive_gpio0 __metal_dt_gpio_10012000 = {
200     .gpio.vtable = &__metal_driver_vtable_sifive_gpio0.gpio,
201 };
202
203 /* From led@0red */
204 struct __metal_driver_sifive_gpio_led __metal_dt_led_0red = {
205     .led.vtable = &__metal_driver_vtable_sifive_led.led_vtable,
206 };
207
208 /* From led@0green */
209 struct __metal_driver_sifive_gpio_led __metal_dt_led_0green = {
210     .led.vtable = &__metal_driver_vtable_sifive_led.led_vtable,
211 };
212
213 /* From led@0blue */
214 struct __metal_driver_sifive_gpio_led __metal_dt_led_0blue = {
215     .led.vtable = &__metal_driver_vtable_sifive_led.led_vtable,
216 };
217
218 /* From spi@10014000 */
219 struct __metal_driver_sifive_spi0 __metal_dt_spi_10014000 = {
220     .spi.vtable = &__metal_driver_vtable_sifive_spi0.spi,
221 };
222
223 /* From serial@10013000 */
224 struct __metal_driver_sifive_uart0 __metal_dt_serial_10013000 = {
225     .uart.vtable = &__metal_driver_vtable_sifive_uart0.uart,
226 };
227
228 /* From clock@3 */
229 struct __metal_driver_sifive_fe310_g000_hfrosc __metal_dt_clock_3 = {
230     .clock.vtable = &__metal_driver_vtable_sifive_fe310_g000_hfrosc.clock,
231 };
232
233 /* From clock@1 */
234 struct __metal_driver_sifive_fe310_g000_hfxosc __metal_dt_clock_1 = {
235     .clock.vtable = &__metal_driver_vtable_sifive_fe310_g000_hfxosc.clock,
236 };
237
238 /* From clock@4 */
239 struct __metal_driver_sifive_fe310_g000_pll __metal_dt_clock_4 = {
240     .clock.vtable = &__metal_driver_vtable_sifive_fe310_g000_pll.clock,
241 };
242
243 /* From prci@10008000 */
244 struct __metal_driver_sifive_fe310_g000_prci __metal_dt_prci_10008000 = {
245 };
246
247
248 #endif /* SIFIVE_HIFIVE1_REVB____METAL_INLINE_H*/
249 #endif /* ! ASSEMBLY */