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


Ignore:
Timestamp:
2012-11-06T21:03:44Z (11 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
338810f
Parents:
de73242 (diff), 94795812 (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

    rde73242 refdfebc  
    6565        mutex_t lock;
    6666        link_t link;
     67        struct task *caller;
    6768        struct answerbox *callee;
    6869        ipc_phone_state_t state;
     
    7273typedef struct answerbox {
    7374        IRQ_SPINLOCK_DECLARE(lock);
     75
     76        /** Answerbox is active until it enters cleanup. */
     77        bool active;
    7478       
    7579        struct task *task;
    7680       
    7781        waitq_t wq;
    78        
    79         /** Linkage for the list of task's synchronous answerboxes. */
    80         link_t sync_box_link;
    8182       
    8283        /** Phones connected to this answerbox. */
     
    109110
    110111typedef struct {
    111         link_t link;
     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;
    112123       
    113124        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;
    114142       
    115         /** Identification of the caller. */
     143        /**
     144         * Identification of the caller.
     145         * Valid only when the call is not forgotten.
     146         */
    116147        struct task *sender;
    117148       
    118         /*
    119          * The caller box is different from sender->answerbox
    120          * for synchronous calls.
    121          */
    122         answerbox_t *callerbox;
     149        /** Phone which was used to send the call. */
     150        phone_t *caller_phone;
    123151       
    124152        /** Private data to internal IPC. */
     
    127155        /** Data passed from/to userspace. */
    128156        ipc_data_t data;
    129        
     157
     158        /** Method as it was sent in the request. */
     159        sysarg_t request_method;
     160
    130161        /** Buffer for IPC_M_DATA_WRITE and IPC_M_DATA_READ. */
    131162        uint8_t *buffer;
    132        
    133         /*
    134          * The forward operation can masquerade the caller phone. For those
    135          * cases, we must keep it aside so that the answer is processed
    136          * correctly.
    137          */
    138         phone_t *caller_phone;
    139163} call_t;
    140164
     
    145169extern call_t *ipc_call_alloc(unsigned int);
    146170extern void ipc_call_free(call_t *);
     171extern void ipc_call_hold(call_t *);
     172extern void ipc_call_release(call_t *);
    147173
    148174extern int ipc_call(phone_t *, call_t *);
    149 extern int ipc_call_sync(phone_t *, call_t *);
    150175extern call_t *ipc_wait_for_call(answerbox_t *, uint32_t, unsigned int);
    151176extern int ipc_forward(call_t *, phone_t *, answerbox_t *, unsigned int);
    152177extern void ipc_answer(answerbox_t *, call_t *);
     178extern void _ipc_answer_free_call(call_t *, bool);
    153179
    154 extern void ipc_phone_init(phone_t *);
    155 extern void ipc_phone_connect(phone_t *, answerbox_t *);
     180extern void ipc_phone_init(phone_t *, struct task *);
     181extern bool ipc_phone_connect(phone_t *, answerbox_t *);
    156182extern int ipc_phone_hangup(phone_t *);
    157183
     
    161187extern void ipc_backsend_err(phone_t *, call_t *, sysarg_t);
    162188extern void ipc_answerbox_slam_phones(answerbox_t *, bool);
    163 extern void ipc_cleanup_call_list(list_t *);
     189extern void ipc_cleanup_call_list(answerbox_t *, list_t *);
    164190
    165191extern void ipc_print_task(task_id_t);
Note: See TracChangeset for help on using the changeset viewer.