summaryrefslogtreecommitdiff
path: root/include/cache.h
blob: 5e5a341a689a7ddba1c99d3a4b0edc8a6b91d350 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
 * Copyright (c) 2015 Wind River Systems, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef _cache__h_
#define _cache__h_

#include <nanokernel.h>

#ifdef __cplusplus
extern "C" {
#endif

#define _sys_cache_flush_sig(x) void (x)(vaddr_t virt, size_t size)

#if defined(CONFIG_CACHE_FLUSHING)

#if defined(CONFIG_ARCH_CACHE_FLUSH_DETECT)
	typedef _sys_cache_flush_sig(_sys_cache_flush_t);
	extern _sys_cache_flush_t *sys_cache_flush;
#else
	extern _sys_cache_flush_sig(sys_cache_flush);
#endif

#else

/*
 * Provide NOP APIs for systems that do not have caches.
 *
 * An example is the Cortex-M chips. However, the functions are provided so
 * that code that need to manipulate caches can be written in an
 * architecture-agnostic manner. The functions do nothing. The cache line size
 * value is always 0.
 */

static inline _sys_cache_flush_sig(sys_cache_flush)
{
	ARG_UNUSED(virt);
	ARG_UNUSED(size);

	/* do nothing */
}

#endif /* CACHE_FLUSHING */

#if defined(CONFIG_CACHE_LINE_SIZE_DETECT)
	extern size_t sys_cache_line_size;
#elif defined(CONFIG_CACHE_LINE_SIZE)
	#define sys_cache_line_size CONFIG_CACHE_LINE_SIZE
#else
	#define sys_cache_line_size 0
#endif

#ifdef __cplusplus
}
#endif

#endif /* _cache__h_ */