Lines Matching refs:mhi_chan
267 struct mhi_chan *mhi_chan; in mhi_init_dev_ctxt() local
289 mhi_chan = mhi_cntrl->mhi_chan; in mhi_init_dev_ctxt()
291 for (i = 0; i < mhi_cntrl->max_chan; i++, chan_ctxt++, mhi_chan++) { in mhi_init_dev_ctxt()
293 if (mhi_chan->offload_ch) in mhi_init_dev_ctxt()
300 tmp |= (mhi_chan->db_cfg.brstmode << CHAN_CTX_BRSTMODE_SHIFT); in mhi_init_dev_ctxt()
302 tmp |= (mhi_chan->db_cfg.pollcfg << CHAN_CTX_POLLCFG_SHIFT); in mhi_init_dev_ctxt()
305 chan_ctxt->chtype = cpu_to_le32(mhi_chan->type); in mhi_init_dev_ctxt()
306 chan_ctxt->erindex = cpu_to_le32(mhi_chan->er_index); in mhi_init_dev_ctxt()
308 mhi_chan->ch_state = MHI_CH_STATE_DISABLED; in mhi_init_dev_ctxt()
309 mhi_chan->tre_ring.db_addr = (void __iomem *)&chan_ctxt->wp; in mhi_init_dev_ctxt()
433 struct mhi_chan *mhi_chan; in mhi_init_mmio() local
531 mhi_chan = mhi_cntrl->mhi_chan; in mhi_init_mmio()
532 for (i = 0; i < mhi_cntrl->max_chan; i++, val += 8, mhi_chan++) in mhi_init_mmio()
533 mhi_chan->tre_ring.db_addr = base + val; in mhi_init_mmio()
571 struct mhi_chan *mhi_chan) in mhi_deinit_chan_ctxt() argument
578 buf_ring = &mhi_chan->buf_ring; in mhi_deinit_chan_ctxt()
579 tre_ring = &mhi_chan->tre_ring; in mhi_deinit_chan_ctxt()
580 chan_ctxt = &mhi_cntrl->mhi_ctxt->chan_ctxt[mhi_chan->chan]; in mhi_deinit_chan_ctxt()
606 struct mhi_chan *mhi_chan) in mhi_init_chan_ctxt() argument
614 buf_ring = &mhi_chan->buf_ring; in mhi_init_chan_ctxt()
615 tre_ring = &mhi_chan->tre_ring; in mhi_init_chan_ctxt()
618 chan_ctxt = &mhi_cntrl->mhi_ctxt->chan_ctxt[mhi_chan->chan]; in mhi_init_chan_ctxt()
645 mhi_chan->db_cfg.db_mode = 1; in mhi_init_chan_ctxt()
687 mhi_event->mhi_chan = in parse_ev_cfg()
688 &mhi_cntrl->mhi_chan[mhi_event->chan]; in parse_ev_cfg()
751 mhi_cntrl->mhi_chan = vzalloc(mhi_cntrl->max_chan * in parse_ch_cfg()
752 sizeof(*mhi_cntrl->mhi_chan)); in parse_ch_cfg()
753 if (!mhi_cntrl->mhi_chan) in parse_ch_cfg()
760 struct mhi_chan *mhi_chan; in parse_ch_cfg() local
770 mhi_chan = &mhi_cntrl->mhi_chan[chan]; in parse_ch_cfg()
771 mhi_chan->name = ch_cfg->name; in parse_ch_cfg()
772 mhi_chan->chan = chan; in parse_ch_cfg()
774 mhi_chan->tre_ring.elements = ch_cfg->num_elements; in parse_ch_cfg()
775 if (!mhi_chan->tre_ring.elements) in parse_ch_cfg()
785 mhi_chan->buf_ring.elements = ch_cfg->local_elements; in parse_ch_cfg()
786 if (!mhi_chan->buf_ring.elements) in parse_ch_cfg()
787 mhi_chan->buf_ring.elements = mhi_chan->tre_ring.elements; in parse_ch_cfg()
788 mhi_chan->er_index = ch_cfg->event_ring; in parse_ch_cfg()
789 mhi_chan->dir = ch_cfg->dir; in parse_ch_cfg()
796 mhi_chan->type = ch_cfg->type; in parse_ch_cfg()
797 if (!mhi_chan->type) in parse_ch_cfg()
798 mhi_chan->type = (enum mhi_ch_type)mhi_chan->dir; in parse_ch_cfg()
800 mhi_chan->ee_mask = ch_cfg->ee_mask; in parse_ch_cfg()
801 mhi_chan->db_cfg.pollcfg = ch_cfg->pollcfg; in parse_ch_cfg()
802 mhi_chan->lpm_notify = ch_cfg->lpm_notify; in parse_ch_cfg()
803 mhi_chan->offload_ch = ch_cfg->offload_channel; in parse_ch_cfg()
804 mhi_chan->db_cfg.reset_req = ch_cfg->doorbell_mode_switch; in parse_ch_cfg()
805 mhi_chan->pre_alloc = ch_cfg->auto_queue; in parse_ch_cfg()
806 mhi_chan->wake_capable = ch_cfg->wake_capable; in parse_ch_cfg()
812 if (mhi_chan->pre_alloc && mhi_chan->dir != DMA_FROM_DEVICE) { in parse_ch_cfg()
821 if ((mhi_chan->dir == DMA_BIDIRECTIONAL || in parse_ch_cfg()
822 mhi_chan->dir == DMA_NONE) && !mhi_chan->offload_ch) { in parse_ch_cfg()
827 if (!mhi_chan->offload_ch) { in parse_ch_cfg()
828 mhi_chan->db_cfg.brstmode = ch_cfg->doorbell; in parse_ch_cfg()
829 if (MHI_INVALID_BRSTMODE(mhi_chan->db_cfg.brstmode)) { in parse_ch_cfg()
835 if (mhi_chan->db_cfg.brstmode == MHI_DB_BRST_ENABLE) in parse_ch_cfg()
836 mhi_chan->db_cfg.process_db = mhi_db_brstmode; in parse_ch_cfg()
838 mhi_chan->db_cfg.process_db = mhi_db_brstmode_disable; in parse_ch_cfg()
840 mhi_chan->configured = true; in parse_ch_cfg()
842 if (mhi_chan->lpm_notify) in parse_ch_cfg()
843 list_add_tail(&mhi_chan->node, &mhi_cntrl->lpm_chans); in parse_ch_cfg()
849 vfree(mhi_cntrl->mhi_chan); in parse_ch_cfg()
886 vfree(mhi_cntrl->mhi_chan); in parse_config()
895 struct mhi_chan *mhi_chan; in mhi_register_controller() local
954 mhi_chan = mhi_cntrl->mhi_chan; in mhi_register_controller()
955 for (i = 0; i < mhi_cntrl->max_chan; i++, mhi_chan++) { in mhi_register_controller()
956 mutex_init(&mhi_chan->mutex); in mhi_register_controller()
957 init_completion(&mhi_chan->completion); in mhi_register_controller()
958 rwlock_init(&mhi_chan->lock); in mhi_register_controller()
961 mhi_event = &mhi_cntrl->mhi_event[mhi_chan->er_index]; in mhi_register_controller()
962 mhi_chan->intmod = mhi_event->intmod; in mhi_register_controller()
1030 vfree(mhi_cntrl->mhi_chan); in mhi_register_controller()
1039 struct mhi_chan *mhi_chan = mhi_cntrl->mhi_chan; in mhi_unregister_controller() local
1049 for (i = 0; i < mhi_cntrl->max_chan; i++, mhi_chan++) { in mhi_unregister_controller()
1050 if (!mhi_chan->mhi_dev) in mhi_unregister_controller()
1053 put_device(&mhi_chan->mhi_dev->dev); in mhi_unregister_controller()
1055 vfree(mhi_cntrl->mhi_chan); in mhi_unregister_controller()
1228 struct mhi_chan *ul_chan = mhi_dev->ul_chan; in mhi_driver_probe()
1229 struct mhi_chan *dl_chan = mhi_dev->dl_chan; in mhi_driver_probe()
1302 struct mhi_chan *mhi_chan; in mhi_driver_remove() local
1315 mhi_chan = dir ? mhi_dev->ul_chan : mhi_dev->dl_chan; in mhi_driver_remove()
1317 if (!mhi_chan) in mhi_driver_remove()
1321 write_lock_irq(&mhi_chan->lock); in mhi_driver_remove()
1322 mhi_chan->ccs = MHI_EV_CC_INVALID; in mhi_driver_remove()
1323 complete_all(&mhi_chan->completion); in mhi_driver_remove()
1324 write_unlock_irq(&mhi_chan->lock); in mhi_driver_remove()
1327 mutex_lock(&mhi_chan->mutex); in mhi_driver_remove()
1328 write_lock_irq(&mhi_chan->lock); in mhi_driver_remove()
1329 ch_state[dir] = mhi_chan->ch_state; in mhi_driver_remove()
1330 mhi_chan->ch_state = MHI_CH_STATE_SUSPENDED; in mhi_driver_remove()
1331 write_unlock_irq(&mhi_chan->lock); in mhi_driver_remove()
1334 if (!mhi_chan->offload_ch) in mhi_driver_remove()
1335 mhi_reset_chan(mhi_cntrl, mhi_chan); in mhi_driver_remove()
1337 mutex_unlock(&mhi_chan->mutex); in mhi_driver_remove()
1344 mhi_chan = dir ? mhi_dev->ul_chan : mhi_dev->dl_chan; in mhi_driver_remove()
1346 if (!mhi_chan) in mhi_driver_remove()
1349 mutex_lock(&mhi_chan->mutex); in mhi_driver_remove()
1353 !mhi_chan->offload_ch) in mhi_driver_remove()
1354 mhi_deinit_chan_ctxt(mhi_cntrl, mhi_chan); in mhi_driver_remove()
1356 mhi_chan->ch_state = MHI_CH_STATE_DISABLED; in mhi_driver_remove()
1358 mutex_unlock(&mhi_chan->mutex); in mhi_driver_remove()