xref: /freebsd/sys/compat/linuxkpi/common/include/linux/cpu.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
15fce8027SBjoern A. Zeeb /*-
25fce8027SBjoern A. Zeeb  * SPDX-License-Identifier: BSD-2-Clause
35fce8027SBjoern A. Zeeb  *
45fce8027SBjoern A. Zeeb  * Copyright (c) 2020-2021 The FreeBSD Foundation
55fce8027SBjoern A. Zeeb  *
65fce8027SBjoern A. Zeeb  * This software was developed by Björn Zeeb under sponsorship from
75fce8027SBjoern A. Zeeb  * the FreeBSD Foundation.
85fce8027SBjoern A. Zeeb  *
95fce8027SBjoern A. Zeeb  * Redistribution and use in source and binary forms, with or without
105fce8027SBjoern A. Zeeb  * modification, are permitted provided that the following conditions
115fce8027SBjoern A. Zeeb  * are met:
125fce8027SBjoern A. Zeeb  * 1. Redistributions of source code must retain the above copyright
135fce8027SBjoern A. Zeeb  *    notice, this list of conditions and the following disclaimer.
145fce8027SBjoern A. Zeeb  * 2. Redistributions in binary form must reproduce the above copyright
155fce8027SBjoern A. Zeeb  *    notice, this list of conditions and the following disclaimer in the
165fce8027SBjoern A. Zeeb  *    documentation and/or other materials provided with the distribution.
175fce8027SBjoern A. Zeeb  *
185fce8027SBjoern A. Zeeb  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
195fce8027SBjoern A. Zeeb  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
205fce8027SBjoern A. Zeeb  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
215fce8027SBjoern A. Zeeb  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
225fce8027SBjoern A. Zeeb  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
235fce8027SBjoern A. Zeeb  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
245fce8027SBjoern A. Zeeb  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
255fce8027SBjoern A. Zeeb  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
265fce8027SBjoern A. Zeeb  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
275fce8027SBjoern A. Zeeb  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
285fce8027SBjoern A. Zeeb  * SUCH DAMAGE.
295fce8027SBjoern A. Zeeb  */
305fce8027SBjoern A. Zeeb 
31307f78f3SVladimir Kondratyev #ifndef	_LINUXKPI_LINUX_CPU_H
32307f78f3SVladimir Kondratyev #define	_LINUXKPI_LINUX_CPU_H
335fce8027SBjoern A. Zeeb 
345fce8027SBjoern A. Zeeb #include <sys/types.h>
355fce8027SBjoern A. Zeeb #include <sys/systm.h>
365fce8027SBjoern A. Zeeb #include <sys/cpuset.h>
375fce8027SBjoern A. Zeeb #include <sys/smp.h>
385fce8027SBjoern A. Zeeb #include <linux/compiler.h>
395fce8027SBjoern A. Zeeb #include <linux/slab.h>
405fce8027SBjoern A. Zeeb 
415fce8027SBjoern A. Zeeb typedef	cpuset_t	cpumask_t;
425fce8027SBjoern A. Zeeb 
435fce8027SBjoern A. Zeeb extern cpumask_t cpu_online_mask;
445fce8027SBjoern A. Zeeb 
45*e2361e04SBjoern A. Zeeb cpumask_t *lkpi_get_static_single_cpu_mask(int);
46*e2361e04SBjoern A. Zeeb 
475fce8027SBjoern A. Zeeb static __inline int
cpumask_next(int cpuid,cpumask_t mask)485fce8027SBjoern A. Zeeb cpumask_next(int cpuid, cpumask_t mask)
495fce8027SBjoern A. Zeeb {
505fce8027SBjoern A. Zeeb 
515fce8027SBjoern A. Zeeb 	/*
525fce8027SBjoern A. Zeeb 	 * -1 can be an input to cpuid according to logic in drivers
535fce8027SBjoern A. Zeeb 	 * but is never a valid cpuid in a set!
545fce8027SBjoern A. Zeeb 	 */
555fce8027SBjoern A. Zeeb 	KASSERT((cpuid >= -1 && cpuid <= MAXCPU), ("%s: invalid cpuid %d\n",
565fce8027SBjoern A. Zeeb 	    __func__, cpuid));
575fce8027SBjoern A. Zeeb 	KASSERT(!CPU_EMPTY(&mask), ("%s: empty CPU mask", __func__));
585fce8027SBjoern A. Zeeb 
595fce8027SBjoern A. Zeeb 	do {
605fce8027SBjoern A. Zeeb 		cpuid++;
615fce8027SBjoern A. Zeeb #ifdef SMP
625fce8027SBjoern A. Zeeb 		if (cpuid > mp_maxid)
635fce8027SBjoern A. Zeeb #endif
645fce8027SBjoern A. Zeeb 			cpuid = 0;
655fce8027SBjoern A. Zeeb 	} while (!CPU_ISSET(cpuid, &mask));
665fce8027SBjoern A. Zeeb 	return (cpuid);
675fce8027SBjoern A. Zeeb }
685fce8027SBjoern A. Zeeb 
695fce8027SBjoern A. Zeeb static __inline void
cpumask_set_cpu(int cpu,cpumask_t * mask)705fce8027SBjoern A. Zeeb cpumask_set_cpu(int cpu, cpumask_t *mask)
715fce8027SBjoern A. Zeeb {
725fce8027SBjoern A. Zeeb 
735fce8027SBjoern A. Zeeb 	CPU_SET(cpu, mask);
745fce8027SBjoern A. Zeeb }
755fce8027SBjoern A. Zeeb 
76*e2361e04SBjoern A. Zeeb #define	cpumask_of(_cpu)	(lkpi_get_static_single_cpu_mask(_cpu))
77*e2361e04SBjoern A. Zeeb 
78307f78f3SVladimir Kondratyev #endif	/* _LINUXKPI_LINUX_CPU_H */
79