/shark/trunk/drivers/linuxc26/include/drivers/shark_videodev26.h |
---|
407,6 → 407,9 |
/* Open VideoDev Interface */ |
int VIDEODEV26_open(int num); |
/* Close VideoDev Interface */ |
int VIDEODEV26_close(int num); |
/* IOCTL to VideoDev device */ |
int VIDEODEV26_ioctl(int num,unsigned int cmd,unsigned long arg); |
/shark/trunk/drivers/linuxc26/videodev.c |
---|
389,8 → 389,9 |
void *file = NULL; |
int bttv_open(struct inode *inode, struct file *file); |
/* Shark Inode emulation */ |
int bttv_release(struct inode *inode, struct file *file); |
/* Shark Inode emulation - Open */ |
int videodev_open_inode(int num) { |
struct inode *i; |
410,6 → 411,26 |
} |
/* Shark Inode emulation - Close */ |
int videodev_close_inode(int num) { |
struct inode *i; |
i = (struct inode *)kmalloc(sizeof(struct inode),GFP_KERNEL); |
linuxcomp_setfd(i,num); |
if (bttv_release(i,file)) { |
kfree(i); |
return -1; |
} |
kfree(file); |
kfree(i); |
return 0; |
} |
extern int bttv_ioctl(struct inode *inode, struct file *file, |
unsigned int cmd, unsigned long arg); |
428,6 → 449,8 |
return res; |
} |
module_init(videodev_init) |
module_exit(videodev_exit) |
/shark/trunk/drivers/linuxc26/linuxcomp.c |
---|
375,7 → 375,7 |
diff = (unsigned long)((((unsigned long)mem/4)+1)*4-(unsigned long)mem); |
*(unsigned long *)(mem+diff) = (diff | 0x80000000); |
return (mem+diff+4); |
} |
382,10 → 382,11 |
void vfree(void *addr) { |
if (addr == NULL) return; |
if (addr == NULL || *(unsigned long *)(addr-4) == 0) return; |
if ((*(unsigned long *)(addr-4) & 0x80000000) == 0x80000000) { |
free(addr-(*(unsigned long *)(addr-4) & 0x7FFFFFFF)-4); |
*(unsigned long *)(addr-4) = 0; |
return; |
} |
/shark/trunk/drivers/linuxc26/shark_videodev.c |
---|
21,8 → 21,10 |
#include <kernel/kern.h> |
extern int videodev_open_inode(int num); |
extern int videodev_close_inode(int num); |
extern int videodev_ioctl_inode(int num,unsigned int cmd,unsigned long arg); |
/* Open Videodev */ |
int VIDEODEV26_open(int num) { |
if (videodev_open_inode(num)) { |
34,6 → 36,15 |
} |
/* Close videodev */ |
int VIDEODEV26_close(int num) { |
videodev_close_inode(num); |
return 0; |
} |
int VIDEODEV26_ioctl(int num,unsigned int cmd,unsigned long arg) { |
return videodev_ioctl_inode(num,cmd,arg); |