libmetal  latest
Loading...
Searching...
No Matches
sys.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
11
12#ifndef __METAL_SYS__H__
13#error "Do not include this file directly, include <metal/sys.h> instead"
14#endif
15
16#ifndef __METAL_LINUX_SYS__H__
17#define __METAL_LINUX_SYS__H__
18
19#include <fcntl.h>
20#include <libgen.h>
21#include <limits.h>
22#include <metal/cpu.h>
23#include <metal/errno.h>
24#include <pthread.h>
25#include <stdio.h>
26#include <stdlib.h>
27#include <stdarg.h>
28#include <syslog.h>
29#include <sys/file.h>
30#include <sys/mman.h>
31#include <sys/stat.h>
32#include <sys/syscall.h>
33#include <sys/types.h>
34#include <sys/wait.h>
35#include <unistd.h>
36
37#include <linux/futex.h>
38#include <sysfs/libsysfs.h>
39#ifdef HAVE_HUGETLBFS_H
40#include <hugetlbfs.h>
41#endif
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
47#define METAL_INVALID_VADDR NULL
48#define MAX_PAGE_SIZES 32
49
50#define metal_yield() metal_cpu_yield()
51
52struct metal_device;
53
57 size_t page_size;
58
60 unsigned long page_shift;
61
64};
65
67struct metal_state {
68
71
74
76 unsigned long page_size;
77
79 unsigned long page_shift;
80
83
86};
87
88#ifdef METAL_INTERNAL
89int metal_linux_bus_init(void);
90void metal_linux_bus_finish(void);
91
92int metal_open(const char *path, int shm);
93
94int metal_map(int fd, off_t offset, size_t size, int expand,
95 int flags, void **result);
96int metal_unmap(void *mem, size_t size);
97
108 const char *property_name,
109 void *output, int len);
110
111#define metal_for_each_page_size_up(ps) \
112 for ((ps) = &_metal.page_sizes[0]; \
113 (ps) <= &_metal.page_sizes[_metal.num_page_sizes - 1]; \
114 (ps)++)
115
116#define metal_for_each_page_size_down(ps) \
117 for ((ps) = &_metal.page_sizes[_metal.num_page_sizes - 1]; \
118 (ps) >= &_metal.page_sizes[0]; \
119 (ps)--)
120
121#endif
122
123#ifdef __cplusplus
124}
125#endif
126
127#endif /* __METAL_LINUX_SYS__H__ */
System independent runtime state for libmetal.
Definition sys.h:63
Libmetal device structure.
Definition device.h:72
Structure of shared page or hugepage sized data.
Definition sys.h:55
size_t page_size
Page size.
Definition sys.h:57
unsigned long page_shift
Page shift.
Definition sys.h:60
int mmap_flags
Flags to use for mmap.
Definition sys.h:63
Structure for FreeRTOS libmetal runtime state.
Definition sys.h:34
int num_page_sizes
number of available page sizes.
Definition sys.h:85
unsigned long page_size
system page size.
Definition sys.h:76
struct metal_page_size page_sizes[MAX_PAGE_SIZES]
available page sizes.
Definition sys.h:82
struct metal_common_state common
Common (system independent) data.
Definition sys.h:37
unsigned long page_shift
system page shift.
Definition sys.h:79
int data_fd
file descriptor for shared data.
Definition sys.h:73
int metal_linux_bus_init(void)
Definition device.c:618
int metal_linux_get_device_property(struct metal_device *device, const char *property_name, void *output, int len)
Definition device.c:646
void metal_linux_bus_finish(void)
Definition device.c:629
#define MAX_PAGE_SIZES
Definition sys.h:48
int metal_map(int fd, off_t offset, size_t size, int expand, int flags, void **result)
Map a segment of a file/device.
Definition utilities.c:55
int metal_open(const char *path, int shm)
Open (or create) a file.
Definition utilities.c:25
int metal_unmap(void *mem, size_t size)
Unmap a segment of the process address space.
Definition utilities.c:97