1/**
2 * \file
3 * \brief Architecture specific dispatcher struct shared between kernel and user
4 */
5
6/*
7 * Copyright (c) 2007, 2008, 2009, 2010, 2011, ETH Zurich.
8 * All rights reserved.
9 *
10 * This file is distributed under the terms in the attached LICENSE file.
11 * If you do not find this file, copies can be found by writing to:
12 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13 */
14
15#ifndef TARGET_X86_32_BARRELFISH_KPI_DISPATCHER_SHARED_H
16#define TARGET_X86_32_BARRELFISH_KPI_DISPATCHER_SHARED_H
17
18#include <barrelfish_kpi/dispatcher_shared.h>
19
20///< Architecture specific kernel/user shared dispatcher struct
21struct dispatcher_shared_x86_32 {
22    struct dispatcher_shared_generic d; ///< Generic portion
23
24    lvaddr_t    crit_pc_low;        ///< Critical section lower PC bound
25    lvaddr_t    crit_pc_high;       ///< Critical section upper PC bound
26
27    struct registers_x86_32 enabled_save_area;  ///< Enabled register save area
28    struct registers_x86_32 disabled_save_area; ///< Disabled register save area
29    struct registers_x86_32 trap_save_area;     ///< Trap register save area
30    struct registers_fpu_x86_32 enabled_fpu_state;      ///< FPU register save area
31    struct registers_fpu_x86_32 disabled_fpu_state;     ///< FPU register save area
32};
33
34static inline struct dispatcher_shared_x86_32*
35get_dispatcher_shared_x86_32(dispatcher_handle_t handle)
36{
37    return (struct dispatcher_shared_x86_32*)handle;
38}
39
40static inline struct registers_x86_32*
41dispatcher_x86_32_get_enabled_save_area(dispatcher_handle_t handle)
42{
43    struct dispatcher_shared_x86_32 *disp =
44        get_dispatcher_shared_x86_32(handle);
45    return &disp->enabled_save_area;
46}
47
48static inline struct registers_x86_32*
49dispatcher_x86_32_get_disabled_save_area(dispatcher_handle_t handle)
50{
51    struct dispatcher_shared_x86_32 *disp =
52        get_dispatcher_shared_x86_32(handle);
53    return &disp->disabled_save_area;
54}
55
56static inline struct registers_x86_32*
57dispatcher_x86_32_get_trap_save_area(dispatcher_handle_t handle)
58{
59    struct dispatcher_shared_x86_32 *disp =
60        get_dispatcher_shared_x86_32(handle);
61    return &disp->trap_save_area;
62}
63
64static inline struct registers_fpu_x86_32*
65dispatcher_x86_32_get_enabled_fpu_save_area(dispatcher_handle_t handle)
66{
67    struct dispatcher_shared_x86_32 *disp =
68        get_dispatcher_shared_x86_32(handle);
69    return &disp->enabled_fpu_state;
70}
71
72static inline struct registers_fpu_x86_32*
73dispatcher_x86_32_get_disabled_fpu_save_area(dispatcher_handle_t handle)
74{
75    struct dispatcher_shared_x86_32 *disp =
76        get_dispatcher_shared_x86_32(handle);
77    return &disp->disabled_fpu_state;
78}
79
80#endif // TARGET_X86_32_BARRELFISH_KPI_DISPATCHER_SHARED_H
81