OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [parport/] [share.c] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/* $Id: share.c,v 1.1.1.1 2004-04-15 02:29:10 phoenix Exp $
2
 * Parallel-port resource manager code.
3
 *
4
 * Authors: David Campbell <campbell@tirian.che.curtin.edu.au>
5
 *          Tim Waugh <tim@cyberelk.demon.co.uk>
6
 *          Jose Renau <renau@acm.org>
7
 *          Philip Blundell <philb@gnu.org>
8
 *          Andrea Arcangeli
9
 *
10
 * based on work by Grant Guenther <grant@torque.net>
11
 *          and Philip Blundell
12
 *
13
 * Any part of this program may be used in documents licensed under
14
 * the GNU Free Documentation License, Version 1.1 or any later version
15
 * published by the Free Software Foundation.
16
 */
17
 
18
#undef PARPORT_DEBUG_SHARING            /* undef for production */
19
 
20
#include <linux/config.h>
21
#include <linux/module.h>
22
#include <linux/string.h>
23
#include <linux/threads.h>
24
#include <linux/parport.h>
25
#include <linux/delay.h>
26
#include <linux/errno.h>
27
#include <linux/interrupt.h>
28
#include <linux/ioport.h>
29
#include <linux/kernel.h>
30
#include <linux/slab.h>
31
#include <linux/sched.h>
32
#include <linux/kmod.h>
33
 
34
#include <linux/spinlock.h>
35
#include <asm/irq.h>
36
 
37
#undef PARPORT_PARANOID
38
 
39
#define PARPORT_DEFAULT_TIMESLICE       (HZ/5)
40
 
41
unsigned long parport_default_timeslice = PARPORT_DEFAULT_TIMESLICE;
42
int parport_default_spintime =  DEFAULT_SPIN_TIME;
43
 
44
static struct parport *portlist = NULL, *portlist_tail = NULL;
45
static spinlock_t parportlist_lock = SPIN_LOCK_UNLOCKED;
46
 
47
static struct parport_driver *driver_chain = NULL;
48
static spinlock_t driverlist_lock = SPIN_LOCK_UNLOCKED;
49
 
50
/* What you can do to a port that's gone away.. */
51
static void dead_write_lines (struct parport *p, unsigned char b){}
52
static unsigned char dead_read_lines (struct parport *p) { return 0; }
53
static unsigned char dead_frob_lines (struct parport *p, unsigned char b,
54
                             unsigned char c) { return 0; }
55
static void dead_onearg (struct parport *p){}
56
static void dead_initstate (struct pardevice *d, struct parport_state *s) { }
57
static void dead_state (struct parport *p, struct parport_state *s) { }
58
static void dead_noargs (void) { }
59
static size_t dead_write (struct parport *p, const void *b, size_t l, int f)
60
{ return 0; }
61
static size_t dead_read (struct parport *p, void *b, size_t l, int f)
62
{ return 0; }
63
static struct parport_operations dead_ops = {
64
        dead_write_lines,       /* data */
65
        dead_read_lines,
66
        dead_write_lines,       /* control */
67
        dead_read_lines,
68
        dead_frob_lines,
69
        dead_read_lines,        /* status */
70
        dead_onearg,            /* enable_irq */
71
        dead_onearg,            /* disable_irq */
72
        dead_onearg,            /* data_forward */
73
        dead_onearg,            /* data_reverse */
74
        dead_initstate,         /* init_state */
75
        dead_state,
76
        dead_state,
77
        dead_noargs,            /* xxx_use_count */
78
        dead_noargs,
79
        dead_write,             /* epp */
80
        dead_read,
81
        dead_write,
82
        dead_read,
83
        dead_write,             /* ecp */
84
        dead_read,
85
        dead_write,
86
        dead_write,             /* compat */
87
        dead_read,              /* nibble */
88
        dead_read               /* byte */
89
};
90
 
91
/* Call attach(port) for each registered driver. */
92
static void attach_driver_chain(struct parport *port)
93
{
94
        struct parport_driver *drv;
95
        void (**attach) (struct parport *);
96
        int count = 0, i;
97
 
98
        /* This is complicated because attach() must be able to block,
99
         * but we can't let it do that while we're holding a
100
         * spinlock. */
101
 
102
        spin_lock (&driverlist_lock);
103
        for (drv = driver_chain; drv; drv = drv->next)
104
                count++;
105
        spin_unlock (&driverlist_lock);
106
 
107
        /* Drivers can unregister here; that's okay.  If they register
108
         * they'll be given an attach during parport_register_driver,
109
         * so that's okay too.  The only worry is that someone might
110
         * get given an attach twice if they registered just before
111
         * this function gets called. */
112
 
113
        /* Hmm, this could be fixed with a generation number..
114
         * FIXME */
115
 
116
        attach = kmalloc (sizeof (void(*)(struct parport *)) * count,
117
                          GFP_KERNEL);
118
        if (!attach) {
119
                printk (KERN_WARNING "parport: not enough memory to attach\n");
120
                return;
121
        }
122
 
123
        spin_lock (&driverlist_lock);
124
        for (i = 0, drv = driver_chain; drv && i < count; drv = drv->next)
125
                attach[i++] = drv->attach;
126
        spin_unlock (&driverlist_lock);
127
 
128
        for (count = 0; count < i; count++)
129
                (*attach[count]) (port);
130
 
131
        kfree (attach);
132
}
133
 
