libmetal  353
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 
12 #ifndef __METAL_SYS__H__
13 #error "Include metal/sys.h instead of metal/linux/sys.h"
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
44 extern "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 
52 struct metal_device;
53 
57  size_t page_size;
58 
60  unsigned long page_shift;
61 
63  char path[PATH_MAX];
64 
67 };
68 
70 struct metal_state {
71 
74 
76  int data_fd;
77 
79  unsigned long page_size;
80 
82  unsigned long page_shift;
83 
85  const char *tmp_path;
86 
89 
92 
95 };
96 
97 #ifdef METAL_INTERNAL
98 int metal_linux_bus_init(void);
99 void metal_linux_bus_finish(void);
100 
101 int metal_open(const char *path, int shm);
102 
103 int metal_map(int fd, off_t offset, size_t size, int expand,
104  int flags, void **result);
105 int metal_unmap(void *mem, size_t size);
106 
117  const char *property_name,
118  void *output, int len);
119 
120 #define metal_for_each_page_size_up(ps) \
121  for ((ps) = &_metal.page_sizes[0]; \
122  (ps) <= &_metal.page_sizes[_metal.num_page_sizes - 1]; \
123  (ps)++)
124 
125 #define metal_for_each_page_size_down(ps) \
126  for ((ps) = &_metal.page_sizes[_metal.num_page_sizes - 1]; \
127  (ps) >= &_metal.page_sizes[0]; \
128  (ps)--)
129 
130 #endif
131 
132 #ifdef __cplusplus
133 }
134 #endif
135 
136 #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:66
char path[PATH_MAX]
Path to hugetlbfs (or tmpfs) mount point.
Definition: sys.h:63
Structure for FreeRTOS libmetal runtime state.
Definition: sys.h:35
int num_page_sizes
number of available page sizes.
Definition: sys.h:91
int pagemap_fd
File descriptor for /proc/self/pagemap (or -1).
Definition: sys.h:94
const char * tmp_path
sysfs mount point.
Definition: sys.h:85
unsigned long page_size
system page size.
Definition: sys.h:79
struct metal_page_size page_sizes[MAX_PAGE_SIZES]
available page sizes.
Definition: sys.h:88
struct metal_common_state common
Common (system independent) data.
Definition: sys.h:38
unsigned long page_shift
system page shift.
Definition: sys.h:82
int data_fd
file descriptor for shared data.
Definition: sys.h:76
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