static void vbi_close(struct saa7146_dev *dev, struct file *file) { struct saa7146_fh *fh = (struct saa7146_fh *)file->private_data; struct saa7146_vv *vv = dev->vv_data; DEB_VBI(("dev:%p, fh:%p\n",dev,fh)); if( fh == vv->vbi_streaming ) { vbi_stop(fh, file); } }
static void vbi_read_timeout(unsigned long data) { struct file *file = (struct file*)data; struct saa7146_fh *fh = file->private_data; struct saa7146_dev *dev = fh->dev; DEB_VBI("dev:%p, fh:%p\n", dev, fh); vbi_stop(fh, file); }
static void vbi_close(struct saa7146_dev *dev, struct file *file) { struct saa7146_fh *fh = file->private_data; struct saa7146_vv *vv = dev->vv_data; DEB_VBI("dev:%p, fh:%p\n", dev, fh); if( fh == vv->vbi_streaming ) { vbi_stop(fh, file); } saa7146_res_free(fh, RESOURCE_DMA3_BRS); }
static int ali_vbi_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long parg) #endif { struct vbi_device *p_vbi_dev = (struct vbi_device *)file->private_data; unsigned long arg = (unsigned long) parg; struct ttx_config_par pconfig_par; int ret = 0; VBI_PRINT("%s()->%s()->%d->cmd(0x%08x)\n", __FILE__, __FUNCTION__, __LINE__,cmd); if((cmd & VBI_CALL) == 0) { if((cmd == IO_VBI_ENGINE_UPDATE_INIT_PAGE) ||(cmd == IO_VBI_ENGINE_UPDATE_SUBT_PAGE)) { struct ttx_page_info p_user; struct ttx_page_info p_kernel; ret = copy_from_user(&p_user, (void *)parg, sizeof(struct ttx_page_info)); if (0 != ret) { printk("%s,%d,ret:%d\n", __FUNCTION__, __LINE__, ret); return(-EFAULT); } p_kernel.num = p_user.num; //p_kernel.page_addr=(UINT32)kmalloc(((p_user.num)*sizeof(struct t_ttx_lang)),GFP_KERNEL); p_kernel.page_addr=(UINT32)__G_ALI_MM_TTX_PARAM_BUF_ADDR; printk("parg(0x%08x) addr(0x%08x)->num(%d)\n", parg, (UINT32)(p_user.page_addr), p_user.num); ret = copy_from_user((void *)p_kernel.page_addr, (void *)p_user.page_addr, ((p_user.num)*sizeof(struct t_ttx_lang))); if (0 != ret) { printk("%s,%d,ret:%d\n", __FUNCTION__, __LINE__, ret); return(-EFAULT); } //ttx_show_content((UINT8 *)p_kernel.page_addr); //VBI_PRINT("parg(0x%08x) addr(0x%08x)->num(%d)\n", parg, (UINT32)(p_user.page_addr), p_user.num); //VBI_PRINT("p_kernel(0x%08x) addr(0x%08x)->num(%d)\n", (UINT32)&p_kernel, (UINT32)(p_kernel.page_addr), p_kernel.num); //printk("%s,%d,page_addr:%x\n", __FUNCTION__, __LINE__, p_kernel.page_addr); p_kernel.page_addr = __VMTSALI(p_kernel.page_addr); //printk("%s,%d,page_addr:%x\n", __FUNCTION__, __LINE__, p_kernel.page_addr); ret = vbi_ioctl(p_vbi_dev, cmd, (UINT32)&p_kernel); //kfree((void *)p_kernel.page_addr); } else if(cmd == IO_VBI_ENGINE_SET_CUR_LANGUAGE) { //u8 lang[3]; //printk("%s,%d\n", __FUNCTION__, __LINE__); ((int *)__G_ALI_MM_TTX_PARAM_BUF_ADDR)[0] = __VMTSALI(__G_ALI_MM_TTX_PARAM_BUF_ADDR + 4); copy_from_user((void *)(__G_ALI_MM_TTX_PARAM_BUF_ADDR + 4), (void *)parg, 3); //printk("%s,%d,__G_ALI_MM_TTX_PARAM_BUF_ADDR:%x,", __FUNCTION__, __LINE__, __G_ALI_MM_TTX_PARAM_BUF_ADDR); ttx_show_content(__G_ALI_MM_TTX_PARAM_BUF_ADDR + 4); printk("%s,%d\n", __FUNCTION__, __LINE__); ret = vbi_ioctl(p_vbi_dev, cmd, (__G_ALI_MM_TTX_PARAM_BUF_ADDR)); //printk("%s,%d,__VMTSALI(&__G_ALI_MM_TTX_PARAM_BUF_ADDR):%x\n", __FUNCTION__, __LINE__, __VMTSALI(__G_ALI_MM_TTX_PARAM_BUF_ADDR)); //VBI_PRINT("user(0x%08x) lang(0x%08x)\n", parg, *(UINT32 *)&lang[0]); } else ret = vbi_ioctl(p_vbi_dev, cmd, arg); } else { switch(cmd) { case CALL_VBI_SETOUTPUT: vbi_setoutput(p_vbi_dev, (T_VBIRequest *)arg); break; case CALL_VBI_START: ret = vbi_start(p_vbi_dev, (t_TTXDecCBFunc)arg); break; case CALL_VBI_STOP: ret = vbi_stop(p_vbi_dev); break; case CALL_TTX_DEFAULT_G0_SET: ttx_default_g0_set(p_vbi_dev, (u8)arg); break; case CALL_TTXENG_INIT: TTXEng_Init(); break; case CALL_TTXENG_ATTACH: ret = copy_from_user(&pconfig_par, (void *)arg, sizeof(struct ttx_config_par)); if(0 == ret) TTXEng_Attach(&pconfig_par); break; case CALL_ENABLE_VBI_TRANSFER: enable_vbi_transfer((bool)arg); break; case CALL_GET_INITAL_PAGE: ret = get_inital_page(); break; case CALL_GET_INITAL_PAGE_STATUS: ret = get_inital_page_status(); break; case CALL_GET_FIRST_TTX_PAGE: get_first_ttx_page(); break; default: break; } } return ret; }