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 
pf_init_units(void)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 			disk->queue = NULL;
304 			put_disk(disk);
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 		disk->events = DISK_EVENT_MEDIA_CHANGE;
323 		if (!(*drives[unit])[D_PRT])
324 			pf_drive_count++;
325 	}
326 }
327 
pf_open(struct block_device * bdev,fmode_t mode)328 static int pf_open(struct block_device *bdev, fmode_t mode)
329 {
330 	struct pf_unit *pf = bdev->bd_disk->private_data;
331 	int ret;
332 
333 	mutex_lock(&pf_mutex);
334 	pf_identify(pf);
335 
336 	ret = -ENODEV;
337 	if (pf->media_status == PF_NM)
338 		goto out;
339 
340 	ret = -EROFS;
341 	if ((pf->media_status == PF_RO) && (mode & FMODE_WRITE))
342 		goto out;
343 
344 	ret = 0;
345 	pf->access++;
346 	if (pf->removable)
347 		pf_lock(pf, 1);
348 out:
349 	mutex_unlock(&pf_mutex);
350 	return ret;
351 }
352 
pf_getgeo(struct block_device * bdev,struct hd_geometry * geo)353 static int pf_getgeo(struct block_device *bdev, struct hd_geometry *geo)
354 {
355 	struct pf_unit *pf = bdev->bd_disk->private_data;
356 	sector_t capacity = get_capacity(pf->disk);
357 
358 	if (capacity < PF_FD_MAX) {
359 		geo->cylinders = sector_div(capacity, PF_FD_HDS * PF_FD_SPT);
360 		geo->heads = PF_FD_HDS;
361 		geo->sectors = PF_FD_SPT;
362 	} else {
363 		geo->cylinders = sector_div(capacity, PF_HD_HDS * PF_HD_SPT);
364 		geo->heads = PF_HD_HDS;
365 		geo->sectors = PF_HD_SPT;
366 	}
367 
368 	return 0;
369 }
370 
pf_ioctl(struct block_device * bdev,fmode_t mode,unsigned int cmd,unsigned long arg)371 static int pf_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg)
372 {
373 	struct pf_unit *pf = bdev->bd_disk->private_data;
374 
375 	if (cmd != CDROMEJECT)
376 		return -EINVAL;
377 
378 	if (pf->access != 1)
379 		return -EBUSY;
380 	mutex_lock(&pf_mutex);
381 	pf_eject(pf);
382 	mutex_unlock(&pf_mutex);
383 
384 	return 0;
385 }
386 
pf_release(struct gendisk * disk,fmode_t mode)387 static void pf_release(struct gendisk *disk, fmode_t mode)
388 {
389 	struct pf_unit *pf = disk->private_data;
390 
391 	mutex_lock(&pf_mutex);
392 	if (pf->access <= 0) {
393 		mutex_unlock(&pf_mutex);
394 		WARN_ON(1);
395 		return;
396 	}
397 
398 	pf->access--;
399 
400 	if (!pf->access && pf->removable)
401 		pf_lock(pf, 0);
402 
403 	mutex_unlock(&pf_mutex);
404 }
405 
pf_check_events(struct gendisk * disk,unsigned int clearing)406 static unsigned int pf_check_events(struct gendisk *disk, unsigned int clearing)
407 {
408 	return DISK_EVENT_MEDIA_CHANGE;
409 }
410 
status_reg(struct pf_unit * pf)411 static inline int status_reg(struct pf_unit *pf)
412 {
413 	return pi_read_regr(pf->pi, 1, 6);
414 }
415 
read_reg(struct pf_unit * pf,int reg)416 static inline int read_reg(struct pf_unit *pf, int reg)
417 {
418 	return pi_read_regr(pf->pi, 0, reg);
419 }
420 
write_reg(struct pf_unit * pf,int reg,int val)421 static inline void write_reg(struct pf_unit *pf, int reg, int val)
422 {
423 	pi_write_regr(pf->pi, 0, reg, val);
424 }
425 
pf_wait(struct pf_unit * pf,int go,int stop,char * fun,char * msg)426 static int pf_wait(struct pf_unit *pf, int go, int stop, char *fun, char *msg)
427 {
428 	int j, r, e, s, p;
429 
430 	j = 0;
431 	while ((((r = status_reg(pf)) & go) || (stop && (!(r & stop))))
432 	       && (j++ < PF_SPIN))
433 		udelay(PF_SPIN_DEL);
434 
435 	if ((r & (STAT_ERR & stop)) || (j > PF_SPIN)) {
436 		s = read_reg(pf, 7);
437 		e = read_reg(pf, 1);
438 		p = read_reg(pf, 2);
439 		if (j > PF_SPIN)
440 			e |= 0x100;
441 		if (fun)
442 			printk("%s: %s %s: alt=0x%x stat=0x%x err=0x%x"
443 			       " loop=%d phase=%d\n",
444 			       pf->name, fun, msg, r, s, e, j, p);
445 		return (e << 8) + s;
446 	}
447 	return 0;
448 }
449 
pf_command(struct pf_unit * pf,char * cmd,int dlen,char * fun)450 static int pf_command(struct pf_unit *pf, char *cmd, int dlen, char *fun)
451 {
452 	pi_connect(pf->pi);
453 
454 	write_reg(pf, 6, 0xa0+0x10*pf->drive);
455 
456 	if (pf_wait(pf, STAT_BUSY | STAT_DRQ, 0, fun, "before command")) {
457 		pi_disconnect(pf->pi);
458 		return -1;
459 	}
460 
461 	write_reg(pf, 4, dlen % 256);
462 	write_reg(pf, 5, dlen / 256);
463 	write_reg(pf, 7, 0xa0);	/* ATAPI packet command */
464 
465 	if (pf_wait(pf, STAT_BUSY, STAT_DRQ, fun, "command DRQ")) {
466 		pi_disconnect(pf->pi);
467 		return -1;
468 	}
469 
470 	if (read_reg(pf, 2) != 1) {
471 		printk("%s: %s: command phase error\n", pf->name, fun);
472 		pi_disconnect(pf->pi);
473 		return -1;
474 	}
475 
476 	pi_write_block(pf->pi, cmd, 12);
477 
478 	return 0;
479 }
480 
pf_completion(struct pf_unit * pf,char * buf,char * fun)481 static int pf_completion(struct pf_unit *pf, char *buf, char *fun)
482 {
483 	int r, s, n;
484 
485 	r = pf_wait(pf, STAT_BUSY, STAT_DRQ | STAT_READY | STAT_ERR,
486 		    fun, "completion");
487 
488 	if ((read_reg(pf, 2) & 2) && (read_reg(pf, 7) & STAT_DRQ)) {
489 		n = (((read_reg(pf, 4) + 256 * read_reg(pf, 5)) +
490 		      3) & 0xfffc);
491 		pi_read_block(pf->pi, buf, n);
492 	}
493 
494 	s = pf_wait(pf, STAT_BUSY, STAT_READY | STAT_ERR, fun, "data done");
495 
496 	pi_disconnect(pf->pi);
497 
498 	return (r ? r : s);
499 }
500 
pf_req_sense(struct pf_unit * pf,int quiet)501 static void pf_req_sense(struct pf_unit *pf, int quiet)
502 {
503 	char rs_cmd[12] =
504 	    { ATAPI_REQ_SENSE, pf->lun << 5, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0 };
505 	char buf[16];
506 	int r;
507 
508 	r = pf_command(pf, rs_cmd, 16, "Request sense");
509 	mdelay(1);
510 	if (!r)
511 		pf_completion(pf, buf, "Request sense");
512 
513 	if ((!r) && (!quiet))
514 		printk("%s: Sense key: %x, ASC: %x, ASQ: %x\n",
515 		       pf->name, buf[2] & 0xf, buf[12], buf[13]);
516 }
517 
pf_atapi(struct pf_unit * pf,char * cmd,int dlen,char * buf,char * fun)518 static int pf_atapi(struct pf_unit *pf, char *cmd, int dlen, char *buf, char *fun)
519 {
520 	int r;
521 
522 	r = pf_command(pf, cmd, dlen, fun);
523 	mdelay(1);
524 	if (!r)
525 		r = pf_completion(pf, buf, fun);
526 	if (r)
527 		pf_req_sense(pf, !fun);
528 
529 	return r;
530 }
531 
pf_lock(struct pf_unit * pf,int func)532 static void pf_lock(struct pf_unit *pf, int func)
533 {
534 	char lo_cmd[12] = { ATAPI_LOCK, pf->lun << 5, 0, 0, func, 0, 0, 0, 0, 0, 0, 0 };
535 
536 	pf_atapi(pf, lo_cmd, 0, pf_scratch, func ? "lock" : "unlock");
537 }
538 
pf_eject(struct pf_unit * pf)539 static void pf_eject(struct pf_unit *pf)
540 {
541 	char ej_cmd[12] = { ATAPI_DOOR, pf->lun << 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 };
542 
543 	pf_lock(pf, 0);
544 	pf_atapi(pf, ej_cmd, 0, pf_scratch, "eject");
545 }
546 
547 #define PF_RESET_TMO   30	/* in tenths of a second */
548 
pf_sleep(int cs)549 static void pf_sleep(int cs)
550 {
551 	schedule_timeout_interruptible(cs);
552 }
553 
554 /* the ATAPI standard actually specifies the contents of all 7 registers
555    after a reset, but the specification is ambiguous concerning the last
556    two bytes, and different drives interpret the standard differently.
557  */
558 
pf_reset(struct pf_unit * pf)559 static int pf_reset(struct pf_unit *pf)
560 {
561 	int i, k, flg;
562 	int expect[5] = { 1, 1, 1, 0x14, 0xeb };
563 
564 	pi_connect(pf->pi);
565 	write_reg(pf, 6, 0xa0+0x10*pf->drive);
566 	write_reg(pf, 7, 8);
567 
568 	pf_sleep(20 * HZ / 1000);
569 
570 	k = 0;
571 	while ((k++ < PF_RESET_TMO) && (status_reg(pf) & STAT_BUSY))
572 		pf_sleep(HZ / 10);
573 
574 	flg = 1;
575 	for (i = 0; i < 5; i++)
576 		flg &= (read_reg(pf, i + 1) == expect[i]);
577 
578 	if (verbose) {
579 		printk("%s: Reset (%d) signature = ", pf->name, k);
580 		for (i = 0; i < 5; i++)
581 			printk("%3x", read_reg(pf, i + 1));
582 		if (!flg)
583 			printk(" (incorrect)");
584 		printk("\n");
585 	}
586 
587 	pi_disconnect(pf->pi);
588 	return flg - 1;
589 }
590 
pf_mode_sense(struct pf_unit * pf)591 static void pf_mode_sense(struct pf_unit *pf)
592 {
593 	char ms_cmd[12] =
594 	    { ATAPI_MODE_SENSE, pf->lun << 5, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0 };
595 	char buf[8];
596 
597 	pf_atapi(pf, ms_cmd, 8, buf, "mode sense");
598 	pf->media_status = PF_RW;
599 	if (buf[3] & 0x80)
600 		pf->media_status = PF_RO;
601 }
602 
xs(char * buf,char * targ,int offs,int len)603 static void xs(char *buf, char *targ, int offs, int len)
604 {
605 	int j, k, l;
606 
607 	j = 0;
608 	l = 0;
609 	for (k = 0; k < len; k++)
610 		if ((buf[k + offs] != 0x20) || (buf[k + offs] != l))
611 			l = targ[j++] = buf[k + offs];
612 	if (l == 0x20)
613 		j--;
614 	targ[j] = 0;
615 }
616 
xl(char * buf,int offs)617 static int xl(char *buf, int offs)
618 {
619 	int v, k;
620 
621 	v = 0;
622 	for (k = 0; k < 4; k++)
623 		v = v * 256 + (buf[k + offs] & 0xff);
624 	return v;
625 }
626 
pf_get_capacity(struct pf_unit * pf)627 static void pf_get_capacity(struct pf_unit *pf)
628 {
629 	char rc_cmd[12] = { ATAPI_CAPACITY, pf->lun << 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
630 	char buf[8];
631 	int bs;
632 
633 	if (pf_atapi(pf, rc_cmd, 8, buf, "get capacity")) {
634 		pf->media_status = PF_NM;
635 		return;
636 	}
637 	set_capacity(pf->disk, xl(buf, 0) + 1);
638 	bs = xl(buf, 4);
639 	if (bs != 512) {
640 		set_capacity(pf->disk, 0);
641 		if (verbose)
642 			printk("%s: Drive %d, LUN %d,"
643 			       " unsupported block size %d\n",
644 			       pf->name, pf->drive, pf->lun, bs);
645 	}
646 }
647 
pf_identify(struct pf_unit * pf)648 static int pf_identify(struct pf_unit *pf)
649 {
650 	int dt, s;
651 	char *ms[2] = { "master", "slave" };
652 	char mf[10], id[18];
653 	char id_cmd[12] =
654 	    { ATAPI_IDENTIFY, pf->lun << 5, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0 };
655 	char buf[36];
656 
657 	s = pf_atapi(pf, id_cmd, 36, buf, "identify");
658 	if (s)
659 		return -1;
660 
661 	dt = buf[0] & 0x1f;
662 	if ((dt != 0) && (dt != 7)) {
663 		if (verbose)
664 			printk("%s: Drive %d, LUN %d, unsupported type %d\n",
665 			       pf->name, pf->drive, pf->lun, dt);
666 		return -1;
667 	}
668 
669 	xs(buf, mf, 8, 8);
670 	xs(buf, id, 16, 16);
671 
672 	pf->removable = (buf[1] & 0x80);
673 
674 	pf_mode_sense(pf);
675 	pf_mode_sense(pf);
676 	pf_mode_sense(pf);
677 
678 	pf_get_capacity(pf);
679 
680 	printk("%s: %s %s, %s LUN %d, type %d",
681 	       pf->name, mf, id, ms[pf->drive], pf->lun, dt);
682 	if (pf->removable)
683 		printk(", removable");
684 	if (pf->media_status == PF_NM)
685 		printk(", no media\n");
686 	else {
687 		if (pf->media_status == PF_RO)
688 			printk(", RO");
689 		printk(", %llu blocks\n",
690 			(unsigned long long)get_capacity(pf->disk));
691 	}
692 	return 0;
693 }
694 
695 /*	returns  0, with id set if drive is detected
696 	        -1, if drive detection failed
697 */
pf_probe(struct pf_unit * pf)698 static int pf_probe(struct pf_unit *pf)
699 {
700 	if (pf->drive == -1) {
701 		for (pf->drive = 0; pf->drive <= 1; pf->drive++)
702 			if (!pf_reset(pf)) {
703 				if (pf->lun != -1)
704 					return pf_identify(pf);
705 				else
706 					for (pf->lun = 0; pf->lun < 8; pf->lun++)
707 						if (!pf_identify(pf))
708 							return 0;
709 			}
710 	} else {
711 		if (pf_reset(pf))
712 			return -1;
713 		if (pf->lun != -1)
714 			return pf_identify(pf);
715 		for (pf->lun = 0; pf->lun < 8; pf->lun++)
716 			if (!pf_identify(pf))
717 				return 0;
718 	}
719 	return -1;
720 }
721 
pf_detect(void)722 static int pf_detect(void)
723 {
724 	struct pf_unit *pf = units;
725 	int k, unit;
726 
727 	printk("%s: %s version %s, major %d, cluster %d, nice %d\n",
728 	       name, name, PF_VERSION, major, cluster, nice);
729 
730 	par_drv = pi_register_driver(name);
731 	if (!par_drv) {
732 		pr_err("failed to register %s driver\n", name);
733 		return -1;
734 	}
735 	k = 0;
736 	if (pf_drive_count == 0) {
737 		if (pi_init(pf->pi, 1, -1, -1, -1, -1, -1, pf_scratch, PI_PF,
738 			    verbose, pf->name)) {
739 			if (!pf_probe(pf) && pf->disk) {
740 				pf->present = 1;
741 				k++;
742 			} else
743 				pi_release(pf->pi);
744 		}
745 
746 	} else
747 		for (unit = 0; unit < PF_UNITS; unit++, pf++) {
748 			int *conf = *drives[unit];
749 			if (!conf[D_PRT])
750 				continue;
751 			if (pi_init(pf->pi, 0, conf[D_PRT], conf[D_MOD],
752 				    conf[D_UNI], conf[D_PRO], conf[D_DLY],
753 				    pf_scratch, PI_PF, verbose, pf->name)) {
754 				if (pf->disk && !pf_probe(pf)) {
755 					pf->present = 1;
756 					k++;
757 				} else
758 					pi_release(pf->pi);
759 			}
760 		}
761 	if (k)
762 		return 0;
763 
764 	printk("%s: No ATAPI disk detected\n", name);
765 	for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
766 		if (!pf->disk)
767 			continue;
768 		blk_cleanup_queue(pf->disk->queue);
769 		pf->disk->queue = NULL;
770 		blk_mq_free_tag_set(&pf->tag_set);
771 		put_disk(pf->disk);
772 	}
773 	pi_unregister_driver(par_drv);
774 	return -1;
775 }
776 
777 /* The i/o request engine */
778 
pf_start(struct pf_unit * pf,int cmd,int b,int c)779 static int pf_start(struct pf_unit *pf, int cmd, int b, int c)
780 {
781 	int i;
782 	char io_cmd[12] = { cmd, pf->lun << 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
783 
784 	for (i = 0; i < 4; i++) {
785 		io_cmd[5 - i] = b & 0xff;
786 		b = b >> 8;
787 	}
788 
789 	io_cmd[8] = c & 0xff;
790 	io_cmd[7] = (c >> 8) & 0xff;
791 
792 	i = pf_command(pf, io_cmd, c * 512, "start i/o");
793 
794 	mdelay(1);
795 
796 	return i;
797 }
798 
pf_ready(void)799 static int pf_ready(void)
800 {
801 	return (((status_reg(pf_current) & (STAT_BUSY | pf_mask)) == pf_mask));
802 }
803 
804 static int pf_queue;
805 
set_next_request(void)806 static int set_next_request(void)
807 {
808 	struct pf_unit *pf;
809 	int old_pos = pf_queue;
810 
811 	do {
812 		pf = &units[pf_queue];
813 		if (++pf_queue == PF_UNITS)
814 			pf_queue = 0;
815 		if (pf->present && !list_empty(&pf->rq_list)) {
816 			pf_req = list_first_entry(&pf->rq_list, struct request,
817 							queuelist);
818 			list_del_init(&pf_req->queuelist);
819 			blk_mq_start_request(pf_req);
820 			break;
821 		}
822 	} while (pf_queue != old_pos);
823 
824 	return pf_req != NULL;
825 }
826 
pf_end_request(blk_status_t err)827 static void pf_end_request(blk_status_t err)
828 {
829 	if (!pf_req)
830 		return;
831 	if (!blk_update_request(pf_req, err, blk_rq_cur_bytes(pf_req))) {
832 		__blk_mq_end_request(pf_req, err);
833 		pf_req = NULL;
834 	}
835 }
836 
pf_request(void)837 static void pf_request(void)
838 {
839 	if (pf_busy)
840 		return;
841 repeat:
842 	if (!pf_req && !set_next_request())
843 		return;
844 
845 	pf_current = pf_req->rq_disk->private_data;
846 	pf_block = blk_rq_pos(pf_req);
847 	pf_run = blk_rq_sectors(pf_req);
848 	pf_count = blk_rq_cur_sectors(pf_req);
849 
850 	if (pf_block + pf_count > get_capacity(pf_req->rq_disk)) {
851 		pf_end_request(BLK_STS_IOERR);
852 		goto repeat;
853 	}
854 
855 	pf_cmd = rq_data_dir(pf_req);
856 	pf_buf = bio_data(pf_req->bio);
857 	pf_retries = 0;
858 
859 	pf_busy = 1;
860 	if (pf_cmd == READ)
861 		pi_do_claimed(pf_current->pi, do_pf_read);
862 	else if (pf_cmd == WRITE)
863 		pi_do_claimed(pf_current->pi, do_pf_write);
864 	else {
865 		pf_busy = 0;
866 		pf_end_request(BLK_STS_IOERR);
867 		goto repeat;
868 	}
869 }
870 
pf_queue_rq(struct blk_mq_hw_ctx * hctx,const struct blk_mq_queue_data * bd)871 static blk_status_t pf_queue_rq(struct blk_mq_hw_ctx *hctx,
872 				const struct blk_mq_queue_data *bd)
873 {
874 	struct pf_unit *pf = hctx->queue->queuedata;
875 
876 	spin_lock_irq(&pf_spin_lock);
877 	list_add_tail(&bd->rq->queuelist, &pf->rq_list);
878 	pf_request();
879 	spin_unlock_irq(&pf_spin_lock);
880 
881 	return BLK_STS_OK;
882 }
883 
pf_next_buf(void)884 static int pf_next_buf(void)
885 {
886 	unsigned long saved_flags;
887 
888 	pf_count--;
889 	pf_run--;
890 	pf_buf += 512;
891 	pf_block++;
892 	if (!pf_run)
893 		return 1;
894 	if (!pf_count) {
895 		spin_lock_irqsave(&pf_spin_lock, saved_flags);
896 		pf_end_request(0);
897 		spin_unlock_irqrestore(&pf_spin_lock, saved_flags);
898 		if (!pf_req)
899 			return 1;
900 		pf_count = blk_rq_cur_sectors(pf_req);
901 		pf_buf = bio_data(pf_req->bio);
902 	}
903 	return 0;
904 }
905 
next_request(blk_status_t err)906 static inline void next_request(blk_status_t err)
907 {
908 	unsigned long saved_flags;
909 
910 	spin_lock_irqsave(&pf_spin_lock, saved_flags);
911 	pf_end_request(err);
912 	pf_busy = 0;
913 	pf_request();
914 	spin_unlock_irqrestore(&pf_spin_lock, saved_flags);
915 }
916 
917 /* detach from the calling context - in case the spinlock is held */
do_pf_read(void)918 static void do_pf_read(void)
919 {
920 	ps_set_intr(do_pf_read_start, NULL, 0, nice);
921 }
922 
do_pf_read_start(void)923 static void do_pf_read_start(void)
924 {
925 	pf_busy = 1;
926 
927 	if (pf_start(pf_current, ATAPI_READ_10, pf_block, pf_run)) {
928 		pi_disconnect(pf_current->pi);
929 		if (pf_retries < PF_MAX_RETRIES) {
930 			pf_retries++;
931 			pi_do_claimed(pf_current->pi, do_pf_read_start);
932 			return;
933 		}
934 		next_request(BLK_STS_IOERR);
935 		return;
936 	}
937 	pf_mask = STAT_DRQ;
938 	ps_set_intr(do_pf_read_drq, pf_ready, PF_TMO, nice);
939 }
940 
do_pf_read_drq(void)941 static void do_pf_read_drq(void)
942 {
943 	while (1) {
944 		if (pf_wait(pf_current, STAT_BUSY, STAT_DRQ | STAT_ERR,
945 			    "read block", "completion") & STAT_ERR) {
946 			pi_disconnect(pf_current->pi);
947 			if (pf_retries < PF_MAX_RETRIES) {
948 				pf_req_sense(pf_current, 0);
949 				pf_retries++;
950 				pi_do_claimed(pf_current->pi, do_pf_read_start);
951 				return;
952 			}
953 			next_request(BLK_STS_IOERR);
954 			return;
955 		}
956 		pi_read_block(pf_current->pi, pf_buf, 512);
957 		if (pf_next_buf())
958 			break;
959 	}
960 	pi_disconnect(pf_current->pi);
961 	next_request(0);
962 }
963 
do_pf_write(void)964 static void do_pf_write(void)
965 {
966 	ps_set_intr(do_pf_write_start, NULL, 0, nice);
967 }
968 
do_pf_write_start(void)969 static void do_pf_write_start(void)
970 {
971 	pf_busy = 1;
972 
973 	if (pf_start(pf_current, ATAPI_WRITE_10, pf_block, pf_run)) {
974 		pi_disconnect(pf_current->pi);
975 		if (pf_retries < PF_MAX_RETRIES) {
976 			pf_retries++;
977 			pi_do_claimed(pf_current->pi, do_pf_write_start);
978 			return;
979 		}
980 		next_request(BLK_STS_IOERR);
981 		return;
982 	}
983 
984 	while (1) {
985 		if (pf_wait(pf_current, STAT_BUSY, STAT_DRQ | STAT_ERR,
986 			    "write block", "data wait") & STAT_ERR) {
987 			pi_disconnect(pf_current->pi);
988 			if (pf_retries < PF_MAX_RETRIES) {
989 				pf_retries++;
990 				pi_do_claimed(pf_current->pi, do_pf_write_start);
991 				return;
992 			}
993 			next_request(BLK_STS_IOERR);
994 			return;
995 		}
996 		pi_write_block(pf_current->pi, pf_buf, 512);
997 		if (pf_next_buf())
998 			break;
999 	}
1000 	pf_mask = 0;
1001 	ps_set_intr(do_pf_write_done, pf_ready, PF_TMO, nice);
1002 }
1003 
do_pf_write_done(void)1004 static void do_pf_write_done(void)
1005 {
1006 	if (pf_wait(pf_current, STAT_BUSY, 0, "write block", "done") & STAT_ERR) {
1007 		pi_disconnect(pf_current->pi);
1008 		if (pf_retries < PF_MAX_RETRIES) {
1009 			pf_retries++;
1010 			pi_do_claimed(pf_current->pi, do_pf_write_start);
1011 			return;
1012 		}
1013 		next_request(BLK_STS_IOERR);
1014 		return;
1015 	}
1016 	pi_disconnect(pf_current->pi);
1017 	next_request(0);
1018 }
1019 
pf_init(void)1020 static int __init pf_init(void)
1021 {				/* preliminary initialisation */
1022 	struct pf_unit *pf;
1023 	int unit;
1024 
1025 	if (disable)
1026 		return -EINVAL;
1027 
1028 	pf_init_units();
1029 
1030 	if (pf_detect())
1031 		return -ENODEV;
1032 	pf_busy = 0;
1033 
1034 	if (register_blkdev(major, name)) {
1035 		for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
1036 			if (!pf->disk)
1037 				continue;
1038 			blk_cleanup_queue(pf->disk->queue);
1039 			blk_mq_free_tag_set(&pf->tag_set);
1040 			put_disk(pf->disk);
1041 		}
1042 		return -EBUSY;
1043 	}
1044 
1045 	for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
1046 		struct gendisk *disk = pf->disk;
1047 
1048 		if (!pf->present)
1049 			continue;
1050 		disk->private_data = pf;
1051 		add_disk(disk);
1052 	}
1053 	return 0;
1054 }
1055 
pf_exit(void)1056 static void __exit pf_exit(void)
1057 {
1058 	struct pf_unit *pf;
1059 	int unit;
1060 	unregister_blkdev(major, name);
1061 	for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
1062 		if (!pf->disk)
1063 			continue;
1064 
1065 		if (pf->present)
1066 			del_gendisk(pf->disk);
1067 
1068 		blk_cleanup_queue(pf->disk->queue);
1069 		blk_mq_free_tag_set(&pf->tag_set);
1070 		put_disk(pf->disk);
1071 
1072 		if (pf->present)
1073 			pi_release(pf->pi);
1074 	}
1075 }
1076 
1077 MODULE_LICENSE("GPL");
1078 module_init(pf_init)
1079 module_exit(pf_exit)
1080