Lines Matching defs:gchan
485 struct gchan {
503 struct gchan gchan[MAX_CHANNELS_PER_GPII];
531 struct gchan *gchan;
545 static inline struct gchan *to_gchan(struct dma_chan *dma_chan)
547 return container_of(dma_chan, struct gchan, vc.chan);
686 static int gpi_send_cmd(struct gpii *gpii, struct gchan *gchan,
697 chid = gchan->chid;
706 cmd_reg = IS_CHAN_CMD(gpi_cmd) ? gchan->ch_cmd_reg : gpii->ev_cmd_reg;
722 if (IS_CHAN_CMD(gpi_cmd) && gchan->ch_state == gpi_cmd_info[gpi_cmd].state)
732 static inline void gpi_write_ch_db(struct gchan *gchan,
735 struct gpii *gpii = gchan->gpii;
739 gpi_write_reg(gpii, gchan->ch_cntxt_db_reg, p_wp);
767 struct gchan *gchan;
778 gchan = &gpii->gchan[chid];
779 state = gpi_read_reg(gpii, gchan->ch_cntxt_base_reg +
790 gchan->ch_state = state;
797 if (gchan->ch_state != CH_STATE_STOP_IN_PROC)
929 static void gpi_process_imed_data_event(struct gchan *gchan,
932 struct gpii *gpii = gchan->gpii;
933 struct gpi_ring *ch_ring = &gchan->ch_ring;
944 if (gchan->pm_state != ACTIVE_STATE) {
946 TO_GPI_PM_STR(gchan->pm_state));
950 spin_lock_irqsave(&gchan->vc.lock, flags);
951 vd = vchan_next_desc(&gchan->vc);
956 spin_unlock_irqrestore(&gchan->vc.lock, flags);
971 spin_unlock_irqrestore(&gchan->vc.lock, flags);
1003 spin_lock_irqsave(&gchan->vc.lock, flags);
1005 spin_unlock_irqrestore(&gchan->vc.lock, flags);
1011 static void gpi_process_xfer_compl_event(struct gchan *gchan,
1014 struct gpii *gpii = gchan->gpii;
1015 struct gpi_ring *ch_ring = &gchan->ch_ring;
1024 if (unlikely(gchan->pm_state != ACTIVE_STATE)) {
1026 TO_GPI_PM_STR(gchan->pm_state));
1030 spin_lock_irqsave(&gchan->vc.lock, flags);
1031 vd = vchan_next_desc(&gchan->vc);
1035 spin_unlock_irqrestore(&gchan->vc.lock, flags);
1046 spin_unlock_irqrestore(&gchan->vc.lock, flags);
1082 spin_lock_irqsave(&gchan->vc.lock, flags);
1084 spin_unlock_irqrestore(&gchan->vc.lock, flags);
1096 struct gchan *gchan;
1116 gchan = &gpii->gchan[chid];
1117 gpi_process_xfer_compl_event(gchan,
1124 gchan = &gpii->gchan[chid];
1125 gpi_process_imed_data_event(gchan,
1170 static void gpi_mark_stale_events(struct gchan *gchan)
1172 struct gpii *gpii = gchan->gpii;
1185 if (chid == gchan->chid)
1196 static int gpi_reset_chan(struct gchan *gchan, enum gpi_cmd gpi_cmd)
1198 struct gpii *gpii = gchan->gpii;
1199 struct gpi_ring *ch_ring = &gchan->ch_ring;
1204 ret = gpi_send_cmd(gpii, gchan, gpi_cmd);
1220 gpi_mark_stale_events(gchan);
1223 spin_lock_irqsave(&gchan->vc.lock, flags);
1224 vchan_get_all_descriptors(&gchan->vc, &list);
1225 spin_unlock_irqrestore(&gchan->vc.lock, flags);
1227 vchan_dma_desc_free_list(&gchan->vc, &list);
1232 static int gpi_start_chan(struct gchan *gchan)
1234 struct gpii *gpii = gchan->gpii;
1237 ret = gpi_send_cmd(gpii, gchan, GPI_CH_CMD_START);
1246 gchan->pm_state = ACTIVE_STATE;
1252 static int gpi_stop_chan(struct gchan *gchan)
1254 struct gpii *gpii = gchan->gpii;
1257 ret = gpi_send_cmd(gpii, gchan, GPI_CH_CMD_STOP);
1268 static int gpi_alloc_chan(struct gchan *chan, bool send_alloc_cmd)
1455 static void gpi_queue_xfer(struct gpii *gpii, struct gchan *gchan,
1462 ret = gpi_ring_add_element(&gchan->ch_ring, (void **)&ch_tre);
1476 struct gchan *gchan = to_gchan(chan);
1477 struct gpii *gpii = gchan->gpii;
1487 schid = (gchan->protocol == QCOM_GPI_UART) ? gchan->chid : 0;
1488 echid = (gchan->protocol == QCOM_GPI_UART) ? schid + 1 : MAX_CHANNELS_PER_GPII;
1492 gchan = &gpii->gchan[i];
1496 gchan->pm_state = PREPARE_TERMINATE;
1500 ret = gpi_stop_chan(gchan);
1505 gchan = &gpii->gchan[i];
1507 ret = gpi_reset_chan(gchan, GPI_CH_CMD_RESET);
1514 ret = gpi_alloc_chan(gchan, false);
1523 gchan = &gpii->gchan[i];
1525 ret = gpi_start_chan(gchan);
1540 struct gchan *gchan = to_gchan(chan);
1541 struct gpii *gpii = gchan->gpii;
1558 ret = gpi_stop_chan(&gpii->gchan[i]);
1581 struct gchan *gchan = to_gchan(chan);
1582 struct gpii *gpii = gchan->gpii;
1596 ret = gpi_send_cmd(gpii, &gpii->gchan[i], GPI_CH_CMD_START);
1623 struct gchan *gchan = to_gchan(chan);
1628 gchan->config = krealloc(gchan->config, config->peripheral_size, GFP_NOWAIT);
1629 if (!gchan->config)
1632 memcpy(gchan->config, config->peripheral_config, config->peripheral_size);
1637 static int gpi_create_i2c_tre(struct gchan *chan, struct gpi_desc *desc,
1712 static int gpi_create_spi_tre(struct gchan *chan, struct gpi_desc *desc,
1795 struct gchan *gchan = to_gchan(chan);
1796 struct gpii *gpii = gchan->gpii;
1798 struct gpi_ring *ch_ring = &gchan->ch_ring;
1816 set_config = *(u32 *)gchan->config;
1834 if (gchan->protocol == QCOM_GPI_SPI) {
1835 i = gpi_create_spi_tre(gchan, gpi_desc, sgl, direction);
1836 } else if (gchan->protocol == QCOM_GPI_I2C) {
1837 i = gpi_create_i2c_tre(gchan, gpi_desc, sgl, direction);
1839 dev_err(dev, "invalid peripheral: %d\n", gchan->protocol);
1845 gpi_desc->gchan = gchan;
1849 return vchan_tx_prep(&gchan->vc, &gpi_desc->vd, flags);
1855 struct gchan *gchan = to_gchan(chan);
1856 struct gpii *gpii = gchan->gpii;
1860 struct gpi_ring *ch_ring = &gchan->ch_ring;
1867 spin_lock_irqsave(&gchan->vc.lock, flags);
1868 if (vchan_issue_pending(&gchan->vc))
1869 vd = list_last_entry(&gchan->vc.desc_issued,
1871 spin_unlock_irqrestore(&gchan->vc.lock, flags);
1882 gpi_queue_xfer(gpii, gchan, tre, &wp);
1886 gpi_write_ch_db(gchan, &gchan->ch_ring, gpi_desc->db);
1890 static int gpi_ch_init(struct gchan *gchan)
1892 struct gpii *gpii = gchan->gpii;
1897 gchan->pm_state = CONFIG_STATE;
1901 if (gpii->gchan[i].pm_state != CONFIG_STATE)
1905 if (gpii->gchan[0].protocol != gpii->gchan[1].protocol) {
1907 gpii->gchan[0].protocol, gpii->gchan[1].protocol);
1938 ret = gpi_alloc_chan(&gpii->gchan[i], true);
1947 ret = gpi_start_chan(&gpii->gchan[i]);
1957 gpi_stop_chan(&gpii->gchan[i]);
1958 gpi_send_cmd(gpii, gchan, GPI_CH_CMD_RESET);
1963 gpi_reset_chan(gchan, GPI_CH_CMD_DE_ALLOC);
1975 struct gchan *gchan = to_gchan(chan);
1976 struct gpii *gpii = gchan->gpii;
1982 cur_state = gchan->pm_state;
1986 gchan->pm_state = PREPARE_TERMINATE;
1991 gpi_stop_chan(gchan);
1993 ret = gpi_send_cmd(gpii, gchan, GPI_CH_CMD_RESET);
1997 gpi_reset_chan(gchan, GPI_CH_CMD_DE_ALLOC);
2001 gpi_free_ring(&gchan->ch_ring, gpii);
2002 vchan_free_chan_resources(&gchan->vc);
2003 kfree(gchan->config);
2006 gchan->pm_state = DISABLE_STATE;
2011 if (gpii->gchan[i].ch_ring.configured)
2045 struct gchan *gchan = to_gchan(chan);
2046 struct gpii *gpii = gchan->gpii;
2052 ret = gpi_alloc_ring(&gchan->ch_ring, CHAN_TRES,
2057 ret = gpi_ch_init(gchan);
2070 struct gchan *tx_chan, *rx_chan;
2078 tx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_TX_CHAN];
2079 rx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_RX_CHAN];
2092 tx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_TX_CHAN];
2093 rx_chan = &gpi_dev->gpiis[gpii].gchan[GPI_RX_CHAN];
2115 struct gchan *gchan;
2138 gchan = &gpi_dev->gpiis[gpii].gchan[chid];
2139 if (gchan->vc.chan.client_count) {
2141 gpii, chid, gchan->seid);
2145 gchan->seid = seid;
2146 gchan->protocol = args->args[2];
2148 return dma_get_slave_channel(&gchan->vc.chan);
2222 struct gchan *gchan = &gpii->gchan[chan];
2225 gchan->ch_cntxt_base_reg = gpi_dev->ee_base +
2227 gchan->ch_cntxt_db_reg = gpi_dev->ee_base +
2229 gchan->ch_cmd_reg = gpi_dev->ee_base + GPII_n_CH_CMD_OFFS(i);
2232 vchan_init(&gchan->vc, &gpi_dev->dma_device);
2233 gchan->vc.desc_free = gpi_desc_free;
2234 gchan->chid = chan;
2235 gchan->gpii = gpii;
2236 gchan->dir = GPII_CHAN_DIR[chan];