Lines Matching defs:mhi_chan
152 struct mhi_ep_chan *mhi_chan;
160 if ((ch_id >= mhi_cntrl->max_chan) || !mhi_cntrl->mhi_chan[ch_id].name) {
165 mhi_chan = &mhi_cntrl->mhi_chan[ch_id];
166 ch_ring = &mhi_cntrl->mhi_chan[ch_id].ring;
172 mutex_lock(&mhi_chan->lock);
189 mhi_chan->state = MHI_CH_STATE_RUNNING;
202 mutex_unlock(&mhi_chan->lock);
213 if (!(ch_id % 2) && !mhi_chan->mhi_dev) {
233 mutex_lock(&mhi_chan->lock);
238 if (mhi_chan->xfer_cb) {
241 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result);
245 mhi_chan->state = MHI_CH_STATE_STOP;
258 mutex_unlock(&mhi_chan->lock);
267 mutex_lock(&mhi_chan->lock);
272 if (mhi_chan->xfer_cb) {
275 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result);
279 mhi_chan->state = MHI_CH_STATE_DISABLED;
292 mutex_unlock(&mhi_chan->lock);
303 mutex_unlock(&mhi_chan->lock);
310 struct mhi_ep_chan *mhi_chan = (dir == DMA_FROM_DEVICE) ? mhi_dev->dl_chan :
313 struct mhi_ep_ring *ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring;
324 struct mhi_ep_chan *mhi_chan = &mhi_cntrl->mhi_chan[ring->ch_id];
337 if (mhi_chan->state != MHI_CH_STATE_RUNNING) {
345 if (mhi_chan->tre_bytes_left) {
346 dev_dbg(dev, "TRE bytes remaining: %u\n", mhi_chan->tre_bytes_left);
347 tr_len = min(buf_left, mhi_chan->tre_bytes_left);
349 mhi_chan->tre_loc = MHI_TRE_DATA_GET_PTR(el);
350 mhi_chan->tre_size = MHI_TRE_DATA_GET_LEN(el);
351 mhi_chan->tre_bytes_left = mhi_chan->tre_size;
353 tr_len = min(buf_left, mhi_chan->tre_size);
356 read_offset = mhi_chan->tre_size - mhi_chan->tre_bytes_left;
359 buf_info.host_addr = mhi_chan->tre_loc + read_offset;
366 dev_err(&mhi_chan->mhi_dev->dev, "Error reading from channel\n");
371 mhi_chan->tre_bytes_left -= tr_len;
380 if (!mhi_chan->tre_bytes_left) {
396 dev_err(&mhi_chan->mhi_dev->dev,
412 dev_err(&mhi_chan->mhi_dev->dev,
435 struct mhi_ep_chan *mhi_chan;
438 mhi_chan = &mhi_cntrl->mhi_chan[ring->ch_id];
444 if (!mhi_chan->xfer_cb) {
445 dev_err(&mhi_chan->mhi_dev->dev, "Client driver not available\n");
451 result.dir = mhi_chan->dir;
452 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result);
462 dev_err(&mhi_chan->mhi_dev->dev, "Failed to read channel\n");
467 result.dir = mhi_chan->dir;
468 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result);
473 } while (!mhi_ep_queue_is_empty(mhi_chan->mhi_dev, DMA_TO_DEVICE));
485 struct mhi_ep_chan *mhi_chan = mhi_dev->dl_chan;
486 struct device *dev = &mhi_chan->mhi_dev->dev;
497 ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring;
499 mutex_lock(&mhi_chan->lock);
503 if (mhi_chan->state != MHI_CH_STATE_RUNNING) {
553 mutex_unlock(&mhi_chan->lock);
558 mutex_unlock(&mhi_chan->lock);
767 chan = &mhi_cntrl->mhi_chan[ring->ch_id];
864 ring = &mhi_cntrl->mhi_chan[ch_id].ring;
973 struct mhi_ep_chan *mhi_chan;
978 mhi_chan = &mhi_cntrl->mhi_chan[i];
979 if (!mhi_chan->ring.started)
982 mutex_lock(&mhi_chan->lock);
984 if (mhi_chan->xfer_cb) {
987 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result);
990 mhi_chan->state = MHI_CH_STATE_DISABLED;
991 mutex_unlock(&mhi_chan->lock);
1001 mhi_chan = &mhi_cntrl->mhi_chan[i];
1002 if (!mhi_chan->ring.started)
1005 ch_ring = &mhi_cntrl->mhi_chan[i].ring;
1006 mutex_lock(&mhi_chan->lock);
1008 mutex_unlock(&mhi_chan->lock);
1095 mhi_ep_ring_init(&mhi_cntrl->mhi_chan[i].ring, RING_TYPE_CH, i);
1141 struct mhi_ep_chan *mhi_chan;
1146 mhi_chan = &mhi_cntrl->mhi_chan[i];
1148 if (!mhi_chan->mhi_dev)
1151 mutex_lock(&mhi_chan->lock);
1155 mutex_unlock(&mhi_chan->lock);
1159 dev_dbg(&mhi_chan->mhi_dev->dev, "Suspending channel\n");
1161 mhi_chan->state = MHI_CH_STATE_SUSPENDED;
1165 mutex_unlock(&mhi_chan->lock);
1171 struct mhi_ep_chan *mhi_chan;
1176 mhi_chan = &mhi_cntrl->mhi_chan[i];
1178 if (!mhi_chan->mhi_dev)
1181 mutex_lock(&mhi_chan->lock);
1185 mutex_unlock(&mhi_chan->lock);
1189 dev_dbg(&mhi_chan->mhi_dev->dev, "Resuming channel\n");
1191 mhi_chan->state = MHI_CH_STATE_RUNNING;
1195 mutex_unlock(&mhi_chan->lock);
1207 * We need to set the mhi_chan->mhi_dev to NULL here since the MHI
1257 struct mhi_ep_chan *mhi_chan = &mhi_cntrl->mhi_chan[ch_id];
1263 if (strcmp(mhi_chan->name, mhi_chan[1].name)) {
1265 mhi_chan->name, mhi_chan[1].name);
1274 mhi_dev->ul_chan = mhi_chan;
1276 mhi_chan->mhi_dev = mhi_dev;
1279 mhi_chan++;
1280 mhi_dev->dl_chan = mhi_chan;
1282 mhi_chan->mhi_dev = mhi_dev;
1285 mhi_dev->name = mhi_chan->name;
1350 mhi_cntrl->mhi_chan = kcalloc(mhi_cntrl->max_chan, sizeof(*mhi_cntrl->mhi_chan),
1352 if (!mhi_cntrl->mhi_chan)
1356 struct mhi_ep_chan *mhi_chan;
1374 mhi_chan = &mhi_cntrl->mhi_chan[chan];
1375 mhi_chan->name = ch_cfg->name;
1376 mhi_chan->chan = chan;
1377 mhi_chan->dir = ch_cfg->dir;
1378 mutex_init(&mhi_chan->lock);
1384 kfree(mhi_cntrl->mhi_chan);
1510 kfree(mhi_cntrl->mhi_chan);
1532 kfree(mhi_cntrl->mhi_chan);
1559 struct mhi_ep_chan *mhi_chan;
1568 mhi_chan = dir ? mhi_dev->ul_chan : mhi_dev->dl_chan;
1570 if (!mhi_chan)
1573 mutex_lock(&mhi_chan->lock);
1575 if (mhi_chan->xfer_cb) {
1578 mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result);
1581 mhi_chan->state = MHI_CH_STATE_DISABLED;
1582 mhi_chan->xfer_cb = NULL;
1583 mutex_unlock(&mhi_chan->lock);