Lines Matching refs:esp

57 		shost_printk(KERN_DEBUG, esp->host, f, ## a);	\
62 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
67 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
72 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
77 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
82 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
87 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
92 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
97 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
102 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
107 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
112 shost_printk(KERN_DEBUG, esp->host, f, ## a); \
115 #define esp_read8(REG) esp->ops->esp_read8(esp, REG)
116 #define esp_write8(VAL,REG) esp->ops->esp_write8(esp, VAL, REG)
118 static void esp_log_fill_regs(struct esp *esp, in esp_log_fill_regs() argument
121 p->sreg = esp->sreg; in esp_log_fill_regs()
122 p->seqreg = esp->seqreg; in esp_log_fill_regs()
123 p->sreg2 = esp->sreg2; in esp_log_fill_regs()
124 p->ireg = esp->ireg; in esp_log_fill_regs()
125 p->select_state = esp->select_state; in esp_log_fill_regs()
126 p->event = esp->event; in esp_log_fill_regs()
129 void scsi_esp_cmd(struct esp *esp, u8 val) in scsi_esp_cmd() argument
132 int idx = esp->esp_event_cur; in scsi_esp_cmd()
134 p = &esp->esp_event_log[idx]; in scsi_esp_cmd()
137 esp_log_fill_regs(esp, p); in scsi_esp_cmd()
139 esp->esp_event_cur = (idx + 1) & (ESP_EVENT_LOG_SZ - 1); in scsi_esp_cmd()
146 static void esp_send_dma_cmd(struct esp *esp, int len, int max_len, int cmd) in esp_send_dma_cmd() argument
148 if (esp->flags & ESP_FLAG_USE_FIFO) { in esp_send_dma_cmd()
151 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in esp_send_dma_cmd()
153 esp_write8(esp->command_block[i], ESP_FDATA); in esp_send_dma_cmd()
154 scsi_esp_cmd(esp, cmd); in esp_send_dma_cmd()
156 if (esp->rev == FASHME) in esp_send_dma_cmd()
157 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in esp_send_dma_cmd()
159 esp->ops->send_dma_cmd(esp, esp->command_block_dma, in esp_send_dma_cmd()
164 static void esp_event(struct esp *esp, u8 val) in esp_event() argument
167 int idx = esp->esp_event_cur; in esp_event()
169 p = &esp->esp_event_log[idx]; in esp_event()
172 esp_log_fill_regs(esp, p); in esp_event()
174 esp->esp_event_cur = (idx + 1) & (ESP_EVENT_LOG_SZ - 1); in esp_event()
176 esp->event = val; in esp_event()
179 static void esp_dump_cmd_log(struct esp *esp) in esp_dump_cmd_log() argument
181 int idx = esp->esp_event_cur; in esp_dump_cmd_log()
184 shost_printk(KERN_INFO, esp->host, "Dumping command log\n"); in esp_dump_cmd_log()
186 struct esp_event_ent *p = &esp->esp_event_log[idx]; in esp_dump_cmd_log()
188 shost_printk(KERN_INFO, esp->host, in esp_dump_cmd_log()
200 static void esp_flush_fifo(struct esp *esp) in esp_flush_fifo() argument
202 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in esp_flush_fifo()
203 if (esp->rev == ESP236) { in esp_flush_fifo()
208 shost_printk(KERN_ALERT, esp->host, in esp_flush_fifo()
217 static void hme_read_fifo(struct esp *esp) in hme_read_fifo() argument
223 esp->fifo[idx++] = esp_read8(ESP_FDATA); in hme_read_fifo()
224 esp->fifo[idx++] = esp_read8(ESP_FDATA); in hme_read_fifo()
226 if (esp->sreg2 & ESP_STAT2_F1BYTE) { in hme_read_fifo()
228 esp->fifo[idx++] = esp_read8(ESP_FDATA); in hme_read_fifo()
229 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in hme_read_fifo()
231 esp->fifo_cnt = idx; in hme_read_fifo()
234 static void esp_set_all_config3(struct esp *esp, u8 val) in esp_set_all_config3() argument
239 esp->target[i].esp_config3 = val; in esp_set_all_config3()
243 static void esp_reset_esp(struct esp *esp) in esp_reset_esp() argument
248 scsi_esp_cmd(esp, ESP_CMD_RC); in esp_reset_esp()
249 scsi_esp_cmd(esp, ESP_CMD_NULL | ESP_CMD_DMA); in esp_reset_esp()
250 if (esp->rev == FAST) in esp_reset_esp()
252 scsi_esp_cmd(esp, ESP_CMD_NULL | ESP_CMD_DMA); in esp_reset_esp()
257 esp->max_period = ((35 * esp->ccycle) / 1000); in esp_reset_esp()
258 if (esp->rev == FAST) { in esp_reset_esp()
262 esp->rev = FAS236; in esp_reset_esp()
264 esp->rev = FASHME; /* Version is usually '5'. */ in esp_reset_esp()
266 esp->rev = FAS100A; in esp_reset_esp()
267 esp->min_period = ((4 * esp->ccycle) / 1000); in esp_reset_esp()
269 esp->min_period = ((5 * esp->ccycle) / 1000); in esp_reset_esp()
271 if (esp->rev == FAS236) { in esp_reset_esp()
280 esp->rev = PCSCSI; in esp_reset_esp()
281 esp_write8(esp->config4, ESP_CFG4); in esp_reset_esp()
284 esp->max_period = (esp->max_period + 3)>>2; in esp_reset_esp()
285 esp->min_period = (esp->min_period + 3)>>2; in esp_reset_esp()
287 esp_write8(esp->config1, ESP_CFG1); in esp_reset_esp()
288 switch (esp->rev) { in esp_reset_esp()
294 esp_write8(esp->config2, ESP_CFG2); in esp_reset_esp()
299 esp_write8(esp->config2, ESP_CFG2); in esp_reset_esp()
300 esp->prev_cfg3 = esp->target[0].esp_config3; in esp_reset_esp()
301 esp_write8(esp->prev_cfg3, ESP_CFG3); in esp_reset_esp()
305 esp->config2 |= (ESP_CONFIG2_HME32 | ESP_CONFIG2_HMEFENAB); in esp_reset_esp()
311 esp_write8(esp->config2, ESP_CFG2); in esp_reset_esp()
312 if (esp->rev == FASHME) { in esp_reset_esp()
313 u8 cfg3 = esp->target[0].esp_config3; in esp_reset_esp()
316 if (esp->scsi_id >= 8) in esp_reset_esp()
318 esp_set_all_config3(esp, cfg3); in esp_reset_esp()
320 u32 cfg3 = esp->target[0].esp_config3; in esp_reset_esp()
323 esp_set_all_config3(esp, cfg3); in esp_reset_esp()
325 esp->prev_cfg3 = esp->target[0].esp_config3; in esp_reset_esp()
326 esp_write8(esp->prev_cfg3, ESP_CFG3); in esp_reset_esp()
327 if (esp->rev == FASHME) { in esp_reset_esp()
328 esp->radelay = 80; in esp_reset_esp()
330 if (esp->flags & ESP_FLAG_DIFFERENTIAL) in esp_reset_esp()
331 esp->radelay = 0; in esp_reset_esp()
333 esp->radelay = 96; in esp_reset_esp()
339 esp_write8(esp->config2, ESP_CFG2); in esp_reset_esp()
340 esp_set_all_config3(esp, in esp_reset_esp()
341 (esp->target[0].esp_config3 | in esp_reset_esp()
343 esp->prev_cfg3 = esp->target[0].esp_config3; in esp_reset_esp()
344 esp_write8(esp->prev_cfg3, ESP_CFG3); in esp_reset_esp()
345 esp->radelay = 32; in esp_reset_esp()
353 esp_write8(esp->cfact, ESP_CFACT); in esp_reset_esp()
355 esp->prev_stp = 0; in esp_reset_esp()
356 esp_write8(esp->prev_stp, ESP_STP); in esp_reset_esp()
358 esp->prev_soff = 0; in esp_reset_esp()
359 esp_write8(esp->prev_soff, ESP_SOFF); in esp_reset_esp()
361 esp_write8(esp->neg_defp, ESP_TIMEO); in esp_reset_esp()
368 static void esp_map_dma(struct esp *esp, struct scsi_cmnd *cmd) in esp_map_dma() argument
378 spriv->u.num_sg = esp->ops->map_sg(esp, sg, scsi_sg_count(cmd), dir); in esp_map_dma()
415 static void esp_advance_dma(struct esp *esp, struct esp_cmd_entry *ent, in esp_advance_dma() argument
428 shost_printk(KERN_ERR, esp->host, in esp_advance_dma()
430 shost_printk(KERN_ERR, esp->host, in esp_advance_dma()
442 static void esp_unmap_dma(struct esp *esp, struct scsi_cmnd *cmd) in esp_unmap_dma() argument
450 esp->ops->unmap_sg(esp, scsi_sglist(cmd), spriv->u.num_sg, dir); in esp_unmap_dma()
453 static void esp_save_pointers(struct esp *esp, struct esp_cmd_entry *ent) in esp_save_pointers() argument
467 static void esp_restore_pointers(struct esp *esp, struct esp_cmd_entry *ent) in esp_restore_pointers() argument
481 static void esp_check_command_len(struct esp *esp, struct scsi_cmnd *cmd) in esp_check_command_len() argument
486 esp->flags &= ~ESP_FLAG_DOING_SLOWCMD; in esp_check_command_len()
488 esp->flags |= ESP_FLAG_DOING_SLOWCMD; in esp_check_command_len()
492 static void esp_write_tgt_config3(struct esp *esp, int tgt) in esp_write_tgt_config3() argument
494 if (esp->rev > ESP100A) { in esp_write_tgt_config3()
495 u8 val = esp->target[tgt].esp_config3; in esp_write_tgt_config3()
497 if (val != esp->prev_cfg3) { in esp_write_tgt_config3()
498 esp->prev_cfg3 = val; in esp_write_tgt_config3()
504 static void esp_write_tgt_sync(struct esp *esp, int tgt) in esp_write_tgt_sync() argument
506 u8 off = esp->target[tgt].esp_offset; in esp_write_tgt_sync()
507 u8 per = esp->target[tgt].esp_period; in esp_write_tgt_sync()
509 if (off != esp->prev_soff) { in esp_write_tgt_sync()
510 esp->prev_soff = off; in esp_write_tgt_sync()
513 if (per != esp->prev_stp) { in esp_write_tgt_sync()
514 esp->prev_stp = per; in esp_write_tgt_sync()
519 static u32 esp_dma_length_limit(struct esp *esp, u32 dma_addr, u32 dma_len) in esp_dma_length_limit() argument
521 if (esp->rev == FASHME) { in esp_dma_length_limit()
636 static void esp_autosense(struct esp *esp, struct esp_cmd_entry *ent) in esp_autosense() argument
652 ent->sense_dma = esp->ops->map_single(esp, in esp_autosense()
659 esp->active_cmd = ent; in esp_autosense()
661 p = esp->command_block; in esp_autosense()
662 esp->msg_out_len = 0; in esp_autosense()
673 esp->select_state = ESP_SELECT_BASIC; in esp_autosense()
676 if (esp->rev == FASHME) in esp_autosense()
680 esp_write_tgt_sync(esp, tgt); in esp_autosense()
681 esp_write_tgt_config3(esp, tgt); in esp_autosense()
683 val = (p - esp->command_block); in esp_autosense()
685 esp_send_dma_cmd(esp, val, 16, ESP_CMD_SELA); in esp_autosense()
688 static struct esp_cmd_entry *find_and_prep_issuable_command(struct esp *esp) in find_and_prep_issuable_command() argument
692 list_for_each_entry(ent, &esp->queued_cmds, list) { in find_and_prep_issuable_command()
719 static void esp_maybe_execute_command(struct esp *esp) in esp_maybe_execute_command() argument
730 if (esp->active_cmd || in esp_maybe_execute_command()
731 (esp->flags & ESP_FLAG_RESETTING)) in esp_maybe_execute_command()
734 ent = find_and_prep_issuable_command(esp); in esp_maybe_execute_command()
739 esp_autosense(esp, ent); in esp_maybe_execute_command()
747 tp = &esp->target[tgt]; in esp_maybe_execute_command()
750 list_move(&ent->list, &esp->active_cmds); in esp_maybe_execute_command()
752 esp->active_cmd = ent; in esp_maybe_execute_command()
754 esp_map_dma(esp, cmd); in esp_maybe_execute_command()
755 esp_save_pointers(esp, ent); in esp_maybe_execute_command()
757 esp_check_command_len(esp, cmd); in esp_maybe_execute_command()
759 p = esp->command_block; in esp_maybe_execute_command()
761 esp->msg_out_len = 0; in esp_maybe_execute_command()
782 if (esp->rev == FASHME && esp_need_to_nego_wide(tp)) { in esp_maybe_execute_command()
783 esp->msg_out_len = in esp_maybe_execute_command()
784 spi_populate_width_msg(&esp->msg_out[0], in esp_maybe_execute_command()
789 esp->msg_out_len = in esp_maybe_execute_command()
790 spi_populate_sync_msg(&esp->msg_out[0], in esp_maybe_execute_command()
800 esp->flags |= ESP_FLAG_DOING_SLOWCMD; in esp_maybe_execute_command()
813 if (ent->tag[0] && esp->rev == ESP100) { in esp_maybe_execute_command()
817 esp->flags |= ESP_FLAG_DOING_SLOWCMD; in esp_maybe_execute_command()
820 if (!(esp->flags & ESP_FLAG_DOING_SLOWCMD)) { in esp_maybe_execute_command()
832 esp->select_state = ESP_SELECT_BASIC; in esp_maybe_execute_command()
834 esp->cmd_bytes_left = cmd->cmd_len; in esp_maybe_execute_command()
835 esp->cmd_bytes_ptr = &cmd->cmnd[0]; in esp_maybe_execute_command()
838 for (i = esp->msg_out_len - 1; in esp_maybe_execute_command()
840 esp->msg_out[i + 2] = esp->msg_out[i]; in esp_maybe_execute_command()
841 esp->msg_out[0] = ent->tag[0]; in esp_maybe_execute_command()
842 esp->msg_out[1] = ent->tag[1]; in esp_maybe_execute_command()
843 esp->msg_out_len += 2; in esp_maybe_execute_command()
847 esp->select_state = ESP_SELECT_MSGOUT; in esp_maybe_execute_command()
850 if (esp->rev == FASHME) in esp_maybe_execute_command()
854 esp_write_tgt_sync(esp, tgt); in esp_maybe_execute_command()
855 esp_write_tgt_config3(esp, tgt); in esp_maybe_execute_command()
857 val = (p - esp->command_block); in esp_maybe_execute_command()
866 esp_send_dma_cmd(esp, val, 16, start_cmd); in esp_maybe_execute_command()
869 static struct esp_cmd_entry *esp_get_ent(struct esp *esp) in esp_get_ent() argument
871 struct list_head *head = &esp->esp_cmd_pool; in esp_get_ent()
884 static void esp_put_ent(struct esp *esp, struct esp_cmd_entry *ent) in esp_put_ent() argument
886 list_add(&ent->list, &esp->esp_cmd_pool); in esp_put_ent()
889 static void esp_cmd_is_done(struct esp *esp, struct esp_cmd_entry *ent, in esp_cmd_is_done() argument
896 esp->active_cmd = NULL; in esp_cmd_is_done()
897 esp_unmap_dma(esp, cmd); in esp_cmd_is_done()
907 esp->ops->unmap_single(esp, ent->sense_dma, in esp_cmd_is_done()
925 esp->host->unique_id, tgt, lun); in esp_cmd_is_done()
935 esp_put_ent(esp, ent); in esp_cmd_is_done()
937 esp_maybe_execute_command(esp); in esp_cmd_is_done()
946 static void esp_event_queue_full(struct esp *esp, struct esp_cmd_entry *ent) in esp_event_queue_full() argument
957 struct esp *esp = shost_priv(dev->host); in esp_queuecommand_lck() local
961 ent = esp_get_ent(esp); in esp_queuecommand_lck()
972 list_add_tail(&ent->list, &esp->queued_cmds); in esp_queuecommand_lck()
974 esp_maybe_execute_command(esp); in esp_queuecommand_lck()
981 static int esp_check_gross_error(struct esp *esp) in DEF_SCSI_QCMD()
983 if (esp->sreg & ESP_STAT_SPAM) { in DEF_SCSI_QCMD()
990 shost_printk(KERN_ERR, esp->host, in DEF_SCSI_QCMD()
991 "Gross error sreg[%02x]\n", esp->sreg); in DEF_SCSI_QCMD()
998 static int esp_check_spur_intr(struct esp *esp) in esp_check_spur_intr() argument
1000 switch (esp->rev) { in esp_check_spur_intr()
1006 esp->sreg &= ~ESP_STAT_INTR; in esp_check_spur_intr()
1010 if (!(esp->sreg & ESP_STAT_INTR)) { in esp_check_spur_intr()
1011 if (esp->ireg & ESP_INTR_SR) in esp_check_spur_intr()
1017 if (!esp->ops->dma_error(esp)) { in esp_check_spur_intr()
1018 shost_printk(KERN_ERR, esp->host, in esp_check_spur_intr()
1020 esp->sreg); in esp_check_spur_intr()
1024 shost_printk(KERN_ERR, esp->host, "DMA error\n"); in esp_check_spur_intr()
1035 static void esp_schedule_reset(struct esp *esp) in esp_schedule_reset() argument
1039 esp->flags |= ESP_FLAG_RESETTING; in esp_schedule_reset()
1040 esp_event(esp, ESP_EVENT_RESET); in esp_schedule_reset()
1047 static struct esp_cmd_entry *esp_reconnect_with_tag(struct esp *esp, in esp_reconnect_with_tag() argument
1054 shost_printk(KERN_ERR, esp->host, in esp_reconnect_with_tag()
1062 if (esp->ops->irq_pending(esp)) in esp_reconnect_with_tag()
1066 shost_printk(KERN_ERR, esp->host, in esp_reconnect_with_tag()
1071 esp->sreg = esp_read8(ESP_STATUS); in esp_reconnect_with_tag()
1072 esp->ireg = esp_read8(ESP_INTRPT); in esp_reconnect_with_tag()
1075 i, esp->ireg, esp->sreg); in esp_reconnect_with_tag()
1077 if (esp->ireg & ESP_INTR_DC) { in esp_reconnect_with_tag()
1078 shost_printk(KERN_ERR, esp->host, in esp_reconnect_with_tag()
1083 if ((esp->sreg & ESP_STAT_PMASK) != ESP_MIP) { in esp_reconnect_with_tag()
1084 shost_printk(KERN_ERR, esp->host, in esp_reconnect_with_tag()
1085 "Reconnect, not MIP sreg[%02x].\n", esp->sreg); in esp_reconnect_with_tag()
1090 esp->command_block[0] = 0xff; in esp_reconnect_with_tag()
1091 esp->command_block[1] = 0xff; in esp_reconnect_with_tag()
1092 esp->ops->send_dma_cmd(esp, esp->command_block_dma, in esp_reconnect_with_tag()
1096 scsi_esp_cmd(esp, ESP_CMD_MOK); in esp_reconnect_with_tag()
1099 if (esp->ops->irq_pending(esp)) { in esp_reconnect_with_tag()
1100 esp->sreg = esp_read8(ESP_STATUS); in esp_reconnect_with_tag()
1101 esp->ireg = esp_read8(ESP_INTRPT); in esp_reconnect_with_tag()
1102 if (esp->ireg & ESP_INTR_FDONE) in esp_reconnect_with_tag()
1108 shost_printk(KERN_ERR, esp->host, "Reconnect IRQ2 timeout\n"); in esp_reconnect_with_tag()
1111 esp->ops->dma_drain(esp); in esp_reconnect_with_tag()
1112 esp->ops->dma_invalidate(esp); in esp_reconnect_with_tag()
1115 i, esp->ireg, esp->sreg, in esp_reconnect_with_tag()
1116 esp->command_block[0], in esp_reconnect_with_tag()
1117 esp->command_block[1]); in esp_reconnect_with_tag()
1119 if (esp->command_block[0] < SIMPLE_QUEUE_TAG || in esp_reconnect_with_tag()
1120 esp->command_block[0] > ORDERED_QUEUE_TAG) { in esp_reconnect_with_tag()
1121 shost_printk(KERN_ERR, esp->host, in esp_reconnect_with_tag()
1123 esp->command_block[0]); in esp_reconnect_with_tag()
1127 ent = lp->tagged_cmds[esp->command_block[1]]; in esp_reconnect_with_tag()
1129 shost_printk(KERN_ERR, esp->host, in esp_reconnect_with_tag()
1131 esp->command_block[1]); in esp_reconnect_with_tag()
1138 static int esp_reconnect(struct esp *esp) in esp_reconnect() argument
1146 BUG_ON(esp->active_cmd); in esp_reconnect()
1147 if (esp->rev == FASHME) { in esp_reconnect()
1151 target = esp->fifo[0]; in esp_reconnect()
1152 lun = esp->fifo[1] & 0x7; in esp_reconnect()
1162 if (!(bits & esp->scsi_id_mask)) in esp_reconnect()
1164 bits &= ~esp->scsi_id_mask; in esp_reconnect()
1171 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in esp_reconnect()
1172 if (esp->rev == ESP100) { in esp_reconnect()
1182 scsi_esp_cmd(esp, ESP_CMD_NULL); in esp_reconnect()
1185 esp_write_tgt_sync(esp, target); in esp_reconnect()
1186 esp_write_tgt_config3(esp, target); in esp_reconnect()
1188 scsi_esp_cmd(esp, ESP_CMD_MOK); in esp_reconnect()
1190 if (esp->rev == FASHME) in esp_reconnect()
1194 tp = &esp->target[target]; in esp_reconnect()
1197 shost_printk(KERN_ERR, esp->host, in esp_reconnect()
1206 ent = esp_reconnect_with_tag(esp, lp); in esp_reconnect()
1211 esp->active_cmd = ent; in esp_reconnect()
1214 esp->msg_out[0] = ABORT_TASK_SET; in esp_reconnect()
1215 esp->msg_out_len = 1; in esp_reconnect()
1216 scsi_esp_cmd(esp, ESP_CMD_SATN); in esp_reconnect()
1219 esp_event(esp, ESP_EVENT_CHECK_PHASE); in esp_reconnect()
1220 esp_restore_pointers(esp, ent); in esp_reconnect()
1221 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK; in esp_reconnect()
1225 esp_schedule_reset(esp); in esp_reconnect()
1229 static int esp_finish_select(struct esp *esp) in esp_finish_select() argument
1235 orig_select_state = esp->select_state; in esp_finish_select()
1238 esp->select_state = ESP_SELECT_NONE; in esp_finish_select()
1240 esp->seqreg = esp_read8(ESP_SSTEP) & ESP_STEP_VBITS; in esp_finish_select()
1241 ent = esp->active_cmd; in esp_finish_select()
1244 if (esp->ops->dma_error(esp)) { in esp_finish_select()
1248 esp_schedule_reset(esp); in esp_finish_select()
1249 esp_cmd_is_done(esp, ent, cmd, (DID_ERROR << 16)); in esp_finish_select()
1253 esp->ops->dma_invalidate(esp); in esp_finish_select()
1255 if (esp->ireg == (ESP_INTR_RSEL | ESP_INTR_FDONE)) { in esp_finish_select()
1256 struct esp_target_data *tp = &esp->target[cmd->device->id]; in esp_finish_select()
1263 esp_unmap_dma(esp, cmd); in esp_finish_select()
1266 esp->flags &= ~ESP_FLAG_DOING_SLOWCMD; in esp_finish_select()
1267 esp->cmd_bytes_ptr = NULL; in esp_finish_select()
1268 esp->cmd_bytes_left = 0; in esp_finish_select()
1270 esp->ops->unmap_single(esp, ent->sense_dma, in esp_finish_select()
1279 list_move(&ent->list, &esp->queued_cmds); in esp_finish_select()
1280 esp->active_cmd = NULL; in esp_finish_select()
1288 if (esp->ireg == ESP_INTR_DC) { in esp_finish_select()
1295 esp->target[dev->id].flags |= ESP_TGT_CHECK_NEGO; in esp_finish_select()
1297 scsi_esp_cmd(esp, ESP_CMD_ESEL); in esp_finish_select()
1298 esp_cmd_is_done(esp, ent, cmd, (DID_BAD_TARGET << 16)); in esp_finish_select()
1302 if (esp->ireg == (ESP_INTR_FDONE | ESP_INTR_BSERV)) { in esp_finish_select()
1306 if (esp->rev <= ESP236) { in esp_finish_select()
1309 scsi_esp_cmd(esp, ESP_CMD_NULL); in esp_finish_select()
1312 (!esp->prev_soff || in esp_finish_select()
1313 ((esp->sreg & ESP_STAT_PMASK) != ESP_DIP))) in esp_finish_select()
1314 esp_flush_fifo(esp); in esp_finish_select()
1321 esp_event(esp, ESP_EVENT_CHECK_PHASE); in esp_finish_select()
1325 shost_printk(KERN_INFO, esp->host, in esp_finish_select()
1326 "Unexpected selection completion ireg[%x]\n", esp->ireg); in esp_finish_select()
1327 esp_schedule_reset(esp); in esp_finish_select()
1331 static int esp_data_bytes_sent(struct esp *esp, struct esp_cmd_entry *ent, in esp_data_bytes_sent() argument
1337 if (esp->prev_cfg3 & ESP_CONFIG3_EWIDE) in esp_data_bytes_sent()
1341 if (!(esp->sreg & ESP_STAT_TCNT)) { in esp_data_bytes_sent()
1344 if (esp->rev == FASHME) in esp_data_bytes_sent()
1346 if (esp->rev == PCSCSI && (esp->config2 & ESP_CONFIG2_FENAB)) in esp_data_bytes_sent()
1350 bytes_sent = esp->data_dma_len; in esp_data_bytes_sent()
1386 if (!esp->prev_soff) { in esp_data_bytes_sent()
1390 if (esp->rev == ESP100) { in esp_data_bytes_sent()
1404 esp->sreg = esp_read8(ESP_STATUS); in esp_data_bytes_sent()
1405 phase = esp->sreg & ESP_STAT_PMASK; in esp_data_bytes_sent()
1419 esp_flush_fifo(esp); in esp_data_bytes_sent()
1424 static void esp_setsync(struct esp *esp, struct esp_target_data *tp, in esp_setsync() argument
1434 esp_soff |= esp->radelay; in esp_setsync()
1435 if (esp->rev >= FAS236) { in esp_setsync()
1437 if (esp->rev >= FAS100A) in esp_setsync()
1441 if (esp->rev == FASHME) in esp_setsync()
1442 esp_soff &= ~esp->radelay; in esp_setsync()
1447 esp->prev_cfg3 = tp->esp_config3; in esp_setsync()
1448 esp_write8(esp->prev_cfg3, ESP_CFG3); in esp_setsync()
1452 tp->esp_period = esp->prev_stp = esp_stp; in esp_setsync()
1453 tp->esp_offset = esp->prev_soff = esp_soff; in esp_setsync()
1463 static void esp_msgin_reject(struct esp *esp) in esp_msgin_reject() argument
1465 struct esp_cmd_entry *ent = esp->active_cmd; in esp_msgin_reject()
1471 tp = &esp->target[tgt]; in esp_msgin_reject()
1478 scsi_esp_cmd(esp, ESP_CMD_RATN); in esp_msgin_reject()
1480 esp->msg_out_len = in esp_msgin_reject()
1481 spi_populate_sync_msg(&esp->msg_out[0], in esp_msgin_reject()
1485 scsi_esp_cmd(esp, ESP_CMD_SATN); in esp_msgin_reject()
1494 esp_setsync(esp, tp, 0, 0, 0, 0); in esp_msgin_reject()
1495 scsi_esp_cmd(esp, ESP_CMD_RATN); in esp_msgin_reject()
1499 esp->msg_out[0] = ABORT_TASK_SET; in esp_msgin_reject()
1500 esp->msg_out_len = 1; in esp_msgin_reject()
1501 scsi_esp_cmd(esp, ESP_CMD_SATN); in esp_msgin_reject()
1504 static void esp_msgin_sdtr(struct esp *esp, struct esp_target_data *tp) in esp_msgin_sdtr() argument
1506 u8 period = esp->msg_in[3]; in esp_msgin_sdtr()
1507 u8 offset = esp->msg_in[4]; in esp_msgin_sdtr()
1519 if (period > esp->max_period) { in esp_msgin_sdtr()
1523 if (period < esp->min_period) in esp_msgin_sdtr()
1526 one_clock = esp->ccycle / 1000; in esp_msgin_sdtr()
1528 if (stp && esp->rev >= FAS236) { in esp_msgin_sdtr()
1536 esp_setsync(esp, tp, period, offset, stp, offset); in esp_msgin_sdtr()
1540 esp->msg_out[0] = MESSAGE_REJECT; in esp_msgin_sdtr()
1541 esp->msg_out_len = 1; in esp_msgin_sdtr()
1542 scsi_esp_cmd(esp, ESP_CMD_SATN); in esp_msgin_sdtr()
1548 esp->msg_out_len = in esp_msgin_sdtr()
1549 spi_populate_sync_msg(&esp->msg_out[0], in esp_msgin_sdtr()
1552 scsi_esp_cmd(esp, ESP_CMD_SATN); in esp_msgin_sdtr()
1555 static void esp_msgin_wdtr(struct esp *esp, struct esp_target_data *tp) in esp_msgin_wdtr() argument
1557 int size = 8 << esp->msg_in[3]; in esp_msgin_wdtr()
1560 if (esp->rev != FASHME) in esp_msgin_wdtr()
1578 esp->prev_cfg3 = cfg3; in esp_msgin_wdtr()
1587 scsi_esp_cmd(esp, ESP_CMD_RATN); in esp_msgin_wdtr()
1589 esp->msg_out_len = in esp_msgin_wdtr()
1590 spi_populate_sync_msg(&esp->msg_out[0], in esp_msgin_wdtr()
1594 scsi_esp_cmd(esp, ESP_CMD_SATN); in esp_msgin_wdtr()
1599 esp->msg_out[0] = MESSAGE_REJECT; in esp_msgin_wdtr()
1600 esp->msg_out_len = 1; in esp_msgin_wdtr()
1601 scsi_esp_cmd(esp, ESP_CMD_SATN); in esp_msgin_wdtr()
1604 static void esp_msgin_extended(struct esp *esp) in esp_msgin_extended() argument
1606 struct esp_cmd_entry *ent = esp->active_cmd; in esp_msgin_extended()
1611 tp = &esp->target[tgt]; in esp_msgin_extended()
1612 if (esp->msg_in[2] == EXTENDED_SDTR) { in esp_msgin_extended()
1613 esp_msgin_sdtr(esp, tp); in esp_msgin_extended()
1616 if (esp->msg_in[2] == EXTENDED_WDTR) { in esp_msgin_extended()
1617 esp_msgin_wdtr(esp, tp); in esp_msgin_extended()
1621 shost_printk(KERN_INFO, esp->host, in esp_msgin_extended()
1622 "Unexpected extended msg type %x\n", esp->msg_in[2]); in esp_msgin_extended()
1624 esp->msg_out[0] = ABORT_TASK_SET; in esp_msgin_extended()
1625 esp->msg_out_len = 1; in esp_msgin_extended()
1626 scsi_esp_cmd(esp, ESP_CMD_SATN); in esp_msgin_extended()
1632 static int esp_msgin_process(struct esp *esp) in esp_msgin_process() argument
1634 u8 msg0 = esp->msg_in[0]; in esp_msgin_process()
1635 int len = esp->msg_in_len; in esp_msgin_process()
1639 shost_printk(KERN_INFO, esp->host, in esp_msgin_process()
1648 if (len < esp->msg_in[1] + 2) in esp_msgin_process()
1650 esp_msgin_extended(esp); in esp_msgin_process()
1659 if (esp->msg_in[1] != 1) in esp_msgin_process()
1662 ent = esp->active_cmd; in esp_msgin_process()
1676 esp_restore_pointers(esp, esp->active_cmd); in esp_msgin_process()
1679 esp_save_pointers(esp, esp->active_cmd); in esp_msgin_process()
1684 struct esp_cmd_entry *ent = esp->active_cmd; in esp_msgin_process()
1687 esp_event(esp, ESP_EVENT_FREE_BUS); in esp_msgin_process()
1688 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK; in esp_msgin_process()
1692 esp_msgin_reject(esp); in esp_msgin_process()
1697 esp->msg_out[0] = MESSAGE_REJECT; in esp_msgin_process()
1698 esp->msg_out_len = 1; in esp_msgin_process()
1699 scsi_esp_cmd(esp, ESP_CMD_SATN); in esp_msgin_process()
1704 static int esp_process_event(struct esp *esp) in esp_process_event() argument
1711 esp->event, esp->sreg & ESP_STAT_PMASK); in esp_process_event()
1712 switch (esp->event) { in esp_process_event()
1714 switch (esp->sreg & ESP_STAT_PMASK) { in esp_process_event()
1716 esp_event(esp, ESP_EVENT_DATA_OUT); in esp_process_event()
1719 esp_event(esp, ESP_EVENT_DATA_IN); in esp_process_event()
1722 esp_flush_fifo(esp); in esp_process_event()
1723 scsi_esp_cmd(esp, ESP_CMD_ICCSEQ); in esp_process_event()
1724 esp_event(esp, ESP_EVENT_STATUS); in esp_process_event()
1725 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK; in esp_process_event()
1729 esp_event(esp, ESP_EVENT_MSGOUT); in esp_process_event()
1733 esp_event(esp, ESP_EVENT_MSGIN); in esp_process_event()
1737 esp_event(esp, ESP_EVENT_CMD_START); in esp_process_event()
1741 shost_printk(KERN_INFO, esp->host, in esp_process_event()
1743 esp->sreg); in esp_process_event()
1744 esp_schedule_reset(esp); in esp_process_event()
1755 struct esp_cmd_entry *ent = esp->active_cmd; in esp_process_event()
1760 if (esp->rev == ESP100) in esp_process_event()
1761 scsi_esp_cmd(esp, ESP_CMD_NULL); in esp_process_event()
1768 if (esp->ops->dma_length_limit) in esp_process_event()
1769 dma_len = esp->ops->dma_length_limit(esp, dma_addr, in esp_process_event()
1772 dma_len = esp_dma_length_limit(esp, dma_addr, dma_len); in esp_process_event()
1774 esp->data_dma_len = dma_len; in esp_process_event()
1777 shost_printk(KERN_ERR, esp->host, in esp_process_event()
1779 shost_printk(KERN_ERR, esp->host, in esp_process_event()
1783 esp_schedule_reset(esp); in esp_process_event()
1790 esp->ops->send_dma_cmd(esp, dma_addr, dma_len, dma_len, in esp_process_event()
1792 esp_event(esp, ESP_EVENT_DATA_DONE); in esp_process_event()
1796 struct esp_cmd_entry *ent = esp->active_cmd; in esp_process_event()
1800 if (esp->ops->dma_error(esp)) { in esp_process_event()
1801 shost_printk(KERN_INFO, esp->host, in esp_process_event()
1803 esp_schedule_reset(esp); in esp_process_event()
1810 esp->ops->dma_drain(esp); in esp_process_event()
1812 esp->ops->dma_invalidate(esp); in esp_process_event()
1814 if (esp->ireg != ESP_INTR_BSERV) { in esp_process_event()
1818 shost_printk(KERN_INFO, esp->host, in esp_process_event()
1820 esp_schedule_reset(esp); in esp_process_event()
1824 bytes_sent = esp_data_bytes_sent(esp, ent, cmd); in esp_process_event()
1831 esp_schedule_reset(esp); in esp_process_event()
1835 esp_advance_dma(esp, ent, cmd, bytes_sent); in esp_process_event()
1836 esp_event(esp, ESP_EVENT_CHECK_PHASE); in esp_process_event()
1841 struct esp_cmd_entry *ent = esp->active_cmd; in esp_process_event()
1843 if (esp->ireg & ESP_INTR_FDONE) { in esp_process_event()
1846 scsi_esp_cmd(esp, ESP_CMD_MOK); in esp_process_event()
1847 } else if (esp->ireg == ESP_INTR_BSERV) { in esp_process_event()
1850 esp_event(esp, ESP_EVENT_MSGIN); in esp_process_event()
1855 shost_printk(KERN_INFO, esp->host, in esp_process_event()
1858 esp_schedule_reset(esp); in esp_process_event()
1862 esp_event(esp, ESP_EVENT_FREE_BUS); in esp_process_event()
1863 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK; in esp_process_event()
1867 struct esp_cmd_entry *ent = esp->active_cmd; in esp_process_event()
1872 scsi_esp_cmd(esp, ESP_CMD_ESEL); in esp_process_event()
1878 esp_event_queue_full(esp, ent); in esp_process_event()
1883 esp_autosense(esp, ent); in esp_process_event()
1885 esp_cmd_is_done(esp, ent, cmd, in esp_process_event()
1895 esp->active_cmd = NULL; in esp_process_event()
1896 esp_maybe_execute_command(esp); in esp_process_event()
1898 shost_printk(KERN_INFO, esp->host, in esp_process_event()
1901 esp_schedule_reset(esp); in esp_process_event()
1904 if (esp->active_cmd) in esp_process_event()
1905 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK; in esp_process_event()
1909 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in esp_process_event()
1914 for (i = 0; i < esp->msg_out_len; i++) in esp_process_event()
1915 printk("%02x ", esp->msg_out[i]); in esp_process_event()
1919 if (esp->rev == FASHME) { in esp_process_event()
1923 for (i = 0; i < esp->msg_out_len; i++) { in esp_process_event()
1924 esp_write8(esp->msg_out[i], ESP_FDATA); in esp_process_event()
1927 scsi_esp_cmd(esp, ESP_CMD_TI); in esp_process_event()
1929 if (esp->msg_out_len == 1) { in esp_process_event()
1930 esp_write8(esp->msg_out[0], ESP_FDATA); in esp_process_event()
1931 scsi_esp_cmd(esp, ESP_CMD_TI); in esp_process_event()
1932 } else if (esp->flags & ESP_FLAG_USE_FIFO) { in esp_process_event()
1933 for (i = 0; i < esp->msg_out_len; i++) in esp_process_event()
1934 esp_write8(esp->msg_out[i], ESP_FDATA); in esp_process_event()
1935 scsi_esp_cmd(esp, ESP_CMD_TI); in esp_process_event()
1938 memcpy(esp->command_block, in esp_process_event()
1939 esp->msg_out, in esp_process_event()
1940 esp->msg_out_len); in esp_process_event()
1942 esp->ops->send_dma_cmd(esp, in esp_process_event()
1943 esp->command_block_dma, in esp_process_event()
1944 esp->msg_out_len, in esp_process_event()
1945 esp->msg_out_len, in esp_process_event()
1950 esp_event(esp, ESP_EVENT_MSGOUT_DONE); in esp_process_event()
1954 if (esp->rev == FASHME) { in esp_process_event()
1955 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in esp_process_event()
1957 if (esp->msg_out_len > 1) in esp_process_event()
1958 esp->ops->dma_invalidate(esp); in esp_process_event()
1961 if (!(esp->ireg & ESP_INTR_DC)) { in esp_process_event()
1962 if (esp->rev != FASHME) in esp_process_event()
1963 scsi_esp_cmd(esp, ESP_CMD_NULL); in esp_process_event()
1965 esp_event(esp, ESP_EVENT_CHECK_PHASE); in esp_process_event()
1968 if (esp->ireg & ESP_INTR_BSERV) { in esp_process_event()
1969 if (esp->rev == FASHME) { in esp_process_event()
1972 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in esp_process_event()
1974 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in esp_process_event()
1975 if (esp->rev == ESP100) in esp_process_event()
1976 scsi_esp_cmd(esp, ESP_CMD_NULL); in esp_process_event()
1978 scsi_esp_cmd(esp, ESP_CMD_TI); in esp_process_event()
1979 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK; in esp_process_event()
1982 if (esp->ireg & ESP_INTR_FDONE) { in esp_process_event()
1985 if (esp->rev == FASHME) in esp_process_event()
1986 val = esp->fifo[0]; in esp_process_event()
1989 esp->msg_in[esp->msg_in_len++] = val; in esp_process_event()
1993 if (!esp_msgin_process(esp)) in esp_process_event()
1994 esp->msg_in_len = 0; in esp_process_event()
1996 if (esp->rev == FASHME) in esp_process_event()
1997 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in esp_process_event()
1999 scsi_esp_cmd(esp, ESP_CMD_MOK); in esp_process_event()
2001 if (esp->event != ESP_EVENT_FREE_BUS) in esp_process_event()
2002 esp_event(esp, ESP_EVENT_CHECK_PHASE); in esp_process_event()
2004 shost_printk(KERN_INFO, esp->host, in esp_process_event()
2006 esp_schedule_reset(esp); in esp_process_event()
2011 memcpy(esp->command_block, esp->cmd_bytes_ptr, in esp_process_event()
2012 esp->cmd_bytes_left); in esp_process_event()
2013 esp_send_dma_cmd(esp, esp->cmd_bytes_left, 16, ESP_CMD_TI); in esp_process_event()
2014 esp_event(esp, ESP_EVENT_CMD_DONE); in esp_process_event()
2015 esp->flags |= ESP_FLAG_QUICKIRQ_CHECK; in esp_process_event()
2018 esp->ops->dma_invalidate(esp); in esp_process_event()
2019 if (esp->ireg & ESP_INTR_BSERV) { in esp_process_event()
2020 esp_event(esp, ESP_EVENT_CHECK_PHASE); in esp_process_event()
2023 esp_schedule_reset(esp); in esp_process_event()
2028 scsi_esp_cmd(esp, ESP_CMD_RS); in esp_process_event()
2032 shost_printk(KERN_INFO, esp->host, in esp_process_event()
2033 "Unexpected event %x, resetting\n", esp->event); in esp_process_event()
2034 esp_schedule_reset(esp); in esp_process_event()
2041 static void esp_reset_cleanup_one(struct esp *esp, struct esp_cmd_entry *ent) in esp_reset_cleanup_one() argument
2045 esp_unmap_dma(esp, cmd); in esp_reset_cleanup_one()
2050 esp->ops->unmap_single(esp, ent->sense_dma, in esp_reset_cleanup_one()
2057 esp_put_ent(esp, ent); in esp_reset_cleanup_one()
2068 static void esp_reset_cleanup(struct esp *esp) in esp_reset_cleanup() argument
2073 list_for_each_entry_safe(ent, tmp, &esp->queued_cmds, list) { in esp_reset_cleanup()
2079 esp_put_ent(esp, ent); in esp_reset_cleanup()
2082 list_for_each_entry_safe(ent, tmp, &esp->active_cmds, list) { in esp_reset_cleanup()
2083 if (ent == esp->active_cmd) in esp_reset_cleanup()
2084 esp->active_cmd = NULL; in esp_reset_cleanup()
2085 esp_reset_cleanup_one(esp, ent); in esp_reset_cleanup()
2088 BUG_ON(esp->active_cmd != NULL); in esp_reset_cleanup()
2092 struct esp_target_data *tp = &esp->target[i]; in esp_reset_cleanup()
2106 esp->flags &= ~ESP_FLAG_RESETTING; in esp_reset_cleanup()
2110 static void __esp_interrupt(struct esp *esp) in __esp_interrupt() argument
2118 esp->sreg = esp_read8(ESP_STATUS); in __esp_interrupt()
2119 esp->seqreg = esp_read8(ESP_SSTEP); in __esp_interrupt()
2120 esp->ireg = esp_read8(ESP_INTRPT); in __esp_interrupt()
2122 if (esp->flags & ESP_FLAG_RESETTING) { in __esp_interrupt()
2125 if (esp_check_gross_error(esp)) in __esp_interrupt()
2128 finish_reset = esp_check_spur_intr(esp); in __esp_interrupt()
2133 if (esp->ireg & ESP_INTR_SR) in __esp_interrupt()
2137 esp_reset_cleanup(esp); in __esp_interrupt()
2138 if (esp->eh_reset) { in __esp_interrupt()
2139 complete(esp->eh_reset); in __esp_interrupt()
2140 esp->eh_reset = NULL; in __esp_interrupt()
2145 phase = (esp->sreg & ESP_STAT_PMASK); in __esp_interrupt()
2146 if (esp->rev == FASHME) { in __esp_interrupt()
2148 esp->select_state == ESP_SELECT_NONE && in __esp_interrupt()
2149 esp->event != ESP_EVENT_STATUS && in __esp_interrupt()
2150 esp->event != ESP_EVENT_DATA_DONE) || in __esp_interrupt()
2151 (esp->ireg & ESP_INTR_RSEL)) { in __esp_interrupt()
2152 esp->sreg2 = esp_read8(ESP_STATUS2); in __esp_interrupt()
2153 if (!(esp->sreg2 & ESP_STAT2_FEMPTY) || in __esp_interrupt()
2154 (esp->sreg2 & ESP_STAT2_F1BYTE)) in __esp_interrupt()
2155 hme_read_fifo(esp); in __esp_interrupt()
2161 esp->sreg, esp->seqreg, esp->sreg2, esp->ireg); in __esp_interrupt()
2165 if (esp->ireg & (ESP_INTR_S | ESP_INTR_SATN | ESP_INTR_IC)) { in __esp_interrupt()
2166 shost_printk(KERN_INFO, esp->host, in __esp_interrupt()
2167 "unexpected IREG %02x\n", esp->ireg); in __esp_interrupt()
2168 if (esp->ireg & ESP_INTR_IC) in __esp_interrupt()
2169 esp_dump_cmd_log(esp); in __esp_interrupt()
2171 esp_schedule_reset(esp); in __esp_interrupt()
2173 if (!(esp->ireg & ESP_INTR_RSEL)) { in __esp_interrupt()
2175 if (esp->select_state != ESP_SELECT_NONE) in __esp_interrupt()
2176 intr_done = esp_finish_select(esp); in __esp_interrupt()
2177 } else if (esp->ireg & ESP_INTR_RSEL) { in __esp_interrupt()
2178 if (esp->active_cmd) in __esp_interrupt()
2179 (void) esp_finish_select(esp); in __esp_interrupt()
2180 intr_done = esp_reconnect(esp); in __esp_interrupt()
2184 intr_done = esp_process_event(esp); in __esp_interrupt()
2189 struct esp *esp = dev_id; in scsi_esp_intr() local
2193 spin_lock_irqsave(esp->host->host_lock, flags); in scsi_esp_intr()
2195 if (esp->ops->irq_pending(esp)) { in scsi_esp_intr()
2200 __esp_interrupt(esp); in scsi_esp_intr()
2201 if (!(esp->flags & ESP_FLAG_QUICKIRQ_CHECK)) in scsi_esp_intr()
2203 esp->flags &= ~ESP_FLAG_QUICKIRQ_CHECK; in scsi_esp_intr()
2206 if (esp->ops->irq_pending(esp)) in scsi_esp_intr()
2213 spin_unlock_irqrestore(esp->host->host_lock, flags); in scsi_esp_intr()
2219 static void esp_get_revision(struct esp *esp) in esp_get_revision() argument
2223 esp->config1 = (ESP_CONFIG1_PENABLE | (esp->scsi_id & 7)); in esp_get_revision()
2224 if (esp->config2 == 0) { in esp_get_revision()
2225 esp->config2 = (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY); in esp_get_revision()
2226 esp_write8(esp->config2, ESP_CFG2); in esp_get_revision()
2231 esp->config2 = 0; in esp_get_revision()
2238 esp->rev = ESP100; in esp_get_revision()
2243 esp_set_all_config3(esp, 5); in esp_get_revision()
2244 esp->prev_cfg3 = 5; in esp_get_revision()
2245 esp_write8(esp->config2, ESP_CFG2); in esp_get_revision()
2247 esp_write8(esp->prev_cfg3, ESP_CFG3); in esp_get_revision()
2254 esp->rev = ESP100A; in esp_get_revision()
2256 esp_set_all_config3(esp, 0); in esp_get_revision()
2257 esp->prev_cfg3 = 0; in esp_get_revision()
2258 esp_write8(esp->prev_cfg3, ESP_CFG3); in esp_get_revision()
2263 if (esp->cfact == 0 || esp->cfact > ESP_CCF_F5) { in esp_get_revision()
2264 esp->rev = FAST; in esp_get_revision()
2265 esp->sync_defp = SYNC_DEFP_FAST; in esp_get_revision()
2267 esp->rev = ESP236; in esp_get_revision()
2272 static void esp_init_swstate(struct esp *esp) in esp_init_swstate() argument
2276 INIT_LIST_HEAD(&esp->queued_cmds); in esp_init_swstate()
2277 INIT_LIST_HEAD(&esp->active_cmds); in esp_init_swstate()
2278 INIT_LIST_HEAD(&esp->esp_cmd_pool); in esp_init_swstate()
2285 esp->target[i].flags = 0; in esp_init_swstate()
2286 esp->target[i].nego_goal_period = 0; in esp_init_swstate()
2287 esp->target[i].nego_goal_offset = 0; in esp_init_swstate()
2288 esp->target[i].nego_goal_width = 0; in esp_init_swstate()
2289 esp->target[i].nego_goal_tags = 0; in esp_init_swstate()
2294 static void esp_bootup_reset(struct esp *esp) in esp_bootup_reset() argument
2299 esp->ops->reset_dma(esp); in esp_bootup_reset()
2302 esp_reset_esp(esp); in esp_bootup_reset()
2309 scsi_esp_cmd(esp, ESP_CMD_RS); in esp_bootup_reset()
2312 esp_write8(esp->config1, ESP_CFG1); in esp_bootup_reset()
2318 static void esp_set_clock_params(struct esp *esp) in esp_set_clock_params() argument
2355 fhz = esp->cfreq; in esp_set_clock_params()
2371 esp->cfact = (ccf == 8 ? 0 : ccf); in esp_set_clock_params()
2372 esp->cfreq = fhz; in esp_set_clock_params()
2373 esp->ccycle = ESP_HZ_TO_CYCLE(fhz); in esp_set_clock_params()
2374 esp->ctick = ESP_TICK(ccf, esp->ccycle); in esp_set_clock_params()
2375 esp->neg_defp = ESP_NEG_DEFP(fhz, ccf); in esp_set_clock_params()
2376 esp->sync_defp = SYNC_DEFP_SLOW; in esp_set_clock_params()
2392 int scsi_esp_register(struct esp *esp, struct device *dev) in scsi_esp_register() argument
2397 if (!esp->num_tags) in scsi_esp_register()
2398 esp->num_tags = ESP_DEFAULT_TAGS; in scsi_esp_register()
2399 esp->host->transportt = esp_transport_template; in scsi_esp_register()
2400 esp->host->max_lun = ESP_MAX_LUN; in scsi_esp_register()
2401 esp->host->cmd_per_lun = 2; in scsi_esp_register()
2402 esp->host->unique_id = instance; in scsi_esp_register()
2404 esp_set_clock_params(esp); in scsi_esp_register()
2406 esp_get_revision(esp); in scsi_esp_register()
2408 esp_init_swstate(esp); in scsi_esp_register()
2410 esp_bootup_reset(esp); in scsi_esp_register()
2413 esp->host->unique_id, esp->regs, esp->dma_regs, in scsi_esp_register()
2414 esp->host->irq); in scsi_esp_register()
2417 esp->host->unique_id, esp_chip_names[esp->rev], in scsi_esp_register()
2418 esp->cfreq / 1000000, esp->cfact, esp->scsi_id); in scsi_esp_register()
2423 err = scsi_add_host(esp->host, dev); in scsi_esp_register()
2429 scsi_scan_host(esp->host); in scsi_esp_register()
2435 void scsi_esp_unregister(struct esp *esp) in scsi_esp_unregister() argument
2437 scsi_remove_host(esp->host); in scsi_esp_unregister()
2443 struct esp *esp = shost_priv(dev_to_shost(&starget->dev)); in esp_target_alloc() local
2444 struct esp_target_data *tp = &esp->target[starget->id]; in esp_target_alloc()
2453 struct esp *esp = shost_priv(dev_to_shost(&starget->dev)); in esp_target_destroy() local
2454 struct esp_target_data *tp = &esp->target[starget->id]; in esp_target_destroy()
2461 struct esp *esp = shost_priv(dev->host); in esp_slave_alloc() local
2462 struct esp_target_data *tp = &esp->target[dev->id]; in esp_slave_alloc()
2470 spi_min_period(tp->starget) = esp->min_period; in esp_slave_alloc()
2473 if (esp->flags & ESP_FLAG_WIDE_CAPABLE) in esp_slave_alloc()
2483 struct esp *esp = shost_priv(dev->host); in esp_slave_configure() local
2484 struct esp_target_data *tp = &esp->target[dev->id]; in esp_slave_configure()
2487 scsi_change_queue_depth(dev, esp->num_tags); in esp_slave_configure()
2507 struct esp *esp = shost_priv(cmd->device->host); in esp_eh_abort_handler() local
2515 spin_lock_irqsave(esp->host->host_lock, flags); in esp_eh_abort_handler()
2516 shost_printk(KERN_ERR, esp->host, "Aborting command [%p:%02x]\n", in esp_eh_abort_handler()
2518 ent = esp->active_cmd; in esp_eh_abort_handler()
2520 shost_printk(KERN_ERR, esp->host, in esp_eh_abort_handler()
2523 list_for_each_entry(ent, &esp->queued_cmds, list) { in esp_eh_abort_handler()
2524 shost_printk(KERN_ERR, esp->host, "Queued command [%p:%02x]\n", in esp_eh_abort_handler()
2527 list_for_each_entry(ent, &esp->active_cmds, list) { in esp_eh_abort_handler()
2528 shost_printk(KERN_ERR, esp->host, " Active command [%p:%02x]\n", in esp_eh_abort_handler()
2531 esp_dump_cmd_log(esp); in esp_eh_abort_handler()
2532 spin_unlock_irqrestore(esp->host->host_lock, flags); in esp_eh_abort_handler()
2534 spin_lock_irqsave(esp->host->host_lock, flags); in esp_eh_abort_handler()
2537 list_for_each_entry(tmp, &esp->queued_cmds, list) { in esp_eh_abort_handler()
2553 esp_put_ent(esp, ent); in esp_eh_abort_handler()
2560 ent = esp->active_cmd; in esp_eh_abort_handler()
2566 if (esp->msg_out_len) in esp_eh_abort_handler()
2572 esp->msg_out[0] = ABORT_TASK_SET; in esp_eh_abort_handler()
2573 esp->msg_out_len = 1; in esp_eh_abort_handler()
2576 scsi_esp_cmd(esp, ESP_CMD_SATN); in esp_eh_abort_handler()
2597 spin_unlock_irqrestore(esp->host->host_lock, flags); in esp_eh_abort_handler()
2600 spin_lock_irqsave(esp->host->host_lock, flags); in esp_eh_abort_handler()
2602 spin_unlock_irqrestore(esp->host->host_lock, flags); in esp_eh_abort_handler()
2610 spin_unlock_irqrestore(esp->host->host_lock, flags); in esp_eh_abort_handler()
2618 spin_unlock_irqrestore(esp->host->host_lock, flags); in esp_eh_abort_handler()
2624 struct esp *esp = shost_priv(cmd->device->host); in esp_eh_bus_reset_handler() local
2630 spin_lock_irqsave(esp->host->host_lock, flags); in esp_eh_bus_reset_handler()
2632 esp->eh_reset = &eh_reset; in esp_eh_bus_reset_handler()
2639 esp->flags |= ESP_FLAG_RESETTING; in esp_eh_bus_reset_handler()
2640 scsi_esp_cmd(esp, ESP_CMD_RS); in esp_eh_bus_reset_handler()
2642 spin_unlock_irqrestore(esp->host->host_lock, flags); in esp_eh_bus_reset_handler()
2647 spin_lock_irqsave(esp->host->host_lock, flags); in esp_eh_bus_reset_handler()
2648 esp->eh_reset = NULL; in esp_eh_bus_reset_handler()
2649 spin_unlock_irqrestore(esp->host->host_lock, flags); in esp_eh_bus_reset_handler()
2660 struct esp *esp = shost_priv(cmd->device->host); in esp_eh_host_reset_handler() local
2663 spin_lock_irqsave(esp->host->host_lock, flags); in esp_eh_host_reset_handler()
2664 esp_bootup_reset(esp); in esp_eh_host_reset_handler()
2665 esp_reset_cleanup(esp); in esp_eh_host_reset_handler()
2666 spin_unlock_irqrestore(esp->host->host_lock, flags); in esp_eh_host_reset_handler()
2703 struct esp *esp = shost_priv(host); in esp_get_signalling() local
2706 if (esp->flags & ESP_FLAG_DIFFERENTIAL) in esp_get_signalling()
2717 struct esp *esp = shost_priv(host); in esp_set_offset() local
2718 struct esp_target_data *tp = &esp->target[target->id]; in esp_set_offset()
2720 if (esp->flags & ESP_FLAG_DISABLE_SYNC) in esp_set_offset()
2730 struct esp *esp = shost_priv(host); in esp_set_period() local
2731 struct esp_target_data *tp = &esp->target[target->id]; in esp_set_period()
2740 struct esp *esp = shost_priv(host); in esp_set_width() local
2741 struct esp_target_data *tp = &esp->target[target->id]; in esp_set_width()