1/*
2 * Copyright (c) 2012, ETH Zurich.
3 * All rights reserved.
4 *
5 * This file is distributed under the terms in the attached LICENSE file.
6 * If you do not find this file, copies can be found by writing to:
7 * ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
8 */
9
10/**
11 * \brief interface between the XOMP master and workers
12 */
13interface xomp "Xeon Phi openMP interface" {
14
15    /**
16     * \brief sends a frame capability to the one of the local workers
17     *        this cannot be used for remote workers!
18     * 
19     * \param [IN]  frame   frame capabilty
20     * \param [IN]  addr    virtual address of the requested memory
21     * \param [IN]  type    type of the memory
22     * \param [OUT] msgerr  returns the outcome of the request
23     */
24    rpc add_memory(in cap frame,
25                   in uint64 addr,
26                   in uint8 type,
27                   out errval msgerr); 
28    
29    
30    /**
31     * \brief asks the worker domain to update its local replicate or to 
32     *        write its local changes back
33     *
34     * \param [IN]  addr        physical address of the frame to update
35     * \param [IN]  offset      offset into the frame
36     * \param [IN]  length      length of the region to update
37     * \param [IN]  direction   direction of the memcpy operation
38     * \param [IN]  state       state pointer 
39     * \param [OUT] msg_err     outcome of the operation
40     * \param [OUT] state       state pointer
41     */
42    rpc update_memory(in uint64 addr,
43                      in uint64 offset,
44                      in uint64 length,
45                      in uint8  direction,
46                      in uint64 state,
47                      out errval msg_err,
48                      out uint64 out_state);
49
50    /**
51     * \brief notifies the worker domain to obtain memory from the local
52     *        gateway
53     * 
54     * \param [IN]  addr    virtual address of the requested memory
55     * \param [IN]  type    type of the memory
56     * \param [OUT] msgerr  returns the outcome of the request
57     */
58    rpc gw_req_memory(in uint64 addr,
59                      in uint8 type,
60                      out errval msgerr);
61
62    /**
63     * \brief sends a new task to a worker domain
64     * 
65     * \param [IN] fn       the function to be called
66     * \param [IN] arg      arguments for the functions
67     * \param [IN] tid      task id
68     * \param [IN] flags    task flags
69     */
70    message do_work(uint64 fn,
71                    uint64 arg,
72                    uint64 tid,
73                    uint64 flags);
74
75    /**
76     * \brief sends the done notification to the XOMP master domain
77     * 
78     * \param [IN] tid     task id
79     * \param [IN] msgerr  returns the outcome of the task
80     */
81    message done_notify(uint64 tid,
82                        errval msgerr);
83
84    /**
85     * \brief sends the done notification with argument to the XOMP master domain
86     * 
87     * \param [IN] tid     task id
88     * \param [IN] arg     argument
89     * \param [IN] msgerr  returns the outcome of the task
90     */
91    message done_with_arg(uint64 tid,
92                          uint64 arg,
93                          errval msgerr);
94};
95