Lines Matching refs:mhi_chan

120 	struct mhi_ep_chan *mhi_chan;  in mhi_ep_process_cmd_ring()  local
128 if ((ch_id >= mhi_cntrl->max_chan) || !mhi_cntrl->mhi_chan[ch_id].name) { in mhi_ep_process_cmd_ring()
133 mhi_chan = &mhi_cntrl->mhi_chan[ch_id]; in mhi_ep_process_cmd_ring()
134 ch_ring = &mhi_cntrl->mhi_chan[ch_id].ring; in mhi_ep_process_cmd_ring()
140 mutex_lock(&mhi_chan->lock); in mhi_ep_process_cmd_ring()
157 mhi_chan->state = MHI_CH_STATE_RUNNING; in mhi_ep_process_cmd_ring()
170 mutex_unlock(&mhi_chan->lock); in mhi_ep_process_cmd_ring()
181 if (!(ch_id % 2) && !mhi_chan->mhi_dev) { in mhi_ep_process_cmd_ring()
201 mutex_lock(&mhi_chan->lock); in mhi_ep_process_cmd_ring()
206 if (mhi_chan->xfer_cb) { in mhi_ep_process_cmd_ring()
209 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); in mhi_ep_process_cmd_ring()
213 mhi_chan->state = MHI_CH_STATE_STOP; in mhi_ep_process_cmd_ring()
226 mutex_unlock(&mhi_chan->lock); in mhi_ep_process_cmd_ring()
235 mutex_lock(&mhi_chan->lock); in mhi_ep_process_cmd_ring()
240 if (mhi_chan->xfer_cb) { in mhi_ep_process_cmd_ring()
243 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); in mhi_ep_process_cmd_ring()
247 mhi_chan->state = MHI_CH_STATE_DISABLED; in mhi_ep_process_cmd_ring()
260 mutex_unlock(&mhi_chan->lock); in mhi_ep_process_cmd_ring()
271 mutex_unlock(&mhi_chan->lock); in mhi_ep_process_cmd_ring()
278 struct mhi_ep_chan *mhi_chan = (dir == DMA_FROM_DEVICE) ? mhi_dev->dl_chan : in mhi_ep_queue_is_empty() local
281 struct mhi_ep_ring *ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring; in mhi_ep_queue_is_empty()
292 struct mhi_ep_chan *mhi_chan = &mhi_cntrl->mhi_chan[ring->ch_id]; in mhi_ep_read_channel() local
306 if (mhi_chan->state != MHI_CH_STATE_RUNNING) { in mhi_ep_read_channel()
314 if (mhi_chan->tre_bytes_left) { in mhi_ep_read_channel()
315 dev_dbg(dev, "TRE bytes remaining: %u\n", mhi_chan->tre_bytes_left); in mhi_ep_read_channel()
316 tr_len = min(buf_left, mhi_chan->tre_bytes_left); in mhi_ep_read_channel()
318 mhi_chan->tre_loc = MHI_TRE_DATA_GET_PTR(el); in mhi_ep_read_channel()
319 mhi_chan->tre_size = MHI_TRE_DATA_GET_LEN(el); in mhi_ep_read_channel()
320 mhi_chan->tre_bytes_left = mhi_chan->tre_size; in mhi_ep_read_channel()
322 tr_len = min(buf_left, mhi_chan->tre_size); in mhi_ep_read_channel()
325 read_offset = mhi_chan->tre_size - mhi_chan->tre_bytes_left; in mhi_ep_read_channel()
327 read_addr = mhi_chan->tre_loc + read_offset; in mhi_ep_read_channel()
333 dev_err(&mhi_chan->mhi_dev->dev, "Error reading from channel\n"); in mhi_ep_read_channel()
338 mhi_chan->tre_bytes_left -= tr_len; in mhi_ep_read_channel()
347 if (!mhi_chan->tre_bytes_left) { in mhi_ep_read_channel()
363 dev_err(&mhi_chan->mhi_dev->dev, in mhi_ep_read_channel()
379 dev_err(&mhi_chan->mhi_dev->dev, in mhi_ep_read_channel()
402 struct mhi_ep_chan *mhi_chan; in mhi_ep_process_ch_ring() local
405 mhi_chan = &mhi_cntrl->mhi_chan[ring->ch_id]; in mhi_ep_process_ch_ring()
411 if (!mhi_chan->xfer_cb) { in mhi_ep_process_ch_ring()
412 dev_err(&mhi_chan->mhi_dev->dev, "Client driver not available\n"); in mhi_ep_process_ch_ring()
418 result.dir = mhi_chan->dir; in mhi_ep_process_ch_ring()
419 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); in mhi_ep_process_ch_ring()
429 dev_err(&mhi_chan->mhi_dev->dev, "Failed to read channel\n"); in mhi_ep_process_ch_ring()
434 result.dir = mhi_chan->dir; in mhi_ep_process_ch_ring()
435 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); in mhi_ep_process_ch_ring()
440 } while (!mhi_ep_queue_is_empty(mhi_chan->mhi_dev, DMA_TO_DEVICE)); in mhi_ep_process_ch_ring()
452 struct mhi_ep_chan *mhi_chan = mhi_dev->dl_chan; in mhi_ep_queue_skb() local
453 struct device *dev = &mhi_chan->mhi_dev->dev; in mhi_ep_queue_skb()
465 ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring; in mhi_ep_queue_skb()
467 mutex_lock(&mhi_chan->lock); in mhi_ep_queue_skb()
471 if (mhi_chan->state != MHI_CH_STATE_RUNNING) { in mhi_ep_queue_skb()
519 mutex_unlock(&mhi_chan->lock); in mhi_ep_queue_skb()
524 mutex_unlock(&mhi_chan->lock); in mhi_ep_queue_skb()
733 chan = &mhi_cntrl->mhi_chan[ring->ch_id]; in mhi_ep_ch_ring_worker()
830 ring = &mhi_cntrl->mhi_chan[ch_id].ring; in mhi_ep_queue_channel_db()
939 struct mhi_ep_chan *mhi_chan; in mhi_ep_abort_transfer() local
944 mhi_chan = &mhi_cntrl->mhi_chan[i]; in mhi_ep_abort_transfer()
945 if (!mhi_chan->ring.started) in mhi_ep_abort_transfer()
948 mutex_lock(&mhi_chan->lock); in mhi_ep_abort_transfer()
950 if (mhi_chan->xfer_cb) { in mhi_ep_abort_transfer()
953 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); in mhi_ep_abort_transfer()
956 mhi_chan->state = MHI_CH_STATE_DISABLED; in mhi_ep_abort_transfer()
957 mutex_unlock(&mhi_chan->lock); in mhi_ep_abort_transfer()
967 mhi_chan = &mhi_cntrl->mhi_chan[i]; in mhi_ep_abort_transfer()
968 if (!mhi_chan->ring.started) in mhi_ep_abort_transfer()
971 ch_ring = &mhi_cntrl->mhi_chan[i].ring; in mhi_ep_abort_transfer()
972 mutex_lock(&mhi_chan->lock); in mhi_ep_abort_transfer()
974 mutex_unlock(&mhi_chan->lock); in mhi_ep_abort_transfer()
1061 mhi_ep_ring_init(&mhi_cntrl->mhi_chan[i].ring, RING_TYPE_CH, i); in mhi_ep_power_up()
1107 struct mhi_ep_chan *mhi_chan; in mhi_ep_suspend_channels() local
1112 mhi_chan = &mhi_cntrl->mhi_chan[i]; in mhi_ep_suspend_channels()
1114 if (!mhi_chan->mhi_dev) in mhi_ep_suspend_channels()
1117 mutex_lock(&mhi_chan->lock); in mhi_ep_suspend_channels()
1121 mutex_unlock(&mhi_chan->lock); in mhi_ep_suspend_channels()
1125 dev_dbg(&mhi_chan->mhi_dev->dev, "Suspending channel\n"); in mhi_ep_suspend_channels()
1127 mhi_chan->state = MHI_CH_STATE_SUSPENDED; in mhi_ep_suspend_channels()
1131 mutex_unlock(&mhi_chan->lock); in mhi_ep_suspend_channels()
1137 struct mhi_ep_chan *mhi_chan; in mhi_ep_resume_channels() local
1142 mhi_chan = &mhi_cntrl->mhi_chan[i]; in mhi_ep_resume_channels()
1144 if (!mhi_chan->mhi_dev) in mhi_ep_resume_channels()
1147 mutex_lock(&mhi_chan->lock); in mhi_ep_resume_channels()
1151 mutex_unlock(&mhi_chan->lock); in mhi_ep_resume_channels()
1155 dev_dbg(&mhi_chan->mhi_dev->dev, "Resuming channel\n"); in mhi_ep_resume_channels()
1157 mhi_chan->state = MHI_CH_STATE_RUNNING; in mhi_ep_resume_channels()
1161 mutex_unlock(&mhi_chan->lock); in mhi_ep_resume_channels()
1223 struct mhi_ep_chan *mhi_chan = &mhi_cntrl->mhi_chan[ch_id]; in mhi_ep_create_device() local
1229 if (strcmp(mhi_chan->name, mhi_chan[1].name)) { in mhi_ep_create_device()
1231 mhi_chan->name, mhi_chan[1].name); in mhi_ep_create_device()
1240 mhi_dev->ul_chan = mhi_chan; in mhi_ep_create_device()
1242 mhi_chan->mhi_dev = mhi_dev; in mhi_ep_create_device()
1245 mhi_chan++; in mhi_ep_create_device()
1246 mhi_dev->dl_chan = mhi_chan; in mhi_ep_create_device()
1248 mhi_chan->mhi_dev = mhi_dev; in mhi_ep_create_device()
1251 mhi_dev->name = mhi_chan->name; in mhi_ep_create_device()
1316 mhi_cntrl->mhi_chan = kcalloc(mhi_cntrl->max_chan, sizeof(*mhi_cntrl->mhi_chan), in mhi_ep_chan_init()
1318 if (!mhi_cntrl->mhi_chan) in mhi_ep_chan_init()
1322 struct mhi_ep_chan *mhi_chan; in mhi_ep_chan_init() local
1340 mhi_chan = &mhi_cntrl->mhi_chan[chan]; in mhi_ep_chan_init()
1341 mhi_chan->name = ch_cfg->name; in mhi_ep_chan_init()
1342 mhi_chan->chan = chan; in mhi_ep_chan_init()
1343 mhi_chan->dir = ch_cfg->dir; in mhi_ep_chan_init()
1344 mutex_init(&mhi_chan->lock); in mhi_ep_chan_init()
1350 kfree(mhi_cntrl->mhi_chan); in mhi_ep_chan_init()
1448 kfree(mhi_cntrl->mhi_chan); in mhi_ep_register_controller()
1467 kfree(mhi_cntrl->mhi_chan); in mhi_ep_unregister_controller()
1494 struct mhi_ep_chan *mhi_chan; in mhi_ep_driver_remove() local
1503 mhi_chan = dir ? mhi_dev->ul_chan : mhi_dev->dl_chan; in mhi_ep_driver_remove()
1505 if (!mhi_chan) in mhi_ep_driver_remove()
1508 mutex_lock(&mhi_chan->lock); in mhi_ep_driver_remove()
1510 if (mhi_chan->xfer_cb) { in mhi_ep_driver_remove()
1513 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result); in mhi_ep_driver_remove()
1516 mhi_chan->state = MHI_CH_STATE_DISABLED; in mhi_ep_driver_remove()
1517 mhi_chan->xfer_cb = NULL; in mhi_ep_driver_remove()
1518 mutex_unlock(&mhi_chan->lock); in mhi_ep_driver_remove()