Lines Matching refs:solo_dev
28 int solo_p2m_dma(struct solo_dev *solo_dev, int wr, in solo_p2m_dma() argument
40 dma_addr = pci_map_single(solo_dev->pdev, sys_addr, size, in solo_p2m_dma()
42 if (pci_dma_mapping_error(solo_dev->pdev, dma_addr)) in solo_p2m_dma()
45 ret = solo_p2m_dma_t(solo_dev, wr, dma_addr, ext_addr, size, in solo_p2m_dma()
48 pci_unmap_single(solo_dev->pdev, dma_addr, size, in solo_p2m_dma()
55 int solo_p2m_dma_desc(struct solo_dev *solo_dev, in solo_p2m_dma_desc() argument
66 if (solo_dev->type != SOLO_DEV_6110 && multi_p2m) in solo_p2m_dma_desc()
67 p2m_id = atomic_inc_return(&solo_dev->p2m_count) % SOLO_NR_P2M; in solo_p2m_dma_desc()
69 p2m_dev = &solo_dev->p2m_dev[p2m_id]; in solo_p2m_dma_desc()
77 if (desc_cnt > 1 && solo_dev->type != SOLO_DEV_6110 && desc_mode) { in solo_p2m_dma_desc()
80 config = solo_reg_read(solo_dev, SOLO_P2M_CONFIG(p2m_id)); in solo_p2m_dma_desc()
82 solo_reg_write(solo_dev, SOLO_P2M_DES_ADR(p2m_id), desc_dma); in solo_p2m_dma_desc()
83 solo_reg_write(solo_dev, SOLO_P2M_DESC_ID(p2m_id), desc_cnt); in solo_p2m_dma_desc()
84 solo_reg_write(solo_dev, SOLO_P2M_CONFIG(p2m_id), config | in solo_p2m_dma_desc()
92 solo_reg_write(solo_dev, SOLO_P2M_TAR_ADR(p2m_id), in solo_p2m_dma_desc()
94 solo_reg_write(solo_dev, SOLO_P2M_EXT_ADR(p2m_id), in solo_p2m_dma_desc()
96 solo_reg_write(solo_dev, SOLO_P2M_EXT_CFG(p2m_id), in solo_p2m_dma_desc()
98 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(p2m_id), in solo_p2m_dma_desc()
103 solo_dev->p2m_jiffies); in solo_p2m_dma_desc()
108 solo_dev->p2m_timeouts++; in solo_p2m_dma_desc()
112 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(p2m_id), 0); in solo_p2m_dma_desc()
116 if (desc_cnt > 1 && solo_dev->type != SOLO_DEV_6110 && config) in solo_p2m_dma_desc()
117 solo_reg_write(solo_dev, SOLO_P2M_CONFIG(p2m_id), config); in solo_p2m_dma_desc()
145 int solo_p2m_dma_t(struct solo_dev *solo_dev, int wr, in solo_p2m_dma_t() argument
155 return solo_p2m_dma_desc(solo_dev, desc, 0, 1); in solo_p2m_dma_t()
158 void solo_p2m_isr(struct solo_dev *solo_dev, int id) in solo_p2m_isr() argument
160 struct solo_p2m_dev *p2m_dev = &solo_dev->p2m_dev[id]; in solo_p2m_isr()
172 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(id), 0); in solo_p2m_isr()
173 solo_reg_write(solo_dev, SOLO_P2M_TAR_ADR(id), desc->dma_addr); in solo_p2m_isr()
174 solo_reg_write(solo_dev, SOLO_P2M_EXT_ADR(id), desc->ext_addr); in solo_p2m_isr()
175 solo_reg_write(solo_dev, SOLO_P2M_EXT_CFG(id), desc->cfg); in solo_p2m_isr()
176 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(id), desc->ctrl); in solo_p2m_isr()
179 void solo_p2m_error_isr(struct solo_dev *solo_dev) in solo_p2m_error_isr() argument
181 unsigned int err = solo_reg_read(solo_dev, SOLO_PCI_ERR); in solo_p2m_error_isr()
189 p2m_dev = &solo_dev->p2m_dev[i]; in solo_p2m_error_isr()
191 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(i), 0); in solo_p2m_error_isr()
196 void solo_p2m_exit(struct solo_dev *solo_dev) in solo_p2m_exit() argument
201 solo_irq_off(solo_dev, SOLO_IRQ_P2M(i)); in solo_p2m_exit()
204 static int solo_p2m_test(struct solo_dev *solo_dev, int base, int size) in solo_p2m_test() argument
230 if (solo_p2m_dma(solo_dev, 1, wr_buf, base, size, 0, 0)) in solo_p2m_test()
233 if (solo_p2m_dma(solo_dev, 0, rd_buf, base, size, 0, 0)) in solo_p2m_test()
250 int solo_p2m_init(struct solo_dev *solo_dev) in solo_p2m_init() argument
256 p2m_dev = &solo_dev->p2m_dev[i]; in solo_p2m_init()
261 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(i), 0); in solo_p2m_init()
262 solo_reg_write(solo_dev, SOLO_P2M_CONFIG(i), in solo_p2m_init()
267 solo_irq_on(solo_dev, SOLO_IRQ_P2M(i)); in solo_p2m_init()
271 for (solo_dev->sdram_size = 0, i = 2; i >= 0; i--) { in solo_p2m_init()
272 solo_reg_write(solo_dev, SOLO_DMA_CTRL, in solo_p2m_init()
279 solo_reg_write(solo_dev, SOLO_SYS_CFG, solo_dev->sys_config | in solo_p2m_init()
281 solo_reg_write(solo_dev, SOLO_SYS_CFG, solo_dev->sys_config); in solo_p2m_init()
285 if (solo_p2m_test(solo_dev, 0x07ff0000, 0x00010000) || in solo_p2m_init()
286 solo_p2m_test(solo_dev, 0x05ff0000, 0x00010000)) in solo_p2m_init()
291 if (solo_p2m_test(solo_dev, 0x03ff0000, 0x00010000)) in solo_p2m_init()
296 if (solo_p2m_test(solo_dev, 0x01ff0000, 0x00010000)) in solo_p2m_init()
300 solo_dev->sdram_size = (32 << 20) << i; in solo_p2m_init()
304 if (!solo_dev->sdram_size) { in solo_p2m_init()
305 dev_err(&solo_dev->pdev->dev, "Error detecting SDRAM size\n"); in solo_p2m_init()
309 if (SOLO_SDRAM_END(solo_dev) > solo_dev->sdram_size) { in solo_p2m_init()
310 dev_err(&solo_dev->pdev->dev, in solo_p2m_init()
312 solo_dev->sdram_size, SOLO_SDRAM_END(solo_dev)); in solo_p2m_init()