mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 12:32:43 +00:00 
			
		
		
		
	Kernel+LibC: Share definitions for futex.h
This commit is contained in:
		
							parent
							
								
									6fd7212476
								
							
						
					
					
						commit
						ff50122dc5
					
				
					 3 changed files with 65 additions and 83 deletions
				
			
		
							
								
								
									
										63
									
								
								Kernel/API/POSIX/futex.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								Kernel/API/POSIX/futex.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <Kernel/API/POSIX/sys/types.h> | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| #define _FUTEX_OP_SHIFT_OP 28 | ||||
| #define _FUTEX_OP_MASK_OP 0xf | ||||
| #define _FUTEX_OP_SHIFT_CMP 24 | ||||
| #define _FUTEX_OP_MASK_CMP 0xf | ||||
| #define _FUTEX_OP_SHIFT_OP_ARG 12 | ||||
| #define _FUTEX_OP_MASK_OP_ARG 0xfff | ||||
| #define _FUTEX_OP_SHIFT_CMP_ARG 0 | ||||
| #define _FUTEX_OP_MASK_CMP_ARG 0xfff | ||||
| 
 | ||||
| #define FUTEX_OP(op, op_arg, cmp, cmp_arg) \ | ||||
|     ((((op)&_FUTEX_OP_MASK_OP) << _FUTEX_OP_SHIFT_OP) | (((cmp)&_FUTEX_OP_MASK_CMP) << _FUTEX_OP_SHIFT_CMP) | (((op_arg)&_FUTEX_OP_MASK_OP_ARG) << _FUTEX_OP_SHIFT_OP_ARG) | (((cmp_arg)&_FUTEX_OP_MASK_CMP_ARG) << _FUTEX_OP_SHIFT_CMP_ARG)) | ||||
| 
 | ||||
| #define _FUTEX_OP(val3) (((val3) >> _FUTEX_OP_SHIFT_OP) & _FUTEX_OP_MASK_OP) | ||||
| #define _FUTEX_CMP(val3) (((val3) >> _FUTEX_OP_SHIFT_CMP) & _FUTEX_OP_MASK_CMP) | ||||
| #define _FUTEX_OP_ARG(val3) (((val3) >> _FUTEX_OP_SHIFT_OP_ARG) & _FUTEX_OP_MASK_OP_ARG) | ||||
| #define _FUTEX_CMP_ARG(val3) (((val3) >> _FUTEX_OP_SHIFT_CMP_ARG) & _FUTEX_OP_MASK_CMP_ARG) | ||||
| 
 | ||||
| #define FUTEX_OP_SET 0 | ||||
| #define FUTEX_OP_ADD 1 | ||||
| #define FUTEX_OP_OR 2 | ||||
| #define FUTEX_OP_ANDN 3 | ||||
| #define FUTEX_OP_XOR 4 | ||||
| #define FUTEX_OP_ARG_SHIFT 8 | ||||
| 
 | ||||
| #define FUTEX_OP_CMP_EQ 0 | ||||
| #define FUTEX_OP_CMP_NE 1 | ||||
| #define FUTEX_OP_CMP_LT 2 | ||||
| #define FUTEX_OP_CMP_LE 3 | ||||
| #define FUTEX_OP_CMP_GT 4 | ||||
| #define FUTEX_OP_CMP_GE 5 | ||||
| 
 | ||||
| #define FUTEX_WAIT 1 | ||||
| #define FUTEX_WAKE 2 | ||||
| 
 | ||||
| #define FUTEX_REQUEUE 3 | ||||
| #define FUTEX_CMP_REQUEUE 4 | ||||
| #define FUTEX_WAKE_OP 5 | ||||
| #define FUTEX_WAIT_BITSET 9 | ||||
| #define FUTEX_WAKE_BITSET 10 | ||||
| 
 | ||||
| #define FUTEX_PRIVATE_FLAG (1 << 7) | ||||
| #define FUTEX_CLOCK_REALTIME (1 << 8) | ||||
| #define FUTEX_CMD_MASK ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME) | ||||
| 
 | ||||
