xref: /openbmc/qemu/include/qemu/thread-context.h (revision e2de2c49)
1*e2de2c49SDavid Hildenbrand /*
2*e2de2c49SDavid Hildenbrand  * QEMU Thread Context
3*e2de2c49SDavid Hildenbrand  *
4*e2de2c49SDavid Hildenbrand  * Copyright Red Hat Inc., 2022
5*e2de2c49SDavid Hildenbrand  *
6*e2de2c49SDavid Hildenbrand  * Authors:
7*e2de2c49SDavid Hildenbrand  *  David Hildenbrand <david@redhat.com>
8*e2de2c49SDavid Hildenbrand  *
9*e2de2c49SDavid Hildenbrand  * This work is licensed under the terms of the GNU GPL, version 2 or later.
10*e2de2c49SDavid Hildenbrand  * See the COPYING file in the top-level directory.
11*e2de2c49SDavid Hildenbrand  */
12*e2de2c49SDavid Hildenbrand 
13*e2de2c49SDavid Hildenbrand #ifndef SYSEMU_THREAD_CONTEXT_H
14*e2de2c49SDavid Hildenbrand #define SYSEMU_THREAD_CONTEXT_H
15*e2de2c49SDavid Hildenbrand 
16*e2de2c49SDavid Hildenbrand #include "qapi/qapi-types-machine.h"
17*e2de2c49SDavid Hildenbrand #include "qemu/thread.h"
18*e2de2c49SDavid Hildenbrand #include "qom/object.h"
19*e2de2c49SDavid Hildenbrand 
20*e2de2c49SDavid Hildenbrand #define TYPE_THREAD_CONTEXT "thread-context"
21*e2de2c49SDavid Hildenbrand OBJECT_DECLARE_TYPE(ThreadContext, ThreadContextClass,
22*e2de2c49SDavid Hildenbrand                     THREAD_CONTEXT)
23*e2de2c49SDavid Hildenbrand 
24*e2de2c49SDavid Hildenbrand struct ThreadContextClass {
25*e2de2c49SDavid Hildenbrand     ObjectClass parent_class;
26*e2de2c49SDavid Hildenbrand };
27*e2de2c49SDavid Hildenbrand 
28*e2de2c49SDavid Hildenbrand struct ThreadContext {
29*e2de2c49SDavid Hildenbrand     /* private */
30*e2de2c49SDavid Hildenbrand     Object parent;
31*e2de2c49SDavid Hildenbrand 
32*e2de2c49SDavid Hildenbrand     /* private */
33*e2de2c49SDavid Hildenbrand     unsigned int thread_id;
34*e2de2c49SDavid Hildenbrand     QemuThread thread;
35*e2de2c49SDavid Hildenbrand 
36*e2de2c49SDavid Hildenbrand     /* Semaphore to wait for context thread action. */
37*e2de2c49SDavid Hildenbrand     QemuSemaphore sem;
38*e2de2c49SDavid Hildenbrand     /* Semaphore to wait for action in context thread. */
39*e2de2c49SDavid Hildenbrand     QemuSemaphore sem_thread;
40*e2de2c49SDavid Hildenbrand     /* Mutex to synchronize requests. */
41*e2de2c49SDavid Hildenbrand     QemuMutex mutex;
42*e2de2c49SDavid Hildenbrand 
43*e2de2c49SDavid Hildenbrand     /* Commands for the thread to execute. */
44*e2de2c49SDavid Hildenbrand     int thread_cmd;
45*e2de2c49SDavid Hildenbrand     void *thread_cmd_data;
46*e2de2c49SDavid Hildenbrand 
47*e2de2c49SDavid Hildenbrand     /* CPU affinity bitmap used for initialization. */
48*e2de2c49SDavid Hildenbrand     unsigned long *init_cpu_bitmap;
49*e2de2c49SDavid Hildenbrand     int init_cpu_nbits;
50*e2de2c49SDavid Hildenbrand };
51*e2de2c49SDavid Hildenbrand 
52*e2de2c49SDavid Hildenbrand void thread_context_create_thread(ThreadContext *tc, QemuThread *thread,
53*e2de2c49SDavid Hildenbrand                                   const char *name,
54*e2de2c49SDavid Hildenbrand                                   void *(*start_routine)(void *), void *arg,
55*e2de2c49SDavid Hildenbrand                                   int mode);
56*e2de2c49SDavid Hildenbrand 
57*e2de2c49SDavid Hildenbrand #endif /* SYSEMU_THREAD_CONTEXT_H */
58