134
/* Call detach(port) for each registered driver. */
135
static void detach_driver_chain(struct parport *port)
136
{
137
        struct parport_driver *drv;
138
 
139
        spin_lock (&driverlist_lock);
140
        for (drv = driver_chain; drv; drv = drv->next)
141
                drv->detach (port);
142
        spin_unlock (&driverlist_lock);
143
}
144
 
145
/* Ask kmod for some lowlevel drivers. */
146
static void get_lowlevel_driver (void)
147
{
148
        /* There is no actual module called this: you should set
149
         * up an alias for modutils. */
150
        request_module ("parport_lowlevel");
151
}
152
 
153
/**
154
 *      parport_register_driver - register a parallel port device driver
155
 *      @drv: structure describing the driver
156
 *
157
 *      This can be called by a parallel port device driver in order
158
 *      to receive notifications about ports being found in the
159
 *      system, as well as ports no longer available.
160
 *
161
 *      The @drv structure is allocated by the caller and must not be
162
 *      deallocated until after calling parport_unregister_driver().
163
 *
164
 *      The driver's attach() function may block.  The port that
165
 *      attach() is given will be valid for the duration of the
166
 *      callback, but if the driver wants to take a copy of the
167
 *      pointer it must call parport_get_port() to do so.  Calling
168
 *      parport_register_device() on that port will do this for you.
169
 *
170
 *      The driver's detach() function may not block.  The port that
171
 *      detach() is given will be valid for the duration of the
172
 *      callback, but if the driver wants to take a copy of the
173
 *      pointer it must call parport_get_port() to do so.
174
 *
175
 *      Returns 0 on success.  Currently it always succeeds.
176
 **/
177
 
178
int parport_register_driver (struct parport_driver *drv)
179
{
180
        struct parport *port;
181
        struct parport **ports;
182
        int count = 0, i;
183
 
184
        if (!portlist)
185
                get_lowlevel_driver ();
186
 
187
        /* We have to take the portlist lock for this to be sure
188
         * that port is valid for the duration of the callback. */
189
 
190
        /* This is complicated by the fact that attach must be allowed
191
         * to block, so we can't be holding any spinlocks when we call
192
         * it.  But we need to hold a spinlock to iterate over the
193
         * list of ports.. */
194
 
195
        spin_lock (&parportlist_lock);
196
        for (port = portlist; port; port = port->next)
197
                count++;
198
        spin_unlock (&parportlist_lock);
199
 
200
        ports = kmalloc (sizeof (struct parport *) * count, GFP_KERNEL);
201
        if (!ports)
202
                printk (KERN_WARNING "parport: not enough memory to attach\n");
203
        else {
204
                spin_lock (&parportlist_lock);
205
                for (i = 0, port = portlist; port && i < count;
206
                     port = port->next)
207
                        ports[i++] = port;
208
                spin_unlock (&parportlist_lock);
209
 
210
                for (count = 0; count < i; count++)
211
                        drv->attach (ports[count]);
212
 
213
                kfree (ports);
214
        }
215
 
216
        spin_lock (&driverlist_lock);
217
        drv->next = driver_chain;
218
        driver_chain = drv;
219
        spin_unlock (&driverlist_lock);
220
 
221
        return 0;
222
}
223
 
224
/**
225
 *      parport_unregister_driver - deregister a parallel port device driver
226
 *      @arg: structure describing the driver that was given to
227
 *            parport_register_driver()
228
 *
229
 *      This should be called by a parallel port device driver that
230
 *      has registered itself using parport_register_driver() when it
231
 *      is about to be unloaded.
232
 *
233
 *      When it returns, the driver's attach() routine will no longer
234
 *      be called, and for each port that attach() was called for, the
235
 *      detach() routine will have been called.
236
 *
237
 *      If the caller's attach() function can block, it is their
238
 *      responsibility to make sure to wait for it to exit before
239
 *      unloading.
240
 *
241
 *      All the driver's detach() calls are guaranteed to have
242
 *      finished by the time this function returns.
243
 *
244
 *      The driver's detach() call is not allowed to block.
245
 **/
246
 
247
void parport_unregister_driver (struct parport_driver *arg)
248
{
249
        struct parport_driver *drv = driver_chain, *olddrv = NULL;
250
 
251
        while (drv) {
252
                if (drv == arg) {
253
                        struct parport *port;
254
 
255
                        spin_lock (&driverlist_lock);
256
                        if (olddrv)
257
                                olddrv->next = drv->next;
258
                        else
259
                                driver_chain = drv->next;
260
                        spin_unlock (&driverlist_lock);
261
 
262
                        /* Call the driver's detach routine for each
263
                         * port to clean up any resources that the
264
                         * attach routine acquired. */
265
                        spin_lock (&parportlist_lock);
266
                        for (port = portlist; port; port = port->next)
267
                                drv->detach (port);
268
                        spin_unlock (&parportlist_lock);
269
 
270
                        return;
271
                }
272
                olddrv = drv;
273
                drv = drv->next;
274
        }
275
}
276
 
277
static void free_port (struct parport *port)
278
{
279
        int d;
280
        for (d = 0; d < 5; d++) {
281
                if (port->probe_info[d].class_name)
282
                        kfree (port->probe_info[d].class_name);
283
                if (port->probe_info[d].mfr)
284
                        kfree (port->probe_info[d].mfr);
285
                if (port->probe_info[d].model)
286
                        kfree (port->probe_info[d].model);
287
                if (port->probe_info[d].cmdset)
288
                        kfree (port->probe_info[d].cmdset);
289
                if (port->probe_info[d].description)
290
                        kfree (port->probe_info[d].description);
291
        }
292
 
293
        kfree(port->name);
294
        kfree(port);
295
}
296
 
