libmetal
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
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 <fcntl.h>
20#include <libgen.h>
21#include <limits.h>
22#include <metal/errno.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
43extern "C" {
44#endif
45
46#define METAL_INVALID_VADDR NULL
47#define MAX_PAGE_SIZES 32
48
49struct metal_device;
50
54 size_t page_size;
55
57 unsigned long page_shift;
58
60 char path[PATH_MAX];
61
64};
65
67struct metal_state {
68
71
74
76 unsigned long page_size;
77
79 unsigned long page_shift;
80
82 const char *sysfs_path;
83
85 const char *tmp_path;
86
89
92
95};
96
97#ifdef METAL_INTERNAL
98extern int metal_linux_bus_init(void);
99extern void metal_linux_bus_finish(void);
100
101extern int metal_open(const char *path, int shm);
102extern int metal_open_unlinked(const char *path, int shm);
103extern int metal_mktemp(char *template, int fifo);
104extern int metal_mktemp_unlinked(char *template);
105
106extern int metal_map(int fd, off_t offset, size_t size, int expand,
107 int flags, void **result);
108extern int metal_unmap(void *mem, size_t size);
109extern int metal_mlock(void *mem, size_t size);
110
111extern void metal_randomize_string(char *template);
112extern void metal_mktemp_template(char template[PATH_MAX],
113 const char *name);
114extern int metal_virt2phys(void *addr, unsigned long *phys);
115
125extern int metal_linux_get_device_property(struct metal_device *device,
126 const char *property_name,
127 void *output, int len);
128
129#define metal_for_each_page_size_up(ps) \
130 for ((ps) = &_metal.page_sizes[0]; \
131 (ps) <= &_metal.page_sizes[_metal.num_page_sizes - 1]; \
132 (ps)++)
133
134#define metal_for_each_page_size_down(ps) \
135 for ((ps) = &_metal.page_sizes[_metal.num_page_sizes - 1]; \
136 (ps) >= &_metal.page_sizes[0]; \
137 (ps)--)
138
139#endif
140
141#ifdef __cplusplus
142}
143#endif
144
145#endif /* __METAL_LINUX_SYS__H__ */
Definition sys.h:63
Definition device.h:72
Definition sys.h:52
size_t page_size
Definition sys.h:54
unsigned long page_shift
Definition sys.h:57
int mmap_flags
Definition sys.h:63
char path[PATH_MAX]
Definition sys.h:60
Definition sys.h:37
int num_page_sizes
Definition sys.h:91
int pagemap_fd
Definition sys.h:94
const char * tmp_path
Definition sys.h:85
unsigned long page_size
Definition sys.h:76
struct metal_page_size page_sizes[MAX_PAGE_SIZES]
Definition sys.h:88
struct metal_common_state common
Definition sys.h:40
unsigned long page_shift
Definition sys.h:79
int data_fd
Definition sys.h:73
const char * sysfs_path
Definition sys.h:82
int metal_linux_bus_init(void)
Definition device.c:625
int metal_linux_get_device_property(struct metal_device *device, const char *property_name, void *output, int len)
Definition device.c:653
void metal_linux_bus_finish(void)
Definition device.c:636
#define MAX_PAGE_SIZES
Definition sys.h:47
int metal_mktemp(char *template, int fifo)
Create a temporary file or fifo.
Definition utilities.c:109
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:204
int metal_open_unlinked(const char *path, int shm)
Open (or create) and unlink a file.
Definition utilities.c:51
int metal_mlock(void *mem, size_t size)
Lock in a region of the process address space.
Definition utilities.c:258
void metal_randomize_string(char *template)
Randomize a string.
Definition utilities.c:74
int metal_virt2phys(void *addr, unsigned long *phys)
Definition utilities.c:263
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
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:246
int metal_mktemp_unlinked(char *template)
Open (or create) and unlink a temporary file.
Definition utilities.c:172