Lines Matching refs:msg

116 static void hsc_add_tail(struct hsc_channel *channel, struct hsi_msg *msg,  in hsc_add_tail()  argument
122 list_add_tail(&msg->link, queue); in hsc_add_tail()
129 struct hsi_msg *msg = NULL; in hsc_get_first_msg() local
137 msg = list_first_entry(queue, struct hsi_msg, link); in hsc_get_first_msg()
138 list_del(&msg->link); in hsc_get_first_msg()
142 return msg; in hsc_get_first_msg()
145 static inline void hsc_msg_free(struct hsi_msg *msg) in hsc_msg_free() argument
147 kfree(sg_virt(msg->sgt.sgl)); in hsc_msg_free()
148 hsi_free_msg(msg); in hsc_msg_free()
153 struct hsi_msg *msg, *tmp; in hsc_free_list() local
155 list_for_each_entry_safe(msg, tmp, list, link) { in hsc_free_list()
156 list_del(&msg->link); in hsc_free_list()
157 hsc_msg_free(msg); in hsc_free_list()
175 struct hsi_msg *msg; in hsc_msg_alloc() local
178 msg = hsi_alloc_msg(1, GFP_KERNEL); in hsc_msg_alloc()
179 if (!msg) in hsc_msg_alloc()
183 hsi_free_msg(msg); in hsc_msg_alloc()
186 sg_init_one(msg->sgt.sgl, buf, alloc_size); in hsc_msg_alloc()
190 return msg; in hsc_msg_alloc()
197 struct hsi_msg *msg; in hsc_msgs_alloc() local
201 msg = hsc_msg_alloc(max_data_size); in hsc_msgs_alloc()
202 if (!msg) in hsc_msgs_alloc()
204 msg->channel = channel->ch; in hsc_msgs_alloc()
205 list_add_tail(&msg->link, &channel->free_msgs_list); in hsc_msgs_alloc()
215 static inline unsigned int hsc_msg_len_get(struct hsi_msg *msg) in hsc_msg_len_get() argument
217 return msg->sgt.sgl->length; in hsc_msg_len_get()
220 static inline void hsc_msg_len_set(struct hsi_msg *msg, unsigned int len) in hsc_msg_len_set() argument
222 msg->sgt.sgl->length = len; in hsc_msg_len_set()
225 static void hsc_rx_completed(struct hsi_msg *msg) in hsc_rx_completed() argument
227 struct hsc_client_data *cl_data = hsi_client_drvdata(msg->cl); in hsc_rx_completed()
228 struct hsc_channel *channel = cl_data->channels + msg->channel; in hsc_rx_completed()
231 hsc_add_tail(channel, msg, &channel->rx_msgs_queue); in hsc_rx_completed()
234 hsc_add_tail(channel, msg, &channel->free_msgs_list); in hsc_rx_completed()
238 static void hsc_rx_msg_destructor(struct hsi_msg *msg) in hsc_rx_msg_destructor() argument
240 msg->status = HSI_STATUS_ERROR; in hsc_rx_msg_destructor()
241 hsc_msg_len_set(msg, 0); in hsc_rx_msg_destructor()
242 hsc_rx_completed(msg); in hsc_rx_msg_destructor()
245 static void hsc_tx_completed(struct hsi_msg *msg) in hsc_tx_completed() argument
247 struct hsc_client_data *cl_data = hsi_client_drvdata(msg->cl); in hsc_tx_completed()
248 struct hsc_channel *channel = cl_data->channels + msg->channel; in hsc_tx_completed()
251 hsc_add_tail(channel, msg, &channel->tx_msgs_queue); in hsc_tx_completed()
254 hsc_add_tail(channel, msg, &channel->free_msgs_list); in hsc_tx_completed()
258 static void hsc_tx_msg_destructor(struct hsi_msg *msg) in hsc_tx_msg_destructor() argument
260 msg->status = HSI_STATUS_ERROR; in hsc_tx_msg_destructor()
261 hsc_msg_len_set(msg, 0); in hsc_tx_msg_destructor()
262 hsc_tx_completed(msg); in hsc_tx_msg_destructor()
265 static void hsc_break_req_destructor(struct hsi_msg *msg) in hsc_break_req_destructor() argument
267 struct hsc_client_data *cl_data = hsi_client_drvdata(msg->cl); in hsc_break_req_destructor()
269 hsi_free_msg(msg); in hsc_break_req_destructor()
273 static void hsc_break_received(struct hsi_msg *msg) in hsc_break_received() argument
275 struct hsc_client_data *cl_data = hsi_client_drvdata(msg->cl); in hsc_break_received()
294 hsi_flush(msg->cl); in hsc_break_received()
295 ret = hsi_async_read(msg->cl, msg); in hsc_break_received()
297 hsc_break_req_destructor(msg); in hsc_break_received()
303 struct hsi_msg *msg; in hsc_break_request() local
309 msg = hsi_alloc_msg(0, GFP_KERNEL); in hsc_break_request()
310 if (!msg) { in hsc_break_request()
314 msg->break_frame = 1; in hsc_break_request()
315 msg->complete = hsc_break_received; in hsc_break_request()
316 msg->destructor = hsc_break_req_destructor; in hsc_break_request()
317 ret = hsi_async_read(cl, msg); in hsc_break_request()
319 hsc_break_req_destructor(msg); in hsc_break_request()
326 struct hsi_msg *msg; in hsc_break_send() local
329 msg = hsi_alloc_msg(0, GFP_ATOMIC); in hsc_break_send()
330 if (!msg) in hsc_break_send()
332 msg->break_frame = 1; in hsc_break_send()
333 msg->complete = hsi_free_msg; in hsc_break_send()
334 msg->destructor = hsi_free_msg; in hsc_break_send()
335 ret = hsi_async_write(cl, msg); in hsc_break_send()
337 hsi_free_msg(msg); in hsc_break_send()
416 struct hsi_msg *msg; in hsc_read() local
429 msg = hsc_get_first_msg(channel, &channel->free_msgs_list); in hsc_read()
430 if (!msg) { in hsc_read()
434 hsc_msg_len_set(msg, len); in hsc_read()
435 msg->complete = hsc_rx_completed; in hsc_read()
436 msg->destructor = hsc_rx_msg_destructor; in hsc_read()
437 ret = hsi_async_read(channel->cl, msg); in hsc_read()
439 hsc_add_tail(channel, msg, &channel->free_msgs_list); in hsc_read()
451 msg = hsc_get_first_msg(channel, &channel->rx_msgs_queue); in hsc_read()
452 if (msg) { in hsc_read()
453 if (msg->status != HSI_STATUS_ERROR) { in hsc_read()
455 sg_virt(msg->sgt.sgl), hsc_msg_len_get(msg)); in hsc_read()
459 ret = hsc_msg_len_get(msg); in hsc_read()
463 hsc_add_tail(channel, msg, &channel->free_msgs_list); in hsc_read()
475 struct hsi_msg *msg; in hsc_write() local
486 msg = hsc_get_first_msg(channel, &channel->free_msgs_list); in hsc_write()
487 if (!msg) { in hsc_write()
491 if (copy_from_user(sg_virt(msg->sgt.sgl), (void __user *)buf, len)) { in hsc_write()
495 hsc_msg_len_set(msg, len); in hsc_write()
496 msg->complete = hsc_tx_completed; in hsc_write()
497 msg->destructor = hsc_tx_msg_destructor; in hsc_write()
498 ret = hsi_async_write(channel->cl, msg); in hsc_write()
510 msg = hsc_get_first_msg(channel, &channel->tx_msgs_queue); in hsc_write()
511 if (msg) { in hsc_write()
512 if (msg->status == HSI_STATUS_ERROR) in hsc_write()
515 ret = hsc_msg_len_get(msg); in hsc_write()
517 hsc_add_tail(channel, msg, &channel->free_msgs_list); in hsc_write()