297
/**
298
 *      parport_get_port - increment a port's reference count
299
 *      @port: the port
300
 *
301
 *      This ensure's that a struct parport pointer remains valid
302
 *      until the matching parport_put_port() call.
303
 **/
304
 
305
struct parport *parport_get_port (struct parport *port)
306
{
307
        atomic_inc (&port->ref_count);
308
        return port;
309
}
310
 
311
/**
312
 *      parport_put_port - decrement a port's reference count
313
 *      @port: the port
314
 *
315
 *      This should be called once for each call to parport_get_port(),
316
 *      once the port is no longer needed.
317
 **/
318
 
319
void parport_put_port (struct parport *port)
320
{
321
        if (atomic_dec_and_test (&port->ref_count))
322
                /* Can destroy it now. */
323
                free_port (port);
324
 
325
        return;
326
}
327
 
328
/**
329
 *      parport_enumerate - return a list of the system's parallel ports
330
 *
331
 *      This returns the head of the list of parallel ports in the
332
 *      system, as a &struct parport.  The structure that is returned
333
 *      describes the first port in the list, and its 'next' member
334
 *      points to the next port, or %NULL if it's the last port.
335
 *
336
 *      If there are no parallel ports in the system,
337
 *      parport_enumerate() will return %NULL.
338
 **/
339
 
340
struct parport *parport_enumerate(void)
341
{
342
        /* Don't use this: use parport_register_driver instead. */
343
 
344
        if (!portlist)
345
                get_lowlevel_driver ();
346
 
347
        return portlist;
348
}
349
 
350
/**
351
 *      parport_register_port - register a parallel port
352
 *      @base: base I/O address
353
 *      @irq: IRQ line
354
 *      @dma: DMA channel
355
 *      @ops: pointer to the port driver's port operations structure
356
 *
357
 *      When a parallel port (lowlevel) driver finds a port that
358
 *      should be made available to parallel port device drivers, it
359
 *      should call parport_register_port().  The @base, @irq, and
360
 *      @dma parameters are for the convenience of port drivers, and
361
 *      for ports where they aren't meaningful needn't be set to
362
 *      anything special.  They can be altered afterwards by adjusting
363
 *      the relevant members of the parport structure that is returned
364
 *      and represents the port.  They should not be tampered with
365
 *      after calling parport_announce_port, however.
366
 *
367
 *      If there are parallel port device drivers in the system that
368
 *      have registered themselves using parport_register_driver(),
369
 *      they are not told about the port at this time; that is done by
370
 *      parport_announce_port().
371
 *
372
 *      The @ops structure is allocated by the caller, and must not be
373
 *      deallocated before calling parport_unregister_port().
374
 *
375
 *      If there is no memory to allocate a new parport structure,
376
 *      this function will return %NULL.
377
 **/
378
 
379
struct parport *parport_register_port(unsigned long base, int irq, int dma,
380
                                      struct parport_operations *ops)
381
{
382
        struct parport *tmp;
383
        int portnum;
384
        int device;
385
        char *name;
386
 
387
        tmp = kmalloc(sizeof(struct parport), GFP_KERNEL);
388
        if (!tmp) {
389
                printk(KERN_WARNING "parport: memory squeeze\n");
390
                return NULL;
391
        }
392
 
393
        /* Search for the lowest free parport number. */
394
 
395
        spin_lock_irq (&parportlist_lock);
396
        for (portnum = 0; ; portnum++) {
397
                struct parport *itr = portlist;
398
                while (itr) {
399
                        if (itr->number == portnum)
400
                                /* No good, already used. */
401
                                break;
402
                        else
403
                                itr = itr->next;
404
                }
405
 
406
                if (itr == NULL)
407
                        /* Got to the end of the list. */
408
                        break;
409
        }
410
        spin_unlock_irq (&parportlist_lock);
411
 
412
        /* Init our structure */
413
        memset(tmp, 0, sizeof(struct parport));
414
        tmp->base = base;
415
        tmp->irq = irq;
416
        tmp->dma = dma;
417
        tmp->muxport = tmp->daisy = tmp->muxsel = -1;
418
        tmp->modes = 0;
419
        tmp->next = NULL;
420
        tmp->devices = tmp->cad = NULL;
421
        tmp->flags = 0;
422
        tmp->ops = ops;
423
        tmp->portnum = tmp->number = portnum;
424
        tmp->physport = tmp;
425
        memset (tmp->probe_info, 0, 5 * sizeof (struct parport_device_info));
426
        tmp->cad_lock = RW_LOCK_UNLOCKED;
427
        spin_lock_init(&tmp->waitlist_lock);
428
        spin_lock_init(&tmp->pardevice_lock);
429
        tmp->ieee1284.mode = IEEE1284_MODE_COMPAT;
430
        tmp->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
431
        init_MUTEX_LOCKED (&tmp->ieee1284.irq); /* actually a semaphore at 0 */
432
        tmp->spintime = parport_default_spintime;
433
        atomic_set (&tmp->ref_count, 1);
434
 
435
        name = kmalloc(15, GFP_KERNEL);
436
        if (!name) {
437
                printk(KERN_ERR "parport: memory squeeze\n");
438
                kfree(tmp);
439
                return NULL;
440
        }
441
        sprintf(name, "parport%d", portnum);
442
        tmp->name = name;
443
 
444
        /*
445
         * Chain the entry to our list.
446
         *
447
         * This function must not run from an irq handler so we don' t need
448
         * to clear irq on the local CPU. -arca
449
         */
450
 
451
        spin_lock(&parportlist_lock);
452
 
453
        /* We are locked against anyone else performing alterations, but
454
         * because of parport_enumerate people can still _read_ the list
455
         * while we are changing it; so be careful..
456
         *
457
         * It's okay to have portlist_tail a little bit out of sync
458
         * since it's only used for changing the list, not for reading
459
         * from it.
460
         */
461
 
462
        if (portlist_tail)
463
                portlist_tail->next = tmp;
464
        portlist_tail = tmp;
465
        if (!portlist)
466
                portlist = tmp;
467
        spin_unlock(&parportlist_lock);
468
 
469
        for (device = 0; device < 5; device++)
470
                /* assume the worst */
471
                tmp->probe_info[device].class = PARPORT_CLASS_LEGACY;
472
 
473
        tmp->waithead = tmp->waittail = NULL;
474
 
475
        return tmp;
476
}
477
 
478
/**
479
 *      parport_announce_port - tell device drivers about a parallel port
480
 *      @port: parallel port to announce
481
 *
482
 *      After a port driver has registered a parallel port with
483
 *      parport_register_port, and performed any necessary
484
 *      initialisation or adjustments, it should call
485
 *      parport_announce_port() in order to notify all device drivers
486
 *      that have called parport_register_driver().  Their attach()
487
 *      functions will be called, with @port as the parameter.
488
 **/
489
 
490
void parport_announce_port (struct parport *port)
491
{
492
#ifdef CONFIG_PARPORT_1284
493
        /* Analyse the IEEE1284.3 topology of the port. */
494
        if (parport_daisy_init (port) == 0) {
495
                /* No devices were detected.  Perhaps they are in some
496
                   funny state; let's try to reset them and see if
497
                   they wake up. */
498
                parport_daisy_fini (port);
499
                parport_write_control (port, PARPORT_CONTROL_SELECT);
500
                udelay (50);
501
                parport_write_control (port,
502
                                       PARPORT_CONTROL_SELECT |
503
                                       PARPORT_CONTROL_INIT);
504
                udelay (50);
505
                parport_daisy_init (port);
506
        }
507
#endif
508
 
509
        /* Let drivers know that a new port has arrived. */
510
        attach_driver_chain (port);
511
}
512
 
513
/**
514
 *      parport_unregister_port - deregister a parallel port
515
 *      @port: parallel port to deregister
516
 *
517
 *      When a parallel port driver is forcibly unloaded, or a
518
 *      parallel port becomes inaccessible, the port driver must call
519
 *      this function in order to deal with device drivers that still
520
 *      want to use it.
521
 *
522
 *      The parport structure associated with the port has its
523
 *      operations structure replaced with one containing 'null'
524
 *      operations that return errors or just don't do anything.
525
 *
526
 *      Any drivers that have registered themselves using
527
 *      parport_register_driver() are notified that the port is no
528
 *      longer accessible by having their detach() routines called
529
 *      with @port as the parameter.
530
 **/
531
 
532
void parport_unregister_port(struct parport *port)
533
{
534
        struct parport *p;
535
 
536
        port->ops = &dead_ops;
537
 
538
        /* Spread the word. */
539
        detach_driver_chain (port);
540
 
541
#ifdef CONFIG_PARPORT_1284
542
        /* Forget the IEEE1284.3 topology of the port. */
543
        parport_daisy_fini (port);
544
#endif
545
 
546
        spin_lock(&parportlist_lock);
547
 
548
        /* We are protected from other people changing the list, but
549
         * they can still see it (using parport_enumerate).  So be
550
         * careful about the order of writes.. */
551
        if (portlist == port) {
552
                if ((portlist = port->next) == NULL)
553
                        portlist_tail = NULL;
554
        } else {
555
                for (p = portlist; (p != NULL) && (p->next != port);
556
                     p=p->next);
557
                if (p) {
558
                        if ((p->next = port->next) == NULL)
559
                                portlist_tail = p;
560
                }
561
                else printk (KERN_WARNING
562
                             "%s not found in port list!\n", port->name);
563
        }
564
        spin_unlock(&parportlist_lock);
565
 
566
        /* Yes, parport_enumerate _is_ unsafe.  Don't use it. */
567
        parport_put_port (port);
568
}
569
 
570
/**
571
 *      parport_register_device - register a device on a parallel port
572
 *      @port: port to which the device is attached
573
 *      @name: a name to refer to the device
574
 *      @pf: preemption callback
575
 *      @kf: kick callback (wake-up)
576
 *      @irq_func: interrupt handler
577
 *      @flags: registration flags
578
 *      @handle: data for callback functions
579
 *
580
 *      This function, called by parallel port device drivers,
581
 *      declares that a device is connected to a port, and tells the
582
 *      system all it needs to know.
583
 *
584
 *      The @name is allocated by the caller and must not be
585
 *      deallocated until the caller calls @parport_unregister_device
586
 *      for that device.
587
 *
588
 *      The preemption callback function, @pf, is called when this
589
 *      device driver has claimed access to the port but another
590
 *      device driver wants to use it.  It is given @handle as its
591
 *      parameter, and should return zero if it is willing for the
592
 *      system to release the port to another driver on its behalf.
593
 *      If it wants to keep control of the port it should return
594
 *      non-zero, and no action will be taken.  It is good manners for
595
 *      the driver to try to release the port at the earliest
596
 *      opportunity after its preemption callback rejects a preemption
597
 *      attempt.  Note that if a preemption callback is happy for
598
 *      preemption to go ahead, there is no need to release the port;
599
 *      it is done automatically.  This function may not block, as it
600
 *      may be called from interrupt context.  If the device driver
601
 *      does not support preemption, @pf can be %NULL.
602
 *
603
 *      The wake-up ("kick") callback function, @kf, is called when
604
 *      the port is available to be claimed for exclusive access; that
605
 *      is, parport_claim() is guaranteed to succeed when called from
606
 *      inside the wake-up callback function.  If the driver wants to
607
 *      claim the port it should do so; otherwise, it need not take
608
 *      any action.  This function may not block, as it may be called
609
 *      from interrupt context.  If the device driver does not want to
610
 *      be explicitly invited to claim the port in this way, @kf can
611
 *      be %NULL.
612
 *
613
 *      The interrupt handler, @irq_func, is called when an interrupt
614
 *      arrives from the parallel port.  Note that if a device driver
615
 *      wants to use interrupts it should use parport_enable_irq(),
616
 *      and can also check the irq member of the parport structure
617
 *      representing the port.
618
 *
619
 *      The parallel port (lowlevel) driver is the one that has called
620
 *      request_irq() and whose interrupt handler is called first.
621
 *      This handler does whatever needs to be done to the hardware to
622
 *      acknowledge the interrupt (for PC-style ports there is nothing
623
 *      special to be done).  It then tells the IEEE 1284 code about
624
 *      the interrupt, which may involve reacting to an IEEE 1284
625
 *      event depending on the current IEEE 1284 phase.  After this,
626
 *      it calls @irq_func.  Needless to say, @irq_func will be called
627
 *      from interrupt context, and may not block.
628
 *
629
 *      The %PARPORT_DEV_EXCL flag is for preventing port sharing, and
630
 *      so should only be used when sharing the port with other device
631
 *      drivers is impossible and would lead to incorrect behaviour.
632
 *      Use it sparingly!  Normally, @flags will be zero.
633
 *
634
 *      This function returns a pointer to a structure that represents
635
 *      the device on the port, or %NULL if there is not enough memory
636
 *      to allocate space for that structure.
637
 **/
638
 
639
struct pardevice *
640
parport_register_device(struct parport *port, const char *name,
641
                        int (*pf)(void *), void (*kf)(void *),
642
                        void (*irq_func)(int, void *, struct pt_regs *),
643
                        int flags, void *handle)
644
{
645
        struct pardevice *tmp;
646
 
647
        if (port->physport->flags & PARPORT_FLAG_EXCL) {
648
                /* An exclusive device is registered. */
649
                printk (KERN_DEBUG "%s: no more devices allowed\n",
650
                        port->name);
651
                return NULL;
652
        }
653
 
654
        if (flags & PARPORT_DEV_LURK) {
655
                if (!pf || !kf) {
656
                        printk(KERN_INFO "%s: refused to register lurking device (%s) without callbacks\n", port->name, name);
657
                        return NULL;
658
                }
659
        }
660
 
661
        /* We up our own module reference count, and that of the port
662
           on which a device is to be registered, to ensure that
663
           neither of us gets unloaded while we sleep in (e.g.)
664
           kmalloc.  To be absolutely safe, we have to require that
665
           our caller doesn't sleep in between parport_enumerate and
666
           parport_register_device.. */
667
        inc_parport_count();
668
        port->ops->inc_use_count();
669
        parport_get_port (port);
670
 
671
        tmp = kmalloc(sizeof(struct pardevice), GFP_KERNEL);
672
        if (tmp == NULL) {
673
                printk(KERN_WARNING "%s: memory squeeze, couldn't register %s.\n", port->name, name);
674
                goto out;
675
        }
676
 
677
        tmp->state = kmalloc(sizeof(struct parport_state), GFP_KERNEL);
678
        if (tmp->state == NULL) {
679
                printk(KERN_WARNING "%s: memory squeeze, couldn't register %s.\n", port->name, name);
680
                goto out_free_pardevice;
681
        }
682
 
683
        tmp->name = name;
684
        tmp->port = port;
685
        tmp->daisy = -1;
686
        tmp->preempt = pf;
687
        tmp->wakeup = kf;
688
        tmp->private = handle;
689
        tmp->flags = flags;
690
        tmp->irq_func = irq_func;
691
        tmp->waiting = 0;
692
        tmp->timeout = 5 * HZ;
693
 
694
        /* Chain this onto the list */
695
        tmp->prev = NULL;
696
        /*
697
         * This function must not run from an irq handler so we don' t need
698
         * to clear irq on the local CPU. -arca
699
         */
700
        spin_lock(&port->physport->pardevice_lock);
701
 
702
        if (flags & PARPORT_DEV_EXCL) {
703
                if (port->physport->devices) {
704
                        spin_unlock (&port->physport->pardevice_lock);
705
                        printk (KERN_DEBUG
706
                                "%s: cannot grant exclusive access for "
707
                                "device %s\n", port->name, name);
708
                        goto out_free_all;
709
                }
710
                port->flags |= PARPORT_FLAG_EXCL;
711
        }
712
 
713
        tmp->next = port->physport->devices;
714
        wmb(); /* Make sure that tmp->next is written before it's
715
                  added to the list; see comments marked 'no locking
716
                  required' */
717
        if (port->physport->devices)
718
                port->physport->devices->prev = tmp;
719
        port->physport->devices = tmp;
720
        spin_unlock(&port->physport->pardevice_lock);
721
 
722
        init_waitqueue_head(&tmp->wait_q);
723
        tmp->timeslice = parport_default_timeslice;
724
        tmp->waitnext = tmp->waitprev = NULL;
725
 
726
        /*
727
         * This has to be run as last thing since init_state may need other
728
         * pardevice fields. -arca
729
         */
730
        port->ops->init_state(tmp, tmp->state);
731
        parport_device_proc_register(tmp);
732
        return tmp;
733
 
734
 out_free_all:
735
        kfree (tmp->state);
736
 out_free_pardevice:
737
        kfree (tmp);
738
 out:
739
        dec_parport_count();
740
        port->ops->dec_use_count();
741
        parport_put_port (port);
742
        return NULL;
743
}
744
 
745
/**
746
 *      parport_unregister_device - deregister a device on a parallel port
747
 *      @dev: pointer to structure representing device
748
 *
749
 *      This undoes the effect of parport_register_device().
750
 **/
751
 
752
void parport_unregister_device(struct pardevice *dev)
753
{
754
        struct parport *port;
755
 
756
#ifdef PARPORT_PARANOID
757
        if (dev == NULL) {
758
                printk(KERN_ERR "parport_unregister_device: passed NULL\n");
759
                return;
760
        }
761
#endif
762
 
763
        parport_device_proc_unregister(dev);
764
 
765
        port = dev->port->physport;
766
 
767
        if (port->cad == dev) {
768
                printk(KERN_DEBUG "%s: %s forgot to release port\n",
769
                       port->name, dev->name);
770
                parport_release (dev);
771
        }
772
 
773
        spin_lock(&port->pardevice_lock);
774
        if (dev->next)
775
                dev->next->prev = dev->prev;
776
        if (dev->prev)
777
                dev->prev->next = dev->next;
778
        else
779
                port->devices = dev->next;
780
 
781
        if (dev->flags & PARPORT_DEV_EXCL)
782
                port->flags &= ~PARPORT_FLAG_EXCL;
783
 
784
        spin_unlock(&port->pardevice_lock);
785
 
786
        /* Make sure we haven't left any pointers around in the wait
787
         * list. */
788
        spin_lock (&port->waitlist_lock);
789
        if (dev->waitprev || dev->waitnext || port->waithead == dev) {
790
                if (dev->waitprev)
791
                        dev->waitprev->waitnext = dev->waitnext;
792
                else
793
                        port->waithead = dev->waitnext;
794
                if (dev->waitnext)
795
                        dev->waitnext->waitprev = dev->waitprev;
796
                else
797
                        port->waittail = dev->waitprev;
798
        }
799
        spin_unlock (&port->waitlist_lock);
800
 
801
        kfree(dev->state);
802
        kfree(dev);
803
 
804
        dec_parport_count();
805
        port->ops->dec_use_count();
806
        parport_put_port (port);
807
 
808
        /* Yes, that's right, someone _could_ still have a pointer to
809
         * port, if they used parport_enumerate.  That's why they
810
         * shouldn't use it (and use parport_register_driver instead)..
811
         */
812
}
813
 
814
/**
815
 *      parport_find_number - find a parallel port by number
816
 *      @number: parallel port number
817
 *
818
 *      This returns the parallel port with the specified number, or
819
 *      %NULL if there is none.
820
 *
821
 *      There is an implicit parport_get_port() done already; to throw
822
 *      away the reference to the port that parport_find_number()
823
 *      gives you, use parport_put_port().
824
 */
825
 
826
struct parport *parport_find_number (int number)
827
{
828
        struct parport *port, *result = NULL;
829
 
830
        if (!portlist)
831
                get_lowlevel_driver ();
832
 
833
        spin_lock (&parportlist_lock);
834
        for (port = portlist; port; port = port->next)
835
                if (port->number == number) {
836
                        result = parport_get_port (port);
837
                        break;
838
                }
839
        spin_unlock (&parportlist_lock);
840
        return result;
841
}
842
 
843
/**
844
 *      parport_find_base - find a parallel port by base address
845
 *      @base: base I/O address
846
 *
847
 *      This returns the parallel port with the specified base
848
 *      address, or %NULL if there is none.
849
 *
850
 *      There is an implicit parport_get_port() done already; to throw
851
 *      away the reference to the port that parport_find_base()
852
 *      gives you, use parport_put_port().
853
 */
854
 
855
struct parport *parport_find_base (unsigned long base)
856
{
857
        struct parport *port, *result = NULL;
858
 
859
        if (!portlist)
860
                get_lowlevel_driver ();
861
 
862
        spin_lock (&parportlist_lock);
863
        for (port = portlist; port; port = port->next)
864
                if (port->base == base) {
865
                        result = parport_get_port (port);
866
                        break;
867
                }
868
        spin_unlock (&parportlist_lock);
869
        return result;
870
}
871
 
872
/**
873
 *      parport_claim - claim access to a parallel port device
874
 *      @dev: pointer to structure representing a device on the port
875
 *
876
 *      This function will not block and so can be used from interrupt
877
 *      context.  If parport_claim() succeeds in claiming access to
878
 *      the port it returns zero and the port is available to use.  It
879
 *      may fail (returning non-zero) if the port is in use by another
880
 *      driver and that driver is not willing to relinquish control of
881
 *      the port.
882
 **/
883
 
884
int parport_claim(struct pardevice *dev)
885
{
886
        struct pardevice *oldcad;
887
        struct parport *port = dev->port->physport;
888
        unsigned long flags;
889
 
890
        if (port->cad == dev) {
891
                printk(KERN_INFO "%s: %s already owner\n",
892
                       dev->port->name,dev->name);
893
                return 0;
894
        }
895
 
896
        /* Preempt any current device */
897
        write_lock_irqsave (&port->cad_lock, flags);
898
        if ((oldcad = port->cad) != NULL) {
899
                if (oldcad->preempt) {
900
                        if (oldcad->preempt(oldcad->private))
901
                                goto blocked;
902
                        port->ops->save_state(port, dev->state);
903
                } else
904
                        goto blocked;
905
 
906
                if (port->cad != oldcad) {
907
                        /* I think we'll actually deadlock rather than
908
                           get here, but just in case.. */
909
                        printk(KERN_WARNING
910
                               "%s: %s released port when preempted!\n",
911
                               port->name, oldcad->name);
912
                        if (port->cad)
913
                                goto blocked;
914
                }
915
        }
916
 
917
        /* Can't fail from now on, so mark ourselves as no longer waiting.  */
918
        if (dev->waiting & 1) {
919
                dev->waiting = 0;
920
 
921
                /* Take ourselves out of the wait list again.  */
922
                spin_lock_irq (&port->waitlist_lock);
923
                if (dev->waitprev)
924
                        dev->waitprev->waitnext = dev->waitnext;
925
                else
926
                        port->waithead = dev->waitnext;
927
                if (dev->waitnext)
928
                        dev->waitnext->waitprev = dev->waitprev;
929
                else
930
                        port->waittail = dev->waitprev;
931
                spin_unlock_irq (&port->waitlist_lock);
932
                dev->waitprev = dev->waitnext = NULL;
933
        }
934
 
935
        /* Now we do the change of devices */
936
        port->cad = dev;
937
 
938
#ifdef CONFIG_PARPORT_1284
939
        /* If it's a mux port, select it. */
940
        if (dev->port->muxport >= 0) {
941
                /* FIXME */
942
                port->muxsel = dev->port->muxport;
943
        }
944
 
945
        /* If it's a daisy chain device, select it. */
946
        if (dev->daisy >= 0) {
947
                /* This could be lazier. */
948
                if (!parport_daisy_select (port, dev->daisy,
949
                                           IEEE1284_MODE_COMPAT))
950
                        port->daisy = dev->daisy;
951
        }
952
#endif /* IEEE1284.3 support */
953
 
954
        /* Restore control registers */
955
        port->ops->restore_state(port, dev->state);
956
        write_unlock_irqrestore(&port->cad_lock, flags);
957
        dev->time = jiffies;
958
        return 0;
959
 
960
blocked:
961
        /* If this is the first time we tried to claim the port, register an
962
           interest.  This is only allowed for devices sleeping in
963
           parport_claim_or_block(), or those with a wakeup function.  */
964
 
965
        /* The cad_lock is still held for writing here */
966
        if (dev->waiting & 2 || dev->wakeup) {
967
                spin_lock (&port->waitlist_lock);
968
                if (test_and_set_bit(0, &dev->waiting) == 0) {
969
                        /* First add ourselves to the end of the wait list. */
970
                        dev->waitnext = NULL;
971
                        dev->waitprev = port->waittail;
972
                        if (port->waittail) {
973
                                port->waittail->waitnext = dev;
974
                                port->waittail = dev;
975
                        } else
976
                                port->waithead = port->waittail = dev;
977
                }
978
                spin_unlock (&port->waitlist_lock);
979
        }
980
        write_unlock_irqrestore (&port->cad_lock, flags);
981
        return -EAGAIN;
982
}
983
 
984
/**
985
 *      parport_claim_or_block - claim access to a parallel port device
986
 *      @dev: pointer to structure representing a device on the port
987
 *
988
 *      This behaves like parport_claim(), but will block if necessary
989
 *      to wait for the port to be free.  A return value of 1
990
 *      indicates that it slept; 0 means that it succeeded without
991
 *      needing to sleep.  A negative error code indicates failure.
992
 **/
993
 
994
int parport_claim_or_block(struct pardevice *dev)
995
{
996
        int r;
997
 
998
        /* Signal to parport_claim() that we can wait even without a
999
           wakeup function.  */
1000
        dev->waiting = 2;
1001
 
1002
        /* Try to claim the port.  If this fails, we need to sleep.  */
1003
        r = parport_claim(dev);
1004
        if (r == -EAGAIN) {
1005
                unsigned long flags;
1006
#ifdef PARPORT_DEBUG_SHARING
1007
                printk(KERN_DEBUG "%s: parport_claim() returned -EAGAIN\n", dev->name);
1008
#endif
1009
                save_flags (flags);
1010
                cli();
1011
                /* If dev->waiting is clear now, an interrupt
1012
                   gave us the port and we would deadlock if we slept.  */
1013
                if (dev->waiting) {
1014
                        interruptible_sleep_on (&dev->wait_q);
1015
                        if (signal_pending (current)) {
1016
                                restore_flags (flags);
1017
                                return -EINTR;
1018
                        }
1019
                        r = 1;
1020
                } else {
1021
                        r = 0;
1022
#ifdef PARPORT_DEBUG_SHARING
1023
                        printk(KERN_DEBUG "%s: didn't sleep in parport_claim_or_block()\n",
1024
                               dev->name);
1025
#endif
1026
                }
1027
                restore_flags(flags);
1028
#ifdef PARPORT_DEBUG_SHARING
1029
                if (dev->port->physport->cad != dev)
1030
                        printk(KERN_DEBUG "%s: exiting parport_claim_or_block "
1031
                               "but %s owns port!\n", dev->name,
1032
                               dev->port->physport->cad ?
1033
                               dev->port->physport->cad->name:"nobody");
1034
#endif
1035
        }
1036
        dev->waiting = 0;
1037
        return r;
1038
}
1039
 
1040
/**
1041
 *      parport_release - give up access to a parallel port device
1042
 *      @dev: pointer to structure representing parallel port device
1043
 *
1044
 *      This function cannot fail, but it should not be called without
1045
 *      the port claimed.  Similarly, if the port is already claimed
1046
 *      you should not try claiming it again.
1047
 **/
1048
 
1049
void parport_release(struct pardevice *dev)
1050
{
1051
        struct parport *port = dev->port->physport;
1052
        struct pardevice *pd;
1053
        unsigned long flags;
1054
 
1055
        /* Make sure that dev is the current device */
1056
        write_lock_irqsave(&port->cad_lock, flags);
1057
        if (port->cad != dev) {
1058
                write_unlock_irqrestore (&port->cad_lock, flags);
1059
                printk(KERN_WARNING "%s: %s tried to release parport "
1060
                       "when not owner\n", port->name, dev->name);
1061
                return;
1062
        }
1063
 
1064
#ifdef CONFIG_PARPORT_1284
1065
        /* If this is on a mux port, deselect it. */
1066
        if (dev->port->muxport >= 0) {
1067
                /* FIXME */
1068
                port->muxsel = -1;
1069
        }
1070
 
1071
        /* If this is a daisy device, deselect it. */
1072
        if (dev->daisy >= 0) {
1073
                parport_daisy_deselect_all (port);
1074
                port->daisy = -1;
1075
        }
1076
#endif
1077
 
1078
        port->cad = NULL;
1079
        write_unlock_irqrestore(&port->cad_lock, flags);
1080
 
1081
        /* Save control registers */
1082
        port->ops->save_state(port, dev->state);
1083
 
1084
        /* If anybody is waiting, find out who's been there longest and
1085
           then wake them up. (Note: no locking required) */
1086
        /* !!! LOCKING IS NEEDED HERE */
1087
        for (pd = port->waithead; pd; pd = pd->waitnext) {
1088
                if (pd->waiting & 2) { /* sleeping in claim_or_block */
1089
                        parport_claim(pd);
1090
                        if (waitqueue_active(&pd->wait_q))
1091
                                wake_up_interruptible(&pd->wait_q);
1092
                        return;
1093
                } else if (pd->wakeup) {
1094
                        pd->wakeup(pd->private);
1095
                        if (dev->port->cad) /* racy but no matter */
1096
                                return;
1097
                } else {
1098
                        printk(KERN_ERR "%s: don't know how to wake %s\n", port->name, pd->name);
1099
                }
1100
        }
1101
 
1102
        /* Nobody was waiting, so walk the list to see if anyone is
1103
           interested in being woken up. (Note: no locking required) */
1104
        /* !!! LOCKING IS NEEDED HERE */
1105
        for (pd = port->devices; (port->cad == NULL) && pd; pd = pd->next) {
1106
                if (pd->wakeup && pd != dev)
1107
                        pd->wakeup(pd->private);
1108
        }
1109
}
1110
 
1111
static int parport_parse_params (int nports, const char *str[], int val[],
1112
                                 int automatic, int none, int nofifo)
1113
{
1114
        unsigned int i;
1115
        for (i = 0; i < nports && str[i]; i++) {
1116
                if (!strncmp(str[i], "auto", 4))
1117
                        val[i] = automatic;
1118
                else if (!strncmp(str[i], "none", 4))
1119
                        val[i] = none;
1120
                else if (nofifo && !strncmp(str[i], "nofifo", 4))
1121
                        val[i] = nofifo;
1122
                else {
1123
                        char *ep;
1124
                        unsigned long r = simple_strtoul(str[i], &ep, 0);
1125
                        if (ep != str[i])
1126
                                val[i] = r;
1127
                        else {
1128
                                printk(KERN_ERR "parport: bad specifier `%s'\n", str[i]);
1129
                                return -1;
1130
                        }
1131
                }
1132
        }
1133
 
1134
        return 0;
1135
}
1136
 
1137
int parport_parse_irqs(int nports, const char *irqstr[], int irqval[])
1138
{
1139
        return parport_parse_params (nports, irqstr, irqval, PARPORT_IRQ_AUTO,
1140
                                     PARPORT_IRQ_NONE, 0);
1141
}
1142
 
1143
int parport_parse_dmas(int nports, const char *dmastr[], int dmaval[])
1144
{
1145
        return parport_parse_params (nports, dmastr, dmaval, PARPORT_DMA_AUTO,
1146
                                     PARPORT_DMA_NONE, PARPORT_DMA_NOFIFO);
1147
}
1148
MODULE_LICENSE("GPL");

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.