2 pf.c (c) 1997-8 Grant R. Guenther <grant@torque.net>
3 Under the terms of the GNU General Public License.
5 This is the high-level driver for parallel port ATAPI disk
6 drives based on chips supported by the paride module.
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.
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:
16 drive0 These four arguments can be arrays of
17 drive1 1-7 integers as follows:
19 drive3 <prt>,<pro>,<uni>,<mod>,<slv>,<lun>,<dly>
23 <prt> is the base of the parallel port address for
24 the corresponding drive. (required)
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)
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.
37 <mod> this can be -1 to choose the best mode, or one
38 of the mode numbers supported by the adapter.
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
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
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)
62 major You may use this parameter to overide the
63 default major number (47) that this driver
64 will use. Be sure to change the device
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).
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.
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
84 nice This parameter controls the driver's use of
85 idle CPU time, at the expense of some speed.
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:
98 In addition, you can use the parameter pf.disable to disable
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
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
116 #define PF_VERSION "1.04"
121 /* Here are things one can override from the insmod command.
122 Most are autoprobed by paride unless set here. Verbose is off
127 static int verbose = 0;
128 static int major = PF_MAJOR;
129 static char *name = PF_NAME;
130 static int cluster = 64;
132 static int disable = 0;
134 static int drive0[7] = { 0, 0, 0, -1, -1, -1, -1 };
135 static int drive1[7] = { 0, 0, 0, -1, -1, -1, -1 };
136 static int drive2[7] = { 0, 0, 0, -1, -1, -1, -1 };
137 static int drive3[7] = { 0, 0, 0, -1, -1, -1, -1 };
139 static int (*drives[4])[7] = {&drive0, &drive1, &drive2, &drive3};
140 static int pf_drive_count;
142 enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV, D_LUN, D_DLY};
144 /* end of parameters */
146 #include <linux/module.h>
147 #include <linux/init.h>
148 #include <linux/fs.h>
149 #include <linux/delay.h>
150 #include <linux/hdreg.h>
151 #include <linux/cdrom.h>
152 #include <linux/spinlock.h>
153 #include <linux/blkdev.h>
154 #include <linux/blkpg.h>
155 #include <asm/uaccess.h>
157 static spinlock_t pf_spin_lock;
163 static STT pf_stt[7] = {
164 {"drive0", 7, drive0},
165 {"drive1", 7, drive1},
166 {"drive2", 7, drive2},
167 {"drive3", 7, drive3},
168 {"disable", 1, &disable},
169 {"cluster", 1, &cluster},
173 void pf_setup(char *str, int *ints)
175 generic_setup(pf_stt, 7, str);
180 MODULE_PARM(verbose, "i");
181 MODULE_PARM(major, "i");
182 MODULE_PARM(name, "s");
183 MODULE_PARM(cluster, "i");
184 MODULE_PARM(nice, "i");
185 MODULE_PARM(drive0, "1-7i");
186 MODULE_PARM(drive1, "1-7i");
187 MODULE_PARM(drive2, "1-7i");
188 MODULE_PARM(drive3, "1-7i");
193 /* constants for faking geometry numbers */
195 #define PF_FD_MAX 8192 /* use FD geometry under this size */
201 #define PF_MAX_RETRIES 5
202 #define PF_TMO 800 /* interrupt timeout in jiffies */
203 #define PF_SPIN_DEL 50 /* spin delay in micro-seconds */
205 #define PF_SPIN (1000000*PF_TMO)/(HZ*PF_SPIN_DEL)
207 #define STAT_ERR 0x00001
208 #define STAT_INDEX 0x00002
209 #define STAT_ECC 0x00004
210 #define STAT_DRQ 0x00008
211 #define STAT_SEEK 0x00010
212 #define STAT_WRERR 0x00020
213 #define STAT_READY 0x00040
214 #define STAT_BUSY 0x00080
216 #define ATAPI_REQ_SENSE 0x03
217 #define ATAPI_LOCK 0x1e
218 #define ATAPI_DOOR 0x1b
219 #define ATAPI_MODE_SENSE 0x5a
220 #define ATAPI_CAPACITY 0x25
221 #define ATAPI_IDENTIFY 0x12
222 #define ATAPI_READ_10 0x28
223 #define ATAPI_WRITE_10 0x2a
225 static int pf_open(struct inode *inode, struct file *file);
226 static void do_pf_request(request_queue_t * q);
227 static int pf_ioctl(struct inode *inode, struct file *file,
228 unsigned int cmd, unsigned long arg);
230 static int pf_release(struct inode *inode, struct file *file);
232 static int pf_detect(void);
233 static void do_pf_read(void);
234 static void do_pf_read_start(void);
235 static void do_pf_write(void);
236 static void do_pf_write_start(void);
237 static void do_pf_read_drq(void);
238 static void do_pf_write_done(void);
247 struct pi_adapter pia; /* interface to paride layer */
248 struct pi_adapter *pi;
249 int removable; /* removable media device ? */
250 int media_status; /* media present ? WP ? */
251 int drive; /* drive */
253 int access; /* count of active opens ... */
254 int present; /* device present ? */
255 char name[PF_NAMELEN]; /* pf0, pf1, ... */
256 struct gendisk *disk;
259 struct pf_unit units[PF_UNITS];
261 static int pf_identify(struct pf_unit *pf);
262 static void pf_lock(struct pf_unit *pf, int func);
263 static void pf_eject(struct pf_unit *pf);
264 static int pf_check_media(struct gendisk *disk);
266 static char pf_scratch[512]; /* scratch block buffer */
268 /* the variables below are used mainly in the I/O request engine, which
269 processes only one request at a time.
272 static int pf_retries = 0; /* i/o error retry count */
273 static int pf_busy = 0; /* request being processed ? */
274 static struct request *pf_req; /* current request */
275 static int pf_block; /* address of next requested block */
276 static int pf_count; /* number of blocks still to do */
277 static int pf_run; /* sectors in current cluster */
278 static int pf_cmd; /* current command READ/WRITE */
279 static struct pf_unit *pf_current;/* unit of current request */
280 static int pf_mask; /* stopper for pseudo-int */
281 static char *pf_buf; /* buffer for request in progress */
283 /* kernel glue structures */
285 static struct block_device_operations pf_fops = {
286 .owner = THIS_MODULE,
288 .release = pf_release,
290 .media_changed = pf_check_media,
293 void pf_init_units(void)
299 for (unit = 0, pf = units; unit < PF_UNITS; unit++, pf++) {
300 struct gendisk *disk = alloc_disk(1);
305 pf->media_status = PF_NM;
306 pf->drive = (*drives[unit])[D_SLV];
307 pf->lun = (*drives[unit])[D_LUN];
308 snprintf(pf->name, PF_NAMELEN, "%s%d", name, unit);
310 disk->first_minor = unit;
311 strcpy(disk->disk_name, pf->name);
312 disk->fops = &pf_fops;
313 if (!(*drives[unit])[D_PRT])
318 static int pf_open(struct inode *inode, struct file *file)
320 struct pf_unit *pf = inode->i_bdev->bd_disk->private_data;
324 if (pf->media_status == PF_NM)
327 if ((pf->media_status == PF_RO) && (file->f_mode & 2))
337 static int pf_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
339 struct pf_unit *pf = inode->i_bdev->bd_disk->private_data;
340 struct hd_geometry __user *geo = (struct hd_geometry __user *) arg;
341 struct hd_geometry g;
344 if (cmd == CDROMEJECT) {
345 if (pf->access == 1) {
351 if (cmd != HDIO_GETGEO)
353 capacity = get_capacity(pf->disk);
354 if (capacity < PF_FD_MAX) {
355 g.cylinders = sector_div(capacity, PF_FD_HDS * PF_FD_SPT);
357 g.sectors = PF_FD_SPT;
359 g.cylinders = sector_div(capacity, PF_HD_HDS * PF_HD_SPT);
361 g.sectors = PF_HD_SPT;
363 if (copy_to_user(geo, &g, sizeof(g)))
368 static int pf_release(struct inode *inode, struct file *file)
370 struct pf_unit *pf = inode->i_bdev->bd_disk->private_data;
377 if (!pf->access && pf->removable)
384 static int pf_check_media(struct gendisk *disk)
389 static inline int status_reg(struct pf_unit *pf)
391 return pi_read_regr(pf->pi, 1, 6);
394 static inline int read_reg(struct pf_unit *pf, int reg)
396 return pi_read_regr(pf->pi, 0, reg);
399 static inline void write_reg(struct pf_unit *pf, int reg, int val)
401 pi_write_regr(pf->pi, 0, reg, val);
404 static int pf_wait(struct pf_unit *pf, int go, int stop, char *fun, char *msg)
409 while ((((r = status_reg(pf)) & go) || (stop && (!(r & stop))))
413 if ((r & (STAT_ERR & stop)) || (j >= PF_SPIN)) {
420 printk("%s: %s %s: alt=0x%x stat=0x%x err=0x%x"
421 " loop=%d phase=%d\n",
422 pf->name, fun, msg, r, s, e, j, p);
428 static int pf_command(struct pf_unit *pf, char *cmd, int dlen, char *fun)
432 write_reg(pf, 6, 0xa0+0x10*pf->drive);
434 if (pf_wait(pf, STAT_BUSY | STAT_DRQ, 0, fun, "before command")) {
435 pi_disconnect(pf->pi);
439 write_reg(pf, 4, dlen % 256);
440 write_reg(pf, 5, dlen / 256);
441 write_reg(pf, 7, 0xa0); /* ATAPI packet command */
443 if (pf_wait(pf, STAT_BUSY, STAT_DRQ, fun, "command DRQ")) {
444 pi_disconnect(pf->pi);
448 if (read_reg(pf, 2) != 1) {
449 printk("%s: %s: command phase error\n", pf->name, fun);
450 pi_disconnect(pf->pi);
454 pi_write_block(pf->pi, cmd, 12);
459 static int pf_completion(struct pf_unit *pf, char *buf, char *fun)
463 r = pf_wait(pf, STAT_BUSY, STAT_DRQ | STAT_READY | STAT_ERR,
466 if ((read_reg(pf, 2) & 2) && (read_reg(pf, 7) & STAT_DRQ)) {
467 n = (((read_reg(pf, 4) + 256 * read_reg(pf, 5)) +
469 pi_read_block(pf->pi, buf, n);
472 s = pf_wait(pf, STAT_BUSY, STAT_READY | STAT_ERR, fun, "data done");
474 pi_disconnect(pf->pi);
479 static void pf_req_sense(struct pf_unit *pf, int quiet)
482 { ATAPI_REQ_SENSE, pf->lun << 5, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0 };
486 r = pf_command(pf, rs_cmd, 16, "Request sense");
489 pf_completion(pf, buf, "Request sense");
491 if ((!r) && (!quiet))
492 printk("%s: Sense key: %x, ASC: %x, ASQ: %x\n",
493 pf->name, buf[2] & 0xf, buf[12], buf[13]);
496 static int pf_atapi(struct pf_unit *pf, char *cmd, int dlen, char *buf, char *fun)
500 r = pf_command(pf, cmd, dlen, fun);
503 r = pf_completion(pf, buf, fun);
505 pf_req_sense(pf, !fun);
510 #define DBMSG(msg) ((verbose>1)?(msg):NULL)
512 static void pf_lock(struct pf_unit *pf, int func)
514 char lo_cmd[12] = { ATAPI_LOCK, pf->lun << 5, 0, 0, func, 0, 0, 0, 0, 0, 0, 0 };
516 pf_atapi(pf, lo_cmd, 0, pf_scratch, func ? "unlock" : "lock");
519 static void pf_eject(struct pf_unit *pf)
521 char ej_cmd[12] = { ATAPI_DOOR, pf->lun << 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 };
524 pf_atapi(pf, ej_cmd, 0, pf_scratch, "eject");
527 #define PF_RESET_TMO 30 /* in tenths of a second */
529 static void pf_sleep(int cs)
531 current->state = TASK_INTERRUPTIBLE;
532 schedule_timeout(cs);
535 /* the ATAPI standard actually specifies the contents of all 7 registers
536 after a reset, but the specification is ambiguous concerning the last
537 two bytes, and different drives interpret the standard differently.
540 static int pf_reset(struct pf_unit *pf)
543 int expect[5] = { 1, 1, 1, 0x14, 0xeb };
546 write_reg(pf, 6, 0xa0+0x10*pf->drive);
549 pf_sleep(20 * HZ / 1000);
552 while ((k++ < PF_RESET_TMO) && (status_reg(pf) & STAT_BUSY))
556 for (i = 0; i < 5; i++)
557 flg &= (read_reg(pf, i + 1) == expect[i]);
560 printk("%s: Reset (%d) signature = ", pf->name, k);
561 for (i = 0; i < 5; i++)
562 printk("%3x", read_reg(pf, i + 1));
564 printk(" (incorrect)");
568 pi_disconnect(pf->pi);
572 static void pf_mode_sense(struct pf_unit *pf)
575 { ATAPI_MODE_SENSE, pf->lun << 5, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0 };
578 pf_atapi(pf, ms_cmd, 8, buf, DBMSG("mode sense"));
579 pf->media_status = PF_RW;
581 pf->media_status = PF_RO;
584 static void xs(char *buf, char *targ, int offs, int len)
590 for (k = 0; k < len; k++)
591 if ((buf[k + offs] != 0x20) || (buf[k + offs] != l))
592 l = targ[j++] = buf[k + offs];
598 static int xl(char *buf, int offs)
603 for (k = 0; k < 4; k++)
604 v = v * 256 + (buf[k + offs] & 0xff);
608 static void pf_get_capacity(struct pf_unit *pf)
610 char rc_cmd[12] = { ATAPI_CAPACITY, pf->lun << 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
614 if (pf_atapi(pf, rc_cmd, 8, buf, DBMSG("get capacity"))) {
615 pf->media_status = PF_NM;
618 set_capacity(pf->disk, xl(buf, 0) + 1);
621 set_capacity(pf->disk, 0);
623 printk("%s: Drive %d, LUN %d,"
624 " unsupported block size %d\n",
625 pf->name, pf->drive, pf->lun, bs);
629 static int pf_identify(struct pf_unit *pf)
632 char *ms[2] = { "master", "slave" };
635 { ATAPI_IDENTIFY, pf->lun << 5, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0 };
638 s = pf_atapi(pf, id_cmd, 36, buf, "identify");
643 if ((dt != 0) && (dt != 7)) {
645 printk("%s: Drive %d, LUN %d, unsupported type %d\n",
646 pf->name, pf->drive, pf->lun, dt);
653 pf->removable = (buf[1] & 0x80);
661 printk("%s: %s %s, %s LUN %d, type %d",
662 pf->name, mf, id, ms[pf->drive], pf->lun, dt);
664 printk(", removable");
665 if (pf->media_status == PF_NM)
666 printk(", no media\n");
668 if (pf->media_status == PF_RO)
670 printk(", %llu blocks\n",
671 (unsigned long long)get_capacity(pf->disk));
676 /* returns 0, with id set if drive is detected
677 -1, if drive detection failed
679 static int pf_probe(struct pf_unit *pf)
681 if (pf->drive == -1) {
682 for (pf->drive = 0; pf->drive <= 1; pf->drive++)
685 return pf_identify(pf);
687 for (pf->lun = 0; pf->lun < 8; pf->lun++)
688 if (!pf_identify(pf))
695 return pf_identify(pf);
696 for (pf->lun = 0; pf->lun < 8; pf->lun++)
697 if (!pf_identify(pf))
703 static int pf_detect(void)
705 struct pf_unit *pf = units;
708 printk("%s: %s version %s, major %d, cluster %d, nice %d\n",
709 name, name, PF_VERSION, major, cluster, nice);
712 if (pf_drive_count == 0) {
713 if (pi_init(pf->pi, 1, -1, -1, -1, -1, -1, pf_scratch, PI_PF,
714 verbose, pf->name)) {
715 if (!pf_probe(pf) && pf->disk) {
723 for (unit = 0; unit < PF_UNITS; unit++, pf++) {
724 int *conf = *drives[unit];
727 if (pi_init(pf->pi, 0, conf[D_PRT], conf[D_MOD],
728 conf[D_UNI], conf[D_PRO], conf[D_DLY],
729 pf_scratch, PI_PF, verbose, pf->name)) {
730 if (!pf_probe(pf) && pf->disk) {
740 printk("%s: No ATAPI disk detected\n", name);
741 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++)
746 /* The i/o request engine */
748 static int pf_start(struct pf_unit *pf, int cmd, int b, int c)
751 char io_cmd[12] = { cmd, pf->lun << 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
753 for (i = 0; i < 4; i++) {
754 io_cmd[5 - i] = b & 0xff;
758 io_cmd[8] = c & 0xff;
759 io_cmd[7] = (c >> 8) & 0xff;
761 i = pf_command(pf, io_cmd, c * 512, "start i/o");
768 static int pf_ready(void)
770 return (((status_reg(pf_current) & (STAT_BUSY | pf_mask)) == pf_mask));
773 static struct request_queue *pf_queue;
775 static void do_pf_request(request_queue_t * q)
780 pf_req = elv_next_request(q);
784 pf_current = pf_req->rq_disk->private_data;
785 pf_block = pf_req->sector;
786 pf_run = pf_req->nr_sectors;
787 pf_count = pf_req->current_nr_sectors;
789 if (pf_block + pf_count > get_capacity(pf_req->rq_disk)) {
790 end_request(pf_req, 0);
794 pf_cmd = rq_data_dir(pf_req);
795 pf_buf = pf_req->buffer;
800 pi_do_claimed(pf_current->pi, do_pf_read);
801 else if (pf_cmd == WRITE)
802 pi_do_claimed(pf_current->pi, do_pf_write);
805 end_request(pf_req, 0);
810 static int pf_next_buf(void)
812 unsigned long saved_flags;
822 spin_lock_irqsave(&pf_spin_lock, saved_flags);
823 end_request(pf_req, 1);
824 pf_count = pf_req->current_nr_sectors;
825 pf_buf = pf_req->buffer;
826 spin_unlock_irqrestore(&pf_spin_lock, saved_flags);
830 static inline void next_request(int success)
832 unsigned long saved_flags;
834 spin_lock_irqsave(&pf_spin_lock, saved_flags);
835 end_request(pf_req, success);
837 do_pf_request(pf_queue);
838 spin_unlock_irqrestore(&pf_spin_lock, saved_flags);
841 /* detach from the calling context - in case the spinlock is held */
842 static void do_pf_read(void)
844 ps_set_intr(do_pf_read_start, 0, 0, nice);
847 static void do_pf_read_start(void)
851 if (pf_start(pf_current, ATAPI_READ_10, pf_block, pf_run)) {
852 pi_disconnect(pf_current->pi);
853 if (pf_retries < PF_MAX_RETRIES) {
855 pi_do_claimed(pf_current->pi, do_pf_read_start);
862 ps_set_intr(do_pf_read_drq, pf_ready, PF_TMO, nice);
865 static void do_pf_read_drq(void)
868 if (pf_wait(pf_current, STAT_BUSY, STAT_DRQ | STAT_ERR,
869 "read block", "completion") & STAT_ERR) {
870 pi_disconnect(pf_current->pi);
871 if (pf_retries < PF_MAX_RETRIES) {
872 pf_req_sense(pf_current, 0);
874 pi_do_claimed(pf_current->pi, do_pf_read_start);
880 pi_read_block(pf_current->pi, pf_buf, 512);
884 pi_disconnect(pf_current->pi);
888 static void do_pf_write(void)
890 ps_set_intr(do_pf_write_start, 0, 0, nice);
893 static void do_pf_write_start(void)
897 if (pf_start(pf_current, ATAPI_WRITE_10, pf_block, pf_run)) {
898 pi_disconnect(pf_current->pi);
899 if (pf_retries < PF_MAX_RETRIES) {
901 pi_do_claimed(pf_current->pi, do_pf_write_start);
909 if (pf_wait(pf_current, STAT_BUSY, STAT_DRQ | STAT_ERR,
910 "write block", "data wait") & STAT_ERR) {
911 pi_disconnect(pf_current->pi);
912 if (pf_retries < PF_MAX_RETRIES) {
914 pi_do_claimed(pf_current->pi, do_pf_write_start);
920 pi_write_block(pf_current->pi, pf_buf, 512);
925 ps_set_intr(do_pf_write_done, pf_ready, PF_TMO, nice);
928 static void do_pf_write_done(void)
930 if (pf_wait(pf_current, STAT_BUSY, 0, "write block", "done") & STAT_ERR) {
931 pi_disconnect(pf_current->pi);
932 if (pf_retries < PF_MAX_RETRIES) {
934 pi_do_claimed(pf_current->pi, do_pf_write_start);
940 pi_disconnect(pf_current->pi);
944 static int __init pf_init(void)
945 { /* preliminary initialisation */
958 if (register_blkdev(major, name)) {
959 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++)
963 pf_queue = blk_init_queue(do_pf_request, &pf_spin_lock);
965 unregister_blkdev(major, name);
966 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++)
971 blk_queue_max_phys_segments(pf_queue, cluster);
972 blk_queue_max_hw_segments(pf_queue, cluster);
974 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
975 struct gendisk *disk = pf->disk;
979 disk->private_data = pf;
980 disk->queue = pf_queue;
986 static void __exit pf_exit(void)
990 unregister_blkdev(major, name);
991 for (pf = units, unit = 0; unit < PF_UNITS; pf++, unit++) {
994 del_gendisk(pf->disk);
998 blk_cleanup_queue(pf_queue);
1001 MODULE_LICENSE("GPL");
1002 module_init(pf_init)
1003 module_exit(pf_exit)