Re: Error encountered trying to build comedi 0.7.73, kernel 2.6.21

On 28/07/07 06:10, Gina Q wrote:
> I'm trying to build comedi 0.7.73 on a Gentoo GNU/Linux 2007.0 system,
> Pentium 4 CPU, gcc 4.1.2, kernel 2.6.21 .

You can either check out the CVS version or apply the attached patch,
like this:

$ cd /path/to/comedi-0.7.73
$ patch -p1 < /path/to/comedi-0.7.73-patch-iasp1-ps1.patch

(Or you could wait for comedi-0.7.74 to be released, hopefully sometime
this week.)

You'll also need to use the '--disable-pcmcia' option when configuring:

$ ./configure --disable-pcmcia

-- 
-=( Ian Abbott _at_ MEV Ltd.    E-mail: <abbotti_at_mev.co.uk>        )=-
-=( Tel: +44 (0)161 477 1898   FAX: +44 (0)161 718 3587         )=-
diff -urNad comedi-0.7.73~/comedi/comedi_fops.c comedi-0.7.73/comedi/comedi_fops.c
--- comedi-0.7.73~/comedi/comedi_fops.c	2006-08-15 20:56:18.000000000 +0200
+++ comedi-0.7.73/comedi/comedi_fops.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -1748,7 +1748,7 _at__at_
 		sprintf(name, "comedi%d", i);
 		devfs_register(NULL, name, DEVFS_FL_DEFAULT,
 			COMEDI_MAJOR, i, 0666 | S_IFCHR, &comedi_fops, NULL);
-		CLASS_DEVICE_CREATE(comedi_class, 0, MKDEV(COMEDI_MAJOR, i), NULL, "comedi%i", i);
+		COMEDI_CLASS_DEVICE_CREATE(comedi_class, 0, MKDEV(COMEDI_MAJOR, i), NULL, "comedi%i", i);
 	}
 
 	comedi_rt_init();
diff -urNad comedi-0.7.73~/comedi/drivers/adl_pci9111.c comedi-0.7.73/comedi/drivers/adl_pci9111.c
--- comedi-0.7.73~/comedi/drivers/adl_pci9111.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/adl_pci9111.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -82,12 +82,6 _at__at_
 #include "8253.h"
 #include "comedi_fc.h"
 
-typedef enum
-{
-  false,
-  true
-} bool;
-
 #define PCI9111_DRIVER_NAME 	"adl_pci9111"
 #define PCI9111_HR_DEVICE_ID 	0x9111
 
_at__at_ -950,7 +944,7 _at__at_
 #undef INTERRUPT_DEBUG
 
 static irqreturn_t 
