[parisc-linux] Patch for dino serial port on B-class workstations

=?iso-8859-1?Q?Cl=E9ment_MOYROUD?= moyroudc@esiee.fr
Sun, 3 Jun 2001 21:20:50 +0200


> Clement MOYROUD wrote:
> > Hi all !
> >
> > I have made a patch for dino. It's a bit ugly, but before going on with
> > a rewrite of the dino driver, I would like to have some feedback.
>
> Clement! This is great!
>
> Could you explain why you think yuo need to rewrite the dino driver?
> This is basically how I expected it to work.
>

I think (as well as the other members of the ESIEE team) that the dino
driver has not been written in order to "comply" with some sort of a GSC
driver standard - i.e. it could make use of the register_busdevice instead
of requiring it's own irq region (e.g. lasi). I have started to do this, but
it would require some modifications of the busdevice structure to add some
support for the pci-specific part of dino. With this modification of the
busdevice struct (and some other functions), I would be much more clean.....
But if you think it's clear enough, I've got other things to do :)

> >  So
> > feel free to apply it on your kernel tree and give me some remarks about
it.
>
> I've neither applied nor tested it.
>
> > diff -Nru linux.old/drivers/gsc/dino.c linux/drivers/gsc/dino.c
> > --- linux.old/drivers/gsc/dino.c Thu May 31 16:56:20 2001
> > +++ linux/drivers/gsc/dino.c Thu May 31 16:55:07 2001
> > @@ -66,6 +66,7 @@
> >  #include <asm/irq.h> /* for "gsc" irq functions */
> >  #include <asm/gsc.h>
> >
> > +#include "busdevice.h"
> >
> >  #undef DINO_DEBUG
> >
> > @@ -542,6 +543,14 @@
> >  }
> >  }
> >
> > +/* Here is where the dino's serial port gets its irq on B-class
workstations
> >    */
> > +
> > +static int
> > +dino_find_irq(struct busdevice *dino_dev, struct hp_device *dev)
> > +{
>
> Some upper portion of the address bits are already validated
> but the code in bus_device.c.  Need to valid some of the lower
> address bits here.
>
> Want to make sure it's really the serial device that we want
> to talk to and not the PS/2 port or "fire extinguisher" (only
> used on 743 or Hitachi box, I forgot).
>
>

As I wrote, it's something that works on a b132/180, and I didn't check in
the hardware database to see if it is in use in other workstations. But I
know I'll have to make some tests to find which irq return....

> > + return 10;
> > +}
> > +
> >  static void __init
> >  dino_bios_init(void)
> >  {
> > @@ -804,18 +813,33 @@
> >  }
> >
> >  static int __init
> > -dino_common_init(struct dino_device *dino_dev)
> > +dino_common_init(struct hp_device *d, struct dino_device *dino_dev)
> >  {
> >  int status;
> >  u32 eim;
> >  struct gsc_irq gsc_irq;
> >  struct resource *res;
> >
> > + struct busdevice *dino;
>
> Please call this dino_busdev or something like that to differentiate
> it from the other "dino" data structures.
>

I agree it might not be that clear. In fact, my future plans are to use only
one struct (bye-bye  struct dino_device !), and I didn't take care of the
clarity of this....

> > + int ret;
> > +
> >  pcibios_register_hba((struct pci_hba_data *) dino_dev);
> >
> >  pci_bios = &dino_bios_ops;   /* used by pci_scan_bus() */
> >  pci_port = &dino_port_ops;
> >
> > +
> > +        /* Needed for the serial port to work. Quite ugly for now */
> > +
> > + dino = kmalloc(sizeof(struct busdevice), GFP_KERNEL);
> > + if(!dino)
> > + return -ENOMEM;
> > +
> > + dino->name = "Dino";
> > + dino->hpa = d->hpa;
> > + dino->find_irq = dino_find_irq;
>
> I don't think this in an ugly hack.
> Overall, this is how I expected it to work.
> Might not even need to fill in the rest of the functions
> in the bus_device jump table.
>

As I wrote before, it looks ugly to me because I think the driver would look
much better if dino.c was rewritten. But again, if you don't feel like it
is, I won't complain !

> > +
> > +
> >  /*
> >  ** Note: SMP systems can make use of IRR1/IAR1 registers
> >  **   But it won't buy much performance except in very
>
> offhand, the rest looks ok.
>

ok

> grant
>

So, are you happy with the actual look of the driver or do you think it is
worth rewriting it ?

Clement MOYROUD
Puffin ESIEE Team