Patching v0-2 with two patches
sbertin@mindspring.com
sbertin@mindspring.com
Mon, 30 Aug 1999 19:05:51 -0400 (EDT)
--0-1804289383-936054359=:1010
Content-Type: TEXT/plain; CHARSET=US-ASCII
On 31 Aug, Bas Rijniersce wrote:
> Hmmm,
>
> I should have known it, my C isn't good enough to merge even two patches
> ;-)
> If i apply Scott's big patch first and the Peter's patch there are only
> a few rejects:
> 1 out of 1 hunk FAILED -- saving rejects to cpia/module/cpia_entry.h.rej
> 2 out of 2 hunks FAILED -- saving rejects to
> cpia/module/interface_pp.c.rej
>
> The first one is so easy that even I can cut/paste them together. The
> second, the interface_pp.c file, has undergone quite a bit of rewriting.
> Enough to throw me off track. Scott, maybe you could fit them in??? It's
> only a few lines that you can place in the right spot very easily I
> think..
Here is a combined patch against cpia-0.2. It also has a small
improvement to my patch.
Scott J. Bertin
sbertin@mindspring.com
--0-1804289383-936054359=:1010
Content-Type: TEXT/plain; CHARSET=US-ASCII
Content-Description: combined_patch.diff
diff -c -r cpia.old/module/Makefile cpia/module/Makefile
*** cpia.old/module/Makefile Mon Aug 30 18:55:15 1999
--- cpia/module/Makefile Mon Aug 30 18:31:07 1999
***************
*** 3,9 ****
WARN = -Wall -Wstrict-prototypes
OPTIMIZE = -O2 -pipe
CODESTYL = -fomit-frame-pointer -fno-strength-reduce
! INCLUDES = -I../include
DEFINES = -D__KERNEL__ -DMODULE
CFLAGS = $(DEBUG) $(WARN) $(OPTIMIZE) $(CODESTYL) $(INCLUDES) $(DEFINES)
LIBS =
--- 3,9 ----
WARN = -Wall -Wstrict-prototypes
OPTIMIZE = -O2 -pipe
CODESTYL = -fomit-frame-pointer -fno-strength-reduce
! INCLUDES = -I../include -I/usr/src/linux/include
DEFINES = -D__KERNEL__ -DMODULE
CFLAGS = $(DEBUG) $(WARN) $(OPTIMIZE) $(CODESTYL) $(INCLUDES) $(DEFINES)
LIBS =
***************
*** 11,18 ****
PPCUS = module.o interface_pp.o interface_pp_low.o
PPV4L2 = v4l2.o interface_pp.o interface_pp_low.o
! all: .depend ppcuscpia.o
! #ppv4l2cpia.o
.c.o:
$(CC) -c $(CFLAGS) $<
--- 11,17 ----
PPCUS = module.o interface_pp.o interface_pp_low.o
PPV4L2 = v4l2.o interface_pp.o interface_pp_low.o
! all: .depend ppcuscpia.o ppv4l2cpia.o
.c.o:
$(CC) -c $(CFLAGS) $<
diff -c -r cpia.old/module/cpia_entry.h cpia/module/cpia_entry.h
*** cpia.old/module/cpia_entry.h Mon Aug 30 18:55:15 1999
--- cpia/module/cpia_entry.h Mon Aug 30 18:59:01 1999
***************
*** 19,24 ****
--- 19,27 ----
struct parport *port;
enum comstates state;
enum camstates camstate;
+ struct wait_queue *q_wait;
+ struct timer_list q_timer;
+ int open_count;
};
#endif
diff -c -r cpia.old/module/interface_pp.c cpia/module/interface_pp.c
*** cpia.old/module/interface_pp.c Mon Aug 30 18:55:15 1999
--- cpia/module/interface_pp.c Mon Aug 30 19:00:34 1999
***************
*** 1,5 ****
--- 1,8 ----
// (C) 1999 Bas Huisman <bhuism@cs.utwente.nl>
+ // and Scott J. Bertin <sbertin@mindspring.com>
+
+ #include <linux/config.h>
#include <linux/parport.h>
***************
*** 9,18 ****
#include "procs.h"
#include "debug.h"
#define MAXCAMS 4
#define PACKET_LENGTH 8
! struct cpia_entry *camera[MAXCAMS];
char camstatesstr[12][40] = {
"CPIA_PHASE_idle",
--- 12,25 ----
#include "procs.h"
#include "debug.h"
+ #ifdef CONFIG_KMOD
+ #include <linux/kmod.h>
+ #endif
+
#define MAXCAMS 4
#define PACKET_LENGTH 8
! struct cpia_entry *camera;
char camstatesstr[12][40] = {
"CPIA_PHASE_idle",
***************
*** 28,72 ****
// ***************************************************************************
//
- // struct cpia_entry stuff
- //
- // ***************************************************************************
-
- int newcamera(void)
- {
- int i;
- for (i = 0;i < MAXCAMS;i++)
- {
- if (camera[i] == NULL)
- {
- camera[i] = kmalloc(sizeof(struct cpia_entry),GFP_KERNEL);
- if (!camera[i])
- {
- LOG("kmalloc failed\n");
- return -1;
- };
- return i;
- };
- };
- LOG("reached MAXCAMS camera's increase MAXCAMS\n");
- return -1;
- };
-
- int freecam(int camnr)
- {
- if (camera[camnr])
- {
- kfree(camera[camnr]);
- camera[camnr] = NULL;
- return 0;
- };
- LOG("hmm.. trying to free a unkmalloc'ed camera\n");
- return -1;
- };
-
-
- // ***************************************************************************
- //
// EndTransferMode
//
// ***************************************************************************
--- 35,40 ----
***************
*** 121,133 ****
return -1;
};
! void pp_irq_handler(int irq,void *a,struct pt_regs *b)
{
! int minor = 0; //fixme
! if (camera[minor])
{
! if (camera[minor]->camstate == CPIA_PHASE_idle) LOG("image ready (%ld)\n",jiffies);
! //LOG("(%ld)got IRQ when in %s\n",jiffies,camstatesstr[camera[minor]->camstate]);
};
};
--- 89,101 ----
return -1;
};
! void pp_irq_handler(int irq,void *handle,struct pt_regs *b)
{
! struct cpia_entry *cam = (struct cpia_entry *)handle;
! if (cam)
{
! //if (cam->camstate == CPIA_PHASE_idle) LOG("image ready (%ld)\n",jiffies);
! //LOG("(%ld)got IRQ when in %s\n",jiffies,camstatesstr[cam->camstate]);
};
};
***************
*** 146,155 ****
int if_StreamRead(int minor,unsigned char *buffer,int length)
{
int tmp = 0;
! if (!camera[minor]) return -1;
! if (ReverseSetup(camera[minor],1)) return -1;
! tmp = ECPReadBuffer(camera[minor],buffer,length);
! EndTransferMode(camera[minor]);
return tmp;
};
--- 114,123 ----
int if_StreamRead(int minor,unsigned char *buffer,int length)
{
int tmp = 0;
! struct cpia_entry *cpia = &camera[minor];
! if (ReverseSetup(cpia,1)) return -1;
! tmp = ECPReadBuffer(cpia,buffer,length);
! EndTransferMode(cpia);
return tmp;
};
***************
*** 168,176 ****
u8 cmd[PACKET_LENGTH] = {0,0,0,0,0,0,0,0};
struct ioctlstruct *ioctlstr = (struct ioctlstruct *)iostru;
int databytes;
! struct cpia_entry *cpia = camera[minor];
!
! if (!camera[minor]) return -1;
if ((ioctlnr<0)||(ioctlnr >= ((sizeof(ioctl2proc))/sizeof(ioctl2proc[0]))))
{
--- 136,142 ----
u8 cmd[PACKET_LENGTH] = {0,0,0,0,0,0,0,0};
struct ioctlstruct *ioctlstr = (struct ioctlstruct *)iostru;
int databytes;
! struct cpia_entry *cpia = &camera[minor];
if ((ioctlnr<0)||(ioctlnr >= ((sizeof(ioctl2proc))/sizeof(ioctl2proc[0]))))
{
***************
*** 255,318 ****
int if_Open(int minor)
{
! struct parport *port = NULL;
! struct pardevice *pdev = NULL;
! int camnr;
!
! if (camera[minor]) // if cpia_arr[minor]
! {
! LOG("camera[%d] != NULL already opened this thing ?\n",minor);
! return -EBUSY;
! };
!
! for (port = parport_enumerate();port;port = port->next)
! {
! if (port->number == minor) break;
! };
!
! if (!port)
{
! LOG("can't find parport number %d\n",minor);
return -ENXIO;
};
! if (!port->modes & PARPORT_MODE_PCECP) //fixme
{
! LOG("port is not ECP capable\n");
! return -ENXIO;
! };
!
! pdev = parport_register_device(port,"cpia",NULL,NULL,pp_irq_handler,0,NULL);
!
! if (!pdev)
! {
! LOG("failed to parport_register_device\n");
! return -ENXIO;
}
! if (parport_claim(pdev))
{
LOG("failed to claim the port\n");
- parport_unregister_device(pdev);
return -EBUSY;
};
! if ((camnr = newcamera()) < 0)
! {
! parport_release(pdev);
! parport_unregister_device(pdev);
! return -EBUSY;
! };
!
! camera[camnr]->pdev = pdev;
! camera[camnr]->port = port;
! camera[camnr]->state = CPIA_FORWARD;
! camera[camnr]->camstate = CPIA_PHASE_idle;
!
/* detect the thing */
! parport_write_econtrol(port,PARPORT_MODE_PCECR);
! parport_pc_disable_irq(port);
return 0; // success
};
--- 221,249 ----
int if_Open(int minor)
{
! if(minor >= MAXCAMS || camera[minor].pdev == NULL)
{
! LOG("Trying to open non-existent camera[%d]\n",minor);
return -ENXIO;
};
! if(camera[minor].open_count > 0)
{
! return -EBUSY;
}
! if (parport_claim(camera[minor].pdev))
{
LOG("failed to claim the port\n");
return -EBUSY;
};
! ++camera[minor].open_count;
/* detect the thing */
! parport_write_econtrol(camera[minor].port,PARPORT_MODE_PCECR);
! parport_pc_disable_irq(camera[minor].port);
! init_timer(&camera[minor].q_timer);
return 0; // success
};
***************
*** 325,358 ****
int if_Close(int minor)
{
! if (camera[minor])
{
! if (camera[minor]->port->irq > 0) parport_pc_disable_irq(camera[minor]->port);
! parport_release(camera[minor]->pdev);
! parport_unregister_device(camera[minor]->pdev);
! freecam(minor);
}
! else LOG("strange ... camera[%d] already NULL\n",minor);
return 0;
};
int if_Init(void)
{
! int i;
! for (i = 0;i < MAXCAMS;i++) camera[i] = NULL;
return 0;
};
int if_Cleanup(void)
{
int i;
! for (i = 0;i < MAXCAMS;i++)
{
! if (camera[i])
{
LOG("You forgot to close minor %d, will do it for you\n",i);
if_Close(i);
};
};
return 0;
};
--- 256,350 ----
int if_Close(int minor)
{
! if(--camera[minor].open_count == 0)
{
! del_timer(&camera[minor].q_timer);
! if (camera[minor].port->irq > 0) parport_pc_disable_irq(camera[minor].port);
! parport_release(camera[minor].pdev);
}
! else LOG("Multiply opened camera[%d]\n", minor);
return 0;
};
+ int cpia_register(int minor, struct parport *port)
+ {
+ struct pardevice *pdev = NULL;
+
+ #ifdef CONFIG_PNP_PARPORT_MODULE
+ #ifdef CONFIG_KMOD
+ request_module("parport_probe");
+ #endif /* CONFIG_KMOD */
+ if(port->probe_info.class != PARPORT_CLASS_MEDIA ||
+ port->probe_info.cmdset == NULL ||
+ strncmp(port->probe_info.cmdset, "CPIA_1", 6) != 0)
+ {
+ return -ENXIO;
+ }
+ #endif /* CONFIG_PNP_PARPORT_MODULE */
+
+ pdev = parport_register_device(port,"cpia",NULL,NULL,pp_irq_handler,0,&camera[minor]);
+
+ if (!pdev)
+ {
+ LOG("failed to parport_register_device\n");
+ return -ENXIO;
+ }
+
+ if (!(port->modes & PARPORT_MODE_PCECP))
+ {
+ LOG("port is not ECP capable\n");
+ parport_unregister_device(pdev);
+ return -ENXIO;
+ };
+
+ camera[minor].pdev = pdev;
+ camera[minor].port = port;
+ camera[minor].state = CPIA_FORWARD;
+ camera[minor].camstate = CPIA_PHASE_idle;
+ camera[minor].q_wait = NULL;
+ camera[minor].open_count = 0;
+
+ return 0; // success
+ }
+
int if_Init(void)
{
! struct parport *port;
! int i=0;
! camera = kmalloc(MAXCAMS*sizeof(struct cpia_entry),GFP_KERNEL);
! for (port = parport_enumerate(); port; port = port->next) {
! if (!cpia_register(i, port))
! if (++i == MAXCAMS)
! break;
! }
! if(i == 0) {
! LOG("No cameras found\n");
! kfree(camera);
! return -ENODEV;
! }
! while (i < MAXCAMS)
! {
! camera[i].pdev = NULL;
! camera[i].port = NULL;
! camera[i].q_wait = NULL;
! camera[i].open_count = 0;
! ++i;
! };
return 0;
};
int if_Cleanup(void)
{
int i;
! for (i = 0;camera[i].pdev != NULL && i < MAXCAMS;i++)
{
! if (camera[i].open_count > 0)
{
LOG("You forgot to close minor %d, will do it for you\n",i);
if_Close(i);
};
+ parport_unregister_device(camera[i].pdev);
};
+ kfree(camera);
return 0;
};
diff -c -r cpia.old/module/interface_pp_low.c cpia/module/interface_pp_low.c
*** cpia.old/module/interface_pp_low.c Mon Aug 30 18:55:15 1999
--- cpia/module/interface_pp_low.c Mon Aug 30 18:59:00 1999
***************
*** 26,42 ****
#define WHILE_OUT_TIMEOUT 10
! #define WHILE_OUT(thisthing)\
! {\
! if (thisthing)\
! {\
! unsigned long startjif = jiffies;\
! while ((thisthing)&&((jiffies-startjif)<WHILE_OUT_TIMEOUT));\
! if (!((jiffies-startjif)<WHILE_OUT_TIMEOUT))\
! {LOG("WhileoutError at line waited %ld\n",jiffies-startjif);\
! goto WhileoutError;};\
! };\
! };\
int my_wait_peripheral(struct parport *port,int mask,int result)
{
--- 26,73 ----
#define WHILE_OUT_TIMEOUT 10
! void
! do_nothing(unsigned long ptr)
! {
! struct cpia_entry *cpia = (struct cpia_entry *)ptr;
! if( cpia->q_wait != NULL )
! {
! wake_up_interruptible(&cpia->q_wait);
! }
! return;
! }
!
! int
! while_out(struct cpia_entry *cpia)
! {
! struct parport *port = cpia->port;
! unsigned long endjif;
! int i, is_sig=0;
!
! if( GetECRMasked(port,ECR_full) ) return 1;
!
! cpia->q_timer.function=do_nothing;
! cpia->q_timer.data=(unsigned long)cpia;
! endjif = jiffies+WHILE_OUT_TIMEOUT;
! cpia->q_timer.expires=endjif;
!
! cpia->q_wait=NULL;
! add_timer(&cpia->q_timer);
! interruptible_sleep_on(&cpia->q_wait);
! for ( i=0; i<_NSIG_WORDS && !is_sig; i++) /* ??? */
! is_sig = current->signal.sig[i] &
! ~current->blocked.sig[i];
! if (is_sig)
! {
! return 0;
! }
! if( !GetECRMasked(port,ECR_full) )
! {
! LOG("WhileoutError at line waited %d\n",WHILE_OUT_TIMEOUT);
! return 0;
! }
! return 1;
! }
int my_wait_peripheral(struct parport *port,int mask,int result)
{
***************
*** 327,333 ****
while((((bytes-readbytes)/ECP_FIFO_SIZE) > 0)&&(endseen<4)) //at least 1 full fifo to do ?
{
! WHILE_OUT(!GetECRMasked(port,ECR_full)); //wait for FIFO to be full
for(j = 0;j < ECP_FIFO_SIZE;j++ )
{
*buf = parport_read_fifo(port);
--- 358,367 ----
while((((bytes-readbytes)/ECP_FIFO_SIZE) > 0)&&(endseen<4)) //at least 1 full fifo to do ?
{
! if( while_out(cpia)==0 )
! {
! goto WhileoutError;
! }
for(j = 0;j < ECP_FIFO_SIZE;j++ )
{
*buf = parport_read_fifo(port);
diff -c -r cpia.old/module/module.c cpia/module/module.c
*** cpia.old/module/module.c Thu May 13 14:14:33 1999
--- cpia/module/module.c Sat Aug 28 21:05:34 1999
***************
*** 19,24 ****
--- 19,25 ----
int pp_cpia_open(struct inode *inode, struct file *file) // open()
{
if (if_Open(MINOR(inode->i_rdev))) return -1;
+ file->private_data = (void *)MINOR(inode->i_rdev);
MOD_INC_USE_COUNT;
return 0;
};
***************
*** 31,45 ****
ssize_t pp_cpia_read(struct file *file,char *buffer,size_t length, loff_t *lofft)
{
- int minor = 0; //fixme
if (!buffer) return -EINVAL;
! return if_StreamRead(minor,buffer,length);
};
int pp_cpia_ioctl(struct inode *inode,struct file *file,unsigned int ioctlnr,unsigned long arg)
{
! int minor = 0; //fixme
! return if_TransferMsg(minor,ioctlnr,(struct ioctlstruct *)arg);
};
struct file_operations cpia_fops =
--- 32,44 ----
ssize_t pp_cpia_read(struct file *file,char *buffer,size_t length, loff_t *lofft)
{
if (!buffer) return -EINVAL;
! return if_StreamRead((int)file->private_data,buffer,length);
};
int pp_cpia_ioctl(struct inode *inode,struct file *file,unsigned int ioctlnr,unsigned long arg)
{
! return if_TransferMsg(MINOR(inode->i_rdev),ioctlnr,(struct ioctlstruct *)arg);
};
struct file_operations cpia_fops =
--0-1804289383-936054359=:1010--
-----------------------------------------------------------------------------
To unsubscribe from this mailinglist, send the line "unsubscribe vision-webcam" in the
body of a message to "majordomo@errors.no".