Changeset c028b22 in mainline for kernel/generic/include/ipc/ipc.h


Ignore:
Timestamp:
2011-07-08T17:01:01Z (13 years ago)
Author:
Martin Sucha <sucha14@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
cc1a727
Parents:
4e36219 (diff), 026793d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes

File:
1 edited

Legend:

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

    r4e36219 rc028b22  
    100100#define IPC_GET_ARG5(data)  ((data).args[5])
    101101
    102 /* Well known phone descriptors */
    103 #define PHONE_NS  0
    104 
    105102/* Forwarding flags. */
    106103#define IPC_FF_NONE  0
     
    117114
    118115/* Data transfer flags. */
    119 #define IPC_XF_NONE             0
     116#define IPC_XF_NONE  0
    120117
    121118/** Restrict the transfer size if necessary. */
    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 */
     119#define IPC_XF_RESTRICT  (1 << 0)
     120
     121/** User-defined IPC methods */
    265122#define IPC_FIRST_USER_METHOD  1024
    266123
     
    309166       
    310167        /** Phones connected to this answerbox. */
    311         link_t connected_phones;
     168        list_t connected_phones;
    312169        /** Received calls. */
    313         link_t calls;
    314         link_t dispatched_calls;  /* Should be hash table in the future */
     170        list_t calls;
     171        list_t dispatched_calls;  /* Should be hash table in the future */
    315172       
    316173        /** Answered calls. */
    317         link_t answers;
     174        list_t answers;
    318175       
    319176        IRQ_SPINLOCK_DECLARE(irq_lock);
    320177       
    321178        /** Notifications from IRQ handlers. */
    322         link_t irq_notifs;
     179        list_t irq_notifs;
    323180        /** IRQs with notifications to this answerbox. */
    324         link_t irq_head;
     181        list_t irq_list;
    325182} answerbox_t;
    326183
     
    386243extern void ipc_backsend_err(phone_t *, call_t *, sysarg_t);
    387244extern void ipc_answerbox_slam_phones(answerbox_t *, bool);
    388 extern void ipc_cleanup_call_list(link_t *);
     245extern void ipc_cleanup_call_list(list_t *);
    389246
    390247extern void ipc_print_task(task_id_t);
Note: See TracChangeset for help on using the changeset viewer.