亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? videodevx.c

?? sumsung s3c2440下的camera(OV7620)驅動程序源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	len = 0;	len += sprintf(buf, "Video for Linux Two (V%d.%d alpha)."		       " Major device: %d\n",		       V4L2_MAJOR_VERSION, V4L2_MINOR_VERSION,		       v4l2_major);	//len += sprintf(buf+len,"minor: type      busy name\n");	for (i = 0; i < V4L2_NUM_DEVICES; i++)	{		vfl = v4l2_device[i];		if (vfl == NULL)			continue;		if  (len > (PAGE_SIZE - 80))			return len;		if (vfl->type >= 0 &&		    vfl->type < sizeof(device_types)/sizeof(char*))			t = device_types[vfl->type];		else if (vfl->type >= V4L2_TYPE_PRIVATE)			t = "private";		else 			t = "undef";		len += sprintf(buf+len, "%5d: %-9s %3d  %s\n",			       vfl->minor, t, vfl->busy, vfl->name);	}	len += sprintf(buf+len, "Video for Linux One\n");	for (i = 0; i < VIDEO_NUM_DEVICES; i++)	{		vfl1 = video_device[i];		if (vfl1 == NULL)			continue;		if  (len > (PAGE_SIZE - 80))			return len;		len += sprintf(buf+len, "%5d: v4l1 capture device %3d  %s\n",			       vfl1->minor, vfl1->busy, vfl1->name);	}	return len;}#endif#if LINUX_VERSION_CODE < 0x020300/*  Original /proc file code from Erik Walthinsen  */static intvideo_read_proc(char *buf, char **start, off_t offset, int len, int unused){	return video_build_proc(buf, start, offset, len, NULL);}/* proc file for /proc/videodev */static struct proc_dir_entry video_proc_entry ={	0, 8, "videodev", S_IFREG | S_IRUGO, 1, 0, 0, 0, NULL,	&video_read_proc};#else /* 2.3 */#if defined(CONFIG_PROC_FS)struct videodev_proc_data {	struct list_head proc_list;	char name[16];	struct video_device *vdev;	struct v4l2_device *v2dev;	struct proc_dir_entry *proc_entry;};static struct proc_dir_entry *video_dev_proc_entry = NULL;struct proc_dir_entry *video_proc_entry = NULL;EXPORT_SYMBOL(video_proc_entry);LIST_HEAD(videodev_proc_list);static int videodev_proc_read(char *page, char **start, off_t off,			       int count, int *eof, void *data){	int len = 0;	struct videodev_proc_data *d = 0;	struct list_head *tmp;	list_for_each (tmp, &videodev_proc_list) {		d = list_entry(tmp, struct videodev_proc_data, proc_list);		if ((data == d->vdev) || (data == d->v2dev))			break;	}	/* not found */	if (tmp == &videodev_proc_list)		return 0;#if 1/* Check whether we are opening a V4L1 or V4L2 device */	if (d->vdev)		len = sprintf(page,			"Video4Linux1 device:\n"			"  Name:\td->vdev->name\n"			"  Minor:\td->vdev->minor\n");	else if (d->v2dev)		len = sprintf(page,			"Video4Linux2 device:\n"			"  Name: \t%s\n"			"  Minor:\t%d\n"			"  Type: \t%s\n", d->v2dev->name, d->v2dev->minor, 				(d->v2dev->type > V4L2_TYPE_PRIVATE) ? "undef" :				device_types[d->v2dev->type]);	else		panic("vdev proc: none of V4L1 or V4L2");#else	len = video_build_proc(page, start, off, count, data);#endif	/* fix the read count. Not so important, since usually we only	 do cat /proc.. */	len -= off;	if (len < count) {		*eof = 1;		if (len <= 0)			return 0;	}	else		len = count;	*start = page + off;	return len;}static void videodev_proc_create(void){	video_proc_entry = create_proc_entry("video", S_IFDIR, &proc_root);	if (video_proc_entry == NULL) {		printk("video_dev: unable to initialise /proc/video\n");		return;	}	video_proc_entry->owner = THIS_MODULE;	video_dev_proc_entry = create_proc_entry("dev", S_IFDIR, video_proc_entry);	if (video_dev_proc_entry == NULL) {		printk("video_dev: unable to initialise /proc/video/dev\n");		return;	}	video_dev_proc_entry->owner = THIS_MODULE;}#ifdef MODULE#if defined(CONFIG_PROC_FS)static void videodev_proc_destroy(void){	if (video_dev_proc_entry != NULL)		remove_proc_entry("dev", video_proc_entry);	if (video_proc_entry != NULL)		remove_proc_entry("video", &proc_root);}#endif#endifstatic void videodev_proc_create_dev (struct video_device *vfd, char *name){	struct videodev_proc_data *d;	struct proc_dir_entry *p;	if (video_dev_proc_entry == NULL)		return;	d = kmalloc (sizeof (struct videodev_proc_data), GFP_KERNEL);	if (!d)		return;	p = create_proc_entry(name, S_IFREG|S_IRUGO|S_IWUSR, video_dev_proc_entry);	p->data = vfd;	p->read_proc = videodev_proc_read;	d->proc_entry = p;	d->vdev = vfd;	d->v2dev = NULL; /* not a V4L2 device */	strcpy (d->name, name);	list_add (&d->proc_list, &videodev_proc_list);}static void videodev_proc_destroy_dev (struct video_device *vfd){	struct list_head *tmp;	struct videodev_proc_data *d;	list_for_each (tmp, &videodev_proc_list) {		d = list_entry(tmp, struct videodev_proc_data, proc_list);		if (vfd == d->vdev) {			remove_proc_entry(d->name, video_dev_proc_entry);			list_del (&d->proc_list);			kfree (d);			break;		}	}}static void v4l2_proc_create_dev (struct v4l2_device *vfd, char *name){	struct videodev_proc_data *d;	struct proc_dir_entry *p;	if (video_dev_proc_entry == NULL)		return;	d = kmalloc (sizeof (struct videodev_proc_data), GFP_KERNEL);	if (!d)		return;	p = create_proc_entry(name, S_IFREG|S_IRUGO|S_IWUSR, video_dev_proc_entry);	p->data = vfd;	p->read_proc = videodev_proc_read;	d->proc_entry = p;	d->vdev = NULL; /* not a V4L device */	d->v2dev = vfd;	strcpy (d->name, name);	list_add (&d->proc_list, &videodev_proc_list);}static void v4l2_proc_destroy_dev (struct v4l2_device *vfd){	struct list_head *tmp;	struct videodev_proc_data *d;	list_for_each (tmp, &videodev_proc_list) {		d = list_entry(tmp, struct videodev_proc_data, proc_list);		if (vfd == d->v2dev) {			remove_proc_entry(d->name, video_dev_proc_entry);			list_del (&d->proc_list);			kfree (d);			break;		}	}}#endif#endif#endif/* *	V I D E O   F O R   L I N U X   T W O   I N I T I A L I Z A T I O N */static struct file_operations video_fops ={#if LINUX_VERSION_CODE >= 0x020403	owner:		THIS_MODULE,#endif	llseek:		v4l2_video_llseek,	read:		video_read,	write:		video_write,	poll:		video_poll,	ioctl:		video_ioctl,	mmap:		video_mmap,	open:		video_open,	release:	video_release};static struct file_operations v4l2_fops ={	llseek:		v4l2_video_llseek,	read:		v4l2_video_read,	write:		v4l2_video_write,	poll:		v4l2_video_poll,	ioctl:		v4l2_video_ioctl,	mmap:		v4l2_video_mmap,	open:		v4l2_video_open,	release:	v4l2_video_release};/* *	Initialize Video for Linux Two */	#ifdef CONFIG_DEVFS_FS#define REGISTER_CHRDEV devfs_register_chrdev#define UNREGISTER_CHRDEV devfs_unregister_chrdev#else#define REGISTER_CHRDEV register_chrdev#define UNREGISTER_CHRDEV unregister_chrdev#endifstatic intvideodev_register_chrdev(int interface /* 1 or 2 */){	int			major[3];	char			*name;	struct file_operations	*fops;	major[1] = VIDEO_MAJOR;	major[2] = v4l2_major;	name = (interface == 1) ? "v4l1" : "v4l2";	fops = (interface == 1) ? &video_fops : &v4l2_fops;	if (interface == 1)		printk(KERN_INFO"Video for Linux One (2.2.16)."		       " Major device: %d\n", major[1]);	if (interface == 2)		printk(KERN_INFO"Video for Linux Two (V%d.%d)."		       " Major device: %d\n",		       V4L2_MAJOR_VERSION, V4L2_MINOR_VERSION, major[2]);	if (major[1] == major[2])	{		if (interface == 2)			return 0;		name = "v4l1/2";		fops = &v4l2_fops;	}	if (REGISTER_CHRDEV(major[interface], name, fops))	{		printk("Unable to get major %d for %s\n",		       major[interface], name);		return -EIO;	}	return 0;}static intvideodev_unregister_chrdev(int interface /* 1 or 2 */){	int	major[3];	char	*name;	major[1] = VIDEO_MAJOR;	major[2] = v4l2_major;	name = (interface == 1) ? "v4l1" : "v4l2";	if (major[1] == major[2])	{		if (interface == 2)			return 0;		name = "v4l1/2";	}	UNREGISTER_CHRDEV(major[interface], name);	return 0;}int videodev_init(void){	int	i;	struct video_init *vfli = video_init_list;	i = videodev_register_chrdev(1);	if (i == 0)		i = videodev_register_chrdev(2);	if (i)		return i;	/* make sure there's a way to tell if a device is not there */	for (i = 0; i < V4L2_NUM_DEVICES; i++)		v4l2_device[i] = NULL;	for (i = 0; i < VIDEO_NUM_DEVICES; i++)		video_device[i] = NULL;#ifdef CONFIG_PROC_FS#if  LINUX_VERSION_CODE < 0x020300	proc_register(&proc_root, &video_proc_entry);#else /* 2.3 */	videodev_proc_create ();#endif#endif	masterclock = NULL;	while(vfli->init!=NULL)	{		vfli->init(vfli);		vfli++;	}	return 0;}#ifdef MODULE		int init_module(void){	return videodev_init();}void cleanup_module(void){#ifdef CONFIG_PROC_FS#if  LINUX_VERSION_CODE < 0x020300	proc_unregister(&proc_root, video_proc_entry.low_ino);#else /* 2.3 */	videodev_proc_destroy ();#endif#endif /* CONFIG_PROC_FS */	videodev_unregister_chrdev(1);	videodev_unregister_chrdev(2);}#endif/* * *	V 4 L 2   D R I V E R   H E L P E R   A P I * */voidv4l2_version(int *major, int *minor){	*major = V4L2_MAJOR_VERSION;	*minor = V4L2_MINOR_VERSION;}intv4l2_major_number(void){	return v4l2_major;}struct v4l2_device *v4l2_device_from_minor(int minor){	if (minor < 0 || minor >= V4L2_NUM_DEVICES)		return NULL;	return v4l2_device[minor];}struct v4l2_device *v4l2_device_from_file(struct file *file){	if (file == NULL)		return NULL;	return v4l2_device_from_minor(MINOR(file->f_dentry->d_inode->i_rdev));}void *v4l2_openid_from_file(struct file *file){	if (file == NULL)		return NULL;	return file->private_data;}#if  LINUX_VERSION_CODE >= 0x020300struct page *kvirt_to_pa(unsigned long adr){	struct page *ret = NULL;	pmd_t *pmd;	pte_t *pte;	pgd_t *pgd;	pgd = pgd_offset_k(adr);	if (!pgd_none(*pgd)) {		pmd = pmd_offset(pgd, adr);		if (!pmd_none(*pmd)) {			pte = pte_offset(pmd, adr);			if (pte_present(*pte)) {				ret = pte_page(*pte);			}		}	}	return ret;}/*  Useful for using vmalloc()ed memory as DMA target  */unsigned long v4l2_vmalloc_to_bus(void *virt){	struct page *page;	unsigned long kva, ret;	page = kvirt_to_pa((unsigned long) virt);	kva = ((unsigned long)page_address(page)) | (((unsigned long) virt) & (PAGE_SIZE - 1));	ret = virt_to_bus((void *) kva);	return ret;}/*  Useful for a nopage handler when mmap()ing vmalloc()ed memory  */struct page *v4l2_vmalloc_to_page(void *virt){	struct page *page;	page = kvirt_to_pa((unsigned long) virt);	return page;}#else /* 2.2 */static struct mm_struct *find_init_mm(void){	static struct mm_struct	*mm;	struct task_struct	*p;	if (mm)		return mm;	for (p = current; p && (p = p->next_task) != current; )		if (p->pid == 0)			break;	mm = (p) ? p->mm : NULL;	return mm;}/*  Useful for using vmalloc()ed memory as DMA target  */unsigned longv4l2_vmalloc_to_bus(void *virt){	pgd_t		*pgd;	pmd_t		*pmd;	pte_t		*pte;	unsigned long	a = (unsigned long)virt;	struct mm_struct *mm = find_init_mm();	if (mm == NULL ||	    pgd_none(*(pgd = pgd_offset(mm,  a))) ||	    pmd_none(*(pmd = pmd_offset(pgd, a))) ||	    pte_none(*(pte = pte_offset(pmd, a))))		return 0;	return virt_to_bus((void *)pte_page(*pte))		+ (a & (PAGE_SIZE - 1));}/*  Useful for a nopage handler when mmap()ing vmalloc()ed memory  */unsigned longv4l2_vmalloc_to_page(void *virt){	pgd_t		*pgd;	pmd_t		*pmd;	pte_t		*pte;	unsigned long	a = (unsigned long)virt;	struct mm_struct *mm = find_init_mm();	if (mm == NULL ||	    pgd_none(*(pgd = pgd_offset(current->mm, a))) ||	    pmd_none(*(pmd = pmd_offset(pgd,         a))) ||	    pte_none(*(pte = pte_offset(pmd,         a))))		return 0;	return pte_page(*pte);}#endif /* 2.2 *//* *  Simple queue management */static rwlock_t rw_lock_unlocked = RW_LOCK_UNLOCKED;void

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕欧美国产| 午夜激情综合网| 666欧美在线视频| 91丝袜国产在线播放| 国产成人免费在线视频| 经典三级在线一区| 捆绑调教一区二区三区| 另类小说欧美激情| 色噜噜狠狠成人网p站| 色综合天天综合网天天看片| 成人av网站在线| 成人免费视频免费观看| 99re成人精品视频| 欧美中文字幕一区二区三区 | 日本va欧美va精品| 亚洲成av人影院| 欧美a级理论片| 欧美在线免费播放| 亚洲免费资源在线播放| 亚洲一区在线观看免费观看电影高清| 日韩美女啊v在线免费观看| 亚洲视频一区在线| 成人av在线网| 欧美极品美女视频| 成人亚洲一区二区一| 久久久www成人免费无遮挡大片 | 国产精品第四页| 一卡二卡三卡日韩欧美| 免费在线观看成人| 日韩一区二区三区电影| 久久久噜噜噜久久中文字幕色伊伊 | 国产精品初高中害羞小美女文| 极品美女销魂一区二区三区| 精品日本一线二线三线不卡| 国产欧美日韩在线看| 亚洲国产一区二区a毛片| 久久av老司机精品网站导航| 日韩一卡二卡三卡国产欧美| 蜜桃av一区二区三区电影| 99久久99久久综合| 最新高清无码专区| 在线欧美日韩国产| 亚洲永久精品大片| 91麻豆精品国产| 久久疯狂做爰流白浆xx| 久久人人97超碰com| 国产黄色成人av| 亚洲女人****多毛耸耸8| 欧美亚洲一区二区在线观看| 中文字幕精品综合| 99久久精品免费看国产| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩一本到| 亚洲日本成人在线观看| 欧美日韩国产片| 亚洲精品久久7777| 99久久夜色精品国产网站| 亚洲乱码中文字幕综合| 日韩午夜三级在线| 国产成人av网站| 亚洲国产精品自拍| 欧美大片在线观看一区| 免费久久99精品国产| 久久综合久久久久88| 日韩精品高清不卡| 欧美日韩视频在线第一区 | 亚洲成人久久影院| 久久婷婷综合激情| 91福利视频在线| 国产一区二区三区在线观看免费视频 | 91久久精品一区二区二区| 看电视剧不卡顿的网站| 国产精品国产三级国产| 91精品午夜视频| 99久久久久久| 国内不卡的二区三区中文字幕| 日韩欧美三级在线| 色老头久久综合| 国产高清不卡一区二区| 亚洲免费观看高清| 久久精品一级爱片| 成人免费黄色大片| 麻豆视频一区二区| 亚洲香蕉伊在人在线观| 国产精品免费久久| 色婷婷综合久久久| 性做久久久久久| 亚洲国产成人一区二区三区| 3atv在线一区二区三区| 91丝袜美腿高跟国产极品老师 | 91麻豆精品91久久久久久清纯| 成人激情开心网| 精品在线你懂的| 午夜成人在线视频| 一区二区三区中文字幕精品精品 | 97se亚洲国产综合自在线不卡 | 欧美国产成人在线| 精品国产乱码久久久久久图片 | 欧美日韩国产一区二区三区地区| 成人蜜臀av电影| 久久精品av麻豆的观看方式| 亚洲一二三四区不卡| 亚洲欧美综合色| 欧美无砖专区一中文字| 色婷婷一区二区| 91麻豆免费看片| 99国产一区二区三精品乱码| 国产成人免费视频一区| 国产精品影视天天线| 亚洲精选一二三| 亚洲少妇30p| 国产精品久久久久7777按摩 | www成人在线观看| 日韩一级高清毛片| 日韩免费在线观看| 日韩欧美高清一区| 久久综合成人精品亚洲另类欧美| 欧美刺激午夜性久久久久久久| 欧美大片国产精品| 精品裸体舞一区二区三区| 精品裸体舞一区二区三区| 国产午夜精品一区二区| 国产精品三级视频| 一区二区在线免费| 亚洲午夜电影在线观看| 日韩和欧美一区二区| 经典三级一区二区| 99久久国产免费看| 欧美在线观看一区二区| 91精品国产入口在线| 色婷婷久久综合| 91麻豆精品久久久久蜜臀| 日韩一区二区三区视频在线| 久久丝袜美腿综合| 日韩一区欧美小说| 亚洲午夜久久久久| 另类小说图片综合网| 成人免费看片app下载| 在线观看一区日韩| 日韩欧美在线1卡| 国产欧美日韩在线视频| 亚洲一区二区综合| 久久国产精品99久久久久久老狼| 国产精品一区二区视频| 91色.com| 欧美成人乱码一区二区三区| 亚洲国产成人在线| 日韩精品电影在线观看| 成人精品免费看| 欧美日韩国产大片| 国产偷v国产偷v亚洲高清| 亚洲精品伦理在线| 国产又黄又大久久| 欧洲激情一区二区| 久久久午夜精品理论片中文字幕| 亚洲日本乱码在线观看| 久久99精品国产麻豆不卡| 色婷婷综合五月| 久久久精品免费观看| 五月婷婷欧美视频| 99re这里只有精品首页| 日韩免费高清视频| 一区二区三区四区精品在线视频 | 久久99这里只有精品| 99久久精品情趣| 久久免费电影网| 无吗不卡中文字幕| 99热国产精品| 91免费看视频| 久久久久久久久久美女| 无码av免费一区二区三区试看 | 国产精品一区二区三区四区| 欧美日韩在线电影| 亚洲国产精品99久久久久久久久| 老司机免费视频一区二区 | 香蕉久久夜色精品国产使用方法| 成人在线视频首页| 亚洲精品一线二线三线无人区| 亚洲第一二三四区| 91高清视频免费看| 亚洲欧美色图小说| 成人精品国产免费网站| 国产日韩欧美一区二区三区乱码 | 亚洲综合色视频| 成人精品视频一区二区三区| 国产精品白丝jk黑袜喷水| 欧美人狂配大交3d怪物一区| 日韩一区日韩二区| 成人中文字幕在线| 久久精品在线免费观看| 国产精品一区二区黑丝| 久久这里只有精品首页| 久久精品国产亚洲一区二区三区 | 国产女主播一区| 日韩欧美一二三| 国产女人18水真多18精品一级做| 久久精品72免费观看| 日韩欧美在线综合网| 久久国内精品视频| 日韩免费观看高清完整版在线观看|