Loading...
1/* esp_scsi.c: ESP SCSI driver.
2 *
3 * Copyright (C) 2007 David S. Miller (davem@davemloft.net)
4 */
5
6#include <linux/kernel.h>
7#include <linux/types.h>
8#include <linux/slab.h>
9#include <linux/delay.h>
10#include <linux/list.h>
11#include <linux/completion.h>
12#include <linux/kallsyms.h>
13#include <linux/module.h>
14#include <linux/moduleparam.h>
15#include <linux/init.h>
16#include <linux/irqreturn.h>
17
18#include <asm/irq.h>
19#include <asm/io.h>
20#include <asm/dma.h>
21
22#include <scsi/scsi.h>
23#include <scsi/scsi_host.h>
24#include <scsi/scsi_cmnd.h>
25#include <scsi/scsi_device.h>
26#include <scsi/scsi_tcq.h>
27#include <scsi/scsi_dbg.h>
28#include <scsi/scsi_transport_spi.h>
29
30#include "esp_scsi.h"
31
32#define DRV_MODULE_NAME "esp"
33#define PFX DRV_MODULE_NAME ": "
34#define DRV_VERSION "2.000"
35#define DRV_MODULE_RELDATE "April 19, 2007"
36
37/* SCSI bus reset settle time in seconds. */
38static int esp_bus_reset_settle = 3;
39
40static u32 esp_debug;
41#define ESP_DEBUG_INTR 0x00000001
42#define ESP_DEBUG_SCSICMD 0x00000002
43#define ESP_DEBUG_RESET 0x00000004
44#define ESP_DEBUG_MSGIN 0x00000008
45#define ESP_DEBUG_MSGOUT 0x00000010
46#define ESP_DEBUG_CMDDONE 0x00000020
47#define ESP_DEBUG_DISCONNECT 0x00000040
48#define ESP_DEBUG_DATASTART 0x00000080
49#define ESP_DEBUG_DATADONE 0x00000100
50#define ESP_DEBUG_RECONNECT 0x00000200
51#define ESP_DEBUG_AUTOSENSE 0x00000400
52
53#define esp_log_intr(f, a...) \
54do { if (esp_debug & ESP_DEBUG_INTR) \
55 printk(f, ## a); \
56} while (0)
57
58#define esp_log_reset(f, a...) \
59do { if (esp_debug & ESP_DEBUG_RESET) \
60 printk(f, ## a); \
61} while (0)
62
63#define esp_log_msgin(f, a...) \
64do { if (esp_debug & ESP_DEBUG_MSGIN) \
65 printk(f, ## a); \
66} while (0)
67
68#define esp_log_msgout(f, a...) \
69do { if (esp_debug & ESP_DEBUG_MSGOUT) \
70 printk(f, ## a); \
71} while (0)
72
73#define esp_log_cmddone(f, a...) \
74do { if (esp_debug & ESP_DEBUG_CMDDONE) \
75 printk(f, ## a); \
76} while (0)
77
78#define esp_log_disconnect(f, a...) \
79do { if (esp_debug & ESP_DEBUG_DISCONNECT) \
80 printk(f, ## a); \
81} while (0)
82
83#define esp_log_datastart(f, a...) \
84do { if (esp_debug & ESP_DEBUG_DATASTART) \
85 printk(f, ## a); \
86} while (0)
87
88#define esp_log_datadone(f, a...) \
89do { if (esp_debug & ESP_DEBUG_DATADONE) \
90 printk(f, ## a); \
91} while (0)
92
93#define esp_log_reconnect(f, a...) \
94do { if (esp_debug & ESP_DEBUG_RECONNECT) \
95 printk(f, ## a); \
96} while (0)
97
98#define esp_log_autosense(f, a...) \
99do { if (esp_debug & ESP_DEBUG_AUTOSENSE) \
100 printk(f, ## a); \
101} while (0)
102
103#define esp_read8(REG) esp->ops->esp_read8(esp, REG)
104#define esp_write8(VAL,REG) esp->ops->esp_write8(esp, VAL, REG)
105
106static void esp_log_fill_regs(struct esp *esp,
107 struct esp_event_ent *p)
108{
109 p->sreg = esp->sreg;
110 p->seqreg = esp->seqreg;
111 p->sreg2 = esp->sreg2;
112 p->ireg = esp->ireg;
113 p->select_state = esp->select_state;
114 p->event = esp->event;
115}
116
117void scsi_esp_cmd(struct esp *esp, u8 val)
118{
119 struct esp_event_ent *p;
120 int idx = esp->esp_event_cur;
121
122 p = &esp->esp_event_log[idx];
123 p->type = ESP_EVENT_TYPE_CMD;
124 p->val = val;
125 esp_log_fill_regs(esp, p);
126
127 esp->esp_event_cur = (idx + 1) & (ESP_EVENT_LOG_SZ - 1);
128
129 esp_write8(val, ESP_CMD);
130}
131EXPORT_SYMBOL(scsi_esp_cmd);
132
133static void esp_event(struct esp *esp, u8 val)
134{
135 struct esp_event_ent *p;
136 int idx = esp->esp_event_cur;
137
138 p = &esp->esp_event_log[idx];
139 p->type = ESP_EVENT_TYPE_EVENT;
140 p->val = val;
141 esp_log_fill_regs(esp, p);
142
143 esp->esp_event_cur = (idx + 1) & (ESP_EVENT_LOG_SZ - 1);
144
145 esp->event = val;
146}
147
148static void esp_dump_cmd_log(struct esp *esp)
149{
150 int idx = esp->esp_event_cur;
151 int stop = idx;
152
153 printk(KERN_INFO PFX "esp%d: Dumping command log\n",
154 esp->host->unique_id);
155 do {
156 struct esp_event_ent *p = &esp->esp_event_log[idx];
157
158 printk(KERN_INFO PFX "esp%d: ent[%d] %s ",
159 esp->host->unique_id, idx,
160 p->type == ESP_EVENT_TYPE_CMD ? "CMD" : "EVENT");
161
162 printk("val[%02x] sreg[%02x] seqreg[%02x] "
163 "sreg2[%02x] ireg[%02x] ss[%02x] event[%02x]\n",
164 p->val, p->sreg, p->seqreg,
165 p->sreg2, p->ireg, p->select_state, p->event);
166
167 idx = (idx + 1) & (ESP_EVENT_LOG_SZ - 1);
168 } while (idx != stop);
169}
170
171static void esp_flush_fifo(struct esp *esp)
172{
173 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
174 if (esp->rev == ESP236) {
175 int lim = 1000;
176
177 while (esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES) {
178 if (--lim == 0) {
179 printk(KERN_ALERT PFX "esp%d: ESP_FF_BYTES "
180 "will not clear!\n",
181 esp->host->unique_id);
182 break;
183 }
184 udelay(1);
185 }
186 }
187}
188
189static void hme_read_fifo(struct esp *esp)
190{
191 int fcnt = esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES;
192 int idx = 0;
193
194 while (fcnt--) {
195 esp->fifo[idx++] = esp_read8(ESP_FDATA);
196 esp->fifo[idx++] = esp_read8(ESP_FDATA);
197 }
198 if (esp->sreg2 & ESP_STAT2_F1BYTE) {
199 esp_write8(0, ESP_FDATA);
200 esp->fifo[idx++] = esp_read8(ESP_FDATA);
201 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
202 }
203 esp->fifo_cnt = idx;
204}
205
206static void esp_set_all_config3(struct esp *esp, u8 val)
207{
208 int i;
209
210 for (i = 0; i < ESP_MAX_TARGET; i++)
211 esp->target[i].esp_config3 = val;
212}
213
214/* Reset the ESP chip, _not_ the SCSI bus. */
215static void esp_reset_esp(struct esp *esp)
216{
217 u8 family_code, version;
218
219 /* Now reset the ESP chip */
220 scsi_esp_cmd(esp, ESP_CMD_RC);
221 scsi_esp_cmd(esp, ESP_CMD_NULL | ESP_CMD_DMA);
222 if (esp->rev == FAST)
223 esp_write8(ESP_CONFIG2_FENAB, ESP_CFG2);
224 scsi_esp_cmd(esp, ESP_CMD_NULL | ESP_CMD_DMA);
225
226 /* This is the only point at which it is reliable to read
227 * the ID-code for a fast ESP chip variants.
228 */
229 esp->max_period = ((35 * esp->ccycle) / 1000);
230 if (esp->rev == FAST) {
231 version = esp_read8(ESP_UID);
232 family_code = (version & 0xf8) >> 3;
233 if (family_code == 0x02)
234 esp->rev = FAS236;
235 else if (family_code == 0x0a)
236 esp->rev = FASHME; /* Version is usually '5'. */
237 else
238 esp->rev = FAS100A;
239 esp->min_period = ((4 * esp->ccycle) / 1000);
240 } else {
241 esp->min_period = ((5 * esp->ccycle) / 1000);
242 }
243 esp->max_period = (esp->max_period + 3)>>2;
244 esp->min_period = (esp->min_period + 3)>>2;
245
246 esp_write8(esp->config1, ESP_CFG1);
247 switch (esp->rev) {
248 case ESP100:
249 /* nothing to do */
250 break;
251
252 case ESP100A:
253 esp_write8(esp->config2, ESP_CFG2);
254 break;
255
256 case ESP236:
257 /* Slow 236 */
258 esp_write8(esp->config2, ESP_CFG2);
259 esp->prev_cfg3 = esp->target[0].esp_config3;
260 esp_write8(esp->prev_cfg3, ESP_CFG3);
261 break;
262
263 case FASHME:
264 esp->config2 |= (ESP_CONFIG2_HME32 | ESP_CONFIG2_HMEFENAB);
265 /* fallthrough... */
266
267 case FAS236:
268 /* Fast 236 or HME */
269 esp_write8(esp->config2, ESP_CFG2);
270 if (esp->rev == FASHME) {
271 u8 cfg3 = esp->target[0].esp_config3;
272
273 cfg3 |= ESP_CONFIG3_FCLOCK | ESP_CONFIG3_OBPUSH;
274 if (esp->scsi_id >= 8)
275 cfg3 |= ESP_CONFIG3_IDBIT3;
276 esp_set_all_config3(esp, cfg3);
277 } else {
278 u32 cfg3 = esp->target[0].esp_config3;
279
280 cfg3 |= ESP_CONFIG3_FCLK;
281 esp_set_all_config3(esp, cfg3);
282 }
283 esp->prev_cfg3 = esp->target[0].esp_config3;
284 esp_write8(esp->prev_cfg3, ESP_CFG3);
285 if (esp->rev == FASHME) {
286 esp->radelay = 80;
287 } else {
288 if (esp->flags & ESP_FLAG_DIFFERENTIAL)
289 esp->radelay = 0;
290 else
291 esp->radelay = 96;
292 }
293 break;
294
295 case FAS100A:
296 /* Fast 100a */
297 esp_write8(esp->config2, ESP_CFG2);
298 esp_set_all_config3(esp,
299 (esp->target[0].esp_config3 |
300 ESP_CONFIG3_FCLOCK));
301 esp->prev_cfg3 = esp->target[0].esp_config3;
302 esp_write8(esp->prev_cfg3, ESP_CFG3);
303 esp->radelay = 32;
304 break;
305
306 default:
307 break;
308 }
309
310 /* Reload the configuration registers */
311 esp_write8(esp->cfact, ESP_CFACT);
312
313 esp->prev_stp = 0;
314 esp_write8(esp->prev_stp, ESP_STP);
315
316 esp->prev_soff = 0;
317 esp_write8(esp->prev_soff, ESP_SOFF);
318
319 esp_write8(esp->neg_defp, ESP_TIMEO);
320
321 /* Eat any bitrot in the chip */
322 esp_read8(ESP_INTRPT);
323 udelay(100);
324}
325
326static void esp_map_dma(struct esp *esp, struct scsi_cmnd *cmd)
327{
328 struct esp_cmd_priv *spriv = ESP_CMD_PRIV(cmd);
329 struct scatterlist *sg = scsi_sglist(cmd);
330 int dir = cmd->sc_data_direction;
331 int total, i;
332
333 if (dir == DMA_NONE)
334 return;
335
336 spriv->u.num_sg = esp->ops->map_sg(esp, sg, scsi_sg_count(cmd), dir);
337 spriv->cur_residue = sg_dma_len(sg);
338 spriv->cur_sg = sg;
339
340 total = 0;
341 for (i = 0; i < spriv->u.num_sg; i++)
342 total += sg_dma_len(&sg[i]);
343 spriv->tot_residue = total;
344}
345
346static dma_addr_t esp_cur_dma_addr(struct esp_cmd_entry *ent,
347 struct scsi_cmnd *cmd)
348{
349 struct esp_cmd_priv *p = ESP_CMD_PRIV(cmd);
350
351 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
352 return ent->sense_dma +
353 (ent->sense_ptr - cmd->sense_buffer);
354 }
355
356 return sg_dma_address(p->cur_sg) +
357 (sg_dma_len(p->cur_sg) -
358 p->cur_residue);
359}
360
361static unsigned int esp_cur_dma_len(struct esp_cmd_entry *ent,
362 struct scsi_cmnd *cmd)
363{
364 struct esp_cmd_priv *p = ESP_CMD_PRIV(cmd);
365
366 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
367 return SCSI_SENSE_BUFFERSIZE -
368 (ent->sense_ptr - cmd->sense_buffer);
369 }
370 return p->cur_residue;
371}
372
373static void esp_advance_dma(struct esp *esp, struct esp_cmd_entry *ent,
374 struct scsi_cmnd *cmd, unsigned int len)
375{
376 struct esp_cmd_priv *p = ESP_CMD_PRIV(cmd);
377
378 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
379 ent->sense_ptr += len;
380 return;
381 }
382
383 p->cur_residue -= len;
384 p->tot_residue -= len;
385 if (p->cur_residue < 0 || p->tot_residue < 0) {
386 printk(KERN_ERR PFX "esp%d: Data transfer overflow.\n",
387 esp->host->unique_id);
388 printk(KERN_ERR PFX "esp%d: cur_residue[%d] tot_residue[%d] "
389 "len[%u]\n",
390 esp->host->unique_id,
391 p->cur_residue, p->tot_residue, len);
392 p->cur_residue = 0;
393 p->tot_residue = 0;
394 }
395 if (!p->cur_residue && p->tot_residue) {
396 p->cur_sg++;
397 p->cur_residue = sg_dma_len(p->cur_sg);
398 }
399}
400
401static void esp_unmap_dma(struct esp *esp, struct scsi_cmnd *cmd)
402{
403 struct esp_cmd_priv *spriv = ESP_CMD_PRIV(cmd);
404 int dir = cmd->sc_data_direction;
405
406 if (dir == DMA_NONE)
407 return;
408
409 esp->ops->unmap_sg(esp, scsi_sglist(cmd), spriv->u.num_sg, dir);
410}
411
412static void esp_save_pointers(struct esp *esp, struct esp_cmd_entry *ent)
413{
414 struct scsi_cmnd *cmd = ent->cmd;
415 struct esp_cmd_priv *spriv = ESP_CMD_PRIV(cmd);
416
417 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
418 ent->saved_sense_ptr = ent->sense_ptr;
419 return;
420 }
421 ent->saved_cur_residue = spriv->cur_residue;
422 ent->saved_cur_sg = spriv->cur_sg;
423 ent->saved_tot_residue = spriv->tot_residue;
424}
425
426static void esp_restore_pointers(struct esp *esp, struct esp_cmd_entry *ent)
427{
428 struct scsi_cmnd *cmd = ent->cmd;
429 struct esp_cmd_priv *spriv = ESP_CMD_PRIV(cmd);
430
431 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
432 ent->sense_ptr = ent->saved_sense_ptr;
433 return;
434 }
435 spriv->cur_residue = ent->saved_cur_residue;
436 spriv->cur_sg = ent->saved_cur_sg;
437 spriv->tot_residue = ent->saved_tot_residue;
438}
439
440static void esp_check_command_len(struct esp *esp, struct scsi_cmnd *cmd)
441{
442 if (cmd->cmd_len == 6 ||
443 cmd->cmd_len == 10 ||
444 cmd->cmd_len == 12) {
445 esp->flags &= ~ESP_FLAG_DOING_SLOWCMD;
446 } else {
447 esp->flags |= ESP_FLAG_DOING_SLOWCMD;
448 }
449}
450
451static void esp_write_tgt_config3(struct esp *esp, int tgt)
452{
453 if (esp->rev > ESP100A) {
454 u8 val = esp->target[tgt].esp_config3;
455
456 if (val != esp->prev_cfg3) {
457 esp->prev_cfg3 = val;
458 esp_write8(val, ESP_CFG3);
459 }
460 }
461}
462
463static void esp_write_tgt_sync(struct esp *esp, int tgt)
464{
465 u8 off = esp->target[tgt].esp_offset;
466 u8 per = esp->target[tgt].esp_period;
467
468 if (off != esp->prev_soff) {
469 esp->prev_soff = off;
470 esp_write8(off, ESP_SOFF);
471 }
472 if (per != esp->prev_stp) {
473 esp->prev_stp = per;
474 esp_write8(per, ESP_STP);
475 }
476}
477
478static u32 esp_dma_length_limit(struct esp *esp, u32 dma_addr, u32 dma_len)
479{
480 if (esp->rev == FASHME) {
481 /* Arbitrary segment boundaries, 24-bit counts. */
482 if (dma_len > (1U << 24))
483 dma_len = (1U << 24);
484 } else {
485 u32 base, end;
486
487 /* ESP chip limits other variants by 16-bits of transfer
488 * count. Actually on FAS100A and FAS236 we could get
489 * 24-bits of transfer count by enabling ESP_CONFIG2_FENAB
490 * in the ESP_CFG2 register but that causes other unwanted
491 * changes so we don't use it currently.
492 */
493 if (dma_len > (1U << 16))
494 dma_len = (1U << 16);
495
496 /* All of the DMA variants hooked up to these chips
497 * cannot handle crossing a 24-bit address boundary.
498 */
499 base = dma_addr & ((1U << 24) - 1U);
500 end = base + dma_len;
501 if (end > (1U << 24))
502 end = (1U <<24);
503 dma_len = end - base;
504 }
505 return dma_len;
506}
507
508static int esp_need_to_nego_wide(struct esp_target_data *tp)
509{
510 struct scsi_target *target = tp->starget;
511
512 return spi_width(target) != tp->nego_goal_width;
513}
514
515static int esp_need_to_nego_sync(struct esp_target_data *tp)
516{
517 struct scsi_target *target = tp->starget;
518
519 /* When offset is zero, period is "don't care". */
520 if (!spi_offset(target) && !tp->nego_goal_offset)
521 return 0;
522
523 if (spi_offset(target) == tp->nego_goal_offset &&
524 spi_period(target) == tp->nego_goal_period)
525 return 0;
526
527 return 1;
528}
529
530static int esp_alloc_lun_tag(struct esp_cmd_entry *ent,
531 struct esp_lun_data *lp)
532{
533 if (!ent->tag[0]) {
534 /* Non-tagged, slot already taken? */
535 if (lp->non_tagged_cmd)
536 return -EBUSY;
537
538 if (lp->hold) {
539 /* We are being held by active tagged
540 * commands.
541 */
542 if (lp->num_tagged)
543 return -EBUSY;
544
545 /* Tagged commands completed, we can unplug
546 * the queue and run this untagged command.
547 */
548 lp->hold = 0;
549 } else if (lp->num_tagged) {
550 /* Plug the queue until num_tagged decreases
551 * to zero in esp_free_lun_tag.
552 */
553 lp->hold = 1;
554 return -EBUSY;
555 }
556
557 lp->non_tagged_cmd = ent;
558 return 0;
559 } else {
560 /* Tagged command, see if blocked by a
561 * non-tagged one.
562 */
563 if (lp->non_tagged_cmd || lp->hold)
564 return -EBUSY;
565 }
566
567 BUG_ON(lp->tagged_cmds[ent->tag[1]]);
568
569 lp->tagged_cmds[ent->tag[1]] = ent;
570 lp->num_tagged++;
571
572 return 0;
573}
574
575static void esp_free_lun_tag(struct esp_cmd_entry *ent,
576 struct esp_lun_data *lp)
577{
578 if (ent->tag[0]) {
579 BUG_ON(lp->tagged_cmds[ent->tag[1]] != ent);
580 lp->tagged_cmds[ent->tag[1]] = NULL;
581 lp->num_tagged--;
582 } else {
583 BUG_ON(lp->non_tagged_cmd != ent);
584 lp->non_tagged_cmd = NULL;
585 }
586}
587
588/* When a contingent allegiance conditon is created, we force feed a
589 * REQUEST_SENSE command to the device to fetch the sense data. I
590 * tried many other schemes, relying on the scsi error handling layer
591 * to send out the REQUEST_SENSE automatically, but this was difficult
592 * to get right especially in the presence of applications like smartd
593 * which use SG_IO to send out their own REQUEST_SENSE commands.
594 */
595static void esp_autosense(struct esp *esp, struct esp_cmd_entry *ent)
596{
597 struct scsi_cmnd *cmd = ent->cmd;
598 struct scsi_device *dev = cmd->device;
599 int tgt, lun;
600 u8 *p, val;
601
602 tgt = dev->id;
603 lun = dev->lun;
604
605
606 if (!ent->sense_ptr) {
607 esp_log_autosense("esp%d: Doing auto-sense for "
608 "tgt[%d] lun[%d]\n",
609 esp->host->unique_id, tgt, lun);
610
611 ent->sense_ptr = cmd->sense_buffer;
612 ent->sense_dma = esp->ops->map_single(esp,
613 ent->sense_ptr,
614 SCSI_SENSE_BUFFERSIZE,
615 DMA_FROM_DEVICE);
616 }
617 ent->saved_sense_ptr = ent->sense_ptr;
618
619 esp->active_cmd = ent;
620
621 p = esp->command_block;
622 esp->msg_out_len = 0;
623
624 *p++ = IDENTIFY(0, lun);
625 *p++ = REQUEST_SENSE;
626 *p++ = ((dev->scsi_level <= SCSI_2) ?
627 (lun << 5) : 0);
628 *p++ = 0;
629 *p++ = 0;
630 *p++ = SCSI_SENSE_BUFFERSIZE;
631 *p++ = 0;
632
633 esp->select_state = ESP_SELECT_BASIC;
634
635 val = tgt;
636 if (esp->rev == FASHME)
637 val |= ESP_BUSID_RESELID | ESP_BUSID_CTR32BIT;
638 esp_write8(val, ESP_BUSID);
639
640 esp_write_tgt_sync(esp, tgt);
641 esp_write_tgt_config3(esp, tgt);
642
643 val = (p - esp->command_block);
644
645 if (esp->rev == FASHME)
646 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
647 esp->ops->send_dma_cmd(esp, esp->command_block_dma,
648 val, 16, 0, ESP_CMD_DMA | ESP_CMD_SELA);
649}
650
651static struct esp_cmd_entry *find_and_prep_issuable_command(struct esp *esp)
652{
653 struct esp_cmd_entry *ent;
654
655 list_for_each_entry(ent, &esp->queued_cmds, list) {
656 struct scsi_cmnd *cmd = ent->cmd;
657 struct scsi_device *dev = cmd->device;
658 struct esp_lun_data *lp = dev->hostdata;
659
660 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
661 ent->tag[0] = 0;
662 ent->tag[1] = 0;
663 return ent;
664 }
665
666 if (!scsi_populate_tag_msg(cmd, &ent->tag[0])) {
667 ent->tag[0] = 0;
668 ent->tag[1] = 0;
669 }
670
671 if (esp_alloc_lun_tag(ent, lp) < 0)
672 continue;
673
674 return ent;
675 }
676
677 return NULL;
678}
679
680static void esp_maybe_execute_command(struct esp *esp)
681{
682 struct esp_target_data *tp;
683 struct esp_lun_data *lp;
684 struct scsi_device *dev;
685 struct scsi_cmnd *cmd;
686 struct esp_cmd_entry *ent;
687 int tgt, lun, i;
688 u32 val, start_cmd;
689 u8 *p;
690
691 if (esp->active_cmd ||
692 (esp->flags & ESP_FLAG_RESETTING))
693 return;
694
695 ent = find_and_prep_issuable_command(esp);
696 if (!ent)
697 return;
698
699 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
700 esp_autosense(esp, ent);
701 return;
702 }
703
704 cmd = ent->cmd;
705 dev = cmd->device;
706 tgt = dev->id;
707 lun = dev->lun;
708 tp = &esp->target[tgt];
709 lp = dev->hostdata;
710
711 list_move(&ent->list, &esp->active_cmds);
712
713 esp->active_cmd = ent;
714
715 esp_map_dma(esp, cmd);
716 esp_save_pointers(esp, ent);
717
718 esp_check_command_len(esp, cmd);
719
720 p = esp->command_block;
721
722 esp->msg_out_len = 0;
723 if (tp->flags & ESP_TGT_CHECK_NEGO) {
724 /* Need to negotiate. If the target is broken
725 * go for synchronous transfers and non-wide.
726 */
727 if (tp->flags & ESP_TGT_BROKEN) {
728 tp->flags &= ~ESP_TGT_DISCONNECT;
729 tp->nego_goal_period = 0;
730 tp->nego_goal_offset = 0;
731 tp->nego_goal_width = 0;
732 tp->nego_goal_tags = 0;
733 }
734
735 /* If the settings are not changing, skip this. */
736 if (spi_width(tp->starget) == tp->nego_goal_width &&
737 spi_period(tp->starget) == tp->nego_goal_period &&
738 spi_offset(tp->starget) == tp->nego_goal_offset) {
739 tp->flags &= ~ESP_TGT_CHECK_NEGO;
740 goto build_identify;
741 }
742
743 if (esp->rev == FASHME && esp_need_to_nego_wide(tp)) {
744 esp->msg_out_len =
745 spi_populate_width_msg(&esp->msg_out[0],
746 (tp->nego_goal_width ?
747 1 : 0));
748 tp->flags |= ESP_TGT_NEGO_WIDE;
749 } else if (esp_need_to_nego_sync(tp)) {
750 esp->msg_out_len =
751 spi_populate_sync_msg(&esp->msg_out[0],
752 tp->nego_goal_period,
753 tp->nego_goal_offset);
754 tp->flags |= ESP_TGT_NEGO_SYNC;
755 } else {
756 tp->flags &= ~ESP_TGT_CHECK_NEGO;
757 }
758
759 /* Process it like a slow command. */
760 if (tp->flags & (ESP_TGT_NEGO_WIDE | ESP_TGT_NEGO_SYNC))
761 esp->flags |= ESP_FLAG_DOING_SLOWCMD;
762 }
763
764build_identify:
765 /* If we don't have a lun-data struct yet, we're probing
766 * so do not disconnect. Also, do not disconnect unless
767 * we have a tag on this command.
768 */
769 if (lp && (tp->flags & ESP_TGT_DISCONNECT) && ent->tag[0])
770 *p++ = IDENTIFY(1, lun);
771 else
772 *p++ = IDENTIFY(0, lun);
773
774 if (ent->tag[0] && esp->rev == ESP100) {
775 /* ESP100 lacks select w/atn3 command, use select
776 * and stop instead.
777 */
778 esp->flags |= ESP_FLAG_DOING_SLOWCMD;
779 }
780
781 if (!(esp->flags & ESP_FLAG_DOING_SLOWCMD)) {
782 start_cmd = ESP_CMD_DMA | ESP_CMD_SELA;
783 if (ent->tag[0]) {
784 *p++ = ent->tag[0];
785 *p++ = ent->tag[1];
786
787 start_cmd = ESP_CMD_DMA | ESP_CMD_SA3;
788 }
789
790 for (i = 0; i < cmd->cmd_len; i++)
791 *p++ = cmd->cmnd[i];
792
793 esp->select_state = ESP_SELECT_BASIC;
794 } else {
795 esp->cmd_bytes_left = cmd->cmd_len;
796 esp->cmd_bytes_ptr = &cmd->cmnd[0];
797
798 if (ent->tag[0]) {
799 for (i = esp->msg_out_len - 1;
800 i >= 0; i--)
801 esp->msg_out[i + 2] = esp->msg_out[i];
802 esp->msg_out[0] = ent->tag[0];
803 esp->msg_out[1] = ent->tag[1];
804 esp->msg_out_len += 2;
805 }
806
807 start_cmd = ESP_CMD_DMA | ESP_CMD_SELAS;
808 esp->select_state = ESP_SELECT_MSGOUT;
809 }
810 val = tgt;
811 if (esp->rev == FASHME)
812 val |= ESP_BUSID_RESELID | ESP_BUSID_CTR32BIT;
813 esp_write8(val, ESP_BUSID);
814
815 esp_write_tgt_sync(esp, tgt);
816 esp_write_tgt_config3(esp, tgt);
817
818 val = (p - esp->command_block);
819
820 if (esp_debug & ESP_DEBUG_SCSICMD) {
821 printk("ESP: tgt[%d] lun[%d] scsi_cmd [ ", tgt, lun);
822 for (i = 0; i < cmd->cmd_len; i++)
823 printk("%02x ", cmd->cmnd[i]);
824 printk("]\n");
825 }
826
827 if (esp->rev == FASHME)
828 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
829 esp->ops->send_dma_cmd(esp, esp->command_block_dma,
830 val, 16, 0, start_cmd);
831}
832
833static struct esp_cmd_entry *esp_get_ent(struct esp *esp)
834{
835 struct list_head *head = &esp->esp_cmd_pool;
836 struct esp_cmd_entry *ret;
837
838 if (list_empty(head)) {
839 ret = kzalloc(sizeof(struct esp_cmd_entry), GFP_ATOMIC);
840 } else {
841 ret = list_entry(head->next, struct esp_cmd_entry, list);
842 list_del(&ret->list);
843 memset(ret, 0, sizeof(*ret));
844 }
845 return ret;
846}
847
848static void esp_put_ent(struct esp *esp, struct esp_cmd_entry *ent)
849{
850 list_add(&ent->list, &esp->esp_cmd_pool);
851}
852
853static void esp_cmd_is_done(struct esp *esp, struct esp_cmd_entry *ent,
854 struct scsi_cmnd *cmd, unsigned int result)
855{
856 struct scsi_device *dev = cmd->device;
857 int tgt = dev->id;
858 int lun = dev->lun;
859
860 esp->active_cmd = NULL;
861 esp_unmap_dma(esp, cmd);
862 esp_free_lun_tag(ent, dev->hostdata);
863 cmd->result = result;
864
865 if (ent->eh_done) {
866 complete(ent->eh_done);
867 ent->eh_done = NULL;
868 }
869
870 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
871 esp->ops->unmap_single(esp, ent->sense_dma,
872 SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
873 ent->sense_ptr = NULL;
874
875 /* Restore the message/status bytes to what we actually
876 * saw originally. Also, report that we are providing
877 * the sense data.
878 */
879 cmd->result = ((DRIVER_SENSE << 24) |
880 (DID_OK << 16) |
881 (COMMAND_COMPLETE << 8) |
882 (SAM_STAT_CHECK_CONDITION << 0));
883
884 ent->flags &= ~ESP_CMD_FLAG_AUTOSENSE;
885 if (esp_debug & ESP_DEBUG_AUTOSENSE) {
886 int i;
887
888 printk("esp%d: tgt[%d] lun[%d] AUTO SENSE[ ",
889 esp->host->unique_id, tgt, lun);
890 for (i = 0; i < 18; i++)
891 printk("%02x ", cmd->sense_buffer[i]);
892 printk("]\n");
893 }
894 }
895
896 cmd->scsi_done(cmd);
897
898 list_del(&ent->list);
899 esp_put_ent(esp, ent);
900
901 esp_maybe_execute_command(esp);
902}
903
904static unsigned int compose_result(unsigned int status, unsigned int message,
905 unsigned int driver_code)
906{
907 return (status | (message << 8) | (driver_code << 16));
908}
909
910static void esp_event_queue_full(struct esp *esp, struct esp_cmd_entry *ent)
911{
912 struct scsi_device *dev = ent->cmd->device;
913 struct esp_lun_data *lp = dev->hostdata;
914
915 scsi_track_queue_full(dev, lp->num_tagged - 1);
916}
917
918static int esp_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
919{
920 struct scsi_device *dev = cmd->device;
921 struct esp *esp = shost_priv(dev->host);
922 struct esp_cmd_priv *spriv;
923 struct esp_cmd_entry *ent;
924
925 ent = esp_get_ent(esp);
926 if (!ent)
927 return SCSI_MLQUEUE_HOST_BUSY;
928
929 ent->cmd = cmd;
930
931 cmd->scsi_done = done;
932
933 spriv = ESP_CMD_PRIV(cmd);
934 spriv->u.dma_addr = ~(dma_addr_t)0x0;
935
936 list_add_tail(&ent->list, &esp->queued_cmds);
937
938 esp_maybe_execute_command(esp);
939
940 return 0;
941}
942
943static DEF_SCSI_QCMD(esp_queuecommand)
944
945static int esp_check_gross_error(struct esp *esp)
946{
947 if (esp->sreg & ESP_STAT_SPAM) {
948 /* Gross Error, could be one of:
949 * - top of fifo overwritten
950 * - top of command register overwritten
951 * - DMA programmed with wrong direction
952 * - improper phase change
953 */
954 printk(KERN_ERR PFX "esp%d: Gross error sreg[%02x]\n",
955 esp->host->unique_id, esp->sreg);
956 /* XXX Reset the chip. XXX */
957 return 1;
958 }
959 return 0;
960}
961
962static int esp_check_spur_intr(struct esp *esp)
963{
964 switch (esp->rev) {
965 case ESP100:
966 case ESP100A:
967 /* The interrupt pending bit of the status register cannot
968 * be trusted on these revisions.
969 */
970 esp->sreg &= ~ESP_STAT_INTR;
971 break;
972
973 default:
974 if (!(esp->sreg & ESP_STAT_INTR)) {
975 esp->ireg = esp_read8(ESP_INTRPT);
976 if (esp->ireg & ESP_INTR_SR)
977 return 1;
978
979 /* If the DMA is indicating interrupt pending and the
980 * ESP is not, the only possibility is a DMA error.
981 */
982 if (!esp->ops->dma_error(esp)) {
983 printk(KERN_ERR PFX "esp%d: Spurious irq, "
984 "sreg=%02x.\n",
985 esp->host->unique_id, esp->sreg);
986 return -1;
987 }
988
989 printk(KERN_ERR PFX "esp%d: DMA error\n",
990 esp->host->unique_id);
991
992 /* XXX Reset the chip. XXX */
993 return -1;
994 }
995 break;
996 }
997
998 return 0;
999}
1000
1001static void esp_schedule_reset(struct esp *esp)
1002{
1003 esp_log_reset("ESP: esp_schedule_reset() from %p\n",
1004 __builtin_return_address(0));
1005 esp->flags |= ESP_FLAG_RESETTING;
1006 esp_event(esp, ESP_EVENT_RESET);
1007}
1008
1009/* In order to avoid having to add a special half-reconnected state
1010 * into the driver we just sit here and poll through the rest of
1011 * the reselection process to get the tag message bytes.
1012 */
1013static struct esp_cmd_entry *esp_reconnect_with_tag(struct esp *esp,
1014 struct esp_lun_data *lp)
1015{
1016 struct esp_cmd_entry *ent;
1017 int i;
1018
1019 if (!lp->num_tagged) {
1020 printk(KERN_ERR PFX "esp%d: Reconnect w/num_tagged==0\n",
1021 esp->host->unique_id);
1022 return NULL;
1023 }
1024
1025 esp_log_reconnect("ESP: reconnect tag, ");
1026
1027 for (i = 0; i < ESP_QUICKIRQ_LIMIT; i++) {
1028 if (esp->ops->irq_pending(esp))
1029 break;
1030 }
1031 if (i == ESP_QUICKIRQ_LIMIT) {
1032 printk(KERN_ERR PFX "esp%d: Reconnect IRQ1 timeout\n",
1033 esp->host->unique_id);
1034 return NULL;
1035 }
1036
1037 esp->sreg = esp_read8(ESP_STATUS);
1038 esp->ireg = esp_read8(ESP_INTRPT);
1039
1040 esp_log_reconnect("IRQ(%d:%x:%x), ",
1041 i, esp->ireg, esp->sreg);
1042
1043 if (esp->ireg & ESP_INTR_DC) {
1044 printk(KERN_ERR PFX "esp%d: Reconnect, got disconnect.\n",
1045 esp->host->unique_id);
1046 return NULL;
1047 }
1048
1049 if ((esp->sreg & ESP_STAT_PMASK) != ESP_MIP) {
1050 printk(KERN_ERR PFX "esp%d: Reconnect, not MIP sreg[%02x].\n",
1051 esp->host->unique_id, esp->sreg);
1052 return NULL;
1053 }
1054
1055 /* DMA in the tag bytes... */
1056 esp->command_block[0] = 0xff;
1057 esp->command_block[1] = 0xff;
1058 esp->ops->send_dma_cmd(esp, esp->command_block_dma,
1059 2, 2, 1, ESP_CMD_DMA | ESP_CMD_TI);
1060
1061 /* ACK the message. */
1062 scsi_esp_cmd(esp, ESP_CMD_MOK);
1063
1064 for (i = 0; i < ESP_RESELECT_TAG_LIMIT; i++) {
1065 if (esp->ops->irq_pending(esp)) {
1066 esp->sreg = esp_read8(ESP_STATUS);
1067 esp->ireg = esp_read8(ESP_INTRPT);
1068 if (esp->ireg & ESP_INTR_FDONE)
1069 break;
1070 }
1071 udelay(1);
1072 }
1073 if (i == ESP_RESELECT_TAG_LIMIT) {
1074 printk(KERN_ERR PFX "esp%d: Reconnect IRQ2 timeout\n",
1075 esp->host->unique_id);
1076 return NULL;
1077 }
1078 esp->ops->dma_drain(esp);
1079 esp->ops->dma_invalidate(esp);
1080
1081 esp_log_reconnect("IRQ2(%d:%x:%x) tag[%x:%x]\n",
1082 i, esp->ireg, esp->sreg,
1083 esp->command_block[0],
1084 esp->command_block[1]);
1085
1086 if (esp->command_block[0] < SIMPLE_QUEUE_TAG ||
1087 esp->command_block[0] > ORDERED_QUEUE_TAG) {
1088 printk(KERN_ERR PFX "esp%d: Reconnect, bad tag "
1089 "type %02x.\n",
1090 esp->host->unique_id, esp->command_block[0]);
1091 return NULL;
1092 }
1093
1094 ent = lp->tagged_cmds[esp->command_block[1]];
1095 if (!ent) {
1096 printk(KERN_ERR PFX "esp%d: Reconnect, no entry for "
1097 "tag %02x.\n",
1098 esp->host->unique_id, esp->command_block[1]);
1099 return NULL;
1100 }
1101
1102 return ent;
1103}
1104
1105static int esp_reconnect(struct esp *esp)
1106{
1107 struct esp_cmd_entry *ent;
1108 struct esp_target_data *tp;
1109 struct esp_lun_data *lp;
1110 struct scsi_device *dev;
1111 int target, lun;
1112
1113 BUG_ON(esp->active_cmd);
1114 if (esp->rev == FASHME) {
1115 /* FASHME puts the target and lun numbers directly
1116 * into the fifo.
1117 */
1118 target = esp->fifo[0];
1119 lun = esp->fifo[1] & 0x7;
1120 } else {
1121 u8 bits = esp_read8(ESP_FDATA);
1122
1123 /* Older chips put the lun directly into the fifo, but
1124 * the target is given as a sample of the arbitration
1125 * lines on the bus at reselection time. So we should
1126 * see the ID of the ESP and the one reconnecting target
1127 * set in the bitmap.
1128 */
1129 if (!(bits & esp->scsi_id_mask))
1130 goto do_reset;
1131 bits &= ~esp->scsi_id_mask;
1132 if (!bits || (bits & (bits - 1)))
1133 goto do_reset;
1134
1135 target = ffs(bits) - 1;
1136 lun = (esp_read8(ESP_FDATA) & 0x7);
1137
1138 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1139 if (esp->rev == ESP100) {
1140 u8 ireg = esp_read8(ESP_INTRPT);
1141 /* This chip has a bug during reselection that can
1142 * cause a spurious illegal-command interrupt, which
1143 * we simply ACK here. Another possibility is a bus
1144 * reset so we must check for that.
1145 */
1146 if (ireg & ESP_INTR_SR)
1147 goto do_reset;
1148 }
1149 scsi_esp_cmd(esp, ESP_CMD_NULL);
1150 }
1151
1152 esp_write_tgt_sync(esp, target);
1153 esp_write_tgt_config3(esp, target);
1154
1155 scsi_esp_cmd(esp, ESP_CMD_MOK);
1156
1157 if (esp->rev == FASHME)
1158 esp_write8(target | ESP_BUSID_RESELID | ESP_BUSID_CTR32BIT,
1159 ESP_BUSID);
1160
1161 tp = &esp->target[target];
1162 dev = __scsi_device_lookup_by_target(tp->starget, lun);
1163 if (!dev) {
1164 printk(KERN_ERR PFX "esp%d: Reconnect, no lp "
1165 "tgt[%u] lun[%u]\n",
1166 esp->host->unique_id, target, lun);
1167 goto do_reset;
1168 }
1169 lp = dev->hostdata;
1170
1171 ent = lp->non_tagged_cmd;
1172 if (!ent) {
1173 ent = esp_reconnect_with_tag(esp, lp);
1174 if (!ent)
1175 goto do_reset;
1176 }
1177
1178 esp->active_cmd = ent;
1179
1180 if (ent->flags & ESP_CMD_FLAG_ABORT) {
1181 esp->msg_out[0] = ABORT_TASK_SET;
1182 esp->msg_out_len = 1;
1183 scsi_esp_cmd(esp, ESP_CMD_SATN);
1184 }
1185
1186 esp_event(esp, ESP_EVENT_CHECK_PHASE);
1187 esp_restore_pointers(esp, ent);
1188 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1189 return 1;
1190
1191do_reset:
1192 esp_schedule_reset(esp);
1193 return 0;
1194}
1195
1196static int esp_finish_select(struct esp *esp)
1197{
1198 struct esp_cmd_entry *ent;
1199 struct scsi_cmnd *cmd;
1200 u8 orig_select_state;
1201
1202 orig_select_state = esp->select_state;
1203
1204 /* No longer selecting. */
1205 esp->select_state = ESP_SELECT_NONE;
1206
1207 esp->seqreg = esp_read8(ESP_SSTEP) & ESP_STEP_VBITS;
1208 ent = esp->active_cmd;
1209 cmd = ent->cmd;
1210
1211 if (esp->ops->dma_error(esp)) {
1212 /* If we see a DMA error during or as a result of selection,
1213 * all bets are off.
1214 */
1215 esp_schedule_reset(esp);
1216 esp_cmd_is_done(esp, ent, cmd, (DID_ERROR << 16));
1217 return 0;
1218 }
1219
1220 esp->ops->dma_invalidate(esp);
1221
1222 if (esp->ireg == (ESP_INTR_RSEL | ESP_INTR_FDONE)) {
1223 struct esp_target_data *tp = &esp->target[cmd->device->id];
1224
1225 /* Carefully back out of the selection attempt. Release
1226 * resources (such as DMA mapping & TAG) and reset state (such
1227 * as message out and command delivery variables).
1228 */
1229 if (!(ent->flags & ESP_CMD_FLAG_AUTOSENSE)) {
1230 esp_unmap_dma(esp, cmd);
1231 esp_free_lun_tag(ent, cmd->device->hostdata);
1232 tp->flags &= ~(ESP_TGT_NEGO_SYNC | ESP_TGT_NEGO_WIDE);
1233 esp->flags &= ~ESP_FLAG_DOING_SLOWCMD;
1234 esp->cmd_bytes_ptr = NULL;
1235 esp->cmd_bytes_left = 0;
1236 } else {
1237 esp->ops->unmap_single(esp, ent->sense_dma,
1238 SCSI_SENSE_BUFFERSIZE,
1239 DMA_FROM_DEVICE);
1240 ent->sense_ptr = NULL;
1241 }
1242
1243 /* Now that the state is unwound properly, put back onto
1244 * the issue queue. This command is no longer active.
1245 */
1246 list_move(&ent->list, &esp->queued_cmds);
1247 esp->active_cmd = NULL;
1248
1249 /* Return value ignored by caller, it directly invokes
1250 * esp_reconnect().
1251 */
1252 return 0;
1253 }
1254
1255 if (esp->ireg == ESP_INTR_DC) {
1256 struct scsi_device *dev = cmd->device;
1257
1258 /* Disconnect. Make sure we re-negotiate sync and
1259 * wide parameters if this target starts responding
1260 * again in the future.
1261 */
1262 esp->target[dev->id].flags |= ESP_TGT_CHECK_NEGO;
1263
1264 scsi_esp_cmd(esp, ESP_CMD_ESEL);
1265 esp_cmd_is_done(esp, ent, cmd, (DID_BAD_TARGET << 16));
1266 return 1;
1267 }
1268
1269 if (esp->ireg == (ESP_INTR_FDONE | ESP_INTR_BSERV)) {
1270 /* Selection successful. On pre-FAST chips we have
1271 * to do a NOP and possibly clean out the FIFO.
1272 */
1273 if (esp->rev <= ESP236) {
1274 int fcnt = esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES;
1275
1276 scsi_esp_cmd(esp, ESP_CMD_NULL);
1277
1278 if (!fcnt &&
1279 (!esp->prev_soff ||
1280 ((esp->sreg & ESP_STAT_PMASK) != ESP_DIP)))
1281 esp_flush_fifo(esp);
1282 }
1283
1284 /* If we are doing a slow command, negotiation, etc.
1285 * we'll do the right thing as we transition to the
1286 * next phase.
1287 */
1288 esp_event(esp, ESP_EVENT_CHECK_PHASE);
1289 return 0;
1290 }
1291
1292 printk("ESP: Unexpected selection completion ireg[%x].\n",
1293 esp->ireg);
1294 esp_schedule_reset(esp);
1295 return 0;
1296}
1297
1298static int esp_data_bytes_sent(struct esp *esp, struct esp_cmd_entry *ent,
1299 struct scsi_cmnd *cmd)
1300{
1301 int fifo_cnt, ecount, bytes_sent, flush_fifo;
1302
1303 fifo_cnt = esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES;
1304 if (esp->prev_cfg3 & ESP_CONFIG3_EWIDE)
1305 fifo_cnt <<= 1;
1306
1307 ecount = 0;
1308 if (!(esp->sreg & ESP_STAT_TCNT)) {
1309 ecount = ((unsigned int)esp_read8(ESP_TCLOW) |
1310 (((unsigned int)esp_read8(ESP_TCMED)) << 8));
1311 if (esp->rev == FASHME)
1312 ecount |= ((unsigned int)esp_read8(FAS_RLO)) << 16;
1313 }
1314
1315 bytes_sent = esp->data_dma_len;
1316 bytes_sent -= ecount;
1317
1318 if (!(ent->flags & ESP_CMD_FLAG_WRITE))
1319 bytes_sent -= fifo_cnt;
1320
1321 flush_fifo = 0;
1322 if (!esp->prev_soff) {
1323 /* Synchronous data transfer, always flush fifo. */
1324 flush_fifo = 1;
1325 } else {
1326 if (esp->rev == ESP100) {
1327 u32 fflags, phase;
1328
1329 /* ESP100 has a chip bug where in the synchronous data
1330 * phase it can mistake a final long REQ pulse from the
1331 * target as an extra data byte. Fun.
1332 *
1333 * To detect this case we resample the status register
1334 * and fifo flags. If we're still in a data phase and
1335 * we see spurious chunks in the fifo, we return error
1336 * to the caller which should reset and set things up
1337 * such that we only try future transfers to this
1338 * target in synchronous mode.
1339 */
1340 esp->sreg = esp_read8(ESP_STATUS);
1341 phase = esp->sreg & ESP_STAT_PMASK;
1342 fflags = esp_read8(ESP_FFLAGS);
1343
1344 if ((phase == ESP_DOP &&
1345 (fflags & ESP_FF_ONOTZERO)) ||
1346 (phase == ESP_DIP &&
1347 (fflags & ESP_FF_FBYTES)))
1348 return -1;
1349 }
1350 if (!(ent->flags & ESP_CMD_FLAG_WRITE))
1351 flush_fifo = 1;
1352 }
1353
1354 if (flush_fifo)
1355 esp_flush_fifo(esp);
1356
1357 return bytes_sent;
1358}
1359
1360static void esp_setsync(struct esp *esp, struct esp_target_data *tp,
1361 u8 scsi_period, u8 scsi_offset,
1362 u8 esp_stp, u8 esp_soff)
1363{
1364 spi_period(tp->starget) = scsi_period;
1365 spi_offset(tp->starget) = scsi_offset;
1366 spi_width(tp->starget) = (tp->flags & ESP_TGT_WIDE) ? 1 : 0;
1367
1368 if (esp_soff) {
1369 esp_stp &= 0x1f;
1370 esp_soff |= esp->radelay;
1371 if (esp->rev >= FAS236) {
1372 u8 bit = ESP_CONFIG3_FSCSI;
1373 if (esp->rev >= FAS100A)
1374 bit = ESP_CONFIG3_FAST;
1375
1376 if (scsi_period < 50) {
1377 if (esp->rev == FASHME)
1378 esp_soff &= ~esp->radelay;
1379 tp->esp_config3 |= bit;
1380 } else {
1381 tp->esp_config3 &= ~bit;
1382 }
1383 esp->prev_cfg3 = tp->esp_config3;
1384 esp_write8(esp->prev_cfg3, ESP_CFG3);
1385 }
1386 }
1387
1388 tp->esp_period = esp->prev_stp = esp_stp;
1389 tp->esp_offset = esp->prev_soff = esp_soff;
1390
1391 esp_write8(esp_soff, ESP_SOFF);
1392 esp_write8(esp_stp, ESP_STP);
1393
1394 tp->flags &= ~(ESP_TGT_NEGO_SYNC | ESP_TGT_CHECK_NEGO);
1395
1396 spi_display_xfer_agreement(tp->starget);
1397}
1398
1399static void esp_msgin_reject(struct esp *esp)
1400{
1401 struct esp_cmd_entry *ent = esp->active_cmd;
1402 struct scsi_cmnd *cmd = ent->cmd;
1403 struct esp_target_data *tp;
1404 int tgt;
1405
1406 tgt = cmd->device->id;
1407 tp = &esp->target[tgt];
1408
1409 if (tp->flags & ESP_TGT_NEGO_WIDE) {
1410 tp->flags &= ~(ESP_TGT_NEGO_WIDE | ESP_TGT_WIDE);
1411
1412 if (!esp_need_to_nego_sync(tp)) {
1413 tp->flags &= ~ESP_TGT_CHECK_NEGO;
1414 scsi_esp_cmd(esp, ESP_CMD_RATN);
1415 } else {
1416 esp->msg_out_len =
1417 spi_populate_sync_msg(&esp->msg_out[0],
1418 tp->nego_goal_period,
1419 tp->nego_goal_offset);
1420 tp->flags |= ESP_TGT_NEGO_SYNC;
1421 scsi_esp_cmd(esp, ESP_CMD_SATN);
1422 }
1423 return;
1424 }
1425
1426 if (tp->flags & ESP_TGT_NEGO_SYNC) {
1427 tp->flags &= ~(ESP_TGT_NEGO_SYNC | ESP_TGT_CHECK_NEGO);
1428 tp->esp_period = 0;
1429 tp->esp_offset = 0;
1430 esp_setsync(esp, tp, 0, 0, 0, 0);
1431 scsi_esp_cmd(esp, ESP_CMD_RATN);
1432 return;
1433 }
1434
1435 esp->msg_out[0] = ABORT_TASK_SET;
1436 esp->msg_out_len = 1;
1437 scsi_esp_cmd(esp, ESP_CMD_SATN);
1438}
1439
1440static void esp_msgin_sdtr(struct esp *esp, struct esp_target_data *tp)
1441{
1442 u8 period = esp->msg_in[3];
1443 u8 offset = esp->msg_in[4];
1444 u8 stp;
1445
1446 if (!(tp->flags & ESP_TGT_NEGO_SYNC))
1447 goto do_reject;
1448
1449 if (offset > 15)
1450 goto do_reject;
1451
1452 if (offset) {
1453 int one_clock;
1454
1455 if (period > esp->max_period) {
1456 period = offset = 0;
1457 goto do_sdtr;
1458 }
1459 if (period < esp->min_period)
1460 goto do_reject;
1461
1462 one_clock = esp->ccycle / 1000;
1463 stp = DIV_ROUND_UP(period << 2, one_clock);
1464 if (stp && esp->rev >= FAS236) {
1465 if (stp >= 50)
1466 stp--;
1467 }
1468 } else {
1469 stp = 0;
1470 }
1471
1472 esp_setsync(esp, tp, period, offset, stp, offset);
1473 return;
1474
1475do_reject:
1476 esp->msg_out[0] = MESSAGE_REJECT;
1477 esp->msg_out_len = 1;
1478 scsi_esp_cmd(esp, ESP_CMD_SATN);
1479 return;
1480
1481do_sdtr:
1482 tp->nego_goal_period = period;
1483 tp->nego_goal_offset = offset;
1484 esp->msg_out_len =
1485 spi_populate_sync_msg(&esp->msg_out[0],
1486 tp->nego_goal_period,
1487 tp->nego_goal_offset);
1488 scsi_esp_cmd(esp, ESP_CMD_SATN);
1489}
1490
1491static void esp_msgin_wdtr(struct esp *esp, struct esp_target_data *tp)
1492{
1493 int size = 8 << esp->msg_in[3];
1494 u8 cfg3;
1495
1496 if (esp->rev != FASHME)
1497 goto do_reject;
1498
1499 if (size != 8 && size != 16)
1500 goto do_reject;
1501
1502 if (!(tp->flags & ESP_TGT_NEGO_WIDE))
1503 goto do_reject;
1504
1505 cfg3 = tp->esp_config3;
1506 if (size == 16) {
1507 tp->flags |= ESP_TGT_WIDE;
1508 cfg3 |= ESP_CONFIG3_EWIDE;
1509 } else {
1510 tp->flags &= ~ESP_TGT_WIDE;
1511 cfg3 &= ~ESP_CONFIG3_EWIDE;
1512 }
1513 tp->esp_config3 = cfg3;
1514 esp->prev_cfg3 = cfg3;
1515 esp_write8(cfg3, ESP_CFG3);
1516
1517 tp->flags &= ~ESP_TGT_NEGO_WIDE;
1518
1519 spi_period(tp->starget) = 0;
1520 spi_offset(tp->starget) = 0;
1521 if (!esp_need_to_nego_sync(tp)) {
1522 tp->flags &= ~ESP_TGT_CHECK_NEGO;
1523 scsi_esp_cmd(esp, ESP_CMD_RATN);
1524 } else {
1525 esp->msg_out_len =
1526 spi_populate_sync_msg(&esp->msg_out[0],
1527 tp->nego_goal_period,
1528 tp->nego_goal_offset);
1529 tp->flags |= ESP_TGT_NEGO_SYNC;
1530 scsi_esp_cmd(esp, ESP_CMD_SATN);
1531 }
1532 return;
1533
1534do_reject:
1535 esp->msg_out[0] = MESSAGE_REJECT;
1536 esp->msg_out_len = 1;
1537 scsi_esp_cmd(esp, ESP_CMD_SATN);
1538}
1539
1540static void esp_msgin_extended(struct esp *esp)
1541{
1542 struct esp_cmd_entry *ent = esp->active_cmd;
1543 struct scsi_cmnd *cmd = ent->cmd;
1544 struct esp_target_data *tp;
1545 int tgt = cmd->device->id;
1546
1547 tp = &esp->target[tgt];
1548 if (esp->msg_in[2] == EXTENDED_SDTR) {
1549 esp_msgin_sdtr(esp, tp);
1550 return;
1551 }
1552 if (esp->msg_in[2] == EXTENDED_WDTR) {
1553 esp_msgin_wdtr(esp, tp);
1554 return;
1555 }
1556
1557 printk("ESP: Unexpected extended msg type %x\n",
1558 esp->msg_in[2]);
1559
1560 esp->msg_out[0] = ABORT_TASK_SET;
1561 esp->msg_out_len = 1;
1562 scsi_esp_cmd(esp, ESP_CMD_SATN);
1563}
1564
1565/* Analyze msgin bytes received from target so far. Return non-zero
1566 * if there are more bytes needed to complete the message.
1567 */
1568static int esp_msgin_process(struct esp *esp)
1569{
1570 u8 msg0 = esp->msg_in[0];
1571 int len = esp->msg_in_len;
1572
1573 if (msg0 & 0x80) {
1574 /* Identify */
1575 printk("ESP: Unexpected msgin identify\n");
1576 return 0;
1577 }
1578
1579 switch (msg0) {
1580 case EXTENDED_MESSAGE:
1581 if (len == 1)
1582 return 1;
1583 if (len < esp->msg_in[1] + 2)
1584 return 1;
1585 esp_msgin_extended(esp);
1586 return 0;
1587
1588 case IGNORE_WIDE_RESIDUE: {
1589 struct esp_cmd_entry *ent;
1590 struct esp_cmd_priv *spriv;
1591 if (len == 1)
1592 return 1;
1593
1594 if (esp->msg_in[1] != 1)
1595 goto do_reject;
1596
1597 ent = esp->active_cmd;
1598 spriv = ESP_CMD_PRIV(ent->cmd);
1599
1600 if (spriv->cur_residue == sg_dma_len(spriv->cur_sg)) {
1601 spriv->cur_sg--;
1602 spriv->cur_residue = 1;
1603 } else
1604 spriv->cur_residue++;
1605 spriv->tot_residue++;
1606 return 0;
1607 }
1608 case NOP:
1609 return 0;
1610 case RESTORE_POINTERS:
1611 esp_restore_pointers(esp, esp->active_cmd);
1612 return 0;
1613 case SAVE_POINTERS:
1614 esp_save_pointers(esp, esp->active_cmd);
1615 return 0;
1616
1617 case COMMAND_COMPLETE:
1618 case DISCONNECT: {
1619 struct esp_cmd_entry *ent = esp->active_cmd;
1620
1621 ent->message = msg0;
1622 esp_event(esp, ESP_EVENT_FREE_BUS);
1623 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1624 return 0;
1625 }
1626 case MESSAGE_REJECT:
1627 esp_msgin_reject(esp);
1628 return 0;
1629
1630 default:
1631 do_reject:
1632 esp->msg_out[0] = MESSAGE_REJECT;
1633 esp->msg_out_len = 1;
1634 scsi_esp_cmd(esp, ESP_CMD_SATN);
1635 return 0;
1636 }
1637}
1638
1639static int esp_process_event(struct esp *esp)
1640{
1641 int write;
1642
1643again:
1644 write = 0;
1645 switch (esp->event) {
1646 case ESP_EVENT_CHECK_PHASE:
1647 switch (esp->sreg & ESP_STAT_PMASK) {
1648 case ESP_DOP:
1649 esp_event(esp, ESP_EVENT_DATA_OUT);
1650 break;
1651 case ESP_DIP:
1652 esp_event(esp, ESP_EVENT_DATA_IN);
1653 break;
1654 case ESP_STATP:
1655 esp_flush_fifo(esp);
1656 scsi_esp_cmd(esp, ESP_CMD_ICCSEQ);
1657 esp_event(esp, ESP_EVENT_STATUS);
1658 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1659 return 1;
1660
1661 case ESP_MOP:
1662 esp_event(esp, ESP_EVENT_MSGOUT);
1663 break;
1664
1665 case ESP_MIP:
1666 esp_event(esp, ESP_EVENT_MSGIN);
1667 break;
1668
1669 case ESP_CMDP:
1670 esp_event(esp, ESP_EVENT_CMD_START);
1671 break;
1672
1673 default:
1674 printk("ESP: Unexpected phase, sreg=%02x\n",
1675 esp->sreg);
1676 esp_schedule_reset(esp);
1677 return 0;
1678 }
1679 goto again;
1680 break;
1681
1682 case ESP_EVENT_DATA_IN:
1683 write = 1;
1684 /* fallthru */
1685
1686 case ESP_EVENT_DATA_OUT: {
1687 struct esp_cmd_entry *ent = esp->active_cmd;
1688 struct scsi_cmnd *cmd = ent->cmd;
1689 dma_addr_t dma_addr = esp_cur_dma_addr(ent, cmd);
1690 unsigned int dma_len = esp_cur_dma_len(ent, cmd);
1691
1692 if (esp->rev == ESP100)
1693 scsi_esp_cmd(esp, ESP_CMD_NULL);
1694
1695 if (write)
1696 ent->flags |= ESP_CMD_FLAG_WRITE;
1697 else
1698 ent->flags &= ~ESP_CMD_FLAG_WRITE;
1699
1700 if (esp->ops->dma_length_limit)
1701 dma_len = esp->ops->dma_length_limit(esp, dma_addr,
1702 dma_len);
1703 else
1704 dma_len = esp_dma_length_limit(esp, dma_addr, dma_len);
1705
1706 esp->data_dma_len = dma_len;
1707
1708 if (!dma_len) {
1709 printk(KERN_ERR PFX "esp%d: DMA length is zero!\n",
1710 esp->host->unique_id);
1711 printk(KERN_ERR PFX "esp%d: cur adr[%08llx] len[%08x]\n",
1712 esp->host->unique_id,
1713 (unsigned long long)esp_cur_dma_addr(ent, cmd),
1714 esp_cur_dma_len(ent, cmd));
1715 esp_schedule_reset(esp);
1716 return 0;
1717 }
1718
1719 esp_log_datastart("ESP: start data addr[%08llx] len[%u] "
1720 "write(%d)\n",
1721 (unsigned long long)dma_addr, dma_len, write);
1722
1723 esp->ops->send_dma_cmd(esp, dma_addr, dma_len, dma_len,
1724 write, ESP_CMD_DMA | ESP_CMD_TI);
1725 esp_event(esp, ESP_EVENT_DATA_DONE);
1726 break;
1727 }
1728 case ESP_EVENT_DATA_DONE: {
1729 struct esp_cmd_entry *ent = esp->active_cmd;
1730 struct scsi_cmnd *cmd = ent->cmd;
1731 int bytes_sent;
1732
1733 if (esp->ops->dma_error(esp)) {
1734 printk("ESP: data done, DMA error, resetting\n");
1735 esp_schedule_reset(esp);
1736 return 0;
1737 }
1738
1739 if (ent->flags & ESP_CMD_FLAG_WRITE) {
1740 /* XXX parity errors, etc. XXX */
1741
1742 esp->ops->dma_drain(esp);
1743 }
1744 esp->ops->dma_invalidate(esp);
1745
1746 if (esp->ireg != ESP_INTR_BSERV) {
1747 /* We should always see exactly a bus-service
1748 * interrupt at the end of a successful transfer.
1749 */
1750 printk("ESP: data done, not BSERV, resetting\n");
1751 esp_schedule_reset(esp);
1752 return 0;
1753 }
1754
1755 bytes_sent = esp_data_bytes_sent(esp, ent, cmd);
1756
1757 esp_log_datadone("ESP: data done flgs[%x] sent[%d]\n",
1758 ent->flags, bytes_sent);
1759
1760 if (bytes_sent < 0) {
1761 /* XXX force sync mode for this target XXX */
1762 esp_schedule_reset(esp);
1763 return 0;
1764 }
1765
1766 esp_advance_dma(esp, ent, cmd, bytes_sent);
1767 esp_event(esp, ESP_EVENT_CHECK_PHASE);
1768 goto again;
1769 }
1770
1771 case ESP_EVENT_STATUS: {
1772 struct esp_cmd_entry *ent = esp->active_cmd;
1773
1774 if (esp->ireg & ESP_INTR_FDONE) {
1775 ent->status = esp_read8(ESP_FDATA);
1776 ent->message = esp_read8(ESP_FDATA);
1777 scsi_esp_cmd(esp, ESP_CMD_MOK);
1778 } else if (esp->ireg == ESP_INTR_BSERV) {
1779 ent->status = esp_read8(ESP_FDATA);
1780 ent->message = 0xff;
1781 esp_event(esp, ESP_EVENT_MSGIN);
1782 return 0;
1783 }
1784
1785 if (ent->message != COMMAND_COMPLETE) {
1786 printk("ESP: Unexpected message %x in status\n",
1787 ent->message);
1788 esp_schedule_reset(esp);
1789 return 0;
1790 }
1791
1792 esp_event(esp, ESP_EVENT_FREE_BUS);
1793 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1794 break;
1795 }
1796 case ESP_EVENT_FREE_BUS: {
1797 struct esp_cmd_entry *ent = esp->active_cmd;
1798 struct scsi_cmnd *cmd = ent->cmd;
1799
1800 if (ent->message == COMMAND_COMPLETE ||
1801 ent->message == DISCONNECT)
1802 scsi_esp_cmd(esp, ESP_CMD_ESEL);
1803
1804 if (ent->message == COMMAND_COMPLETE) {
1805 esp_log_cmddone("ESP: Command done status[%x] "
1806 "message[%x]\n",
1807 ent->status, ent->message);
1808 if (ent->status == SAM_STAT_TASK_SET_FULL)
1809 esp_event_queue_full(esp, ent);
1810
1811 if (ent->status == SAM_STAT_CHECK_CONDITION &&
1812 !(ent->flags & ESP_CMD_FLAG_AUTOSENSE)) {
1813 ent->flags |= ESP_CMD_FLAG_AUTOSENSE;
1814 esp_autosense(esp, ent);
1815 } else {
1816 esp_cmd_is_done(esp, ent, cmd,
1817 compose_result(ent->status,
1818 ent->message,
1819 DID_OK));
1820 }
1821 } else if (ent->message == DISCONNECT) {
1822 esp_log_disconnect("ESP: Disconnecting tgt[%d] "
1823 "tag[%x:%x]\n",
1824 cmd->device->id,
1825 ent->tag[0], ent->tag[1]);
1826
1827 esp->active_cmd = NULL;
1828 esp_maybe_execute_command(esp);
1829 } else {
1830 printk("ESP: Unexpected message %x in freebus\n",
1831 ent->message);
1832 esp_schedule_reset(esp);
1833 return 0;
1834 }
1835 if (esp->active_cmd)
1836 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1837 break;
1838 }
1839 case ESP_EVENT_MSGOUT: {
1840 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1841
1842 if (esp_debug & ESP_DEBUG_MSGOUT) {
1843 int i;
1844 printk("ESP: Sending message [ ");
1845 for (i = 0; i < esp->msg_out_len; i++)
1846 printk("%02x ", esp->msg_out[i]);
1847 printk("]\n");
1848 }
1849
1850 if (esp->rev == FASHME) {
1851 int i;
1852
1853 /* Always use the fifo. */
1854 for (i = 0; i < esp->msg_out_len; i++) {
1855 esp_write8(esp->msg_out[i], ESP_FDATA);
1856 esp_write8(0, ESP_FDATA);
1857 }
1858 scsi_esp_cmd(esp, ESP_CMD_TI);
1859 } else {
1860 if (esp->msg_out_len == 1) {
1861 esp_write8(esp->msg_out[0], ESP_FDATA);
1862 scsi_esp_cmd(esp, ESP_CMD_TI);
1863 } else {
1864 /* Use DMA. */
1865 memcpy(esp->command_block,
1866 esp->msg_out,
1867 esp->msg_out_len);
1868
1869 esp->ops->send_dma_cmd(esp,
1870 esp->command_block_dma,
1871 esp->msg_out_len,
1872 esp->msg_out_len,
1873 0,
1874 ESP_CMD_DMA|ESP_CMD_TI);
1875 }
1876 }
1877 esp_event(esp, ESP_EVENT_MSGOUT_DONE);
1878 break;
1879 }
1880 case ESP_EVENT_MSGOUT_DONE:
1881 if (esp->rev == FASHME) {
1882 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1883 } else {
1884 if (esp->msg_out_len > 1)
1885 esp->ops->dma_invalidate(esp);
1886 }
1887
1888 if (!(esp->ireg & ESP_INTR_DC)) {
1889 if (esp->rev != FASHME)
1890 scsi_esp_cmd(esp, ESP_CMD_NULL);
1891 }
1892 esp_event(esp, ESP_EVENT_CHECK_PHASE);
1893 goto again;
1894 case ESP_EVENT_MSGIN:
1895 if (esp->ireg & ESP_INTR_BSERV) {
1896 if (esp->rev == FASHME) {
1897 if (!(esp_read8(ESP_STATUS2) &
1898 ESP_STAT2_FEMPTY))
1899 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1900 } else {
1901 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1902 if (esp->rev == ESP100)
1903 scsi_esp_cmd(esp, ESP_CMD_NULL);
1904 }
1905 scsi_esp_cmd(esp, ESP_CMD_TI);
1906 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1907 return 1;
1908 }
1909 if (esp->ireg & ESP_INTR_FDONE) {
1910 u8 val;
1911
1912 if (esp->rev == FASHME)
1913 val = esp->fifo[0];
1914 else
1915 val = esp_read8(ESP_FDATA);
1916 esp->msg_in[esp->msg_in_len++] = val;
1917
1918 esp_log_msgin("ESP: Got msgin byte %x\n", val);
1919
1920 if (!esp_msgin_process(esp))
1921 esp->msg_in_len = 0;
1922
1923 if (esp->rev == FASHME)
1924 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1925
1926 scsi_esp_cmd(esp, ESP_CMD_MOK);
1927
1928 if (esp->event != ESP_EVENT_FREE_BUS)
1929 esp_event(esp, ESP_EVENT_CHECK_PHASE);
1930 } else {
1931 printk("ESP: MSGIN neither BSERV not FDON, resetting");
1932 esp_schedule_reset(esp);
1933 return 0;
1934 }
1935 break;
1936 case ESP_EVENT_CMD_START:
1937 memcpy(esp->command_block, esp->cmd_bytes_ptr,
1938 esp->cmd_bytes_left);
1939 if (esp->rev == FASHME)
1940 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1941 esp->ops->send_dma_cmd(esp, esp->command_block_dma,
1942 esp->cmd_bytes_left, 16, 0,
1943 ESP_CMD_DMA | ESP_CMD_TI);
1944 esp_event(esp, ESP_EVENT_CMD_DONE);
1945 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1946 break;
1947 case ESP_EVENT_CMD_DONE:
1948 esp->ops->dma_invalidate(esp);
1949 if (esp->ireg & ESP_INTR_BSERV) {
1950 esp_event(esp, ESP_EVENT_CHECK_PHASE);
1951 goto again;
1952 }
1953 esp_schedule_reset(esp);
1954 return 0;
1955 break;
1956
1957 case ESP_EVENT_RESET:
1958 scsi_esp_cmd(esp, ESP_CMD_RS);
1959 break;
1960
1961 default:
1962 printk("ESP: Unexpected event %x, resetting\n",
1963 esp->event);
1964 esp_schedule_reset(esp);
1965 return 0;
1966 break;
1967 }
1968 return 1;
1969}
1970
1971static void esp_reset_cleanup_one(struct esp *esp, struct esp_cmd_entry *ent)
1972{
1973 struct scsi_cmnd *cmd = ent->cmd;
1974
1975 esp_unmap_dma(esp, cmd);
1976 esp_free_lun_tag(ent, cmd->device->hostdata);
1977 cmd->result = DID_RESET << 16;
1978
1979 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
1980 esp->ops->unmap_single(esp, ent->sense_dma,
1981 SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
1982 ent->sense_ptr = NULL;
1983 }
1984
1985 cmd->scsi_done(cmd);
1986 list_del(&ent->list);
1987 esp_put_ent(esp, ent);
1988}
1989
1990static void esp_clear_hold(struct scsi_device *dev, void *data)
1991{
1992 struct esp_lun_data *lp = dev->hostdata;
1993
1994 BUG_ON(lp->num_tagged);
1995 lp->hold = 0;
1996}
1997
1998static void esp_reset_cleanup(struct esp *esp)
1999{
2000 struct esp_cmd_entry *ent, *tmp;
2001 int i;
2002
2003 list_for_each_entry_safe(ent, tmp, &esp->queued_cmds, list) {
2004 struct scsi_cmnd *cmd = ent->cmd;
2005
2006 list_del(&ent->list);
2007 cmd->result = DID_RESET << 16;
2008 cmd->scsi_done(cmd);
2009 esp_put_ent(esp, ent);
2010 }
2011
2012 list_for_each_entry_safe(ent, tmp, &esp->active_cmds, list) {
2013 if (ent == esp->active_cmd)
2014 esp->active_cmd = NULL;
2015 esp_reset_cleanup_one(esp, ent);
2016 }
2017
2018 BUG_ON(esp->active_cmd != NULL);
2019
2020 /* Force renegotiation of sync/wide transfers. */
2021 for (i = 0; i < ESP_MAX_TARGET; i++) {
2022 struct esp_target_data *tp = &esp->target[i];
2023
2024 tp->esp_period = 0;
2025 tp->esp_offset = 0;
2026 tp->esp_config3 &= ~(ESP_CONFIG3_EWIDE |
2027 ESP_CONFIG3_FSCSI |
2028 ESP_CONFIG3_FAST);
2029 tp->flags &= ~ESP_TGT_WIDE;
2030 tp->flags |= ESP_TGT_CHECK_NEGO;
2031
2032 if (tp->starget)
2033 __starget_for_each_device(tp->starget, NULL,
2034 esp_clear_hold);
2035 }
2036 esp->flags &= ~ESP_FLAG_RESETTING;
2037}
2038
2039/* Runs under host->lock */
2040static void __esp_interrupt(struct esp *esp)
2041{
2042 int finish_reset, intr_done;
2043 u8 phase;
2044
2045 esp->sreg = esp_read8(ESP_STATUS);
2046
2047 if (esp->flags & ESP_FLAG_RESETTING) {
2048 finish_reset = 1;
2049 } else {
2050 if (esp_check_gross_error(esp))
2051 return;
2052
2053 finish_reset = esp_check_spur_intr(esp);
2054 if (finish_reset < 0)
2055 return;
2056 }
2057
2058 esp->ireg = esp_read8(ESP_INTRPT);
2059
2060 if (esp->ireg & ESP_INTR_SR)
2061 finish_reset = 1;
2062
2063 if (finish_reset) {
2064 esp_reset_cleanup(esp);
2065 if (esp->eh_reset) {
2066 complete(esp->eh_reset);
2067 esp->eh_reset = NULL;
2068 }
2069 return;
2070 }
2071
2072 phase = (esp->sreg & ESP_STAT_PMASK);
2073 if (esp->rev == FASHME) {
2074 if (((phase != ESP_DIP && phase != ESP_DOP) &&
2075 esp->select_state == ESP_SELECT_NONE &&
2076 esp->event != ESP_EVENT_STATUS &&
2077 esp->event != ESP_EVENT_DATA_DONE) ||
2078 (esp->ireg & ESP_INTR_RSEL)) {
2079 esp->sreg2 = esp_read8(ESP_STATUS2);
2080 if (!(esp->sreg2 & ESP_STAT2_FEMPTY) ||
2081 (esp->sreg2 & ESP_STAT2_F1BYTE))
2082 hme_read_fifo(esp);
2083 }
2084 }
2085
2086 esp_log_intr("ESP: intr sreg[%02x] seqreg[%02x] "
2087 "sreg2[%02x] ireg[%02x]\n",
2088 esp->sreg, esp->seqreg, esp->sreg2, esp->ireg);
2089
2090 intr_done = 0;
2091
2092 if (esp->ireg & (ESP_INTR_S | ESP_INTR_SATN | ESP_INTR_IC)) {
2093 printk("ESP: unexpected IREG %02x\n", esp->ireg);
2094 if (esp->ireg & ESP_INTR_IC)
2095 esp_dump_cmd_log(esp);
2096
2097 esp_schedule_reset(esp);
2098 } else {
2099 if (!(esp->ireg & ESP_INTR_RSEL)) {
2100 /* Some combination of FDONE, BSERV, DC. */
2101 if (esp->select_state != ESP_SELECT_NONE)
2102 intr_done = esp_finish_select(esp);
2103 } else if (esp->ireg & ESP_INTR_RSEL) {
2104 if (esp->active_cmd)
2105 (void) esp_finish_select(esp);
2106 intr_done = esp_reconnect(esp);
2107 }
2108 }
2109 while (!intr_done)
2110 intr_done = esp_process_event(esp);
2111}
2112
2113irqreturn_t scsi_esp_intr(int irq, void *dev_id)
2114{
2115 struct esp *esp = dev_id;
2116 unsigned long flags;
2117 irqreturn_t ret;
2118
2119 spin_lock_irqsave(esp->host->host_lock, flags);
2120 ret = IRQ_NONE;
2121 if (esp->ops->irq_pending(esp)) {
2122 ret = IRQ_HANDLED;
2123 for (;;) {
2124 int i;
2125
2126 __esp_interrupt(esp);
2127 if (!(esp->flags & ESP_FLAG_QUICKIRQ_CHECK))
2128 break;
2129 esp->flags &= ~ESP_FLAG_QUICKIRQ_CHECK;
2130
2131 for (i = 0; i < ESP_QUICKIRQ_LIMIT; i++) {
2132 if (esp->ops->irq_pending(esp))
2133 break;
2134 }
2135 if (i == ESP_QUICKIRQ_LIMIT)
2136 break;
2137 }
2138 }
2139 spin_unlock_irqrestore(esp->host->host_lock, flags);
2140
2141 return ret;
2142}
2143EXPORT_SYMBOL(scsi_esp_intr);
2144
2145static void esp_get_revision(struct esp *esp)
2146{
2147 u8 val;
2148
2149 esp->config1 = (ESP_CONFIG1_PENABLE | (esp->scsi_id & 7));
2150 esp->config2 = (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY);
2151 esp_write8(esp->config2, ESP_CFG2);
2152
2153 val = esp_read8(ESP_CFG2);
2154 val &= ~ESP_CONFIG2_MAGIC;
2155 if (val != (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY)) {
2156 /* If what we write to cfg2 does not come back, cfg2 is not
2157 * implemented, therefore this must be a plain esp100.
2158 */
2159 esp->rev = ESP100;
2160 } else {
2161 esp->config2 = 0;
2162 esp_set_all_config3(esp, 5);
2163 esp->prev_cfg3 = 5;
2164 esp_write8(esp->config2, ESP_CFG2);
2165 esp_write8(0, ESP_CFG3);
2166 esp_write8(esp->prev_cfg3, ESP_CFG3);
2167
2168 val = esp_read8(ESP_CFG3);
2169 if (val != 5) {
2170 /* The cfg2 register is implemented, however
2171 * cfg3 is not, must be esp100a.
2172 */
2173 esp->rev = ESP100A;
2174 } else {
2175 esp_set_all_config3(esp, 0);
2176 esp->prev_cfg3 = 0;
2177 esp_write8(esp->prev_cfg3, ESP_CFG3);
2178
2179 /* All of cfg{1,2,3} implemented, must be one of
2180 * the fas variants, figure out which one.
2181 */
2182 if (esp->cfact == 0 || esp->cfact > ESP_CCF_F5) {
2183 esp->rev = FAST;
2184 esp->sync_defp = SYNC_DEFP_FAST;
2185 } else {
2186 esp->rev = ESP236;
2187 }
2188 esp->config2 = 0;
2189 esp_write8(esp->config2, ESP_CFG2);
2190 }
2191 }
2192}
2193
2194static void esp_init_swstate(struct esp *esp)
2195{
2196 int i;
2197
2198 INIT_LIST_HEAD(&esp->queued_cmds);
2199 INIT_LIST_HEAD(&esp->active_cmds);
2200 INIT_LIST_HEAD(&esp->esp_cmd_pool);
2201
2202 /* Start with a clear state, domain validation (via ->slave_configure,
2203 * spi_dv_device()) will attempt to enable SYNC, WIDE, and tagged
2204 * commands.
2205 */
2206 for (i = 0 ; i < ESP_MAX_TARGET; i++) {
2207 esp->target[i].flags = 0;
2208 esp->target[i].nego_goal_period = 0;
2209 esp->target[i].nego_goal_offset = 0;
2210 esp->target[i].nego_goal_width = 0;
2211 esp->target[i].nego_goal_tags = 0;
2212 }
2213}
2214
2215/* This places the ESP into a known state at boot time. */
2216static void esp_bootup_reset(struct esp *esp)
2217{
2218 u8 val;
2219
2220 /* Reset the DMA */
2221 esp->ops->reset_dma(esp);
2222
2223 /* Reset the ESP */
2224 esp_reset_esp(esp);
2225
2226 /* Reset the SCSI bus, but tell ESP not to generate an irq */
2227 val = esp_read8(ESP_CFG1);
2228 val |= ESP_CONFIG1_SRRDISAB;
2229 esp_write8(val, ESP_CFG1);
2230
2231 scsi_esp_cmd(esp, ESP_CMD_RS);
2232 udelay(400);
2233
2234 esp_write8(esp->config1, ESP_CFG1);
2235
2236 /* Eat any bitrot in the chip and we are done... */
2237 esp_read8(ESP_INTRPT);
2238}
2239
2240static void esp_set_clock_params(struct esp *esp)
2241{
2242 int fhz;
2243 u8 ccf;
2244
2245 /* This is getting messy but it has to be done correctly or else
2246 * you get weird behavior all over the place. We are trying to
2247 * basically figure out three pieces of information.
2248 *
2249 * a) Clock Conversion Factor
2250 *
2251 * This is a representation of the input crystal clock frequency
2252 * going into the ESP on this machine. Any operation whose timing
2253 * is longer than 400ns depends on this value being correct. For
2254 * example, you'll get blips for arbitration/selection during high
2255 * load or with multiple targets if this is not set correctly.
2256 *
2257 * b) Selection Time-Out
2258 *
2259 * The ESP isn't very bright and will arbitrate for the bus and try
2260 * to select a target forever if you let it. This value tells the
2261 * ESP when it has taken too long to negotiate and that it should
2262 * interrupt the CPU so we can see what happened. The value is
2263 * computed as follows (from NCR/Symbios chip docs).
2264 *
2265 * (Time Out Period) * (Input Clock)
2266 * STO = ----------------------------------
2267 * (8192) * (Clock Conversion Factor)
2268 *
2269 * We use a time out period of 250ms (ESP_BUS_TIMEOUT).
2270 *
2271 * c) Imperical constants for synchronous offset and transfer period
2272 * register values
2273 *
2274 * This entails the smallest and largest sync period we could ever
2275 * handle on this ESP.
2276 */
2277 fhz = esp->cfreq;
2278
2279 ccf = ((fhz / 1000000) + 4) / 5;
2280 if (ccf == 1)
2281 ccf = 2;
2282
2283 /* If we can't find anything reasonable, just assume 20MHZ.
2284 * This is the clock frequency of the older sun4c's where I've
2285 * been unable to find the clock-frequency PROM property. All
2286 * other machines provide useful values it seems.
2287 */
2288 if (fhz <= 5000000 || ccf < 1 || ccf > 8) {
2289 fhz = 20000000;
2290 ccf = 4;
2291 }
2292
2293 esp->cfact = (ccf == 8 ? 0 : ccf);
2294 esp->cfreq = fhz;
2295 esp->ccycle = ESP_HZ_TO_CYCLE(fhz);
2296 esp->ctick = ESP_TICK(ccf, esp->ccycle);
2297 esp->neg_defp = ESP_NEG_DEFP(fhz, ccf);
2298 esp->sync_defp = SYNC_DEFP_SLOW;
2299}
2300
2301static const char *esp_chip_names[] = {
2302 "ESP100",
2303 "ESP100A",
2304 "ESP236",
2305 "FAS236",
2306 "FAS100A",
2307 "FAST",
2308 "FASHME",
2309};
2310
2311static struct scsi_transport_template *esp_transport_template;
2312
2313int scsi_esp_register(struct esp *esp, struct device *dev)
2314{
2315 static int instance;
2316 int err;
2317
2318 esp->host->transportt = esp_transport_template;
2319 esp->host->max_lun = ESP_MAX_LUN;
2320 esp->host->cmd_per_lun = 2;
2321 esp->host->unique_id = instance;
2322
2323 esp_set_clock_params(esp);
2324
2325 esp_get_revision(esp);
2326
2327 esp_init_swstate(esp);
2328
2329 esp_bootup_reset(esp);
2330
2331 printk(KERN_INFO PFX "esp%u, regs[%1p:%1p] irq[%u]\n",
2332 esp->host->unique_id, esp->regs, esp->dma_regs,
2333 esp->host->irq);
2334 printk(KERN_INFO PFX "esp%u is a %s, %u MHz (ccf=%u), SCSI ID %u\n",
2335 esp->host->unique_id, esp_chip_names[esp->rev],
2336 esp->cfreq / 1000000, esp->cfact, esp->scsi_id);
2337
2338 /* Let the SCSI bus reset settle. */
2339 ssleep(esp_bus_reset_settle);
2340
2341 err = scsi_add_host(esp->host, dev);
2342 if (err)
2343 return err;
2344
2345 instance++;
2346
2347 scsi_scan_host(esp->host);
2348
2349 return 0;
2350}
2351EXPORT_SYMBOL(scsi_esp_register);
2352
2353void scsi_esp_unregister(struct esp *esp)
2354{
2355 scsi_remove_host(esp->host);
2356}
2357EXPORT_SYMBOL(scsi_esp_unregister);
2358
2359static int esp_target_alloc(struct scsi_target *starget)
2360{
2361 struct esp *esp = shost_priv(dev_to_shost(&starget->dev));
2362 struct esp_target_data *tp = &esp->target[starget->id];
2363
2364 tp->starget = starget;
2365
2366 return 0;
2367}
2368
2369static void esp_target_destroy(struct scsi_target *starget)
2370{
2371 struct esp *esp = shost_priv(dev_to_shost(&starget->dev));
2372 struct esp_target_data *tp = &esp->target[starget->id];
2373
2374 tp->starget = NULL;
2375}
2376
2377static int esp_slave_alloc(struct scsi_device *dev)
2378{
2379 struct esp *esp = shost_priv(dev->host);
2380 struct esp_target_data *tp = &esp->target[dev->id];
2381 struct esp_lun_data *lp;
2382
2383 lp = kzalloc(sizeof(*lp), GFP_KERNEL);
2384 if (!lp)
2385 return -ENOMEM;
2386 dev->hostdata = lp;
2387
2388 spi_min_period(tp->starget) = esp->min_period;
2389 spi_max_offset(tp->starget) = 15;
2390
2391 if (esp->flags & ESP_FLAG_WIDE_CAPABLE)
2392 spi_max_width(tp->starget) = 1;
2393 else
2394 spi_max_width(tp->starget) = 0;
2395
2396 return 0;
2397}
2398
2399static int esp_slave_configure(struct scsi_device *dev)
2400{
2401 struct esp *esp = shost_priv(dev->host);
2402 struct esp_target_data *tp = &esp->target[dev->id];
2403 int goal_tags, queue_depth;
2404
2405 goal_tags = 0;
2406
2407 if (dev->tagged_supported) {
2408 /* XXX make this configurable somehow XXX */
2409 goal_tags = ESP_DEFAULT_TAGS;
2410
2411 if (goal_tags > ESP_MAX_TAG)
2412 goal_tags = ESP_MAX_TAG;
2413 }
2414
2415 queue_depth = goal_tags;
2416 if (queue_depth < dev->host->cmd_per_lun)
2417 queue_depth = dev->host->cmd_per_lun;
2418
2419 if (goal_tags) {
2420 scsi_set_tag_type(dev, MSG_ORDERED_TAG);
2421 scsi_activate_tcq(dev, queue_depth);
2422 } else {
2423 scsi_deactivate_tcq(dev, queue_depth);
2424 }
2425 tp->flags |= ESP_TGT_DISCONNECT;
2426
2427 if (!spi_initial_dv(dev->sdev_target))
2428 spi_dv_device(dev);
2429
2430 return 0;
2431}
2432
2433static void esp_slave_destroy(struct scsi_device *dev)
2434{
2435 struct esp_lun_data *lp = dev->hostdata;
2436
2437 kfree(lp);
2438 dev->hostdata = NULL;
2439}
2440
2441static int esp_eh_abort_handler(struct scsi_cmnd *cmd)
2442{
2443 struct esp *esp = shost_priv(cmd->device->host);
2444 struct esp_cmd_entry *ent, *tmp;
2445 struct completion eh_done;
2446 unsigned long flags;
2447
2448 /* XXX This helps a lot with debugging but might be a bit
2449 * XXX much for the final driver.
2450 */
2451 spin_lock_irqsave(esp->host->host_lock, flags);
2452 printk(KERN_ERR PFX "esp%d: Aborting command [%p:%02x]\n",
2453 esp->host->unique_id, cmd, cmd->cmnd[0]);
2454 ent = esp->active_cmd;
2455 if (ent)
2456 printk(KERN_ERR PFX "esp%d: Current command [%p:%02x]\n",
2457 esp->host->unique_id, ent->cmd, ent->cmd->cmnd[0]);
2458 list_for_each_entry(ent, &esp->queued_cmds, list) {
2459 printk(KERN_ERR PFX "esp%d: Queued command [%p:%02x]\n",
2460 esp->host->unique_id, ent->cmd, ent->cmd->cmnd[0]);
2461 }
2462 list_for_each_entry(ent, &esp->active_cmds, list) {
2463 printk(KERN_ERR PFX "esp%d: Active command [%p:%02x]\n",
2464 esp->host->unique_id, ent->cmd, ent->cmd->cmnd[0]);
2465 }
2466 esp_dump_cmd_log(esp);
2467 spin_unlock_irqrestore(esp->host->host_lock, flags);
2468
2469 spin_lock_irqsave(esp->host->host_lock, flags);
2470
2471 ent = NULL;
2472 list_for_each_entry(tmp, &esp->queued_cmds, list) {
2473 if (tmp->cmd == cmd) {
2474 ent = tmp;
2475 break;
2476 }
2477 }
2478
2479 if (ent) {
2480 /* Easiest case, we didn't even issue the command
2481 * yet so it is trivial to abort.
2482 */
2483 list_del(&ent->list);
2484
2485 cmd->result = DID_ABORT << 16;
2486 cmd->scsi_done(cmd);
2487
2488 esp_put_ent(esp, ent);
2489
2490 goto out_success;
2491 }
2492
2493 init_completion(&eh_done);
2494
2495 ent = esp->active_cmd;
2496 if (ent && ent->cmd == cmd) {
2497 /* Command is the currently active command on
2498 * the bus. If we already have an output message
2499 * pending, no dice.
2500 */
2501 if (esp->msg_out_len)
2502 goto out_failure;
2503
2504 /* Send out an abort, encouraging the target to
2505 * go to MSGOUT phase by asserting ATN.
2506 */
2507 esp->msg_out[0] = ABORT_TASK_SET;
2508 esp->msg_out_len = 1;
2509 ent->eh_done = &eh_done;
2510
2511 scsi_esp_cmd(esp, ESP_CMD_SATN);
2512 } else {
2513 /* The command is disconnected. This is not easy to
2514 * abort. For now we fail and let the scsi error
2515 * handling layer go try a scsi bus reset or host
2516 * reset.
2517 *
2518 * What we could do is put together a scsi command
2519 * solely for the purpose of sending an abort message
2520 * to the target. Coming up with all the code to
2521 * cook up scsi commands, special case them everywhere,
2522 * etc. is for questionable gain and it would be better
2523 * if the generic scsi error handling layer could do at
2524 * least some of that for us.
2525 *
2526 * Anyways this is an area for potential future improvement
2527 * in this driver.
2528 */
2529 goto out_failure;
2530 }
2531
2532 spin_unlock_irqrestore(esp->host->host_lock, flags);
2533
2534 if (!wait_for_completion_timeout(&eh_done, 5 * HZ)) {
2535 spin_lock_irqsave(esp->host->host_lock, flags);
2536 ent->eh_done = NULL;
2537 spin_unlock_irqrestore(esp->host->host_lock, flags);
2538
2539 return FAILED;
2540 }
2541
2542 return SUCCESS;
2543
2544out_success:
2545 spin_unlock_irqrestore(esp->host->host_lock, flags);
2546 return SUCCESS;
2547
2548out_failure:
2549 /* XXX This might be a good location to set ESP_TGT_BROKEN
2550 * XXX since we know which target/lun in particular is
2551 * XXX causing trouble.
2552 */
2553 spin_unlock_irqrestore(esp->host->host_lock, flags);
2554 return FAILED;
2555}
2556
2557static int esp_eh_bus_reset_handler(struct scsi_cmnd *cmd)
2558{
2559 struct esp *esp = shost_priv(cmd->device->host);
2560 struct completion eh_reset;
2561 unsigned long flags;
2562
2563 init_completion(&eh_reset);
2564
2565 spin_lock_irqsave(esp->host->host_lock, flags);
2566
2567 esp->eh_reset = &eh_reset;
2568
2569 /* XXX This is too simple... We should add lots of
2570 * XXX checks here so that if we find that the chip is
2571 * XXX very wedged we return failure immediately so
2572 * XXX that we can perform a full chip reset.
2573 */
2574 esp->flags |= ESP_FLAG_RESETTING;
2575 scsi_esp_cmd(esp, ESP_CMD_RS);
2576
2577 spin_unlock_irqrestore(esp->host->host_lock, flags);
2578
2579 ssleep(esp_bus_reset_settle);
2580
2581 if (!wait_for_completion_timeout(&eh_reset, 5 * HZ)) {
2582 spin_lock_irqsave(esp->host->host_lock, flags);
2583 esp->eh_reset = NULL;
2584 spin_unlock_irqrestore(esp->host->host_lock, flags);
2585
2586 return FAILED;
2587 }
2588
2589 return SUCCESS;
2590}
2591
2592/* All bets are off, reset the entire device. */
2593static int esp_eh_host_reset_handler(struct scsi_cmnd *cmd)
2594{
2595 struct esp *esp = shost_priv(cmd->device->host);
2596 unsigned long flags;
2597
2598 spin_lock_irqsave(esp->host->host_lock, flags);
2599 esp_bootup_reset(esp);
2600 esp_reset_cleanup(esp);
2601 spin_unlock_irqrestore(esp->host->host_lock, flags);
2602
2603 ssleep(esp_bus_reset_settle);
2604
2605 return SUCCESS;
2606}
2607
2608static const char *esp_info(struct Scsi_Host *host)
2609{
2610 return "esp";
2611}
2612
2613struct scsi_host_template scsi_esp_template = {
2614 .module = THIS_MODULE,
2615 .name = "esp",
2616 .info = esp_info,
2617 .queuecommand = esp_queuecommand,
2618 .target_alloc = esp_target_alloc,
2619 .target_destroy = esp_target_destroy,
2620 .slave_alloc = esp_slave_alloc,
2621 .slave_configure = esp_slave_configure,
2622 .slave_destroy = esp_slave_destroy,
2623 .eh_abort_handler = esp_eh_abort_handler,
2624 .eh_bus_reset_handler = esp_eh_bus_reset_handler,
2625 .eh_host_reset_handler = esp_eh_host_reset_handler,
2626 .can_queue = 7,
2627 .this_id = 7,
2628 .sg_tablesize = SG_ALL,
2629 .use_clustering = ENABLE_CLUSTERING,
2630 .max_sectors = 0xffff,
2631 .skip_settle_delay = 1,
2632};
2633EXPORT_SYMBOL(scsi_esp_template);
2634
2635static void esp_get_signalling(struct Scsi_Host *host)
2636{
2637 struct esp *esp = shost_priv(host);
2638 enum spi_signal_type type;
2639
2640 if (esp->flags & ESP_FLAG_DIFFERENTIAL)
2641 type = SPI_SIGNAL_HVD;
2642 else
2643 type = SPI_SIGNAL_SE;
2644
2645 spi_signalling(host) = type;
2646}
2647
2648static void esp_set_offset(struct scsi_target *target, int offset)
2649{
2650 struct Scsi_Host *host = dev_to_shost(target->dev.parent);
2651 struct esp *esp = shost_priv(host);
2652 struct esp_target_data *tp = &esp->target[target->id];
2653
2654 if (esp->flags & ESP_FLAG_DISABLE_SYNC)
2655 tp->nego_goal_offset = 0;
2656 else
2657 tp->nego_goal_offset = offset;
2658 tp->flags |= ESP_TGT_CHECK_NEGO;
2659}
2660
2661static void esp_set_period(struct scsi_target *target, int period)
2662{
2663 struct Scsi_Host *host = dev_to_shost(target->dev.parent);
2664 struct esp *esp = shost_priv(host);
2665 struct esp_target_data *tp = &esp->target[target->id];
2666
2667 tp->nego_goal_period = period;
2668 tp->flags |= ESP_TGT_CHECK_NEGO;
2669}
2670
2671static void esp_set_width(struct scsi_target *target, int width)
2672{
2673 struct Scsi_Host *host = dev_to_shost(target->dev.parent);
2674 struct esp *esp = shost_priv(host);
2675 struct esp_target_data *tp = &esp->target[target->id];
2676
2677 tp->nego_goal_width = (width ? 1 : 0);
2678 tp->flags |= ESP_TGT_CHECK_NEGO;
2679}
2680
2681static struct spi_function_template esp_transport_ops = {
2682 .set_offset = esp_set_offset,
2683 .show_offset = 1,
2684 .set_period = esp_set_period,
2685 .show_period = 1,
2686 .set_width = esp_set_width,
2687 .show_width = 1,
2688 .get_signalling = esp_get_signalling,
2689};
2690
2691static int __init esp_init(void)
2692{
2693 BUILD_BUG_ON(sizeof(struct scsi_pointer) <
2694 sizeof(struct esp_cmd_priv));
2695
2696 esp_transport_template = spi_attach_transport(&esp_transport_ops);
2697 if (!esp_transport_template)
2698 return -ENODEV;
2699
2700 return 0;
2701}
2702
2703static void __exit esp_exit(void)
2704{
2705 spi_release_transport(esp_transport_template);
2706}
2707
2708MODULE_DESCRIPTION("ESP SCSI driver core");
2709MODULE_AUTHOR("David S. Miller (davem@davemloft.net)");
2710MODULE_LICENSE("GPL");
2711MODULE_VERSION(DRV_VERSION);
2712
2713module_param(esp_bus_reset_settle, int, 0);
2714MODULE_PARM_DESC(esp_bus_reset_settle,
2715 "ESP scsi bus reset delay in seconds");
2716
2717module_param(esp_debug, int, 0);
2718MODULE_PARM_DESC(esp_debug,
2719"ESP bitmapped debugging message enable value:\n"
2720" 0x00000001 Log interrupt events\n"
2721" 0x00000002 Log scsi commands\n"
2722" 0x00000004 Log resets\n"
2723" 0x00000008 Log message in events\n"
2724" 0x00000010 Log message out events\n"
2725" 0x00000020 Log command completion\n"
2726" 0x00000040 Log disconnects\n"
2727" 0x00000080 Log data start\n"
2728" 0x00000100 Log data done\n"
2729" 0x00000200 Log reconnects\n"
2730" 0x00000400 Log auto-sense data\n"
2731);
2732
2733module_init(esp_init);
2734module_exit(esp_exit);
1// SPDX-License-Identifier: GPL-2.0-only
2/* esp_scsi.c: ESP SCSI driver.
3 *
4 * Copyright (C) 2007 David S. Miller (davem@davemloft.net)
5 */
6
7#include <linux/kernel.h>
8#include <linux/types.h>
9#include <linux/slab.h>
10#include <linux/delay.h>
11#include <linux/list.h>
12#include <linux/completion.h>
13#include <linux/kallsyms.h>
14#include <linux/module.h>
15#include <linux/moduleparam.h>
16#include <linux/init.h>
17#include <linux/irqreturn.h>
18
19#include <asm/irq.h>
20#include <asm/io.h>
21#include <asm/dma.h>
22
23#include <scsi/scsi.h>
24#include <scsi/scsi_host.h>
25#include <scsi/scsi_cmnd.h>
26#include <scsi/scsi_device.h>
27#include <scsi/scsi_tcq.h>
28#include <scsi/scsi_dbg.h>
29#include <scsi/scsi_transport_spi.h>
30
31#include "esp_scsi.h"
32
33#define DRV_MODULE_NAME "esp"
34#define PFX DRV_MODULE_NAME ": "
35#define DRV_VERSION "2.000"
36#define DRV_MODULE_RELDATE "April 19, 2007"
37
38/* SCSI bus reset settle time in seconds. */
39static int esp_bus_reset_settle = 3;
40
41static u32 esp_debug;
42#define ESP_DEBUG_INTR 0x00000001
43#define ESP_DEBUG_SCSICMD 0x00000002
44#define ESP_DEBUG_RESET 0x00000004
45#define ESP_DEBUG_MSGIN 0x00000008
46#define ESP_DEBUG_MSGOUT 0x00000010
47#define ESP_DEBUG_CMDDONE 0x00000020
48#define ESP_DEBUG_DISCONNECT 0x00000040
49#define ESP_DEBUG_DATASTART 0x00000080
50#define ESP_DEBUG_DATADONE 0x00000100
51#define ESP_DEBUG_RECONNECT 0x00000200
52#define ESP_DEBUG_AUTOSENSE 0x00000400
53#define ESP_DEBUG_EVENT 0x00000800
54#define ESP_DEBUG_COMMAND 0x00001000
55
56#define esp_log_intr(f, a...) \
57do { if (esp_debug & ESP_DEBUG_INTR) \
58 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
59} while (0)
60
61#define esp_log_reset(f, a...) \
62do { if (esp_debug & ESP_DEBUG_RESET) \
63 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
64} while (0)
65
66#define esp_log_msgin(f, a...) \
67do { if (esp_debug & ESP_DEBUG_MSGIN) \
68 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
69} while (0)
70
71#define esp_log_msgout(f, a...) \
72do { if (esp_debug & ESP_DEBUG_MSGOUT) \
73 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
74} while (0)
75
76#define esp_log_cmddone(f, a...) \
77do { if (esp_debug & ESP_DEBUG_CMDDONE) \
78 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
79} while (0)
80
81#define esp_log_disconnect(f, a...) \
82do { if (esp_debug & ESP_DEBUG_DISCONNECT) \
83 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
84} while (0)
85
86#define esp_log_datastart(f, a...) \
87do { if (esp_debug & ESP_DEBUG_DATASTART) \
88 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
89} while (0)
90
91#define esp_log_datadone(f, a...) \
92do { if (esp_debug & ESP_DEBUG_DATADONE) \
93 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
94} while (0)
95
96#define esp_log_reconnect(f, a...) \
97do { if (esp_debug & ESP_DEBUG_RECONNECT) \
98 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
99} while (0)
100
101#define esp_log_autosense(f, a...) \
102do { if (esp_debug & ESP_DEBUG_AUTOSENSE) \
103 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
104} while (0)
105
106#define esp_log_event(f, a...) \
107do { if (esp_debug & ESP_DEBUG_EVENT) \
108 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
109} while (0)
110
111#define esp_log_command(f, a...) \
112do { if (esp_debug & ESP_DEBUG_COMMAND) \
113 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
114} while (0)
115
116#define esp_read8(REG) esp->ops->esp_read8(esp, REG)
117#define esp_write8(VAL,REG) esp->ops->esp_write8(esp, VAL, REG)
118
119static void esp_log_fill_regs(struct esp *esp,
120 struct esp_event_ent *p)
121{
122 p->sreg = esp->sreg;
123 p->seqreg = esp->seqreg;
124 p->sreg2 = esp->sreg2;
125 p->ireg = esp->ireg;
126 p->select_state = esp->select_state;
127 p->event = esp->event;
128}
129
130void scsi_esp_cmd(struct esp *esp, u8 val)
131{
132 struct esp_event_ent *p;
133 int idx = esp->esp_event_cur;
134
135 p = &esp->esp_event_log[idx];
136 p->type = ESP_EVENT_TYPE_CMD;
137 p->val = val;
138 esp_log_fill_regs(esp, p);
139
140 esp->esp_event_cur = (idx + 1) & (ESP_EVENT_LOG_SZ - 1);
141
142 esp_log_command("cmd[%02x]\n", val);
143 esp_write8(val, ESP_CMD);
144}
145EXPORT_SYMBOL(scsi_esp_cmd);
146
147static void esp_send_dma_cmd(struct esp *esp, int len, int max_len, int cmd)
148{
149 if (esp->flags & ESP_FLAG_USE_FIFO) {
150 int i;
151
152 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
153 for (i = 0; i < len; i++)
154 esp_write8(esp->command_block[i], ESP_FDATA);
155 scsi_esp_cmd(esp, cmd);
156 } else {
157 if (esp->rev == FASHME)
158 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
159 cmd |= ESP_CMD_DMA;
160 esp->ops->send_dma_cmd(esp, esp->command_block_dma,
161 len, max_len, 0, cmd);
162 }
163}
164
165static void esp_event(struct esp *esp, u8 val)
166{
167 struct esp_event_ent *p;
168 int idx = esp->esp_event_cur;
169
170 p = &esp->esp_event_log[idx];
171 p->type = ESP_EVENT_TYPE_EVENT;
172 p->val = val;
173 esp_log_fill_regs(esp, p);
174
175 esp->esp_event_cur = (idx + 1) & (ESP_EVENT_LOG_SZ - 1);
176
177 esp->event = val;
178}
179
180static void esp_dump_cmd_log(struct esp *esp)
181{
182 int idx = esp->esp_event_cur;
183 int stop = idx;
184
185 shost_printk(KERN_INFO, esp->host, "Dumping command log\n");
186 do {
187 struct esp_event_ent *p = &esp->esp_event_log[idx];
188
189 shost_printk(KERN_INFO, esp->host,
190 "ent[%d] %s val[%02x] sreg[%02x] seqreg[%02x] "
191 "sreg2[%02x] ireg[%02x] ss[%02x] event[%02x]\n",
192 idx,
193 p->type == ESP_EVENT_TYPE_CMD ? "CMD" : "EVENT",
194 p->val, p->sreg, p->seqreg,
195 p->sreg2, p->ireg, p->select_state, p->event);
196
197 idx = (idx + 1) & (ESP_EVENT_LOG_SZ - 1);
198 } while (idx != stop);
199}
200
201static void esp_flush_fifo(struct esp *esp)
202{
203 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
204 if (esp->rev == ESP236) {
205 int lim = 1000;
206
207 while (esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES) {
208 if (--lim == 0) {
209 shost_printk(KERN_ALERT, esp->host,
210 "ESP_FF_BYTES will not clear!\n");
211 break;
212 }
213 udelay(1);
214 }
215 }
216}
217
218static void hme_read_fifo(struct esp *esp)
219{
220 int fcnt = esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES;
221 int idx = 0;
222
223 while (fcnt--) {
224 esp->fifo[idx++] = esp_read8(ESP_FDATA);
225 esp->fifo[idx++] = esp_read8(ESP_FDATA);
226 }
227 if (esp->sreg2 & ESP_STAT2_F1BYTE) {
228 esp_write8(0, ESP_FDATA);
229 esp->fifo[idx++] = esp_read8(ESP_FDATA);
230 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
231 }
232 esp->fifo_cnt = idx;
233}
234
235static void esp_set_all_config3(struct esp *esp, u8 val)
236{
237 int i;
238
239 for (i = 0; i < ESP_MAX_TARGET; i++)
240 esp->target[i].esp_config3 = val;
241}
242
243/* Reset the ESP chip, _not_ the SCSI bus. */
244static void esp_reset_esp(struct esp *esp)
245{
246 /* Now reset the ESP chip */
247 scsi_esp_cmd(esp, ESP_CMD_RC);
248 scsi_esp_cmd(esp, ESP_CMD_NULL | ESP_CMD_DMA);
249 if (esp->rev == FAST)
250 esp_write8(ESP_CONFIG2_FENAB, ESP_CFG2);
251 scsi_esp_cmd(esp, ESP_CMD_NULL | ESP_CMD_DMA);
252
253 /* This is the only point at which it is reliable to read
254 * the ID-code for a fast ESP chip variants.
255 */
256 esp->max_period = ((35 * esp->ccycle) / 1000);
257 if (esp->rev == FAST) {
258 u8 family_code = ESP_FAMILY(esp_read8(ESP_UID));
259
260 if (family_code == ESP_UID_F236) {
261 esp->rev = FAS236;
262 } else if (family_code == ESP_UID_HME) {
263 esp->rev = FASHME; /* Version is usually '5'. */
264 } else if (family_code == ESP_UID_FSC) {
265 esp->rev = FSC;
266 /* Enable Active Negation */
267 esp_write8(ESP_CONFIG4_RADE, ESP_CFG4);
268 } else {
269 esp->rev = FAS100A;
270 }
271 esp->min_period = ((4 * esp->ccycle) / 1000);
272 } else {
273 esp->min_period = ((5 * esp->ccycle) / 1000);
274 }
275 if (esp->rev == FAS236) {
276 /*
277 * The AM53c974 chip returns the same ID as FAS236;
278 * try to configure glitch eater.
279 */
280 u8 config4 = ESP_CONFIG4_GE1;
281 esp_write8(config4, ESP_CFG4);
282 config4 = esp_read8(ESP_CFG4);
283 if (config4 & ESP_CONFIG4_GE1) {
284 esp->rev = PCSCSI;
285 esp_write8(esp->config4, ESP_CFG4);
286 }
287 }
288 esp->max_period = (esp->max_period + 3)>>2;
289 esp->min_period = (esp->min_period + 3)>>2;
290
291 esp_write8(esp->config1, ESP_CFG1);
292 switch (esp->rev) {
293 case ESP100:
294 /* nothing to do */
295 break;
296
297 case ESP100A:
298 esp_write8(esp->config2, ESP_CFG2);
299 break;
300
301 case ESP236:
302 /* Slow 236 */
303 esp_write8(esp->config2, ESP_CFG2);
304 esp->prev_cfg3 = esp->target[0].esp_config3;
305 esp_write8(esp->prev_cfg3, ESP_CFG3);
306 break;
307
308 case FASHME:
309 esp->config2 |= (ESP_CONFIG2_HME32 | ESP_CONFIG2_HMEFENAB);
310 fallthrough;
311
312 case FAS236:
313 case PCSCSI:
314 case FSC:
315 esp_write8(esp->config2, ESP_CFG2);
316 if (esp->rev == FASHME) {
317 u8 cfg3 = esp->target[0].esp_config3;
318
319 cfg3 |= ESP_CONFIG3_FCLOCK | ESP_CONFIG3_OBPUSH;
320 if (esp->scsi_id >= 8)
321 cfg3 |= ESP_CONFIG3_IDBIT3;
322 esp_set_all_config3(esp, cfg3);
323 } else {
324 u32 cfg3 = esp->target[0].esp_config3;
325
326 cfg3 |= ESP_CONFIG3_FCLK;
327 esp_set_all_config3(esp, cfg3);
328 }
329 esp->prev_cfg3 = esp->target[0].esp_config3;
330 esp_write8(esp->prev_cfg3, ESP_CFG3);
331 if (esp->rev == FASHME) {
332 esp->radelay = 80;
333 } else {
334 if (esp->flags & ESP_FLAG_DIFFERENTIAL)
335 esp->radelay = 0;
336 else
337 esp->radelay = 96;
338 }
339 break;
340
341 case FAS100A:
342 /* Fast 100a */
343 esp_write8(esp->config2, ESP_CFG2);
344 esp_set_all_config3(esp,
345 (esp->target[0].esp_config3 |
346 ESP_CONFIG3_FCLOCK));
347 esp->prev_cfg3 = esp->target[0].esp_config3;
348 esp_write8(esp->prev_cfg3, ESP_CFG3);
349 esp->radelay = 32;
350 break;
351
352 default:
353 break;
354 }
355
356 /* Reload the configuration registers */
357 esp_write8(esp->cfact, ESP_CFACT);
358
359 esp->prev_stp = 0;
360 esp_write8(esp->prev_stp, ESP_STP);
361
362 esp->prev_soff = 0;
363 esp_write8(esp->prev_soff, ESP_SOFF);
364
365 esp_write8(esp->neg_defp, ESP_TIMEO);
366
367 /* Eat any bitrot in the chip */
368 esp_read8(ESP_INTRPT);
369 udelay(100);
370}
371
372static void esp_map_dma(struct esp *esp, struct scsi_cmnd *cmd)
373{
374 struct esp_cmd_priv *spriv = ESP_CMD_PRIV(cmd);
375 struct scatterlist *sg = scsi_sglist(cmd);
376 int total = 0, i;
377 struct scatterlist *s;
378
379 if (cmd->sc_data_direction == DMA_NONE)
380 return;
381
382 if (esp->flags & ESP_FLAG_NO_DMA_MAP) {
383 /*
384 * For pseudo DMA and PIO we need the virtual address instead of
385 * a dma address, so perform an identity mapping.
386 */
387 spriv->num_sg = scsi_sg_count(cmd);
388
389 scsi_for_each_sg(cmd, s, spriv->num_sg, i) {
390 s->dma_address = (uintptr_t)sg_virt(s);
391 total += sg_dma_len(s);
392 }
393 } else {
394 spriv->num_sg = scsi_dma_map(cmd);
395 scsi_for_each_sg(cmd, s, spriv->num_sg, i)
396 total += sg_dma_len(s);
397 }
398 spriv->cur_residue = sg_dma_len(sg);
399 spriv->prv_sg = NULL;
400 spriv->cur_sg = sg;
401 spriv->tot_residue = total;
402}
403
404static dma_addr_t esp_cur_dma_addr(struct esp_cmd_entry *ent,
405 struct scsi_cmnd *cmd)
406{
407 struct esp_cmd_priv *p = ESP_CMD_PRIV(cmd);
408
409 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
410 return ent->sense_dma +
411 (ent->sense_ptr - cmd->sense_buffer);
412 }
413
414 return sg_dma_address(p->cur_sg) +
415 (sg_dma_len(p->cur_sg) -
416 p->cur_residue);
417}
418
419static unsigned int esp_cur_dma_len(struct esp_cmd_entry *ent,
420 struct scsi_cmnd *cmd)
421{
422 struct esp_cmd_priv *p = ESP_CMD_PRIV(cmd);
423
424 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
425 return SCSI_SENSE_BUFFERSIZE -
426 (ent->sense_ptr - cmd->sense_buffer);
427 }
428 return p->cur_residue;
429}
430
431static void esp_advance_dma(struct esp *esp, struct esp_cmd_entry *ent,
432 struct scsi_cmnd *cmd, unsigned int len)
433{
434 struct esp_cmd_priv *p = ESP_CMD_PRIV(cmd);
435
436 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
437 ent->sense_ptr += len;
438 return;
439 }
440
441 p->cur_residue -= len;
442 p->tot_residue -= len;
443 if (p->cur_residue < 0 || p->tot_residue < 0) {
444 shost_printk(KERN_ERR, esp->host,
445 "Data transfer overflow.\n");
446 shost_printk(KERN_ERR, esp->host,
447 "cur_residue[%d] tot_residue[%d] len[%u]\n",
448 p->cur_residue, p->tot_residue, len);
449 p->cur_residue = 0;
450 p->tot_residue = 0;
451 }
452 if (!p->cur_residue && p->tot_residue) {
453 p->prv_sg = p->cur_sg;
454 p->cur_sg = sg_next(p->cur_sg);
455 p->cur_residue = sg_dma_len(p->cur_sg);
456 }
457}
458
459static void esp_unmap_dma(struct esp *esp, struct scsi_cmnd *cmd)
460{
461 if (!(esp->flags & ESP_FLAG_NO_DMA_MAP))
462 scsi_dma_unmap(cmd);
463}
464
465static void esp_save_pointers(struct esp *esp, struct esp_cmd_entry *ent)
466{
467 struct scsi_cmnd *cmd = ent->cmd;
468 struct esp_cmd_priv *spriv = ESP_CMD_PRIV(cmd);
469
470 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
471 ent->saved_sense_ptr = ent->sense_ptr;
472 return;
473 }
474 ent->saved_cur_residue = spriv->cur_residue;
475 ent->saved_prv_sg = spriv->prv_sg;
476 ent->saved_cur_sg = spriv->cur_sg;
477 ent->saved_tot_residue = spriv->tot_residue;
478}
479
480static void esp_restore_pointers(struct esp *esp, struct esp_cmd_entry *ent)
481{
482 struct scsi_cmnd *cmd = ent->cmd;
483 struct esp_cmd_priv *spriv = ESP_CMD_PRIV(cmd);
484
485 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
486 ent->sense_ptr = ent->saved_sense_ptr;
487 return;
488 }
489 spriv->cur_residue = ent->saved_cur_residue;
490 spriv->prv_sg = ent->saved_prv_sg;
491 spriv->cur_sg = ent->saved_cur_sg;
492 spriv->tot_residue = ent->saved_tot_residue;
493}
494
495static void esp_write_tgt_config3(struct esp *esp, int tgt)
496{
497 if (esp->rev > ESP100A) {
498 u8 val = esp->target[tgt].esp_config3;
499
500 if (val != esp->prev_cfg3) {
501 esp->prev_cfg3 = val;
502 esp_write8(val, ESP_CFG3);
503 }
504 }
505}
506
507static void esp_write_tgt_sync(struct esp *esp, int tgt)
508{
509 u8 off = esp->target[tgt].esp_offset;
510 u8 per = esp->target[tgt].esp_period;
511
512 if (off != esp->prev_soff) {
513 esp->prev_soff = off;
514 esp_write8(off, ESP_SOFF);
515 }
516 if (per != esp->prev_stp) {
517 esp->prev_stp = per;
518 esp_write8(per, ESP_STP);
519 }
520}
521
522static u32 esp_dma_length_limit(struct esp *esp, u32 dma_addr, u32 dma_len)
523{
524 if (esp->rev == FASHME) {
525 /* Arbitrary segment boundaries, 24-bit counts. */
526 if (dma_len > (1U << 24))
527 dma_len = (1U << 24);
528 } else {
529 u32 base, end;
530
531 /* ESP chip limits other variants by 16-bits of transfer
532 * count. Actually on FAS100A and FAS236 we could get
533 * 24-bits of transfer count by enabling ESP_CONFIG2_FENAB
534 * in the ESP_CFG2 register but that causes other unwanted
535 * changes so we don't use it currently.
536 */
537 if (dma_len > (1U << 16))
538 dma_len = (1U << 16);
539
540 /* All of the DMA variants hooked up to these chips
541 * cannot handle crossing a 24-bit address boundary.
542 */
543 base = dma_addr & ((1U << 24) - 1U);
544 end = base + dma_len;
545 if (end > (1U << 24))
546 end = (1U <<24);
547 dma_len = end - base;
548 }
549 return dma_len;
550}
551
552static int esp_need_to_nego_wide(struct esp_target_data *tp)
553{
554 struct scsi_target *target = tp->starget;
555
556 return spi_width(target) != tp->nego_goal_width;
557}
558
559static int esp_need_to_nego_sync(struct esp_target_data *tp)
560{
561 struct scsi_target *target = tp->starget;
562
563 /* When offset is zero, period is "don't care". */
564 if (!spi_offset(target) && !tp->nego_goal_offset)
565 return 0;
566
567 if (spi_offset(target) == tp->nego_goal_offset &&
568 spi_period(target) == tp->nego_goal_period)
569 return 0;
570
571 return 1;
572}
573
574static int esp_alloc_lun_tag(struct esp_cmd_entry *ent,
575 struct esp_lun_data *lp)
576{
577 if (!ent->orig_tag[0]) {
578 /* Non-tagged, slot already taken? */
579 if (lp->non_tagged_cmd)
580 return -EBUSY;
581
582 if (lp->hold) {
583 /* We are being held by active tagged
584 * commands.
585 */
586 if (lp->num_tagged)
587 return -EBUSY;
588
589 /* Tagged commands completed, we can unplug
590 * the queue and run this untagged command.
591 */
592 lp->hold = 0;
593 } else if (lp->num_tagged) {
594 /* Plug the queue until num_tagged decreases
595 * to zero in esp_free_lun_tag.
596 */
597 lp->hold = 1;
598 return -EBUSY;
599 }
600
601 lp->non_tagged_cmd = ent;
602 return 0;
603 }
604
605 /* Tagged command. Check that it isn't blocked by a non-tagged one. */
606 if (lp->non_tagged_cmd || lp->hold)
607 return -EBUSY;
608
609 BUG_ON(lp->tagged_cmds[ent->orig_tag[1]]);
610
611 lp->tagged_cmds[ent->orig_tag[1]] = ent;
612 lp->num_tagged++;
613
614 return 0;
615}
616
617static void esp_free_lun_tag(struct esp_cmd_entry *ent,
618 struct esp_lun_data *lp)
619{
620 if (ent->orig_tag[0]) {
621 BUG_ON(lp->tagged_cmds[ent->orig_tag[1]] != ent);
622 lp->tagged_cmds[ent->orig_tag[1]] = NULL;
623 lp->num_tagged--;
624 } else {
625 BUG_ON(lp->non_tagged_cmd != ent);
626 lp->non_tagged_cmd = NULL;
627 }
628}
629
630static void esp_map_sense(struct esp *esp, struct esp_cmd_entry *ent)
631{
632 ent->sense_ptr = ent->cmd->sense_buffer;
633 if (esp->flags & ESP_FLAG_NO_DMA_MAP) {
634 ent->sense_dma = (uintptr_t)ent->sense_ptr;
635 return;
636 }
637
638 ent->sense_dma = dma_map_single(esp->dev, ent->sense_ptr,
639 SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
640}
641
642static void esp_unmap_sense(struct esp *esp, struct esp_cmd_entry *ent)
643{
644 if (!(esp->flags & ESP_FLAG_NO_DMA_MAP))
645 dma_unmap_single(esp->dev, ent->sense_dma,
646 SCSI_SENSE_BUFFERSIZE, DMA_FROM_DEVICE);
647 ent->sense_ptr = NULL;
648}
649
650/* When a contingent allegiance conditon is created, we force feed a
651 * REQUEST_SENSE command to the device to fetch the sense data. I
652 * tried many other schemes, relying on the scsi error handling layer
653 * to send out the REQUEST_SENSE automatically, but this was difficult
654 * to get right especially in the presence of applications like smartd
655 * which use SG_IO to send out their own REQUEST_SENSE commands.
656 */
657static void esp_autosense(struct esp *esp, struct esp_cmd_entry *ent)
658{
659 struct scsi_cmnd *cmd = ent->cmd;
660 struct scsi_device *dev = cmd->device;
661 int tgt, lun;
662 u8 *p, val;
663
664 tgt = dev->id;
665 lun = dev->lun;
666
667
668 if (!ent->sense_ptr) {
669 esp_log_autosense("Doing auto-sense for tgt[%d] lun[%d]\n",
670 tgt, lun);
671 esp_map_sense(esp, ent);
672 }
673 ent->saved_sense_ptr = ent->sense_ptr;
674
675 esp->active_cmd = ent;
676
677 p = esp->command_block;
678 esp->msg_out_len = 0;
679
680 *p++ = IDENTIFY(0, lun);
681 *p++ = REQUEST_SENSE;
682 *p++ = ((dev->scsi_level <= SCSI_2) ?
683 (lun << 5) : 0);
684 *p++ = 0;
685 *p++ = 0;
686 *p++ = SCSI_SENSE_BUFFERSIZE;
687 *p++ = 0;
688
689 esp->select_state = ESP_SELECT_BASIC;
690
691 val = tgt;
692 if (esp->rev == FASHME)
693 val |= ESP_BUSID_RESELID | ESP_BUSID_CTR32BIT;
694 esp_write8(val, ESP_BUSID);
695
696 esp_write_tgt_sync(esp, tgt);
697 esp_write_tgt_config3(esp, tgt);
698
699 val = (p - esp->command_block);
700
701 esp_send_dma_cmd(esp, val, 16, ESP_CMD_SELA);
702}
703
704static struct esp_cmd_entry *find_and_prep_issuable_command(struct esp *esp)
705{
706 struct esp_cmd_entry *ent;
707
708 list_for_each_entry(ent, &esp->queued_cmds, list) {
709 struct scsi_cmnd *cmd = ent->cmd;
710 struct scsi_device *dev = cmd->device;
711 struct esp_lun_data *lp = dev->hostdata;
712
713 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
714 ent->tag[0] = 0;
715 ent->tag[1] = 0;
716 return ent;
717 }
718
719 if (!spi_populate_tag_msg(&ent->tag[0], cmd)) {
720 ent->tag[0] = 0;
721 ent->tag[1] = 0;
722 }
723 ent->orig_tag[0] = ent->tag[0];
724 ent->orig_tag[1] = ent->tag[1];
725
726 if (esp_alloc_lun_tag(ent, lp) < 0)
727 continue;
728
729 return ent;
730 }
731
732 return NULL;
733}
734
735static void esp_maybe_execute_command(struct esp *esp)
736{
737 struct esp_target_data *tp;
738 struct scsi_device *dev;
739 struct scsi_cmnd *cmd;
740 struct esp_cmd_entry *ent;
741 bool select_and_stop = false;
742 int tgt, lun, i;
743 u32 val, start_cmd;
744 u8 *p;
745
746 if (esp->active_cmd ||
747 (esp->flags & ESP_FLAG_RESETTING))
748 return;
749
750 ent = find_and_prep_issuable_command(esp);
751 if (!ent)
752 return;
753
754 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
755 esp_autosense(esp, ent);
756 return;
757 }
758
759 cmd = ent->cmd;
760 dev = cmd->device;
761 tgt = dev->id;
762 lun = dev->lun;
763 tp = &esp->target[tgt];
764
765 list_move(&ent->list, &esp->active_cmds);
766
767 esp->active_cmd = ent;
768
769 esp_map_dma(esp, cmd);
770 esp_save_pointers(esp, ent);
771
772 if (!(cmd->cmd_len == 6 || cmd->cmd_len == 10 || cmd->cmd_len == 12))
773 select_and_stop = true;
774
775 p = esp->command_block;
776
777 esp->msg_out_len = 0;
778 if (tp->flags & ESP_TGT_CHECK_NEGO) {
779 /* Need to negotiate. If the target is broken
780 * go for synchronous transfers and non-wide.
781 */
782 if (tp->flags & ESP_TGT_BROKEN) {
783 tp->flags &= ~ESP_TGT_DISCONNECT;
784 tp->nego_goal_period = 0;
785 tp->nego_goal_offset = 0;
786 tp->nego_goal_width = 0;
787 tp->nego_goal_tags = 0;
788 }
789
790 /* If the settings are not changing, skip this. */
791 if (spi_width(tp->starget) == tp->nego_goal_width &&
792 spi_period(tp->starget) == tp->nego_goal_period &&
793 spi_offset(tp->starget) == tp->nego_goal_offset) {
794 tp->flags &= ~ESP_TGT_CHECK_NEGO;
795 goto build_identify;
796 }
797
798 if (esp->rev == FASHME && esp_need_to_nego_wide(tp)) {
799 esp->msg_out_len =
800 spi_populate_width_msg(&esp->msg_out[0],
801 (tp->nego_goal_width ?
802 1 : 0));
803 tp->flags |= ESP_TGT_NEGO_WIDE;
804 } else if (esp_need_to_nego_sync(tp)) {
805 esp->msg_out_len =
806 spi_populate_sync_msg(&esp->msg_out[0],
807 tp->nego_goal_period,
808 tp->nego_goal_offset);
809 tp->flags |= ESP_TGT_NEGO_SYNC;
810 } else {
811 tp->flags &= ~ESP_TGT_CHECK_NEGO;
812 }
813
814 /* If there are multiple message bytes, use Select and Stop */
815 if (esp->msg_out_len)
816 select_and_stop = true;
817 }
818
819build_identify:
820 *p++ = IDENTIFY(tp->flags & ESP_TGT_DISCONNECT, lun);
821
822 if (ent->tag[0] && esp->rev == ESP100) {
823 /* ESP100 lacks select w/atn3 command, use select
824 * and stop instead.
825 */
826 select_and_stop = true;
827 }
828
829 if (select_and_stop) {
830 esp->cmd_bytes_left = cmd->cmd_len;
831 esp->cmd_bytes_ptr = &cmd->cmnd[0];
832
833 if (ent->tag[0]) {
834 for (i = esp->msg_out_len - 1;
835 i >= 0; i--)
836 esp->msg_out[i + 2] = esp->msg_out[i];
837 esp->msg_out[0] = ent->tag[0];
838 esp->msg_out[1] = ent->tag[1];
839 esp->msg_out_len += 2;
840 }
841
842 start_cmd = ESP_CMD_SELAS;
843 esp->select_state = ESP_SELECT_MSGOUT;
844 } else {
845 start_cmd = ESP_CMD_SELA;
846 if (ent->tag[0]) {
847 *p++ = ent->tag[0];
848 *p++ = ent->tag[1];
849
850 start_cmd = ESP_CMD_SA3;
851 }
852
853 for (i = 0; i < cmd->cmd_len; i++)
854 *p++ = cmd->cmnd[i];
855
856 esp->select_state = ESP_SELECT_BASIC;
857 }
858 val = tgt;
859 if (esp->rev == FASHME)
860 val |= ESP_BUSID_RESELID | ESP_BUSID_CTR32BIT;
861 esp_write8(val, ESP_BUSID);
862
863 esp_write_tgt_sync(esp, tgt);
864 esp_write_tgt_config3(esp, tgt);
865
866 val = (p - esp->command_block);
867
868 if (esp_debug & ESP_DEBUG_SCSICMD) {
869 printk("ESP: tgt[%d] lun[%d] scsi_cmd [ ", tgt, lun);
870 for (i = 0; i < cmd->cmd_len; i++)
871 printk("%02x ", cmd->cmnd[i]);
872 printk("]\n");
873 }
874
875 esp_send_dma_cmd(esp, val, 16, start_cmd);
876}
877
878static struct esp_cmd_entry *esp_get_ent(struct esp *esp)
879{
880 struct list_head *head = &esp->esp_cmd_pool;
881 struct esp_cmd_entry *ret;
882
883 if (list_empty(head)) {
884 ret = kzalloc(sizeof(struct esp_cmd_entry), GFP_ATOMIC);
885 } else {
886 ret = list_entry(head->next, struct esp_cmd_entry, list);
887 list_del(&ret->list);
888 memset(ret, 0, sizeof(*ret));
889 }
890 return ret;
891}
892
893static void esp_put_ent(struct esp *esp, struct esp_cmd_entry *ent)
894{
895 list_add(&ent->list, &esp->esp_cmd_pool);
896}
897
898static void esp_cmd_is_done(struct esp *esp, struct esp_cmd_entry *ent,
899 struct scsi_cmnd *cmd, unsigned int result)
900{
901 struct scsi_device *dev = cmd->device;
902 int tgt = dev->id;
903 int lun = dev->lun;
904
905 esp->active_cmd = NULL;
906 esp_unmap_dma(esp, cmd);
907 esp_free_lun_tag(ent, dev->hostdata);
908 cmd->result = result;
909
910 if (ent->eh_done) {
911 complete(ent->eh_done);
912 ent->eh_done = NULL;
913 }
914
915 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
916 esp_unmap_sense(esp, ent);
917
918 /* Restore the message/status bytes to what we actually
919 * saw originally. Also, report that we are providing
920 * the sense data.
921 */
922 cmd->result = ((DRIVER_SENSE << 24) |
923 (DID_OK << 16) |
924 (COMMAND_COMPLETE << 8) |
925 (SAM_STAT_CHECK_CONDITION << 0));
926
927 ent->flags &= ~ESP_CMD_FLAG_AUTOSENSE;
928 if (esp_debug & ESP_DEBUG_AUTOSENSE) {
929 int i;
930
931 printk("esp%d: tgt[%d] lun[%d] AUTO SENSE[ ",
932 esp->host->unique_id, tgt, lun);
933 for (i = 0; i < 18; i++)
934 printk("%02x ", cmd->sense_buffer[i]);
935 printk("]\n");
936 }
937 }
938
939 cmd->scsi_done(cmd);
940
941 list_del(&ent->list);
942 esp_put_ent(esp, ent);
943
944 esp_maybe_execute_command(esp);
945}
946
947static unsigned int compose_result(unsigned int status, unsigned int message,
948 unsigned int driver_code)
949{
950 return (status | (message << 8) | (driver_code << 16));
951}
952
953static void esp_event_queue_full(struct esp *esp, struct esp_cmd_entry *ent)
954{
955 struct scsi_device *dev = ent->cmd->device;
956 struct esp_lun_data *lp = dev->hostdata;
957
958 scsi_track_queue_full(dev, lp->num_tagged - 1);
959}
960
961static int esp_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
962{
963 struct scsi_device *dev = cmd->device;
964 struct esp *esp = shost_priv(dev->host);
965 struct esp_cmd_priv *spriv;
966 struct esp_cmd_entry *ent;
967
968 ent = esp_get_ent(esp);
969 if (!ent)
970 return SCSI_MLQUEUE_HOST_BUSY;
971
972 ent->cmd = cmd;
973
974 cmd->scsi_done = done;
975
976 spriv = ESP_CMD_PRIV(cmd);
977 spriv->num_sg = 0;
978
979 list_add_tail(&ent->list, &esp->queued_cmds);
980
981 esp_maybe_execute_command(esp);
982
983 return 0;
984}
985
986static DEF_SCSI_QCMD(esp_queuecommand)
987
988static int esp_check_gross_error(struct esp *esp)
989{
990 if (esp->sreg & ESP_STAT_SPAM) {
991 /* Gross Error, could be one of:
992 * - top of fifo overwritten
993 * - top of command register overwritten
994 * - DMA programmed with wrong direction
995 * - improper phase change
996 */
997 shost_printk(KERN_ERR, esp->host,
998 "Gross error sreg[%02x]\n", esp->sreg);
999 /* XXX Reset the chip. XXX */
1000 return 1;
1001 }
1002 return 0;
1003}
1004
1005static int esp_check_spur_intr(struct esp *esp)
1006{
1007 switch (esp->rev) {
1008 case ESP100:
1009 case ESP100A:
1010 /* The interrupt pending bit of the status register cannot
1011 * be trusted on these revisions.
1012 */
1013 esp->sreg &= ~ESP_STAT_INTR;
1014 break;
1015
1016 default:
1017 if (!(esp->sreg & ESP_STAT_INTR)) {
1018 if (esp->ireg & ESP_INTR_SR)
1019 return 1;
1020
1021 /* If the DMA is indicating interrupt pending and the
1022 * ESP is not, the only possibility is a DMA error.
1023 */
1024 if (!esp->ops->dma_error(esp)) {
1025 shost_printk(KERN_ERR, esp->host,
1026 "Spurious irq, sreg=%02x.\n",
1027 esp->sreg);
1028 return -1;
1029 }
1030
1031 shost_printk(KERN_ERR, esp->host, "DMA error\n");
1032
1033 /* XXX Reset the chip. XXX */
1034 return -1;
1035 }
1036 break;
1037 }
1038
1039 return 0;
1040}
1041
1042static void esp_schedule_reset(struct esp *esp)
1043{
1044 esp_log_reset("esp_schedule_reset() from %ps\n",
1045 __builtin_return_address(0));
1046 esp->flags |= ESP_FLAG_RESETTING;
1047 esp_event(esp, ESP_EVENT_RESET);
1048}
1049
1050/* In order to avoid having to add a special half-reconnected state
1051 * into the driver we just sit here and poll through the rest of
1052 * the reselection process to get the tag message bytes.
1053 */
1054static struct esp_cmd_entry *esp_reconnect_with_tag(struct esp *esp,
1055 struct esp_lun_data *lp)
1056{
1057 struct esp_cmd_entry *ent;
1058 int i;
1059
1060 if (!lp->num_tagged) {
1061 shost_printk(KERN_ERR, esp->host,
1062 "Reconnect w/num_tagged==0\n");
1063 return NULL;
1064 }
1065
1066 esp_log_reconnect("reconnect tag, ");
1067
1068 for (i = 0; i < ESP_QUICKIRQ_LIMIT; i++) {
1069 if (esp->ops->irq_pending(esp))
1070 break;
1071 }
1072 if (i == ESP_QUICKIRQ_LIMIT) {
1073 shost_printk(KERN_ERR, esp->host,
1074 "Reconnect IRQ1 timeout\n");
1075 return NULL;
1076 }
1077
1078 esp->sreg = esp_read8(ESP_STATUS);
1079 esp->ireg = esp_read8(ESP_INTRPT);
1080
1081 esp_log_reconnect("IRQ(%d:%x:%x), ",
1082 i, esp->ireg, esp->sreg);
1083
1084 if (esp->ireg & ESP_INTR_DC) {
1085 shost_printk(KERN_ERR, esp->host,
1086 "Reconnect, got disconnect.\n");
1087 return NULL;
1088 }
1089
1090 if ((esp->sreg & ESP_STAT_PMASK) != ESP_MIP) {
1091 shost_printk(KERN_ERR, esp->host,
1092 "Reconnect, not MIP sreg[%02x].\n", esp->sreg);
1093 return NULL;
1094 }
1095
1096 /* DMA in the tag bytes... */
1097 esp->command_block[0] = 0xff;
1098 esp->command_block[1] = 0xff;
1099 esp->ops->send_dma_cmd(esp, esp->command_block_dma,
1100 2, 2, 1, ESP_CMD_DMA | ESP_CMD_TI);
1101
1102 /* ACK the message. */
1103 scsi_esp_cmd(esp, ESP_CMD_MOK);
1104
1105 for (i = 0; i < ESP_RESELECT_TAG_LIMIT; i++) {
1106 if (esp->ops->irq_pending(esp)) {
1107 esp->sreg = esp_read8(ESP_STATUS);
1108 esp->ireg = esp_read8(ESP_INTRPT);
1109 if (esp->ireg & ESP_INTR_FDONE)
1110 break;
1111 }
1112 udelay(1);
1113 }
1114 if (i == ESP_RESELECT_TAG_LIMIT) {
1115 shost_printk(KERN_ERR, esp->host, "Reconnect IRQ2 timeout\n");
1116 return NULL;
1117 }
1118 esp->ops->dma_drain(esp);
1119 esp->ops->dma_invalidate(esp);
1120
1121 esp_log_reconnect("IRQ2(%d:%x:%x) tag[%x:%x]\n",
1122 i, esp->ireg, esp->sreg,
1123 esp->command_block[0],
1124 esp->command_block[1]);
1125
1126 if (esp->command_block[0] < SIMPLE_QUEUE_TAG ||
1127 esp->command_block[0] > ORDERED_QUEUE_TAG) {
1128 shost_printk(KERN_ERR, esp->host,
1129 "Reconnect, bad tag type %02x.\n",
1130 esp->command_block[0]);
1131 return NULL;
1132 }
1133
1134 ent = lp->tagged_cmds[esp->command_block[1]];
1135 if (!ent) {
1136 shost_printk(KERN_ERR, esp->host,
1137 "Reconnect, no entry for tag %02x.\n",
1138 esp->command_block[1]);
1139 return NULL;
1140 }
1141
1142 return ent;
1143}
1144
1145static int esp_reconnect(struct esp *esp)
1146{
1147 struct esp_cmd_entry *ent;
1148 struct esp_target_data *tp;
1149 struct esp_lun_data *lp;
1150 struct scsi_device *dev;
1151 int target, lun;
1152
1153 BUG_ON(esp->active_cmd);
1154 if (esp->rev == FASHME) {
1155 /* FASHME puts the target and lun numbers directly
1156 * into the fifo.
1157 */
1158 target = esp->fifo[0];
1159 lun = esp->fifo[1] & 0x7;
1160 } else {
1161 u8 bits = esp_read8(ESP_FDATA);
1162
1163 /* Older chips put the lun directly into the fifo, but
1164 * the target is given as a sample of the arbitration
1165 * lines on the bus at reselection time. So we should
1166 * see the ID of the ESP and the one reconnecting target
1167 * set in the bitmap.
1168 */
1169 if (!(bits & esp->scsi_id_mask))
1170 goto do_reset;
1171 bits &= ~esp->scsi_id_mask;
1172 if (!bits || (bits & (bits - 1)))
1173 goto do_reset;
1174
1175 target = ffs(bits) - 1;
1176 lun = (esp_read8(ESP_FDATA) & 0x7);
1177
1178 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1179 if (esp->rev == ESP100) {
1180 u8 ireg = esp_read8(ESP_INTRPT);
1181 /* This chip has a bug during reselection that can
1182 * cause a spurious illegal-command interrupt, which
1183 * we simply ACK here. Another possibility is a bus
1184 * reset so we must check for that.
1185 */
1186 if (ireg & ESP_INTR_SR)
1187 goto do_reset;
1188 }
1189 scsi_esp_cmd(esp, ESP_CMD_NULL);
1190 }
1191
1192 esp_write_tgt_sync(esp, target);
1193 esp_write_tgt_config3(esp, target);
1194
1195 scsi_esp_cmd(esp, ESP_CMD_MOK);
1196
1197 if (esp->rev == FASHME)
1198 esp_write8(target | ESP_BUSID_RESELID | ESP_BUSID_CTR32BIT,
1199 ESP_BUSID);
1200
1201 tp = &esp->target[target];
1202 dev = __scsi_device_lookup_by_target(tp->starget, lun);
1203 if (!dev) {
1204 shost_printk(KERN_ERR, esp->host,
1205 "Reconnect, no lp tgt[%u] lun[%u]\n",
1206 target, lun);
1207 goto do_reset;
1208 }
1209 lp = dev->hostdata;
1210
1211 ent = lp->non_tagged_cmd;
1212 if (!ent) {
1213 ent = esp_reconnect_with_tag(esp, lp);
1214 if (!ent)
1215 goto do_reset;
1216 }
1217
1218 esp->active_cmd = ent;
1219
1220 esp_event(esp, ESP_EVENT_CHECK_PHASE);
1221 esp_restore_pointers(esp, ent);
1222 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1223 return 1;
1224
1225do_reset:
1226 esp_schedule_reset(esp);
1227 return 0;
1228}
1229
1230static int esp_finish_select(struct esp *esp)
1231{
1232 struct esp_cmd_entry *ent;
1233 struct scsi_cmnd *cmd;
1234
1235 /* No longer selecting. */
1236 esp->select_state = ESP_SELECT_NONE;
1237
1238 esp->seqreg = esp_read8(ESP_SSTEP) & ESP_STEP_VBITS;
1239 ent = esp->active_cmd;
1240 cmd = ent->cmd;
1241
1242 if (esp->ops->dma_error(esp)) {
1243 /* If we see a DMA error during or as a result of selection,
1244 * all bets are off.
1245 */
1246 esp_schedule_reset(esp);
1247 esp_cmd_is_done(esp, ent, cmd, (DID_ERROR << 16));
1248 return 0;
1249 }
1250
1251 esp->ops->dma_invalidate(esp);
1252
1253 if (esp->ireg == (ESP_INTR_RSEL | ESP_INTR_FDONE)) {
1254 struct esp_target_data *tp = &esp->target[cmd->device->id];
1255
1256 /* Carefully back out of the selection attempt. Release
1257 * resources (such as DMA mapping & TAG) and reset state (such
1258 * as message out and command delivery variables).
1259 */
1260 if (!(ent->flags & ESP_CMD_FLAG_AUTOSENSE)) {
1261 esp_unmap_dma(esp, cmd);
1262 esp_free_lun_tag(ent, cmd->device->hostdata);
1263 tp->flags &= ~(ESP_TGT_NEGO_SYNC | ESP_TGT_NEGO_WIDE);
1264 esp->cmd_bytes_ptr = NULL;
1265 esp->cmd_bytes_left = 0;
1266 } else {
1267 esp_unmap_sense(esp, ent);
1268 }
1269
1270 /* Now that the state is unwound properly, put back onto
1271 * the issue queue. This command is no longer active.
1272 */
1273 list_move(&ent->list, &esp->queued_cmds);
1274 esp->active_cmd = NULL;
1275
1276 /* Return value ignored by caller, it directly invokes
1277 * esp_reconnect().
1278 */
1279 return 0;
1280 }
1281
1282 if (esp->ireg == ESP_INTR_DC) {
1283 struct scsi_device *dev = cmd->device;
1284
1285 /* Disconnect. Make sure we re-negotiate sync and
1286 * wide parameters if this target starts responding
1287 * again in the future.
1288 */
1289 esp->target[dev->id].flags |= ESP_TGT_CHECK_NEGO;
1290
1291 scsi_esp_cmd(esp, ESP_CMD_ESEL);
1292 esp_cmd_is_done(esp, ent, cmd, (DID_BAD_TARGET << 16));
1293 return 1;
1294 }
1295
1296 if (esp->ireg == (ESP_INTR_FDONE | ESP_INTR_BSERV)) {
1297 /* Selection successful. On pre-FAST chips we have
1298 * to do a NOP and possibly clean out the FIFO.
1299 */
1300 if (esp->rev <= ESP236) {
1301 int fcnt = esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES;
1302
1303 scsi_esp_cmd(esp, ESP_CMD_NULL);
1304
1305 if (!fcnt &&
1306 (!esp->prev_soff ||
1307 ((esp->sreg & ESP_STAT_PMASK) != ESP_DIP)))
1308 esp_flush_fifo(esp);
1309 }
1310
1311 /* If we are doing a Select And Stop command, negotiation, etc.
1312 * we'll do the right thing as we transition to the next phase.
1313 */
1314 esp_event(esp, ESP_EVENT_CHECK_PHASE);
1315 return 0;
1316 }
1317
1318 shost_printk(KERN_INFO, esp->host,
1319 "Unexpected selection completion ireg[%x]\n", esp->ireg);
1320 esp_schedule_reset(esp);
1321 return 0;
1322}
1323
1324static int esp_data_bytes_sent(struct esp *esp, struct esp_cmd_entry *ent,
1325 struct scsi_cmnd *cmd)
1326{
1327 int fifo_cnt, ecount, bytes_sent, flush_fifo;
1328
1329 fifo_cnt = esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES;
1330 if (esp->prev_cfg3 & ESP_CONFIG3_EWIDE)
1331 fifo_cnt <<= 1;
1332
1333 ecount = 0;
1334 if (!(esp->sreg & ESP_STAT_TCNT)) {
1335 ecount = ((unsigned int)esp_read8(ESP_TCLOW) |
1336 (((unsigned int)esp_read8(ESP_TCMED)) << 8));
1337 if (esp->rev == FASHME)
1338 ecount |= ((unsigned int)esp_read8(FAS_RLO)) << 16;
1339 if (esp->rev == PCSCSI && (esp->config2 & ESP_CONFIG2_FENAB))
1340 ecount |= ((unsigned int)esp_read8(ESP_TCHI)) << 16;
1341 }
1342
1343 bytes_sent = esp->data_dma_len;
1344 bytes_sent -= ecount;
1345 bytes_sent -= esp->send_cmd_residual;
1346
1347 /*
1348 * The am53c974 has a DMA 'pecularity'. The doc states:
1349 * In some odd byte conditions, one residual byte will
1350 * be left in the SCSI FIFO, and the FIFO Flags will
1351 * never count to '0 '. When this happens, the residual
1352 * byte should be retrieved via PIO following completion
1353 * of the BLAST operation.
1354 */
1355 if (fifo_cnt == 1 && ent->flags & ESP_CMD_FLAG_RESIDUAL) {
1356 size_t count = 1;
1357 size_t offset = bytes_sent;
1358 u8 bval = esp_read8(ESP_FDATA);
1359
1360 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE)
1361 ent->sense_ptr[bytes_sent] = bval;
1362 else {
1363 struct esp_cmd_priv *p = ESP_CMD_PRIV(cmd);
1364 u8 *ptr;
1365
1366 ptr = scsi_kmap_atomic_sg(p->cur_sg, p->num_sg,
1367 &offset, &count);
1368 if (likely(ptr)) {
1369 *(ptr + offset) = bval;
1370 scsi_kunmap_atomic_sg(ptr);
1371 }
1372 }
1373 bytes_sent += fifo_cnt;
1374 ent->flags &= ~ESP_CMD_FLAG_RESIDUAL;
1375 }
1376 if (!(ent->flags & ESP_CMD_FLAG_WRITE))
1377 bytes_sent -= fifo_cnt;
1378
1379 flush_fifo = 0;
1380 if (!esp->prev_soff) {
1381 /* Synchronous data transfer, always flush fifo. */
1382 flush_fifo = 1;
1383 } else {
1384 if (esp->rev == ESP100) {
1385 u32 fflags, phase;
1386
1387 /* ESP100 has a chip bug where in the synchronous data
1388 * phase it can mistake a final long REQ pulse from the
1389 * target as an extra data byte. Fun.
1390 *
1391 * To detect this case we resample the status register
1392 * and fifo flags. If we're still in a data phase and
1393 * we see spurious chunks in the fifo, we return error
1394 * to the caller which should reset and set things up
1395 * such that we only try future transfers to this
1396 * target in synchronous mode.
1397 */
1398 esp->sreg = esp_read8(ESP_STATUS);
1399 phase = esp->sreg & ESP_STAT_PMASK;
1400 fflags = esp_read8(ESP_FFLAGS);
1401
1402 if ((phase == ESP_DOP &&
1403 (fflags & ESP_FF_ONOTZERO)) ||
1404 (phase == ESP_DIP &&
1405 (fflags & ESP_FF_FBYTES)))
1406 return -1;
1407 }
1408 if (!(ent->flags & ESP_CMD_FLAG_WRITE))
1409 flush_fifo = 1;
1410 }
1411
1412 if (flush_fifo)
1413 esp_flush_fifo(esp);
1414
1415 return bytes_sent;
1416}
1417
1418static void esp_setsync(struct esp *esp, struct esp_target_data *tp,
1419 u8 scsi_period, u8 scsi_offset,
1420 u8 esp_stp, u8 esp_soff)
1421{
1422 spi_period(tp->starget) = scsi_period;
1423 spi_offset(tp->starget) = scsi_offset;
1424 spi_width(tp->starget) = (tp->flags & ESP_TGT_WIDE) ? 1 : 0;
1425
1426 if (esp_soff) {
1427 esp_stp &= 0x1f;
1428 esp_soff |= esp->radelay;
1429 if (esp->rev >= FAS236) {
1430 u8 bit = ESP_CONFIG3_FSCSI;
1431 if (esp->rev >= FAS100A)
1432 bit = ESP_CONFIG3_FAST;
1433
1434 if (scsi_period < 50) {
1435 if (esp->rev == FASHME)
1436 esp_soff &= ~esp->radelay;
1437 tp->esp_config3 |= bit;
1438 } else {
1439 tp->esp_config3 &= ~bit;
1440 }
1441 esp->prev_cfg3 = tp->esp_config3;
1442 esp_write8(esp->prev_cfg3, ESP_CFG3);
1443 }
1444 }
1445
1446 tp->esp_period = esp->prev_stp = esp_stp;
1447 tp->esp_offset = esp->prev_soff = esp_soff;
1448
1449 esp_write8(esp_soff, ESP_SOFF);
1450 esp_write8(esp_stp, ESP_STP);
1451
1452 tp->flags &= ~(ESP_TGT_NEGO_SYNC | ESP_TGT_CHECK_NEGO);
1453
1454 spi_display_xfer_agreement(tp->starget);
1455}
1456
1457static void esp_msgin_reject(struct esp *esp)
1458{
1459 struct esp_cmd_entry *ent = esp->active_cmd;
1460 struct scsi_cmnd *cmd = ent->cmd;
1461 struct esp_target_data *tp;
1462 int tgt;
1463
1464 tgt = cmd->device->id;
1465 tp = &esp->target[tgt];
1466
1467 if (tp->flags & ESP_TGT_NEGO_WIDE) {
1468 tp->flags &= ~(ESP_TGT_NEGO_WIDE | ESP_TGT_WIDE);
1469
1470 if (!esp_need_to_nego_sync(tp)) {
1471 tp->flags &= ~ESP_TGT_CHECK_NEGO;
1472 scsi_esp_cmd(esp, ESP_CMD_RATN);
1473 } else {
1474 esp->msg_out_len =
1475 spi_populate_sync_msg(&esp->msg_out[0],
1476 tp->nego_goal_period,
1477 tp->nego_goal_offset);
1478 tp->flags |= ESP_TGT_NEGO_SYNC;
1479 scsi_esp_cmd(esp, ESP_CMD_SATN);
1480 }
1481 return;
1482 }
1483
1484 if (tp->flags & ESP_TGT_NEGO_SYNC) {
1485 tp->flags &= ~(ESP_TGT_NEGO_SYNC | ESP_TGT_CHECK_NEGO);
1486 tp->esp_period = 0;
1487 tp->esp_offset = 0;
1488 esp_setsync(esp, tp, 0, 0, 0, 0);
1489 scsi_esp_cmd(esp, ESP_CMD_RATN);
1490 return;
1491 }
1492
1493 shost_printk(KERN_INFO, esp->host, "Unexpected MESSAGE REJECT\n");
1494 esp_schedule_reset(esp);
1495}
1496
1497static void esp_msgin_sdtr(struct esp *esp, struct esp_target_data *tp)
1498{
1499 u8 period = esp->msg_in[3];
1500 u8 offset = esp->msg_in[4];
1501 u8 stp;
1502
1503 if (!(tp->flags & ESP_TGT_NEGO_SYNC))
1504 goto do_reject;
1505
1506 if (offset > 15)
1507 goto do_reject;
1508
1509 if (offset) {
1510 int one_clock;
1511
1512 if (period > esp->max_period) {
1513 period = offset = 0;
1514 goto do_sdtr;
1515 }
1516 if (period < esp->min_period)
1517 goto do_reject;
1518
1519 one_clock = esp->ccycle / 1000;
1520 stp = DIV_ROUND_UP(period << 2, one_clock);
1521 if (stp && esp->rev >= FAS236) {
1522 if (stp >= 50)
1523 stp--;
1524 }
1525 } else {
1526 stp = 0;
1527 }
1528
1529 esp_setsync(esp, tp, period, offset, stp, offset);
1530 return;
1531
1532do_reject:
1533 esp->msg_out[0] = MESSAGE_REJECT;
1534 esp->msg_out_len = 1;
1535 scsi_esp_cmd(esp, ESP_CMD_SATN);
1536 return;
1537
1538do_sdtr:
1539 tp->nego_goal_period = period;
1540 tp->nego_goal_offset = offset;
1541 esp->msg_out_len =
1542 spi_populate_sync_msg(&esp->msg_out[0],
1543 tp->nego_goal_period,
1544 tp->nego_goal_offset);
1545 scsi_esp_cmd(esp, ESP_CMD_SATN);
1546}
1547
1548static void esp_msgin_wdtr(struct esp *esp, struct esp_target_data *tp)
1549{
1550 int size = 8 << esp->msg_in[3];
1551 u8 cfg3;
1552
1553 if (esp->rev != FASHME)
1554 goto do_reject;
1555
1556 if (size != 8 && size != 16)
1557 goto do_reject;
1558
1559 if (!(tp->flags & ESP_TGT_NEGO_WIDE))
1560 goto do_reject;
1561
1562 cfg3 = tp->esp_config3;
1563 if (size == 16) {
1564 tp->flags |= ESP_TGT_WIDE;
1565 cfg3 |= ESP_CONFIG3_EWIDE;
1566 } else {
1567 tp->flags &= ~ESP_TGT_WIDE;
1568 cfg3 &= ~ESP_CONFIG3_EWIDE;
1569 }
1570 tp->esp_config3 = cfg3;
1571 esp->prev_cfg3 = cfg3;
1572 esp_write8(cfg3, ESP_CFG3);
1573
1574 tp->flags &= ~ESP_TGT_NEGO_WIDE;
1575
1576 spi_period(tp->starget) = 0;
1577 spi_offset(tp->starget) = 0;
1578 if (!esp_need_to_nego_sync(tp)) {
1579 tp->flags &= ~ESP_TGT_CHECK_NEGO;
1580 scsi_esp_cmd(esp, ESP_CMD_RATN);
1581 } else {
1582 esp->msg_out_len =
1583 spi_populate_sync_msg(&esp->msg_out[0],
1584 tp->nego_goal_period,
1585 tp->nego_goal_offset);
1586 tp->flags |= ESP_TGT_NEGO_SYNC;
1587 scsi_esp_cmd(esp, ESP_CMD_SATN);
1588 }
1589 return;
1590
1591do_reject:
1592 esp->msg_out[0] = MESSAGE_REJECT;
1593 esp->msg_out_len = 1;
1594 scsi_esp_cmd(esp, ESP_CMD_SATN);
1595}
1596
1597static void esp_msgin_extended(struct esp *esp)
1598{
1599 struct esp_cmd_entry *ent = esp->active_cmd;
1600 struct scsi_cmnd *cmd = ent->cmd;
1601 struct esp_target_data *tp;
1602 int tgt = cmd->device->id;
1603
1604 tp = &esp->target[tgt];
1605 if (esp->msg_in[2] == EXTENDED_SDTR) {
1606 esp_msgin_sdtr(esp, tp);
1607 return;
1608 }
1609 if (esp->msg_in[2] == EXTENDED_WDTR) {
1610 esp_msgin_wdtr(esp, tp);
1611 return;
1612 }
1613
1614 shost_printk(KERN_INFO, esp->host,
1615 "Unexpected extended msg type %x\n", esp->msg_in[2]);
1616
1617 esp->msg_out[0] = MESSAGE_REJECT;
1618 esp->msg_out_len = 1;
1619 scsi_esp_cmd(esp, ESP_CMD_SATN);
1620}
1621
1622/* Analyze msgin bytes received from target so far. Return non-zero
1623 * if there are more bytes needed to complete the message.
1624 */
1625static int esp_msgin_process(struct esp *esp)
1626{
1627 u8 msg0 = esp->msg_in[0];
1628 int len = esp->msg_in_len;
1629
1630 if (msg0 & 0x80) {
1631 /* Identify */
1632 shost_printk(KERN_INFO, esp->host,
1633 "Unexpected msgin identify\n");
1634 return 0;
1635 }
1636
1637 switch (msg0) {
1638 case EXTENDED_MESSAGE:
1639 if (len == 1)
1640 return 1;
1641 if (len < esp->msg_in[1] + 2)
1642 return 1;
1643 esp_msgin_extended(esp);
1644 return 0;
1645
1646 case IGNORE_WIDE_RESIDUE: {
1647 struct esp_cmd_entry *ent;
1648 struct esp_cmd_priv *spriv;
1649 if (len == 1)
1650 return 1;
1651
1652 if (esp->msg_in[1] != 1)
1653 goto do_reject;
1654
1655 ent = esp->active_cmd;
1656 spriv = ESP_CMD_PRIV(ent->cmd);
1657
1658 if (spriv->cur_residue == sg_dma_len(spriv->cur_sg)) {
1659 spriv->cur_sg = spriv->prv_sg;
1660 spriv->cur_residue = 1;
1661 } else
1662 spriv->cur_residue++;
1663 spriv->tot_residue++;
1664 return 0;
1665 }
1666 case NOP:
1667 return 0;
1668 case RESTORE_POINTERS:
1669 esp_restore_pointers(esp, esp->active_cmd);
1670 return 0;
1671 case SAVE_POINTERS:
1672 esp_save_pointers(esp, esp->active_cmd);
1673 return 0;
1674
1675 case COMMAND_COMPLETE:
1676 case DISCONNECT: {
1677 struct esp_cmd_entry *ent = esp->active_cmd;
1678
1679 ent->message = msg0;
1680 esp_event(esp, ESP_EVENT_FREE_BUS);
1681 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1682 return 0;
1683 }
1684 case MESSAGE_REJECT:
1685 esp_msgin_reject(esp);
1686 return 0;
1687
1688 default:
1689 do_reject:
1690 esp->msg_out[0] = MESSAGE_REJECT;
1691 esp->msg_out_len = 1;
1692 scsi_esp_cmd(esp, ESP_CMD_SATN);
1693 return 0;
1694 }
1695}
1696
1697static int esp_process_event(struct esp *esp)
1698{
1699 int write, i;
1700
1701again:
1702 write = 0;
1703 esp_log_event("process event %d phase %x\n",
1704 esp->event, esp->sreg & ESP_STAT_PMASK);
1705 switch (esp->event) {
1706 case ESP_EVENT_CHECK_PHASE:
1707 switch (esp->sreg & ESP_STAT_PMASK) {
1708 case ESP_DOP:
1709 esp_event(esp, ESP_EVENT_DATA_OUT);
1710 break;
1711 case ESP_DIP:
1712 esp_event(esp, ESP_EVENT_DATA_IN);
1713 break;
1714 case ESP_STATP:
1715 esp_flush_fifo(esp);
1716 scsi_esp_cmd(esp, ESP_CMD_ICCSEQ);
1717 esp_event(esp, ESP_EVENT_STATUS);
1718 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1719 return 1;
1720
1721 case ESP_MOP:
1722 esp_event(esp, ESP_EVENT_MSGOUT);
1723 break;
1724
1725 case ESP_MIP:
1726 esp_event(esp, ESP_EVENT_MSGIN);
1727 break;
1728
1729 case ESP_CMDP:
1730 esp_event(esp, ESP_EVENT_CMD_START);
1731 break;
1732
1733 default:
1734 shost_printk(KERN_INFO, esp->host,
1735 "Unexpected phase, sreg=%02x\n",
1736 esp->sreg);
1737 esp_schedule_reset(esp);
1738 return 0;
1739 }
1740 goto again;
1741
1742 case ESP_EVENT_DATA_IN:
1743 write = 1;
1744 fallthrough;
1745
1746 case ESP_EVENT_DATA_OUT: {
1747 struct esp_cmd_entry *ent = esp->active_cmd;
1748 struct scsi_cmnd *cmd = ent->cmd;
1749 dma_addr_t dma_addr = esp_cur_dma_addr(ent, cmd);
1750 unsigned int dma_len = esp_cur_dma_len(ent, cmd);
1751
1752 if (esp->rev == ESP100)
1753 scsi_esp_cmd(esp, ESP_CMD_NULL);
1754
1755 if (write)
1756 ent->flags |= ESP_CMD_FLAG_WRITE;
1757 else
1758 ent->flags &= ~ESP_CMD_FLAG_WRITE;
1759
1760 if (esp->ops->dma_length_limit)
1761 dma_len = esp->ops->dma_length_limit(esp, dma_addr,
1762 dma_len);
1763 else
1764 dma_len = esp_dma_length_limit(esp, dma_addr, dma_len);
1765
1766 esp->data_dma_len = dma_len;
1767
1768 if (!dma_len) {
1769 shost_printk(KERN_ERR, esp->host,
1770 "DMA length is zero!\n");
1771 shost_printk(KERN_ERR, esp->host,
1772 "cur adr[%08llx] len[%08x]\n",
1773 (unsigned long long)esp_cur_dma_addr(ent, cmd),
1774 esp_cur_dma_len(ent, cmd));
1775 esp_schedule_reset(esp);
1776 return 0;
1777 }
1778
1779 esp_log_datastart("start data addr[%08llx] len[%u] write(%d)\n",
1780 (unsigned long long)dma_addr, dma_len, write);
1781
1782 esp->ops->send_dma_cmd(esp, dma_addr, dma_len, dma_len,
1783 write, ESP_CMD_DMA | ESP_CMD_TI);
1784 esp_event(esp, ESP_EVENT_DATA_DONE);
1785 break;
1786 }
1787 case ESP_EVENT_DATA_DONE: {
1788 struct esp_cmd_entry *ent = esp->active_cmd;
1789 struct scsi_cmnd *cmd = ent->cmd;
1790 int bytes_sent;
1791
1792 if (esp->ops->dma_error(esp)) {
1793 shost_printk(KERN_INFO, esp->host,
1794 "data done, DMA error, resetting\n");
1795 esp_schedule_reset(esp);
1796 return 0;
1797 }
1798
1799 if (ent->flags & ESP_CMD_FLAG_WRITE) {
1800 /* XXX parity errors, etc. XXX */
1801
1802 esp->ops->dma_drain(esp);
1803 }
1804 esp->ops->dma_invalidate(esp);
1805
1806 if (esp->ireg != ESP_INTR_BSERV) {
1807 /* We should always see exactly a bus-service
1808 * interrupt at the end of a successful transfer.
1809 */
1810 shost_printk(KERN_INFO, esp->host,
1811 "data done, not BSERV, resetting\n");
1812 esp_schedule_reset(esp);
1813 return 0;
1814 }
1815
1816 bytes_sent = esp_data_bytes_sent(esp, ent, cmd);
1817
1818 esp_log_datadone("data done flgs[%x] sent[%d]\n",
1819 ent->flags, bytes_sent);
1820
1821 if (bytes_sent < 0) {
1822 /* XXX force sync mode for this target XXX */
1823 esp_schedule_reset(esp);
1824 return 0;
1825 }
1826
1827 esp_advance_dma(esp, ent, cmd, bytes_sent);
1828 esp_event(esp, ESP_EVENT_CHECK_PHASE);
1829 goto again;
1830 }
1831
1832 case ESP_EVENT_STATUS: {
1833 struct esp_cmd_entry *ent = esp->active_cmd;
1834
1835 if (esp->ireg & ESP_INTR_FDONE) {
1836 ent->status = esp_read8(ESP_FDATA);
1837 ent->message = esp_read8(ESP_FDATA);
1838 scsi_esp_cmd(esp, ESP_CMD_MOK);
1839 } else if (esp->ireg == ESP_INTR_BSERV) {
1840 ent->status = esp_read8(ESP_FDATA);
1841 ent->message = 0xff;
1842 esp_event(esp, ESP_EVENT_MSGIN);
1843 return 0;
1844 }
1845
1846 if (ent->message != COMMAND_COMPLETE) {
1847 shost_printk(KERN_INFO, esp->host,
1848 "Unexpected message %x in status\n",
1849 ent->message);
1850 esp_schedule_reset(esp);
1851 return 0;
1852 }
1853
1854 esp_event(esp, ESP_EVENT_FREE_BUS);
1855 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1856 break;
1857 }
1858 case ESP_EVENT_FREE_BUS: {
1859 struct esp_cmd_entry *ent = esp->active_cmd;
1860 struct scsi_cmnd *cmd = ent->cmd;
1861
1862 if (ent->message == COMMAND_COMPLETE ||
1863 ent->message == DISCONNECT)
1864 scsi_esp_cmd(esp, ESP_CMD_ESEL);
1865
1866 if (ent->message == COMMAND_COMPLETE) {
1867 esp_log_cmddone("Command done status[%x] message[%x]\n",
1868 ent->status, ent->message);
1869 if (ent->status == SAM_STAT_TASK_SET_FULL)
1870 esp_event_queue_full(esp, ent);
1871
1872 if (ent->status == SAM_STAT_CHECK_CONDITION &&
1873 !(ent->flags & ESP_CMD_FLAG_AUTOSENSE)) {
1874 ent->flags |= ESP_CMD_FLAG_AUTOSENSE;
1875 esp_autosense(esp, ent);
1876 } else {
1877 esp_cmd_is_done(esp, ent, cmd,
1878 compose_result(ent->status,
1879 ent->message,
1880 DID_OK));
1881 }
1882 } else if (ent->message == DISCONNECT) {
1883 esp_log_disconnect("Disconnecting tgt[%d] tag[%x:%x]\n",
1884 cmd->device->id,
1885 ent->tag[0], ent->tag[1]);
1886
1887 esp->active_cmd = NULL;
1888 esp_maybe_execute_command(esp);
1889 } else {
1890 shost_printk(KERN_INFO, esp->host,
1891 "Unexpected message %x in freebus\n",
1892 ent->message);
1893 esp_schedule_reset(esp);
1894 return 0;
1895 }
1896 if (esp->active_cmd)
1897 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1898 break;
1899 }
1900 case ESP_EVENT_MSGOUT: {
1901 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1902
1903 if (esp_debug & ESP_DEBUG_MSGOUT) {
1904 int i;
1905 printk("ESP: Sending message [ ");
1906 for (i = 0; i < esp->msg_out_len; i++)
1907 printk("%02x ", esp->msg_out[i]);
1908 printk("]\n");
1909 }
1910
1911 if (esp->rev == FASHME) {
1912 int i;
1913
1914 /* Always use the fifo. */
1915 for (i = 0; i < esp->msg_out_len; i++) {
1916 esp_write8(esp->msg_out[i], ESP_FDATA);
1917 esp_write8(0, ESP_FDATA);
1918 }
1919 scsi_esp_cmd(esp, ESP_CMD_TI);
1920 } else {
1921 if (esp->msg_out_len == 1) {
1922 esp_write8(esp->msg_out[0], ESP_FDATA);
1923 scsi_esp_cmd(esp, ESP_CMD_TI);
1924 } else if (esp->flags & ESP_FLAG_USE_FIFO) {
1925 for (i = 0; i < esp->msg_out_len; i++)
1926 esp_write8(esp->msg_out[i], ESP_FDATA);
1927 scsi_esp_cmd(esp, ESP_CMD_TI);
1928 } else {
1929 /* Use DMA. */
1930 memcpy(esp->command_block,
1931 esp->msg_out,
1932 esp->msg_out_len);
1933
1934 esp->ops->send_dma_cmd(esp,
1935 esp->command_block_dma,
1936 esp->msg_out_len,
1937 esp->msg_out_len,
1938 0,
1939 ESP_CMD_DMA|ESP_CMD_TI);
1940 }
1941 }
1942 esp_event(esp, ESP_EVENT_MSGOUT_DONE);
1943 break;
1944 }
1945 case ESP_EVENT_MSGOUT_DONE:
1946 if (esp->rev == FASHME) {
1947 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1948 } else {
1949 if (esp->msg_out_len > 1)
1950 esp->ops->dma_invalidate(esp);
1951
1952 /* XXX if the chip went into disconnected mode,
1953 * we can't run the phase state machine anyway.
1954 */
1955 if (!(esp->ireg & ESP_INTR_DC))
1956 scsi_esp_cmd(esp, ESP_CMD_NULL);
1957 }
1958
1959 esp->msg_out_len = 0;
1960
1961 esp_event(esp, ESP_EVENT_CHECK_PHASE);
1962 goto again;
1963 case ESP_EVENT_MSGIN:
1964 if (esp->ireg & ESP_INTR_BSERV) {
1965 if (esp->rev == FASHME) {
1966 if (!(esp_read8(ESP_STATUS2) &
1967 ESP_STAT2_FEMPTY))
1968 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1969 } else {
1970 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1971 if (esp->rev == ESP100)
1972 scsi_esp_cmd(esp, ESP_CMD_NULL);
1973 }
1974 scsi_esp_cmd(esp, ESP_CMD_TI);
1975 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
1976 return 1;
1977 }
1978 if (esp->ireg & ESP_INTR_FDONE) {
1979 u8 val;
1980
1981 if (esp->rev == FASHME)
1982 val = esp->fifo[0];
1983 else
1984 val = esp_read8(ESP_FDATA);
1985 esp->msg_in[esp->msg_in_len++] = val;
1986
1987 esp_log_msgin("Got msgin byte %x\n", val);
1988
1989 if (!esp_msgin_process(esp))
1990 esp->msg_in_len = 0;
1991
1992 if (esp->rev == FASHME)
1993 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
1994
1995 scsi_esp_cmd(esp, ESP_CMD_MOK);
1996
1997 /* Check whether a bus reset is to be done next */
1998 if (esp->event == ESP_EVENT_RESET)
1999 return 0;
2000
2001 if (esp->event != ESP_EVENT_FREE_BUS)
2002 esp_event(esp, ESP_EVENT_CHECK_PHASE);
2003 } else {
2004 shost_printk(KERN_INFO, esp->host,
2005 "MSGIN neither BSERV not FDON, resetting");
2006 esp_schedule_reset(esp);
2007 return 0;
2008 }
2009 break;
2010 case ESP_EVENT_CMD_START:
2011 memcpy(esp->command_block, esp->cmd_bytes_ptr,
2012 esp->cmd_bytes_left);
2013 esp_send_dma_cmd(esp, esp->cmd_bytes_left, 16, ESP_CMD_TI);
2014 esp_event(esp, ESP_EVENT_CMD_DONE);
2015 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
2016 break;
2017 case ESP_EVENT_CMD_DONE:
2018 esp->ops->dma_invalidate(esp);
2019 if (esp->ireg & ESP_INTR_BSERV) {
2020 esp_event(esp, ESP_EVENT_CHECK_PHASE);
2021 goto again;
2022 }
2023 esp_schedule_reset(esp);
2024 return 0;
2025
2026 case ESP_EVENT_RESET:
2027 scsi_esp_cmd(esp, ESP_CMD_RS);
2028 break;
2029
2030 default:
2031 shost_printk(KERN_INFO, esp->host,
2032 "Unexpected event %x, resetting\n", esp->event);
2033 esp_schedule_reset(esp);
2034 return 0;
2035 }
2036 return 1;
2037}
2038
2039static void esp_reset_cleanup_one(struct esp *esp, struct esp_cmd_entry *ent)
2040{
2041 struct scsi_cmnd *cmd = ent->cmd;
2042
2043 esp_unmap_dma(esp, cmd);
2044 esp_free_lun_tag(ent, cmd->device->hostdata);
2045 cmd->result = DID_RESET << 16;
2046
2047 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE)
2048 esp_unmap_sense(esp, ent);
2049
2050 cmd->scsi_done(cmd);
2051 list_del(&ent->list);
2052 esp_put_ent(esp, ent);
2053}
2054
2055static void esp_clear_hold(struct scsi_device *dev, void *data)
2056{
2057 struct esp_lun_data *lp = dev->hostdata;
2058
2059 BUG_ON(lp->num_tagged);
2060 lp->hold = 0;
2061}
2062
2063static void esp_reset_cleanup(struct esp *esp)
2064{
2065 struct esp_cmd_entry *ent, *tmp;
2066 int i;
2067
2068 list_for_each_entry_safe(ent, tmp, &esp->queued_cmds, list) {
2069 struct scsi_cmnd *cmd = ent->cmd;
2070
2071 list_del(&ent->list);
2072 cmd->result = DID_RESET << 16;
2073 cmd->scsi_done(cmd);
2074 esp_put_ent(esp, ent);
2075 }
2076
2077 list_for_each_entry_safe(ent, tmp, &esp->active_cmds, list) {
2078 if (ent == esp->active_cmd)
2079 esp->active_cmd = NULL;
2080 esp_reset_cleanup_one(esp, ent);
2081 }
2082
2083 BUG_ON(esp->active_cmd != NULL);
2084
2085 /* Force renegotiation of sync/wide transfers. */
2086 for (i = 0; i < ESP_MAX_TARGET; i++) {
2087 struct esp_target_data *tp = &esp->target[i];
2088
2089 tp->esp_period = 0;
2090 tp->esp_offset = 0;
2091 tp->esp_config3 &= ~(ESP_CONFIG3_EWIDE |
2092 ESP_CONFIG3_FSCSI |
2093 ESP_CONFIG3_FAST);
2094 tp->flags &= ~ESP_TGT_WIDE;
2095 tp->flags |= ESP_TGT_CHECK_NEGO;
2096
2097 if (tp->starget)
2098 __starget_for_each_device(tp->starget, NULL,
2099 esp_clear_hold);
2100 }
2101 esp->flags &= ~ESP_FLAG_RESETTING;
2102}
2103
2104/* Runs under host->lock */
2105static void __esp_interrupt(struct esp *esp)
2106{
2107 int finish_reset, intr_done;
2108 u8 phase;
2109
2110 /*
2111 * Once INTRPT is read STATUS and SSTEP are cleared.
2112 */
2113 esp->sreg = esp_read8(ESP_STATUS);
2114 esp->seqreg = esp_read8(ESP_SSTEP);
2115 esp->ireg = esp_read8(ESP_INTRPT);
2116
2117 if (esp->flags & ESP_FLAG_RESETTING) {
2118 finish_reset = 1;
2119 } else {
2120 if (esp_check_gross_error(esp))
2121 return;
2122
2123 finish_reset = esp_check_spur_intr(esp);
2124 if (finish_reset < 0)
2125 return;
2126 }
2127
2128 if (esp->ireg & ESP_INTR_SR)
2129 finish_reset = 1;
2130
2131 if (finish_reset) {
2132 esp_reset_cleanup(esp);
2133 if (esp->eh_reset) {
2134 complete(esp->eh_reset);
2135 esp->eh_reset = NULL;
2136 }
2137 return;
2138 }
2139
2140 phase = (esp->sreg & ESP_STAT_PMASK);
2141 if (esp->rev == FASHME) {
2142 if (((phase != ESP_DIP && phase != ESP_DOP) &&
2143 esp->select_state == ESP_SELECT_NONE &&
2144 esp->event != ESP_EVENT_STATUS &&
2145 esp->event != ESP_EVENT_DATA_DONE) ||
2146 (esp->ireg & ESP_INTR_RSEL)) {
2147 esp->sreg2 = esp_read8(ESP_STATUS2);
2148 if (!(esp->sreg2 & ESP_STAT2_FEMPTY) ||
2149 (esp->sreg2 & ESP_STAT2_F1BYTE))
2150 hme_read_fifo(esp);
2151 }
2152 }
2153
2154 esp_log_intr("intr sreg[%02x] seqreg[%02x] "
2155 "sreg2[%02x] ireg[%02x]\n",
2156 esp->sreg, esp->seqreg, esp->sreg2, esp->ireg);
2157
2158 intr_done = 0;
2159
2160 if (esp->ireg & (ESP_INTR_S | ESP_INTR_SATN | ESP_INTR_IC)) {
2161 shost_printk(KERN_INFO, esp->host,
2162 "unexpected IREG %02x\n", esp->ireg);
2163 if (esp->ireg & ESP_INTR_IC)
2164 esp_dump_cmd_log(esp);
2165
2166 esp_schedule_reset(esp);
2167 } else {
2168 if (esp->ireg & ESP_INTR_RSEL) {
2169 if (esp->active_cmd)
2170 (void) esp_finish_select(esp);
2171 intr_done = esp_reconnect(esp);
2172 } else {
2173 /* Some combination of FDONE, BSERV, DC. */
2174 if (esp->select_state != ESP_SELECT_NONE)
2175 intr_done = esp_finish_select(esp);
2176 }
2177 }
2178 while (!intr_done)
2179 intr_done = esp_process_event(esp);
2180}
2181
2182irqreturn_t scsi_esp_intr(int irq, void *dev_id)
2183{
2184 struct esp *esp = dev_id;
2185 unsigned long flags;
2186 irqreturn_t ret;
2187
2188 spin_lock_irqsave(esp->host->host_lock, flags);
2189 ret = IRQ_NONE;
2190 if (esp->ops->irq_pending(esp)) {
2191 ret = IRQ_HANDLED;
2192 for (;;) {
2193 int i;
2194
2195 __esp_interrupt(esp);
2196 if (!(esp->flags & ESP_FLAG_QUICKIRQ_CHECK))
2197 break;
2198 esp->flags &= ~ESP_FLAG_QUICKIRQ_CHECK;
2199
2200 for (i = 0; i < ESP_QUICKIRQ_LIMIT; i++) {
2201 if (esp->ops->irq_pending(esp))
2202 break;
2203 }
2204 if (i == ESP_QUICKIRQ_LIMIT)
2205 break;
2206 }
2207 }
2208 spin_unlock_irqrestore(esp->host->host_lock, flags);
2209
2210 return ret;
2211}
2212EXPORT_SYMBOL(scsi_esp_intr);
2213
2214static void esp_get_revision(struct esp *esp)
2215{
2216 u8 val;
2217
2218 esp->config1 = (ESP_CONFIG1_PENABLE | (esp->scsi_id & 7));
2219 if (esp->config2 == 0) {
2220 esp->config2 = (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY);
2221 esp_write8(esp->config2, ESP_CFG2);
2222
2223 val = esp_read8(ESP_CFG2);
2224 val &= ~ESP_CONFIG2_MAGIC;
2225
2226 esp->config2 = 0;
2227 if (val != (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY)) {
2228 /*
2229 * If what we write to cfg2 does not come back,
2230 * cfg2 is not implemented.
2231 * Therefore this must be a plain esp100.
2232 */
2233 esp->rev = ESP100;
2234 return;
2235 }
2236 }
2237
2238 esp_set_all_config3(esp, 5);
2239 esp->prev_cfg3 = 5;
2240 esp_write8(esp->config2, ESP_CFG2);
2241 esp_write8(0, ESP_CFG3);
2242 esp_write8(esp->prev_cfg3, ESP_CFG3);
2243
2244 val = esp_read8(ESP_CFG3);
2245 if (val != 5) {
2246 /* The cfg2 register is implemented, however
2247 * cfg3 is not, must be esp100a.
2248 */
2249 esp->rev = ESP100A;
2250 } else {
2251 esp_set_all_config3(esp, 0);
2252 esp->prev_cfg3 = 0;
2253 esp_write8(esp->prev_cfg3, ESP_CFG3);
2254
2255 /* All of cfg{1,2,3} implemented, must be one of
2256 * the fas variants, figure out which one.
2257 */
2258 if (esp->cfact == 0 || esp->cfact > ESP_CCF_F5) {
2259 esp->rev = FAST;
2260 esp->sync_defp = SYNC_DEFP_FAST;
2261 } else {
2262 esp->rev = ESP236;
2263 }
2264 }
2265}
2266
2267static void esp_init_swstate(struct esp *esp)
2268{
2269 int i;
2270
2271 INIT_LIST_HEAD(&esp->queued_cmds);
2272 INIT_LIST_HEAD(&esp->active_cmds);
2273 INIT_LIST_HEAD(&esp->esp_cmd_pool);
2274
2275 /* Start with a clear state, domain validation (via ->slave_configure,
2276 * spi_dv_device()) will attempt to enable SYNC, WIDE, and tagged
2277 * commands.
2278 */
2279 for (i = 0 ; i < ESP_MAX_TARGET; i++) {
2280 esp->target[i].flags = 0;
2281 esp->target[i].nego_goal_period = 0;
2282 esp->target[i].nego_goal_offset = 0;
2283 esp->target[i].nego_goal_width = 0;
2284 esp->target[i].nego_goal_tags = 0;
2285 }
2286}
2287
2288/* This places the ESP into a known state at boot time. */
2289static void esp_bootup_reset(struct esp *esp)
2290{
2291 u8 val;
2292
2293 /* Reset the DMA */
2294 esp->ops->reset_dma(esp);
2295
2296 /* Reset the ESP */
2297 esp_reset_esp(esp);
2298
2299 /* Reset the SCSI bus, but tell ESP not to generate an irq */
2300 val = esp_read8(ESP_CFG1);
2301 val |= ESP_CONFIG1_SRRDISAB;
2302 esp_write8(val, ESP_CFG1);
2303
2304 scsi_esp_cmd(esp, ESP_CMD_RS);
2305 udelay(400);
2306
2307 esp_write8(esp->config1, ESP_CFG1);
2308
2309 /* Eat any bitrot in the chip and we are done... */
2310 esp_read8(ESP_INTRPT);
2311}
2312
2313static void esp_set_clock_params(struct esp *esp)
2314{
2315 int fhz;
2316 u8 ccf;
2317
2318 /* This is getting messy but it has to be done correctly or else
2319 * you get weird behavior all over the place. We are trying to
2320 * basically figure out three pieces of information.
2321 *
2322 * a) Clock Conversion Factor
2323 *
2324 * This is a representation of the input crystal clock frequency
2325 * going into the ESP on this machine. Any operation whose timing
2326 * is longer than 400ns depends on this value being correct. For
2327 * example, you'll get blips for arbitration/selection during high
2328 * load or with multiple targets if this is not set correctly.
2329 *
2330 * b) Selection Time-Out
2331 *
2332 * The ESP isn't very bright and will arbitrate for the bus and try
2333 * to select a target forever if you let it. This value tells the
2334 * ESP when it has taken too long to negotiate and that it should
2335 * interrupt the CPU so we can see what happened. The value is
2336 * computed as follows (from NCR/Symbios chip docs).
2337 *
2338 * (Time Out Period) * (Input Clock)
2339 * STO = ----------------------------------
2340 * (8192) * (Clock Conversion Factor)
2341 *
2342 * We use a time out period of 250ms (ESP_BUS_TIMEOUT).
2343 *
2344 * c) Imperical constants for synchronous offset and transfer period
2345 * register values
2346 *
2347 * This entails the smallest and largest sync period we could ever
2348 * handle on this ESP.
2349 */
2350 fhz = esp->cfreq;
2351
2352 ccf = ((fhz / 1000000) + 4) / 5;
2353 if (ccf == 1)
2354 ccf = 2;
2355
2356 /* If we can't find anything reasonable, just assume 20MHZ.
2357 * This is the clock frequency of the older sun4c's where I've
2358 * been unable to find the clock-frequency PROM property. All
2359 * other machines provide useful values it seems.
2360 */
2361 if (fhz <= 5000000 || ccf < 1 || ccf > 8) {
2362 fhz = 20000000;
2363 ccf = 4;
2364 }
2365
2366 esp->cfact = (ccf == 8 ? 0 : ccf);
2367 esp->cfreq = fhz;
2368 esp->ccycle = ESP_HZ_TO_CYCLE(fhz);
2369 esp->ctick = ESP_TICK(ccf, esp->ccycle);
2370 esp->neg_defp = ESP_NEG_DEFP(fhz, ccf);
2371 esp->sync_defp = SYNC_DEFP_SLOW;
2372}
2373
2374static const char *esp_chip_names[] = {
2375 "ESP100",
2376 "ESP100A",
2377 "ESP236",
2378 "FAS236",
2379 "AM53C974",
2380 "53CF9x-2",
2381 "FAS100A",
2382 "FAST",
2383 "FASHME",
2384};
2385
2386static struct scsi_transport_template *esp_transport_template;
2387
2388int scsi_esp_register(struct esp *esp)
2389{
2390 static int instance;
2391 int err;
2392
2393 if (!esp->num_tags)
2394 esp->num_tags = ESP_DEFAULT_TAGS;
2395 esp->host->transportt = esp_transport_template;
2396 esp->host->max_lun = ESP_MAX_LUN;
2397 esp->host->cmd_per_lun = 2;
2398 esp->host->unique_id = instance;
2399
2400 esp_set_clock_params(esp);
2401
2402 esp_get_revision(esp);
2403
2404 esp_init_swstate(esp);
2405
2406 esp_bootup_reset(esp);
2407
2408 dev_printk(KERN_INFO, esp->dev, "esp%u: regs[%1p:%1p] irq[%u]\n",
2409 esp->host->unique_id, esp->regs, esp->dma_regs,
2410 esp->host->irq);
2411 dev_printk(KERN_INFO, esp->dev,
2412 "esp%u: is a %s, %u MHz (ccf=%u), SCSI ID %u\n",
2413 esp->host->unique_id, esp_chip_names[esp->rev],
2414 esp->cfreq / 1000000, esp->cfact, esp->scsi_id);
2415
2416 /* Let the SCSI bus reset settle. */
2417 ssleep(esp_bus_reset_settle);
2418
2419 err = scsi_add_host(esp->host, esp->dev);
2420 if (err)
2421 return err;
2422
2423 instance++;
2424
2425 scsi_scan_host(esp->host);
2426
2427 return 0;
2428}
2429EXPORT_SYMBOL(scsi_esp_register);
2430
2431void scsi_esp_unregister(struct esp *esp)
2432{
2433 scsi_remove_host(esp->host);
2434}
2435EXPORT_SYMBOL(scsi_esp_unregister);
2436
2437static int esp_target_alloc(struct scsi_target *starget)
2438{
2439 struct esp *esp = shost_priv(dev_to_shost(&starget->dev));
2440 struct esp_target_data *tp = &esp->target[starget->id];
2441
2442 tp->starget = starget;
2443
2444 return 0;
2445}
2446
2447static void esp_target_destroy(struct scsi_target *starget)
2448{
2449 struct esp *esp = shost_priv(dev_to_shost(&starget->dev));
2450 struct esp_target_data *tp = &esp->target[starget->id];
2451
2452 tp->starget = NULL;
2453}
2454
2455static int esp_slave_alloc(struct scsi_device *dev)
2456{
2457 struct esp *esp = shost_priv(dev->host);
2458 struct esp_target_data *tp = &esp->target[dev->id];
2459 struct esp_lun_data *lp;
2460
2461 lp = kzalloc(sizeof(*lp), GFP_KERNEL);
2462 if (!lp)
2463 return -ENOMEM;
2464 dev->hostdata = lp;
2465
2466 spi_min_period(tp->starget) = esp->min_period;
2467 spi_max_offset(tp->starget) = 15;
2468
2469 if (esp->flags & ESP_FLAG_WIDE_CAPABLE)
2470 spi_max_width(tp->starget) = 1;
2471 else
2472 spi_max_width(tp->starget) = 0;
2473
2474 return 0;
2475}
2476
2477static int esp_slave_configure(struct scsi_device *dev)
2478{
2479 struct esp *esp = shost_priv(dev->host);
2480 struct esp_target_data *tp = &esp->target[dev->id];
2481
2482 if (dev->tagged_supported)
2483 scsi_change_queue_depth(dev, esp->num_tags);
2484
2485 tp->flags |= ESP_TGT_DISCONNECT;
2486
2487 if (!spi_initial_dv(dev->sdev_target))
2488 spi_dv_device(dev);
2489
2490 return 0;
2491}
2492
2493static void esp_slave_destroy(struct scsi_device *dev)
2494{
2495 struct esp_lun_data *lp = dev->hostdata;
2496
2497 kfree(lp);
2498 dev->hostdata = NULL;
2499}
2500
2501static int esp_eh_abort_handler(struct scsi_cmnd *cmd)
2502{
2503 struct esp *esp = shost_priv(cmd->device->host);
2504 struct esp_cmd_entry *ent, *tmp;
2505 struct completion eh_done;
2506 unsigned long flags;
2507
2508 /* XXX This helps a lot with debugging but might be a bit
2509 * XXX much for the final driver.
2510 */
2511 spin_lock_irqsave(esp->host->host_lock, flags);
2512 shost_printk(KERN_ERR, esp->host, "Aborting command [%p:%02x]\n",
2513 cmd, cmd->cmnd[0]);
2514 ent = esp->active_cmd;
2515 if (ent)
2516 shost_printk(KERN_ERR, esp->host,
2517 "Current command [%p:%02x]\n",
2518 ent->cmd, ent->cmd->cmnd[0]);
2519 list_for_each_entry(ent, &esp->queued_cmds, list) {
2520 shost_printk(KERN_ERR, esp->host, "Queued command [%p:%02x]\n",
2521 ent->cmd, ent->cmd->cmnd[0]);
2522 }
2523 list_for_each_entry(ent, &esp->active_cmds, list) {
2524 shost_printk(KERN_ERR, esp->host, " Active command [%p:%02x]\n",
2525 ent->cmd, ent->cmd->cmnd[0]);
2526 }
2527 esp_dump_cmd_log(esp);
2528 spin_unlock_irqrestore(esp->host->host_lock, flags);
2529
2530 spin_lock_irqsave(esp->host->host_lock, flags);
2531
2532 ent = NULL;
2533 list_for_each_entry(tmp, &esp->queued_cmds, list) {
2534 if (tmp->cmd == cmd) {
2535 ent = tmp;
2536 break;
2537 }
2538 }
2539
2540 if (ent) {
2541 /* Easiest case, we didn't even issue the command
2542 * yet so it is trivial to abort.
2543 */
2544 list_del(&ent->list);
2545
2546 cmd->result = DID_ABORT << 16;
2547 cmd->scsi_done(cmd);
2548
2549 esp_put_ent(esp, ent);
2550
2551 goto out_success;
2552 }
2553
2554 init_completion(&eh_done);
2555
2556 ent = esp->active_cmd;
2557 if (ent && ent->cmd == cmd) {
2558 /* Command is the currently active command on
2559 * the bus. If we already have an output message
2560 * pending, no dice.
2561 */
2562 if (esp->msg_out_len)
2563 goto out_failure;
2564
2565 /* Send out an abort, encouraging the target to
2566 * go to MSGOUT phase by asserting ATN.
2567 */
2568 esp->msg_out[0] = ABORT_TASK_SET;
2569 esp->msg_out_len = 1;
2570 ent->eh_done = &eh_done;
2571
2572 scsi_esp_cmd(esp, ESP_CMD_SATN);
2573 } else {
2574 /* The command is disconnected. This is not easy to
2575 * abort. For now we fail and let the scsi error
2576 * handling layer go try a scsi bus reset or host
2577 * reset.
2578 *
2579 * What we could do is put together a scsi command
2580 * solely for the purpose of sending an abort message
2581 * to the target. Coming up with all the code to
2582 * cook up scsi commands, special case them everywhere,
2583 * etc. is for questionable gain and it would be better
2584 * if the generic scsi error handling layer could do at
2585 * least some of that for us.
2586 *
2587 * Anyways this is an area for potential future improvement
2588 * in this driver.
2589 */
2590 goto out_failure;
2591 }
2592
2593 spin_unlock_irqrestore(esp->host->host_lock, flags);
2594
2595 if (!wait_for_completion_timeout(&eh_done, 5 * HZ)) {
2596 spin_lock_irqsave(esp->host->host_lock, flags);
2597 ent->eh_done = NULL;
2598 spin_unlock_irqrestore(esp->host->host_lock, flags);
2599
2600 return FAILED;
2601 }
2602
2603 return SUCCESS;
2604
2605out_success:
2606 spin_unlock_irqrestore(esp->host->host_lock, flags);
2607 return SUCCESS;
2608
2609out_failure:
2610 /* XXX This might be a good location to set ESP_TGT_BROKEN
2611 * XXX since we know which target/lun in particular is
2612 * XXX causing trouble.
2613 */
2614 spin_unlock_irqrestore(esp->host->host_lock, flags);
2615 return FAILED;
2616}
2617
2618static int esp_eh_bus_reset_handler(struct scsi_cmnd *cmd)
2619{
2620 struct esp *esp = shost_priv(cmd->device->host);
2621 struct completion eh_reset;
2622 unsigned long flags;
2623
2624 init_completion(&eh_reset);
2625
2626 spin_lock_irqsave(esp->host->host_lock, flags);
2627
2628 esp->eh_reset = &eh_reset;
2629
2630 /* XXX This is too simple... We should add lots of
2631 * XXX checks here so that if we find that the chip is
2632 * XXX very wedged we return failure immediately so
2633 * XXX that we can perform a full chip reset.
2634 */
2635 esp->flags |= ESP_FLAG_RESETTING;
2636 scsi_esp_cmd(esp, ESP_CMD_RS);
2637
2638 spin_unlock_irqrestore(esp->host->host_lock, flags);
2639
2640 ssleep(esp_bus_reset_settle);
2641
2642 if (!wait_for_completion_timeout(&eh_reset, 5 * HZ)) {
2643 spin_lock_irqsave(esp->host->host_lock, flags);
2644 esp->eh_reset = NULL;
2645 spin_unlock_irqrestore(esp->host->host_lock, flags);
2646
2647 return FAILED;
2648 }
2649
2650 return SUCCESS;
2651}
2652
2653/* All bets are off, reset the entire device. */
2654static int esp_eh_host_reset_handler(struct scsi_cmnd *cmd)
2655{
2656 struct esp *esp = shost_priv(cmd->device->host);
2657 unsigned long flags;
2658
2659 spin_lock_irqsave(esp->host->host_lock, flags);
2660 esp_bootup_reset(esp);
2661 esp_reset_cleanup(esp);
2662 spin_unlock_irqrestore(esp->host->host_lock, flags);
2663
2664 ssleep(esp_bus_reset_settle);
2665
2666 return SUCCESS;
2667}
2668
2669static const char *esp_info(struct Scsi_Host *host)
2670{
2671 return "esp";
2672}
2673
2674struct scsi_host_template scsi_esp_template = {
2675 .module = THIS_MODULE,
2676 .name = "esp",
2677 .info = esp_info,
2678 .queuecommand = esp_queuecommand,
2679 .target_alloc = esp_target_alloc,
2680 .target_destroy = esp_target_destroy,
2681 .slave_alloc = esp_slave_alloc,
2682 .slave_configure = esp_slave_configure,
2683 .slave_destroy = esp_slave_destroy,
2684 .eh_abort_handler = esp_eh_abort_handler,
2685 .eh_bus_reset_handler = esp_eh_bus_reset_handler,
2686 .eh_host_reset_handler = esp_eh_host_reset_handler,
2687 .can_queue = 7,
2688 .this_id = 7,
2689 .sg_tablesize = SG_ALL,
2690 .max_sectors = 0xffff,
2691 .skip_settle_delay = 1,
2692};
2693EXPORT_SYMBOL(scsi_esp_template);
2694
2695static void esp_get_signalling(struct Scsi_Host *host)
2696{
2697 struct esp *esp = shost_priv(host);
2698 enum spi_signal_type type;
2699
2700 if (esp->flags & ESP_FLAG_DIFFERENTIAL)
2701 type = SPI_SIGNAL_HVD;
2702 else
2703 type = SPI_SIGNAL_SE;
2704
2705 spi_signalling(host) = type;
2706}
2707
2708static void esp_set_offset(struct scsi_target *target, int offset)
2709{
2710 struct Scsi_Host *host = dev_to_shost(target->dev.parent);
2711 struct esp *esp = shost_priv(host);
2712 struct esp_target_data *tp = &esp->target[target->id];
2713
2714 if (esp->flags & ESP_FLAG_DISABLE_SYNC)
2715 tp->nego_goal_offset = 0;
2716 else
2717 tp->nego_goal_offset = offset;
2718 tp->flags |= ESP_TGT_CHECK_NEGO;
2719}
2720
2721static void esp_set_period(struct scsi_target *target, int period)
2722{
2723 struct Scsi_Host *host = dev_to_shost(target->dev.parent);
2724 struct esp *esp = shost_priv(host);
2725 struct esp_target_data *tp = &esp->target[target->id];
2726
2727 tp->nego_goal_period = period;
2728 tp->flags |= ESP_TGT_CHECK_NEGO;
2729}
2730
2731static void esp_set_width(struct scsi_target *target, int width)
2732{
2733 struct Scsi_Host *host = dev_to_shost(target->dev.parent);
2734 struct esp *esp = shost_priv(host);
2735 struct esp_target_data *tp = &esp->target[target->id];
2736
2737 tp->nego_goal_width = (width ? 1 : 0);
2738 tp->flags |= ESP_TGT_CHECK_NEGO;
2739}
2740
2741static struct spi_function_template esp_transport_ops = {
2742 .set_offset = esp_set_offset,
2743 .show_offset = 1,
2744 .set_period = esp_set_period,
2745 .show_period = 1,
2746 .set_width = esp_set_width,
2747 .show_width = 1,
2748 .get_signalling = esp_get_signalling,
2749};
2750
2751static int __init esp_init(void)
2752{
2753 BUILD_BUG_ON(sizeof(struct scsi_pointer) <
2754 sizeof(struct esp_cmd_priv));
2755
2756 esp_transport_template = spi_attach_transport(&esp_transport_ops);
2757 if (!esp_transport_template)
2758 return -ENODEV;
2759
2760 return 0;
2761}
2762
2763static void __exit esp_exit(void)
2764{
2765 spi_release_transport(esp_transport_template);
2766}
2767
2768MODULE_DESCRIPTION("ESP SCSI driver core");
2769MODULE_AUTHOR("David S. Miller (davem@davemloft.net)");
2770MODULE_LICENSE("GPL");
2771MODULE_VERSION(DRV_VERSION);
2772
2773module_param(esp_bus_reset_settle, int, 0);
2774MODULE_PARM_DESC(esp_bus_reset_settle,
2775 "ESP scsi bus reset delay in seconds");
2776
2777module_param(esp_debug, int, 0);
2778MODULE_PARM_DESC(esp_debug,
2779"ESP bitmapped debugging message enable value:\n"
2780" 0x00000001 Log interrupt events\n"
2781" 0x00000002 Log scsi commands\n"
2782" 0x00000004 Log resets\n"
2783" 0x00000008 Log message in events\n"
2784" 0x00000010 Log message out events\n"
2785" 0x00000020 Log command completion\n"
2786" 0x00000040 Log disconnects\n"
2787" 0x00000080 Log data start\n"
2788" 0x00000100 Log data done\n"
2789" 0x00000200 Log reconnects\n"
2790" 0x00000400 Log auto-sense data\n"
2791);
2792
2793module_init(esp_init);
2794module_exit(esp_exit);
2795
2796#ifdef CONFIG_SCSI_ESP_PIO
2797static inline unsigned int esp_wait_for_fifo(struct esp *esp)
2798{
2799 int i = 500000;
2800
2801 do {
2802 unsigned int fbytes = esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES;
2803
2804 if (fbytes)
2805 return fbytes;
2806
2807 udelay(1);
2808 } while (--i);
2809
2810 shost_printk(KERN_ERR, esp->host, "FIFO is empty. sreg [%02x]\n",
2811 esp_read8(ESP_STATUS));
2812 return 0;
2813}
2814
2815static inline int esp_wait_for_intr(struct esp *esp)
2816{
2817 int i = 500000;
2818
2819 do {
2820 esp->sreg = esp_read8(ESP_STATUS);
2821 if (esp->sreg & ESP_STAT_INTR)
2822 return 0;
2823
2824 udelay(1);
2825 } while (--i);
2826
2827 shost_printk(KERN_ERR, esp->host, "IRQ timeout. sreg [%02x]\n",
2828 esp->sreg);
2829 return 1;
2830}
2831
2832#define ESP_FIFO_SIZE 16
2833
2834void esp_send_pio_cmd(struct esp *esp, u32 addr, u32 esp_count,
2835 u32 dma_count, int write, u8 cmd)
2836{
2837 u8 phase = esp->sreg & ESP_STAT_PMASK;
2838
2839 cmd &= ~ESP_CMD_DMA;
2840 esp->send_cmd_error = 0;
2841
2842 if (write) {
2843 u8 *dst = (u8 *)addr;
2844 u8 mask = ~(phase == ESP_MIP ? ESP_INTR_FDONE : ESP_INTR_BSERV);
2845
2846 scsi_esp_cmd(esp, cmd);
2847
2848 while (1) {
2849 if (!esp_wait_for_fifo(esp))
2850 break;
2851
2852 *dst++ = readb(esp->fifo_reg);
2853 --esp_count;
2854
2855 if (!esp_count)
2856 break;
2857
2858 if (esp_wait_for_intr(esp)) {
2859 esp->send_cmd_error = 1;
2860 break;
2861 }
2862
2863 if ((esp->sreg & ESP_STAT_PMASK) != phase)
2864 break;
2865
2866 esp->ireg = esp_read8(ESP_INTRPT);
2867 if (esp->ireg & mask) {
2868 esp->send_cmd_error = 1;
2869 break;
2870 }
2871
2872 if (phase == ESP_MIP)
2873 esp_write8(ESP_CMD_MOK, ESP_CMD);
2874
2875 esp_write8(ESP_CMD_TI, ESP_CMD);
2876 }
2877 } else {
2878 unsigned int n = ESP_FIFO_SIZE;
2879 u8 *src = (u8 *)addr;
2880
2881 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
2882
2883 if (n > esp_count)
2884 n = esp_count;
2885 writesb(esp->fifo_reg, src, n);
2886 src += n;
2887 esp_count -= n;
2888
2889 scsi_esp_cmd(esp, cmd);
2890
2891 while (esp_count) {
2892 if (esp_wait_for_intr(esp)) {
2893 esp->send_cmd_error = 1;
2894 break;
2895 }
2896
2897 if ((esp->sreg & ESP_STAT_PMASK) != phase)
2898 break;
2899
2900 esp->ireg = esp_read8(ESP_INTRPT);
2901 if (esp->ireg & ~ESP_INTR_BSERV) {
2902 esp->send_cmd_error = 1;
2903 break;
2904 }
2905
2906 n = ESP_FIFO_SIZE -
2907 (esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES);
2908
2909 if (n > esp_count)
2910 n = esp_count;
2911 writesb(esp->fifo_reg, src, n);
2912 src += n;
2913 esp_count -= n;
2914
2915 esp_write8(ESP_CMD_TI, ESP_CMD);
2916 }
2917 }
2918
2919 esp->send_cmd_residual = esp_count;
2920}
2921EXPORT_SYMBOL(esp_send_pio_cmd);
2922#endif