Lines Matching refs:msg
44 struct ipc_message *msg = NULL; in msg_get_empty() local
47 msg = list_first_entry(&ipc->empty_list, struct ipc_message, in msg_get_empty()
49 list_del(&msg->list); in msg_get_empty()
52 return msg; in msg_get_empty()
56 struct ipc_message *msg, void *rx_data) in tx_wait_done() argument
62 ret = wait_event_timeout(msg->waitq, msg->complete, in tx_wait_done()
70 list_del(&msg->list); in tx_wait_done()
75 if (msg->rx_size) in tx_wait_done()
76 memcpy(rx_data, msg->rx_data, msg->rx_size); in tx_wait_done()
77 ret = msg->errno; in tx_wait_done()
80 list_add_tail(&msg->list, &ipc->empty_list); in tx_wait_done()
89 struct ipc_message *msg; in ipc_tx_message() local
94 msg = msg_get_empty(ipc); in ipc_tx_message()
95 if (msg == NULL) { in ipc_tx_message()
100 msg->header = header; in ipc_tx_message()
101 msg->tx_size = tx_bytes; in ipc_tx_message()
102 msg->rx_size = rx_bytes; in ipc_tx_message()
103 msg->wait = wait; in ipc_tx_message()
104 msg->errno = 0; in ipc_tx_message()
105 msg->pending = false; in ipc_tx_message()
106 msg->complete = false; in ipc_tx_message()
109 ipc->ops.tx_data_copy(msg, tx_data, tx_bytes); in ipc_tx_message()
111 list_add_tail(&msg->list, &ipc->tx_list); in ipc_tx_message()
117 return tx_wait_done(ipc, msg, rx_data); in ipc_tx_message()
126 ipc->msg = kzalloc(sizeof(struct ipc_message) * in msg_empty_list_init()
128 if (ipc->msg == NULL) in msg_empty_list_init()
132 ipc->msg[i].tx_data = kzalloc(ipc->tx_data_max_size, GFP_KERNEL); in msg_empty_list_init()
133 if (ipc->msg[i].tx_data == NULL) in msg_empty_list_init()
136 ipc->msg[i].rx_data = kzalloc(ipc->rx_data_max_size, GFP_KERNEL); in msg_empty_list_init()
137 if (ipc->msg[i].rx_data == NULL) { in msg_empty_list_init()
138 kfree(ipc->msg[i].tx_data); in msg_empty_list_init()
142 init_waitqueue_head(&ipc->msg[i].waitq); in msg_empty_list_init()
143 list_add(&ipc->msg[i].list, &ipc->empty_list); in msg_empty_list_init()
150 kfree(ipc->msg[i-1].tx_data); in msg_empty_list_init()
151 kfree(ipc->msg[i-1].rx_data); in msg_empty_list_init()
154 kfree(ipc->msg); in msg_empty_list_init()
163 struct ipc_message *msg; in ipc_tx_msgs() local
181 msg = list_first_entry(&ipc->tx_list, struct ipc_message, list); in ipc_tx_msgs()
182 list_move(&msg->list, &ipc->rx_list); in ipc_tx_msgs()
185 ipc->ops.tx_msg(ipc, msg); in ipc_tx_msgs()
209 struct ipc_message *msg; in sst_ipc_reply_find_msg() local
221 list_for_each_entry(msg, &ipc->rx_list, list) { in sst_ipc_reply_find_msg()
222 if ((msg->header & mask) == header) in sst_ipc_reply_find_msg()
223 return msg; in sst_ipc_reply_find_msg()
232 struct ipc_message *msg) in sst_ipc_tx_msg_reply_complete() argument
234 msg->complete = true; in sst_ipc_tx_msg_reply_complete()
236 if (!msg->wait) in sst_ipc_tx_msg_reply_complete()
237 list_add_tail(&msg->list, &ipc->empty_list); in sst_ipc_tx_msg_reply_complete()
239 wake_up(&msg->waitq); in sst_ipc_tx_msg_reply_complete()
245 struct ipc_message *msg, *tmp; in sst_ipc_drop_all() local
252 list_for_each_entry_safe(msg, tmp, &ipc->tx_list, list) { in sst_ipc_drop_all()
253 list_move(&msg->list, &ipc->empty_list); in sst_ipc_drop_all()
257 list_for_each_entry_safe(msg, tmp, &ipc->rx_list, list) { in sst_ipc_drop_all()
258 list_move(&msg->list, &ipc->empty_list); in sst_ipc_drop_all()
291 kfree(ipc->msg); in sst_ipc_init()
307 if (ipc->msg) { in sst_ipc_fini()
309 kfree(ipc->msg[i].tx_data); in sst_ipc_fini()
310 kfree(ipc->msg[i].rx_data); in sst_ipc_fini()
312 kfree(ipc->msg); in sst_ipc_fini()