VSF Documented
arm9_generic.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __ARM9_GENERIC_H__
19#define __ARM9_GENERIC_H__
20
21/*============================ INCLUDES ======================================*/
22#include "hal/vsf_hal_cfg.h"
23
24#define __VSF_HEADER_ONLY_SHOW_ARCH_INFO__
25#include "hal/driver/driver.h"
26#undef __VSF_HEADER_ONLY_SHOW_ARCH_INFO__
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31/*============================ MACROS ========================================*/
32
33#ifndef __LITTLE_ENDIAN
34# define __LITTLE_ENDIAN 1
35#endif
36#ifndef __BYTE_ORDER
37# define __BYTE_ORDER __LITTLE_ENDIAN
38#endif
39
40// TODO:
41#if __ARM_ARCH != 5
42# error invalid __ARM_ARCH
43#endif
44
45#ifndef VSF_ARCH_PRI_NUM
46# define VSF_ARCH_PRI_NUM 4
47#endif
48#if VSF_ARCH_PRI_NUM > 4
49# error invalid VSF_ARCH_PRI_NUM
50#endif
51
52#ifndef VSF_ARCH_MMU
53# define VSF_ARCH_MMU ENABLED
54#endif
55
56// software interrupt provided by arch
57#define VSF_ARCH_SWI_NUM 0
58
59#if VSF_ARCH_PRI_NUM > 0
60# define __VSF_ARCH_PRI(__N, __BIT) \
61 VSF_ARCH_PRIO_##__N = (__N), \
62 vsf_arch_prio_##__N = (__N),
63#endif
64
65/*============================ MACROFIED FUNCTIONS ===========================*/
66
67#define isb() __asm__ __volatile__ ("" : : : "memory")
68#define dsb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 4" : : "r" (0) : "memory")
69#define dmb() __asm__ __volatile__ ("" : : : "memory")
70
71#define vsf_arch_wakeup()
72
73/*============================ TYPES =========================================*/
74
75#if VSF_ARCH_PRI_NUM > 0
76// arm9 arch_priority is software emulated, simple start from 0 to VSF_ARCH_PRI_NUM - 1
77typedef enum vsf_arch_prio_t {
82
86#else
87typedef int vsf_arch_prio_t;
88#endif
89
90typedef unsigned long long virtual_addr_t;
91typedef unsigned long long virtual_size_t;
92typedef unsigned long long physical_addr_t;
93typedef unsigned long long physical_size_t;
94
95enum {
100};
101
102/*============================ GLOBAL VARIABLES ==============================*/
103/*============================ LOCAL VARIABLES ===============================*/
104/*============================ PROTOTYPES ====================================*/
105
106static VSF_CAL_ALWAYS_INLINE void vsf_arch_set_stack(uint32_t stack)
107{
108 __asm__ __volatile__ ("mov SP, %0" ::"r"(stack):);
109}
110
111#if VSF_ARCH_MMU == ENABLED
113extern void vsf_arch_mmu_enable(uint32_t *ttb);
114extern void vsf_arch_mmu_refresh(void);
115#endif
116
117extern void vsf_cache_sync(void * addr, uint_fast32_t size, bool is_from_device);
118
119#ifdef __cplusplus
120}
121#endif
122
123#endif
124/* EOF */
125
#define __volatile__
Definition __compiler.h:56
void vsf_arch_mmu_enable(uint32_t *ttb)
Definition arm9_generic.c:322
unsigned long long virtual_addr_t
Definition arm9_generic.h:90
@ MMU_MAP_TYPE_CB
Definition arm9_generic.h:99
@ MMU_MAP_TYPE_CNB
Definition arm9_generic.h:98
@ MMU_MAP_TYPE_NCNB
Definition arm9_generic.h:96
@ MMU_MAP_TYPE_NCB
Definition arm9_generic.h:97
unsigned long long physical_size_t
Definition arm9_generic.h:93
void vsf_cache_sync(void *addr, uint_fast32_t size, bool is_from_device)
Definition arm9_generic.c:384
unsigned long long virtual_size_t
Definition arm9_generic.h:91
unsigned long long physical_addr_t
Definition arm9_generic.h:92
int vsf_arch_prio_t
Definition arm9_generic.h:87
void vsf_arch_mmu_map(uint32_t *ttb, virtual_addr_t virt, physical_addr_t phys, physical_size_t size, int type)
Definition arm9_generic.c:303
#define VSF_ARCH_PRI_NUM
Definition arm9_generic.h:46
void vsf_arch_mmu_refresh(void)
Definition arm9_generic.c:317
vsf_arch_prio_t
Definition cortex_a_generic.h:88
@ __VSF_ARCH_PRIO_LEAST_MAX
Definition cortex_a_generic.h:90
@ __VSF_ARCH_PRIO_LEAST_MIN
Definition cortex_a_generic.h:91
@ VSF_ARCH_PRIO_INVALID
Definition cortex_a_generic.h:92
@ vsf_arch_prio_invalid
Definition cortex_a_generic.h:93
#define __VSF_ARCH_PRI(__N, __BIT)
Definition cortex_a_generic.h:82
@ vsf_arch_prio_highest
Definition cortex_m_generic.h:167
#define VSF_ARCH_PRI_BIT
Definition mcs51_generic.h:42
unsigned uint32_t
Definition stdint.h:9
unsigned int uint_fast32_t
Definition stdint.h:27
#define INT16_MAX
Definition stdint.h:50
#define INT16_MIN
Definition stdint.h:45
vk_av_control_type_t type
Definition vsf_audio.h:170
uint32_t size
Definition vsf_memfs.h:50
#define VSF_MREPEAT(__COUNT, __MACRO, __PARAM)
Definition vsf_repeat_macro.h:51