-pci9111_interrupt (int irq, void *p_device, struct pt_regs *regs)
+pci9111_interrupt (int irq, void *p_device PT_REGS_ARG)
 {
 	comedi_device *dev=p_device;
 	comedi_subdevice *subdevice = dev->read_subdev;
_at__at_ -1370,7 +1364,7 _at__at_
 	{
 		if (comedi_request_irq (pci_device->irq,
 			pci9111_interrupt, 
-			SA_SHIRQ, 
+			IRQF_SHARED, 
 			PCI9111_DRIVER_NAME, 
 			dev)!=0)
 		{
diff -urNad comedi-0.7.73~/comedi/drivers/adl_pci9118.c comedi-0.7.73/comedi/drivers/adl_pci9118.c
--- comedi-0.7.73~/comedi/drivers/adl_pci9118.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/adl_pci9118.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -640,7 +640,7 _at__at_
 /* 
 ==============================================================================
 */
-static irqreturn_t interrupt_pci9118(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pci9118(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	unsigned int	int_daq=0,int_amcc,int_adstat;
_at__at_ -1751,7 +1751,7 _at__at_
 	
 	if (it->options[3]&2) irq=0; // user don't want use IRQ
 	if (irq>0)  {
-		if (comedi_request_irq(irq, interrupt_pci9118, SA_SHIRQ, "ADLink PCI-9118", dev)) {
+		if (comedi_request_irq(irq, interrupt_pci9118, IRQF_SHARED, "ADLink PCI-9118", dev)) {
 			rt_printk(", unable to allocate IRQ %d, DISABLING IT", irq);
 			irq=0; /* Can't use IRQ */
 		} else {
diff -urNad comedi-0.7.73~/comedi/drivers/adv_pci1710.c comedi-0.7.73/comedi/drivers/adv_pci1710.c
--- comedi-0.7.73~/comedi/drivers/adv_pci1710.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/adv_pci1710.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -715,7 +715,7 _at__at_
 /*
 ==============================================================================
 */
-static irqreturn_t interrupt_service_pci1710(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_service_pci1710(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 
_at__at_ -1301,7 +1301,7 _at__at_
 
 	if (this_board->have_irq) {
 		if (irq)  {
-			if (comedi_request_irq(irq, interrupt_service_pci1710, SA_SHIRQ, "Advantech PCI-1710", dev)) {
+			if (comedi_request_irq(irq, interrupt_service_pci1710, IRQF_SHARED, "Advantech PCI-1710", dev)) {
 				rt_printk(", unable to allocate IRQ %d, DISABLING IT", irq);
 				irq=0; /* Can't use IRQ */
 			} else {
diff -urNad comedi-0.7.73~/comedi/drivers/adv_pci_dio.c comedi-0.7.73/comedi/drivers/adv_pci_dio.c
--- comedi-0.7.73~/comedi/drivers/adv_pci_dio.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/adv_pci_dio.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -720,7 +720,7 _at__at_
 		pci1760_reset(dev);
 		break;
 	case TYPE_PCI1762:
-		outw(0x0101, dev->iobase+PCI1750_ICR);	// disable & clear interrupts
+		outw(0x0101, dev->iobase+PCI1762_ICR);	// disable & clear interrupts
 		break;
 	}
 
diff -urNad comedi-0.7.73~/comedi/drivers/amplc_dio200.c comedi-0.7.73/comedi/drivers/amplc_dio200.c
--- comedi-0.7.73~/comedi/drivers/amplc_dio200.c	2006-08-08 16:42:07.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/amplc_dio200.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -952,7 +952,7 _at__at_
  * Interrupt service routine.
  */
 static irqreturn_t
-dio200_interrupt(int irq, void *d, struct pt_regs *regs)
+dio200_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev=d;
 	int handled;
_at__at_ -1072,8 +1072,6 _at__at_
 	int ret;
 	int chan = CR_CHAN(insn->chanspec);
 
-	if (insn->n != 2) return -EINVAL;
-
 	switch (data[0]) {
 	case INSN_CONFIG_8254_SET_MODE:
 		ret = i8254_set_mode(subpriv->iobase, chan, data[1]);
_at__at_ -1104,7 +1102,7 _at__at_
 		return -EINVAL;
 		break;
 	}
-	return 2;
+	return insn->n;
 }
 
 /*
_at__at_ -1308,7 +1306,7 _at__at_
 	dev->board_name = thisboard->name;
 
 	if (irq) {
-		unsigned long flags = share_irq ? SA_SHIRQ : 0;
+		unsigned long flags = share_irq ? IRQF_SHARED : 0;
 
 		if (comedi_request_irq(irq, dio200_interrupt, flags,
 					DIO200_DRIVER_NAME, dev) >= 0) {
diff -urNad comedi-0.7.73~/comedi/drivers/amplc_pc236.c comedi-0.7.73/comedi/drivers/amplc_pc236.c
--- comedi-0.7.73~/comedi/drivers/amplc_pc236.c	2006-08-08 16:42:07.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/amplc_pc236.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -153,7 +153,7 _at__at_
 	comedi_cmd *cmd);
 static int pc236_intr_cmd(comedi_device *dev,comedi_subdevice *s);
 static int pc236_intr_cancel(comedi_device *dev,comedi_subdevice *s);
-static irqreturn_t pc236_interrupt(int irq,void *d,struct pt_regs *regs);
+static irqreturn_t pc236_interrupt(int irq,void *d PT_REGS_ARG);
 
 /*
  * Attach is called by the Comedi core to configure the driver
_at__at_ -287,7 +287,7 _at__at_
 	s->type = COMEDI_SUBD_UNUSED;
 	pc236_intr_disable(dev);
 	if (irq) {
-		unsigned long flags = share_irq ? SA_SHIRQ : 0;
+		unsigned long flags = share_irq ? IRQF_SHARED : 0;
 
 		if (comedi_request_irq(irq, pc236_interrupt, flags,
 					PC236_DRIVER_NAME, dev) >= 0) {
_at__at_ -534,7 +534,7 _at__at_
  * Interrupt service routine.
  * Based on the comedi_parport driver.
  */
-static irqreturn_t pc236_interrupt(int irq,void *d,struct pt_regs *regs)
+static irqreturn_t pc236_interrupt(int irq,void *d PT_REGS_ARG)
 {
 	comedi_device *dev=d;
 	comedi_subdevice *s=dev->subdevices+1;
diff -urNad comedi-0.7.73~/comedi/drivers/amplc_pci224.c comedi-0.7.73/comedi/drivers/amplc_pci224.c
--- comedi-0.7.73~/comedi/drivers/amplc_pci224.c	2006-08-08 16:42:08.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/amplc_pci224.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -1201,7 +1201,7 _at__at_
  * Interrupt handler.
  */
 static irqreturn_t
-pci224_interrupt(int irq, void *d, struct pt_regs *regs)
+pci224_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = &dev->subdevices[0];
_at__at_ -1474,7 +1474,7 _at__at_
 	dev->board_name = thisboard->name;
 
 	if (irq) {
-		ret = comedi_request_irq(irq, pci224_interrupt, SA_SHIRQ,
+		ret = comedi_request_irq(irq, pci224_interrupt, IRQF_SHARED,
 				DRIVER_NAME, dev);
 		if (ret < 0) {
 			printk(KERN_ERR "comedi%d: error! "
diff -urNad comedi-0.7.73~/comedi/drivers/amplc_pci230.c comedi-0.7.73/comedi/drivers/amplc_pci230.c
--- comedi-0.7.73~/comedi/drivers/amplc_pci230.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/amplc_pci230.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -281,7 +281,7 _at__at_
 #endif
 static void pci230_cancel_ct1(comedi_device *dev);
 static void pci230_cancel_ct2(comedi_device *dev);
-static irqreturn_t pci230_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t pci230_interrupt(int irq, void *d PT_REGS_ARG);
 static int pci230_ao_cmdtest(comedi_device *dev,comedi_subdevice *s, comedi_cmd *cmd);
 static int pci230_ao_cmd(comedi_device *dev, comedi_subdevice *s);
 static int pci230_ao_cancel(comedi_device *dev, comedi_subdevice *s);
_at__at_ -390,7 +390,7 _at__at_
 	outb(0, devpriv->pci_iobase + PCI230_INT_SCE);
 
 	/* Register the interrupt handler. */
-	irq_hdl = comedi_request_irq(devpriv->pci_dev->irq, pci230_interrupt, SA_SHIRQ, "amplc_pci230", dev);
+	irq_hdl = comedi_request_irq(devpriv->pci_dev->irq, pci230_interrupt, IRQF_SHARED, "amplc_pci230", dev);
 	if(irq_hdl<0) {
 		printk("comedi%d: amplc_pci230: unable to register irq, commands will not be available %d\n", dev->minor, devpriv->pci_dev->irq);
 	}
_at__at_ -1397,7 +1397,7 _at__at_
 }
 
 /* Interrupt handler */
-static irqreturn_t pci230_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t pci230_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	int status_int;
 	comedi_device *dev = (comedi_device*) d;
diff -urNad comedi-0.7.73~/comedi/drivers/cb_das16_cs.c comedi-0.7.73/comedi/drivers/cb_das16_cs.c
--- comedi-0.7.73~/comedi/drivers/cb_das16_cs.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/cb_das16_cs.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -103,7 +103,7 _at__at_
 }};
 
 
-static irqreturn_t das16cs_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t das16cs_interrupt(int irq, void *d PT_REGS_ARG);
 static int das16cs_ai_rinsn(comedi_device *dev,comedi_subdevice *s,
 	comedi_insn *insn,lsampl_t *data);
 static int das16cs_ai_cmd(comedi_device *dev,comedi_subdevice *s);
_at__at_ -182,7 +182,7 _at__at_
 	printk("\n");
 
 	ret = comedi_request_irq(link->irq.AssignedIRQ, das16cs_interrupt,
-		SA_SHIRQ, "cb_das16_cs", dev);
+		IRQF_SHARED, "cb_das16_cs", dev);
 	if(ret<0){
 		return ret;
 	}
_at__at_ -270,7 +270,7 _at__at_
 }
 
 
-static irqreturn_t das16cs_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t das16cs_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	//comedi_device *dev = d;
 	return IRQ_HANDLED;
diff -urNad comedi-0.7.73~/comedi/drivers/cb_pcidas.c comedi-0.7.73/comedi/drivers/cb_pcidas.c
--- comedi-0.7.73~/comedi/drivers/cb_pcidas.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/cb_pcidas.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -466,7 +466,7 _at__at_
 static int cb_pcidas_ao_inttrig(comedi_device *dev, comedi_subdevice *subdev, unsigned int trig_num);
 static int cb_pcidas_ao_cmdtest(comedi_device *dev,comedi_subdevice *s,
 	comedi_cmd *cmd);
-static irqreturn_t cb_pcidas_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t cb_pcidas_interrupt(int irq, void *d PT_REGS_ARG);
 static void handle_ao_interrupt(comedi_device *dev, unsigned int status);
 static int cb_pcidas_cancel(comedi_device *dev, comedi_subdevice *s);
 static int cb_pcidas_ao_cancel(comedi_device *dev, comedi_subdevice *s);
_at__at_ -585,7 +585,7 _at__at_
 	}
 
 	// get irq
-	if(comedi_request_irq(devpriv->pci_dev->irq, cb_pcidas_interrupt, SA_SHIRQ, "cb_pcidas", dev ))
+	if(comedi_request_irq(devpriv->pci_dev->irq, cb_pcidas_interrupt, IRQF_SHARED, "cb_pcidas", dev ))
 	{
 		printk(" unable to allocate irq %d\n", devpriv->pci_dev->irq);
 		return -EINVAL;
_at__at_ -1491,7 +1491,7 _at__at_
 	return 0;
 }
 
-static irqreturn_t cb_pcidas_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t cb_pcidas_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = (comedi_device*) d;
 	comedi_subdevice *s = dev->read_subdev;
diff -urNad comedi-0.7.73~/comedi/drivers/cb_pcidas64.c comedi-0.7.73/comedi/drivers/cb_pcidas64.c
--- comedi-0.7.73~/comedi/drivers/cb_pcidas64.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/cb_pcidas64.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -1163,7 +1163,7 _at__at_
 static int ao_cmd(comedi_device *dev,comedi_subdevice *s);
 static int ao_inttrig(comedi_device *dev, comedi_subdevice *subdev, unsigned int trig_num);
 static int ao_cmdtest(comedi_device *dev,comedi_subdevice *s, comedi_cmd *cmd);
-static irqreturn_t handle_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t handle_interrupt(int irq, void *d PT_REGS_ARG);
 static int ai_cancel(comedi_device *dev, comedi_subdevice *s);
 static int ao_cancel(comedi_device *dev, comedi_subdevice *s);
 static int dio_callback(int dir, int port, int data, unsigned long arg);
_at__at_ -1750,7 +1750,7 _at__at_
 	priv(dev)->hw_revision = hw_revision( dev, readw(priv(dev)->main_iobase + HW_STATUS_REG ) );
 	printk(" stc hardware revision %i\n", priv(dev)->hw_revision);
 	// get irq
-	if(comedi_request_irq(pcidev->irq, handle_interrupt, SA_SHIRQ, "cb_pcidas64", dev ))
+	if(comedi_request_irq(pcidev->irq, handle_interrupt, IRQF_SHARED, "cb_pcidas64", dev ))
 	{
 		printk(" unable to allocate irq %u\n", pcidev->irq);
 		return -EINVAL;
_at__at_ -3044,7 +3044,7 _at__at_
 	cfc_handle_events( dev, s );
 }
 
-static irqreturn_t handle_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t handle_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	unsigned short status;
diff -urNad comedi-0.7.73~/comedi/drivers/cb_pcimdas.c comedi-0.7.73/comedi/drivers/cb_pcimdas.c
--- comedi-0.7.73~/comedi/drivers/cb_pcimdas.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/cb_pcimdas.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -288,7 +288,7 _at__at_
 
 // Dont support IRQ yet
 //	// get irq
-//	if(comedi_request_irq(devpriv->pci_dev->irq, cb_pcimdas_interrupt, SA_SHIRQ, "cb_pcimdas", dev ))
+//	if(comedi_request_irq(devpriv->pci_dev->irq, cb_pcimdas_interrupt, IRQF_SHARED, "cb_pcimdas", dev ))
 //	{
 //		printk(" unable to allocate irq %u\n", devpriv->pci_dev->irq);
 //		return -EINVAL;
diff -urNad comedi-0.7.73~/comedi/drivers/comedi_parport.c comedi-0.7.73/comedi/drivers/comedi_parport.c
--- comedi-0.7.73~/comedi/drivers/comedi_parport.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/comedi_parport.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -264,7 +264,7 _at__at_
 	return 0;
 }
 
-static irqreturn_t parport_interrupt(int irq,void *d,struct pt_regs *regs)
+static irqreturn_t parport_interrupt(int irq,void *d PT_REGS_ARG)
 {
 	comedi_device *dev=d;
 	comedi_subdevice *s=dev->subdevices+3;
diff -urNad comedi-0.7.73~/comedi/drivers/das16.c comedi-0.7.73/comedi/drivers/das16.c
--- comedi-0.7.73~/comedi/drivers/das16.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/das16.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -333,7 +333,7 _at__at_
 	unsigned int num_bytes, unsigned int start_chan_index);
 
 static void das16_reset(comedi_device *dev);
-static irqreturn_t das16_dma_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t das16_dma_interrupt(int irq, void *d PT_REGS_ARG);
 static void das16_timer_interrupt(unsigned long arg);
 static void das16_interrupt(comedi_device *dev);
 
_at__at_ -1142,7 +1142,7 _at__at_
 }
 
 
-static irqreturn_t das16_dma_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t das16_dma_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	int status;
 	comedi_device *dev = d;
diff -urNad comedi-0.7.73~/comedi/drivers/das16m1.c comedi-0.7.73/comedi/drivers/das16m1.c
--- comedi-0.7.73~/comedi/drivers/das16m1.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/das16m1.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -141,7 +141,7 _at__at_
 static int das16m1_cancel(comedi_device *dev, comedi_subdevice *s);
 
 static int das16m1_poll(comedi_device *dev, comedi_subdevice *s);
-static irqreturn_t das16m1_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t das16m1_interrupt(int irq, void *d PT_REGS_ARG);
 static void das16m1_handler(comedi_device *dev, unsigned int status);
 
 static unsigned int das16m1_set_pacer(comedi_device *dev, unsigned int ns, int round_flag);
_at__at_ -464,7 +464,7 _at__at_
 	return s->async->buf_write_count - s->async->buf_read_count;
 }
 
-static irqreturn_t das16m1_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t das16m1_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	int status;
 	comedi_device *dev = d;
diff -urNad comedi-0.7.73~/comedi/drivers/das1800.c comedi-0.7.73/comedi/drivers/das1800.c
--- comedi-0.7.73~/comedi/drivers/das1800.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/das1800.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -182,7 +182,7 _at__at_
 static int das1800_detach(comedi_device *dev);
 static int das1800_probe(comedi_device *dev);
 static int das1800_cancel(comedi_device *dev, comedi_subdevice *s);
-static irqreturn_t das1800_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t das1800_interrupt(int irq, void *d PT_REGS_ARG);
 static int das1800_ai_poll(comedi_device *dev,comedi_subdevice *s);
 static void das1800_ai_handler(comedi_device *dev);
 static void das1800_handle_dma(comedi_device *dev, comedi_subdevice *s, unsigned int status);
_at__at_ -883,7 +883,7 _at__at_
 	return s->async->buf_write_count - s->async->buf_read_count;
 }
 
-static irqreturn_t das1800_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t das1800_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	unsigned int status;
diff -urNad comedi-0.7.73~/comedi/drivers/das6402.c comedi-0.7.73/comedi/drivers/das6402.c
--- comedi-0.7.73~/comedi/drivers/das6402.c	2006-08-11 22:36:27.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/das6402.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -152,7 +152,7 _at__at_
 	outb_p(p,dev->iobase+14);
 }
 
-static irqreturn_t intr_handler(int irq,void *d,struct pt_regs *regs)
+static irqreturn_t intr_handler(int irq,void *d PT_REGS_ARG)
 {
 	comedi_device *dev=d;
 	comedi_subdevice *s=dev->subdevices;
diff -urNad comedi-0.7.73~/comedi/drivers/das800.c comedi-0.7.73/comedi/drivers/das800.c
--- comedi-0.7.73~/comedi/drivers/das800.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/das800.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -255,7 +255,7 _at__at_
 	offset:		sizeof(das800_board),
 };
 
-static irqreturn_t das800_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t das800_interrupt(int irq, void *d PT_REGS_ARG);
 static void enable_das800(comedi_device *dev);
 static void disable_das800(comedi_device *dev);
 static int das800_ai_do_cmdtest(comedi_device *dev,comedi_subdevice *s,comedi_cmd *cmd);
_at__at_ -345,7 +345,7 _at__at_
 COMEDI_INITCLEANUP(driver_das800);
 
 /* interrupt service routine */
-static irqreturn_t das800_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t das800_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	short i;		/* loop index */
 	sampl_t dataPoint = 0;
diff -urNad comedi-0.7.73~/comedi/drivers/dmm32at.c comedi-0.7.73/comedi/drivers/dmm32at.c
--- comedi-0.7.73~/comedi/drivers/dmm32at.c	2006-08-07 15:42:46.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/dmm32at.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -312,7 +312,7 _at__at_
 static int dmm32at_ai_cmd(comedi_device *dev, comedi_subdevice *s);
 static int dmm32at_ai_cancel(comedi_device *dev,comedi_subdevice *s);
 static int dmm32at_ns_to_timer(unsigned int *ns,int round);
-static irqreturn_t dmm32at_isr(int irq,void *d,struct pt_regs *regs);
+static irqreturn_t dmm32at_isr(int irq,void *d PT_REGS_ARG);
 void dmm32at_setaitimer(comedi_device *dev,unsigned int nansec);
 
 
_at__at_ -837,7 +837,7 _at__at_
 	return 0;
 }
 
-static irqreturn_t dmm32at_isr(int irq,void *d,struct pt_regs *regs){
+static irqreturn_t dmm32at_isr(int irq,void *d PT_REGS_ARG){
 	unsigned char intstat;
 	unsigned int samp;
 	unsigned short msb, lsb;
diff -urNad comedi-0.7.73~/comedi/drivers/dt2811.c comedi-0.7.73/comedi/drivers/dt2811.c
--- comedi-0.7.73~/comedi/drivers/dt2811.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/dt2811.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -255,7 +255,7 _at__at_
 #define DT2811_TIMEOUT 5
 
 #if 0
-static void dt2811_interrupt(int irq, void *d, struct pt_regs *regs)
+static void dt2811_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	int lo, hi;
 	int data;
diff -urNad comedi-0.7.73~/comedi/drivers/dt2814.c comedi-0.7.73/comedi/drivers/dt2814.c
--- comedi-0.7.73~/comedi/drivers/dt2814.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/dt2814.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -70,7 +70,7 _at__at_
 };
 COMEDI_INITCLEANUP(driver_dt2814);
 
-static irqreturn_t dt2814_interrupt(int irq,void *dev,struct pt_regs * regs);
+static irqreturn_t dt2814_interrupt(int irq,void *dev PT_REGS_ARG);
 
 typedef struct{
 	int ntrig;
_at__at_ -329,7 +329,7 _at__at_
 }
 
 
-static irqreturn_t dt2814_interrupt(int irq,void *d,struct pt_regs * regs)
+static irqreturn_t dt2814_interrupt(int irq,void *d PT_REGS_ARG)
 {
 	int lo,hi;
 	comedi_device *dev=d;
diff -urNad comedi-0.7.73~/comedi/drivers/dt282x.c comedi-0.7.73/comedi/drivers/dt282x.c
--- comedi-0.7.73~/comedi/drivers/dt282x.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/dt282x.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -578,7 +578,7 _at__at_
 	return n;
 }
 
-static irqreturn_t dt282x_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t dt282x_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->subdevices+0;
diff -urNad comedi-0.7.73~/comedi/drivers/dt3000.c comedi-0.7.73/comedi/drivers/dt3000.c
--- comedi-0.7.73~/comedi/drivers/dt3000.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/dt3000.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -333,7 +333,7 _at__at_
 
 static int debug_n_ints = 0;
 
-static irqreturn_t dt3k_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t dt3k_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->subdevices + 0;
_at__at_ -784,7 +784,7 _at__at_
 	dev->board_name = this_board->name;
 
 	if(comedi_request_irq(devpriv->pci_dev->irq, dt3k_interrupt,
-			SA_SHIRQ, "dt3000", dev)){
+			IRQF_SHARED, "dt3000", dev)){
 		printk(" unable to allocate IRQ %u\n", devpriv->pci_dev->irq);
 		return -EINVAL;
 	}
diff -urNad comedi-0.7.73~/comedi/drivers/gsc_hpdi.c comedi-0.7.73/comedi/drivers/gsc_hpdi.c
--- comedi-0.7.73~/comedi/drivers/gsc_hpdi.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/gsc_hpdi.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -58,7 +58,7 _at__at_
 static int hpdi_cmd( comedi_device *dev, comedi_subdevice *s );
 static int hpdi_cmd_test( comedi_device *dev, comedi_subdevice *s, comedi_cmd *cmd );
 static int hpdi_cancel( comedi_device *dev, comedi_subdevice *s );
-static irqreturn_t handle_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t handle_interrupt(int irq, void *d PT_REGS_ARG);
 static int dio_config_block_size( comedi_device *dev, lsampl_t *data );
 
 #undef HPDI_DEBUG	// disable debugging messages
_at__at_ -610,7 +610,7 _at__at_
 	DEBUG_PRINT(" hpdi remapped to 0x%p\n", priv(dev)->hpdi_iobase);
 
 	// get irq
-	if( comedi_request_irq( pcidev->irq, handle_interrupt, SA_SHIRQ, driver_hpdi.driver_name,
+	if( comedi_request_irq( pcidev->irq, handle_interrupt, IRQF_SHARED, driver_hpdi.driver_name,
 		 dev ) )
 	{
 		printk( " unable to allocate irq %u\n", pcidev->irq );
_at__at_ -917,7 +917,7 _at__at_
 	// XXX check for buffer overrun somehow
 }
 
-static irqreturn_t handle_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t handle_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->read_subdev;
diff -urNad comedi-0.7.73~/comedi/drivers/icp_multi.c comedi-0.7.73/comedi/drivers/icp_multi.c
--- comedi-0.7.73~/comedi/drivers/icp_multi.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/icp_multi.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -600,11 +600,10 _at__at_
 	Parameters:
 		int irq
 		void *d			Pointer to current device
-		struct pt_regs *regs	Pointer to
 
 ==============================================================================
 */
-static irqreturn_t interrupt_service_icp_multi(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_service_icp_multi(int irq, void *d PT_REGS_ARG)
 {
         comedi_device *dev = d;
 	int	int_no;
_at__at_ -929,7 +928,7 _at__at_
 
 	if (this_board->have_irq) {
 		if (irq)  {
-			if (comedi_request_irq(irq, interrupt_service_icp_multi, SA_SHIRQ, "Inova Icp Multi", dev)) {
+			if (comedi_request_irq(irq, interrupt_service_icp_multi, IRQF_SHARED, "Inova Icp Multi", dev)) {
 				printk(", unable to allocate IRQ %u, DISABLING IT", irq);
 				irq=0; /* Can't use IRQ */
 			}
diff -urNad comedi-0.7.73~/comedi/drivers/icp_multi.h comedi-0.7.73/comedi/drivers/icp_multi.h
--- comedi-0.7.73~/comedi/drivers/icp_multi.h	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/icp_multi.h	2007-07-25 11:45:27.000000000 +0200
_at__at_ -60,13 +60,18 _at__at_
 	inova_devices=NULL;
 	last=NULL;
 	
-	for(pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ; 
-		pcidev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
+	for(pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL ; 
+		pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
 		if(pcidev->vendor==pci_vendor){
 			inova=kmalloc(sizeof(*inova),GFP_KERNEL);
+			if(!inova){
+				printk("icp_multi: pci_card_list_init: allocation failed\n");
+				pci_dev_put(pcidev);
+				break;
+			}
 			memset(inova,0,sizeof(*inova));
 
-			inova->pcidev=pcidev;
+			inova->pcidev=pci_dev_get(pcidev);
 			if (last) { last->next=inova; }
 			     else { inova_devices=inova; }
 			last=inova;
_at__at_ -100,7 +105,8 _at__at_
 	struct pcilst_struct *inova,*next;
 
 	for(inova=inova_devices; inova; inova=next){
-		next=inova->next;
+	 	next=inova->next;
+		pci_dev_put(inova->pcidev);
 		kfree(inova);
 	}
 	
diff -urNad comedi-0.7.73~/comedi/drivers/me4000.c comedi-0.7.73/comedi/drivers/me4000.c
--- comedi-0.7.73~/comedi/drivers/me4000.c	2006-06-12 01:33:28.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/me4000.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -189,8 +189,7 _at__at_
 
 static irqreturn_t me4000_ai_isr(
 	int irq,
-	void *dev_id,
-	struct pt_regs *regs);
+	void *dev_id PT_REGS_ARG);
 
 static int me4000_ai_do_cmd_test(
 	comedi_device *dev,
_at__at_ -305,7 +304,7 _at__at_
 	s->insn_read    = me4000_ai_insn_read;
 
 	if(info->irq > 0){
-	    if(comedi_request_irq(info->irq, me4000_ai_isr, SA_SHIRQ, "ME-4000", dev)) {
+	    if(comedi_request_irq(info->irq, me4000_ai_isr, IRQF_SHARED, "ME-4000", dev)) {
 		printk("comedi%d: me4000: me4000_attach(): Unable to allocate irq\n", dev->minor);
 	    }
 	    else{
_at__at_ -1675,7 +1674,7 _at__at_
 
 
 
-static irqreturn_t me4000_ai_isr(int irq, void *dev_id, struct pt_regs *regs){
+static irqreturn_t me4000_ai_isr(int irq, void *dev_id PT_REGS_ARG){
     unsigned int tmp;
     comedi_device *dev = dev_id;
     comedi_subdevice *s = dev->subdevices;
diff -urNad comedi-0.7.73~/comedi/drivers/ni_6527.c comedi-0.7.73/comedi/drivers/ni_6527.c
--- comedi-0.7.73~/comedi/drivers/ni_6527.c	2005-10-06 19:42:04.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/ni_6527.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -197,7 +197,7 _at__at_
 	return 2;
 }
 
-static irqreturn_t ni6527_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t ni6527_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->subdevices + 2;
_at__at_ -349,7 +349,6 _at__at_
 	}
 
 	dev->board_name=this_board->name;
-	dev->irq=mite_irq(devpriv->mite);
 	printk(" %s",dev->board_name);
 
 	printk(" ID=0x%02x", readb(devpriv->mite->daq_io_addr + ID_Register));
_at__at_ -395,11 +394,11 _at__at_
 		devpriv->mite->daq_io_addr + Clear_Register);
 	writeb(0x00, devpriv->mite->daq_io_addr + Master_Interrupt_Control);
 
-	ret=comedi_request_irq(dev->irq,ni6527_interrupt,SA_SHIRQ,"ni6527",dev);
+	ret=comedi_request_irq(mite_irq(devpriv->mite),ni6527_interrupt,IRQF_SHARED,"ni6527",dev);
 	if(ret<0){
-		dev->irq=0;
 		printk(" irq not available");
-	}
+	}else
+		dev->irq = mite_irq(devpriv->mite);
 
 	printk("\n");
 
diff -urNad comedi-0.7.73~/comedi/drivers/ni_at_a2150.c comedi-0.7.73/comedi/drivers/ni_at_a2150.c
--- comedi-0.7.73~/comedi/drivers/ni_at_a2150.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/ni_at_a2150.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -177,7 +177,7 _at__at_
 	detach:		a2150_detach,
 };
 
-static irqreturn_t a2150_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t a2150_interrupt(int irq, void *d PT_REGS_ARG);
 static int a2150_ai_cmdtest(comedi_device *dev,comedi_subdevice *s,comedi_cmd *cmd);
 static int a2150_ai_cmd(comedi_device *dev, comedi_subdevice *s);
 static int a2150_ai_rinsn(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
_at__at_ -202,7 +202,7 _at__at_
 #endif
 
 /* interrupt service routine */
-static irqreturn_t a2150_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t a2150_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	int i;
 	int status;
diff -urNad comedi-0.7.73~/comedi/drivers/ni_atmio16d.c comedi-0.7.73/comedi/drivers/ni_atmio16d.c
--- comedi-0.7.73~/comedi/drivers/ni_atmio16d.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/ni_atmio16d.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -127,7 +127,7 _at__at_
 /* function prototypes */
 static int atmio16d_attach(comedi_device *dev,comedi_devconfig *it);
 static int atmio16d_detach(comedi_device *dev);
-static irqreturn_t atmio16d_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t atmio16d_interrupt(int irq, void *d PT_REGS_ARG);
 static int atmio16d_ai_cmdtest(comedi_device *dev, comedi_subdevice *s, comedi_cmd *cmd);
 static int atmio16d_ai_cmd(comedi_device *dev, comedi_subdevice *s);
 static int atmio16d_ai_cancel(comedi_device *dev, comedi_subdevice *s);
_at__at_ -254,7 +254,7 _at__at_
 	outw(2048, dev->iobase+DAC1_REG);
 }
 
-static irqreturn_t atmio16d_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t atmio16d_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->subdevices + 0;
diff -urNad comedi-0.7.73~/comedi/drivers/ni_labpc.c comedi-0.7.73/comedi/drivers/ni_labpc.c
--- comedi-0.7.73~/comedi/drivers/ni_labpc.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/ni_labpc.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -163,7 +163,7 _at__at_
 
 static int labpc_attach(comedi_device *dev,comedi_devconfig *it);
 static int labpc_cancel(comedi_device *dev, comedi_subdevice *s);
-static irqreturn_t labpc_interrupt(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t labpc_interrupt(int irq, void *d PT_REGS_ARG);
 static int labpc_drain_fifo(comedi_device *dev);
 static void labpc_drain_dma(comedi_device *dev);
 static void handle_isa_dma(comedi_device *dev);
_at__at_ -527,7 +527,7 _at__at_
 	{
 		isr_flags = 0;
 		if(thisboard->bustype == pci_bustype)
-			isr_flags |= SA_SHIRQ;
+			isr_flags |= IRQF_SHARED;
 		if(comedi_request_irq( irq, labpc_interrupt, isr_flags, driver_labpc.driver_name, dev))
 		{
 			printk( "unable to allocate irq %u\n", irq);
_at__at_ -1317,7 +1317,7 _at__at_
 }
 
 /* interrupt service routine */
-static irqreturn_t labpc_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t labpc_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->read_subdev;
diff -urNad comedi-0.7.73~/comedi/drivers/ni_mio_common.c comedi-0.7.73/comedi/drivers/ni_mio_common.c
--- comedi-0.7.73~/comedi/drivers/ni_mio_common.c	2006-08-16 17:36:58.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/ni_mio_common.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -420,7 +420,7 _at__at_
 }
 
 
-static irqreturn_t ni_E_interrupt(int irq,void *d,struct pt_regs * regs)
+static irqreturn_t ni_E_interrupt(int irq,void *d PT_REGS_ARG)
 {
 	comedi_device *dev=d;
 	unsigned short a_status;
diff -urNad comedi-0.7.73~/comedi/drivers/ni_mio_cs.c comedi-0.7.73/comedi/drivers/ni_mio_cs.c
--- comedi-0.7.73~/comedi/drivers/ni_mio_cs.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/ni_mio_cs.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -164,7 +164,7 _at__at_
 
 #define IRQ_POLARITY 1
 
-#define NI_E_IRQ_FLAGS		SA_SHIRQ
+#define NI_E_IRQ_FLAGS		IRQF_SHARED
 
 typedef struct{
 	dev_link_t *link;
_at__at_ -437,6 +437,10 _at__at_
 	link->irq.IRQInfo1=parse.cftable_entry.irq.IRQInfo1;
 	link->irq.IRQInfo2=parse.cftable_entry.irq.IRQInfo2;
 	ret = pcmcia_request_irq(handle, &link->irq);
+	if(ret)
+	{
+		printk("pcmcia_request_irq() returned error: %i\n", ret);
+	}
 	//printk("RequestIRQ 0x%02x\n",ret);
 
 	link->conf.ConfigIndex=1;
_at__at_ -490,7 +494,7 _at__at_
 	printk(" %s",boardtype.name);
 	dev->board_name=boardtype.name;
 
-	if( (ret=comedi_request_irq(dev->irq,ni_E_interrupt,NI_E_IRQ_FLAGS,"ni_mio_cs",dev))<0 ){
+	if( (ret=comedi_request_irq(irq,ni_E_interrupt,NI_E_IRQ_FLAGS,"ni_mio_cs",dev))<0 ){
 		printk(" irq not available\n");
 		return -EINVAL;
 	}
diff -urNad comedi-0.7.73~/comedi/drivers/ni_pcidio.c comedi-0.7.73/comedi/drivers/ni_pcidio.c
--- comedi-0.7.73~/comedi/drivers/ni_pcidio.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/ni_pcidio.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -420,7 +420,7 _at__at_
 	}
 }
 
-static irqreturn_t nidio_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t nidio_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev=d;
 	comedi_subdevice *s = dev->subdevices;
_at__at_ -1130,7 +1130,7 _at__at_
 		/* disable interrupts on board */
 		writeb(0x00,devpriv->mite->daq_io_addr+Master_DMA_And_Interrupt_Control);
 
-		ret=comedi_request_irq(irq,nidio_interrupt,SA_SHIRQ,"ni_pcidio",dev);
+		ret=comedi_request_irq(irq,nidio_interrupt,IRQF_SHARED,"ni_pcidio",dev);
 		if(ret<0){
 			printk(" irq not available");
 		}
diff -urNad comedi-0.7.73~/comedi/drivers/ni_pcimio.c comedi-0.7.73/comedi/drivers/ni_pcimio.c
--- comedi-0.7.73~/comedi/drivers/ni_pcimio.c	2006-08-16 21:11:53.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/ni_pcimio.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -1249,7 +1249,7 _at__at_
 #define interrupt_pin(a)	0
 #define IRQ_POLARITY 1
 
-#define NI_E_IRQ_FLAGS		SA_SHIRQ
+#define NI_E_IRQ_FLAGS		IRQF_SHARED
 
 #include "ni_mio_common.c"
 
diff -urNad comedi-0.7.73~/comedi/drivers/pcl711.c comedi-0.7.73/comedi/drivers/pcl711.c
--- comedi-0.7.73~/comedi/drivers/pcl711.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/pcl711.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -122,8 +122,6 _at__at_
 	BIP_RANGE( 10 )
 }};
 
-typedef int bool;
-
 /*
  * flags
  */
_at__at_ -181,7 +179,7 _at__at_
 
 #define devpriv ((pcl711_private *)dev->private)
 
-static irqreturn_t pcl711_interrupt(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t pcl711_interrupt(int irq, void *d PT_REGS_ARG)
 {
 	int lo, hi;
 	int data;
diff -urNad comedi-0.7.73~/comedi/drivers/pcl812.c comedi-0.7.73/comedi/drivers/pcl812.c
--- comedi-0.7.73~/comedi/drivers/pcl812.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/pcl812.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -848,7 +848,7 _at__at_
 /* 
 ==============================================================================
 */
-static irqreturn_t interrupt_pcl812_ai_int(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pcl812_ai_int(int irq, void *d)
 {
 	char err=1;
 	unsigned int mask, timeout;
_at__at_ -931,7 +931,7 _at__at_
 /* 
 ==============================================================================
 */
-static irqreturn_t interrupt_pcl812_ai_dma(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pcl812_ai_dma(int irq, void *d)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->subdevices + 0;
_at__at_ -976,12 +976,12 _at__at_
 /*
 ==============================================================================
 */
-static irqreturn_t interrupt_pcl812(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pcl812(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 
-	if (devpriv->ai_dma) { return interrupt_pcl812_ai_dma(irq, d, regs); }
-			else { return interrupt_pcl812_ai_int(irq, d, regs); };
+	if (devpriv->ai_dma) { return interrupt_pcl812_ai_dma(irq, d); }
+			else { return interrupt_pcl812_ai_int(irq, d); };
 }
 
 /*
diff -urNad comedi-0.7.73~/comedi/drivers/pcl816.c comedi-0.7.73/comedi/drivers/pcl816.c
--- comedi-0.7.73~/comedi/drivers/pcl816.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/pcl816.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -285,7 +285,7 _at__at_
    one sample per interrupt version   
 */
 static irqreturn_t
-interrupt_pcl816_ai_mode13_int (int irq, void *d, struct pt_regs *regs)
+interrupt_pcl816_ai_mode13_int (int irq, void *d)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->subdevices + 0;
_at__at_ -370,7 +370,7 _at__at_
 }
 
 
-static irqreturn_t interrupt_pcl816_ai_mode13_dma(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pcl816_ai_mode13_dma(int irq, void *d)
 {
   comedi_device *dev = d;
   comedi_subdevice *s = dev->subdevices + 0;
_at__at_ -417,7 +417,7 _at__at_
     INT procedure
 */
 static irqreturn_t
-interrupt_pcl816 (int irq, void *d, struct pt_regs *regs)
+interrupt_pcl816 (int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 	DPRINTK("<I>");
_at__at_ -431,10 +431,10 _at__at_
 	switch (devpriv->int816_mode)  {
     case INT_TYPE_AI1_DMA:
     case INT_TYPE_AI3_DMA:
-		return interrupt_pcl816_ai_mode13_dma (irq, d, regs);
+		return interrupt_pcl816_ai_mode13_dma (irq, d);
     case INT_TYPE_AI1_INT:
     case INT_TYPE_AI3_INT:
-		return interrupt_pcl816_ai_mode13_int (irq, d, regs);
+		return interrupt_pcl816_ai_mode13_int (irq, d);
     }
 
 
diff -urNad comedi-0.7.73~/comedi/drivers/pcl818.c comedi-0.7.73/comedi/drivers/pcl818.c
--- comedi-0.7.73~/comedi/drivers/pcl818.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/pcl818.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -499,7 +499,7 _at__at_
    analog input interrupt mode 1 & 3, 818 cards
    one sample per interrupt version
 */
-static irqreturn_t interrupt_pcl818_ai_mode13_int(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pcl818_ai_mode13_int(int irq, void *d)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->subdevices + 0;
_at__at_ -549,7 +549,7 _at__at_
 ==============================================================================
    analog input dma mode 1 & 3, 818 cards
 */
-static irqreturn_t interrupt_pcl818_ai_mode13_dma(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pcl818_ai_mode13_dma(int irq, void *d)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->subdevices + 0;
_at__at_ -613,7 +613,7 _at__at_
 ==============================================================================
    analog input dma mode 1 & 3 over RTC, 818 cards
 */
-static irqreturn_t interrupt_pcl818_ai_mode13_dma_rtc(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pcl818_ai_mode13_dma_rtc(int irq, void *d)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->subdevices + 0;
_at__at_ -701,7 +701,7 _at__at_
 ==============================================================================
    analog input interrupt mode 1 & 3, 818HD/HG cards
 */
-static irqreturn_t interrupt_pcl818_ai_mode13_fifo(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pcl818_ai_mode13_fifo(int irq, void *d)
 {
 	comedi_device *dev = d;
 	comedi_subdevice *s = dev->subdevices + 0;
_at__at_ -763,7 +763,7 _at__at_
 ==============================================================================
     INT procedure
 */
-static irqreturn_t interrupt_pcl818(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pcl818(int irq, void *d PT_REGS_ARG)
 {
 	comedi_device *dev = d;
 
_at__at_ -778,17 +778,17 _at__at_
 	switch (devpriv->ai_mode) {
 	case INT_TYPE_AI1_DMA:
 	case INT_TYPE_AI3_DMA:
-		return interrupt_pcl818_ai_mode13_dma(irq, d, regs);
+		return interrupt_pcl818_ai_mode13_dma(irq, d);
 	case INT_TYPE_AI1_INT:
 	case INT_TYPE_AI3_INT:
-		return interrupt_pcl818_ai_mode13_int(irq, d, regs);
+		return interrupt_pcl818_ai_mode13_int(irq, d);
 	case INT_TYPE_AI1_FIFO:
 	case INT_TYPE_AI3_FIFO:
-		return interrupt_pcl818_ai_mode13_fifo(irq, d, regs);
+		return interrupt_pcl818_ai_mode13_fifo(irq, d);
 #ifdef PCL818_MODE13_AO
 	case INT_TYPE_AO1_INT:
 	case INT_TYPE_AO3_INT:
-		return interrupt_pcl818_ao_mode13_int(irq, d, regs);
+		return interrupt_pcl818_ao_mode13_int(irq, d);
 #endif
 	default:
 		break;
diff -urNad comedi-0.7.73~/comedi/drivers/pcmda12.c comedi-0.7.73/comedi/drivers/pcmda12.c
--- comedi-0.7.73~/comedi/drivers/pcmda12.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/pcmda12.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -22,7 +22,7 _at__at_
 /*
 Driver: pcmda12.o
 Description: A driver for the Winsystems PCM-D/A-12
-Devices: (Winsystems) PCM-D/A-12 [pcmda12]
+Devices: [Winsystems] PCM-D/A-12 (pcmda12)
 Author: Calin Culianu <calin_at_ajvar.org>
 Updated: Fri, 13 Jan 2006 12:01:01 -0500
 Status: works
diff -urNad comedi-0.7.73~/comedi/drivers/pcmuio.c comedi-0.7.73/comedi/drivers/pcmuio.c
--- comedi-0.7.73~/comedi/drivers/pcmuio.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/pcmuio.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -22,7 +22,7 _at__at_
 /*
 Driver: pcmuio.o
 Description: A driver for the PCM-UIO48A and PCM-UIO96A boards from Winsystems.
-Devices: (Winsystems) PCM-UIO48A [pcmuio48], (Winsystems) PCM-UIO96A [pcmuio96]
+Devices: [Winsystems] PCM-UIO48A (pcmuio48), PCM-UIO96A (pcmuio96)
 Author: Calin Culianu <calin_at_ajvar.org>
 Updated: Fri, 13 Jan 2006 12:01:01 -0500
 Status: works
_at__at_ -265,7 +265,7 _at__at_
 static int pcmuio_dio_insn_config(comedi_device *dev,comedi_subdevice *s,
                                   comedi_insn *insn,lsampl_t *data);
 
-static irqreturn_t interrupt_pcmuio(int irq, void *d, struct pt_regs *regs);
+static irqreturn_t interrupt_pcmuio(int irq, void *d PT_REGS_ARG);
 static void pcmuio_stop_intr(comedi_device *, comedi_subdevice *);
 static int  pcmuio_cancel(comedi_device *dev, comedi_subdevice *s);
 static int pcmuio_cmd(comedi_device *dev, comedi_subdevice *s);
_at__at_ -413,7 +413,7 _at__at_
     init_asics(dev); /* clear out all the registers, basically */
 
     for (asic = 0; irq[0] && asic < MAX_ASICS; ++asic) {
-      if (irq[asic] && comedi_request_irq(irq[asic], interrupt_pcmuio, SA_SHIRQ, thisboard->name, dev)) {
+      if (irq[asic] && comedi_request_irq(irq[asic], interrupt_pcmuio, IRQF_SHARED, thisboard->name, dev)) {
         int i;
         /* unroll the allocated irqs.. */
         for (i = asic-1; i >= 0; --i) {
_at__at_ -681,7 +681,7 _at__at_
   (void)unlock_port(dev, asic, port); /* not reached, suppress compiler warnings*/
 }
 
-static irqreturn_t interrupt_pcmuio(int irq, void *d, struct pt_regs *regs)
+static irqreturn_t interrupt_pcmuio(int irq, void *d PT_REGS_ARG)
 {
   int asic, got1 = 0;
   comedi_device *dev = (comedi_device *)d;
diff -urNad comedi-0.7.73~/comedi/drivers/quatech_daqp_cs.c comedi-0.7.73/comedi/drivers/quatech_daqp_cs.c
--- comedi-0.7.73~/comedi/drivers/quatech_daqp_cs.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/quatech_daqp_cs.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -311,7 +311,7 _at__at_
  * which run pretty quick.
  */
 
-static void daqp_interrupt(int irq, void * dev_id, struct pt_regs *regs)
+static void daqp_interrupt(int irq, void * dev_id PT_REGS_ARG)
 {
 	local_info_t *local = (local_info_t *)dev_id;
 	comedi_device *dev = local->dev;
diff -urNad comedi-0.7.73~/comedi/drivers/rtd520.c comedi-0.7.73/comedi/drivers/rtd520.c
--- comedi-0.7.73~/comedi/drivers/rtd520.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/rtd520.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -734,7 +734,7 _at__at_
 static int rtd_ai_cancel ( comedi_device *dev, comedi_subdevice *s);
 //static int rtd_ai_poll (comedi_device *dev,comedi_subdevice *s);
 static int rtd_ns_to_timer (unsigned int *ns, int roundMode);
-static irqreturn_t rtd_interrupt ( int irq, void *d, struct pt_regs *regs);
+static irqreturn_t rtd_interrupt ( int irq, void *d PT_REGS_ARG);
 
 
 /*
_at__at_ -924,7 +924,7 _at__at_
 
 	/* check if our interrupt is available and get it */
 	if((ret=comedi_request_irq (devpriv->pci_dev->irq, rtd_interrupt,
-		SA_SHIRQ, "rtd520", dev)) < 0) {
+		IRQF_SHARED, "rtd520", dev)) < 0) {
 		printk("Could not get interrupt! (%u)\n", devpriv->pci_dev->irq);
 		return ret;
 	}
_at__at_ -1501,8 +1501,8 _at__at_
 */
 static irqreturn_t rtd_interrupt (
     int irq,				/* interrupt number (ignored) */
-    void *d,				/* our data */
-    struct pt_regs *regs)		/* cpu context (ignored) */
+    void *d				/* our data */
+    PT_REGS_ARG)		/* cpu context (ignored) */
 {
 	comedi_device *dev = d;		/* must be called "dev" for devpriv */
 	u16 status;
diff -urNad comedi-0.7.73~/comedi/drivers/rti800.c comedi-0.7.73/comedi/drivers/rti800.c
--- comedi-0.7.73~/comedi/drivers/rti800.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/rti800.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -139,7 +139,7 _at__at_
 };
 COMEDI_INITCLEANUP(driver_rti800);
 
-static irqreturn_t rti800_interrupt(int irq, void *dev, struct pt_regs *regs);
+static irqreturn_t rti800_interrupt(int irq, void *dev PT_REGS_ARG);
 
 typedef struct {
 	enum {
_at__at_ -159,19 +159,20 _at__at_
 	} dac0_coding, dac1_coding;
 	comedi_lrange * ao_range_type_list[2];
 	lsampl_t ao_readback[2];
+	int muxgain_bits;
 } rti800_private;
 
 #define devpriv ((rti800_private *)dev->private)
 
 #define RTI800_TIMEOUT 100
 
-static irqreturn_t rti800_interrupt(int irq, void *dev, struct pt_regs *regs)
+static irqreturn_t rti800_interrupt(int irq, void *dev PT_REGS_ARG)
 {
 	return IRQ_HANDLED;
 }
 
 // settling delay times in usec for different gains
-//static int gaindelay[]={10,20,40,80};
+static int gaindelay[]={10,20,40,80};
 
 static int rti800_ai_insn_read(comedi_device *dev,comedi_subdevice *s,
 	comedi_insn *insn,lsampl_t *data)
_at__at_ -179,19 +180,26 _at__at_
 	int i,t;
 	int status;
 	int chan = CR_CHAN(insn->chanspec);
-	int gain = CR_RANGE(insn->chanspec);
+	unsigned gain = CR_RANGE(insn->chanspec);
+	unsigned muxgain_bits;
 
 	inb(dev->iobase + RTI800_ADCHI);
 	outb(0,dev->iobase+RTI800_CLRFLAGS);
 
-	outb(chan | (gain << 5), dev->iobase + RTI800_MUXGAIN);
+	muxgain_bits = chan | (gain << 5);
+	if(muxgain_bits |= devpriv->muxgain_bits)
+	{
+		devpriv->muxgain_bits = muxgain_bits;
+		outb(devpriv->muxgain_bits, dev->iobase + RTI800_MUXGAIN);
 
-	/* without a delay here, the RTI_OVERRUN bit
-	 * gets set, and you will have an error.  Not
-	 * sure if this is a long enough delay though.
-	 * comedi_udelay( gaindelay[ gain ] ) definitely
-	 * works */
-	comedi_udelay(1);
+		/* without a delay here, the RTI_OVERRUN bit
+		 * gets set, and you will have an error. */
+		if(insn->n > 0)
+		{
+			BUG_ON(gain >= sizeof(gaindelay) / sizeof(gaindelay[0]));
+			comedi_udelay(gaindelay[gain]);
+		}
+	}
 
 	for(i=0;i<insn->n;i++){
 		outb(0, dev->iobase + RTI800_CONVERT);
_at__at_ -347,6 +355,7 _at__at_
 	devpriv->dac0_coding = it->options[6];
 	devpriv->dac1_range = it->options[7];
 	devpriv->dac1_coding = it->options[8];
+	devpriv->muxgain_bits = -1;
 
 	s=dev->subdevices+0;
 	/* ai subdevice */
diff -urNad comedi-0.7.73~/comedi/drivers/s626.c comedi-0.7.73/comedi/drivers/s626.c
--- comedi-0.7.73~/comedi/drivers/s626.c	2006-08-07 19:33:25.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/s626.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -243,7 +243,7 _at__at_
 static int s626_ai_load_polllist(uint8_t *ppl, comedi_cmd *cmd);
 static int s626_ai_inttrig(comedi_device *dev,comedi_subdevice *s,
 			   unsigned int trignum);
-static irqreturn_t s626_irq_handler(int irq,void *d,struct pt_regs * regs);
+static irqreturn_t s626_irq_handler(int irq,void *d PT_REGS_ARG);
 static lsampl_t s626_ai_reg_to_uint(int data);
 /* static lsampl_t s626_uint_to_reg(comedi_subdevice *s, int data); */
 
_at__at_ -566,7 +566,7 _at__at_
   if(dev->irq==0){
     printk(" unknown irq (bad)\n");
   }else{
-    if( (ret=comedi_request_irq(dev->irq,s626_irq_handler,SA_SHIRQ,"s626",dev))<0 ){
+    if( (ret=comedi_request_irq(dev->irq,s626_irq_handler,IRQF_SHARED,"s626",dev))<0 ){
       printk(" irq not available\n");
       dev->irq=0;
     }
_at__at_ -914,7 +914,7 _at__at_
 /*   return 0; */
 /* } */
 
-static irqreturn_t s626_irq_handler(int irq,void *d,struct pt_regs * regs)
+static irqreturn_t s626_irq_handler(int irq,void *d PT_REGS_ARG)
 {
   comedi_device *dev=d;
   comedi_subdevice *s;
diff -urNad comedi-0.7.73~/comedi/drivers/usbdux.c comedi-0.7.73/comedi/drivers/usbdux.c
--- comedi-0.7.73~/comedi/drivers/usbdux.c	2006-06-11 20:52:52.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/usbdux.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -390,7 +390,7 _at__at_
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
 static void usbduxsub_ai_IsocIrq(struct urb *urb)
 #else
-static void usbduxsub_ai_IsocIrq(struct urb *urb, struct pt_regs *regs)
+static void usbduxsub_ai_IsocIrq(struct urb *urb PT_REGS_ARG)
 #endif 
 {
 	int i,err,n;
_at__at_ -654,7 +654,7 _at__at_
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
 static void usbduxsub_ao_IsocIrq(struct urb *urb) {
 #else
-static void usbduxsub_ao_IsocIrq(struct urb *urb, struct pt_regs *regs) {
+static void usbduxsub_ao_IsocIrq(struct urb *urb PT_REGS_ARG) {
 #endif
 	int i,ret;
 	int8_t* datap;
diff -urNad comedi-0.7.73~/comedi/drivers/usbduxfast.c comedi-0.7.73/comedi/drivers/usbduxfast.c
--- comedi-0.7.73~/comedi/drivers/usbduxfast.c	2006-06-11 20:52:52.000000000 +0200
+++ comedi-0.7.73/comedi/drivers/usbduxfast.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -322,7 +322,7 _at__at_
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
 static void usbduxfastsub_ai_Irq(struct urb *urb)
 #else
-static void usbduxfastsub_ai_Irq(struct urb *urb, struct pt_regs *regs)
+static void usbduxfastsub_ai_Irq(struct urb *urb PT_REGS_ARG)
 #endif
 {
 	int n,err;
_at__at_ -672,7 +672,7 _at__at_
 	/* step 1: make sure trigger sources are trivially valid */
 
 	tmp = cmd->start_src;
-	cmd->start_src &= TRIG_NOW | TRIG_EXT;
+	cmd->start_src &= TRIG_NOW;
 	if(!cmd->start_src || tmp != cmd->start_src) err++;
 
 	tmp = cmd->scan_begin_src;
_at__at_ -715,7 +715,7 _at__at_
 
 	/* step 3: make sure arguments are trivially compatible */
 
-	if(cmd->start_arg == TRIG_NOW && cmd->start_arg != 0)
+	if(cmd->start_src == TRIG_NOW && cmd->start_arg != 0)
 	{
 		cmd->start_arg = 0;
 		err++;
diff -urNad comedi-0.7.73~/comedi/kcomedilib/ksyms.c comedi-0.7.73/comedi/kcomedilib/ksyms.c
--- comedi-0.7.73~/comedi/kcomedilib/ksyms.c	2003-08-12 01:51:45.000000000 +0200
+++ comedi-0.7.73/comedi/kcomedilib/ksyms.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -131,6 +131,7 _at__at_
 
 /* buffer configuration */
 EXPORT_SYMBOL(comedi_mark_buffer_read);
+EXPORT_SYMBOL(comedi_mark_buffer_written);
 
 //EXPORT_SYMBOL(comedi_get_range);
 EXPORT_SYMBOL(comedi_get_len_chanlist);
diff -urNad comedi-0.7.73~/comedi/rt.c comedi-0.7.73/comedi/rt.c
--- comedi-0.7.73~/comedi/rt.c	2005-06-16 01:24:19.000000000 +0200
+++ comedi-0.7.73/comedi/rt.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -54,7 +54,7 _at__at_
 struct comedi_irq_struct {
 	int rt;
 	int irq;
-	irqreturn_t (*handler)(int irq,void *dev_id,struct pt_regs *regs);
+	irqreturn_t (*handler)(int irq,void *dev_id PT_REGS_ARG);
 	unsigned long flags;
 	const char *device;
 	comedi_device *dev_id;
_at__at_ -65,7 +65,8 _at__at_
 
 static struct comedi_irq_struct *comedi_irqs[NR_IRQS];
 
-int comedi_request_irq(unsigned irq, irqreturn_t (*handler)(int, void *,struct pt_regs *),
+int comedi_request_irq(unsigned irq, irqreturn_t (*handler)(int, void *
+			PT_REGS_ARG),
 		unsigned long flags,const char *device,comedi_device *dev_id)
 {
 	struct comedi_irq_struct *it;
_at__at_ -73,12 +74,12 _at__at_
 	/* null shared interrupt flag, since rt interrupt handlers do not
 	* support it, and this version of comedi_request_irq() is only
 	* called for kernels with rt support */
-	unsigned long unshared_flags = flags & ~SA_SHIRQ;
+	unsigned long unshared_flags = flags & ~IRQF_SHARED;
 	
 	ret = request_irq(irq, handler, unshared_flags, device, dev_id);
 	if(ret<0){
 		// we failed, so fall back on allowing shared interrupt (which we won't ever make RT)
-		if(flags & SA_SHIRQ)
+		if(flags & IRQF_SHARED)
 		{
 			rt_printk("comedi: cannot get unshared interrupt, will not use RT interrupts.\n");
 			ret=request_irq(irq, handler, flags, device, dev_id);
_at__at_ -194,7 +195,7 _at__at_
 		rt_printk("comedi: null irq struct?\n");
 		return;
 	}
-	it->handler(irq, it->dev_id, NULL);
+	it->handler(irq, it->dev_id PT_REGS_NULL);
 	rt_enable_irq(irq);	//needed by rtai-adeos, seems like it shouldn't hurt earlier versions
 }
 
_at__at_ -312,7 +313,7 _at__at_
 {
 	struct comedi_irq_struct *it = cookie;
 
-	it->handler(irq, it->dev_id, NULL);
+	it->handler(irq, it->dev_id PT_REGS_NULL);
 	rthal_irq_enable(irq);
 }
 
_at__at_ -345,13 +346,13 _at__at_
 /* RTLinux section */
 #ifdef CONFIG_COMEDI_RTL
 
-static unsigned int handle_rtl_irq(unsigned int irq,struct pt_regs *regs)
+static unsigned int handle_rtl_irq(unsigned int irq PT_REGS_ARG)
 {
 	struct comedi_irq_struct *it;
 
 	it = comedi_irqs[irq];
 	if( it == NULL ) return 0;
-	it->handler( irq, it->dev_id, regs );
+	it->handler( irq, it->dev_id PT_REGS_NULL );
 	rtl_hard_enable_irq(irq);
 	return 0;
 }
diff -urNad comedi-0.7.73~/comedi/rt_pend_tq.c comedi-0.7.73/comedi/rt_pend_tq.c
--- comedi-0.7.73~/comedi/rt_pend_tq.c	2005-06-16 01:24:19.000000000 +0200
+++ comedi-0.7.73/comedi/rt_pend_tq.c	2007-07-25 11:45:27.000000000 +0200
_at__at_ -69,7 +69,7 _at__at_
 #elif defined(CONFIG_COMEDI_FUSION)
 void rt_pend_irq_handler(void * cookie)
 #elif defined(CONFIG_COMEDI_RTL)
-void rt_pend_irq_handler(int irq, void *dev, struct pt_regs * regs)
+void rt_pend_irq_handler(int irq, void *dev PT_REGS_ARG)
 #endif
 {
 	while(rt_pend_head!=rt_pend_tail) {
diff -urNad comedi-0.7.73~/include/linux/comedi_rt.h comedi-0.7.73/include/linux/comedi_rt.h
--- comedi-0.7.73~/include/linux/comedi_rt.h	2007-07-25 11:45:07.000000000 +0200
+++ comedi-0.7.73/include/linux/comedi_rt.h	2007-07-25 11:45:51.000000000 +0200
_at__at_ -57,8 +57,8 _at__at_
 #define rt_printk printk
 #endif
 
-int comedi_request_irq(unsigned int irq,irqreturn_t (*handler)(int,void *,
-	struct pt_regs *regs),unsigned long flags,const char *device,
+int comedi_request_irq(unsigned int irq,irqreturn_t (*handler)(int,void * PT_REGS_ARG),
+	unsigned long flags,const char *device,
 	comedi_device *dev_id);
 void comedi_free_irq(unsigned int irq,comedi_device *dev_id);
 void comedi_rt_init(void);
diff -urNad comedi-0.7.73~/include/linux/comedilib.h comedi-0.7.73/include/linux/comedilib.h
--- comedi-0.7.73~/include/linux/comedilib.h	2003-03-27 18:02:43.000000000 +0100
+++ comedi-0.7.73/include/linux/comedilib.h	2007-07-25 11:45:27.000000000 +0200
_at__at_ -117,6 +117,8 _at__at_
 int comedi_get_buffer_size(comedi_t *dev,unsigned int subdev);
 int comedi_mark_buffer_read( comedi_t *dev, unsigned int subdevice,
 	unsigned int num_bytes );
+int comedi_mark_buffer_written( comedi_t *dev, unsigned int subdevice,
+	unsigned int num_bytes );
 int comedi_get_buffer_contents( comedi_t *dev, unsigned int subdevice );
 int comedi_get_buffer_offset( comedi_t *dev, unsigned int subdevice );
 
diff -urNad comedi-0.7.73~/include/linux/config.h comedi-0.7.73/include/linux/config.h
--- comedi-0.7.73~/include/linux/config.h	2005-10-07 07:04:04.000000000 +0200
+++ comedi-0.7.73/include/linux/config.h	2007-07-25 11:45:27.000000000 +0200
_at__at_ -1,8 +1,12 _at__at_
 #ifndef __MULTI_CONFIG_H_
 #define __MULTI_CONFIG_H_
 
+#include <linux/version.h>
+
 #include <config.h>
-#include_next <linux/config.h>
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19)
+#include_next <linux/config.h>
 #endif
 
+#endif
diff -urNad comedi-0.7.73~/include/linux/device.h comedi-0.7.73/include/linux/device.h
--- comedi-0.7.73~/include/linux/device.h	2006-01-15 21:34:09.000000000 +0100
+++ comedi-0.7.73/include/linux/device.h	2007-07-25 11:45:27.000000000 +0200
_at__at_ -27,7 +27,7 _at__at_
 static inline void class_destroy(struct class *cs)
 {};
 
-static inline struct class_device *CLASS_DEVICE_CREATE(struct class *cls,
+static inline struct class_device *COMEDI_CLASS_DEVICE_CREATE(struct class *cls,
 	struct class_device *parent, dev_t devt, struct device *device,
 	char *fmt, ...)
 {
_at__at_ -47,7 +47,7 _at__at_
 	(struct class *)class_simple_create(owner, name)
 #define class_destroy(cs) \
 	class_simple_destroy((struct class_simple *)(cs))
-#define CLASS_DEVICE_CREATE(cs, parent, dev, device, fmt...) \
+#define COMEDI_CLASS_DEVICE_CREATE(cs, parent, dev, device, fmt...) \
 	class_simple_device_add((struct class_simple *)(cs), \
 		dev, device, fmt)
 #define class_device_destroy(cs, dev) \
_at__at_ -57,12 +57,12 _at__at_
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
 
-#define CLASS_DEVICE_CREATE(cs, parent, dev, device, fmt...) \
+#define COMEDI_CLASS_DEVICE_CREATE(cs, parent, dev, device, fmt...) \
 	class_device_create(cs, dev, device, fmt)
 
 #else
 
-#define CLASS_DEVICE_CREATE(cs, parent, dev, device, fmt...) \
+#define COMEDI_CLASS_DEVICE_CREATE(cs, parent, dev, device, fmt...) \
 	class_device_create(cs, parent, dev, device, fmt)
 
 #endif	// LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
diff -urNad comedi-0.7.73~/include/linux/interrupt.h comedi-0.7.73/include/linux/interrupt.h
--- comedi-0.7.73~/include/linux/interrupt.h	2003-12-19 23:47:17.000000000 +0100
+++ comedi-0.7.73/include/linux/interrupt.h	2007-07-25 11:45:27.000000000 +0200
_at__at_ -19,16 +19,50 _at__at_
 #ifndef __COMPAT_LINUX_INTERRUPT_H_
 #define __COMPAT_LINUX_INTERRUPT_H_
 
+#include_next <linux/interrupt.h>
+
 #include <linux/version.h>
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 23)
+#ifndef IRQ_NONE
 typedef void irqreturn_t;
 #define IRQ_NONE
 #define IRQ_HANDLED
 #define IRQ_RETVAL(x) (void)(x)
 #endif
 
-#include_next <linux/interrupt.h>
+#ifndef IRQF_DISABLED
+#define IRQF_DISABLED           SA_INTERRUPT
+#define IRQF_SAMPLE_RANDOM      SA_SAMPLE_RANDOM
+#define IRQF_SHARED             SA_SHIRQ
+#define IRQF_PROBE_SHARED       SA_PROBEIRQ
+#define IRQF_PERCPU             SA_PERCPU
+#ifdef SA_TRIGGER_MASK
+#define IRQF_TRIGGER_NONE       0
+#define IRQF_TRIGGER_LOW        SA_TRIGGER_LOW
+#define IRQF_TRIGGER_HIGH       SA_TRIGGER_HIGH
+#define IRQF_TRIGGER_FALLING    SA_TRIGGER_FALLING
+#define IRQF_TRIGGER_RISING     SA_TRIGGER_RISING
+#define IRQF_TRIGGER_MASK       SA_TRIGGER_MASK
+#else
+#define IRQF_TRIGGER_NONE       0
+#define IRQF_TRIGGER_LOW        0
+#define IRQF_TRIGGER_HIGH       0
+#define IRQF_TRIGGER_FALLING    0
+#define IRQF_TRIGGER_RISING     0
+#define IRQF_TRIGGER_MASK       0
+#endif
+#endif
+
+/* if interrupt handler prototype has pt_regs* parameter */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19)
+#define PT_REGS_ARG , struct pt_regs *regs
+#define PT_REGS_CALL , regs
+#define PT_REGS_NULL , NULL
+#else
+#define PT_REGS_ARG
+#define PT_REGS_CALL
+#define PT_REGS_NULL
+#endif
 
 #endif
 
diff -urNad comedi-0.7.73~/include/linux/stddef.h comedi-0.7.73/include/linux/stddef.h
--- comedi-0.7.73~/include/linux/stddef.h	1970-01-01 01:00:00.000000000 +0100
+++ comedi-0.7.73/include/linux/stddef.h	2007-07-25 11:45:27.000000000 +0200
_at__at_ -0,0 +1,34 _at__at_
+/*
+    linux/stddef.h compatibility header
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __COMPAT_LINUX_STDDEF_H_
+#define __COMPAT_LINUX_STDDEF_H_
+
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19)
+typedef enum
+{
+  false,
+  true
+} bool;
+#endif
+
+#include_next <linux/stddef.h>
+
+#endif

Received on 2007-07-30Z11:05:13