mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:02:45 +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/DistinctNumeric.h> | ||||||
| #include <AK/Types.h> | #include <AK/Types.h> | ||||||
| #include <Kernel/API/POSIX/fcntl.h> | #include <Kernel/API/POSIX/fcntl.h> | ||||||
|  | #include <Kernel/API/POSIX/futex.h> | ||||||
| #include <Kernel/API/POSIX/netinet/in.h> | #include <Kernel/API/POSIX/netinet/in.h> | ||||||
| #include <Kernel/API/POSIX/signal.h> | #include <Kernel/API/POSIX/signal.h> | ||||||
| #include <Kernel/API/POSIX/sys/mman.h> | #include <Kernel/API/POSIX/sys/mman.h> | ||||||
|  | @ -90,48 +91,6 @@ enum { | ||||||
| 
 | 
 | ||||||
| #define FD_CLOEXEC 1 | #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:
 | // 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, ProcessID); | ||||||
| TYPEDEF_DISTINCT_ORDERED_ID(pid_t, ThreadID); | TYPEDEF_DISTINCT_ORDERED_ID(pid_t, ThreadID); | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include <Kernel/API/POSIX/futex.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
|  | @ -29,47 +30,6 @@ int profiling_free_buffer(pid_t); | ||||||
| #define THREAD_PRIORITY_HIGH 50 | #define THREAD_PRIORITY_HIGH 50 | ||||||
| #define THREAD_PRIORITY_MAX 99 | #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); | 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) | 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