FreeCalypso > hg > fc-selenite
comparison src/cs/drivers/drv_app/ffs/board/intelsbdrv.c @ 46:559a8b3ef10b
FFS code: first attempt at non-invasive gcc support
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 19 Jul 2018 00:35:33 +0000 |
parents | b6a5e36de839 |
children | 4484ab3f6ab3 |
comparison
equal
deleted
inserted
replaced
45:e955d102e7c4 | 46:559a8b3ef10b |
---|---|
11 #include "ffs.cfg" | 11 #include "ffs.cfg" |
12 | 12 |
13 #include "ffs/ffs.h" | 13 #include "ffs/ffs.h" |
14 #include "ffs/board/drv.h" | 14 #include "ffs/board/drv.h" |
15 #include "ffs/board/ffstrace.h" | 15 #include "ffs/board/ffstrace.h" |
16 #include "nucleus.h" | |
16 | 17 |
17 | 18 |
18 #define INTEL_UNLOCK_SLOW 1 | 19 #define INTEL_UNLOCK_SLOW 1 |
19 | 20 |
20 | 21 |
26 // Status bits for Intel flash memory devices | 27 // Status bits for Intel flash memory devices |
27 #define INTEL_STATE_MACHINE_DONE (1<<7) | 28 #define INTEL_STATE_MACHINE_DONE (1<<7) |
28 #define FLASH_READ(addr) (*(volatile uint16 *) (addr)) | 29 #define FLASH_READ(addr) (*(volatile uint16 *) (addr)) |
29 #define FLASH_WRITE(addr, data) (*(volatile uint16 *) (addr)) = data | 30 #define FLASH_WRITE(addr, data) (*(volatile uint16 *) (addr)) = data |
30 | 31 |
32 #ifdef __GNUC__ | |
33 asm(".globl ffsdrv_ram_intel_begin"); | |
34 asm("ffsdrv_ram_intel_begin:"); | |
35 #else | |
31 asm(" .label _ffsdrv_ram_intel_begin"); | 36 asm(" .label _ffsdrv_ram_intel_begin"); |
32 asm(" .def _ffsdrv_ram_intel_begin"); | 37 asm(" .def _ffsdrv_ram_intel_begin"); |
38 #endif | |
33 | 39 |
34 uint32 intel_int_disable(void); | 40 uint32 intel_int_disable(void); |
35 void intel_int_enable(uint32 tmp); | 41 void intel_int_enable(uint32 tmp); |
36 | 42 |
37 /****************************************************************************** | 43 /****************************************************************************** |
220 * Interrupt Enable/Disable | 226 * Interrupt Enable/Disable |
221 ******************************************************************************/ | 227 ******************************************************************************/ |
222 | 228 |
223 uint32 intel_int_disable(void) | 229 uint32 intel_int_disable(void) |
224 { | 230 { |
231 #ifdef __GNUC__ | |
232 return NU_Control_Interrupts(0xC0); | |
233 #else | |
225 asm(" .state16"); | 234 asm(" .state16"); |
226 asm(" mov A1, #0xC0"); | 235 asm(" mov A1, #0xC0"); |
227 asm(" ldr A2, tct_intel_disable"); | 236 asm(" ldr A2, tct_intel_disable"); |
228 asm(" bx A2 "); | 237 asm(" bx A2 "); |
229 | 238 |
230 asm("tct_intel_disable .field _TCT_Control_Interrupts+0,32"); | 239 asm("tct_intel_disable .field _TCT_Control_Interrupts+0,32"); |
231 asm(" .global _TCT_Control_Interrupts"); | 240 asm(" .global _TCT_Control_Interrupts"); |
241 #endif | |
232 } | 242 } |
233 | 243 |
234 void intel_int_enable(uint32 cpsr) | 244 void intel_int_enable(uint32 cpsr) |
235 { | 245 { |
246 #ifdef __GNUC__ | |
247 return NU_Control_Interrupts(cpsr); | |
248 #else | |
236 asm(" .state16"); | 249 asm(" .state16"); |
237 asm(" ldr A2, tct_intel_enable"); | 250 asm(" ldr A2, tct_intel_enable"); |
238 asm(" bx A2 "); | 251 asm(" bx A2 "); |
239 | 252 |
240 asm("tct_intel_enable .field _TCT_Control_Interrupts+0,32"); | 253 asm("tct_intel_enable .field _TCT_Control_Interrupts+0,32"); |
241 asm(" .global _TCT_Control_Interrupts"); | 254 asm(" .global _TCT_Control_Interrupts"); |
255 #endif | |
242 } | 256 } |
243 | 257 |
244 // Even though we have this end label, we cannot determine the number of | 258 // Even though we have this end label, we cannot determine the number of |
245 // constant/PC-relative data following the code! | 259 // constant/PC-relative data following the code! |
260 #ifdef __GNUC__ | |
261 asm(".globl ffsdrv_ram_intel_end"); | |
262 asm("ffsdrv_ram_intel_end:"); | |
263 #else | |
246 asm(" .state32"); | 264 asm(" .state32"); |
247 asm(" .label _ffsdrv_ram_intel_end"); | 265 asm(" .label _ffsdrv_ram_intel_end"); |
248 asm(" .def _ffsdrv_ram_intel_end"); | 266 asm(" .def _ffsdrv_ram_intel_end"); |
267 #endif |