Lines Matching defs:mhi_chan

277 	struct mhi_chan *mhi_chan;
299 mhi_chan = mhi_cntrl->mhi_chan;
301 for (i = 0; i < mhi_cntrl->max_chan; i++, chan_ctxt++, mhi_chan++) {
303 if (mhi_chan->offload_ch)
310 tmp |= FIELD_PREP(CHAN_CTX_BRSTMODE_MASK, mhi_chan->db_cfg.brstmode);
312 tmp |= FIELD_PREP(CHAN_CTX_POLLCFG_MASK, mhi_chan->db_cfg.pollcfg);
315 chan_ctxt->chtype = cpu_to_le32(mhi_chan->type);
316 chan_ctxt->erindex = cpu_to_le32(mhi_chan->er_index);
318 mhi_chan->ch_state = MHI_CH_STATE_DISABLED;
319 mhi_chan->tre_ring.db_addr = (void __iomem *)&chan_ctxt->wp;
443 struct mhi_chan *mhi_chan;
530 mhi_chan = mhi_cntrl->mhi_chan;
531 for (i = 0; i < mhi_cntrl->max_chan; i++, val += 8, mhi_chan++)
532 mhi_chan->tre_ring.db_addr = base + val;
582 struct mhi_chan *mhi_chan)
589 buf_ring = &mhi_chan->buf_ring;
590 tre_ring = &mhi_chan->tre_ring;
591 chan_ctxt = &mhi_cntrl->mhi_ctxt->chan_ctxt[mhi_chan->chan];
617 struct mhi_chan *mhi_chan)
625 buf_ring = &mhi_chan->buf_ring;
626 tre_ring = &mhi_chan->tre_ring;
629 chan_ctxt = &mhi_cntrl->mhi_ctxt->chan_ctxt[mhi_chan->chan];
656 mhi_chan->db_cfg.db_mode = 1;
698 mhi_event->mhi_chan =
699 &mhi_cntrl->mhi_chan[mhi_event->chan];
762 mhi_cntrl->mhi_chan = vcalloc(mhi_cntrl->max_chan,
763 sizeof(*mhi_cntrl->mhi_chan));
764 if (!mhi_cntrl->mhi_chan)
771 struct mhi_chan *mhi_chan;
781 mhi_chan = &mhi_cntrl->mhi_chan[chan];
782 mhi_chan->name = ch_cfg->name;
783 mhi_chan->chan = chan;
785 mhi_chan->tre_ring.elements = ch_cfg->num_elements;
786 if (!mhi_chan->tre_ring.elements)
796 mhi_chan->buf_ring.elements = ch_cfg->local_elements;
797 if (!mhi_chan->buf_ring.elements)
798 mhi_chan->buf_ring.elements = mhi_chan->tre_ring.elements;
799 mhi_chan->er_index = ch_cfg->event_ring;
800 mhi_chan->dir = ch_cfg->dir;
807 mhi_chan->type = ch_cfg->type;
808 if (!mhi_chan->type)
809 mhi_chan->type = (enum mhi_ch_type)mhi_chan->dir;
811 mhi_chan->ee_mask = ch_cfg->ee_mask;
812 mhi_chan->db_cfg.pollcfg = ch_cfg->pollcfg;
813 mhi_chan->lpm_notify = ch_cfg->lpm_notify;
814 mhi_chan->offload_ch = ch_cfg->offload_channel;
815 mhi_chan->db_cfg.reset_req = ch_cfg->doorbell_mode_switch;
816 mhi_chan->pre_alloc = ch_cfg->auto_queue;
817 mhi_chan->wake_capable = ch_cfg->wake_capable;
823 if (mhi_chan->pre_alloc && mhi_chan->dir != DMA_FROM_DEVICE) {
832 if ((mhi_chan->dir == DMA_BIDIRECTIONAL ||
833 mhi_chan->dir == DMA_NONE) && !mhi_chan->offload_ch) {
838 if (!mhi_chan->offload_ch) {
839 mhi_chan->db_cfg.brstmode = ch_cfg->doorbell;
840 if (MHI_INVALID_BRSTMODE(mhi_chan->db_cfg.brstmode)) {
846 if (mhi_chan->db_cfg.brstmode == MHI_DB_BRST_ENABLE)
847 mhi_chan->db_cfg.process_db = mhi_db_brstmode;
849 mhi_chan->db_cfg.process_db = mhi_db_brstmode_disable;
851 mhi_chan->configured = true;
853 if (mhi_chan->lpm_notify)
854 list_add_tail(&mhi_chan->node, &mhi_cntrl->lpm_chans);
860 vfree(mhi_cntrl->mhi_chan);
897 vfree(mhi_cntrl->mhi_chan);
906 struct mhi_chan *mhi_chan;
965 mhi_chan = mhi_cntrl->mhi_chan;
966 for (i = 0; i < mhi_cntrl->max_chan; i++, mhi_chan++) {
967 mutex_init(&mhi_chan->mutex);
968 init_completion(&mhi_chan->completion);
969 rwlock_init(&mhi_chan->lock);
972 mhi_event = &mhi_cntrl->mhi_event[mhi_chan->er_index];
973 mhi_chan->intmod = mhi_event->intmod;
1043 vfree(mhi_cntrl->mhi_chan);
1052 struct mhi_chan *mhi_chan = mhi_cntrl->mhi_chan;
1063 for (i = 0; i < mhi_cntrl->max_chan; i++, mhi_chan++) {
1064 if (!mhi_chan->mhi_dev)
1067 put_device(&mhi_chan->mhi_dev->dev);
1069 vfree(mhi_cntrl->mhi_chan);
1200 * We need to set the mhi_chan->mhi_dev to NULL here since the MHI
1249 struct mhi_chan *ul_chan = mhi_dev->ul_chan;
1250 struct mhi_chan *dl_chan = mhi_dev->dl_chan;
1323 struct mhi_chan *mhi_chan;
1336 mhi_chan = dir ? mhi_dev->ul_chan : mhi_dev->dl_chan;
1338 if (!mhi_chan)
1342 write_lock_irq(&mhi_chan->lock);
1343 mhi_chan->ccs = MHI_EV_CC_INVALID;
1344 complete_all(&mhi_chan->completion);
1345 write_unlock_irq(&mhi_chan->lock);
1348 mutex_lock(&mhi_chan->mutex);
1349 write_lock_irq(&mhi_chan->lock);
1350 ch_state[dir] = mhi_chan->ch_state;
1351 mhi_chan->ch_state = MHI_CH_STATE_SUSPENDED;
1352 write_unlock_irq(&mhi_chan->lock);
1355 if (!mhi_chan->offload_ch)
1356 mhi_reset_chan(mhi_cntrl, mhi_chan);
1358 mutex_unlock(&mhi_chan->mutex);
1365 mhi_chan = dir ? mhi_dev->ul_chan : mhi_dev->dl_chan;
1367 if (!mhi_chan)
1370 mutex_lock(&mhi_chan->mutex);
1374 !mhi_chan->offload_ch)
1375 mhi_deinit_chan_ctxt(mhi_cntrl, mhi_chan);
1377 mhi_chan->ch_state = MHI_CH_STATE_DISABLED;
1379 mutex_unlock(&mhi_chan->mutex);