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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? videodevx.c

?? S3C2440 攝像頭linux2.4.18的驅(qū)動(dòng)
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
	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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
88在线观看91蜜桃国自产| 亚洲天堂中文字幕| 欧美日韩国产成人在线免费| 成人免费毛片aaaaa**| 国产精一品亚洲二区在线视频| 全国精品久久少妇| 日韩av在线免费观看不卡| 一区二区三区在线不卡| 亚洲人xxxx| 中文字幕人成不卡一区| 中文字幕在线观看不卡视频| 国产精品免费视频观看| 中文字幕一区二区三区精华液 | 国产精品久久久久7777按摩| 中文字幕欧美国产| 国产精品第四页| 樱花影视一区二区| 亚洲国产欧美一区二区三区丁香婷| 亚洲精品国产无天堂网2021| 国产精品久久久久久久岛一牛影视| 亚洲视频每日更新| 亚洲一区国产视频| 日本成人在线网站| 国内外成人在线| 国产精品2024| 91丝袜呻吟高潮美腿白嫩在线观看| 97精品视频在线观看自产线路二| 欧美综合在线视频| 欧美一区二区三区系列电影| 精品久久免费看| 国产精品欧美经典| 一区二区三区精品视频| 日韩精品色哟哟| 久久国产精品72免费观看| 国产黄色精品视频| 色一情一伦一子一伦一区| 欧美在线播放高清精品| 日韩色在线观看| 国产日韩三级在线| 综合av第一页| 亚洲18色成人| 国产专区欧美精品| 91在线视频播放地址| 欧美日韩一区二区三区四区五区| 欧美成人综合网站| 国产精品动漫网站| 天堂va蜜桃一区二区三区漫画版| 激情图区综合网| 色婷婷一区二区| 日韩视频免费观看高清完整版 | 亚洲乱码国产乱码精品精98午夜| 亚洲h精品动漫在线观看| 国产精品香蕉一区二区三区| 色综合久久天天| 精品sm在线观看| 一区二区三区免费| 国产精品一区二区在线观看网站| 色婷婷亚洲综合| 欧美精品一区二区久久婷婷| 亚洲欧美激情插| 韩国av一区二区三区| 欧美综合天天夜夜久久| 2023国产一二三区日本精品2022| 亚洲激情图片qvod| 捆绑调教一区二区三区| 色综合久久久久久久久久久| 精品久久久久久久人人人人传媒| 亚洲人成网站影音先锋播放| 国产专区综合网| 91麻豆精品91久久久久久清纯| 国产精品萝li| 国产永久精品大片wwwapp| 欧美在线短视频| 国产精品超碰97尤物18| 久久精品国产精品亚洲精品| 欧美性猛交xxxxxx富婆| 国产精品毛片高清在线完整版| 日本不卡高清视频| 在线观看av一区二区| 国产喷白浆一区二区三区| 免费看欧美美女黄的网站| 91国产免费看| 中文字幕日本不卡| 成人一二三区视频| 国产午夜亚洲精品理论片色戒| 日本中文字幕一区二区有限公司| 色综合一个色综合亚洲| 国产欧美综合色| 激情五月播播久久久精品| 91精品国产乱码| 亚洲线精品一区二区三区| av不卡免费在线观看| 国产亚洲一区二区三区| 九一九一国产精品| 69p69国产精品| 亚洲成人免费观看| 在线影院国内精品| 亚洲美腿欧美偷拍| 99re热视频精品| 亚洲视频精选在线| 91女人视频在线观看| 国产精品国产三级国产aⅴ中文| 国产精品影视天天线| 久久女同精品一区二区| 久久99精品久久久久久| 日韩精品中文字幕在线不卡尤物 | 久久不见久久见中文字幕免费| 欧美高清性hdvideosex| 亚洲成人www| 欧美日本一道本| 丝袜国产日韩另类美女| 欧美精品欧美精品系列| 亚洲18女电影在线观看| 欧美一区二区免费观在线| 日本欧美韩国一区三区| 日韩欧美精品在线| 激情av综合网| 国产三级精品在线| 波多野结衣中文字幕一区 | 国产精品白丝在线| 91丝袜美腿高跟国产极品老师 | 成人欧美一区二区三区白人| 97se亚洲国产综合自在线观| 亚洲精品国产成人久久av盗摄| 一本色道a无线码一区v| 亚洲.国产.中文慕字在线| 欧美一区二区三区系列电影| 国产一区视频网站| 国产精品久久久久7777按摩| 色婷婷久久久综合中文字幕| 午夜精品一区二区三区电影天堂| 欧美一卡在线观看| 国产精品1区2区3区| 中文字幕中文字幕一区| 欧洲精品中文字幕| 美女久久久精品| 久久精品人人做人人综合| av不卡免费在线观看| 亚洲成人在线免费| 久久综合九色综合欧美就去吻| 成人免费av网站| 亚洲一二三区在线观看| 精品少妇一区二区三区在线视频| 国产成人夜色高潮福利影视| 亚洲男人的天堂一区二区| 日韩一级二级三级精品视频| 国产美女在线精品| 亚洲精品久久久蜜桃| 日韩欧美高清在线| 不卡一区二区中文字幕| 午夜av电影一区| 久久久久久电影| 在线观看av不卡| 国产一区二区成人久久免费影院| 亚洲视频1区2区| 日韩欧美国产一二三区| 99久久精品久久久久久清纯| 亚洲成人综合在线| 中文字幕第一区| 91麻豆精品国产91久久久资源速度 | 久久99精品久久久久久| 亚洲男女毛片无遮挡| 日韩午夜在线观看| 一本久久精品一区二区| 国产在线精品一区在线观看麻豆| 亚洲精品成人在线| wwwwww.欧美系列| 欧美日韩国产小视频在线观看| 国产精品538一区二区在线| 亚洲18女电影在线观看| 国产精品国产精品国产专区不片| 欧美福利视频一区| 99精品欧美一区二区三区小说 | 国产网红主播福利一区二区| 欧美日韩情趣电影| 成人福利视频在线| 久国产精品韩国三级视频| 亚洲在线免费播放| 欧美国产成人精品| 日韩精品一区二区在线观看| 日本韩国一区二区三区视频| 国产另类ts人妖一区二区| 午夜精品成人在线视频| 国产精品免费av| 精品av综合导航| 欧美日韩国产中文| 91麻豆自制传媒国产之光| 国产精品99久久久久久似苏梦涵 | 日本亚洲视频在线| 亚洲乱码精品一二三四区日韩在线| 久久精品一区二区三区av| 欧美日本一区二区| 欧美性欧美巨大黑白大战| 91同城在线观看| 99天天综合性| www.亚洲免费av| 国产福利一区二区三区视频 | 精品视频一区三区九区| 91美女视频网站| av一区二区久久|