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; }
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; }