|
@@ -979,6 +979,27 @@ void cx25821_dev_unregister(struct cx25821_dev *dev)
|
|
|
}
|
|
|
EXPORT_SYMBOL(cx25821_dev_unregister);
|
|
|
|
|
|
+int cx25821_riscmem_alloc(struct pci_dev *pci,
|
|
|
+ struct cx25821_riscmem *risc,
|
|
|
+ unsigned int size)
|
|
|
+{
|
|
|
+ __le32 *cpu;
|
|
|
+ dma_addr_t dma = 0;
|
|
|
+
|
|
|
+ if (NULL != risc->cpu && risc->size < size)
|
|
|
+ pci_free_consistent(pci, risc->size, risc->cpu, risc->dma);
|
|
|
+ if (NULL == risc->cpu) {
|
|
|
+ cpu = pci_zalloc_consistent(pci, size, &dma);
|
|
|
+ if (NULL == cpu)
|
|
|
+ return -ENOMEM;
|
|
|
+ risc->cpu = cpu;
|
|
|
+ risc->dma = dma;
|
|
|
+ risc->size = size;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(cx25821_riscmem_alloc);
|
|
|
+
|
|
|
static __le32 *cx25821_risc_field(__le32 * rp, struct scatterlist *sglist,
|
|
|
unsigned int offset, u32 sync_line,
|
|
|
unsigned int bpl, unsigned int padding,
|
|
@@ -1035,7 +1056,7 @@ static __le32 *cx25821_risc_field(__le32 * rp, struct scatterlist *sglist,
|
|
|
return rp;
|
|
|
}
|
|
|
|
|
|
-int cx25821_risc_buffer(struct pci_dev *pci, struct btcx_riscmem *risc,
|
|
|
+int cx25821_risc_buffer(struct pci_dev *pci, struct cx25821_riscmem *risc,
|
|
|
struct scatterlist *sglist, unsigned int top_offset,
|
|
|
unsigned int bottom_offset, unsigned int bpl,
|
|
|
unsigned int padding, unsigned int lines)
|
|
@@ -1059,7 +1080,7 @@ int cx25821_risc_buffer(struct pci_dev *pci, struct btcx_riscmem *risc,
|
|
|
instructions = fields * (1 + ((bpl + padding) * lines) / PAGE_SIZE +
|
|
|
lines);
|
|
|
instructions += 2;
|
|
|
- rc = btcx_riscmem_alloc(pci, risc, instructions * 12);
|
|
|
+ rc = cx25821_riscmem_alloc(pci, risc, instructions * 12);
|
|
|
|
|
|
if (rc < 0)
|
|
|
return rc;
|
|
@@ -1146,7 +1167,7 @@ static __le32 *cx25821_risc_field_audio(__le32 * rp, struct scatterlist *sglist,
|
|
|
}
|
|
|
|
|
|
int cx25821_risc_databuffer_audio(struct pci_dev *pci,
|
|
|
- struct btcx_riscmem *risc,
|
|
|
+ struct cx25821_riscmem *risc,
|
|
|
struct scatterlist *sglist,
|
|
|
unsigned int bpl,
|
|
|
unsigned int lines, unsigned int lpi)
|
|
@@ -1163,7 +1184,7 @@ int cx25821_risc_databuffer_audio(struct pci_dev *pci,
|
|
|
instructions = 1 + (bpl * lines) / PAGE_SIZE + lines;
|
|
|
instructions += 1;
|
|
|
|
|
|
- rc = btcx_riscmem_alloc(pci, risc, instructions * 12);
|
|
|
+ rc = cx25821_riscmem_alloc(pci, risc, instructions * 12);
|
|
|
if (rc < 0)
|
|
|
return rc;
|
|
|
|
|
@@ -1179,13 +1200,13 @@ int cx25821_risc_databuffer_audio(struct pci_dev *pci,
|
|
|
}
|
|
|
EXPORT_SYMBOL(cx25821_risc_databuffer_audio);
|
|
|
|
|
|
-int cx25821_risc_stopper(struct pci_dev *pci, struct btcx_riscmem *risc,
|
|
|
+int cx25821_risc_stopper(struct pci_dev *pci, struct cx25821_riscmem *risc,
|
|
|
u32 reg, u32 mask, u32 value)
|
|
|
{
|
|
|
__le32 *rp;
|
|
|
int rc;
|
|
|
|
|
|
- rc = btcx_riscmem_alloc(pci, risc, 4 * 16);
|
|
|
+ rc = cx25821_riscmem_alloc(pci, risc, 4 * 16);
|
|
|
|
|
|
if (rc < 0)
|
|
|
return rc;
|
|
@@ -1211,7 +1232,8 @@ void cx25821_free_buffer(struct videobuf_queue *q, struct cx25821_buffer *buf)
|
|
|
videobuf_waiton(q, &buf->vb, 0, 0);
|
|
|
videobuf_dma_unmap(q->dev, dma);
|
|
|
videobuf_dma_free(dma);
|
|
|
- btcx_riscmem_free(to_pci_dev(q->dev), &buf->risc);
|
|
|
+ pci_free_consistent(to_pci_dev(q->dev),
|
|
|
+ buf->risc.size, buf->risc.cpu, buf->risc.dma);
|
|
|
buf->vb.state = VIDEOBUF_NEEDS_INIT;
|
|
|
}
|
|
|
|