mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
vdin: remove hardcode manual buffer cnt. [1/3]
PD#TV-7344 Problem: current vdin1 use hardcode buffer cnt 4, it is not good for user space program. Solution: Check passed buffer fd arry, so we can read variable fd num. Verify: verified on macroni Change-Id: I9bc07e45a3716423dc037a5d966c9b6b5eafcdfe Signed-off-by: sky zhou <sky.zhou@amlogic.com>
This commit is contained in:
@@ -336,7 +336,10 @@ void vdin_canvas_auto_config(struct vdin_dev_s *devp)
|
||||
devp->vfmem_max_cnt = min(devp->vfmem_max_cnt, devp->canvas_max_num);
|
||||
|
||||
if (devp->set_canvas_manual == 1) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (i = 0; i < VDIN_CANVAS_MAX_CNT; i++) {
|
||||
if (vdin_set_canvas_addr[i].dmabuff == 0)
|
||||
break;
|
||||
|
||||
canvas_id =
|
||||
vdin_canvas_ids[devp->index][i * canvas_step];
|
||||
canvas_addr = vdin_set_canvas_addr[i].paddr;
|
||||
@@ -524,7 +527,7 @@ unsigned int vdin_cma_alloc(struct vdin_dev_s *devp)
|
||||
|
||||
if (devp->set_canvas_manual == 1) {
|
||||
for (i = 0; i < VDIN_CANVAS_MAX_CNT; i++) {
|
||||
if (vdin_set_canvas_addr[i].dmabuff == NULL)
|
||||
if (vdin_set_canvas_addr[i].dmabuff == 0)
|
||||
break;
|
||||
|
||||
vdin_set_canvas_addr[i].paddr =
|
||||
|
||||
@@ -2872,9 +2872,9 @@ static long vdin_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
|
||||
/*release manual set dma-bufs*/
|
||||
if (devp->set_canvas_manual == 1) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (i = 0; i < VDIN_CANVAS_MAX_CNT; i++) {
|
||||
if (vdin_set_canvas_addr[i].dmabuff == 0)
|
||||
continue;
|
||||
break;
|
||||
|
||||
dma_buf_unmap_attachment(
|
||||
vdin_set_canvas_addr[i].dmabufattach,
|
||||
@@ -2884,11 +2884,13 @@ static long vdin_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
vdin_set_canvas_addr[i].dmabuff,
|
||||
vdin_set_canvas_addr[i].dmabufattach);
|
||||
dma_buf_put(vdin_set_canvas_addr[i].dmabuff);
|
||||
devp->keystone_entry[i] = NULL;
|
||||
}
|
||||
memset(vdin_set_canvas_addr, 0,
|
||||
sizeof(struct vdin_set_canvas_addr_s) *
|
||||
VDIN_CANVAS_MAX_CNT);
|
||||
memset(devp->keystone_entry, 0,
|
||||
sizeof(struct vf_entry *) *
|
||||
VDIN_CANVAS_MAX_CNT);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2899,12 +2901,20 @@ static long vdin_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
}
|
||||
|
||||
if (copy_from_user(vdinsetcanvas, argp,
|
||||
sizeof(struct vdin_set_canvas_s) * 4)) {
|
||||
sizeof(struct vdin_set_canvas_s) *
|
||||
VDIN_CANVAS_MAX_CNT)) {
|
||||
pr_info("TVIN_IOC_S_CANVAS_ADDR copy fail\n");
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
memset(vdin_set_canvas_addr, 0,
|
||||
sizeof(struct vdin_set_canvas_addr_s) *
|
||||
VDIN_CANVAS_MAX_CNT);
|
||||
memset(devp->keystone_entry, 0,
|
||||
sizeof(struct vf_entry *) *
|
||||
VDIN_CANVAS_MAX_CNT);
|
||||
|
||||
for (i = 0; i < VDIN_CANVAS_MAX_CNT; i++) {
|
||||
/*when fd means, the canvas list reaches end*/
|
||||
if (vdinsetcanvas[i].fd < 0)
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user