Lines Matching refs:bt
51 #define btwrite(dat,adr) bmtwrite((dat), (bt->bt878_mem+(adr)))
52 #define btread(adr) bmtread(bt->bt878_mem+(adr))
67 static void bt878_mem_free(struct bt878 *bt)
69 if (bt->buf_cpu) {
70 dma_free_coherent(&bt->dev->dev, bt->buf_size, bt->buf_cpu,
71 bt->buf_dma);
72 bt->buf_cpu = NULL;
75 if (bt->risc_cpu) {
76 dma_free_coherent(&bt->dev->dev, bt->risc_size, bt->risc_cpu,
77 bt->risc_dma);
78 bt->risc_cpu = NULL;
82 static int bt878_mem_alloc(struct bt878 *bt)
84 if (!bt->buf_cpu) {
85 bt->buf_size = 128 * 1024;
87 bt->buf_cpu = dma_alloc_coherent(&bt->dev->dev, bt->buf_size,
88 &bt->buf_dma, GFP_KERNEL);
89 if (!bt->buf_cpu)
93 if (!bt->risc_cpu) {
94 bt->risc_size = PAGE_SIZE;
95 bt->risc_cpu = dma_alloc_coherent(&bt->dev->dev, bt->risc_size,
96 &bt->risc_dma, GFP_KERNEL);
97 if (!bt->risc_cpu) {
98 bt878_mem_free(bt);
120 #define RISC_FLUSH() bt->risc_pos = 0
121 #define RISC_INSTR(instr) bt->risc_cpu[bt->risc_pos++] = cpu_to_le32(instr)
123 static int bt878_make_risc(struct bt878 *bt)
125 bt->block_bytes = bt->buf_size >> 4;
126 bt->block_count = 1 << 4;
127 bt->line_bytes = bt->block_bytes;
128 bt->line_count = bt->block_count;
130 while (bt->line_bytes > 4095) {
131 bt->line_bytes >>= 1;
132 bt->line_count <<= 1;
135 if (bt->line_count > 255) {
143 static void bt878_risc_program(struct bt878 *bt, u32 op_sync_orin)
153 bt->line_count, bt->line_bytes);
154 for (line = 0; line < bt->line_count; line++) {
156 if (!(buf_pos % bt->block_bytes))
160 bt->block_bytes) +
161 (bt->block_count -
163 bt->block_count) | bt->
167 bt->line_bytes);
168 RISC_INSTR(bt->buf_dma + buf_pos);
169 buf_pos += bt->line_bytes;
176 RISC_INSTR(bt->risc_dma);
178 btwrite((bt->line_count << 16) | bt->line_bytes, BT878_APACK_LEN);
185 void bt878_start(struct bt878 *bt, u32 controlreg, u32 op_sync_orin,
194 bt878_risc_program(bt, op_sync_orin);
198 btwrite(bt->risc_dma, BT878_ARISC_START);
219 void bt878_stop(struct bt878 *bt)
237 bt->nr, i, stat);
251 struct bt878 *bt;
253 bt = (struct bt878 *) dev_id;
261 /* dprintk("bt878(%d) debug: irq count %d, stat 0x%8.8x, mask 0x%8.8x\n",bt->nr,count,stat,mask); */
269 bt->nr,
280 bt->nr,
293 bt->nr,
302 bt->finished_block = (stat & BT878_ARISCS) >> 28;
303 if (bt->tasklet.callback)
304 tasklet_schedule(&bt->tasklet);
312 bt->nr);
320 bt878_device_control(struct bt878 *bt, unsigned int cmd, union dst_gpio_packet *mp)
325 if (mutex_lock_interruptible(&bt->gpio_lock))
331 retval = bttv_gpio_enable(bt->bttv_nr,
337 retval = bttv_write_gpio(bt->bttv_nr,
344 retval = bttv_read_gpio(bt->bttv_nr, &mp->rd.value);
349 bt->TS_Size = mp->psize;
356 mutex_unlock(&bt->gpio_lock);
402 struct bt878 *bt;
420 bt = &bt878[bt878_num];
421 bt->dev = dev;
422 bt->nr = bt878_num;
423 bt->shutdown = 0;
425 bt->id = dev->device;
426 bt->irq = dev->irq;
427 bt->bt878_adr = pci_resource_start(dev, 0);
434 bt->revision = dev->revision;
439 bt878_num, bt->id, bt->revision, dev->bus->number,
442 bt->irq, lat, bt->bt878_adr);
445 bt->bt878_mem = (unsigned char *) bt->bt878_adr;
447 bt->bt878_mem = ioremap(bt->bt878_adr, 0x1000);
453 result = request_irq(bt->irq, bt878_irq,
454 IRQF_SHARED, "bt878", (void *) bt);
463 bt878_num, bt->irq);
470 pci_set_drvdata(dev, bt);
472 if ((result = bt878_mem_alloc(bt))) {
477 bt878_make_risc(bt);
481 if (!bt->tasklet.func)
482 tasklet_disable(&bt->tasklet);
487 free_irq(bt->irq, bt);
489 release_mem_region(pci_resource_start(bt->dev, 0),
490 pci_resource_len(bt->dev, 0));
499 struct bt878 *bt = pci_get_drvdata(pci_dev);
502 printk(KERN_INFO "bt878(%d): unloading\n", bt->nr);
512 pci_read_config_byte(bt->dev, PCI_COMMAND, &command);
515 pci_write_config_byte(bt->dev, PCI_COMMAND, command);
517 free_irq(bt->irq, bt);
518 printk(KERN_DEBUG "bt878_mem: 0x%p.\n", bt->bt878_mem);
519 if (bt->bt878_mem)
520 iounmap(bt->bt878_mem);
522 release_mem_region(pci_resource_start(bt->dev, 0),
523 pci_resource_len(bt->dev, 0));
528 bt->shutdown = 1;
529 bt878_mem_free(bt);