Ignore:
File:
1 edited

Legend:

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

    r03a8a8e rcd529c4  
    6565        mutex_t lock;
    6666        link_t link;
    67         struct task *caller;
    6867        struct answerbox *callee;
    6968        ipc_phone_state_t state;
     
    7372typedef struct answerbox {
    7473        IRQ_SPINLOCK_DECLARE(lock);
    75 
    76         /** Answerbox is active until it enters cleanup. */
    77         bool active;
    7874       
    7975        struct task *task;
     
    110106
    111107typedef struct {
    112         /**
    113          * Task link.
    114          * Valid only when the call is not forgotten.
    115          * Protected by the task's active_calls_lock.
    116          */
    117         link_t ta_link;
    118 
    119         atomic_t refcnt;
    120 
    121         /** Answerbox link. */
    122         link_t ab_link;
     108        link_t link;
    123109       
    124110        unsigned int flags;
    125 
    126         /** Protects the forget member. */
    127         SPINLOCK_DECLARE(forget_lock);
    128 
    129         /**
    130          * True if the caller 'forgot' this call and donated it to the callee.
    131          * Forgotten calls are discarded upon answering (the answer is not
    132          * delivered) and answered calls cannot be forgotten. Forgotten calls
    133          * also do not figure on the task's active call list.
    134          *
    135          * We keep this separate from the flags so that it is not necessary
    136          * to take a lock when accessing them.
    137          */
    138         bool forget;
    139 
    140         /** True if the call is in the active list. */
    141         bool active;
    142111       
    143         /**
    144          * Identification of the caller.
    145          * Valid only when the call is not forgotten.
    146          */
     112        /** Identification of the caller. */
    147113        struct task *sender;
    148        
    149         /** Phone which was used to send the call. */
    150         phone_t *caller_phone;
    151114       
    152115        /** Private data to internal IPC. */
     
    155118        /** Data passed from/to userspace. */
    156119        ipc_data_t data;
    157 
    158         /** Method as it was sent in the request. */
    159         sysarg_t request_method;
    160 
     120       
    161121        /** Buffer for IPC_M_DATA_WRITE and IPC_M_DATA_READ. */
    162122        uint8_t *buffer;
     123       
     124        /*
     125         * The forward operation can masquerade the caller phone. For those
     126         * cases, we must keep it aside so that the answer is processed
     127         * correctly.
     128         */
     129        phone_t *caller_phone;
    163130} call_t;
    164131
     
    169136extern call_t *ipc_call_alloc(unsigned int);
    170137extern void ipc_call_free(call_t *);
    171 extern void ipc_call_hold(call_t *);
    172 extern void ipc_call_release(call_t *);
    173138
    174139extern int ipc_call(phone_t *, call_t *);
     
    176141extern int ipc_forward(call_t *, phone_t *, answerbox_t *, unsigned int);
    177142extern void ipc_answer(answerbox_t *, call_t *);
    178 extern void _ipc_answer_free_call(call_t *, bool);
    179143
    180 extern void ipc_phone_init(phone_t *, struct task *);
    181 extern bool ipc_phone_connect(phone_t *, answerbox_t *);
     144extern void ipc_phone_init(phone_t *);
     145extern void ipc_phone_connect(phone_t *, answerbox_t *);
    182146extern int ipc_phone_hangup(phone_t *);
    183147
     
    187151extern void ipc_backsend_err(phone_t *, call_t *, sysarg_t);
    188152extern void ipc_answerbox_slam_phones(answerbox_t *, bool);
    189 extern void ipc_cleanup_call_list(answerbox_t *, list_t *);
     153extern void ipc_cleanup_call_list(list_t *);
    190154
    191155extern void ipc_print_task(task_id_t);
Note: See TracChangeset for help on using the changeset viewer.