1/**
2 * \file
3 * \brief Architecture specific dispatcher structure private to the user
4 */
5
6/*
7 * Copyright (c) 2010, 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_64_BARRELFISH_DISPATCHER_H
16#define TARGET_X86_64_BARRELFISH_DISPATCHER_H
17
18#include <barrelfish_kpi/dispatcher_shared.h>
19#include <barrelfish_kpi/dispatcher_shared_arch.h>
20#include <barrelfish/dispatcher.h>
21
22/// Dispatcher structure (including data accessed only by user code)
23struct dispatcher_x86_64 {
24    struct dispatcher_shared_x86_64 d;  ///< Shared (user/kernel) data. Must be first.
25    struct dispatcher_generic generic;  ///< User private data
26
27    uint16_t disp_seg_selector;         ///< Dispatcher segment selector
28    /// Dummy segment to which disp_seg_selector refers; see ldt_init_disabled()
29    uintptr_t dummyseg[2];
30
31    /* Incoming LMP endpoints (buffers and receive cap pointers) follow */
32};
33
34static inline struct dispatcher_generic*
35get_dispatcher_generic_x86_64(dispatcher_handle_t handle)
36{
37    struct dispatcher_x86_64 *disp = (struct dispatcher_x86_64*)handle;
38    return &disp->generic;
39}
40
41static inline struct dispatcher_x86_64 *
42get_dispatcher_x86_64(dispatcher_handle_t handle)
43{
44    return (struct dispatcher_x86_64*)handle;
45}
46
47#endif // TARGET_X86_64_BARRELFISH_DISPATCHER_H
48