xref: /dpdk/lib/eal/windows/include/sched.h (revision ce6e911d20f6c9af0fe717f6769b804c444aa228)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(c) 2019 Intel Corporation
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #ifndef _SCHED_H_
699a2dd95SBruce Richardson #define _SCHED_H_
799a2dd95SBruce Richardson 
899a2dd95SBruce Richardson /**
999a2dd95SBruce Richardson  * This file is added to support the common code in eal_common_thread.c
1099a2dd95SBruce Richardson  * as Microsoft libc does not contain sched.h. This may be removed
1199a2dd95SBruce Richardson  * in future releases.
1299a2dd95SBruce Richardson  */
1399a2dd95SBruce Richardson #ifdef __cplusplus
1499a2dd95SBruce Richardson extern "C" {
1599a2dd95SBruce Richardson #endif
1699a2dd95SBruce Richardson 
1799a2dd95SBruce Richardson #ifndef CPU_SETSIZE
1899a2dd95SBruce Richardson #define CPU_SETSIZE RTE_MAX_LCORE
1999a2dd95SBruce Richardson #endif
2099a2dd95SBruce Richardson 
2199a2dd95SBruce Richardson #define _BITS_PER_SET (sizeof(long long) * 8)
2299a2dd95SBruce Richardson #define _BIT_SET_MASK (_BITS_PER_SET - 1)
2399a2dd95SBruce Richardson 
2499a2dd95SBruce Richardson #define _NUM_SETS(b) (((b) + _BIT_SET_MASK) / _BITS_PER_SET)
2599a2dd95SBruce Richardson #define _WHICH_SET(b) ((b) / _BITS_PER_SET)
2699a2dd95SBruce Richardson #define _WHICH_BIT(b) ((b) & (_BITS_PER_SET - 1))
2799a2dd95SBruce Richardson 
2899a2dd95SBruce Richardson typedef struct _rte_cpuset_s {
2999a2dd95SBruce Richardson 	long long _bits[_NUM_SETS(CPU_SETSIZE)];
3099a2dd95SBruce Richardson } rte_cpuset_t;
3199a2dd95SBruce Richardson #define RTE_HAS_CPUSET
3299a2dd95SBruce Richardson 
3399a2dd95SBruce Richardson #define CPU_SET(b, s) ((s)->_bits[_WHICH_SET(b)] |= (1LL << _WHICH_BIT(b)))
3499a2dd95SBruce Richardson 
3599a2dd95SBruce Richardson #define CPU_ZERO(s)							\
3699a2dd95SBruce Richardson 	do {								\
3799a2dd95SBruce Richardson 		unsigned int _i;					\
3899a2dd95SBruce Richardson 									\
3999a2dd95SBruce Richardson 		for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++)		\
4099a2dd95SBruce Richardson 			(s)->_bits[_i] = 0LL;				\
4199a2dd95SBruce Richardson 	} while (0)
4299a2dd95SBruce Richardson 
4399a2dd95SBruce Richardson #define CPU_ISSET(b, s) (((s)->_bits[_WHICH_SET(b)] & \
4499a2dd95SBruce Richardson 	(1LL << _WHICH_BIT(b))) != 0LL)
4599a2dd95SBruce Richardson 
4699a2dd95SBruce Richardson static inline int
count_cpu(const rte_cpuset_t * s)47*ce6e911dSTyler Retzlaff count_cpu(const rte_cpuset_t *s)
4899a2dd95SBruce Richardson {
4999a2dd95SBruce Richardson 	unsigned int _i;
5099a2dd95SBruce Richardson 	int count = 0;
5199a2dd95SBruce Richardson 
52694c8172SNarcisa Vasile 	for (_i = 0; _i < CPU_SETSIZE; _i++)
5399a2dd95SBruce Richardson 		if (CPU_ISSET(_i, s) != 0LL)
5499a2dd95SBruce Richardson 			count++;
5599a2dd95SBruce Richardson 	return count;
5699a2dd95SBruce Richardson }
5799a2dd95SBruce Richardson #define CPU_COUNT(s) count_cpu(s)
5899a2dd95SBruce Richardson 
5999a2dd95SBruce Richardson #define CPU_AND(dst, src1, src2) \
6099a2dd95SBruce Richardson do { \
6199a2dd95SBruce Richardson 	unsigned int _i; \
6299a2dd95SBruce Richardson 	\
6399a2dd95SBruce Richardson 	for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \
6499a2dd95SBruce Richardson 		(dst)->_bits[_i] = (src1)->_bits[_i] & (src2)->_bits[_i]; \
6599a2dd95SBruce Richardson } while (0)
6699a2dd95SBruce Richardson 
6799a2dd95SBruce Richardson #define CPU_OR(dst, src1, src2) \
6899a2dd95SBruce Richardson do { \
6999a2dd95SBruce Richardson 	unsigned int _i; \
7099a2dd95SBruce Richardson 	\
7199a2dd95SBruce Richardson 	for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \
7299a2dd95SBruce Richardson 		(dst)->_bits[_i] = (src1)->_bits[_i] | (src2)->_bits[_i]; \
7399a2dd95SBruce Richardson } while (0)
7499a2dd95SBruce Richardson 
7599a2dd95SBruce Richardson #define CPU_FILL(s) \
7699a2dd95SBruce Richardson do { \
7799a2dd95SBruce Richardson 	unsigned int _i; \
7899a2dd95SBruce Richardson 	for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \
7999a2dd95SBruce Richardson 		(s)->_bits[_i] = -1LL; \
8099a2dd95SBruce Richardson } while (0)
8199a2dd95SBruce Richardson 
8299a2dd95SBruce Richardson #define CPU_NOT(dst, src) \
8399a2dd95SBruce Richardson do { \
8499a2dd95SBruce Richardson 	unsigned int _i; \
8599a2dd95SBruce Richardson 	for (_i = 0; _i < _NUM_SETS(CPU_SETSIZE); _i++) \
8699a2dd95SBruce Richardson 		(dst)->_bits[_i] = (src)->_bits[_i] ^ -1LL; \
8799a2dd95SBruce Richardson } while (0)
8899a2dd95SBruce Richardson 
8999a2dd95SBruce Richardson #ifdef __cplusplus
9099a2dd95SBruce Richardson }
9199a2dd95SBruce Richardson #endif
9299a2dd95SBruce Richardson 
9399a2dd95SBruce Richardson #endif /* _SCHED_H_ */
94