• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* imm.c   --  low level driver for the IOMEGA MatchMaker
2  * parallel port SCSI host adapter.
3  *
4  * (The IMM is the embedded controller in the ZIP Plus drive.)
5  *
6  * My unofficial company acronym list is 21 pages long:
7  *      FLA:    Four letter acronym with built in facility for
8  *              future expansion to five letters.
9  */
10 
11 #include <linux/init.h>
12 #include <linux/kernel.h>
13 #include <linux/module.h>
14 #include <linux/blkdev.h>
15 #include <linux/parport.h>
16 #include <linux/workqueue.h>
17 #include <linux/delay.h>
18 #include <linux/slab.h>
19 #include <asm/io.h>
20 
21 #include <scsi/scsi.h>
22 #include <scsi/scsi_cmnd.h>
23 #include <scsi/scsi_device.h>
24 #include <scsi/scsi_host.h>
25 
26 /* The following #define is to avoid a clash with hosts.c */
27 #define IMM_PROBE_SPP   0x0001
28 #define IMM_PROBE_PS2   0x0002
29 #define IMM_PROBE_ECR   0x0010
30 #define IMM_PROBE_EPP17 0x0100
31 #define IMM_PROBE_EPP19 0x0200
32 
33 
34 typedef struct {
35 	struct pardevice *dev;	/* Parport device entry         */
36 	int base;		/* Actual port address          */
37 	int base_hi;		/* Hi Base address for ECP-ISA chipset */
38 	int mode;		/* Transfer mode                */
39 	struct scsi_cmnd *cur_cmd;	/* Current queued command       */
40 	struct delayed_work imm_tq;	/* Polling interrupt stuff       */
41 	unsigned long jstart;	/* Jiffies at start             */
42 	unsigned failed:1;	/* Failure flag                 */
43 	unsigned dp:1;		/* Data phase present           */
44 	unsigned rd:1;		/* Read data in data phase      */
45 	unsigned wanted:1;	/* Parport sharing busy flag    */
46 	wait_queue_head_t *waiting;
47 	struct Scsi_Host *host;
48 	struct list_head list;
49 } imm_struct;
50 
51 static void imm_reset_pulse(unsigned int base);
52 static int device_check(imm_struct *dev);
53 
54 #include "imm.h"
55 
imm_dev(struct Scsi_Host * host)56 static inline imm_struct *imm_dev(struct Scsi_Host *host)
57 {
58 	return *(imm_struct **)&host->hostdata;
59 }
60 
61 static DEFINE_SPINLOCK(arbitration_lock);
62 
got_it(imm_struct * dev)63 static void got_it(imm_struct *dev)
64 {
65 	dev->base = dev->dev->port->base;
66 	if (dev->cur_cmd)
67 		dev->cur_cmd->SCp.phase = 1;
68 	else
69 		wake_up(dev->waiting);
70 }
71 
imm_wakeup(void * ref)72 static void imm_wakeup(void *ref)
73 {
74 	imm_struct *dev = (imm_struct *) ref;
75 	unsigned long flags;
76 
77 	spin_lock_irqsave(&arbitration_lock, flags);
78 	if (dev->wanted) {
79 		parport_claim(dev->dev);
80 		got_it(dev);
81 		dev->wanted = 0;
82 	}
83 	spin_unlock_irqrestore(&arbitration_lock, flags);
84 }
85 
imm_pb_claim(imm_struct * dev)86 static int imm_pb_claim(imm_struct *dev)
87 {
88 	unsigned long flags;
89 	int res = 1;
90 	spin_lock_irqsave(&arbitration_lock, flags);
91 	if (parport_claim(dev->dev) == 0) {
92 		got_it(dev);
93 		res = 0;
94 	}
95 	dev->wanted = res;
96 	spin_unlock_irqrestore(&arbitration_lock, flags);
97 	return res;
98 }
99 
imm_pb_dismiss(imm_struct * dev)100 static void imm_pb_dismiss(imm_struct *dev)
101 {
102 	unsigned long flags;
103 	int wanted;
104 	spin_lock_irqsave(&arbitration_lock, flags);
105 	wanted = dev->wanted;
106 	dev->wanted = 0;
107 	spin_unlock_irqrestore(&arbitration_lock, flags);
108 	if (!wanted)
109 		parport_release(dev->dev);
110 }
111 
imm_pb_release(imm_struct * dev)112 static inline void imm_pb_release(imm_struct *dev)
113 {
114 	parport_release(dev->dev);
115 }
116 
117 /* This is to give the imm driver a way to modify the timings (and other
118  * parameters) by writing to the /proc/scsi/imm/0 file.
119  * Very simple method really... (Too simple, no error checking :( )
120  * Reason: Kernel hackers HATE having to unload and reload modules for
121  * testing...
122  * Also gives a method to use a script to obtain optimum timings (TODO)
123  */
imm_write_info(struct Scsi_Host * host,char * buffer,int length)124 static int imm_write_info(struct Scsi_Host *host, char *buffer, int length)
125 {
126 	imm_struct *dev = imm_dev(host);
127 
128 	if ((length > 5) && (strncmp(buffer, "mode=", 5) == 0)) {
129 		dev->mode = simple_strtoul(buffer + 5, NULL, 0);
130 		return length;
131 	}
132 	printk("imm /proc: invalid variable\n");
133 	return -EINVAL;
134 }
135 
imm_show_info(struct seq_file * m,struct Scsi_Host * host)136 static int imm_show_info(struct seq_file *m, struct Scsi_Host *host)
137 {
138 	imm_struct *dev = imm_dev(host);
139 
140 	seq_printf(m, "Version : %s\n", IMM_VERSION);
141 	seq_printf(m, "Parport : %s\n", dev->dev->port->name);
142 	seq_printf(m, "Mode    : %s\n", IMM_MODE_STRING[dev->mode]);
143 	return 0;
144 }
145 
146 #if IMM_DEBUG > 0
147 #define imm_fail(x,y) printk("imm: imm_fail(%i) from %s at line %d\n",\
148 	   y, __func__, __LINE__); imm_fail_func(x,y);
149 static inline void
imm_fail_func(imm_struct * dev,int error_code)150 imm_fail_func(imm_struct *dev, int error_code)
151 #else
152 static inline void
153 imm_fail(imm_struct *dev, int error_code)
154 #endif
155 {
156 	/* If we fail a device then we trash status / message bytes */
157 	if (dev->cur_cmd) {
158 		dev->cur_cmd->result = error_code << 16;
159 		dev->failed = 1;
160 	}
161 }
162 
163 /*
164  * Wait for the high bit to be set.
165  *
166  * In principle, this could be tied to an interrupt, but the adapter
167  * doesn't appear to be designed to support interrupts.  We spin on
168  * the 0x80 ready bit.
169  */
imm_wait(imm_struct * dev)170 static unsigned char imm_wait(imm_struct *dev)
171 {
172 	int k;
173 	unsigned short ppb = dev->base;
174 	unsigned char r;
175 
176 	w_ctr(ppb, 0x0c);
177 
178 	k = IMM_SPIN_TMO;
179 	do {
180 		r = r_str(ppb);
181 		k--;
182 		udelay(1);
183 	}
184 	while (!(r & 0x80) && (k));
185 
186 	/*
187 	 * STR register (LPT base+1) to SCSI mapping:
188 	 *
189 	 * STR      imm     imm
190 	 * ===================================
191 	 * 0x80     S_REQ   S_REQ
192 	 * 0x40     !S_BSY  (????)
193 	 * 0x20     !S_CD   !S_CD
194 	 * 0x10     !S_IO   !S_IO
195 	 * 0x08     (????)  !S_BSY
196 	 *
197 	 * imm      imm     meaning
198 	 * ==================================
199 	 * 0xf0     0xb8    Bit mask
200 	 * 0xc0     0x88    ZIP wants more data
201 	 * 0xd0     0x98    ZIP wants to send more data
202 	 * 0xe0     0xa8    ZIP is expecting SCSI command data
203 	 * 0xf0     0xb8    end of transfer, ZIP is sending status
204 	 */
205 	w_ctr(ppb, 0x04);
206 	if (k)
207 		return (r & 0xb8);
208 
209 	/* Counter expired - Time out occurred */
210 	imm_fail(dev, DID_TIME_OUT);
211 	printk("imm timeout in imm_wait\n");
212 	return 0;		/* command timed out */
213 }
214 
imm_negotiate(imm_struct * tmp)215 static int imm_negotiate(imm_struct * tmp)
216 {
217 	/*
218 	 * The following is supposedly the IEEE 1284-1994 negotiate
219 	 * sequence. I have yet to obtain a copy of the above standard
220 	 * so this is a bit of a guess...
221 	 *
222 	 * A fair chunk of this is based on the Linux parport implementation
223 	 * of IEEE 1284.
224 	 *
225 	 * Return 0 if data available
226 	 *        1 if no data available
227 	 */
228 
229 	unsigned short base = tmp->base;
230 	unsigned char a, mode;
231 
232 	switch (tmp->mode) {
233 	case IMM_NIBBLE:
234 		mode = 0x00;
235 		break;
236 	case IMM_PS2:
237 		mode = 0x01;
238 		break;
239 	default:
240 		return 0;
241 	}
242 
243 	w_ctr(base, 0x04);
244 	udelay(5);
245 	w_dtr(base, mode);
246 	udelay(100);
247 	w_ctr(base, 0x06);
248 	udelay(5);
249 	a = (r_str(base) & 0x20) ? 0 : 1;
250 	udelay(5);
251 	w_ctr(base, 0x07);
252 	udelay(5);
253 	w_ctr(base, 0x06);
254 
255 	if (a) {
256 		printk
257 		    ("IMM: IEEE1284 negotiate indicates no data available.\n");
258 		imm_fail(tmp, DID_ERROR);
259 	}
260 	return a;
261 }
262 
263 /*
264  * Clear EPP timeout bit.
265  */
epp_reset(unsigned short ppb)266 static inline void epp_reset(unsigned short ppb)
267 {
268 	int i;
269 
270 	i = r_str(ppb);
271 	w_str(ppb, i);
272 	w_str(ppb, i & 0xfe);
273 }
274 
275 /*
276  * Wait for empty ECP fifo (if we are in ECP fifo mode only)
277  */
ecp_sync(imm_struct * dev)278 static inline void ecp_sync(imm_struct *dev)
279 {
280 	int i, ppb_hi = dev->base_hi;
281 
282 	if (ppb_hi == 0)
283 		return;
284 
285 	if ((r_ecr(ppb_hi) & 0xe0) == 0x60) {	/* mode 011 == ECP fifo mode */
286 		for (i = 0; i < 100; i++) {
287 			if (r_ecr(ppb_hi) & 0x01)
288 				return;
289 			udelay(5);
290 		}
291 		printk("imm: ECP sync failed as data still present in FIFO.\n");
292 	}
293 }
294 
imm_byte_out(unsigned short base,const char * buffer,int len)295 static int imm_byte_out(unsigned short base, const char *buffer, int len)
296 {
297 	int i;
298 
299 	w_ctr(base, 0x4);	/* apparently a sane mode */
300 	for (i = len >> 1; i; i--) {
301 		w_dtr(base, *buffer++);
302 		w_ctr(base, 0x5);	/* Drop STROBE low */
303 		w_dtr(base, *buffer++);
304 		w_ctr(base, 0x0);	/* STROBE high + INIT low */
305 	}
306 	w_ctr(base, 0x4);	/* apparently a sane mode */
307 	return 1;		/* All went well - we hope! */
308 }
309 
imm_nibble_in(unsigned short base,char * buffer,int len)310 static int imm_nibble_in(unsigned short base, char *buffer, int len)
311 {
312 	unsigned char l;
313 	int i;
314 
315 	/*
316 	 * The following is based on documented timing signals
317 	 */
318 	w_ctr(base, 0x4);
319 	for (i = len; i; i--) {
320 		w_ctr(base, 0x6);
321 		l = (r_str(base) & 0xf0) >> 4;
322 		w_ctr(base, 0x5);
323 		*buffer++ = (r_str(base) & 0xf0) | l;
324 		w_ctr(base, 0x4);
325 	}
326 	return 1;		/* All went well - we hope! */
327 }
328 
imm_byte_in(unsigned short base,char * buffer,int len)329 static int imm_byte_in(unsigned short base, char *buffer, int len)
330 {
331 	int i;
332 
333 	/*
334 	 * The following is based on documented timing signals
335 	 */
336 	w_ctr(base, 0x4);
337 	for (i = len; i; i--) {
338 		w_ctr(base, 0x26);
339 		*buffer++ = r_dtr(base);
340 		w_ctr(base, 0x25);
341 	}
342 	return 1;		/* All went well - we hope! */
343 }
344 
imm_out(imm_struct * dev,char * buffer,int len)345 static int imm_out(imm_struct *dev, char *buffer, int len)
346 {
347 	unsigned short ppb = dev->base;
348 	int r = imm_wait(dev);
349 
350 	/*
351 	 * Make sure that:
352 	 * a) the SCSI bus is BUSY (device still listening)
353 	 * b) the device is listening
354 	 */
355 	if ((r & 0x18) != 0x08) {
356 		imm_fail(dev, DID_ERROR);
357 		printk("IMM: returned SCSI status %2x\n", r);
358 		return 0;
359 	}
360 	switch (dev->mode) {
361 	case IMM_EPP_32:
362 	case IMM_EPP_16:
363 	case IMM_EPP_8:
364 		epp_reset(ppb);
365 		w_ctr(ppb, 0x4);
366 #ifdef CONFIG_SCSI_IZIP_EPP16
367 		if (!(((long) buffer | len) & 0x01))
368 			outsw(ppb + 4, buffer, len >> 1);
369 #else
370 		if (!(((long) buffer | len) & 0x03))
371 			outsl(ppb + 4, buffer, len >> 2);
372 #endif
373 		else
374 			outsb(ppb + 4, buffer, len);
375 		w_ctr(ppb, 0xc);
376 		r = !(r_str(ppb) & 0x01);
377 		w_ctr(ppb, 0xc);
378 		ecp_sync(dev);
379 		break;
380 
381 	case IMM_NIBBLE:
382 	case IMM_PS2:
383 		/* 8 bit output, with a loop */
384 		r = imm_byte_out(ppb, buffer, len);
385 		break;
386 
387 	default:
388 		printk("IMM: bug in imm_out()\n");
389 		r = 0;
390 	}
391 	return r;
392 }
393 
imm_in(imm_struct * dev,char * buffer,int len)394 static int imm_in(imm_struct *dev, char *buffer, int len)
395 {
396 	unsigned short ppb = dev->base;
397 	int r = imm_wait(dev);
398 
399 	/*
400 	 * Make sure that:
401 	 * a) the SCSI bus is BUSY (device still listening)
402 	 * b) the device is sending data
403 	 */
404 	if ((r & 0x18) != 0x18) {
405 		imm_fail(dev, DID_ERROR);
406 		return 0;
407 	}
408 	switch (dev->mode) {
409 	case IMM_NIBBLE:
410 		/* 4 bit input, with a loop */
411 		r = imm_nibble_in(ppb, buffer, len);
412 		w_ctr(ppb, 0xc);
413 		break;
414 
415 	case IMM_PS2:
416 		/* 8 bit input, with a loop */
417 		r = imm_byte_in(ppb, buffer, len);
418 		w_ctr(ppb, 0xc);
419 		break;
420 
421 	case IMM_EPP_32:
422 	case IMM_EPP_16:
423 	case IMM_EPP_8:
424 		epp_reset(ppb);
425 		w_ctr(ppb, 0x24);
426 #ifdef CONFIG_SCSI_IZIP_EPP16
427 		if (!(((long) buffer | len) & 0x01))
428 			insw(ppb + 4, buffer, len >> 1);
429 #else
430 		if (!(((long) buffer | len) & 0x03))
431 			insl(ppb + 4, buffer, len >> 2);
432 #endif
433 		else
434 			insb(ppb + 4, buffer, len);
435 		w_ctr(ppb, 0x2c);
436 		r = !(r_str(ppb) & 0x01);
437 		w_ctr(ppb, 0x2c);
438 		ecp_sync(dev);
439 		break;
440 
441 	default:
442 		printk("IMM: bug in imm_ins()\n");
443 		r = 0;
444 		break;
445 	}
446 	return r;
447 }
448 
imm_cpp(unsigned short ppb,unsigned char b)449 static int imm_cpp(unsigned short ppb, unsigned char b)
450 {
451 	/*
452 	 * Comments on udelay values refer to the
453 	 * Command Packet Protocol (CPP) timing diagram.
454 	 */
455 
456 	unsigned char s1, s2, s3;
457 	w_ctr(ppb, 0x0c);
458 	udelay(2);		/* 1 usec - infinite */
459 	w_dtr(ppb, 0xaa);
460 	udelay(10);		/* 7 usec - infinite */
461 	w_dtr(ppb, 0x55);
462 	udelay(10);		/* 7 usec - infinite */
463 	w_dtr(ppb, 0x00);
464 	udelay(10);		/* 7 usec - infinite */
465 	w_dtr(ppb, 0xff);
466 	udelay(10);		/* 7 usec - infinite */
467 	s1 = r_str(ppb) & 0xb8;
468 	w_dtr(ppb, 0x87);
469 	udelay(10);		/* 7 usec - infinite */
470 	s2 = r_str(ppb) & 0xb8;
471 	w_dtr(ppb, 0x78);
472 	udelay(10);		/* 7 usec - infinite */
473 	s3 = r_str(ppb) & 0x38;
474 	/*
475 	 * Values for b are:
476 	 * 0000 00aa    Assign address aa to current device
477 	 * 0010 00aa    Select device aa in EPP Winbond mode
478 	 * 0010 10aa    Select device aa in EPP mode
479 	 * 0011 xxxx    Deselect all devices
480 	 * 0110 00aa    Test device aa
481 	 * 1101 00aa    Select device aa in ECP mode
482 	 * 1110 00aa    Select device aa in Compatible mode
483 	 */
484 	w_dtr(ppb, b);
485 	udelay(2);		/* 1 usec - infinite */
486 	w_ctr(ppb, 0x0c);
487 	udelay(10);		/* 7 usec - infinite */
488 	w_ctr(ppb, 0x0d);
489 	udelay(2);		/* 1 usec - infinite */
490 	w_ctr(ppb, 0x0c);
491 	udelay(10);		/* 7 usec - infinite */
492 	w_dtr(ppb, 0xff);
493 	udelay(10);		/* 7 usec - infinite */
494 
495 	/*
496 	 * The following table is electrical pin values.
497 	 * (BSY is inverted at the CTR register)
498 	 *
499 	 *       BSY  ACK  POut SEL  Fault
500 	 * S1    0    X    1    1    1
501 	 * S2    1    X    0    1    1
502 	 * S3    L    X    1    1    S
503 	 *
504 	 * L => Last device in chain
505 	 * S => Selected
506 	 *
507 	 * Observered values for S1,S2,S3 are:
508 	 * Disconnect => f8/58/78
509 	 * Connect    => f8/58/70
510 	 */
511 	if ((s1 == 0xb8) && (s2 == 0x18) && (s3 == 0x30))
512 		return 1;	/* Connected */
513 	if ((s1 == 0xb8) && (s2 == 0x18) && (s3 == 0x38))
514 		return 0;	/* Disconnected */
515 
516 	return -1;		/* No device present */
517 }
518 
imm_connect(imm_struct * dev,int flag)519 static inline int imm_connect(imm_struct *dev, int flag)
520 {
521 	unsigned short ppb = dev->base;
522 
523 	imm_cpp(ppb, 0xe0);	/* Select device 0 in compatible mode */
524 	imm_cpp(ppb, 0x30);	/* Disconnect all devices */
525 
526 	if ((dev->mode == IMM_EPP_8) ||
527 	    (dev->mode == IMM_EPP_16) ||
528 	    (dev->mode == IMM_EPP_32))
529 		return imm_cpp(ppb, 0x28);	/* Select device 0 in EPP mode */
530 	return imm_cpp(ppb, 0xe0);	/* Select device 0 in compatible mode */
531 }
532 
imm_disconnect(imm_struct * dev)533 static void imm_disconnect(imm_struct *dev)
534 {
535 	imm_cpp(dev->base, 0x30);	/* Disconnect all devices */
536 }
537 
imm_select(imm_struct * dev,int target)538 static int imm_select(imm_struct *dev, int target)
539 {
540 	int k;
541 	unsigned short ppb = dev->base;
542 
543 	/*
544 	 * Firstly we want to make sure there is nothing
545 	 * holding onto the SCSI bus.
546 	 */
547 	w_ctr(ppb, 0xc);
548 
549 	k = IMM_SELECT_TMO;
550 	do {
551 		k--;
552 	} while ((r_str(ppb) & 0x08) && (k));
553 
554 	if (!k)
555 		return 0;
556 
557 	/*
558 	 * Now assert the SCSI ID (HOST and TARGET) on the data bus
559 	 */
560 	w_ctr(ppb, 0x4);
561 	w_dtr(ppb, 0x80 | (1 << target));
562 	udelay(1);
563 
564 	/*
565 	 * Deassert SELIN first followed by STROBE
566 	 */
567 	w_ctr(ppb, 0xc);
568 	w_ctr(ppb, 0xd);
569 
570 	/*
571 	 * ACK should drop low while SELIN is deasserted.
572 	 * FAULT should drop low when the SCSI device latches the bus.
573 	 */
574 	k = IMM_SELECT_TMO;
575 	do {
576 		k--;
577 	}
578 	while (!(r_str(ppb) & 0x08) && (k));
579 
580 	/*
581 	 * Place the interface back into a sane state (status mode)
582 	 */
583 	w_ctr(ppb, 0xc);
584 	return (k) ? 1 : 0;
585 }
586 
imm_init(imm_struct * dev)587 static int imm_init(imm_struct *dev)
588 {
589 	if (imm_connect(dev, 0) != 1)
590 		return -EIO;
591 	imm_reset_pulse(dev->base);
592 	mdelay(1);	/* Delay to allow devices to settle */
593 	imm_disconnect(dev);
594 	mdelay(1);	/* Another delay to allow devices to settle */
595 	return device_check(dev);
596 }
597 
imm_send_command(struct scsi_cmnd * cmd)598 static inline int imm_send_command(struct scsi_cmnd *cmd)
599 {
600 	imm_struct *dev = imm_dev(cmd->device->host);
601 	int k;
602 
603 	/* NOTE: IMM uses byte pairs */
604 	for (k = 0; k < cmd->cmd_len; k += 2)
605 		if (!imm_out(dev, &cmd->cmnd[k], 2))
606 			return 0;
607 	return 1;
608 }
609 
610 /*
611  * The bulk flag enables some optimisations in the data transfer loops,
612  * it should be true for any command that transfers data in integral
613  * numbers of sectors.
614  *
615  * The driver appears to remain stable if we speed up the parallel port
616  * i/o in this function, but not elsewhere.
617  */
imm_completion(struct scsi_cmnd * cmd)618 static int imm_completion(struct scsi_cmnd *cmd)
619 {
620 	/* Return codes:
621 	 * -1     Error
622 	 *  0     Told to schedule
623 	 *  1     Finished data transfer
624 	 */
625 	imm_struct *dev = imm_dev(cmd->device->host);
626 	unsigned short ppb = dev->base;
627 	unsigned long start_jiffies = jiffies;
628 
629 	unsigned char r, v;
630 	int fast, bulk, status;
631 
632 	v = cmd->cmnd[0];
633 	bulk = ((v == READ_6) ||
634 		(v == READ_10) || (v == WRITE_6) || (v == WRITE_10));
635 
636 	/*
637 	 * We only get here if the drive is ready to comunicate,
638 	 * hence no need for a full imm_wait.
639 	 */
640 	w_ctr(ppb, 0x0c);
641 	r = (r_str(ppb) & 0xb8);
642 
643 	/*
644 	 * while (device is not ready to send status byte)
645 	 *     loop;
646 	 */
647 	while (r != (unsigned char) 0xb8) {
648 		/*
649 		 * If we have been running for more than a full timer tick
650 		 * then take a rest.
651 		 */
652 		if (time_after(jiffies, start_jiffies + 1))
653 			return 0;
654 
655 		/*
656 		 * FAIL if:
657 		 * a) Drive status is screwy (!ready && !present)
658 		 * b) Drive is requesting/sending more data than expected
659 		 */
660 		if (((r & 0x88) != 0x88) || (cmd->SCp.this_residual <= 0)) {
661 			imm_fail(dev, DID_ERROR);
662 			return -1;	/* ERROR_RETURN */
663 		}
664 		/* determine if we should use burst I/O */
665 		if (dev->rd == 0) {
666 			fast = (bulk
667 				&& (cmd->SCp.this_residual >=
668 				    IMM_BURST_SIZE)) ? IMM_BURST_SIZE : 2;
669 			status = imm_out(dev, cmd->SCp.ptr, fast);
670 		} else {
671 			fast = (bulk
672 				&& (cmd->SCp.this_residual >=
673 				    IMM_BURST_SIZE)) ? IMM_BURST_SIZE : 1;
674 			status = imm_in(dev, cmd->SCp.ptr, fast);
675 		}
676 
677 		cmd->SCp.ptr += fast;
678 		cmd->SCp.this_residual -= fast;
679 
680 		if (!status) {
681 			imm_fail(dev, DID_BUS_BUSY);
682 			return -1;	/* ERROR_RETURN */
683 		}
684 		if (cmd->SCp.buffer && !cmd->SCp.this_residual) {
685 			/* if scatter/gather, advance to the next segment */
686 			if (cmd->SCp.buffers_residual--) {
687 				cmd->SCp.buffer++;
688 				cmd->SCp.this_residual =
689 				    cmd->SCp.buffer->length;
690 				cmd->SCp.ptr = sg_virt(cmd->SCp.buffer);
691 
692 				/*
693 				 * Make sure that we transfer even number of bytes
694 				 * otherwise it makes imm_byte_out() messy.
695 				 */
696 				if (cmd->SCp.this_residual & 0x01)
697 					cmd->SCp.this_residual++;
698 			}
699 		}
700 		/* Now check to see if the drive is ready to comunicate */
701 		w_ctr(ppb, 0x0c);
702 		r = (r_str(ppb) & 0xb8);
703 
704 		/* If not, drop back down to the scheduler and wait a timer tick */
705 		if (!(r & 0x80))
706 			return 0;
707 	}
708 	return 1;		/* FINISH_RETURN */
709 }
710 
711 /*
712  * Since the IMM itself doesn't generate interrupts, we use
713  * the scheduler's task queue to generate a stream of call-backs and
714  * complete the request when the drive is ready.
715  */
imm_interrupt(struct work_struct * work)716 static void imm_interrupt(struct work_struct *work)
717 {
718 	imm_struct *dev = container_of(work, imm_struct, imm_tq.work);
719 	struct scsi_cmnd *cmd = dev->cur_cmd;
720 	struct Scsi_Host *host = cmd->device->host;
721 	unsigned long flags;
722 
723 	if (imm_engine(dev, cmd)) {
724 		schedule_delayed_work(&dev->imm_tq, 1);
725 		return;
726 	}
727 	/* Command must of completed hence it is safe to let go... */
728 #if IMM_DEBUG > 0
729 	switch ((cmd->result >> 16) & 0xff) {
730 	case DID_OK:
731 		break;
732 	case DID_NO_CONNECT:
733 		printk("imm: no device at SCSI ID %i\n", cmd->device->id);
734 		break;
735 	case DID_BUS_BUSY:
736 		printk("imm: BUS BUSY - EPP timeout detected\n");
737 		break;
738 	case DID_TIME_OUT:
739 		printk("imm: unknown timeout\n");
740 		break;
741 	case DID_ABORT:
742 		printk("imm: told to abort\n");
743 		break;
744 	case DID_PARITY:
745 		printk("imm: parity error (???)\n");
746 		break;
747 	case DID_ERROR:
748 		printk("imm: internal driver error\n");
749 		break;
750 	case DID_RESET:
751 		printk("imm: told to reset device\n");
752 		break;
753 	case DID_BAD_INTR:
754 		printk("imm: bad interrupt (???)\n");
755 		break;
756 	default:
757 		printk("imm: bad return code (%02x)\n",
758 		       (cmd->result >> 16) & 0xff);
759 	}
760 #endif
761 
762 	if (cmd->SCp.phase > 1)
763 		imm_disconnect(dev);
764 
765 	imm_pb_dismiss(dev);
766 
767 	spin_lock_irqsave(host->host_lock, flags);
768 	dev->cur_cmd = NULL;
769 	cmd->scsi_done(cmd);
770 	spin_unlock_irqrestore(host->host_lock, flags);
771 	return;
772 }
773 
imm_engine(imm_struct * dev,struct scsi_cmnd * cmd)774 static int imm_engine(imm_struct *dev, struct scsi_cmnd *cmd)
775 {
776 	unsigned short ppb = dev->base;
777 	unsigned char l = 0, h = 0;
778 	int retv, x;
779 
780 	/* First check for any errors that may have occurred
781 	 * Here we check for internal errors
782 	 */
783 	if (dev->failed)
784 		return 0;
785 
786 	switch (cmd->SCp.phase) {
787 	case 0:		/* Phase 0 - Waiting for parport */
788 		if (time_after(jiffies, dev->jstart + HZ)) {
789 			/*
790 			 * We waited more than a second
791 			 * for parport to call us
792 			 */
793 			imm_fail(dev, DID_BUS_BUSY);
794 			return 0;
795 		}
796 		return 1;	/* wait until imm_wakeup claims parport */
797 		/* Phase 1 - Connected */
798 	case 1:
799 		imm_connect(dev, CONNECT_EPP_MAYBE);
800 		cmd->SCp.phase++;
801 
802 		/* Phase 2 - We are now talking to the scsi bus */
803 	case 2:
804 		if (!imm_select(dev, scmd_id(cmd))) {
805 			imm_fail(dev, DID_NO_CONNECT);
806 			return 0;
807 		}
808 		cmd->SCp.phase++;
809 
810 		/* Phase 3 - Ready to accept a command */
811 	case 3:
812 		w_ctr(ppb, 0x0c);
813 		if (!(r_str(ppb) & 0x80))
814 			return 1;
815 
816 		if (!imm_send_command(cmd))
817 			return 0;
818 		cmd->SCp.phase++;
819 
820 		/* Phase 4 - Setup scatter/gather buffers */
821 	case 4:
822 		if (scsi_bufflen(cmd)) {
823 			cmd->SCp.buffer = scsi_sglist(cmd);
824 			cmd->SCp.this_residual = cmd->SCp.buffer->length;
825 			cmd->SCp.ptr = sg_virt(cmd->SCp.buffer);
826 		} else {
827 			cmd->SCp.buffer = NULL;
828 			cmd->SCp.this_residual = 0;
829 			cmd->SCp.ptr = NULL;
830 		}
831 		cmd->SCp.buffers_residual = scsi_sg_count(cmd) - 1;
832 		cmd->SCp.phase++;
833 		if (cmd->SCp.this_residual & 0x01)
834 			cmd->SCp.this_residual++;
835 		/* Phase 5 - Pre-Data transfer stage */
836 	case 5:
837 		/* Spin lock for BUSY */
838 		w_ctr(ppb, 0x0c);
839 		if (!(r_str(ppb) & 0x80))
840 			return 1;
841 
842 		/* Require negotiation for read requests */
843 		x = (r_str(ppb) & 0xb8);
844 		dev->rd = (x & 0x10) ? 1 : 0;
845 		dev->dp = (x & 0x20) ? 0 : 1;
846 
847 		if ((dev->dp) && (dev->rd))
848 			if (imm_negotiate(dev))
849 				return 0;
850 		cmd->SCp.phase++;
851 
852 		/* Phase 6 - Data transfer stage */
853 	case 6:
854 		/* Spin lock for BUSY */
855 		w_ctr(ppb, 0x0c);
856 		if (!(r_str(ppb) & 0x80))
857 			return 1;
858 
859 		if (dev->dp) {
860 			retv = imm_completion(cmd);
861 			if (retv == -1)
862 				return 0;
863 			if (retv == 0)
864 				return 1;
865 		}
866 		cmd->SCp.phase++;
867 
868 		/* Phase 7 - Post data transfer stage */
869 	case 7:
870 		if ((dev->dp) && (dev->rd)) {
871 			if ((dev->mode == IMM_NIBBLE) || (dev->mode == IMM_PS2)) {
872 				w_ctr(ppb, 0x4);
873 				w_ctr(ppb, 0xc);
874 				w_ctr(ppb, 0xe);
875 				w_ctr(ppb, 0x4);
876 			}
877 		}
878 		cmd->SCp.phase++;
879 
880 		/* Phase 8 - Read status/message */
881 	case 8:
882 		/* Check for data overrun */
883 		if (imm_wait(dev) != (unsigned char) 0xb8) {
884 			imm_fail(dev, DID_ERROR);
885 			return 0;
886 		}
887 		if (imm_negotiate(dev))
888 			return 0;
889 		if (imm_in(dev, &l, 1)) {	/* read status byte */
890 			/* Check for optional message byte */
891 			if (imm_wait(dev) == (unsigned char) 0xb8)
892 				imm_in(dev, &h, 1);
893 			cmd->result = (DID_OK << 16) + (l & STATUS_MASK);
894 		}
895 		if ((dev->mode == IMM_NIBBLE) || (dev->mode == IMM_PS2)) {
896 			w_ctr(ppb, 0x4);
897 			w_ctr(ppb, 0xc);
898 			w_ctr(ppb, 0xe);
899 			w_ctr(ppb, 0x4);
900 		}
901 		return 0;	/* Finished */
902 		break;
903 
904 	default:
905 		printk("imm: Invalid scsi phase\n");
906 	}
907 	return 0;
908 }
909 
imm_queuecommand_lck(struct scsi_cmnd * cmd,void (* done)(struct scsi_cmnd *))910 static int imm_queuecommand_lck(struct scsi_cmnd *cmd,
911 		void (*done)(struct scsi_cmnd *))
912 {
913 	imm_struct *dev = imm_dev(cmd->device->host);
914 
915 	if (dev->cur_cmd) {
916 		printk("IMM: bug in imm_queuecommand\n");
917 		return 0;
918 	}
919 	dev->failed = 0;
920 	dev->jstart = jiffies;
921 	dev->cur_cmd = cmd;
922 	cmd->scsi_done = done;
923 	cmd->result = DID_ERROR << 16;	/* default return code */
924 	cmd->SCp.phase = 0;	/* bus free */
925 
926 	schedule_delayed_work(&dev->imm_tq, 0);
927 
928 	imm_pb_claim(dev);
929 
930 	return 0;
931 }
932 
DEF_SCSI_QCMD(imm_queuecommand)933 static DEF_SCSI_QCMD(imm_queuecommand)
934 
935 /*
936  * Apparently the disk->capacity attribute is off by 1 sector
937  * for all disk drives.  We add the one here, but it should really
938  * be done in sd.c.  Even if it gets fixed there, this will still
939  * work.
940  */
941 static int imm_biosparam(struct scsi_device *sdev, struct block_device *dev,
942 			 sector_t capacity, int ip[])
943 {
944 	ip[0] = 0x40;
945 	ip[1] = 0x20;
946 	ip[2] = ((unsigned long) capacity + 1) / (ip[0] * ip[1]);
947 	if (ip[2] > 1024) {
948 		ip[0] = 0xff;
949 		ip[1] = 0x3f;
950 		ip[2] = ((unsigned long) capacity + 1) / (ip[0] * ip[1]);
951 	}
952 	return 0;
953 }
954 
imm_abort(struct scsi_cmnd * cmd)955 static int imm_abort(struct scsi_cmnd *cmd)
956 {
957 	imm_struct *dev = imm_dev(cmd->device->host);
958 	/*
959 	 * There is no method for aborting commands since Iomega
960 	 * have tied the SCSI_MESSAGE line high in the interface
961 	 */
962 
963 	switch (cmd->SCp.phase) {
964 	case 0:		/* Do not have access to parport */
965 	case 1:		/* Have not connected to interface */
966 		dev->cur_cmd = NULL;	/* Forget the problem */
967 		return SUCCESS;
968 		break;
969 	default:		/* SCSI command sent, can not abort */
970 		return FAILED;
971 		break;
972 	}
973 }
974 
imm_reset_pulse(unsigned int base)975 static void imm_reset_pulse(unsigned int base)
976 {
977 	w_ctr(base, 0x04);
978 	w_dtr(base, 0x40);
979 	udelay(1);
980 	w_ctr(base, 0x0c);
981 	w_ctr(base, 0x0d);
982 	udelay(50);
983 	w_ctr(base, 0x0c);
984 	w_ctr(base, 0x04);
985 }
986 
imm_reset(struct scsi_cmnd * cmd)987 static int imm_reset(struct scsi_cmnd *cmd)
988 {
989 	imm_struct *dev = imm_dev(cmd->device->host);
990 
991 	if (cmd->SCp.phase)
992 		imm_disconnect(dev);
993 	dev->cur_cmd = NULL;	/* Forget the problem */
994 
995 	imm_connect(dev, CONNECT_NORMAL);
996 	imm_reset_pulse(dev->base);
997 	mdelay(1);		/* device settle delay */
998 	imm_disconnect(dev);
999 	mdelay(1);		/* device settle delay */
1000 	return SUCCESS;
1001 }
1002 
device_check(imm_struct * dev)1003 static int device_check(imm_struct *dev)
1004 {
1005 	/* This routine looks for a device and then attempts to use EPP
1006 	   to send a command. If all goes as planned then EPP is available. */
1007 
1008 	static char cmd[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
1009 	int loop, old_mode, status, k, ppb = dev->base;
1010 	unsigned char l;
1011 
1012 	old_mode = dev->mode;
1013 	for (loop = 0; loop < 8; loop++) {
1014 		/* Attempt to use EPP for Test Unit Ready */
1015 		if ((ppb & 0x0007) == 0x0000)
1016 			dev->mode = IMM_EPP_32;
1017 
1018 	      second_pass:
1019 		imm_connect(dev, CONNECT_EPP_MAYBE);
1020 		/* Select SCSI device */
1021 		if (!imm_select(dev, loop)) {
1022 			imm_disconnect(dev);
1023 			continue;
1024 		}
1025 		printk("imm: Found device at ID %i, Attempting to use %s\n",
1026 		       loop, IMM_MODE_STRING[dev->mode]);
1027 
1028 		/* Send SCSI command */
1029 		status = 1;
1030 		w_ctr(ppb, 0x0c);
1031 		for (l = 0; (l < 3) && (status); l++)
1032 			status = imm_out(dev, &cmd[l << 1], 2);
1033 
1034 		if (!status) {
1035 			imm_disconnect(dev);
1036 			imm_connect(dev, CONNECT_EPP_MAYBE);
1037 			imm_reset_pulse(dev->base);
1038 			udelay(1000);
1039 			imm_disconnect(dev);
1040 			udelay(1000);
1041 			if (dev->mode == IMM_EPP_32) {
1042 				dev->mode = old_mode;
1043 				goto second_pass;
1044 			}
1045 			printk("imm: Unable to establish communication\n");
1046 			return -EIO;
1047 		}
1048 		w_ctr(ppb, 0x0c);
1049 
1050 		k = 1000000;	/* 1 Second */
1051 		do {
1052 			l = r_str(ppb);
1053 			k--;
1054 			udelay(1);
1055 		} while (!(l & 0x80) && (k));
1056 
1057 		l &= 0xb8;
1058 
1059 		if (l != 0xb8) {
1060 			imm_disconnect(dev);
1061 			imm_connect(dev, CONNECT_EPP_MAYBE);
1062 			imm_reset_pulse(dev->base);
1063 			udelay(1000);
1064 			imm_disconnect(dev);
1065 			udelay(1000);
1066 			if (dev->mode == IMM_EPP_32) {
1067 				dev->mode = old_mode;
1068 				goto second_pass;
1069 			}
1070 			printk
1071 			    ("imm: Unable to establish communication\n");
1072 			return -EIO;
1073 		}
1074 		imm_disconnect(dev);
1075 		printk
1076 		    ("imm: Communication established at 0x%x with ID %i using %s\n",
1077 		     ppb, loop, IMM_MODE_STRING[dev->mode]);
1078 		imm_connect(dev, CONNECT_EPP_MAYBE);
1079 		imm_reset_pulse(dev->base);
1080 		udelay(1000);
1081 		imm_disconnect(dev);
1082 		udelay(1000);
1083 		return 0;
1084 	}
1085 	printk("imm: No devices found\n");
1086 	return -ENODEV;
1087 }
1088 
1089 /*
1090  * imm cannot deal with highmem, so this causes all IO pages for this host
1091  * to reside in low memory (hence mapped)
1092  */
imm_adjust_queue(struct scsi_device * device)1093 static int imm_adjust_queue(struct scsi_device *device)
1094 {
1095 	blk_queue_bounce_limit(device->request_queue, BLK_BOUNCE_HIGH);
1096 	return 0;
1097 }
1098 
1099 static struct scsi_host_template imm_template = {
1100 	.module			= THIS_MODULE,
1101 	.proc_name		= "imm",
1102 	.show_info		= imm_show_info,
1103 	.write_info		= imm_write_info,
1104 	.name			= "Iomega VPI2 (imm) interface",
1105 	.queuecommand		= imm_queuecommand,
1106 	.eh_abort_handler	= imm_abort,
1107 	.eh_bus_reset_handler	= imm_reset,
1108 	.eh_host_reset_handler	= imm_reset,
1109 	.bios_param		= imm_biosparam,
1110 	.this_id		= 7,
1111 	.sg_tablesize		= SG_ALL,
1112 	.use_clustering		= ENABLE_CLUSTERING,
1113 	.can_queue		= 1,
1114 	.slave_alloc		= imm_adjust_queue,
1115 };
1116 
1117 /***************************************************************************
1118  *                   Parallel port probing routines                        *
1119  ***************************************************************************/
1120 
1121 static LIST_HEAD(imm_hosts);
1122 
__imm_attach(struct parport * pb)1123 static int __imm_attach(struct parport *pb)
1124 {
1125 	struct Scsi_Host *host;
1126 	imm_struct *dev;
1127 	DECLARE_WAIT_QUEUE_HEAD_ONSTACK(waiting);
1128 	DEFINE_WAIT(wait);
1129 	int ports;
1130 	int modes, ppb;
1131 	int err = -ENOMEM;
1132 
1133 	init_waitqueue_head(&waiting);
1134 
1135 	dev = kzalloc(sizeof(imm_struct), GFP_KERNEL);
1136 	if (!dev)
1137 		return -ENOMEM;
1138 
1139 
1140 	dev->base = -1;
1141 	dev->mode = IMM_AUTODETECT;
1142 	INIT_LIST_HEAD(&dev->list);
1143 
1144 	dev->dev = parport_register_device(pb, "imm", NULL, imm_wakeup,
1145 						NULL, 0, dev);
1146 
1147 	if (!dev->dev)
1148 		goto out;
1149 
1150 
1151 	/* Claim the bus so it remembers what we do to the control
1152 	 * registers. [ CTR and ECP ]
1153 	 */
1154 	err = -EBUSY;
1155 	dev->waiting = &waiting;
1156 	prepare_to_wait(&waiting, &wait, TASK_UNINTERRUPTIBLE);
1157 	if (imm_pb_claim(dev))
1158 		schedule_timeout(3 * HZ);
1159 	if (dev->wanted) {
1160 		printk(KERN_ERR "imm%d: failed to claim parport because "
1161 			"a pardevice is owning the port for too long "
1162 			"time!\n", pb->number);
1163 		imm_pb_dismiss(dev);
1164 		dev->waiting = NULL;
1165 		finish_wait(&waiting, &wait);
1166 		goto out1;
1167 	}
1168 	dev->waiting = NULL;
1169 	finish_wait(&waiting, &wait);
1170 	ppb = dev->base = dev->dev->port->base;
1171 	dev->base_hi = dev->dev->port->base_hi;
1172 	w_ctr(ppb, 0x0c);
1173 	modes = dev->dev->port->modes;
1174 
1175 	/* Mode detection works up the chain of speed
1176 	 * This avoids a nasty if-then-else-if-... tree
1177 	 */
1178 	dev->mode = IMM_NIBBLE;
1179 
1180 	if (modes & PARPORT_MODE_TRISTATE)
1181 		dev->mode = IMM_PS2;
1182 
1183 	/* Done configuration */
1184 
1185 	err = imm_init(dev);
1186 
1187 	imm_pb_release(dev);
1188 
1189 	if (err)
1190 		goto out1;
1191 
1192 	/* now the glue ... */
1193 	if (dev->mode == IMM_NIBBLE || dev->mode == IMM_PS2)
1194 		ports = 3;
1195 	else
1196 		ports = 8;
1197 
1198 	INIT_DELAYED_WORK(&dev->imm_tq, imm_interrupt);
1199 
1200 	err = -ENOMEM;
1201 	host = scsi_host_alloc(&imm_template, sizeof(imm_struct *));
1202 	if (!host)
1203 		goto out1;
1204 	host->io_port = pb->base;
1205 	host->n_io_port = ports;
1206 	host->dma_channel = -1;
1207 	host->unique_id = pb->number;
1208 	*(imm_struct **)&host->hostdata = dev;
1209 	dev->host = host;
1210 	list_add_tail(&dev->list, &imm_hosts);
1211 	err = scsi_add_host(host, NULL);
1212 	if (err)
1213 		goto out2;
1214 	scsi_scan_host(host);
1215 	return 0;
1216 
1217 out2:
1218 	list_del_init(&dev->list);
1219 	scsi_host_put(host);
1220 out1:
1221 	parport_unregister_device(dev->dev);
1222 out:
1223 	kfree(dev);
1224 	return err;
1225 }
1226 
imm_attach(struct parport * pb)1227 static void imm_attach(struct parport *pb)
1228 {
1229 	__imm_attach(pb);
1230 }
1231 
imm_detach(struct parport * pb)1232 static void imm_detach(struct parport *pb)
1233 {
1234 	imm_struct *dev;
1235 	list_for_each_entry(dev, &imm_hosts, list) {
1236 		if (dev->dev->port == pb) {
1237 			list_del_init(&dev->list);
1238 			scsi_remove_host(dev->host);
1239 			scsi_host_put(dev->host);
1240 			parport_unregister_device(dev->dev);
1241 			kfree(dev);
1242 			break;
1243 		}
1244 	}
1245 }
1246 
1247 static struct parport_driver imm_driver = {
1248 	.name	= "imm",
1249 	.attach	= imm_attach,
1250 	.detach	= imm_detach,
1251 };
1252 
imm_driver_init(void)1253 static int __init imm_driver_init(void)
1254 {
1255 	printk("imm: Version %s\n", IMM_VERSION);
1256 	return parport_register_driver(&imm_driver);
1257 }
1258 
imm_driver_exit(void)1259 static void __exit imm_driver_exit(void)
1260 {
1261 	parport_unregister_driver(&imm_driver);
1262 }
1263 
1264 module_init(imm_driver_init);
1265 module_exit(imm_driver_exit);
1266 
1267 MODULE_LICENSE("GPL");
1268