ioctl(tiocsserial) for devices which need ioremapping

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hi,

I'm using the linux serial 8250 driver for an IXP425 based ARM
device. The two on-chip serial ports work with no problem.

However, depending on the configuration of my system I have
some more 8250 based serial ports, which I want to register to
the driver after the system has booted (after I have detected
how many ports are available).
For this I have written a tool to configure the serial port base
address and interrupt with the TIOCSSERIAL ioctl.

Unfortunately, there is a problem with this: The new serial ports
require that the memory mapped address must be remapped. Although
there is a member in the serial_struct to specify this, the driver
does not pay attention to the UPF_IOREMAP bit in serial_struct.flags.

The same appears to the UPF_SHARE_IRQ flag.

Is there any way to handle this (to attach my serial port and have
the address relocation take place)?

To solve this problem, I have created the following patch. It checks
for the UPF_IOREMAP and UPF_SHARE_IRQ flags when it detects that
either port or interrupt are changed. Is it possible to integrate
this into the kernel?

-----%<------------
diff -r -N -u linux-2.6.18.1/drivers/serial/serial_core.c
linux-2.6.18.1-xscale-fordiff/drivers/serial/serial_core.c
--- linux-2.6.18.1/drivers/serial/serial_core.c 2006-10-14 05:34:03.000000000 +0200
+++ linux-2.6.18.1-xscale-fordiff/drivers/serial/serial_core.c  2006-11-02 11:52:46.000000000 +0100
@@ -706,6 +706,22 @@
                goto check_and_exit;
        }

+       /* FIXME: as@xxxxxxx
+        *
+        * If we change port and IOREMAP is requested, then we push it in.
+        * If we change irq  and SHARE_IRQ is requested, then we push it in.
+        */
+       if( change_port ){
+           if( (new_serial.flags & UPF_IOREMAP) && !(port->flags & UPF_IOREMAP) ){
+               port->flags |= UPF_IOREMAP;
+           }
+       }
+       if( change_irq ){
+           if( (new_serial.flags & UPF_SHARE_IRQ) && !(port->flags & UPF_SHARE_IRQ) ){
+               port->flags |= UPF_SHARE_IRQ;
+           }
+       }
+
        /*
         * Ask the low level driver to verify the settings.
         */
---------------------

--
----------------------
Stefan Althöfer (stefan.althoefer@xxxxxxx)
Janz Automationssysteme AG
  - Automation Intelligence -
Member of the Janz company group
Im Doerener Feld 8
33100 Paderborn - Germany


-
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux