]> git.saurik.com Git - apple/libpthread.git/blame - private/workqueue_private.h
libpthread-137.1.1.tar.gz
[apple/libpthread.git] / private / workqueue_private.h
CommitLineData
f1a1da6c
A
1/*
2 * Copyright (c) 2007, 2012 Apple Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24#ifndef __PTHREAD_WORKQUEUE_H__
25#define __PTHREAD_WORKQUEUE_H__
26
27#include <sys/cdefs.h>
964d3577 28#include <sys/event.h>
f1a1da6c
A
29#include <Availability.h>
30#include <pthread/pthread.h>
31#include <pthread/qos.h>
32#ifndef _PTHREAD_BUILDING_PTHREAD_
33#include <pthread/qos_private.h>
34#endif
35
964d3577 36#define PTHREAD_WORKQUEUE_SPI_VERSION 20150304
f1a1da6c
A
37
38/* Feature checking flags, returned by _pthread_workqueue_supported()
39 *
40 * Note: These bits should match the definition of PTHREAD_FEATURE_*
41 * bits defined in libpthread/kern/kern_internal.h */
42
43#define WORKQ_FEATURE_DISPATCHFUNC 0x01 // pthread_workqueue_setdispatch_np is supported (or not)
44#define WORKQ_FEATURE_FINEPRIO 0x02 // fine grained pthread workq priorities
45#define WORKQ_FEATURE_MAINTENANCE 0x10 // QOS class maintenance
964d3577 46#define WORKQ_FEATURE_KEVENT 0x20 // Support for direct kevent delivery
f1a1da6c
A
47
48/* Legacy dispatch priority bands */
49
50#define WORKQ_NUM_PRIOQUEUE 4
51
52#define WORKQ_HIGH_PRIOQUEUE 0 // high priority queue
53#define WORKQ_DEFAULT_PRIOQUEUE 1 // default priority queue
54#define WORKQ_LOW_PRIOQUEUE 2 // low priority queue
55#define WORKQ_BG_PRIOQUEUE 3 // background priority queue
56#define WORKQ_NON_INTERACTIVE_PRIOQUEUE 128 // libdispatch SPI level
57
58/* Legacy dispatch workqueue function flags */
59#define WORKQ_ADDTHREADS_OPTION_OVERCOMMIT 0x00000001
60
61__BEGIN_DECLS
62
63// Legacy callback prototype, used with pthread_workqueue_setdispatch_np
64typedef void (*pthread_workqueue_function_t)(int queue_priority, int options, void *ctxt);
65// New callback prototype, used with pthread_workqueue_init
66typedef void (*pthread_workqueue_function2_t)(pthread_priority_t priority);
964d3577
A
67// Newer callback prototype, used in conjection with function2 when there are kevents to deliver
68// both parameters are in/out parameters
69typedef void (*pthread_workqueue_function_kevent_t)(void **events, int *nevents);
f1a1da6c
A
70
71// Initialises the pthread workqueue subsystem, passing the new-style callback prototype,
72// the dispatchoffset and an unused flags field.
73__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
74int
75_pthread_workqueue_init(pthread_workqueue_function2_t func, int offset, int flags);
76
964d3577
A
77__OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0)
78int
79_pthread_workqueue_init_with_kevent(pthread_workqueue_function2_t queue_func, pthread_workqueue_function_kevent_t kevent_func, int offset, int flags);
80
f1a1da6c
A
81// Non-zero enables kill on current thread, zero disables it.
82__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2)
83int
84__pthread_workqueue_setkill(int);
85
86// Dispatch function to be called when new worker threads are created.
87__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0)
88int
89pthread_workqueue_setdispatch_np(pthread_workqueue_function_t worker_func);
90
91// Dispatch offset to be set in the kernel.
92__OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0)
93void
94pthread_workqueue_setdispatchoffset_np(int offset);
95
96// Request additional worker threads.
97__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0)
98int
99pthread_workqueue_addthreads_np(int queue_priority, int options, int numthreads);
100
101// Retrieve the supported pthread feature set
102__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
103int
104_pthread_workqueue_supported(void);
105
106// Request worker threads (fine grained priority)
107__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
108int
109_pthread_workqueue_addthreads(int numthreads, pthread_priority_t priority);
110
964d3577
A
111__OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0)
112int
113_pthread_workqueue_set_event_manager_priority(pthread_priority_t priority);
114
f1a1da6c
A
115// Apply a QoS override without allocating userspace memory
116__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
117int
118_pthread_override_qos_class_start_direct(mach_port_t thread, pthread_priority_t priority);
119
120// Drop a corresponding QoS override made above.
121__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
122int
123_pthread_override_qos_class_end_direct(mach_port_t thread);
124
125// Apply a QoS override on a given workqueue thread.
126__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
127int
128_pthread_workqueue_override_start_direct(mach_port_t thread, pthread_priority_t priority);
129
130// Drop all QoS overrides on the current workqueue thread.
131__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
132int
133_pthread_workqueue_override_reset(void);
134
215aeb03
A
135// Apply a QoS override on a given thread (can be non-workqueue as well) with a resource/queue token
136__OSX_AVAILABLE_STARTING(__MAC_10_10_2, __IPHONE_NA)
137int
138_pthread_workqueue_asynchronous_override_add(mach_port_t thread, pthread_priority_t priority, void *resource);
139
140// Reset overrides for the given resource for the current thread
141__OSX_AVAILABLE_STARTING(__MAC_10_10_2, __IPHONE_NA)
142int
143_pthread_workqueue_asynchronous_override_reset_self(void *resource);
144
145// Reset overrides for all resources for the current thread
146__OSX_AVAILABLE_STARTING(__MAC_10_10_2, __IPHONE_NA)
147int
148_pthread_workqueue_asynchronous_override_reset_all_self(void);
149
f1a1da6c
A
150__END_DECLS
151
152#endif // __PTHREAD_WORKQUEUE_H__