static int cx25821_upstream_buffer_prepare(struct cx25821_channel *chan,
					   const struct sram_channel *sram_ch,
					   int bpl)
{
	struct cx25821_video_out_data *out = chan->out;
	struct cx25821_dev *dev = chan->dev;
	int ret = 0;
	dma_addr_t dma_addr;
	dma_addr_t data_dma_addr;

	if (out->_dma_virt_addr != NULL)
		pci_free_consistent(dev->pci, out->upstream_riscbuf_size,
				out->_dma_virt_addr, out->_dma_phys_addr);

	out->_dma_virt_addr = pci_alloc_consistent(dev->pci,
			out->upstream_riscbuf_size, &dma_addr);
	out->_dma_virt_start_addr = out->_dma_virt_addr;
	out->_dma_phys_start_addr = dma_addr;
	out->_dma_phys_addr = dma_addr;
	out->_risc_size = out->upstream_riscbuf_size;

	if (!out->_dma_virt_addr) {
		pr_err("FAILED to allocate memory for Risc buffer! Returning\n");
		return -ENOMEM;
	}

	/* Clear memory at address */
	memset(out->_dma_virt_addr, 0, out->_risc_size);

	if (out->_data_buf_virt_addr != NULL)
		pci_free_consistent(dev->pci, out->upstream_databuf_size,
				out->_data_buf_virt_addr,
				out->_data_buf_phys_addr);
	/* For Video Data buffer allocation */
	out->_data_buf_virt_addr = pci_alloc_consistent(dev->pci,
			out->upstream_databuf_size, &data_dma_addr);
	out->_data_buf_phys_addr = data_dma_addr;
	out->_data_buf_size = out->upstream_databuf_size;

	if (!out->_data_buf_virt_addr) {
		pr_err("FAILED to allocate memory for data buffer! Returning\n");
		return -ENOMEM;
	}

	/* Clear memory at address */
	memset(out->_data_buf_virt_addr, 0, out->_data_buf_size);

	/* Create RISC programs */
	ret = cx25821_risc_buffer_upstream(chan, dev->pci, 0, bpl,
			out->_lines_count);
	if (ret < 0) {
		pr_info("Failed creating Video Upstream Risc programs!\n");
		goto error;
	}

	return 0;

error:
	return ret;
}
Exemple #2
0
int cx25821_upstream_buffer_prepare(struct cx25821_dev *dev,
                                    struct sram_channel *sram_ch, int bpl)
{
    int ret = 0;
    dma_addr_t dma_addr;
    dma_addr_t data_dma_addr;

    if (dev->_dma_virt_addr != NULL)
        pci_free_consistent(dev->pci, dev->upstream_riscbuf_size,
                            dev->_dma_virt_addr, dev->_dma_phys_addr);

    dev->_dma_virt_addr = pci_alloc_consistent(dev->pci,
                          dev->upstream_riscbuf_size, &dma_addr);
    dev->_dma_virt_start_addr = dev->_dma_virt_addr;
    dev->_dma_phys_start_addr = dma_addr;
    dev->_dma_phys_addr = dma_addr;
    dev->_risc_size = dev->upstream_riscbuf_size;

    if (!dev->_dma_virt_addr) {
        pr_err("FAILED to allocate memory for Risc buffer! Returning\n");
        return -ENOMEM;
    }

    /* Clear memory at address */
    memset(dev->_dma_virt_addr, 0, dev->_risc_size);

    if (dev->_data_buf_virt_addr != NULL)
        pci_free_consistent(dev->pci, dev->upstream_databuf_size,
                            dev->_data_buf_virt_addr,
                            dev->_data_buf_phys_addr);
    /* For Video Data buffer allocation */
    dev->_data_buf_virt_addr = pci_alloc_consistent(dev->pci,
                               dev->upstream_databuf_size, &data_dma_addr);
    dev->_data_buf_phys_addr = data_dma_addr;
    dev->_data_buf_size = dev->upstream_databuf_size;

    if (!dev->_data_buf_virt_addr) {
        pr_err("FAILED to allocate memory for data buffer! Returning\n");
        return -ENOMEM;
    }

    /* Clear memory at address */
    memset(dev->_data_buf_virt_addr, 0, dev->_data_buf_size);

    ret = cx25821_openfile(dev, sram_ch);
    if (ret < 0)
        return ret;

    /* Create RISC programs */
    ret = cx25821_risc_buffer_upstream(dev, dev->pci, 0, bpl,
                                       dev->_lines_count);
    if (ret < 0) {
        pr_info("Failed creating Video Upstream Risc programs!\n");
        goto error;
    }

    return 0;

error:
    return ret;
}