Lines Matching refs:solo_dev
37 int solo_p2m_dma(struct solo_dev *solo_dev, int wr, in solo_p2m_dma() argument
49 dma_addr = pci_map_single(solo_dev->pdev, sys_addr, size, in solo_p2m_dma()
51 if (pci_dma_mapping_error(solo_dev->pdev, dma_addr)) in solo_p2m_dma()
54 ret = solo_p2m_dma_t(solo_dev, wr, dma_addr, ext_addr, size, in solo_p2m_dma()
57 pci_unmap_single(solo_dev->pdev, dma_addr, size, in solo_p2m_dma()
64 int solo_p2m_dma_desc(struct solo_dev *solo_dev, in solo_p2m_dma_desc() argument
75 if (solo_dev->type != SOLO_DEV_6110 && multi_p2m) { in solo_p2m_dma_desc()
76 p2m_id = atomic_inc_return(&solo_dev->p2m_count) % SOLO_NR_P2M; in solo_p2m_dma_desc()
81 p2m_dev = &solo_dev->p2m_dev[p2m_id]; in solo_p2m_dma_desc()
89 if (desc_cnt > 1 && solo_dev->type != SOLO_DEV_6110 && desc_mode) { in solo_p2m_dma_desc()
92 config = solo_reg_read(solo_dev, SOLO_P2M_CONFIG(p2m_id)); in solo_p2m_dma_desc()
94 solo_reg_write(solo_dev, SOLO_P2M_DES_ADR(p2m_id), desc_dma); in solo_p2m_dma_desc()
95 solo_reg_write(solo_dev, SOLO_P2M_DESC_ID(p2m_id), desc_cnt); in solo_p2m_dma_desc()
96 solo_reg_write(solo_dev, SOLO_P2M_CONFIG(p2m_id), config | in solo_p2m_dma_desc()
104 solo_reg_write(solo_dev, SOLO_P2M_TAR_ADR(p2m_id), in solo_p2m_dma_desc()
106 solo_reg_write(solo_dev, SOLO_P2M_EXT_ADR(p2m_id), in solo_p2m_dma_desc()
108 solo_reg_write(solo_dev, SOLO_P2M_EXT_CFG(p2m_id), in solo_p2m_dma_desc()
110 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(p2m_id), in solo_p2m_dma_desc()
115 solo_dev->p2m_jiffies); in solo_p2m_dma_desc()
120 solo_dev->p2m_timeouts++; in solo_p2m_dma_desc()
124 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(p2m_id), 0); in solo_p2m_dma_desc()
128 if (desc_cnt > 1 && solo_dev->type != SOLO_DEV_6110 && config) in solo_p2m_dma_desc()
129 solo_reg_write(solo_dev, SOLO_P2M_CONFIG(p2m_id), config); in solo_p2m_dma_desc()
157 int solo_p2m_dma_t(struct solo_dev *solo_dev, int wr, in solo_p2m_dma_t() argument
167 return solo_p2m_dma_desc(solo_dev, desc, 0, 1); in solo_p2m_dma_t()
170 void solo_p2m_isr(struct solo_dev *solo_dev, int id) in solo_p2m_isr() argument
172 struct solo_p2m_dev *p2m_dev = &solo_dev->p2m_dev[id]; in solo_p2m_isr()
184 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(id), 0); in solo_p2m_isr()
185 solo_reg_write(solo_dev, SOLO_P2M_TAR_ADR(id), desc->dma_addr); in solo_p2m_isr()
186 solo_reg_write(solo_dev, SOLO_P2M_EXT_ADR(id), desc->ext_addr); in solo_p2m_isr()
187 solo_reg_write(solo_dev, SOLO_P2M_EXT_CFG(id), desc->cfg); in solo_p2m_isr()
188 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(id), desc->ctrl); in solo_p2m_isr()
191 void solo_p2m_error_isr(struct solo_dev *solo_dev) in solo_p2m_error_isr() argument
193 unsigned int err = solo_reg_read(solo_dev, SOLO_PCI_ERR); in solo_p2m_error_isr()
201 p2m_dev = &solo_dev->p2m_dev[i]; in solo_p2m_error_isr()
203 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(i), 0); in solo_p2m_error_isr()
208 void solo_p2m_exit(struct solo_dev *solo_dev) in solo_p2m_exit() argument
213 solo_irq_off(solo_dev, SOLO_IRQ_P2M(i)); in solo_p2m_exit()
216 static int solo_p2m_test(struct solo_dev *solo_dev, int base, int size) in solo_p2m_test() argument
242 if (solo_p2m_dma(solo_dev, 1, wr_buf, base, size, 0, 0)) in solo_p2m_test()
245 if (solo_p2m_dma(solo_dev, 0, rd_buf, base, size, 0, 0)) in solo_p2m_test()
262 int solo_p2m_init(struct solo_dev *solo_dev) in solo_p2m_init() argument
268 p2m_dev = &solo_dev->p2m_dev[i]; in solo_p2m_init()
273 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(i), 0); in solo_p2m_init()
274 solo_reg_write(solo_dev, SOLO_P2M_CONFIG(i), in solo_p2m_init()
279 solo_irq_on(solo_dev, SOLO_IRQ_P2M(i)); in solo_p2m_init()
283 for (solo_dev->sdram_size = 0, i = 2; i >= 0; i--) { in solo_p2m_init()
284 solo_reg_write(solo_dev, SOLO_DMA_CTRL, in solo_p2m_init()
291 solo_reg_write(solo_dev, SOLO_SYS_CFG, solo_dev->sys_config | in solo_p2m_init()
293 solo_reg_write(solo_dev, SOLO_SYS_CFG, solo_dev->sys_config); in solo_p2m_init()
297 if (solo_p2m_test(solo_dev, 0x07ff0000, 0x00010000) || in solo_p2m_init()
298 solo_p2m_test(solo_dev, 0x05ff0000, 0x00010000)) in solo_p2m_init()
303 if (solo_p2m_test(solo_dev, 0x03ff0000, 0x00010000)) in solo_p2m_init()
308 if (solo_p2m_test(solo_dev, 0x01ff0000, 0x00010000)) in solo_p2m_init()
312 solo_dev->sdram_size = (32 << 20) << i; in solo_p2m_init()
316 if (!solo_dev->sdram_size) { in solo_p2m_init()
317 dev_err(&solo_dev->pdev->dev, "Error detecting SDRAM size\n"); in solo_p2m_init()
321 if (SOLO_SDRAM_END(solo_dev) > solo_dev->sdram_size) { in solo_p2m_init()
322 dev_err(&solo_dev->pdev->dev, in solo_p2m_init()
324 solo_dev->sdram_size, SOLO_SDRAM_END(solo_dev)); in solo_p2m_init()