eal: get/set thread affinity per thread identifier
[dpdk.git] / lib / eal / windows / eal_windows.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2020 Dmitry Kozlyuk
3  */
4
5 #ifndef _EAL_WINDOWS_H_
6 #define _EAL_WINDOWS_H_
7
8 /**
9  * @file Facilities private to Windows EAL
10  */
11
12 #include <rte_errno.h>
13 #include <rte_windows.h>
14
15 /**
16  * Log current function as not implemented and set rte_errno.
17  */
18 #define EAL_LOG_NOT_IMPLEMENTED() \
19         do { \
20                 RTE_LOG(DEBUG, EAL, "%s() is not implemented\n", __func__); \
21                 rte_errno = ENOTSUP; \
22         } while (0)
23
24 /**
25  * Log current function as a stub.
26  */
27 #define EAL_LOG_STUB() \
28         RTE_LOG(DEBUG, EAL, "Windows: %s() is a stub\n", __func__)
29
30 /**
31  * Create a map of processors and cores on the system.
32  *
33  * @return
34  *  0 on success, (-1) on failure and rte_errno is set.
35  */
36 int eal_create_cpu_map(void);
37
38 /**
39  * Create a thread.
40  *
41  * @param thread
42  *   The location to store the thread id if successful.
43  * @param lcore_id
44  *   The lcore_id of this worker thread.
45  * @return
46  *   0 for success, -1 if the thread is not created.
47  */
48 int eal_thread_create(pthread_t *thread, unsigned int lcore_id);
49
50 /**
51  * Get system NUMA node number for a socket ID.
52  *
53  * @param socket_id
54  *  Valid EAL socket ID.
55  * @return
56  *  NUMA node number to use with Win32 API.
57  */
58 unsigned int eal_socket_numa_node(unsigned int socket_id);
59
60 /**
61  * Get pointer to the group affinity for the cpu.
62  *
63  * @param cpu_index
64  *  Index of the cpu, as it comes from rte_cpuset_t.
65  * @return
66  *  Pointer to the group affinity for the cpu.
67  */
68 PGROUP_AFFINITY eal_get_cpu_affinity(size_t cpu_index);
69
70 /**
71  * Schedule code for execution in the interrupt thread.
72  *
73  * @param func
74  *  Function to call.
75  * @param arg
76  *  Argument to the called function.
77  * @return
78  *  0 on success, negative error code on failure.
79  */
80 int eal_intr_thread_schedule(void (*func)(void *arg), void *arg);
81
82 /**
83  * Request interrupt thread to stop and wait its termination.
84  */
85 void eal_intr_thread_cancel(void);
86
87 /**
88  * Open virt2phys driver interface device.
89  *
90  * @return 0 on success, (-1) on failure.
91  */
92 int eal_mem_virt2iova_init(void);
93
94 /**
95  * Cleanup resources used for virtual to physical address translation.
96  */
97 void eal_mem_virt2iova_cleanup(void);
98
99 /**
100  * Locate Win32 memory management routines in system libraries.
101  *
102  * @return 0 on success, (-1) on failure.
103  */
104 int eal_mem_win32api_init(void);
105
106 /**
107  * Allocate new memory in hugepages on the specified NUMA node.
108  *
109  * @param size
110  *  Number of bytes to allocate. Must be a multiple of huge page size.
111  * @param socket_id
112  *  Socket ID.
113  * @return
114  *  Address of the memory allocated on success or NULL on failure.
115  */
116 void *eal_mem_alloc_socket(size_t size, int socket_id);
117
118 /**
119  * Commit memory previously reserved with eal_mem_reserve()
120  * or decommitted from hugepages by eal_mem_decommit().
121  *
122  * @param requested_addr
123  *  Address within a reserved region. Must not be NULL.
124  * @param size
125  *  Number of bytes to commit. Must be a multiple of page size.
126  * @param socket_id
127  *  Socket ID to allocate on. Can be SOCKET_ID_ANY.
128  * @return
129  *  On success, address of the committed memory, that is, requested_addr.
130  *  On failure, NULL and rte_errno is set.
131  */
132 void *eal_mem_commit(void *requested_addr, size_t size, int socket_id);
133
134 /**
135  * Put allocated or committed memory back into reserved state.
136  *
137  * @param addr
138  *  Address of the region to decommit.
139  * @param size
140  *  Number of bytes to decommit, must be the size of a page
141  *  (hugepage or regular one).
142  *
143  * The *addr* and *size* must match location and size
144  * of a previously allocated or committed region.
145  *
146  * @return
147  *  0 on success, (-1) on failure.
148  */
149 int eal_mem_decommit(void *addr, size_t size);
150
151 #endif /* _EAL_WINDOWS_H_ */