| #define FUTEX_BITSET_MATCH_ANY 0xffffffff | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | @ -9,6 +9,7 @@ | |||
| #include <AK/DistinctNumeric.h> | ||||
| #include <AK/Types.h> | ||||
| #include <Kernel/API/POSIX/fcntl.h> | ||||
| #include <Kernel/API/POSIX/futex.h> | ||||
| #include <Kernel/API/POSIX/netinet/in.h> | ||||
| #include <Kernel/API/POSIX/signal.h> | ||||
| #include <Kernel/API/POSIX/sys/mman.h> | ||||
|  | @ -90,48 +91,6 @@ enum { | |||
| 
 | ||||
| #define FD_CLOEXEC 1 | ||||
| 
 | ||||
| #define _FUTEX_OP_SHIFT_OP 28 | ||||
| #define _FUTEX_OP_MASK_OP 0xf | ||||
| #define _FUTEX_OP_SHIFT_CMP 24 | ||||
| #define _FUTEX_OP_MASK_CMP 0xf | ||||
| #define _FUTEX_OP_SHIFT_OP_ARG 12 | ||||
| #define _FUTEX_OP_MASK_OP_ARG 0xfff | ||||
| #define _FUTEX_OP_SHIFT_CMP_ARG 0 | ||||
| #define _FUTEX_OP_MASK_CMP_ARG 0xfff | ||||
| 
 | ||||
| #define _FUTEX_OP(val3) (((val3) >> _FUTEX_OP_SHIFT_OP) & _FUTEX_OP_MASK_OP) | ||||
| #define _FUTEX_CMP(val3) (((val3) >> _FUTEX_OP_SHIFT_CMP) & _FUTEX_OP_MASK_CMP) | ||||
| #define _FUTEX_OP_ARG(val3) (((val3) >> _FUTEX_OP_SHIFT_OP_ARG) & _FUTEX_OP_MASK_OP_ARG) | ||||
| #define _FUTEX_CMP_ARG(val3) (((val3) >> _FUTEX_OP_SHIFT_CMP_ARG) & _FUTEX_OP_MASK_CMP_ARG) | ||||
| 
 | ||||
| #define FUTEX_OP_SET 0 | ||||
| #define FUTEX_OP_ADD 1 | ||||
| #define FUTEX_OP_OR 2 | ||||
| #define FUTEX_OP_ANDN 3 | ||||
| #define FUTEX_OP_XOR 4 | ||||
| #define FUTEX_OP_ARG_SHIFT 8 | ||||
| 
 | ||||
| #define FUTEX_OP_CMP_EQ 0 | ||||
| #define FUTEX_OP_CMP_NE 1 | ||||
| #define FUTEX_OP_CMP_LT 2 | ||||
| #define FUTEX_OP_CMP_LE 3 | ||||
| #define FUTEX_OP_CMP_GT 4 | ||||
| #define FUTEX_OP_CMP_GE 5 | ||||
| 
 | ||||
| #define FUTEX_WAIT 1 | ||||
| #define FUTEX_WAKE 2 | ||||
| #define FUTEX_REQUEUE 3 | ||||
| #define FUTEX_CMP_REQUEUE 4 | ||||
| #define FUTEX_WAKE_OP 5 | ||||
| #define FUTEX_WAIT_BITSET 9 | ||||
| #define FUTEX_WAKE_BITSET 10 | ||||
| 
 | ||||
| #define FUTEX_PRIVATE_FLAG (1 << 7) | ||||
| #define FUTEX_CLOCK_REALTIME (1 << 8) | ||||
| #define FUTEX_CMD_MASK ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME) | ||||
| 
 | ||||
| #define FUTEX_BITSET_MATCH_ANY 0xffffffff | ||||
| 
 | ||||
| // Avoid interference with AK/Types.h and LibC/sys/types.h by defining *separate* names:
 | ||||
| TYPEDEF_DISTINCT_ORDERED_ID(pid_t, ProcessID); | ||||
| TYPEDEF_DISTINCT_ORDERED_ID(pid_t, ThreadID); | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ | |||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <Kernel/API/POSIX/futex.h> | ||||
| #include <stdio.h> | ||||
| #include <sys/cdefs.h> | ||||
| #include <sys/types.h> | ||||
|  | @ -29,47 +30,6 @@ int profiling_free_buffer(pid_t); | |||
| #define THREAD_PRIORITY_HIGH 50 | ||||
| #define THREAD_PRIORITY_MAX 99 | ||||
| 
 | ||||
| #define _FUTEX_OP_SHIFT_OP 28 | ||||
| #define _FUTEX_OP_MASK_OP 0xf | ||||
| #define _FUTEX_OP_SHIFT_CMP 24 | ||||
| #define _FUTEX_OP_MASK_CMP 0xf | ||||
| #define _FUTEX_OP_SHIFT_OP_ARG 12 | ||||
| #define _FUTEX_OP_MASK_OP_ARG 0xfff | ||||
| #define _FUTEX_OP_SHIFT_CMP_ARG 0 | ||||
| #define _FUTEX_OP_MASK_CMP_ARG 0xfff | ||||
| 
 | ||||
| #define FUTEX_OP(op, op_arg, cmp, cmp_arg) \ | ||||
|     ((((op)&_FUTEX_OP_MASK_OP) << _FUTEX_OP_SHIFT_OP) | (((cmp)&_FUTEX_OP_MASK_CMP) << _FUTEX_OP_SHIFT_CMP) | (((op_arg)&_FUTEX_OP_MASK_OP_ARG) << _FUTEX_OP_SHIFT_OP_ARG) | (((cmp_arg)&_FUTEX_OP_MASK_CMP_ARG) << _FUTEX_OP_SHIFT_CMP_ARG)) | ||||
| 
 | ||||
| #define FUTEX_OP_SET 0 | ||||
| #define FUTEX_OP_ADD 1 | ||||
| #define FUTEX_OP_OR 2 | ||||
| #define FUTEX_OP_ANDN 3 | ||||
| #define FUTEX_OP_XOR 4 | ||||
| #define FUTEX_OP_ARG_SHIFT 8 | ||||
| 
 | ||||
| #define FUTEX_OP_CMP_EQ 0 | ||||
| #define FUTEX_OP_CMP_NE 1 | ||||
| #define FUTEX_OP_CMP_LT 2 | ||||
| #define FUTEX_OP_CMP_LE 3 | ||||
| #define FUTEX_OP_CMP_GT 4 | ||||
| #define FUTEX_OP_CMP_GE 5 | ||||
| 
 | ||||
| #define FUTEX_WAIT 1 | ||||
| #define FUTEX_WAKE 2 | ||||
| 
 | ||||
| #define FUTEX_REQUEUE 3 | ||||
| #define FUTEX_CMP_REQUEUE 4 | ||||
| #define FUTEX_WAKE_OP 5 | ||||
| #define FUTEX_WAIT_BITSET 9 | ||||
| #define FUTEX_WAKE_BITSET 10 | ||||
| 
 | ||||
| #define FUTEX_PRIVATE_FLAG (1 << 7) | ||||
| #define FUTEX_CLOCK_REALTIME (1 << 8) | ||||
| #define FUTEX_CMD_MASK ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME) | ||||
| 
 | ||||
| #define FUTEX_BITSET_MATCH_ANY 0xffffffff | ||||
| 
 | ||||
| int futex(uint32_t* userspace_address, int futex_op, uint32_t value, const struct timespec* timeout, uint32_t* userspace_address2, uint32_t value3); | ||||
| 
 | ||||
| static ALWAYS_INLINE int futex_wait(uint32_t* userspace_address, uint32_t value, const struct timespec* abstime, int clockid) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling