Merge branch 'efi-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / block / paride / pf.c
1 /* 
2         pf.c    (c) 1997-8  Grant R. Guenther <grant@torque.net>
3                             Under the terms of the GNU General Public License.
4
5         This is the high-level driver for parallel port ATAPI disk
6         drives based on chips supported by the paride module.
7
8         By default, the driver will autoprobe for a single parallel
9         port ATAPI disk drive, but if their individual parameters are
10         specified, the driver can handle up to 4 drives.
11
12         The behaviour of the pf driver can be altered by setting
13         some parameters from the insmod command line.  The following
14         parameters are adjustable:
15
16             drive0      These four arguments can be arrays of       
17             drive1      1-7 integers as follows:
18             drive2
19             drive3      <prt>,<pro>,<uni>,<mod>,<slv>,<lun>,<dly>
20
21                         Where,
22
23                 <prt>   is the base of the parallel port address for
24                         the corresponding drive.  (required)
25
26                 <pro>   is the protocol number for the adapter that
27                         supports this drive.  These numbers are
28                         logged by 'paride' when the protocol modules
29                         are initialised.  (0 if not given)
30
31                 <uni>   for those adapters that support chained
32                         devices, this is the unit selector for the
33                         chain of devices on the given port.  It should
34                         be zero for devices that don't support chaining.
35                         (0 if not given)
36
37                 <mod>   this can be -1 to choose the best mode, or one
38                         of the mode numbers supported by the adapter.
39                         (-1 if not given)
40
41                 <slv>   ATAPI CDroms can be jumpered to master or slave.
42                         Set this to 0 to choose the master drive, 1 to
43                         choose the slave, -1 (the default) to choose the
44                         first drive found.
45
46                 <lun>   Some ATAPI devices support multiple LUNs.
47                         One example is the ATAPI PD/CD drive from
48                         Matshita/Panasonic.  This device has a 
49                         CD drive on LUN 0 and a PD drive on LUN 1.
50                         By default, the driver will search for the
51                         first LUN with a supported device.  Set 
52                         this parameter to force it to use a specific
53                         LUN.  (default -1)
54
55                 <dly>   some parallel ports require the driver to 
56                         go more slowly.  -1 sets a default value that
57                         should work with the chosen protocol.  Otherwise,
58                         set this to a small integer, the larger it is
59                         the slower the port i/o.  In some cases, setting
60                         this to zero will speed up the device. (default -1)
61
62             major       You may use this parameter to override the
63                         default major number (47) that this driver
64                         will use.  Be sure to change the device
65                         name as well.
66
67             name        This parameter is a character string that
68                         contains the name the kernel will use for this
69                         device (in /proc output, for instance).
70                         (default "pf").
71
72             cluster     The driver will attempt to aggregate requests
73                         for adjacent blocks into larger multi-block
74                         clusters.  The maximum cluster size (in 512
75                         byte sectors) is set with this parameter.
76                         (default 64)
77
78             verbose     This parameter controls the amount of logging
79                         that the driver will do.  Set it to 0 for
80                         normal operation, 1 to see autoprobe progress
81                         messages, or 2 to see additional debugging
82                         output.  (default 0)
83  
84             nice        This parameter controls the driver's use of
85                         idle CPU time, at the expense of some speed.
86
87         If this driver is built into the kernel, you can use the
88         following command line parameters, with the same values
89         as the corresponding module parameters listed above:
90
91             pf.drive0
92             pf.drive1
93             pf.drive2
94             pf.drive3
95             pf.cluster
96             pf.nice
97
98         In addition, you can use the parameter pf.disable to disable
99         the driver entirely.
100
101 */
102
103 /* Changes:
104
105         1.01    GRG 1998.05.03  Changes for SMP.  Eliminate sti().
106                                 Fix for drives that don't clear STAT_ERR
107                                 until after next CDB delivered.
108                                 Small change in pf_completion to round
109                                 up transfer size.
110         1.02    GRG 1998.06.16  Eliminated an Ugh
111         1.03    GRG 1998.08.16  Use HZ in loop timings, extra debugging
112         1.04    GRG 1998.09.24  Added jumbo support
113
114 */
115
116 #define PF_VERSION      "1.04"
117 #define PF_MAJOR        47
118 #define PF_NAME         "pf"
119 #define PF_UNITS        4
120
121 #include <linux/types.h>
122
123 /* Here are things one can override from the insmod command.
124    Most are autoprobed by paride unless set here.  Verbose is off
125    by default.
126
127 */
128
129 static bool verbose = 0;
130 static int major = PF_MAJOR;
131 static char *name = PF_NAME;
132 static int cluster = 64;
133 static int nice = 0;
134 static int disable = 0;
135
136 static int drive0[7] = { 0, 0, 0, -1, -1, -1, -1 };
137 static int drive1[7] = { 0, 0, 0, -1, -1, -1, -1 };
138 static int drive2[7] = { 0, 0, 0, -1, -1, -1, -1 };
139 static int drive3[7] = { 0, 0, 0, -1, -1, -1, -1 };
140
141 static int (*drives[4])[7] = {&drive0, &drive1, &drive2, &drive3};
142 static int pf_drive_count;
143
144 enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV, D_LUN, D_DLY};
145
146 /* end of parameters */
147
148 #include <linux/module.h>
149 #include <linux/init.h>
150 #include <linux/fs.h>
151 #include <linux/delay.h>
152 #include <linux/hdreg.h>
153 #include <linux/cdrom.h>
154 #include <linux/spinlock.h>
155 #include <linux/blk-mq.h>
156 #include <linux/blkpg.h>
157 #include <linux/mutex.h>
158 #include <linux/uaccess.h>
159
160 static DEFINE_MUTEX(pf_mutex);
161 static DEFINE_SPINLOCK(pf_spin_lock);
162
163 module_param(verbose, bool, 0644);
164 module_param(major, int, 0);
165 module_param(name, charp, 0);
166 module_param(cluster, int, 0);
167 module_param(nice, int, 0);
168 module_param_array(drive0, int, NULL, 0);
169 module_param_array(drive1, int, NULL, 0);
170 module_param_array(drive2, int, NULL, 0);
171 module_param_array(drive3, int, NULL, 0);
172
173 #include "paride.h"
174 #include "pseudo.h"
175
176 /* constants for faking geometry numbers */
177
178 #define PF_FD_MAX       8192    /* use FD geometry under this size */
179 #define PF_FD_HDS       2
180 #define PF_FD_SPT       18
181 #define PF_HD_HDS       64
182 #define PF_HD_SPT       32
183
184 #define PF_MAX_RETRIES  5
185 #define PF_TMO          800     /* interrupt timeout in jiffies */
186 #define PF_SPIN_DEL     50      /* spin delay in micro-seconds  */
187
188 #define PF_SPIN         (1000000*PF_TMO)/(HZ*PF_SPIN_DEL)
189
190 #define STAT_ERR        0x00001
191 #define STAT_INDEX      0x00002
192 #define STAT_ECC        0x00004
193 #define STAT_DRQ        0x00008
194 #define STAT_SEEK       0x00010
195 #define STAT_WRERR      0x00020
196 #define STAT_READY      0x00040
197 #define STAT_BUSY       0x00080
198
199 #define ATAPI_REQ_SENSE         0x03
200 #define ATAPI_LOCK              0x1e
201 #define ATAPI_DOOR              0x1b
202 #define ATAPI_MODE_SENSE        0x5a
203 #define ATAPI_CAPACITY          0x25
204 #define ATAPI_IDENTIFY          0x12
205 #define ATAPI_READ_10           0x28
206 #define ATAPI_WRITE_10          0x2a
207
208 static int pf_open(struct block_device *bdev, fmode_t mode);
209 static blk_status_t pf_queue_rq(struct blk_mq_hw_ctx *hctx,
210                                 const struct blk_mq_queue_data *bd);
211 static int pf_ioctl(struct block_device *bdev, fmode_t mode,
212                     unsigned int cmd, unsigned long arg);
213 static int pf_getgeo(struct block_device *bdev, struct hd_geometry *geo);
214
215 static void pf_release(struct gendisk *disk, fmode_t mode);
216
217 static int pf_detect(void);
218 static void do_pf_read(void);
219 static void do_pf_read_start(void);
220 static void do_pf_write(void);
221 static void do_pf_write_start(void);
222 static void do_pf_read_drq(void);
223 static void do_pf_write_done(void);
224
225 #define PF_NM           0
226 #define PF_RO           1
227 #define PF_RW           2
228
229 #define PF_NAMELEN      8
230
231 struct pf_unit {
232         struct pi_adapter pia;  /* interface to paride layer */
233         struct pi_adapter *pi;
234         int removable;          /* removable media device  ?  */
235         int media_status;       /* media present ?  WP ? */
236         int drive;              /* drive */
237         int lun;
238         int access;             /* count of active opens ... */
239         int present;            /* device present ? */
240         char name[PF_NAMELEN];  /* pf0, pf1, ... */
241         struct gendisk *disk;
242         struct blk_mq_tag_set tag_set;
243         struct list_head rq_list;
244 };
245
246 static struct pf_unit units[PF_UNITS];
247
248 static int pf_identify(struct pf_unit *pf);
249 static void pf_lock(struct pf_unit *pf, int func);
250 static void pf_eject(struct pf_unit *pf);
251 static unsigned int pf_check_events(struct gendisk *disk,
252                                     unsigned int clearing);
253
254 static char pf_scratch[512];    /* scratch block buffer */
255
256 /* the variables below are used mainly in the I/O request engine, which
257    processes only one request at a time.
258 */
259
260 static int pf_retries = 0;      /* i/o error retry count */
261 static int pf_busy = 0;         /* request being processed ? */
262 static struct request *pf_req;  /* current request */
263 static int pf_block;            /* address of next requested block */
264 static int pf_count;            /* number of blocks still to do */
265 static int pf_run;              /* sectors in current cluster */
266 static int pf_cmd;              /* current command READ/WRITE */
267 static struct pf_unit *pf_current;/* unit of current request */
268 static int pf_mask;             /* stopper for pseudo-int */
269 static char *pf_buf;            /* buffer for request in progress */
270 static void *par_drv;           /* reference of parport driver */
271
272 /* kernel glue structures */
273
274 static const struct block_device_operations pf_fops = {
275         .owner          = THIS_MODULE,
276         .open           = pf_open,
277         .release        = pf_release,
278         .ioctl          = pf_ioctl,
279         .getgeo         = pf_getgeo,
280         .check_events   = pf_check_events,
281 };
282
283 static const struct blk_mq_ops pf_mq_ops = {
284         .queue_rq       = pf_queue_rq,
285 };
286
287 static void __init pf_init_units(void)
288 {
289         struct pf_unit *pf;
290         int unit;
291
292         pf_drive_count = 0;
293         for (unit = 0, pf = units; unit < PF_UNITS; unit++, pf++) {
294                 struct gendisk *disk;
295
296                 disk = alloc_disk(1);
297                 if (!disk)
298                         continue;
299
300                 disk->queue = blk_mq_init_sq_queue(&pf->tag_set, &pf_mq_ops,
301                                                         1, BLK_MQ_F_SHOULD_MERGE);
302                 if (IS_ERR(disk->queue)) {
303                         put_disk(disk);
304                         disk->queue = NULL;
305                         continue;
306                 }
307
308                 INIT_LIST_HEAD(&pf->rq_list);
309                 disk->queue->queuedata = pf;
310                 blk_queue_max_segments(disk->queue, cluster);
311                 blk_queue_bounce_limit(disk->queue, BLK_BOUNCE_HIGH);
312                 pf->disk = disk;
313                 pf->pi = &pf->pia;
314                 pf->media_status = PF_NM;
315                 pf->drive = (*drives[unit])[D_SLV];
316                 pf->lun = (*drives[unit])[D_LUN];
317                 snprintf(pf->name, PF_NAMELEN, "%s%d", name, unit);
318                 disk->major = major;
319                 disk->first_minor = unit;
320                 strcpy(disk->disk_name, pf->name);
321                 disk->fops = &pf_fops;
322                 if (!(*drives[unit])[D_PRT])
323                         pf_drive_count++;
324         }
325 }
326
327 static int pf_open(struct block_device *bdev, fmode_t mode)
328 {
329         struct pf_unit *pf = bdev->bd_disk->private_data;
330         int ret;
331
332         mutex_lock(&pf_mutex);
333         pf_identify(pf);
334
335         ret = -ENODEV;
336         if (pf->media_status == PF_NM)
337                 goto out;
338
339         ret = -EROFS;
340         if ((pf->media_status == PF_RO) && (mode & FMODE_WRITE))
341                 goto out;
342
343         ret = 0;
344         pf->access++;
345         if (pf->removable)
346                 pf_lock(pf, 1);
347 out:
348         mutex_unlock(&pf_mutex);
349         return ret;
350 }
351
352 static int pf_getgeo(struct block_device *bdev, struct hd_geometry *geo)
353 {
354         struct pf_unit *pf = bdev->bd_disk->private_data;
355         sector_t capacity = get_capacity(pf->disk);
356
357         if (capacity < PF_FD_MAX) {
358                 geo->cylinders = sector_div(capacity, PF_FD_HDS * PF_FD_SPT);
359                 geo->heads = PF_FD_HDS;
360                 geo->sectors = PF_FD_SPT;
361         } else {
362                 geo->cylinders = sector_div(capacity, PF_HD_HDS * PF_HD_SPT);
363                 geo->heads = PF_HD_HDS;
364                 geo->sectors = PF_HD_SPT;
365         }
366
367         return 0;
368 }
369
370 static int pf_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg)
371 {
372         struct pf_unit *pf = bdev->bd_disk->private_data;
373
374         if (cmd != CDROMEJECT)
375                 return -EINVAL;
376
377         if (pf->access != 1)
378                 return -EBUSY;
379         mutex_lock(&pf_mutex);
380         pf_eject(pf);
381         mutex_unlock(&pf_mutex);
382
383         return 0;
384 }
385
386 static void pf_release(struct gendisk *disk, fmode_t mode)
387 {
388         struct pf_unit *pf = disk->private_data;
389
390         mutex_lock(&pf_mutex);
391         if (pf->access <= 0) {
392                 mutex_unlock(&pf_mutex);
393                 WARN_ON(1);
394                 return;
395         }
396
397         pf->access--;
398
399         if (!pf->access && pf->removable)
400                 pf_lock(pf, 0);
401
402         mutex_unlock(&pf_mutex);
403 }
404
405 static unsigned int pf_check_events(struct gendisk *disk, unsigned int clearing)
406 {
407         return DISK_EVENT_MEDIA_CHANGE;
408 }
409
410 static inline int status_reg(struct pf_unit *pf)
411 {
412         return pi_read_regr(pf->pi, 1, 6);
413 }
414
415 static inline int read_reg(struct pf_unit *pf, int reg)
416 {
417         return pi_read_regr(pf->pi, 0, reg);
418 }
419
420 static inline void write_reg(struct pf_unit *pf, int reg, int val)
421 {
422         pi_write_regr(pf->pi, 0, reg, val);
423 }
424
425 static int pf_wait(struct pf_unit *pf, int go, int stop, char *fun, char *msg)
426 {
427         int j, r, e, s, p;
428
429         j = 0;
430         while ((((r = status_reg(pf)) & go) || (stop && (!(r & stop))))
431                && (j++ < PF_SPIN))
432                 udelay(PF_SPIN_DEL);
433
434         if ((r & (STAT_ERR & stop)) || (j > PF_SPIN)) {
435                 s = read_reg(pf, 7);
436                 e = read_reg(pf, 1);
437                 p = read_reg(pf, 2);
438                 if (j > PF_SPIN)
439                         e |= 0x100;
440                 if (fun)
441                         printk("%s: %s %s: alt=0x%x stat=0x%x err=0x%x"
442                                " loop=%d phase=%d\n",
443                                pf->name, fun, msg, r, s, e, j, p);
444                 return (e << 8) + s;
445         }
446         return 0;
447 }
448
449 static int pf_command(struct pf_unit *pf, char *cmd, int dlen, char *fun)
450 {
451         pi_connect(pf->pi);
452
453         write_reg(pf, 6, 0xa0+0x10*pf->drive);
454
455         if (pf_wait(pf, STAT_BUSY | STAT_DRQ, 0, fun, "before command")) {
456                 pi_disconnect(pf->pi);
457                 return -1;
458         }
459
460         write_reg(pf, 4, dlen % 256);
461         write_reg(pf, 5, dlen / 256);
462         write_reg(pf, 7, 0xa0); /* ATAPI packet command */
463
464         if (pf_wait(pf, STAT_BUSY, STAT_DRQ, fun, "command DRQ")) {
465                 pi_disconnect(pf->pi);
466                 return -1;
467         }
468
469         if (read_reg(pf, 2) != 1) {
470                 printk("%s: %s: command phase error\n", pf->name, fun);
471                 pi_disconnect(pf->pi);
472                 return -1;
473         }
474
475         pi_write_block(pf->pi, cmd, 12);
476
477         return 0;
478 }
479
480 static int pf_completion(struct pf_unit *pf, char *buf, char *fun)
481 {
482         int r, s, n;
483
484         r = pf_wait(pf, STAT_BUSY, STAT_DRQ | STAT_READY | STAT_ERR,
485                     fun, "completion");
486
487         if ((read_reg(pf, 2) & 2) && (read_reg(pf, 7) & STAT_DRQ)) {
488                 n = (((read_reg(pf, 4) + 256 * read_reg(pf, 5)) +
489                       3) & 0xfffc);
490                 pi_read_block(pf->pi, buf, n);
491         }
492
493         s = pf_wait(pf, STAT_BUSY, STAT_READY | STAT_ERR, fun, "data done");
494
495         pi_disconnect(pf->pi);
496
497         return (r ? r : s);
498 }
499
500 static void pf_req_sense(struct pf_unit *pf, int quiet)
501 {
502         char rs_cmd[12] =
503             { ATAPI_REQ_SENSE, pf->lun << 5, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0 };
504         char buf[16];
505         int r;
506
507         r = pf_command(pf, rs_cmd, 16, "Request sense");
508         mdelay(1);
509         if (!r)
510                 pf_completion(pf, buf, "Request sense");
511
512         if ((!r) && (!quiet))
513                 printk("%s: Sense key: %x, ASC: %x, ASQ: %x\n",
514                        pf->name, buf[2] & 0xf, buf[12], buf[13]);
515 }
516
517 static int pf_atapi(struct pf_unit *pf, char *cmd, int dlen, char *buf, char *fun)
518 {
519         int r;
520
521         r = pf_command(pf, cmd, dlen, fun);
522         mdelay(1);
523         if (!r)
524                 r = pf_completion(pf, buf, fun);
525         if (r)
526                 pf_req_sense(pf, !fun);
527
528         return r;
529 }
530
531 static void pf_lock(struct pf_unit *pf, int func)
532 {
533         char lo_cmd[12] = { ATAPI_LOCK, pf->lun << 5, 0, 0, func, 0, 0, 0, 0, 0, 0, 0 };
534
535         pf_atapi(pf, lo_cmd, 0, pf_scratch, func ? "lock" : "unlock");
536 }
537
538 static void pf_eject(struct pf_unit *pf)
539 {
540         char ej_cmd[12] = { ATAPI_DOOR, pf->lun << 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 };
541
542         pf_lock(pf, 0);
543         pf_atapi(pf, ej_cmd, 0, pf_scratch, "eject");
544 }
545
546 #define PF_RESET_TMO   30       /* in tenths of a second */
547
548 static void pf_sleep(int cs)
549 {
550         schedule_timeout_interruptible(cs);
551 }
552
553 /* the ATAPI standard actually specifies the contents of all 7 registers
554    after a reset, but the specification is ambiguous concerning the last
555    two bytes, and different drives interpret the standard differently.
556  */
557
558 static int pf_reset(struct pf_unit *pf)
559 {
560         int i, k, flg;
561         int expect[5] = { 1, 1, 1, 0x14, 0xeb };
562
563         pi_connect(pf->pi);
564         write_reg(pf, 6, 0xa0+0x10*pf->drive);
565         write_reg(pf, 7, 8);
566
567         pf_sleep(20 * HZ / 1000);
568
569         k = 0;
570         while ((k++ < PF_RESET_TMO) && (status_reg(pf) & STAT_BUSY))
571                 pf_sleep(HZ / 10);
572
573         flg = 1;
574         for (i = 0; i < 5; i++)
575                 flg &= (read_reg(pf, i + 1) == expect[i]);
576
577         if (verbose) {
578                 printk("%s: Reset (%d) signature = ", pf->name, k);
579                 for (i = 0; i < 5; i++)
580                         printk("%3x", read_reg(pf, i + 1));
581                 if (!flg)
582                         printk(" (incorrect)");
583                 printk("\n");
584         }
585
586         pi_disconnect(pf->pi);
587         return flg - 1;
588 }
589
590 static void pf_mode_sense(struct pf_unit *pf)
591 {
592         char ms_cmd[12] =
593             { ATAPI_MODE_SENSE, pf->lun << 5, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0 };
594         char buf[8];
595
596         pf_atapi(pf, ms_cmd, 8, buf, "mode sense");
597         pf->media_status = PF_RW;
598         if (buf[3] & 0x80)
599                 pf->media_status = PF_RO;
600 }
601
602 static void xs(char *buf, char *targ, int offs, int len)
603 {
604         int j, k, l;
605
606         j = 0;
607         l = 0;
608         for (k = 0; k < len; k++)
609                 if ((buf[k + offs] != 0x20) || (buf[k + offs] != l))
610                         l = targ[j++] = buf[k + offs];
611         if (l == 0x20)
612                 j--;
613         targ[j] = 0;
614 }
615
616 static int xl(char *buf, int offs)
617 {
618         int v, k;
619
620         v = 0;
621         for (k = 0; k < 4; k++)
622                 v = v * 256 + (buf[k + offs] & 0xff);
623         return v;
624 }
625
626 static void pf_get_capacity(struct pf_unit *pf)
627 {
628         char rc_cmd[12] = { ATAPI_CAPACITY, pf->lun << 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
629         char buf[8];
630         int bs;
631
632         if (pf_atapi(pf, rc_cmd, 8, buf, "get capacity")) {
633                 pf->media_status = PF_NM;
634                 return;
635         }
636         set_capacity(pf->disk, xl(buf, 0) + 1);
637         bs = xl(buf, 4);
638         if (bs != 512) {
639                 set_capacity(pf->disk, 0);
640                 if (verbose)
641                         printk("%s: Drive %d, LUN %d,"
642                                " unsupported block size %d\n",
643                                pf->name, pf->drive, pf->lun, bs);
644         }
645 }
646
647 static int pf_identify(struct pf_unit *pf)
648 {
649         int dt, s;
650         char *ms[2] = { "master", "slave" };
651         char mf[10], id[18];
652         char id_cmd[12] =
653             { ATAPI_IDENTIFY, pf->lun << 5, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0 };
654         char buf[36];
655
656         s = pf_atapi(pf, id_cmd, 36, buf, "identify");
657         if (s)
658                 return -1;
659
660         dt = buf[0] & 0x1f;
661         if ((dt != 0) && (dt != 7)) {
662                 if (verbose)
663                         printk("%s: Drive %d, LUN %d, unsupported type %d\n",
664                                pf->name, pf->drive, pf->lun, dt);
665                 return -1;
666         }
667
668         xs(buf, mf, 8, 8);
669         xs(buf, id, 16, 16);
670
671         pf->removable = (buf[1] & 0x80);
672
673         pf_mode_sense(pf);
674         pf_mode_sense(pf);
675         pf_mode_sense(pf);
676
677         pf_get_capacity(pf);
678
679         printk("%s: %s %s, %s LUN %d, type %d",
680                pf->name, mf, id, ms[pf->drive], pf->lun, dt);
681         if (pf->removable)
682                 printk(", removable");
683         if (pf->media_status == PF_NM)
684                 printk(", no media\n");
685         else {
686                 if (pf->media_status == PF_RO)
687                         printk(", RO");
688                 printk(", %llu blocks\n",
689                         (unsigned long long)get_capacity(pf->disk));
690         }
691         return 0;
692 }
693
694 /*      returns  0, with id set if drive is detected
695                 -1, if drive detection failed
696 */
697 static int pf_probe(struct pf_unit *pf)
698 {
699         if (pf->drive == -1) {
700                 for (pf->drive = 0; pf->drive <= 1; pf->drive++)
701                         if (!pf_reset(pf)) {
702                                 if (pf->lun != -1)
703                                         return pf_identify(pf);
704                                 else
705                                         for (pf->lun = 0; pf->lun < 8; pf->lun++)
706                                                 if (!pf_identify(pf))
707                                                         return 0;
708                         }
709         } else {
710                 if (pf_reset(pf))
711                         return -1;
712                 if (pf->lun != -1)
713                         return pf_identify(pf);
714                 for (pf->lun = 0; pf->lun < 8; pf->lun++)
715                         if (!pf_identify(pf))
716                                 return 0;
717         }
718         return -1;
719 }
720
721 static int pf_detect(void)
722 {
723         struct pf_unit *pf = units;
724         int k, unit;
725
726         printk("%s: %s version %s, major %d, cluster %d, nice %d\n",
727                name, name, PF_VERSION, major, cluster, nice);
728
729         par_drv = pi_register_driver(name);
730         if (!par_drv) {
731                 pr_err("failed to register %s driver\n", name);
732                 return -1;
733         }
734         k = 0;
735         if (pf_drive_count == 0) {
736                 if (pi_init(pf->pi, 1, -1, -1, -1, -1, -1, pf_scratch, PI_PF,
737                             verbose, pf->name)) {
738                         if (!pf_probe(pf) && pf->disk) {
739                                 pf->present = 1;
740                                 k++;
741                         } else
742                                 pi_release(pf->pi);
743                 }
744
745         } else
746                 for (unit = 0; unit < PF_UNITS; unit++, pf++) {
747                         int *conf = *drives[unit];
748                         if (!conf[D_PRT])
749                                 continue;
750                         if (pi_init(pf->pi, 0, conf[D_PRT], conf[D_MOD],
751                                     conf[D_UNI], conf[D_PRO], conf[D_DLY],
752                                     pf_scratch, PI_PF, verbose, pf->name)) {
753                                 if (pf->disk && !pf_probe(pf)) {
754                                         pf->present = 1;
755                                         k++;
756                                 } else
757                                         pi_release(pf->pi);
758                         }
759                 }
760         if (k)
761                 return 0;
762
763         printk("%s: No ATAPI disk detected\n", name);
764         for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++)
765                 put_disk(pf->disk);
766         pi_unregister_driver(par_drv);
767         return -1;
768 }
769
770 /* The i/o request engine */
771
772 static int pf_start(struct pf_unit *pf, int cmd, int b, int c)
773 {
774         int i;
775         char io_cmd[12] = { cmd, pf->lun << 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
776
777         for (i = 0; i < 4; i++) {
778                 io_cmd[5 - i] = b & 0xff;
779                 b = b >> 8;
780         }
781
782         io_cmd[8] = c & 0xff;
783         io_cmd[7] = (c >> 8) & 0xff;
784
785         i = pf_command(pf, io_cmd, c * 512, "start i/o");
786
787         mdelay(1);
788
789         return i;
790 }
791
792 static int pf_ready(void)
793 {
794         return (((status_reg(pf_current) & (STAT_BUSY | pf_mask)) == pf_mask));
795 }
796
797 static int pf_queue;
798
799 static int set_next_request(void)
800 {
801         struct pf_unit *pf;
802         int old_pos = pf_queue;
803
804         do {
805                 pf = &units[pf_queue];
806                 if (++pf_queue == PF_UNITS)
807                         pf_queue = 0;
808                 if (pf->present && !list_empty(&pf->rq_list)) {
809                         pf_req = list_first_entry(&pf->rq_list, struct request,
810                                                         queuelist);
811                         list_del_init(&pf_req->queuelist);
812                         blk_mq_start_request(pf_req);
813                         break;
814                 }
815         } while (pf_queue != old_pos);
816
817         return pf_req != NULL;
818 }
819
820 static void pf_end_request(blk_status_t err)
821 {
822         if (!pf_req)
823                 return;
824         if (!blk_update_request(pf_req, err, blk_rq_cur_bytes(pf_req))) {
825                 __blk_mq_end_request(pf_req, err);
826                 pf_req = NULL;
827         }
828 }
829
830 static void pf_request(void)
831 {
832         if (pf_busy)
833                 return;
834 repeat:
835         if (!pf_req && !set_next_request())
836                 return;
837
838         pf_current = pf_req->rq_disk->private_data;
839         pf_block = blk_rq_pos(pf_req);
840         pf_run = blk_rq_sectors(pf_req);
841         pf_count = blk_rq_cur_sectors(pf_req);
842
843         if (pf_block + pf_count > get_capacity(pf_req->rq_disk)) {
844                 pf_end_request(BLK_STS_IOERR);
845                 goto repeat;
846         }
847
848         pf_cmd = rq_data_dir(pf_req);
849         pf_buf = bio_data(pf_req->bio);
850         pf_retries = 0;
851
852         pf_busy = 1;
853         if (pf_cmd == READ)
854                 pi_do_claimed(pf_current->pi, do_pf_read);
855         else if (pf_cmd == WRITE)
856                 pi_do_claimed(pf_current->pi, do_pf_write);
857         else {
858                 pf_busy = 0;
859                 pf_end_request(BLK_STS_IOERR);
860                 goto repeat;
861         }
862 }
863
864 static blk_status_t pf_queue_rq(struct blk_mq_hw_ctx *hctx,
865                                 const struct blk_mq_queue_data *bd)
866 {
867         struct pf_unit *pf = hctx->queue->queuedata;
868
869         spin_lock_irq(&pf_spin_lock);
870         list_add_tail(&bd->rq->queuelist, &pf->rq_list);
871         pf_request();
872         spin_unlock_irq(&pf_spin_lock);
873
874         return BLK_STS_OK;
875 }
876
877 static int pf_next_buf(void)
878 {
879         unsigned long saved_flags;
880
881         pf_count--;
882         pf_run--;
883         pf_buf += 512;
884         pf_block++;
885         if (!pf_run)
886                 return 1;
887         if (!pf_count) {
888                 spin_lock_irqsave(&pf_spin_lock, saved_flags);
889                 pf_end_request(0);
890                 spin_unlock_irqrestore(&pf_spin_lock, saved_flags);
891                 if (!pf_req)
892                         return 1;
893                 pf_count = blk_rq_cur_sectors(pf_req);
894                 pf_buf = bio_data(pf_req->bio);
895         }
896         return 0;
897 }
898
899 static inline void next_request(blk_status_t err)
900 {
901         unsigned long saved_flags;
902
903         spin_lock_irqsave(&pf_spin_lock, saved_flags);
904         pf_end_request(err);
905         pf_busy = 0;
906         pf_request();
907         spin_unlock_irqrestore(&pf_spin_lock, saved_flags);
908 }
909
910 /* detach from the calling context - in case the spinlock is held */
911 static void do_pf_read(void)
912 {
913         ps_set_intr(do_pf_read_start, NULL, 0, nice);
914 }
915
916 static void do_pf_read_start(void)
917 {
918         pf_busy = 1;
919
920         if (pf_start(pf_current, ATAPI_READ_10, pf_block, pf_run)) {
921                 pi_disconnect(pf_current->pi);
922                 if (pf_retries < PF_MAX_RETRIES) {
923                         pf_retries++;
924                         pi_do_claimed(pf_current->pi, do_pf_read_start);
925                         return;
926                 }
927                 next_request(BLK_STS_IOERR);
928                 return;
929         }
930         pf_mask = STAT_DRQ;
931         ps_set_intr(do_pf_read_drq, pf_ready, PF_TMO, nice);
932 }
933
934 static void do_pf_read_drq(void)
935 {
936         while (1) {
937                 if (pf_wait(pf_current, STAT_BUSY, STAT_DRQ | STAT_ERR,
938                             "read block", "completion") & STAT_ERR) {
939                         pi_disconnect(pf_current->pi);
940                         if (pf_retries < PF_MAX_RETRIES) {
941                                 pf_req_sense(pf_current, 0);
942                                 pf_retries++;
943                                 pi_do_claimed(pf_current->pi, do_pf_read_start);
944                                 return;
945                         }
946                         next_request(BLK_STS_IOERR);
947                         return;
948                 }
949                 pi_read_block(pf_current->pi, pf_buf, 512);
950                 if (pf_next_buf())
951                         break;
952         }
953         pi_disconnect(pf_current->pi);
954         next_request(0);
955 }
956
957 static void do_pf_write(void)
958 {
959         ps_set_intr(do_pf_write_start, NULL, 0, nice);
960 }
961
962 static void do_pf_write_start(void)
963 {
964         pf_busy = 1;
965
966         if (pf_start(pf_current, ATAPI_WRITE_10, pf_block, pf_run)) {
967                 pi_disconnect(pf_current->pi);
968                 if (pf_retries < PF_MAX_RETRIES) {
969                         pf_retries++;
970                         pi_do_claimed(pf_current->pi, do_pf_write_start);
971                         return;
972                 }
973                 next_request(BLK_STS_IOERR);
974                 return;
975         }
976
977         while (1) {
978                 if (pf_wait(pf_current, STAT_BUSY, STAT_DRQ | STAT_ERR,
979                             "write block", "data wait") & STAT_ERR) {
980                         pi_disconnect(pf_current->pi);
981                         if (pf_retries < PF_MAX_RETRIES) {
982                                 pf_retries++;
983                                 pi_do_claimed(pf_current->pi, do_pf_write_start);
984                                 return;
985                         }
986                         next_request(BLK_STS_IOERR);
987                         return;
988                 }
989                 pi_write_block(pf_current->pi, pf_buf, 512);
990                 if (pf_next_buf())
991                         break;
992         }
993         pf_mask = 0;
994         ps_set_intr(do_pf_write_done, pf_ready, PF_TMO, nice);
995 }
996
997 static void do_pf_write_done(void)
998 {
999         if (pf_wait(pf_current, STAT_BUSY, 0, "write block", "done") & STAT_ERR) {
1000                 pi_disconnect(pf_current->pi);
1001                 if (pf_retries < PF_MAX_RETRIES) {
1002                         pf_retries++;
1003                         pi_do_claimed(pf_current->pi, do_pf_write_start);
1004                         return;
1005                 }
1006                 next_request(BLK_STS_IOERR);
1007                 return;
1008         }
1009         pi_disconnect(pf_current->pi);
1010         next_request(0);
1011 }
1012
1013 static int __init pf_init(void)
1014 {                               /* preliminary initialisation */
1015         struct pf_unit *pf;
1016         int unit;
1017
1018         if (disable)
1019                 return -EINVAL;
1020
1021         pf_init_units();
1022
1023         if (pf_detect())
1024                 return -ENODEV;
1025         pf_busy = 0;
1026
1027         if (register_blkdev(major, name)) {
1028                 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++)
1029                         put_disk(pf->disk);
1030                 return -EBUSY;
1031         }
1032
1033         for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
1034                 struct gendisk *disk = pf->disk;
1035
1036                 if (!pf->present)
1037                         continue;
1038                 disk->private_data = pf;
1039                 add_disk(disk);
1040         }
1041         return 0;
1042 }
1043
1044 static void __exit pf_exit(void)
1045 {
1046         struct pf_unit *pf;
1047         int unit;
1048         unregister_blkdev(major, name);
1049         for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
1050                 if (!pf->present)
1051                         continue;
1052                 del_gendisk(pf->disk);
1053                 blk_cleanup_queue(pf->disk->queue);
1054                 blk_mq_free_tag_set(&pf->tag_set);
1055                 put_disk(pf->disk);
1056                 pi_release(pf->pi);
1057         }
1058 }
1059
1060 MODULE_LICENSE("GPL");
1061 module_init(pf_init)
1062 module_exit(pf_exit)