Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * Parallel-port resource manager code.
0003  *
0004  * Authors: David Campbell <campbell@tirian.che.curtin.edu.au>
0005  *          Tim Waugh <tim@cyberelk.demon.co.uk>
0006  *          Jose Renau <renau@acm.org>
0007  *          Philip Blundell <philb@gnu.org>
0008  *      Andrea Arcangeli
0009  *
0010  * based on work by Grant Guenther <grant@torque.net>
0011  *          and Philip Blundell
0012  *
0013  * Any part of this program may be used in documents licensed under
0014  * the GNU Free Documentation License, Version 1.1 or any later version
0015  * published by the Free Software Foundation.
0016  */
0017 
0018 #undef PARPORT_DEBUG_SHARING        /* undef for production */
0019 
0020 #include <linux/module.h>
0021 #include <linux/string.h>
0022 #include <linux/threads.h>
0023 #include <linux/parport.h>
0024 #include <linux/delay.h>
0025 #include <linux/errno.h>
0026 #include <linux/interrupt.h>
0027 #include <linux/ioport.h>
0028 #include <linux/kernel.h>
0029 #include <linux/slab.h>
0030 #include <linux/sched/signal.h>
0031 #include <linux/kmod.h>
0032 #include <linux/device.h>
0033 
0034 #include <linux/spinlock.h>
0035 #include <linux/mutex.h>
0036 #include <asm/irq.h>
0037 
0038 #undef PARPORT_PARANOID
0039 
0040 #define PARPORT_DEFAULT_TIMESLICE   (HZ/5)
0041 
0042 unsigned long parport_default_timeslice = PARPORT_DEFAULT_TIMESLICE;
0043 int parport_default_spintime =  DEFAULT_SPIN_TIME;
0044 
0045 static LIST_HEAD(portlist);
0046 static DEFINE_SPINLOCK(parportlist_lock);
0047 
0048 /* list of all allocated ports, sorted by ->number */
0049 static LIST_HEAD(all_ports);
0050 static DEFINE_SPINLOCK(full_list_lock);
0051 
0052 static LIST_HEAD(drivers);
0053 
0054 static DEFINE_MUTEX(registration_lock);
0055 
0056 /* What you can do to a port that's gone away.. */
0057 static void dead_write_lines(struct parport *p, unsigned char b){}
0058 static unsigned char dead_read_lines(struct parport *p) { return 0; }
0059 static unsigned char dead_frob_lines(struct parport *p, unsigned char b,
0060                  unsigned char c) { return 0; }
0061 static void dead_onearg(struct parport *p){}
0062 static void dead_initstate(struct pardevice *d, struct parport_state *s) { }
0063 static void dead_state(struct parport *p, struct parport_state *s) { }
0064 static size_t dead_write(struct parport *p, const void *b, size_t l, int f)
0065 { return 0; }
0066 static size_t dead_read(struct parport *p, void *b, size_t l, int f)
0067 { return 0; }
0068 static struct parport_operations dead_ops = {
0069     .write_data = dead_write_lines, /* data */
0070     .read_data  = dead_read_lines,
0071 
0072     .write_control  = dead_write_lines, /* control */
0073     .read_control   = dead_read_lines,
0074     .frob_control   = dead_frob_lines,
0075 
0076     .read_status    = dead_read_lines,  /* status */
0077 
0078     .enable_irq = dead_onearg,      /* enable_irq */
0079     .disable_irq    = dead_onearg,      /* disable_irq */
0080 
0081     .data_forward   = dead_onearg,      /* data_forward */
0082     .data_reverse   = dead_onearg,      /* data_reverse */
0083 
0084     .init_state = dead_initstate,   /* init_state */
0085     .save_state = dead_state,
0086     .restore_state  = dead_state,
0087 
0088     .epp_write_data = dead_write,       /* epp */
0089     .epp_read_data  = dead_read,
0090     .epp_write_addr = dead_write,
0091     .epp_read_addr  = dead_read,
0092 
0093     .ecp_write_data = dead_write,       /* ecp */
0094     .ecp_read_data  = dead_read,
0095     .ecp_write_addr = dead_write,
0096 
0097     .compat_write_data  = dead_write,   /* compat */
0098     .nibble_read_data   = dead_read,    /* nibble */
0099     .byte_read_data     = dead_read,    /* byte */
0100 
0101     .owner      = NULL,
0102 };
0103 
0104 static struct device_type parport_device_type = {
0105     .name = "parport",
0106 };
0107 
0108 static int is_parport(struct device *dev)
0109 {
0110     return dev->type == &parport_device_type;
0111 }
0112 
0113 static int parport_probe(struct device *dev)
0114 {
0115     struct parport_driver *drv;
0116 
0117     if (is_parport(dev))
0118         return -ENODEV;
0119 
0120     drv = to_parport_driver(dev->driver);
0121     if (!drv->probe) {
0122         /* if driver has not defined a custom probe */
0123         struct pardevice *par_dev = to_pardevice(dev);
0124 
0125         if (strcmp(par_dev->name, drv->name))
0126             return -ENODEV;
0127         return 0;
0128     }
0129     /* if driver defined its own probe */
0130     return drv->probe(to_pardevice(dev));
0131 }
0132 
0133 static struct bus_type parport_bus_type = {
0134     .name = "parport",
0135     .probe = parport_probe,
0136 };
0137 
0138 int parport_bus_init(void)
0139 {
0140     return bus_register(&parport_bus_type);
0141 }
0142 
0143 void parport_bus_exit(void)
0144 {
0145     bus_unregister(&parport_bus_type);
0146 }
0147 
0148 /*
0149  * iterates through all the drivers registered with the bus and sends the port
0150  * details to the match_port callback of the driver, so that the driver can
0151  * know about the new port that just registered with the bus and decide if it
0152  * wants to use this new port.
0153  */
0154 static int driver_check(struct device_driver *dev_drv, void *_port)
0155 {
0156     struct parport *port = _port;
0157     struct parport_driver *drv = to_parport_driver(dev_drv);
0158 
0159     if (drv->match_port)
0160         drv->match_port(port);
0161     return 0;
0162 }
0163 
0164 /* Call attach(port) for each registered driver. */
0165 static void attach_driver_chain(struct parport *port)
0166 {
0167     /* caller has exclusive registration_lock */
0168     struct parport_driver *drv;
0169 
0170     list_for_each_entry(drv, &drivers, list)
0171         drv->attach(port);
0172 
0173     /*
0174      * call the driver_check function of the drivers registered in
0175      * new device model
0176      */
0177 
0178     bus_for_each_drv(&parport_bus_type, NULL, port, driver_check);
0179 }
0180 
0181 static int driver_detach(struct device_driver *_drv, void *_port)
0182 {
0183     struct parport *port = _port;
0184     struct parport_driver *drv = to_parport_driver(_drv);
0185 
0186     if (drv->detach)
0187         drv->detach(port);
0188     return 0;
0189 }
0190 
0191 /* Call detach(port) for each registered driver. */
0192 static void detach_driver_chain(struct parport *port)
0193 {
0194     struct parport_driver *drv;
0195     /* caller has exclusive registration_lock */
0196     list_for_each_entry(drv, &drivers, list)
0197         drv->detach(port);
0198 
0199     /*
0200      * call the detach function of the drivers registered in
0201      * new device model
0202      */
0203 
0204     bus_for_each_drv(&parport_bus_type, NULL, port, driver_detach);
0205 }
0206 
0207 /* Ask kmod for some lowlevel drivers. */
0208 static void get_lowlevel_driver(void)
0209 {
0210     /*
0211      * There is no actual module called this: you should set
0212      * up an alias for modutils.
0213      */
0214     request_module("parport_lowlevel");
0215 }
0216 
0217 /*
0218  * iterates through all the devices connected to the bus and sends the device
0219  * details to the match_port callback of the driver, so that the driver can
0220  * know what are all the ports that are connected to the bus and choose the
0221  * port to which it wants to register its device.
0222  */
0223 static int port_check(struct device *dev, void *dev_drv)
0224 {
0225     struct parport_driver *drv = dev_drv;
0226 
0227     /* only send ports, do not send other devices connected to bus */
0228     if (is_parport(dev))
0229         drv->match_port(to_parport_dev(dev));
0230     return 0;
0231 }
0232 
0233 /*
0234  * Iterates through all the devices connected to the bus and return 1
0235  * if the device is a parallel port.
0236  */
0237 
0238 static int port_detect(struct device *dev, void *dev_drv)
0239 {
0240     if (is_parport(dev))
0241         return 1;
0242     return 0;
0243 }
0244 
0245 /**
0246  *  __parport_register_driver - register a parallel port device driver
0247  *  @drv: structure describing the driver
0248  *  @owner: owner module of drv
0249  *  @mod_name: module name string
0250  *
0251  *  This can be called by a parallel port device driver in order
0252  *  to receive notifications about ports being found in the
0253  *  system, as well as ports no longer available.
0254  *
0255  *  If devmodel is true then the new device model is used
0256  *  for registration.
0257  *
0258  *  The @drv structure is allocated by the caller and must not be
0259  *  deallocated until after calling parport_unregister_driver().
0260  *
0261  *  If using the non device model:
0262  *  The driver's attach() function may block.  The port that
0263  *  attach() is given will be valid for the duration of the
0264  *  callback, but if the driver wants to take a copy of the
0265  *  pointer it must call parport_get_port() to do so.  Calling
0266  *  parport_register_device() on that port will do this for you.
0267  *
0268  *  The driver's detach() function may block.  The port that
0269  *  detach() is given will be valid for the duration of the
0270  *  callback, but if the driver wants to take a copy of the
0271  *  pointer it must call parport_get_port() to do so.
0272  *
0273  *
0274  *  Returns 0 on success. The non device model will always succeeds.
0275  *  but the new device model can fail and will return the error code.
0276  **/
0277 
0278 int __parport_register_driver(struct parport_driver *drv, struct module *owner,
0279                   const char *mod_name)
0280 {
0281     /* using device model */
0282     int ret;
0283 
0284     /* initialize common driver fields */
0285     drv->driver.name = drv->name;
0286     drv->driver.bus = &parport_bus_type;
0287     drv->driver.owner = owner;
0288     drv->driver.mod_name = mod_name;
0289     ret = driver_register(&drv->driver);
0290     if (ret)
0291         return ret;
0292 
0293     /*
0294      * check if bus has any parallel port registered, if
0295      * none is found then load the lowlevel driver.
0296      */
0297     ret = bus_for_each_dev(&parport_bus_type, NULL, NULL,
0298                    port_detect);
0299     if (!ret)
0300         get_lowlevel_driver();
0301 
0302     mutex_lock(&registration_lock);
0303     if (drv->match_port)
0304         bus_for_each_dev(&parport_bus_type, NULL, drv,
0305                  port_check);
0306     mutex_unlock(&registration_lock);
0307 
0308     return 0;
0309 }
0310 EXPORT_SYMBOL(__parport_register_driver);
0311 
0312 static int port_detach(struct device *dev, void *_drv)
0313 {
0314     struct parport_driver *drv = _drv;
0315 
0316     if (is_parport(dev) && drv->detach)
0317         drv->detach(to_parport_dev(dev));
0318 
0319     return 0;
0320 }
0321 
0322 /**
0323  *  parport_unregister_driver - deregister a parallel port device driver
0324  *  @drv: structure describing the driver that was given to
0325  *        parport_register_driver()
0326  *
0327  *  This should be called by a parallel port device driver that
0328  *  has registered itself using parport_register_driver() when it
0329  *  is about to be unloaded.
0330  *
0331  *  When it returns, the driver's attach() routine will no longer
0332  *  be called, and for each port that attach() was called for, the
0333  *  detach() routine will have been called.
0334  *
0335  *  All the driver's attach() and detach() calls are guaranteed to have
0336  *  finished by the time this function returns.
0337  **/
0338 
0339 void parport_unregister_driver(struct parport_driver *drv)
0340 {
0341     mutex_lock(&registration_lock);
0342     bus_for_each_dev(&parport_bus_type, NULL, drv, port_detach);
0343     driver_unregister(&drv->driver);
0344     mutex_unlock(&registration_lock);
0345 }
0346 EXPORT_SYMBOL(parport_unregister_driver);
0347 
0348 static void free_port(struct device *dev)
0349 {
0350     int d;
0351     struct parport *port = to_parport_dev(dev);
0352 
0353     spin_lock(&full_list_lock);
0354     list_del(&port->full_list);
0355     spin_unlock(&full_list_lock);
0356     for (d = 0; d < 5; d++) {
0357         kfree(port->probe_info[d].class_name);
0358         kfree(port->probe_info[d].mfr);
0359         kfree(port->probe_info[d].model);
0360         kfree(port->probe_info[d].cmdset);
0361         kfree(port->probe_info[d].description);
0362     }
0363 
0364     kfree(port->name);
0365     kfree(port);
0366 }
0367 
0368 /**
0369  *  parport_get_port - increment a port's reference count
0370  *  @port: the port
0371  *
0372  *  This ensures that a struct parport pointer remains valid
0373  *  until the matching parport_put_port() call.
0374  **/
0375 
0376 struct parport *parport_get_port(struct parport *port)
0377 {
0378     struct device *dev = get_device(&port->bus_dev);
0379 
0380     return to_parport_dev(dev);
0381 }
0382 EXPORT_SYMBOL(parport_get_port);
0383 
0384 void parport_del_port(struct parport *port)
0385 {
0386     device_unregister(&port->bus_dev);
0387 }
0388 EXPORT_SYMBOL(parport_del_port);
0389 
0390 /**
0391  *  parport_put_port - decrement a port's reference count
0392  *  @port: the port
0393  *
0394  *  This should be called once for each call to parport_get_port(),
0395  *  once the port is no longer needed. When the reference count reaches
0396  *  zero (port is no longer used), free_port is called.
0397  **/
0398 
0399 void parport_put_port(struct parport *port)
0400 {
0401     put_device(&port->bus_dev);
0402 }
0403 EXPORT_SYMBOL(parport_put_port);
0404 
0405 /**
0406  *  parport_register_port - register a parallel port
0407  *  @base: base I/O address
0408  *  @irq: IRQ line
0409  *  @dma: DMA channel
0410  *  @ops: pointer to the port driver's port operations structure
0411  *
0412  *  When a parallel port (lowlevel) driver finds a port that
0413  *  should be made available to parallel port device drivers, it
0414  *  should call parport_register_port().  The @base, @irq, and
0415  *  @dma parameters are for the convenience of port drivers, and
0416  *  for ports where they aren't meaningful needn't be set to
0417  *  anything special.  They can be altered afterwards by adjusting
0418  *  the relevant members of the parport structure that is returned
0419  *  and represents the port.  They should not be tampered with
0420  *  after calling parport_announce_port, however.
0421  *
0422  *  If there are parallel port device drivers in the system that
0423  *  have registered themselves using parport_register_driver(),
0424  *  they are not told about the port at this time; that is done by
0425  *  parport_announce_port().
0426  *
0427  *  The @ops structure is allocated by the caller, and must not be
0428  *  deallocated before calling parport_remove_port().
0429  *
0430  *  If there is no memory to allocate a new parport structure,
0431  *  this function will return %NULL.
0432  **/
0433 
0434 struct parport *parport_register_port(unsigned long base, int irq, int dma,
0435                       struct parport_operations *ops)
0436 {
0437     struct list_head *l;
0438     struct parport *tmp;
0439     int num;
0440     int device;
0441     char *name;
0442     int ret;
0443 
0444     tmp = kzalloc(sizeof(struct parport), GFP_KERNEL);
0445     if (!tmp)
0446         return NULL;
0447 
0448     /* Init our structure */
0449     tmp->base = base;
0450     tmp->irq = irq;
0451     tmp->dma = dma;
0452     tmp->muxport = tmp->daisy = tmp->muxsel = -1;
0453     tmp->modes = 0;
0454     INIT_LIST_HEAD(&tmp->list);
0455     tmp->devices = tmp->cad = NULL;
0456     tmp->flags = 0;
0457     tmp->ops = ops;
0458     tmp->physport = tmp;
0459     memset(tmp->probe_info, 0, 5 * sizeof(struct parport_device_info));
0460     rwlock_init(&tmp->cad_lock);
0461     spin_lock_init(&tmp->waitlist_lock);
0462     spin_lock_init(&tmp->pardevice_lock);
0463     tmp->ieee1284.mode = IEEE1284_MODE_COMPAT;
0464     tmp->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
0465     sema_init(&tmp->ieee1284.irq, 0);
0466     tmp->spintime = parport_default_spintime;
0467     atomic_set(&tmp->ref_count, 1);
0468     INIT_LIST_HEAD(&tmp->full_list);
0469 
0470     name = kmalloc(15, GFP_KERNEL);
0471     if (!name) {
0472         kfree(tmp);
0473         return NULL;
0474     }
0475     /* Search for the lowest free parport number. */
0476 
0477     spin_lock(&full_list_lock);
0478     for (l = all_ports.next, num = 0; l != &all_ports; l = l->next, num++) {
0479         struct parport *p = list_entry(l, struct parport, full_list);
0480         if (p->number != num)
0481             break;
0482     }
0483     tmp->portnum = tmp->number = num;
0484     list_add_tail(&tmp->full_list, l);
0485     spin_unlock(&full_list_lock);
0486 
0487     /*
0488      * Now that the portnum is known finish doing the Init.
0489      */
0490     sprintf(name, "parport%d", tmp->portnum = tmp->number);
0491     tmp->name = name;
0492     tmp->bus_dev.bus = &parport_bus_type;
0493     tmp->bus_dev.release = free_port;
0494     dev_set_name(&tmp->bus_dev, name);
0495     tmp->bus_dev.type = &parport_device_type;
0496 
0497     for (device = 0; device < 5; device++)
0498         /* assume the worst */
0499         tmp->probe_info[device].class = PARPORT_CLASS_LEGACY;
0500 
0501     tmp->waithead = tmp->waittail = NULL;
0502 
0503     ret = device_register(&tmp->bus_dev);
0504     if (ret) {
0505         put_device(&tmp->bus_dev);
0506         return NULL;
0507     }
0508 
0509     return tmp;
0510 }
0511 EXPORT_SYMBOL(parport_register_port);
0512 
0513 /**
0514  *  parport_announce_port - tell device drivers about a parallel port
0515  *  @port: parallel port to announce
0516  *
0517  *  After a port driver has registered a parallel port with
0518  *  parport_register_port, and performed any necessary
0519  *  initialisation or adjustments, it should call
0520  *  parport_announce_port() in order to notify all device drivers
0521  *  that have called parport_register_driver().  Their attach()
0522  *  functions will be called, with @port as the parameter.
0523  **/
0524 
0525 void parport_announce_port(struct parport *port)
0526 {
0527     int i;
0528 
0529 #ifdef CONFIG_PARPORT_1284
0530     /* Analyse the IEEE1284.3 topology of the port. */
0531     parport_daisy_init(port);
0532 #endif
0533 
0534     if (!port->dev)
0535         pr_warn("%s: fix this legacy no-device port driver!\n",
0536             port->name);
0537 
0538     parport_proc_register(port);
0539     mutex_lock(&registration_lock);
0540     spin_lock_irq(&parportlist_lock);
0541     list_add_tail(&port->list, &portlist);
0542     for (i = 1; i < 3; i++) {
0543         struct parport *slave = port->slaves[i-1];
0544         if (slave)
0545             list_add_tail(&slave->list, &portlist);
0546     }
0547     spin_unlock_irq(&parportlist_lock);
0548 
0549     /* Let drivers know that new port(s) has arrived. */
0550     attach_driver_chain(port);
0551     for (i = 1; i < 3; i++) {
0552         struct parport *slave = port->slaves[i-1];
0553         if (slave)
0554             attach_driver_chain(slave);
0555     }
0556     mutex_unlock(&registration_lock);
0557 }
0558 EXPORT_SYMBOL(parport_announce_port);
0559 
0560 /**
0561  *  parport_remove_port - deregister a parallel port
0562  *  @port: parallel port to deregister
0563  *
0564  *  When a parallel port driver is forcibly unloaded, or a
0565  *  parallel port becomes inaccessible, the port driver must call
0566  *  this function in order to deal with device drivers that still
0567  *  want to use it.
0568  *
0569  *  The parport structure associated with the port has its
0570  *  operations structure replaced with one containing 'null'
0571  *  operations that return errors or just don't do anything.
0572  *
0573  *  Any drivers that have registered themselves using
0574  *  parport_register_driver() are notified that the port is no
0575  *  longer accessible by having their detach() routines called
0576  *  with @port as the parameter.
0577  **/
0578 
0579 void parport_remove_port(struct parport *port)
0580 {
0581     int i;
0582 
0583     mutex_lock(&registration_lock);
0584 
0585     /* Spread the word. */
0586     detach_driver_chain(port);
0587 
0588 #ifdef CONFIG_PARPORT_1284
0589     /* Forget the IEEE1284.3 topology of the port. */
0590     parport_daisy_fini(port);
0591     for (i = 1; i < 3; i++) {
0592         struct parport *slave = port->slaves[i-1];
0593         if (!slave)
0594             continue;
0595         detach_driver_chain(slave);
0596         parport_daisy_fini(slave);
0597     }
0598 #endif
0599 
0600     port->ops = &dead_ops;
0601     spin_lock(&parportlist_lock);
0602     list_del_init(&port->list);
0603     for (i = 1; i < 3; i++) {
0604         struct parport *slave = port->slaves[i-1];
0605         if (slave)
0606             list_del_init(&slave->list);
0607     }
0608     spin_unlock(&parportlist_lock);
0609 
0610     mutex_unlock(&registration_lock);
0611 
0612     parport_proc_unregister(port);
0613 
0614     for (i = 1; i < 3; i++) {
0615         struct parport *slave = port->slaves[i-1];
0616         if (slave)
0617             parport_put_port(slave);
0618     }
0619 }
0620 EXPORT_SYMBOL(parport_remove_port);
0621 
0622 static void free_pardevice(struct device *dev)
0623 {
0624     struct pardevice *par_dev = to_pardevice(dev);
0625 
0626     kfree(par_dev->name);
0627     kfree(par_dev);
0628 }
0629 
0630 /**
0631  *  parport_register_dev_model - register a device on a parallel port
0632  *  @port: port to which the device is attached
0633  *  @name: a name to refer to the device
0634  *  @par_dev_cb: struct containing callbacks
0635  *  @id: device number to be given to the device
0636  *
0637  *  This function, called by parallel port device drivers,
0638  *  declares that a device is connected to a port, and tells the
0639  *  system all it needs to know.
0640  *
0641  *  The struct pardev_cb contains pointer to callbacks. preemption
0642  *  callback function, @preempt, is called when this device driver
0643  *  has claimed access to the port but another device driver wants
0644  *  to use it.  It is given, @private, as its parameter, and should
0645  *  return zero if it is willing for the system to release the port
0646  *  to another driver on its behalf. If it wants to keep control of
0647  *  the port it should return non-zero, and no action will be taken.
0648  *  It is good manners for the driver to try to release the port at
0649  *  the earliest opportunity after its preemption callback rejects a
0650  *  preemption attempt. Note that if a preemption callback is happy
0651  *  for preemption to go ahead, there is no need to release the
0652  *  port; it is done automatically. This function may not block, as
0653  *  it may be called from interrupt context. If the device driver
0654  *  does not support preemption, @preempt can be %NULL.
0655  *
0656  *  The wake-up ("kick") callback function, @wakeup, is called when
0657  *  the port is available to be claimed for exclusive access; that
0658  *  is, parport_claim() is guaranteed to succeed when called from
0659  *  inside the wake-up callback function.  If the driver wants to
0660  *  claim the port it should do so; otherwise, it need not take
0661  *  any action.  This function may not block, as it may be called
0662  *  from interrupt context.  If the device driver does not want to
0663  *  be explicitly invited to claim the port in this way, @wakeup can
0664  *  be %NULL.
0665  *
0666  *  The interrupt handler, @irq_func, is called when an interrupt
0667  *  arrives from the parallel port.  Note that if a device driver
0668  *  wants to use interrupts it should use parport_enable_irq(),
0669  *  and can also check the irq member of the parport structure
0670  *  representing the port.
0671  *
0672  *  The parallel port (lowlevel) driver is the one that has called
0673  *  request_irq() and whose interrupt handler is called first.
0674  *  This handler does whatever needs to be done to the hardware to
0675  *  acknowledge the interrupt (for PC-style ports there is nothing
0676  *  special to be done).  It then tells the IEEE 1284 code about
0677  *  the interrupt, which may involve reacting to an IEEE 1284
0678  *  event depending on the current IEEE 1284 phase.  After this,
0679  *  it calls @irq_func.  Needless to say, @irq_func will be called
0680  *  from interrupt context, and may not block.
0681  *
0682  *  The %PARPORT_DEV_EXCL flag is for preventing port sharing, and
0683  *  so should only be used when sharing the port with other device
0684  *  drivers is impossible and would lead to incorrect behaviour.
0685  *  Use it sparingly!  Normally, @flags will be zero.
0686  *
0687  *  This function returns a pointer to a structure that represents
0688  *  the device on the port, or %NULL if there is not enough memory
0689  *  to allocate space for that structure.
0690  **/
0691 
0692 struct pardevice *
0693 parport_register_dev_model(struct parport *port, const char *name,
0694                const struct pardev_cb *par_dev_cb, int id)
0695 {
0696     struct pardevice *par_dev;
0697     int ret;
0698     char *devname;
0699 
0700     if (port->physport->flags & PARPORT_FLAG_EXCL) {
0701         /* An exclusive device is registered. */
0702         pr_err("%s: no more devices allowed\n", port->name);
0703         return NULL;
0704     }
0705 
0706     if (par_dev_cb->flags & PARPORT_DEV_LURK) {
0707         if (!par_dev_cb->preempt || !par_dev_cb->wakeup) {
0708             pr_info("%s: refused to register lurking device (%s) without callbacks\n",
0709                 port->name, name);
0710             return NULL;
0711         }
0712     }
0713 
0714     if (par_dev_cb->flags & PARPORT_DEV_EXCL) {
0715         if (port->physport->devices) {
0716             /*
0717              * If a device is already registered and this new
0718              * device wants exclusive access, then no need to
0719              * continue as we can not grant exclusive access to
0720              * this device.
0721              */
0722             pr_err("%s: cannot grant exclusive access for device %s\n",
0723                    port->name, name);
0724             return NULL;
0725         }
0726     }
0727 
0728     if (!try_module_get(port->ops->owner))
0729         return NULL;
0730 
0731     parport_get_port(port);
0732 
0733     par_dev = kzalloc(sizeof(*par_dev), GFP_KERNEL);
0734     if (!par_dev)
0735         goto err_put_port;
0736 
0737     par_dev->state = kzalloc(sizeof(*par_dev->state), GFP_KERNEL);
0738     if (!par_dev->state)
0739         goto err_put_par_dev;
0740 
0741     devname = kstrdup(name, GFP_KERNEL);
0742     if (!devname)
0743         goto err_free_par_dev;
0744 
0745     par_dev->name = devname;
0746     par_dev->port = port;
0747     par_dev->daisy = -1;
0748     par_dev->preempt = par_dev_cb->preempt;
0749     par_dev->wakeup = par_dev_cb->wakeup;
0750     par_dev->private = par_dev_cb->private;
0751     par_dev->flags = par_dev_cb->flags;
0752     par_dev->irq_func = par_dev_cb->irq_func;
0753     par_dev->waiting = 0;
0754     par_dev->timeout = 5 * HZ;
0755 
0756     par_dev->dev.parent = &port->bus_dev;
0757     par_dev->dev.bus = &parport_bus_type;
0758     ret = dev_set_name(&par_dev->dev, "%s.%d", devname, id);
0759     if (ret)
0760         goto err_free_devname;
0761     par_dev->dev.release = free_pardevice;
0762     par_dev->devmodel = true;
0763     ret = device_register(&par_dev->dev);
0764     if (ret) {
0765         kfree(par_dev->state);
0766         put_device(&par_dev->dev);
0767         goto err_put_port;
0768     }
0769 
0770     /* Chain this onto the list */
0771     par_dev->prev = NULL;
0772     /*
0773      * This function must not run from an irq handler so we don' t need
0774      * to clear irq on the local CPU. -arca
0775      */
0776     spin_lock(&port->physport->pardevice_lock);
0777 
0778     if (par_dev_cb->flags & PARPORT_DEV_EXCL) {
0779         if (port->physport->devices) {
0780             spin_unlock(&port->physport->pardevice_lock);
0781             pr_debug("%s: cannot grant exclusive access for device %s\n",
0782                  port->name, name);
0783             kfree(par_dev->state);
0784             device_unregister(&par_dev->dev);
0785             goto err_put_port;
0786         }
0787         port->flags |= PARPORT_FLAG_EXCL;
0788     }
0789 
0790     par_dev->next = port->physport->devices;
0791     wmb();  /*
0792          * Make sure that tmp->next is written before it's
0793          * added to the list; see comments marked 'no locking
0794          * required'
0795          */
0796     if (port->physport->devices)
0797         port->physport->devices->prev = par_dev;
0798     port->physport->devices = par_dev;
0799     spin_unlock(&port->physport->pardevice_lock);
0800 
0801     init_waitqueue_head(&par_dev->wait_q);
0802     par_dev->timeslice = parport_default_timeslice;
0803     par_dev->waitnext = NULL;
0804     par_dev->waitprev = NULL;
0805 
0806     /*
0807      * This has to be run as last thing since init_state may need other
0808      * pardevice fields. -arca
0809      */
0810     port->ops->init_state(par_dev, par_dev->state);
0811     if (!test_and_set_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags)) {
0812         port->proc_device = par_dev;
0813         parport_device_proc_register(par_dev);
0814     }
0815 
0816     return par_dev;
0817 
0818 err_free_devname:
0819     kfree(devname);
0820 err_free_par_dev:
0821     kfree(par_dev->state);
0822 err_put_par_dev:
0823     if (!par_dev->devmodel)
0824         kfree(par_dev);
0825 err_put_port:
0826     parport_put_port(port);
0827     module_put(port->ops->owner);
0828 
0829     return NULL;
0830 }
0831 EXPORT_SYMBOL(parport_register_dev_model);
0832 
0833 /**
0834  *  parport_unregister_device - deregister a device on a parallel port
0835  *  @dev: pointer to structure representing device
0836  *
0837  *  This undoes the effect of parport_register_device().
0838  **/
0839 
0840 void parport_unregister_device(struct pardevice *dev)
0841 {
0842     struct parport *port;
0843 
0844 #ifdef PARPORT_PARANOID
0845     if (!dev) {
0846         pr_err("%s: passed NULL\n", __func__);
0847         return;
0848     }
0849 #endif
0850 
0851     port = dev->port->physport;
0852 
0853     if (port->proc_device == dev) {
0854         port->proc_device = NULL;
0855         clear_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags);
0856         parport_device_proc_unregister(dev);
0857     }
0858 
0859     if (port->cad == dev) {
0860         printk(KERN_DEBUG "%s: %s forgot to release port\n",
0861                port->name, dev->name);
0862         parport_release(dev);
0863     }
0864 
0865     spin_lock(&port->pardevice_lock);
0866     if (dev->next)
0867         dev->next->prev = dev->prev;
0868     if (dev->prev)
0869         dev->prev->next = dev->next;
0870     else
0871         port->devices = dev->next;
0872 
0873     if (dev->flags & PARPORT_DEV_EXCL)
0874         port->flags &= ~PARPORT_FLAG_EXCL;
0875 
0876     spin_unlock(&port->pardevice_lock);
0877 
0878     /*
0879      * Make sure we haven't left any pointers around in the wait
0880      * list.
0881      */
0882     spin_lock_irq(&port->waitlist_lock);
0883     if (dev->waitprev || dev->waitnext || port->waithead == dev) {
0884         if (dev->waitprev)
0885             dev->waitprev->waitnext = dev->waitnext;
0886         else
0887             port->waithead = dev->waitnext;
0888         if (dev->waitnext)
0889             dev->waitnext->waitprev = dev->waitprev;
0890         else
0891             port->waittail = dev->waitprev;
0892     }
0893     spin_unlock_irq(&port->waitlist_lock);
0894 
0895     kfree(dev->state);
0896     device_unregister(&dev->dev);
0897 
0898     module_put(port->ops->owner);
0899     parport_put_port(port);
0900 }
0901 EXPORT_SYMBOL(parport_unregister_device);
0902 
0903 /**
0904  *  parport_find_number - find a parallel port by number
0905  *  @number: parallel port number
0906  *
0907  *  This returns the parallel port with the specified number, or
0908  *  %NULL if there is none.
0909  *
0910  *  There is an implicit parport_get_port() done already; to throw
0911  *  away the reference to the port that parport_find_number()
0912  *  gives you, use parport_put_port().
0913  */
0914 
0915 struct parport *parport_find_number(int number)
0916 {
0917     struct parport *port, *result = NULL;
0918 
0919     if (list_empty(&portlist))
0920         get_lowlevel_driver();
0921 
0922     spin_lock(&parportlist_lock);
0923     list_for_each_entry(port, &portlist, list) {
0924         if (port->number == number) {
0925             result = parport_get_port(port);
0926             break;
0927         }
0928     }
0929     spin_unlock(&parportlist_lock);
0930     return result;
0931 }
0932 EXPORT_SYMBOL(parport_find_number);
0933 
0934 /**
0935  *  parport_find_base - find a parallel port by base address
0936  *  @base: base I/O address
0937  *
0938  *  This returns the parallel port with the specified base
0939  *  address, or %NULL if there is none.
0940  *
0941  *  There is an implicit parport_get_port() done already; to throw
0942  *  away the reference to the port that parport_find_base()
0943  *  gives you, use parport_put_port().
0944  */
0945 
0946 struct parport *parport_find_base(unsigned long base)
0947 {
0948     struct parport *port, *result = NULL;
0949 
0950     if (list_empty(&portlist))
0951         get_lowlevel_driver();
0952 
0953     spin_lock(&parportlist_lock);
0954     list_for_each_entry(port, &portlist, list) {
0955         if (port->base == base) {
0956             result = parport_get_port(port);
0957             break;
0958         }
0959     }
0960     spin_unlock(&parportlist_lock);
0961     return result;
0962 }
0963 EXPORT_SYMBOL(parport_find_base);
0964 
0965 /**
0966  *  parport_claim - claim access to a parallel port device
0967  *  @dev: pointer to structure representing a device on the port
0968  *
0969  *  This function will not block and so can be used from interrupt
0970  *  context.  If parport_claim() succeeds in claiming access to
0971  *  the port it returns zero and the port is available to use.  It
0972  *  may fail (returning non-zero) if the port is in use by another
0973  *  driver and that driver is not willing to relinquish control of
0974  *  the port.
0975  **/
0976 
0977 int parport_claim(struct pardevice *dev)
0978 {
0979     struct pardevice *oldcad;
0980     struct parport *port = dev->port->physport;
0981     unsigned long flags;
0982 
0983     if (port->cad == dev) {
0984         pr_info("%s: %s already owner\n", dev->port->name, dev->name);
0985         return 0;
0986     }
0987 
0988     /* Preempt any current device */
0989     write_lock_irqsave(&port->cad_lock, flags);
0990     oldcad = port->cad;
0991     if (oldcad) {
0992         if (oldcad->preempt) {
0993             if (oldcad->preempt(oldcad->private))
0994                 goto blocked;
0995             port->ops->save_state(port, dev->state);
0996         } else
0997             goto blocked;
0998 
0999         if (port->cad != oldcad) {
1000             /*
1001              * I think we'll actually deadlock rather than
1002              * get here, but just in case..
1003              */
1004             pr_warn("%s: %s released port when preempted!\n",
1005                 port->name, oldcad->name);
1006             if (port->cad)
1007                 goto blocked;
1008         }
1009     }
1010 
1011     /* Can't fail from now on, so mark ourselves as no longer waiting.  */
1012     if (dev->waiting & 1) {
1013         dev->waiting = 0;
1014 
1015         /* Take ourselves out of the wait list again.  */
1016         spin_lock_irq(&port->waitlist_lock);
1017         if (dev->waitprev)
1018             dev->waitprev->waitnext = dev->waitnext;
1019         else
1020             port->waithead = dev->waitnext;
1021         if (dev->waitnext)
1022             dev->waitnext->waitprev = dev->waitprev;
1023         else
1024             port->waittail = dev->waitprev;
1025         spin_unlock_irq(&port->waitlist_lock);
1026         dev->waitprev = dev->waitnext = NULL;
1027     }
1028 
1029     /* Now we do the change of devices */
1030     port->cad = dev;
1031 
1032 #ifdef CONFIG_PARPORT_1284
1033     /* If it's a mux port, select it. */
1034     if (dev->port->muxport >= 0) {
1035         /* FIXME */
1036         port->muxsel = dev->port->muxport;
1037     }
1038 
1039     /* If it's a daisy chain device, select it. */
1040     if (dev->daisy >= 0) {
1041         /* This could be lazier. */
1042         if (!parport_daisy_select(port, dev->daisy,
1043                        IEEE1284_MODE_COMPAT))
1044             port->daisy = dev->daisy;
1045     }
1046 #endif /* IEEE1284.3 support */
1047 
1048     /* Restore control registers */
1049     port->ops->restore_state(port, dev->state);
1050     write_unlock_irqrestore(&port->cad_lock, flags);
1051     dev->time = jiffies;
1052     return 0;
1053 
1054 blocked:
1055     /*
1056      * If this is the first time we tried to claim the port, register an
1057      * interest.  This is only allowed for devices sleeping in
1058      * parport_claim_or_block(), or those with a wakeup function.
1059      */
1060 
1061     /* The cad_lock is still held for writing here */
1062     if (dev->waiting & 2 || dev->wakeup) {
1063         spin_lock(&port->waitlist_lock);
1064         if (test_and_set_bit(0, &dev->waiting) == 0) {
1065             /* First add ourselves to the end of the wait list. */
1066             dev->waitnext = NULL;
1067             dev->waitprev = port->waittail;
1068             if (port->waittail) {
1069                 port->waittail->waitnext = dev;
1070                 port->waittail = dev;
1071             } else
1072                 port->waithead = port->waittail = dev;
1073         }
1074         spin_unlock(&port->waitlist_lock);
1075     }
1076     write_unlock_irqrestore(&port->cad_lock, flags);
1077     return -EAGAIN;
1078 }
1079 EXPORT_SYMBOL(parport_claim);
1080 
1081 /**
1082  *  parport_claim_or_block - claim access to a parallel port device
1083  *  @dev: pointer to structure representing a device on the port
1084  *
1085  *  This behaves like parport_claim(), but will block if necessary
1086  *  to wait for the port to be free.  A return value of 1
1087  *  indicates that it slept; 0 means that it succeeded without
1088  *  needing to sleep.  A negative error code indicates failure.
1089  **/
1090 
1091 int parport_claim_or_block(struct pardevice *dev)
1092 {
1093     int r;
1094 
1095     /*
1096      * Signal to parport_claim() that we can wait even without a
1097      * wakeup function.
1098      */
1099     dev->waiting = 2;
1100 
1101     /* Try to claim the port.  If this fails, we need to sleep.  */
1102     r = parport_claim(dev);
1103     if (r == -EAGAIN) {
1104 #ifdef PARPORT_DEBUG_SHARING
1105         printk(KERN_DEBUG "%s: parport_claim() returned -EAGAIN\n",
1106                dev->name);
1107 #endif
1108         /*
1109          * FIXME!!! Use the proper locking for dev->waiting,
1110          * and make this use the "wait_event_interruptible()"
1111          * interfaces. The cli/sti that used to be here
1112          * did nothing.
1113          *
1114          * See also parport_release()
1115          */
1116 
1117         /*
1118          * If dev->waiting is clear now, an interrupt
1119          * gave us the port and we would deadlock if we slept.
1120          */
1121         if (dev->waiting) {
1122             wait_event_interruptible(dev->wait_q,
1123                          !dev->waiting);
1124             if (signal_pending(current))
1125                 return -EINTR;
1126             r = 1;
1127         } else {
1128             r = 0;
1129 #ifdef PARPORT_DEBUG_SHARING
1130             printk(KERN_DEBUG "%s: didn't sleep in parport_claim_or_block()\n",
1131                    dev->name);
1132 #endif
1133         }
1134 
1135 #ifdef PARPORT_DEBUG_SHARING
1136         if (dev->port->physport->cad != dev)
1137             printk(KERN_DEBUG "%s: exiting parport_claim_or_block but %s owns port!\n",
1138                    dev->name, dev->port->physport->cad ?
1139                    dev->port->physport->cad->name : "nobody");
1140 #endif
1141     }
1142     dev->waiting = 0;
1143     return r;
1144 }
1145 EXPORT_SYMBOL(parport_claim_or_block);
1146 
1147 /**
1148  *  parport_release - give up access to a parallel port device
1149  *  @dev: pointer to structure representing parallel port device
1150  *
1151  *  This function cannot fail, but it should not be called without
1152  *  the port claimed.  Similarly, if the port is already claimed
1153  *  you should not try claiming it again.
1154  **/
1155 
1156 void parport_release(struct pardevice *dev)
1157 {
1158     struct parport *port = dev->port->physport;
1159     struct pardevice *pd;
1160     unsigned long flags;
1161 
1162     /* Make sure that dev is the current device */
1163     write_lock_irqsave(&port->cad_lock, flags);
1164     if (port->cad != dev) {
1165         write_unlock_irqrestore(&port->cad_lock, flags);
1166         pr_warn("%s: %s tried to release parport when not owner\n",
1167             port->name, dev->name);
1168         return;
1169     }
1170 
1171 #ifdef CONFIG_PARPORT_1284
1172     /* If this is on a mux port, deselect it. */
1173     if (dev->port->muxport >= 0) {
1174         /* FIXME */
1175         port->muxsel = -1;
1176     }
1177 
1178     /* If this is a daisy device, deselect it. */
1179     if (dev->daisy >= 0) {
1180         parport_daisy_deselect_all(port);
1181         port->daisy = -1;
1182     }
1183 #endif
1184 
1185     port->cad = NULL;
1186     write_unlock_irqrestore(&port->cad_lock, flags);
1187 
1188     /* Save control registers */
1189     port->ops->save_state(port, dev->state);
1190 
1191     /*
1192      * If anybody is waiting, find out who's been there longest and
1193      * then wake them up. (Note: no locking required)
1194      */
1195     /* !!! LOCKING IS NEEDED HERE */
1196     for (pd = port->waithead; pd; pd = pd->waitnext) {
1197         if (pd->waiting & 2) { /* sleeping in claim_or_block */
1198             parport_claim(pd);
1199             if (waitqueue_active(&pd->wait_q))
1200                 wake_up_interruptible(&pd->wait_q);
1201             return;
1202         } else if (pd->wakeup) {
1203             pd->wakeup(pd->private);
1204             if (dev->port->cad) /* racy but no matter */
1205                 return;
1206         } else {
1207             pr_err("%s: don't know how to wake %s\n",
1208                    port->name, pd->name);
1209         }
1210     }
1211 
1212     /*
1213      * Nobody was waiting, so walk the list to see if anyone is
1214      * interested in being woken up. (Note: no locking required)
1215      */
1216     /* !!! LOCKING IS NEEDED HERE */
1217     for (pd = port->devices; !port->cad && pd; pd = pd->next) {
1218         if (pd->wakeup && pd != dev)
1219             pd->wakeup(pd->private);
1220     }
1221 }
1222 EXPORT_SYMBOL(parport_release);
1223 
1224 irqreturn_t parport_irq_handler(int irq, void *dev_id)
1225 {
1226     struct parport *port = dev_id;
1227 
1228     parport_generic_irq(port);
1229 
1230     return IRQ_HANDLED;
1231 }
1232 EXPORT_SYMBOL(parport_irq_handler);
1233 
1234 MODULE_LICENSE("GPL");