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