L4Re - L4 Runtime Environment
thread.h
Go to the documentation of this file.
1 
5 /*
6  * (c) 2008-2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
7  * Alexander Warg <warg@os.inf.tu-dresden.de>,
8  * Björn Döbel <doebel@os.inf.tu-dresden.de>,
9  * Torsten Frenzel <frenzel@os.inf.tu-dresden.de>
10  * economic rights: Technische Universität Dresden (Germany)
11  *
12  * This file is part of TUD:OS and distributed under the terms of the
13  * GNU General Public License 2.
14  * Please see the COPYING-GPL-2 file for details.
15  *
16  * As a special exception, you may use this file as part of a free software
17  * library without restriction. Specifically, if other files instantiate
18  * templates or use macros or inline functions from this file, or you compile
19  * this file and link it with other files to produce an executable, this
20  * file does not by itself cause the resulting executable to be covered by
21  * the GNU General Public License. This exception does not however
22  * invalidate any other reasons why the executable file might be covered by
23  * the GNU General Public License.
24  */
25 #pragma once
26 
27 #include <l4/sys/types.h>
28 #include <l4/sys/utcb.h>
29 #include <l4/sys/ipc.h>
30 
87 L4_INLINE l4_msgtag_t
89  l4_umword_t flags) L4_NOTHROW;
90 
97 L4_INLINE l4_msgtag_t
99  l4_umword_t flags, l4_utcb_t *utcb) L4_NOTHROW;
100 
124 L4_INLINE l4_msgtag_t
126  l4_umword_t *flags) L4_NOTHROW;
127 
134 L4_INLINE l4_msgtag_t
136  l4_umword_t *flags, l4_utcb_t *utcb) L4_NOTHROW;
137 
138 
139 
187 L4_INLINE void
189 
194 L4_INLINE void
195 l4_thread_control_start_u(l4_utcb_t *utcb) L4_NOTHROW;
196 
206 L4_INLINE void
208 
213 L4_INLINE void
214 l4_thread_control_pager_u(l4_cap_idx_t pager, l4_utcb_t *utcb) L4_NOTHROW;
215 
225 L4_INLINE void
227 
232 L4_INLINE void
233 l4_thread_control_exc_handler_u(l4_cap_idx_t exc_handler,
234  l4_utcb_t *utcb) L4_NOTHROW;
235 
251 L4_INLINE void
252 l4_thread_control_bind(l4_utcb_t *thread_utcb,
253  l4_cap_idx_t task) L4_NOTHROW;
254 
259 L4_INLINE void
260 l4_thread_control_bind_u(l4_utcb_t *thread_utcb,
261  l4_cap_idx_t task, l4_utcb_t *utcb) L4_NOTHROW;
262 
277 L4_INLINE void
279 
284 L4_INLINE void
285 l4_thread_control_alien_u(l4_utcb_t *utcb, int on) L4_NOTHROW;
286 
297 L4_INLINE void
299 
304 L4_INLINE void
305 l4_thread_control_ux_host_syscall_u(l4_utcb_t *utcb, int on) L4_NOTHROW;
306 
307 
308 
316 L4_INLINE l4_msgtag_t
318 
323 L4_INLINE l4_msgtag_t
324 l4_thread_control_commit_u(l4_cap_idx_t thread, l4_utcb_t *utcb) L4_NOTHROW;
325 
332 L4_INLINE l4_msgtag_t
334 
343 L4_INLINE l4_msgtag_t
345 
350 L4_INLINE l4_msgtag_t
351 l4_thread_switch_u(l4_cap_idx_t to_thread, l4_utcb_t *utcb) L4_NOTHROW;
352 
353 
354 
364 L4_INLINE l4_msgtag_t
366 
371 L4_INLINE l4_msgtag_t
372 l4_thread_stats_time_u(l4_cap_idx_t thread, l4_kernel_clock_t *us,
373  l4_utcb_t *utcb) L4_NOTHROW;
374 
375 
386 L4_INLINE l4_msgtag_t
388 
393 L4_INLINE l4_msgtag_t
394 l4_thread_vcpu_resume_start_u(l4_utcb_t *utcb) L4_NOTHROW;
395 
422 L4_INLINE l4_msgtag_t
424  l4_msgtag_t tag) L4_NOTHROW;
425 
430 L4_INLINE l4_msgtag_t
431 l4_thread_vcpu_resume_commit_u(l4_cap_idx_t thread,
432  l4_msgtag_t tag, l4_utcb_t *utcb) L4_NOTHROW;
433 
434 
451 L4_INLINE l4_msgtag_t
453 
461 L4_INLINE l4_msgtag_t
463  l4_utcb_t *utcb) L4_NOTHROW;
464 
487 L4_INLINE l4_msgtag_t
489 
497 L4_INLINE l4_msgtag_t
499  l4_utcb_t *utcb) L4_NOTHROW;
500 
501 
514 L4_INLINE l4_msgtag_t
516 
521 L4_INLINE l4_msgtag_t
522 l4_thread_register_del_irq_u(l4_cap_idx_t thread, l4_cap_idx_t irq,
523  l4_utcb_t *utcb) L4_NOTHROW;
524 
536 L4_INLINE l4_msgtag_t
538 
543 L4_INLINE l4_msgtag_t
544 l4_thread_modify_sender_start_u(l4_utcb_t *u) L4_NOTHROW;
545 
570 L4_INLINE int
572  l4_umword_t match,
573  l4_umword_t del_bits,
574  l4_umword_t add_bits,
575  l4_msgtag_t *tag) L4_NOTHROW;
576 
581 L4_INLINE int
582 l4_thread_modify_sender_add_u(l4_umword_t match_mask,
583  l4_umword_t match,
584  l4_umword_t del_bits,
585  l4_umword_t add_bits,
586  l4_msgtag_t *tag, l4_utcb_t *u) L4_NOTHROW;
587 
595 L4_INLINE l4_msgtag_t
597 
602 L4_INLINE l4_msgtag_t
603 l4_thread_modify_sender_commit_u(l4_cap_idx_t thread, l4_msgtag_t tag,
604  l4_utcb_t *u) L4_NOTHROW;
605 
613 {
622  L4_THREAD_VCPU_CONTROL_EXT_OP = L4_THREAD_VCPU_CONTROL_OP | 0x10000,
628 };
629 
641 {
652 };
653 
664 {
671 };
672 
679 {
682 };
683 
684 
685 /* IMPLEMENTATION -----------------------------------------------------------*/
686 
687 #include <l4/sys/ipc.h>
688 #include <l4/sys/types.h>
689 
690 L4_INLINE l4_msgtag_t
692  l4_umword_t flags, l4_utcb_t *utcb) L4_NOTHROW
693 {
694  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
695  v->mr[0] = L4_THREAD_EX_REGS_OP | flags;
696  v->mr[1] = ip;
697  v->mr[2] = sp;
698  return l4_ipc_call(thread, utcb, l4_msgtag(L4_PROTO_THREAD, 3, 0, 0), L4_IPC_NEVER);
699 }
700 
701 L4_INLINE l4_msgtag_t
703  l4_umword_t *flags, l4_utcb_t *utcb) L4_NOTHROW
704 {
705  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
706  l4_msgtag_t ret = l4_thread_ex_regs_u(thread, *ip, *sp, *flags, utcb);
707  if (l4_error_u(ret, utcb))
708  return ret;
709 
710  *flags = v->mr[0];
711  *ip = v->mr[1];
712  *sp = v->mr[2];
713  return ret;
714 }
715 
716 L4_INLINE void
717 l4_thread_control_start_u(l4_utcb_t *utcb) L4_NOTHROW
718 {
719  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
721 }
722 
723 L4_INLINE void
724 l4_thread_control_pager_u(l4_cap_idx_t pager, l4_utcb_t *utcb) L4_NOTHROW
725 {
726  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
729 }
730 
731 L4_INLINE void
732 l4_thread_control_exc_handler_u(l4_cap_idx_t exc_handler,
733  l4_utcb_t *utcb) L4_NOTHROW
734 {
735  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
737  v->mr[L4_THREAD_CONTROL_MR_IDX_EXC_HANDLER] = exc_handler;
738 }
739 
740 L4_INLINE void
741 l4_thread_control_bind_u(l4_utcb_t *thread_utcb, l4_cap_idx_t task,
742  l4_utcb_t *utcb) L4_NOTHROW
743 {
744  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
749 }
750 
751 L4_INLINE void
752 l4_thread_control_alien_u(l4_utcb_t *utcb, int on) L4_NOTHROW
753 {
754  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
757 }
758 
759 L4_INLINE void
760 l4_thread_control_ux_host_syscall_u(l4_utcb_t *utcb, int on) L4_NOTHROW
761 {
762  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
765 }
766 
767 L4_INLINE l4_msgtag_t
768 l4_thread_control_commit_u(l4_cap_idx_t thread, l4_utcb_t *utcb) L4_NOTHROW
769 {
770  int items = 0;
771  if (l4_utcb_mr_u(utcb)->mr[L4_THREAD_CONTROL_MR_IDX_FLAGS] & L4_THREAD_CONTROL_BIND_TASK)
772  items = 1;
773  return l4_ipc_call(thread, utcb, l4_msgtag(L4_PROTO_THREAD, 6, items, 0), L4_IPC_NEVER);
774 }
775 
776 
777 L4_INLINE l4_msgtag_t
779 {
781  return l4_msgtag(0, 0, 0, 0);
782 }
783 
784 /* Preliminary, to be changed */
785 L4_INLINE l4_msgtag_t
786 l4_thread_switch_u(l4_cap_idx_t to_thread, l4_utcb_t *utcb) L4_NOTHROW
787 {
788  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
789  v->mr[0] = L4_THREAD_SWITCH_OP;
790  return l4_ipc_call(to_thread, utcb, l4_msgtag(L4_PROTO_THREAD, 1, 0, 0), L4_IPC_NEVER);
791 }
792 
793 
794 L4_INLINE l4_msgtag_t
795 l4_thread_stats_time_u(l4_cap_idx_t thread, l4_kernel_clock_t *us,
796  l4_utcb_t *utcb) L4_NOTHROW
797 {
798  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
799  l4_msgtag_t res;
800 
801  v->mr[0] = L4_THREAD_STATS_OP;
802 
803  res = l4_ipc_call(thread, utcb, l4_msgtag(L4_PROTO_THREAD, 1, 0, 0), L4_IPC_NEVER);
804 
805  if (l4_msgtag_has_error(res))
806  return res;
807 
808  *us = v->mr64[l4_utcb_mr64_idx(0)];
809 
810  return res;
811 }
812 
813 L4_INLINE l4_msgtag_t
814 l4_thread_vcpu_resume_start_u(l4_utcb_t *utcb) L4_NOTHROW
815 {
816  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
818  return l4_msgtag(L4_PROTO_THREAD, 1, 0, 0);
819 }
820 
821 L4_INLINE l4_msgtag_t
822 l4_thread_vcpu_resume_commit_u(l4_cap_idx_t thread,
823  l4_msgtag_t tag, l4_utcb_t *utcb) L4_NOTHROW
824 {
825  return l4_ipc_call(thread, utcb, tag, L4_IPC_NEVER);
826 }
827 
828 L4_INLINE l4_msgtag_t
830  l4_umword_t flags) L4_NOTHROW
831 {
832  return l4_thread_ex_regs_u(thread, ip, sp, flags, l4_utcb());
833 }
834 
835 L4_INLINE l4_msgtag_t
837  l4_umword_t *flags) L4_NOTHROW
838 {
839  return l4_thread_ex_regs_ret_u(thread, ip, sp, flags, l4_utcb());
840 }
841 
842 L4_INLINE void
844 {
845  l4_thread_control_start_u(l4_utcb());
846 }
847 
848 L4_INLINE void
850 {
851  l4_thread_control_pager_u(pager, l4_utcb());
852 }
853 
854 L4_INLINE void
856 {
857  l4_thread_control_exc_handler_u(exc_handler, l4_utcb());
858 }
859 
860 
861 L4_INLINE void
863 {
864  l4_thread_control_bind_u(thread_utcb, task, l4_utcb());
865 }
866 
867 L4_INLINE void
869 {
870  l4_thread_control_alien_u(l4_utcb(), on);
871 }
872 
873 L4_INLINE void
875 {
876  l4_thread_control_ux_host_syscall_u(l4_utcb(), on);
877 }
878 
879 L4_INLINE l4_msgtag_t
881 {
882  return l4_thread_control_commit_u(thread, l4_utcb());
883 }
884 
885 
886 
887 
888 L4_INLINE l4_msgtag_t
890 {
891  return l4_thread_switch_u(to_thread, l4_utcb());
892 }
893 
894 
895 
896 
897 L4_INLINE l4_msgtag_t
899 {
900  return l4_thread_stats_time_u(thread, us, l4_utcb());
901 }
902 
903 L4_INLINE l4_msgtag_t
905 {
906  return l4_thread_vcpu_resume_start_u(l4_utcb());
907 }
908 
909 L4_INLINE l4_msgtag_t
912 {
913  return l4_thread_vcpu_resume_commit_u(thread, tag, l4_utcb());
914 }
915 
916 
917 L4_INLINE l4_msgtag_t
918 l4_thread_register_del_irq_u(l4_cap_idx_t thread, l4_cap_idx_t irq,
920 {
921  l4_msg_regs_t *m = l4_utcb_mr_u(u);
923  m->mr[1] = l4_map_obj_control(0,0);
924  m->mr[2] = l4_obj_fpage(irq, 0, L4_CAP_FPAGE_RWS).raw;
925  return l4_ipc_call(thread, u, l4_msgtag(L4_PROTO_THREAD, 1, 1, 0), L4_IPC_NEVER);
926 
927 }
928 
929 L4_INLINE l4_msgtag_t
931 {
932  return l4_thread_register_del_irq_u(thread, irq, l4_utcb());
933 }
934 
935 
936 L4_INLINE l4_msgtag_t
938  l4_utcb_t *utcb) L4_NOTHROW
939 {
940  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
942  v->mr[1] = vcpu_state;
943  return l4_ipc_call(thread, utcb, l4_msgtag(L4_PROTO_THREAD, 2, 0, 0), L4_IPC_NEVER);
944 }
945 
946 L4_INLINE l4_msgtag_t
948 { return l4_thread_vcpu_control_u(thread, vcpu_state, l4_utcb()); }
949 
950 
951 L4_INLINE l4_msgtag_t
953  l4_utcb_t *utcb) L4_NOTHROW
954 {
955  l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
956  v->mr[0] = L4_THREAD_VCPU_CONTROL_EXT_OP;
957  v->mr[1] = ext_vcpu_state;
958  return l4_ipc_call(thread, utcb, l4_msgtag(L4_PROTO_THREAD, 2, 0, 0), L4_IPC_NEVER);
959 }
960 
961 L4_INLINE l4_msgtag_t
963 { return l4_thread_vcpu_control_ext_u(thread, ext_vcpu_state, l4_utcb()); }
964 
965 L4_INLINE l4_msgtag_t
966 l4_thread_modify_sender_start_u(l4_utcb_t *u) L4_NOTHROW
967 {
968  l4_msg_regs_t *m = l4_utcb_mr_u(u);
970  return l4_msgtag(L4_PROTO_THREAD, 1, 0, 0);
971 }
972 
973 L4_INLINE int
974 l4_thread_modify_sender_add_u(l4_umword_t match_mask,
975  l4_umword_t match,
976  l4_umword_t del_bits,
977  l4_umword_t add_bits,
979 {
980  l4_msg_regs_t *m = l4_utcb_mr_u(u);
981  unsigned w = l4_msgtag_words(*tag);
982  if (w >= L4_UTCB_GENERIC_DATA_SIZE - 4)
983  return -L4_ENOMEM;
984 
985  m->mr[w] = match_mask;
986  m->mr[w+1] = match;
987  m->mr[w+2] = del_bits;
988  m->mr[w+3] = add_bits;
989 
990  *tag = l4_msgtag(l4_msgtag_label(*tag), w + 4, 0, 0);
991 
992  return 0;
993 }
994 
995 L4_INLINE l4_msgtag_t
996 l4_thread_modify_sender_commit_u(l4_cap_idx_t thread, l4_msgtag_t tag,
998 {
999  return l4_ipc_call(thread, u, tag, L4_IPC_NEVER);
1000 }
1001 
1002 L4_INLINE l4_msgtag_t
1004 {
1005  return l4_thread_modify_sender_start_u(l4_utcb());
1006 }
1007 
1008 L4_INLINE int
1010  l4_umword_t match,
1011  l4_umword_t del_bits,
1012  l4_umword_t add_bits,
1013  l4_msgtag_t *tag) L4_NOTHROW
1014 {
1015  return l4_thread_modify_sender_add_u(match_mask, match,
1016  del_bits, add_bits, tag, l4_utcb());
1017 }
1018 
1019 L4_INLINE l4_msgtag_t
1021 {
1022  return l4_thread_modify_sender_commit_u(thread, tag, l4_utcb());
1023 }
Identify a message item as map item.
Definition: consts.h:189
Control operation.
Definition: thread.h:614
Encapsulation of the message-register block in the UTCB.
Definition: utcb.h:78
Index for task flex-page for bind.
Definition: thread.h:670
Total number of message register (MRs) available.
Definition: utcb.h:47
l4_msgtag_t l4_thread_ex_regs(l4_cap_idx_t thread, l4_addr_t ip, l4_addr_t sp, l4_umword_t flags) L4_NOTHROW
Exchange basic thread registers.
Definition: thread.h:829
unsigned l4_utcb_mr64_idx(unsigned idx) L4_NOTHROW
Get index into 64bit message registers alias from native-sized index.
Definition: utcb.h:386
L4_thread_ex_regs_flags
Flags for the thread ex-regs operation.
Definition: thread.h:678
l4_msgtag_t l4_thread_vcpu_control_ext_u(l4_cap_idx_t thread, l4_addr_t ext_vcpu_state, l4_utcb_t *utcb) L4_NOTHROW
Enable or disable the extended vCPU feature for the thread.
Definition: thread.h:952
Invalid capability selector.
Definition: consts.h:141
l4_msgtag_t l4_thread_ex_regs_ret_u(l4_cap_idx_t thread, l4_addr_t *ip, l4_addr_t *sp, l4_umword_t *flags, l4_utcb_t *utcb) L4_NOTHROW
Exchange basic thread registers and return previous values.
Definition: thread.h:702
unsigned l4_msgtag_has_error(l4_msgtag_t t) L4_NOTHROW
Test for error indicator flag.
Definition: types.h:436
l4_msgtag_t l4_thread_vcpu_resume_commit(l4_cap_idx_t thread, l4_msgtag_t tag) L4_NOTHROW
Commit vCPU resume.
Definition: thread.h:910
l4_umword_t mr[L4_UTCB_GENERIC_DATA_SIZE]
Message registers.
Definition: utcb.h:80
Common L4 ABI Data Types.
Read-write-execute flex page.
Definition: __l4_fpage.h:114
l4_msgtag_t l4_ipc_call(l4_cap_idx_t object, l4_utcb_t *utcb, l4_msgtag_t tag, l4_timeout_t timeout) L4_NOTHROW
Object call (usual invocation).
Definition: ipc.h:445
Do a thread switch.
Definition: thread.h:616
l4_msgtag_t l4_thread_modify_sender_start(void) L4_NOTHROW
Start a thread sender modifiction sequence.
Definition: thread.h:1003
Index for feature values.
Definition: thread.h:668
void l4_thread_control_ux_host_syscall(int on) L4_NOTHROW
Enable pass through of native host (Linux) system calls.
Definition: thread.h:874
Set TPIDRURO register.
Definition: thread.h:624
unsigned long l4_cap_idx_t
L4 Capability selector Type.
Definition: types.h:342
Exchange registers operation.
Definition: thread.h:615
struct l4_utcb_t l4_utcb_t
Opaque type for the UTCB.
Definition: utcb.h:67
#define L4_IPC_NEVER
never timeout
Definition: __timeout.h:80
l4_uint64_t mr64[L4_UTCB_GENERIC_DATA_SIZE/(sizeof(l4_uint64_t)/sizeof(l4_umword_t))]
Message registers 64bit alias.
Definition: utcb.h:81
l4_msgtag_t l4_thread_modify_sender_commit(l4_cap_idx_t thread, l4_msgtag_t tag) L4_NOTHROW
Apply (commit) a sender modification sequence.
Definition: thread.h:1020
long l4_msgtag_label(l4_msgtag_t t) L4_NOTHROW
Get the protocol of tag.
Definition: types.h:419
Protocol for messages to a thread object.
Definition: types.h:64
l4_msgtag_t l4_thread_switch(l4_cap_idx_t to_thread) L4_NOTHROW
Switch to another thread (and donate the remaining time slice).
Definition: thread.h:889
Cancel ongoing IPC in the thread.
Definition: thread.h:680
L4_thread_control_mr_indices
Indices for the values in the message register for thread control.
Definition: thread.h:663
Alien state of the thread is set.
Definition: thread.h:647
l4_msgtag_t l4_thread_vcpu_control_ext(l4_cap_idx_t thread, l4_addr_t ext_vcpu_state) L4_NOTHROW
Enable or disable the extended vCPU feature for the thread.
Definition: thread.h:962
L4_thread_control_flags
Flags for the thread control operation.
Definition: thread.h:640
Index for pager cap.
Definition: thread.h:666
l4_msgtag_t l4_thread_yield(void) L4_NOTHROW
Yield current time slice.
Definition: thread.h:778
Index for exception handler.
Definition: thread.h:667
unsigned long l4_umword_t
Unsigned machine word.
Definition: l4int.h:52
void l4_thread_control_alien(int on) L4_NOTHROW
Enable alien mode.
Definition: thread.h:868
l4_uint64_t l4_kernel_clock_t
Kernel clock type.
Definition: l4int.h:65
The exception handler of the thread will be given.
Definition: thread.h:651
l4_msgtag_t l4_thread_vcpu_control_u(l4_cap_idx_t thread, l4_addr_t vcpu_state, l4_utcb_t *utcb) L4_NOTHROW
Enable or disable the vCPU feature for the thread.
Definition: thread.h:937
unsigned l4_msgtag_words(l4_msgtag_t t) L4_NOTHROW
Get the number of untyped words.
Definition: types.h:423
l4_umword_t raw
Raw value.
Definition: __l4_fpage.h:83
void l4_thread_control_bind(l4_utcb_t *thread_utcb, l4_cap_idx_t task) L4_NOTHROW
Bind the thread to a task.
Definition: thread.h:862
l4_msgtag_t l4_thread_ex_regs_u(l4_cap_idx_t thread, l4_addr_t ip, l4_addr_t sp, l4_umword_t flags, l4_utcb_t *utcb) L4_NOTHROW
Exchange basic thread registers.
Definition: thread.h:691
Thread statistics.
Definition: thread.h:617
Index for UTCB address for bind.
Definition: thread.h:669
l4_msgtag_t l4_thread_control_commit(l4_cap_idx_t thread) L4_NOTHROW
Commit the thread control parameters.
Definition: thread.h:880
l4_umword_t l4_map_obj_control(l4_umword_t spot, unsigned grant) L4_NOTHROW
Create the first word for a map item for the object space.
Definition: __l4_fpage.h:679
Register an IPC-gate deletion IRQ.
Definition: thread.h:619
l4_msgtag_t l4_thread_stats_time(l4_cap_idx_t thread, l4_kernel_clock_t *us) L4_NOTHROW
Get consumed time of thread in µs.
Definition: thread.h:898
l4_utcb_t * l4_utcb(void) L4_NOTHROW L4_PURE
Get the UTCB address.
Definition: utcb.h:340
No memory.
Definition: err.h:50
int l4_thread_modify_sender_add(l4_umword_t match_mask, l4_umword_t match, l4_umword_t del_bits, l4_umword_t add_bits, l4_msgtag_t *tag) L4_NOTHROW
Add a modification pattern to a sender modification sequence.
Definition: thread.h:1009
l4_msgtag_t l4_msgtag(long label, unsigned words, unsigned items, unsigned flags) L4_NOTHROW
Create a message tag from the specified values.
Definition: types.h:408
The pager will be given.
Definition: thread.h:643
l4_msgtag_t l4_thread_ex_regs_ret(l4_cap_idx_t thread, l4_addr_t *ip, l4_addr_t *sp, l4_umword_t *flags) L4_NOTHROW
Exchange basic thread registers and return previous values.
Definition: thread.h:836
L4_thread_ops
Operations on thread objects.
Definition: thread.h:612
l4_msgtag_t l4_thread_vcpu_control(l4_cap_idx_t thread, l4_addr_t vcpu_state) L4_NOTHROW
Enable or disable the vCPU feature for the thread.
Definition: thread.h:947
Trigger artificial exception in thread.
Definition: thread.h:681
VCPU resume.
Definition: thread.h:618
l4_msgtag_t l4_thread_vcpu_resume_start(void) L4_NOTHROW
vCPU return from event handler.
Definition: thread.h:904
l4_msgtag_t l4_ipc_receive(l4_cap_idx_t object, l4_utcb_t *utcb, l4_timeout_t timeout) L4_NOTHROW
Wait for a message from a specific source.
Definition: ipc.h:487
The task to bind the thread to will be given.
Definition: thread.h:645
Get segment information.
Definition: thread.h:626
Read, interface specific &#39;W&#39;, and &#39;S&#39; rights for capability flex-pages.
Definition: __l4_fpage.h:190
Message tag data structure.
Definition: types.h:159
unsigned long l4_addr_t
Address type.
Definition: l4int.h:45
void l4_thread_control_exc_handler(l4_cap_idx_t exc_handler) L4_NOTHROW
Set the exception handler.
Definition: thread.h:855
Enable / disable VCPU feature.
Definition: thread.h:621
Fiasco-UX only: pass-through of host system calls is set.
Definition: thread.h:649
Modify all senders IDs that match the given pattern.
Definition: thread.h:620
l4_fpage_t l4_obj_fpage(l4_cap_idx_t obj, unsigned int order, unsigned char rights) L4_NOTHROW
Create a kernel-object flex page.
Definition: __l4_fpage.h:645
l4_msgtag_t l4_thread_register_del_irq(l4_cap_idx_t thread, l4_cap_idx_t irq) L4_NOTHROW
Register an IRQ that will trigger upon deletion events.
Definition: thread.h:930
void l4_thread_control_start(void) L4_NOTHROW
Start a thread control API sequence.
Definition: thread.h:843
void l4_thread_control_pager(l4_cap_idx_t pager) L4_NOTHROW
Set the pager.
Definition: thread.h:849
Mask for opcodes.
Definition: thread.h:627
#define L4_IPC_BOTH_TIMEOUT_0
0 receive and send timeout
Definition: __timeout.h:83
#define L4_NOTHROW
Mark a function declaration and definition as never throwing an exception.
Definition: compiler.h:185