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, Universitaetstrasse 6, 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