Ignore:
File:
1 edited

Legend:

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

    r19fc04c r79ae36dd  
    3636#define KERN_IPC_H_
    3737
     38/** Length of data being transfered with IPC call
     39 *
     40 * The uspace may not be able to utilize full length
     41 *
     42 */
     43#define IPC_CALL_LEN  6
     44
     45/** Maximum active async calls per phone */
     46#define IPC_MAX_ASYNC_CALLS  4
     47
     48/* Flags for calls */
     49
     50/** This is answer to a call */
     51#define IPC_CALL_ANSWERED  (1 << 0)
     52
     53/** Answer will not be passed to userspace, will be discarded */
     54#define IPC_CALL_DISCARD_ANSWER  (1 << 1)
     55
     56/** Call was forwarded */
     57#define IPC_CALL_FORWARDED  (1 << 2)
     58
     59/** Identify connect_me_to answer */
     60#define IPC_CALL_CONN_ME_TO  (1 << 3)
     61
     62/** Interrupt notification */
     63#define IPC_CALL_NOTIF  (1 << 4)
     64
     65
     66/** Bits used in call hashes.
     67 *
     68 * The addresses are aligned at least to 4 that is why we can use the 2 least
     69 * significant bits of the call address.
     70 *
     71 */
     72
     73/** Type of this call is 'answer' */
     74#define IPC_CALLID_ANSWERED  1
     75
     76/** Type of this call is 'notification' */
     77#define IPC_CALLID_NOTIFICATION  2
     78
     79/* Return values from sys_ipc_call_async(). */
     80#define IPC_CALLRET_FATAL      -1
     81#define IPC_CALLRET_TEMPORARY  -2
     82
     83
     84/* Macros for manipulating calling data */
     85#define IPC_SET_RETVAL(data, retval)  ((data).args[0] = (retval))
     86#define IPC_SET_IMETHOD(data, val)    ((data).args[0] = (val))
     87#define IPC_SET_ARG1(data, val)       ((data).args[1] = (val))
     88#define IPC_SET_ARG2(data, val)       ((data).args[2] = (val))
     89#define IPC_SET_ARG3(data, val)       ((data).args[3] = (val))
     90#define IPC_SET_ARG4(data, val)       ((data).args[4] = (val))
     91#define IPC_SET_ARG5(data, val)       ((data).args[5] = (val))
     92
     93#define IPC_GET_IMETHOD(data)  ((data).args[0])
     94#define IPC_GET_RETVAL(data)   ((data).args[0])
     95
     96#define IPC_GET_ARG1(data)  ((data).args[1])
     97#define IPC_GET_ARG2(data)  ((data).args[2])
     98#define IPC_GET_ARG3(data)  ((data).args[3])
     99#define IPC_GET_ARG4(data)  ((data).args[4])
     100#define IPC_GET_ARG5(data)  ((data).args[5])
     101
     102/* Forwarding flags. */
     103#define IPC_FF_NONE  0
     104
     105/**
     106 * The call will be routed as though it was initially sent via the phone used to
     107 * forward it. This feature is intended to support the situation in which the
     108 * forwarded call needs to be handled by the same connection fibril as any other
     109 * calls that were initially sent by the forwarder to the same destination. This
     110 * flag has no imapct on routing replies.
     111 *
     112 */
     113#define IPC_FF_ROUTE_FROM_ME  (1 << 0)
     114
     115/* Data transfer flags. */
     116#define IPC_XF_NONE  0
     117
     118/** Restrict the transfer size if necessary. */
     119#define IPC_XF_RESTRICT  (1 << 0)
     120
     121/** User-defined IPC methods */
     122#define IPC_FIRST_USER_METHOD  1024
     123
     124#ifdef KERNEL
     125
     126#define IPC_MAX_PHONES  32
     127
    38128#include <synch/spinlock.h>
    39129#include <synch/mutex.h>
    40130#include <synch/waitq.h>
    41 #include <abi/ipc/ipc.h>
    42 #include <abi/proc/task.h>
    43 #include <typedefs.h>
    44 
    45 #define IPC_MAX_PHONES  64
    46131
    47132struct answerbox;
     
    81166       
    82167        /** Phones connected to this answerbox. */
    83         list_t connected_phones;
     168        link_t connected_phones;
    84169        /** Received calls. */
    85         list_t calls;
    86         list_t dispatched_calls;  /* Should be hash table in the future */
     170        link_t calls;
     171        link_t dispatched_calls;  /* Should be hash table in the future */
    87172       
    88173        /** Answered calls. */
    89         list_t answers;
     174        link_t answers;
    90175       
    91176        IRQ_SPINLOCK_DECLARE(irq_lock);
    92177       
    93178        /** Notifications from IRQ handlers. */
    94         list_t irq_notifs;
     179        link_t irq_notifs;
    95180        /** IRQs with notifications to this answerbox. */
    96         list_t irq_list;
     181        link_t irq_head;
    97182} answerbox_t;
    98183
    99184typedef struct {
    100185        sysarg_t args[IPC_CALL_LEN];
    101         /**
    102          * Task which made or forwarded the call with IPC_FF_ROUTE_FROM_ME,
    103          * or the task which answered the call.
    104          */
    105         task_id_t task_id;
     186        /** Task which made or forwarded the call with IPC_FF_ROUTE_FROM_ME. */
     187        struct task *task;
    106188        /** Phone which made or last masqueraded this call. */
    107189        phone_t *phone;
     
    161243extern void ipc_backsend_err(phone_t *, call_t *, sysarg_t);
    162244extern void ipc_answerbox_slam_phones(answerbox_t *, bool);
    163 extern void ipc_cleanup_call_list(list_t *);
     245extern void ipc_cleanup_call_list(link_t *);
    164246
    165247extern void ipc_print_task(task_id_t);
    166248
     249#endif /* KERNEL */
     250
    167251#endif
    168252
Note: See TracChangeset for help on using the changeset viewer.