libmetal
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 
7 /*
8  * @file linux/sys.h
9  * @brief Linux system primitives for libmetal.
10  */
11 
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 <errno.h>
20 #include <fcntl.h>
21 #include <libgen.h>
22 #include <limits.h>
23 #include <pthread.h>
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <stdarg.h>
27 #include <syslog.h>
28 #include <sys/file.h>
29 #include <sys/mman.h>
30 #include <sys/stat.h>
31 #include <sys/syscall.h>
32 #include <sys/types.h>
33 #include <sys/wait.h>
34 #include <unistd.h>
35 
36 #include <linux/futex.h>
37 #include <sysfs/libsysfs.h>
38 #ifdef HAVE_HUGETLBFS_H
39 #include <hugetlbfs.h>
40 #endif
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
46 #define METAL_INVALID_VADDR NULL
47 #define MAX_PAGE_SIZES 32
48 
52  size_t page_size;
53 
55  unsigned long page_shift;
56 
58  char path[PATH_MAX];
59 
62 };
63 
65 struct metal_state {
66 
69 
71  int data_fd;
72 
74  unsigned long page_size;
75 
77  unsigned long page_shift;
78 
80  const char *sysfs_path;
81 
83  const char *tmp_path;
84 
87 
90 
93 };
94 
95 #ifdef METAL_INTERNAL
96 extern int metal_linux_bus_init(void);
97 extern void metal_linux_bus_finish(void);
98 
99 extern int metal_open(const char *path, int shm);
100 extern int metal_open_unlinked(const char *path, int shm);
101 extern int metal_mktemp(char *template, int fifo);
102 extern int metal_mktemp_unlinked(char *template);
103 
104 extern int metal_map(int fd, off_t offset, size_t size, int expand,
105  int flags, void **result);
106 extern int metal_unmap(void *mem, size_t size);
107 extern int metal_mlock(void *mem, size_t size);
108 
109 extern void metal_randomize_string(char *template);
110 extern void metal_mktemp_template(char template[PATH_MAX],
111  const char *name);
112 extern int metal_virt2phys(void *addr, unsigned long *phys);
113 
114 #define metal_for_each_page_size_up(ps) \
115  for ((ps) = &_metal.page_sizes[0]; \
116  (ps) <= &_metal.page_sizes[_metal.num_page_sizes - 1]; \
117  (ps)++)
118 
119 #define metal_for_each_page_size_down(ps) \
120  for ((ps) = &_metal.page_sizes[_metal.num_page_sizes - 1]; \
121  (ps) >= &_metal.page_sizes[0]; \
122  (ps)--)
123 
124 #endif
125 
126 #ifdef __cplusplus
127 }
128 #endif
129 
130 #endif /* __METAL_LINUX_SYS__H__ */
void metal_linux_bus_finish(void)
Definition: device.c:622
int metal_mktemp_unlinked(char *template)
Open (or create) and unlink a temporary file.
Definition: utilities.c:171
int metal_linux_bus_init(void)
Definition: device.c:611
int pagemap_fd
Definition: sys.h:92
Definition: sys.h:62
#define MAX_PAGE_SIZES
Definition: sys.h:47
int data_fd
Definition: sys.h:71
size_t page_size
Definition: sys.h:52
const char * tmp_path
Definition: sys.h:83
int metal_open_unlinked(const char *path, int shm)
Open (or create) and unlink a file.
Definition: utilities.c:51
Definition: sys.h:30
int num_page_sizes
Definition: sys.h:89
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:203
unsigned long page_shift
Definition: sys.h:77
int metal_mlock(void *mem, size_t size)
Lock in a region of the process address space.
Definition: utilities.c:257
int metal_mktemp(char *template, int fifo)
Create a temporary file or fifo.
Definition: utilities.c:109
void metal_randomize_string(char *template)
Randomize a string.
Definition: utilities.c:74
char path[PATH_MAX]
Definition: sys.h:58
unsigned long page_size
Definition: sys.h:74
unsigned long page_shift
Definition: sys.h:55
int mmap_flags
Definition: sys.h:61
Definition: sys.h:50
int metal_unmap(void *mem, size_t size)
Unmap a segment of the process address space.
Definition: utilities.c:245
struct metal_page_size page_sizes[MAX_PAGE_SIZES]
Definition: sys.h:86
void metal_mktemp_template(char template[PATH_MAX], const char *name)
Create a file name template suitable for use with metal_mktemp.
Definition: utilities.c:91
const char * sysfs_path
Definition: sys.h:80
int metal_open(const char *path, int shm)
Open (or create) a file.
Definition: utilities.c:25
int metal_virt2phys(void *addr, unsigned long *phys)
Definition: utilities.c:262
struct metal_common_state common
Definition: sys.h:33