Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/ipc/ipc.h

    r55b77d9 rf6bffee  
    100100#define IPC_GET_ARG5(data)  ((data).args[5])
    101101
     102/* Well known phone descriptors */
     103#define PHONE_NS  0
     104
    102105/* Forwarding flags. */
    103106#define IPC_FF_NONE  0
     
    114117
    115118/* Data transfer flags. */
    116 #define IPC_XF_NONE  0
     119#define IPC_XF_NONE             0
    117120
    118121/** Restrict the transfer size if necessary. */
    119 #define IPC_XF_RESTRICT  (1 << 0)
    120 
    121 /** User-defined IPC methods */
     122#define IPC_XF_RESTRICT         (1 << 0)
     123
     124/** Kernel IPC interfaces
     125 *
     126 */
     127#define IPC_IF_KERNEL  0
     128
     129/** System-specific methods - only through special syscalls
     130 *
     131 * These methods have special behaviour. These methods also
     132 * have the implicit kernel interface 0.
     133 *
     134 */
     135
     136/** Clone connection.
     137 *
     138 * The calling task clones one of its phones for the callee.
     139 *
     140 * - ARG1 - The caller sets ARG1 to the phone of the cloned connection.
     141 *        - The callee gets the new phone from ARG1.
     142 *
     143 * - on answer, the callee acknowledges the new connection by sending EOK back
     144 *   or the kernel closes it
     145 *
     146 */
     147#define IPC_M_CONNECTION_CLONE  1
     148
     149/** Protocol for CONNECT - ME
     150 *
     151 * Through this call, the recipient learns about the new cloned connection.
     152 *
     153 * - ARG5 - the kernel sets ARG5 to contain the hash of the used phone
     154 * - on asnwer, the callee acknowledges the new connection by sending EOK back
     155 *   or the kernel closes it
     156 *
     157 */
     158#define IPC_M_CONNECT_ME  2
     159
     160/** Protocol for CONNECT - TO - ME
     161 *
     162 * Calling process asks the callee to create a callback connection,
     163 * so that it can start initiating new messages.
     164 *
     165 * The protocol for negotiating is:
     166 * - sys_connect_to_me - sends a message IPC_M_CONNECT_TO_ME
     167 * - recipient         - upon receipt tries to allocate new phone
     168 *                       - if it fails, responds with ELIMIT
     169 *                     - passes call to userspace. If userspace
     170 *                       responds with error, phone is deallocated and
     171 *                       error is sent back to caller. Otherwise
     172 *                       the call is accepted and the response is sent back.
     173 *                     - the hash of the client task is passed to userspace
     174 *                       (on the receiving side) as ARG4 of the call.
     175 *                     - the hash of the allocated phone is passed to userspace
     176 *                       (on the receiving side) as ARG5 of the call.
     177 *
     178 */
     179#define IPC_M_CONNECT_TO_ME  3
     180
     181/** Protocol for CONNECT - ME - TO
     182 *
     183 * Calling process asks the callee to create for him a new connection.
     184 * E.g. the caller wants a name server to connect him to print server.
     185 *
     186 * The protocol for negotiating is:
     187 * - sys_connect_me_to - send a synchronous message to name server
     188 *                       indicating that it wants to be connected to some
     189 *                       service
     190 *                     - arg1/2/3 are user specified, arg5 contains
     191 *                       address of the phone that should be connected
     192 *                       (TODO: it leaks to userspace)
     193 *  - recipient        -  if ipc_answer == 0, then accept connection
     194 *                     -  otherwise connection refused
     195 *                     -  recepient may forward message.
     196 *
     197 */
     198#define IPC_M_CONNECT_ME_TO  4
     199
     200/** This message is sent to answerbox when the phone is hung up
     201 *
     202 */
     203#define IPC_M_PHONE_HUNGUP  5
     204
     205/** Send as_area over IPC.
     206 * - ARG1 - source as_area base address
     207 * - ARG2 - size of source as_area (filled automatically by kernel)
     208 * - ARG3 - flags of the as_area being sent
     209 *
     210 * on answer, the recipient must set:
     211 * - ARG1 - dst as_area base adress
     212 *
     213 */
     214#define IPC_M_SHARE_OUT  6
     215
     216/** Receive as_area over IPC.
     217 * - ARG1 - destination as_area base address
     218 * - ARG2 - destination as_area size
     219 * - ARG3 - user defined argument
     220 *
     221 * on answer, the recipient must set:
     222 *
     223 * - ARG1 - source as_area base address
     224 * - ARG2 - flags that will be used for sharing
     225 *
     226 */
     227#define IPC_M_SHARE_IN  7
     228
     229/** Send data to another address space over IPC.
     230 * - ARG1 - source address space virtual address
     231 * - ARG2 - size of data to be copied, may be overriden by the recipient
     232 *
     233 * on answer, the recipient must set:
     234 *
     235 * - ARG1 - final destination address space virtual address
     236 * - ARG2 - final size of data to be copied
     237 *
     238 */
     239#define IPC_M_DATA_WRITE  8
     240
     241/** Receive data from another address space over IPC.
     242 * - ARG1 - destination virtual address in the source address space
     243 * - ARG2 - size of data to be received, may be cropped by the recipient
     244 *
     245 * on answer, the recipient must set:
     246 *
     247 * - ARG1 - source virtual address in the destination address space
     248 * - ARG2 - final size of data to be copied
     249 *
     250 */
     251#define IPC_M_DATA_READ  9
     252
     253/** Debug the recipient.
     254 * - ARG1 - specifies the debug method (from udebug_method_t)
     255 * - other arguments are specific to the debug method
     256 *
     257 */
     258#define IPC_M_DEBUG_ALL  10
     259
     260/* Well-known methods */
     261#define IPC_M_LAST_SYSTEM  511
     262#define IPC_M_PING         512
     263
     264/* User methods */
    122265#define IPC_FIRST_USER_METHOD  1024
    123266
     
    166309       
    167310        /** Phones connected to this answerbox. */
    168         list_t connected_phones;
     311        link_t connected_phones;
    169312        /** Received calls. */
    170         list_t calls;
    171         list_t dispatched_calls;  /* Should be hash table in the future */
     313        link_t calls;
     314        link_t dispatched_calls;  /* Should be hash table in the future */
    172315       
    173316        /** Answered calls. */
    174         list_t answers;
     317        link_t answers;
    175318       
    176319        IRQ_SPINLOCK_DECLARE(irq_lock);
    177320       
    178321        /** Notifications from IRQ handlers. */
    179         list_t irq_notifs;
     322        link_t irq_notifs;
    180323        /** IRQs with notifications to this answerbox. */
    181         list_t irq_list;
     324        link_t irq_head;
    182325} answerbox_t;
    183326
     
    243386extern void ipc_backsend_err(phone_t *, call_t *, sysarg_t);
    244387extern void ipc_answerbox_slam_phones(answerbox_t *, bool);
    245 extern void ipc_cleanup_call_list(list_t *);
     388extern void ipc_cleanup_call_list(link_t *);
    246389
    247390extern void ipc_print_task(task_id_t);
Note: See TracChangeset for help on using the changeset viewer.