Ignore:
File:
1 edited

Legend:

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

    r79ae36dd r19fc04c  
    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 
    12838#include <synch/spinlock.h>
    12939#include <synch/mutex.h>
    13040#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
    13146
    13247struct answerbox;
     
    16681       
    16782        /** Phones connected to this answerbox. */
    168         link_t connected_phones;
     83        list_t connected_phones;
    16984        /** Received calls. */
    170         link_t calls;
    171         link_t dispatched_calls;  /* Should be hash table in the future */
     85        list_t calls;
     86        list_t dispatched_calls;  /* Should be hash table in the future */
    17287       
    17388        /** Answered calls. */
    174         link_t answers;
     89        list_t answers;
    17590       
    17691        IRQ_SPINLOCK_DECLARE(irq_lock);
    17792       
    17893        /** Notifications from IRQ handlers. */
    179         link_t irq_notifs;
     94        list_t irq_notifs;
    18095        /** IRQs with notifications to this answerbox. */
    181         link_t irq_head;
     96        list_t irq_list;
    18297} answerbox_t;
    18398
    18499typedef struct {
    185100        sysarg_t args[IPC_CALL_LEN];
    186         /** Task which made or forwarded the call with IPC_FF_ROUTE_FROM_ME. */
    187         struct task *task;
     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;
    188106        /** Phone which made or last masqueraded this call. */
    189107        phone_t *phone;
     
    243161extern void ipc_backsend_err(phone_t *, call_t *, sysarg_t);
    244162extern void ipc_answerbox_slam_phones(answerbox_t *, bool);
    245 extern void ipc_cleanup_call_list(link_t *);
     163extern void ipc_cleanup_call_list(list_t *);
    246164
    247165extern void ipc_print_task(task_id_t);
    248 
    249 #endif /* KERNEL */
    250166
    251167#endif
Note: See TracChangeset for help on using the changeset viewer.