Lines Matching +full:0 +full:x17

133 	for (c = 0; c < 2; c++) {  in atp870u_intr_handle()
134 j = atp_readb_io(dev, c, 0x1f); in atp870u_intr_handle()
135 if ((j & 0x80) != 0) in atp870u_intr_handle()
137 dev->in_int[c] = 0; in atp870u_intr_handle()
139 if ((j & 0x80) == 0) in atp870u_intr_handle()
145 cmdp = atp_readb_io(dev, c, 0x10); in atp870u_intr_handle()
146 if (dev->working[c] != 0) { in atp870u_intr_handle()
148 if ((atp_readb_io(dev, c, 0x16) & 0x80) == 0) in atp870u_intr_handle()
149 atp_writeb_io(dev, c, 0x16, in atp870u_intr_handle()
150 (atp_readb_io(dev, c, 0x16) | 0x80)); in atp870u_intr_handle()
152 if ((atp_readb_pci(dev, c, 0x00) & 0x08) != 0) in atp870u_intr_handle()
154 for (k=0; k < 1000; k++) { in atp870u_intr_handle()
155 if ((atp_readb_pci(dev, c, 2) & 0x08) == 0) in atp870u_intr_handle()
157 if ((atp_readb_pci(dev, c, 2) & 0x01) == 0) in atp870u_intr_handle()
161 atp_writeb_pci(dev, c, 0, 0x00); in atp870u_intr_handle()
163 i = atp_readb_io(dev, c, 0x17); in atp870u_intr_handle()
166 atp_writeb_pci(dev, c, 2, 0x06); in atp870u_intr_handle()
168 target_id = atp_readb_io(dev, c, 0x15); in atp870u_intr_handle()
174 if ((target_id & 0x40) != 0) { in atp870u_intr_handle()
175 target_id = (target_id & 0x07) | 0x08; in atp870u_intr_handle()
177 target_id &= 0x07; in atp870u_intr_handle()
180 if ((j & 0x40) != 0) { in atp870u_intr_handle()
181 if (dev->last_cmd[c] == 0xff) { in atp870u_intr_handle()
184 dev->last_cmd[c] |= 0x40; in atp870u_intr_handle()
191 if (i == 0x85) { in atp870u_intr_handle()
192 if ((dev->last_cmd[c] & 0xf0) != 0x40) { in atp870u_intr_handle()
193 dev->last_cmd[c] = 0xff; in atp870u_intr_handle()
196 adrcnt = 0; in atp870u_intr_handle()
198 atp_readb_io(dev, c, 0x12); in atp870u_intr_handle()
200 atp_readb_io(dev, c, 0x13); in atp870u_intr_handle()
201 ((unsigned char *) &adrcnt)[0] = in atp870u_intr_handle()
202 atp_readb_io(dev, c, 0x14); in atp870u_intr_handle()
220 if (dev->wide_id[c] != 0) { in atp870u_intr_handle()
221 atp_writeb_io(dev, c, 0x1b, 0x01); in atp870u_intr_handle()
222 while ((atp_readb_io(dev, c, 0x1b) & 0x01) != 0x01) in atp870u_intr_handle()
223 atp_writeb_io(dev, c, 0x1b, 0x01); in atp870u_intr_handle()
230 (dev->last_cmd[c] != 0xff)) && in atp870u_intr_handle()
231 (dev->in_snd[c] == 0)) { in atp870u_intr_handle()
241 dev->in_int[c] = 0; in atp870u_intr_handle()
243 printk("Status 0x85 return\n"); in atp870u_intr_handle()
248 if (i == 0x40) { in atp870u_intr_handle()
249 dev->last_cmd[c] |= 0x40; in atp870u_intr_handle()
250 dev->in_int[c] = 0; in atp870u_intr_handle()
254 if (i == 0x21) { in atp870u_intr_handle()
255 if ((dev->last_cmd[c] & 0xf0) != 0x40) { in atp870u_intr_handle()
256 dev->last_cmd[c] = 0xff; in atp870u_intr_handle()
258 adrcnt = 0; in atp870u_intr_handle()
260 atp_readb_io(dev, c, 0x12); in atp870u_intr_handle()
262 atp_readb_io(dev, c, 0x13); in atp870u_intr_handle()
263 ((unsigned char *) &adrcnt)[0] = in atp870u_intr_handle()
264 atp_readb_io(dev, c, 0x14); in atp870u_intr_handle()
269 atp_writeb_io(dev, c, 0x10, 0x41); in atp870u_intr_handle()
270 atp_writeb_io(dev, c, 0x18, 0x08); in atp870u_intr_handle()
271 dev->in_int[c] = 0; in atp870u_intr_handle()
276 if ((i == 0x4c) || (i == 0x4d) || (i == 0x8c) || (i == 0x8d)) { in atp870u_intr_handle()
277 if ((i == 0x4c) || (i == 0x8c)) in atp870u_intr_handle()
278 i=0x48; in atp870u_intr_handle()
280 i=0x49; in atp870u_intr_handle()
283 if ((i == 0x80) || (i == 0x8f)) { in atp870u_intr_handle()
287 lun = 0; in atp870u_intr_handle()
288 if (cmdp == 0x44 || i == 0x80) in atp870u_intr_handle()
289 lun = atp_readb_io(dev, c, 0x1d) & 0x07; in atp870u_intr_handle()
291 if ((dev->last_cmd[c] & 0xf0) != 0x40) { in atp870u_intr_handle()
292 dev->last_cmd[c] = 0xff; in atp870u_intr_handle()
294 if (cmdp == 0x41) { in atp870u_intr_handle()
296 printk("cmdp = 0x41\n"); in atp870u_intr_handle()
298 adrcnt = 0; in atp870u_intr_handle()
300 atp_readb_io(dev, c, 0x12); in atp870u_intr_handle()
302 atp_readb_io(dev, c, 0x13); in atp870u_intr_handle()
303 ((unsigned char *) &adrcnt)[0] = in atp870u_intr_handle()
304 atp_readb_io(dev, c, 0x14); in atp870u_intr_handle()
309 atp_writeb_io(dev, c, 0x18, 0x08); in atp870u_intr_handle()
310 dev->in_int[c] = 0; in atp870u_intr_handle()
314 printk("cmdp != 0x41\n"); in atp870u_intr_handle()
316 atp_writeb_io(dev, c, 0x10, 0x46); in atp870u_intr_handle()
317 dev->id[c][target_id].dirct = 0x00; in atp870u_intr_handle()
318 atp_writeb_io(dev, c, 0x12, 0x00); in atp870u_intr_handle()
319 atp_writeb_io(dev, c, 0x13, 0x00); in atp870u_intr_handle()
320 atp_writeb_io(dev, c, 0x14, 0x00); in atp870u_intr_handle()
321 atp_writeb_io(dev, c, 0x18, 0x08); in atp870u_intr_handle()
322 dev->in_int[c] = 0; in atp870u_intr_handle()
326 if (dev->last_cmd[c] != 0xff) { in atp870u_intr_handle()
327 dev->last_cmd[c] |= 0x40; in atp870u_intr_handle()
330 j = atp_readb_base(dev, 0x29) & 0xfe; in atp870u_intr_handle()
331 atp_writeb_base(dev, 0x29, j); in atp870u_intr_handle()
333 atp_writeb_io(dev, c, 0x10, 0x45); in atp870u_intr_handle()
335 target_id = atp_readb_io(dev, c, 0x16); in atp870u_intr_handle()
339 if ((target_id & 0x10) != 0) { in atp870u_intr_handle()
340 target_id = (target_id & 0x07) | 0x08; in atp870u_intr_handle()
342 target_id &= 0x07; in atp870u_intr_handle()
345 atp_writeb_io(dev, c, 0x10, 0x45); in atp870u_intr_handle()
349 for (l = 0; l < workreq->cmd_len; l++) in atp870u_intr_handle()
354 atp_writeb_io(dev, c, 0x0f, lun); in atp870u_intr_handle()
355 atp_writeb_io(dev, c, 0x11, dev->id[c][target_id].devsp); in atp870u_intr_handle()
359 atp_writeb_io(dev, c, 0x12, ((unsigned char *) &k)[2]); in atp870u_intr_handle()
360 atp_writeb_io(dev, c, 0x13, ((unsigned char *) &k)[1]); in atp870u_intr_handle()
361 atp_writeb_io(dev, c, 0x14, ((unsigned char *) &k)[0]); in atp870u_intr_handle()
363 printk("k %x, k[0] 0x%x k[1] 0x%x k[2] 0x%x\n", k, in atp870u_intr_handle()
364 atp_readb_io(dev, c, 0x14), in atp870u_intr_handle()
365 atp_readb_io(dev, c, 0x13), in atp870u_intr_handle()
366 atp_readb_io(dev, c, 0x12)); in atp870u_intr_handle()
371 j = (j & 0x07) | 0x40; in atp870u_intr_handle()
375 atp_writeb_io(dev, c, 0x15, j); in atp870u_intr_handle()
376 atp_writeb_io(dev, c, 0x16, 0x80); in atp870u_intr_handle()
380 i = atp_readb_pci(dev, c, 1) & 0xf3; in atp870u_intr_handle()
381 //j=workreq->cmnd[0]; in atp870u_intr_handle()
382 if ((workreq->cmnd[0] == READ_6) || in atp870u_intr_handle()
383 (workreq->cmnd[0] == READ_10) || in atp870u_intr_handle()
384 (workreq->cmnd[0] == WRITE_6) || in atp870u_intr_handle()
385 (workreq->cmnd[0] == WRITE_10)) { in atp870u_intr_handle()
386 i |= 0x0c; in atp870u_intr_handle()
390 if ((workreq->cmnd[0] == READ_6) || in atp870u_intr_handle()
391 (workreq->cmnd[0] == READ_10) || in atp870u_intr_handle()
392 (workreq->cmnd[0] == WRITE_6) || in atp870u_intr_handle()
393 (workreq->cmnd[0] == WRITE_10)) in atp870u_intr_handle()
394 atp_writeb_base(dev, 0x3b, in atp870u_intr_handle()
395 (atp_readb_base(dev, 0x3b) & 0x3f) | 0xc0); in atp870u_intr_handle()
397 atp_writeb_base(dev, 0x3b, in atp870u_intr_handle()
398 atp_readb_base(dev, 0x3b) & 0x3f); in atp870u_intr_handle()
400 if ((workreq->cmnd[0] == READ_6) || in atp870u_intr_handle()
401 (workreq->cmnd[0] == READ_10) || in atp870u_intr_handle()
402 (workreq->cmnd[0] == WRITE_6) || in atp870u_intr_handle()
403 (workreq->cmnd[0] == WRITE_10)) in atp870u_intr_handle()
404 atp_writeb_base(dev, 0x3a, in atp870u_intr_handle()
405 (atp_readb_base(dev, 0x3a) & 0xf3) | 0x08); in atp870u_intr_handle()
407 atp_writeb_base(dev, 0x3a, in atp870u_intr_handle()
408 atp_readb_base(dev, 0x3a) & 0xf3); in atp870u_intr_handle()
410 j = 0; in atp870u_intr_handle()
416 if ((id & dev->wide_id[c]) != 0) { in atp870u_intr_handle()
417 j |= 0x01; in atp870u_intr_handle()
419 atp_writeb_io(dev, c, 0x1b, j); in atp870u_intr_handle()
420 while ((atp_readb_io(dev, c, 0x1b) & 0x01) != j) in atp870u_intr_handle()
421 atp_writeb_io(dev, c, 0x1b, j); in atp870u_intr_handle()
422 if (dev->id[c][target_id].last_len == 0) { in atp870u_intr_handle()
423 atp_writeb_io(dev, c, 0x18, 0x08); in atp870u_intr_handle()
424 dev->in_int[c] = 0; in atp870u_intr_handle()
426 printk("dev->id[c][target_id].last_len = 0\n"); in atp870u_intr_handle()
434 while (adrcnt != 0) { in atp870u_intr_handle()
436 if (id == 0) { in atp870u_intr_handle()
437 k = 0x10000; in atp870u_intr_handle()
444 ((unsigned long *)prd)[0] += adrcnt; in atp870u_intr_handle()
445 adrcnt = 0; in atp870u_intr_handle()
449 dev->id[c][target_id].prdaddr += 0x08; in atp870u_intr_handle()
450 prd += 0x08; in atp870u_intr_handle()
451 if (adrcnt == 0) { in atp870u_intr_handle()
456 atp_writel_pci(dev, c, 0x04, dev->id[c][target_id].prdaddr); in atp870u_intr_handle()
458 printk("dev->id[%d][%d].prdaddr 0x%8x\n", in atp870u_intr_handle()
462 atp_writeb_pci(dev, c, 2, 0x06); in atp870u_intr_handle()
463 atp_writeb_pci(dev, c, 2, 0x00); in atp870u_intr_handle()
468 if (dev->id[c][target_id].dirct != 0) { in atp870u_intr_handle()
469 atp_writeb_io(dev, c, 0x18, 0x08); in atp870u_intr_handle()
470 atp_writeb_pci(dev, c, 0, 0x01); in atp870u_intr_handle()
471 dev->in_int[c] = 0; in atp870u_intr_handle()
473 printk("status 0x80 return dirct != 0\n"); in atp870u_intr_handle()
477 atp_writeb_io(dev, c, 0x18, 0x08); in atp870u_intr_handle()
478 atp_writeb_pci(dev, c, 0, 0x09); in atp870u_intr_handle()
479 dev->in_int[c] = 0; in atp870u_intr_handle()
481 printk("status 0x80 return dirct = 0\n"); in atp870u_intr_handle()
492 if (i == 0x42 || i == 0x16) { in atp870u_intr_handle()
493 if ((dev->last_cmd[c] & 0xf0) != 0x40) { in atp870u_intr_handle()
494 dev->last_cmd[c] = 0xff; in atp870u_intr_handle()
496 if (i == 0x16) { in atp870u_intr_handle()
497 workreq->result = atp_readb_io(dev, c, 0x0f); in atp870u_intr_handle()
498 if (((dev->r1f[c][target_id] & 0x10) != 0) && is885(dev)) { in atp870u_intr_handle()
506 j = atp_readb_base(dev, 0x29) | 0x01; in atp870u_intr_handle()
507 atp_writeb_base(dev, 0x29, j); in atp870u_intr_handle()
528 if (dev->wide_id[c] != 0) { in atp870u_intr_handle()
529 atp_writeb_io(dev, c, 0x1b, 0x01); in atp870u_intr_handle()
530 while ((atp_readb_io(dev, c, 0x1b) & 0x01) != 0x01) in atp870u_intr_handle()
531 atp_writeb_io(dev, c, 0x1b, 0x01); in atp870u_intr_handle()
537 if (((dev->last_cmd[c] != 0xff) || in atp870u_intr_handle()
539 (dev->in_snd[c] == 0)) { in atp870u_intr_handle()
546 dev->in_int[c] = 0; in atp870u_intr_handle()
549 if ((dev->last_cmd[c] & 0xf0) != 0x40) { in atp870u_intr_handle()
550 dev->last_cmd[c] = 0xff; in atp870u_intr_handle()
552 if (i == 0x4f) { in atp870u_intr_handle()
553 i = 0x89; in atp870u_intr_handle()
555 i &= 0x0f; in atp870u_intr_handle()
556 if (i == 0x09) { in atp870u_intr_handle()
558 atp_writeb_pci(dev, c, 2, 0x06); in atp870u_intr_handle()
559 atp_writeb_pci(dev, c, 2, 0x00); in atp870u_intr_handle()
560 atp_writeb_io(dev, c, 0x10, 0x41); in atp870u_intr_handle()
563 atp_writeb_io(dev, c, 0x12, in atp870u_intr_handle()
565 atp_writeb_io(dev, c, 0x13, in atp870u_intr_handle()
567 atp_writeb_io(dev, c, 0x14, in atp870u_intr_handle()
568 ((unsigned char *) (&k))[0]); in atp870u_intr_handle()
569 dev->id[c][target_id].dirct = 0x00; in atp870u_intr_handle()
571 dev->id[c][target_id].dirct = 0x00; in atp870u_intr_handle()
573 atp_writeb_io(dev, c, 0x18, 0x08); in atp870u_intr_handle()
574 atp_writeb_pci(dev, c, 0, 0x09); in atp870u_intr_handle()
575 dev->in_int[c] = 0; in atp870u_intr_handle()
578 if (i == 0x08) { in atp870u_intr_handle()
580 atp_writeb_pci(dev, c, 2, 0x06); in atp870u_intr_handle()
581 atp_writeb_pci(dev, c, 2, 0x00); in atp870u_intr_handle()
582 atp_writeb_io(dev, c, 0x10, 0x41); in atp870u_intr_handle()
585 atp_writeb_io(dev, c, 0x12, in atp870u_intr_handle()
587 atp_writeb_io(dev, c, 0x13, in atp870u_intr_handle()
589 atp_writeb_io(dev, c, 0x14, in atp870u_intr_handle()
590 ((unsigned char *) (&k))[0]); in atp870u_intr_handle()
592 atp_writeb_io(dev, c, 0x15, in atp870u_intr_handle()
593 atp_readb_io(dev, c, 0x15) | 0x20); in atp870u_intr_handle()
594 dev->id[c][target_id].dirct = 0x20; in atp870u_intr_handle()
595 atp_writeb_io(dev, c, 0x18, 0x08); in atp870u_intr_handle()
596 atp_writeb_pci(dev, c, 0, 0x01); in atp870u_intr_handle()
597 dev->in_int[c] = 0; in atp870u_intr_handle()
600 if (i == 0x0a) in atp870u_intr_handle()
601 atp_writeb_io(dev, c, 0x10, 0x30); in atp870u_intr_handle()
603 atp_writeb_io(dev, c, 0x10, 0x46); in atp870u_intr_handle()
604 dev->id[c][target_id].dirct = 0x00; in atp870u_intr_handle()
605 atp_writeb_io(dev, c, 0x12, 0x00); in atp870u_intr_handle()
606 atp_writeb_io(dev, c, 0x13, 0x00); in atp870u_intr_handle()
607 atp_writeb_io(dev, c, 0x14, 0x00); in atp870u_intr_handle()
608 atp_writeb_io(dev, c, 0x18, 0x08); in atp870u_intr_handle()
610 dev->in_int[c] = 0; in atp870u_intr_handle()
630 req_p->sense_buffer[0]=0; in atp870u_queuecommand_lck()
631 scsi_set_resid(req_p, 0); in atp870u_queuecommand_lck()
638 return 0; in atp870u_queuecommand_lck()
651 if ((m & dev->active_id[c]) == 0) { in atp870u_queuecommand_lck()
654 return 0; in atp870u_queuecommand_lck()
663 req_p->result = 0; in atp870u_queuecommand_lck()
665 return 0; in atp870u_queuecommand_lck()
673 dev->quend[c] = 0; in atp870u_queuecommand_lck()
680 if (dev->quend[c] == 0) { in atp870u_queuecommand_lck()
689 return 0; in atp870u_queuecommand_lck()
693 printk("dev->ioport[c] = %x atp_readb_io(dev, c, 0x1c) = %x " in atp870u_queuecommand_lck()
695 dev->ioport[c], atp_readb_io(dev, c, 0x1c), c, in atp870u_queuecommand_lck()
698 if ((atp_readb_io(dev, c, 0x1c) == 0) && in atp870u_queuecommand_lck()
699 (dev->in_int[c] == 0) && in atp870u_queuecommand_lck()
700 (dev->in_snd[c] == 0)) { in atp870u_queuecommand_lck()
709 return 0; in atp870u_queuecommand_lck()
729 unsigned long l, bttl = 0; in DEF_SCSI_QCMD()
732 if (dev->in_snd[c] != 0) { in DEF_SCSI_QCMD()
742 if ((dev->last_cmd[c] != 0xff) && ((dev->last_cmd[c] & 0x40) != 0)) { in DEF_SCSI_QCMD()
743 dev->last_cmd[c] &= 0x0f; in DEF_SCSI_QCMD()
746 dev->last_cmd[c] = 0xff; in DEF_SCSI_QCMD()
748 dev->in_snd[c] = 0; in DEF_SCSI_QCMD()
754 if ((dev->last_cmd[c] != 0xff) && (dev->working[c] != 0)) { in DEF_SCSI_QCMD()
755 dev->in_snd[c] = 0; in DEF_SCSI_QCMD()
762 dev->quhd[c] = 0; in DEF_SCSI_QCMD()
767 dev->in_snd[c] = 0; in DEF_SCSI_QCMD()
773 if ((atp_readb_io(dev, c, 0x1f) & 0xb0) != 0 || in DEF_SCSI_QCMD()
774 atp_readb_io(dev, c, 0x1c) != 0) { in DEF_SCSI_QCMD()
778 dev->last_cmd[c] |= 0x40; in DEF_SCSI_QCMD()
779 dev->in_snd[c] = 0; in DEF_SCSI_QCMD()
785 for(i=0;i<workreq->cmd_len;i++) { in DEF_SCSI_QCMD()
793 j = atp_readb_base(dev, 0x29) & 0xfe; in DEF_SCSI_QCMD()
794 atp_writeb_base(dev, 0x29, j); in DEF_SCSI_QCMD()
795 dev->r1f[c][scmd_id(workreq)] = 0; in DEF_SCSI_QCMD()
798 if (workreq->cmnd[0] == READ_CAPACITY) { in DEF_SCSI_QCMD()
802 if (workreq->cmnd[0] == TEST_UNIT_READY) { in DEF_SCSI_QCMD()
803 l = 0; in DEF_SCSI_QCMD()
806 j = 0; in DEF_SCSI_QCMD()
814 if ((w & dev->wide_id[c]) != 0) { in DEF_SCSI_QCMD()
815 j |= 0x01; in DEF_SCSI_QCMD()
817 atp_writeb_io(dev, c, 0x1b, j); in DEF_SCSI_QCMD()
818 while ((atp_readb_io(dev, c, 0x1b) & 0x01) != j) { in DEF_SCSI_QCMD()
819 atp_writeb_pci(dev, c, 0x1b, j); in DEF_SCSI_QCMD()
828 atp_writeb_io(dev, c, 0x00, workreq->cmd_len); in DEF_SCSI_QCMD()
829 atp_writeb_io(dev, c, 0x01, 0x2c); in DEF_SCSI_QCMD()
831 atp_writeb_io(dev, c, 0x02, 0x7f); in DEF_SCSI_QCMD()
833 atp_writeb_io(dev, c, 0x02, 0xcf); in DEF_SCSI_QCMD()
834 for (i = 0; i < workreq->cmd_len; i++) in DEF_SCSI_QCMD()
835 atp_writeb_io(dev, c, 0x03 + i, workreq->cmnd[i]); in DEF_SCSI_QCMD()
836 atp_writeb_io(dev, c, 0x0f, workreq->device->lun); in DEF_SCSI_QCMD()
840 atp_writeb_io(dev, c, 0x11, dev->id[c][target_id].devsp); in DEF_SCSI_QCMD()
850 atp_writeb_io(dev, c, 0x12, ((unsigned char *) (&l))[2]); in DEF_SCSI_QCMD()
851 atp_writeb_io(dev, c, 0x13, ((unsigned char *) (&l))[1]); in DEF_SCSI_QCMD()
852 atp_writeb_io(dev, c, 0x14, ((unsigned char *) (&l))[0]); in DEF_SCSI_QCMD()
855 dev->id[c][j].tran_len = 0; in DEF_SCSI_QCMD()
862 if ((j & 0x08) != 0) { in DEF_SCSI_QCMD()
863 j = (j & 0x07) | 0x40; in DEF_SCSI_QCMD()
869 atp_writeb_io(dev, c, 0x15, j | 0x20); in DEF_SCSI_QCMD()
871 atp_writeb_io(dev, c, 0x15, j); in DEF_SCSI_QCMD()
872 atp_writeb_io(dev, c, 0x16, atp_readb_io(dev, c, 0x16) | 0x80); in DEF_SCSI_QCMD()
873 atp_writeb_io(dev, c, 0x16, 0x80); in DEF_SCSI_QCMD()
874 dev->id[c][target_id].dirct = 0; in DEF_SCSI_QCMD()
875 if (l == 0) { in DEF_SCSI_QCMD()
876 if (atp_readb_io(dev, c, 0x1c) == 0) { in DEF_SCSI_QCMD()
878 printk("change SCSI_CMD_REG 0x08\n"); in DEF_SCSI_QCMD()
880 atp_writeb_io(dev, c, 0x18, 0x08); in DEF_SCSI_QCMD()
882 dev->last_cmd[c] |= 0x40; in DEF_SCSI_QCMD()
883 dev->in_snd[c] = 0; in DEF_SCSI_QCMD()
896 i = 0; in DEF_SCSI_QCMD()
903 while (l > 0x10000) { in DEF_SCSI_QCMD()
904 (((u16 *) (prd))[i + 3]) = 0x0000; in DEF_SCSI_QCMD()
905 (((u16 *) (prd))[i + 2]) = 0x0000; in DEF_SCSI_QCMD()
907 l -= 0x10000; in DEF_SCSI_QCMD()
908 bttl += 0x10000; in DEF_SCSI_QCMD()
909 i += 0x04; in DEF_SCSI_QCMD()
913 (((u16 *) (prd))[i + 3]) = 0; in DEF_SCSI_QCMD()
914 i += 0x04; in DEF_SCSI_QCMD()
916 (((u16 *) (prd))[i - 1]) = cpu_to_le16(0x8000); in DEF_SCSI_QCMD()
919 (((unsigned short int *)prd)[0]), in DEF_SCSI_QCMD()
927 printk("send_s870: prdaddr_2 0x%8x target_id %d\n", in DEF_SCSI_QCMD()
932 atp_writeb_pci(dev, c, 2, 0x06); in DEF_SCSI_QCMD()
933 atp_writeb_pci(dev, c, 2, 0x00); in DEF_SCSI_QCMD()
935 j = atp_readb_pci(dev, c, 1) & 0xf3; in DEF_SCSI_QCMD()
936 if ((workreq->cmnd[0] == READ_6) || in DEF_SCSI_QCMD()
937 (workreq->cmnd[0] == READ_10) || in DEF_SCSI_QCMD()
938 (workreq->cmnd[0] == WRITE_6) || in DEF_SCSI_QCMD()
939 (workreq->cmnd[0] == WRITE_10)) { in DEF_SCSI_QCMD()
940 j |= 0x0c; in DEF_SCSI_QCMD()
944 if ((workreq->cmnd[0] == READ_6) || in DEF_SCSI_QCMD()
945 (workreq->cmnd[0] == READ_10) || in DEF_SCSI_QCMD()
946 (workreq->cmnd[0] == WRITE_6) || in DEF_SCSI_QCMD()
947 (workreq->cmnd[0] == WRITE_10)) in DEF_SCSI_QCMD()
948 atp_writeb_base(dev, 0x3b, in DEF_SCSI_QCMD()
949 (atp_readb_base(dev, 0x3b) & 0x3f) | 0xc0); in DEF_SCSI_QCMD()
951 atp_writeb_base(dev, 0x3b, in DEF_SCSI_QCMD()
952 atp_readb_base(dev, 0x3b) & 0x3f); in DEF_SCSI_QCMD()
954 if ((workreq->cmnd[0] == READ_6) || in DEF_SCSI_QCMD()
955 (workreq->cmnd[0] == READ_10) || in DEF_SCSI_QCMD()
956 (workreq->cmnd[0] == WRITE_6) || in DEF_SCSI_QCMD()
957 (workreq->cmnd[0] == WRITE_10)) in DEF_SCSI_QCMD()
958 atp_writeb_base(dev, 0x3a, in DEF_SCSI_QCMD()
959 (atp_readb_base(dev, 0x3a) & 0xf3) | 0x08); in DEF_SCSI_QCMD()
961 atp_writeb_base(dev, 0x3a, in DEF_SCSI_QCMD()
962 atp_readb_base(dev, 0x3a) & 0xf3); in DEF_SCSI_QCMD()
966 dev->id[c][target_id].dirct = 0x20; in DEF_SCSI_QCMD()
967 if (atp_readb_io(dev, c, 0x1c) == 0) { in DEF_SCSI_QCMD()
968 atp_writeb_io(dev, c, 0x18, 0x08); in DEF_SCSI_QCMD()
969 atp_writeb_pci(dev, c, 0, 0x01); in DEF_SCSI_QCMD()
974 dev->last_cmd[c] |= 0x40; in DEF_SCSI_QCMD()
976 dev->in_snd[c] = 0; in DEF_SCSI_QCMD()
979 if (atp_readb_io(dev, c, 0x1c) == 0) { in DEF_SCSI_QCMD()
980 atp_writeb_io(dev, c, 0x18, 0x08); in DEF_SCSI_QCMD()
981 atp_writeb_pci(dev, c, 0, 0x09); in DEF_SCSI_QCMD()
986 dev->last_cmd[c] |= 0x40; in DEF_SCSI_QCMD()
988 dev->in_snd[c] = 0; in DEF_SCSI_QCMD()
998 atp_writew_io(dev, 0, 0x1c, *val); in fun_scam()
999 for (i = 0; i < 10; i++) { /* stable >= bus settle delay(400 ns) */ in fun_scam()
1000 k = atp_readw_io(dev, 0, 0x1c); in fun_scam()
1002 if ((k & 0x8000) != 0) /* DB7 all release? */ in fun_scam()
1003 i = 0; in fun_scam()
1005 *val |= 0x4000; /* assert DB6 */ in fun_scam()
1006 atp_writew_io(dev, 0, 0x1c, *val); in fun_scam()
1007 *val &= 0xdfff; /* assert DB5 */ in fun_scam()
1008 atp_writew_io(dev, 0, 0x1c, *val); in fun_scam()
1009 for (i = 0; i < 10; i++) { /* stable >= bus settle delay(400 ns) */ in fun_scam()
1010 if ((atp_readw_io(dev, 0, 0x1c) & 0x2000) != 0) /* DB5 all release? */ in fun_scam()
1011 i = 0; in fun_scam()
1013 *val |= 0x8000; /* no DB4-0, assert DB7 */ in fun_scam()
1014 *val &= 0xe0ff; in fun_scam()
1015 atp_writew_io(dev, 0, 0x1c, *val); in fun_scam()
1016 *val &= 0xbfff; /* release DB6 */ in fun_scam()
1017 atp_writew_io(dev, 0, 0x1c, *val); in fun_scam()
1018 for (i = 0; i < 10; i++) { /* stable >= bus settle delay(400 ns) */ in fun_scam()
1019 if ((atp_readw_io(dev, 0, 0x1c) & 0x4000) != 0) /* DB6 all release? */ in fun_scam()
1020 i = 0; in fun_scam()
1035 0x38, 0x31, 0x32, 0x2b, 0x34, 0x2d, 0x2e, 0x27 in tscam()
1040 for (i = 0; i < 0x10; i++) { in tscam()
1041 udelay(0xffff); in tscam()
1045 atp_writeb_io(dev, 0, 1, 0x08); in tscam()
1046 atp_writeb_io(dev, 0, 2, 0x7f); in tscam()
1047 atp_writeb_io(dev, 0, 0x11, 0x20); in tscam()
1049 if ((scam_on & 0x40) == 0) { in tscam()
1053 m <<= dev->host_id[0]; in tscam()
1056 m |= 0xff00; in tscam()
1060 atp_writeb_io(dev, 0, 0x02, 0x02); /* 2*2=4ms,3EH 2/32*3E=3.9ms */ in tscam()
1061 atp_writeb_io(dev, 0, 0x03, 0); in tscam()
1062 atp_writeb_io(dev, 0, 0x04, 0); in tscam()
1063 atp_writeb_io(dev, 0, 0x05, 0); in tscam()
1064 atp_writeb_io(dev, 0, 0x06, 0); in tscam()
1065 atp_writeb_io(dev, 0, 0x07, 0); in tscam()
1066 atp_writeb_io(dev, 0, 0x08, 0); in tscam()
1068 for (i = 0; i < j; i++) { in tscam()
1071 if ((m & assignid_map) != 0) { in tscam()
1074 atp_writeb_io(dev, 0, 0x0f, 0); in tscam()
1075 atp_writeb_io(dev, 0, 0x12, 0); in tscam()
1076 atp_writeb_io(dev, 0, 0x13, 0); in tscam()
1077 atp_writeb_io(dev, 0, 0x14, 0); in tscam()
1079 k = (i & 0x07) | 0x40; in tscam()
1083 atp_writeb_io(dev, 0, 0x15, k); in tscam()
1085 atp_writeb_io(dev, 0, 0x1b, 0x01); in tscam()
1087 atp_writeb_io(dev, 0, 0x1b, 0x00); in tscam()
1089 atp_writeb_io(dev, 0, 0x18, 0x09); in tscam()
1091 while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0x00) in tscam()
1093 k = atp_readb_io(dev, 0, 0x17); in tscam()
1094 if ((k == 0x85) || (k == 0x42)) in tscam()
1096 if (k != 0x16) in tscam()
1097 atp_writeb_io(dev, 0, 0x10, 0x41); in tscam()
1098 } while (k != 0x16); in tscam()
1099 if ((k == 0x85) || (k == 0x42)) in tscam()
1104 atp_writeb_io(dev, 0, 0x02, 0x7f); in tscam()
1105 atp_writeb_io(dev, 0, 0x1b, 0x02); in tscam()
1109 val = 0x0080; /* bsy */ in tscam()
1110 atp_writew_io(dev, 0, 0x1c, val); in tscam()
1111 val |= 0x0040; /* sel */ in tscam()
1112 atp_writew_io(dev, 0, 0x1c, val); in tscam()
1113 val |= 0x0004; /* msg */ in tscam()
1114 atp_writew_io(dev, 0, 0x1c, val); in tscam()
1116 val &= 0x007f; /* no bsy */ in tscam()
1117 atp_writew_io(dev, 0, 0x1c, val); in tscam()
1119 val &= 0x00fb; /* after 1ms no msg */ in tscam()
1120 atp_writew_io(dev, 0, 0x1c, val); in tscam()
1121 while ((atp_readb_io(dev, 0, 0x1c) & 0x04) != 0) in tscam()
1125 for (n = 0; n < 0x30000; n++) in tscam()
1126 if ((atp_readb_io(dev, 0, 0x1c) & 0x80) != 0) /* bsy ? */ in tscam()
1128 if (n < 0x30000) in tscam()
1129 for (n = 0; n < 0x30000; n++) in tscam()
1130 if ((atp_readb_io(dev, 0, 0x1c) & 0x81) == 0x0081) { in tscam()
1132 val |= 0x8003; /* io,cd,db7 */ in tscam()
1133 atp_writew_io(dev, 0, 0x1c, val); in tscam()
1135 val &= 0x00bf; /* no sel */ in tscam()
1136 atp_writew_io(dev, 0, 0x1c, val); in tscam()
1151 if ((atp_readb_io(dev, 0, 0x1c) & 0x80) == 0x00) { /* bsy ? */ in tscam()
1152 atp_writew_io(dev, 0, 0x1c, 0); in tscam()
1153 atp_writeb_io(dev, 0, 0x1b, 0); in tscam()
1154 atp_writeb_io(dev, 0, 0x15, 0); in tscam()
1155 atp_writeb_io(dev, 0, 0x18, 0x09); in tscam()
1156 while ((atp_readb_io(dev, 0, 0x1f) & 0x80) == 0) in tscam()
1158 atp_readb_io(dev, 0, 0x17); in tscam()
1161 val &= 0x00ff; /* synchronization */ in tscam()
1162 val |= 0x3f00; in tscam()
1165 val &= 0x00ff; /* isolation */ in tscam()
1166 val |= 0x2000; in tscam()
1170 j = 0; in tscam()
1173 if ((atp_readw_io(dev, 0, 0x1c) & 0x2000) == 0) in tscam()
1176 val &= 0x00ff; /* get ID_STRING */ in tscam()
1177 val |= 0x2000; in tscam()
1179 if ((k & 0x03) == 0) in tscam()
1181 mbuf[j] <<= 0x01; in tscam()
1182 mbuf[j] &= 0xfe; in tscam()
1183 if ((k & 0x02) != 0) in tscam()
1184 mbuf[j] |= 0x01; in tscam()
1186 if (i > 0) in tscam()
1193 /* mbuf[32]=0; in tscam()
1194 printk(" \n%x %x %x %s\n ",assignid_map,mbuf[0],mbuf[1],&mbuf[2]); */ in tscam()
1196 j = mbuf[0]; in tscam()
1197 if ((j & 0x20) != 0) { /* bit5=1:ID up to 7 */ in tscam()
1200 if ((j & 0x06) != 0) { /* IDvalid? */ in tscam()
1205 if ((m & assignid_map) == 0) in tscam()
1207 if (k > 0) in tscam()
1213 if ((m & assignid_map) != 0) { /* srch from max acceptable ID# */ in tscam()
1218 if ((m & assignid_map) == 0) in tscam()
1220 if (k > 0) in tscam()
1229 quintet[0] = 0x38; /* 1st dft ID<8 */ in tscam()
1231 quintet[0] = 0x31; /* 1st ID>=8 */ in tscam()
1233 k &= 0x07; in tscam()
1236 val &= 0x00ff; /* AssignID 1stQuintet,AH=001xxxxx */ in tscam()
1237 m = quintet[0] << 8; in tscam()
1240 val &= 0x00ff; /* AssignID 2ndQuintet,AH=001xxxxx */ in tscam()
1252 for (j=0; j < 2; j++) { in atp870u_free_tables()
1253 for (k = 0; k < 16; k++) { in atp870u_free_tables()
1268 for(c=0;c < 2;c++) { in atp870u_init_tables()
1269 for(k=0;k<16;k++) { in atp870u_init_tables()
1280 atp_dev->id[c][k].devsp=0x20; in atp870u_init_tables()
1281 atp_dev->id[c][k].devtype = 0x7f; in atp870u_init_tables()
1285 atp_dev->active_id[c] = 0; in atp870u_init_tables()
1286 atp_dev->wide_id[c] = 0; in atp870u_init_tables()
1287 atp_dev->host_id[c] = 0x07; in atp870u_init_tables()
1288 atp_dev->quhd[c] = 0; in atp870u_init_tables()
1289 atp_dev->quend[c] = 0; in atp870u_init_tables()
1290 atp_dev->last_cmd[c] = 0xff; in atp870u_init_tables()
1291 atp_dev->in_snd[c] = 0; in atp870u_init_tables()
1292 atp_dev->in_int[c] = 0; in atp870u_init_tables()
1294 for (k = 0; k < qcnt; k++) { in atp870u_init_tables()
1297 for (k = 0; k < 16; k++) { in atp870u_init_tables()
1299 atp_dev->sp[c][k] = 0x04; in atp870u_init_tables()
1302 return 0; in atp870u_init_tables()
1307 atp_writeb_io(atp, c, 0, host_id | 0x08); in atp_set_host_id()
1308 atp_writeb_io(atp, c, 0x18, 0); in atp_set_host_id()
1309 while ((atp_readb_io(atp, c, 0x1f) & 0x80) == 0) in atp_set_host_id()
1311 atp_readb_io(atp, c, 0x17); in atp_set_host_id()
1313 atp_writeb_io(atp, c, 2, 0x7f); in atp_set_host_id()
1314 atp_writeb_io(atp, c, 0x11, 0x20); in atp_set_host_id()
1329 pci_read_config_byte(pdev, 0x49, &host_id); in atp870_init()
1335 atpdev->ioport[0] = shpnt->io_port; in atp870_init()
1336 atpdev->pciport[0] = shpnt->io_port + 0x20; in atp870_init()
1337 host_id &= 0x07; in atp870_init()
1338 atpdev->host_id[0] = host_id; in atp870_init()
1339 scam_on = atp_readb_pci(atpdev, 0, 2); in atp870_init()
1340 atpdev->global_map[0] = atp_readb_base(atpdev, 0x2d); in atp870_init()
1341 atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x2e); in atp870_init()
1343 if (atpdev->ultra_map[0] == 0) { in atp870_init()
1344 scam_on = 0x00; in atp870_init()
1345 atpdev->global_map[0] = 0x20; in atp870_init()
1346 atpdev->ultra_map[0] = 0xffff; in atp870_init()
1349 if (pdev->revision > 0x07) /* check if atp876 chip */ in atp870_init()
1350 atp_writeb_base(atpdev, 0x3e, 0x00); /* enable terminator */ in atp870_init()
1352 k = (atp_readb_base(atpdev, 0x3a) & 0xf3) | 0x10; in atp870_init()
1353 atp_writeb_base(atpdev, 0x3a, k); in atp870_init()
1354 atp_writeb_base(atpdev, 0x3a, k & 0xdf); in atp870_init()
1356 atp_writeb_base(atpdev, 0x3a, k); in atp870_init()
1358 atp_set_host_id(atpdev, 0, host_id); in atp870_init()
1361 atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) | 0x10); in atp870_init()
1362 atp_is(atpdev, 0, wide_chip, 0); in atp870_init()
1363 atp_writeb_base(atpdev, 0x3a, atp_readb_base(atpdev, 0x3a) & 0xef); in atp870_init()
1364 atp_writeb_base(atpdev, 0x3b, atp_readb_base(atpdev, 0x3b) | 0x20); in atp870_init()
1376 pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x80); in atp880_init()
1378 atpdev->ioport[0] = shpnt->io_port + 0x40; in atp880_init()
1379 atpdev->pciport[0] = shpnt->io_port + 0x28; in atp880_init()
1381 host_id = atp_readb_base(atpdev, 0x39) >> 4; in atp880_init()
1386 atpdev->host_id[0] = host_id; in atp880_init()
1388 atpdev->global_map[0] = atp_readb_base(atpdev, 0x35); in atp880_init()
1389 atpdev->ultra_map[0] = atp_readw_base(atpdev, 0x3c); in atp880_init()
1391 n = 0x3f09; in atp880_init()
1392 while (n < 0x4000) { in atp880_init()
1393 m = 0; in atp880_init()
1394 atp_writew_base(atpdev, 0x34, n); in atp880_init()
1395 n += 0x0002; in atp880_init()
1396 if (atp_readb_base(atpdev, 0x30) == 0xff) in atp880_init()
1399 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30); in atp880_init()
1400 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31); in atp880_init()
1401 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32); in atp880_init()
1402 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33); in atp880_init()
1403 atp_writew_base(atpdev, 0x34, n); in atp880_init()
1404 n += 0x0002; in atp880_init()
1405 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30); in atp880_init()
1406 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31); in atp880_init()
1407 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32); in atp880_init()
1408 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33); in atp880_init()
1409 atp_writew_base(atpdev, 0x34, n); in atp880_init()
1410 n += 0x0002; in atp880_init()
1411 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30); in atp880_init()
1412 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31); in atp880_init()
1413 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32); in atp880_init()
1414 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33); in atp880_init()
1415 atp_writew_base(atpdev, 0x34, n); in atp880_init()
1416 n += 0x0002; in atp880_init()
1417 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x30); in atp880_init()
1418 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x31); in atp880_init()
1419 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x32); in atp880_init()
1420 atpdev->sp[0][m++] = atp_readb_base(atpdev, 0x33); in atp880_init()
1421 n += 0x0018; in atp880_init()
1423 atp_writew_base(atpdev, 0x34, 0); in atp880_init()
1424 atpdev->ultra_map[0] = 0; in atp880_init()
1425 atpdev->async[0] = 0; in atp880_init()
1426 for (k = 0; k < 16; k++) { in atp880_init()
1428 if (atpdev->sp[0][k] > 1) in atp880_init()
1429 atpdev->ultra_map[0] |= n; in atp880_init()
1431 if (atpdev->sp[0][k] == 0) in atp880_init()
1432 atpdev->async[0] |= n; in atp880_init()
1434 atpdev->async[0] = ~(atpdev->async[0]); in atp880_init()
1435 atp_writeb_base(atpdev, 0x35, atpdev->global_map[0]); in atp880_init()
1437 k = atp_readb_base(atpdev, 0x38) & 0x80; in atp880_init()
1438 atp_writeb_base(atpdev, 0x38, k); in atp880_init()
1439 atp_writeb_base(atpdev, 0x3b, 0x20); in atp880_init()
1441 atp_writeb_base(atpdev, 0x3b, 0); in atp880_init()
1443 atp_readb_io(atpdev, 0, 0x1b); in atp880_init()
1444 atp_readb_io(atpdev, 0, 0x17); in atp880_init()
1446 atp_set_host_id(atpdev, 0, host_id); in atp880_init()
1448 tscam(shpnt, true, atp_readb_base(atpdev, 0x22)); in atp880_init()
1449 atp_is(atpdev, 0, true, atp_readb_base(atpdev, 0x3f) & 0x40); in atp880_init()
1450 atp_writeb_base(atpdev, 0x38, 0xb0); in atp880_init()
1467 atpdev->ioport[0] = shpnt->io_port + 0x80; in atp885_init()
1468 atpdev->ioport[1] = shpnt->io_port + 0xc0; in atp885_init()
1469 atpdev->pciport[0] = shpnt->io_port + 0x40; in atp885_init()
1470 atpdev->pciport[1] = shpnt->io_port + 0x50; in atp885_init()
1472 c = atp_readb_base(atpdev, 0x29); in atp885_init()
1473 atp_writeb_base(atpdev, 0x29, c | 0x04); in atp885_init()
1475 n = 0x1f80; in atp885_init()
1476 while (n < 0x2000) { in atp885_init()
1477 atp_writew_base(atpdev, 0x3c, n); in atp885_init()
1478 if (atp_readl_base(atpdev, 0x38) == 0xffffffff) in atp885_init()
1480 for (m = 0; m < 2; m++) { in atp885_init()
1481 atpdev->global_map[m] = 0; in atp885_init()
1482 for (k = 0; k < 4; k++) { in atp885_init()
1483 atp_writew_base(atpdev, 0x3c, n++); in atp885_init()
1484 ((u32 *)&setupdata[m][0])[k] = in atp885_init()
1485 atp_readl_base(atpdev, 0x38); in atp885_init()
1487 for (k = 0; k < 4; k++) { in atp885_init()
1488 atp_writew_base(atpdev, 0x3c, n++); in atp885_init()
1489 ((u32 *)&atpdev->sp[m][0])[k] = in atp885_init()
1490 atp_readl_base(atpdev, 0x38); in atp885_init()
1495 c = atp_readb_base(atpdev, 0x29); in atp885_init()
1496 atp_writeb_base(atpdev, 0x29, c & 0xfb); in atp885_init()
1497 for (c = 0; c < 2; c++) { in atp885_init()
1498 atpdev->ultra_map[c] = 0; in atp885_init()
1499 atpdev->async[c] = 0; in atp885_init()
1500 for (k = 0; k < 16; k++) { in atp885_init()
1505 if (atpdev->sp[c][k] == 0) in atp885_init()
1510 if (atpdev->global_map[c] == 0) { in atp885_init()
1512 if ((k & 0x40) != 0) in atp885_init()
1513 atpdev->global_map[c] |= 0x20; in atp885_init()
1514 k &= 0x07; in atp885_init()
1516 if ((setupdata[c][2] & 0x04) != 0) in atp885_init()
1517 atpdev->global_map[c] |= 0x08; in atp885_init()
1518 atpdev->host_id[c] = setupdata[c][0] & 0x07; in atp885_init()
1522 k = atp_readb_base(atpdev, 0x28) & 0x8f; in atp885_init()
1523 k |= 0x10; in atp885_init()
1524 atp_writeb_base(atpdev, 0x28, k); in atp885_init()
1525 atp_writeb_pci(atpdev, 0, 1, 0x80); in atp885_init()
1526 atp_writeb_pci(atpdev, 1, 1, 0x80); in atp885_init()
1528 atp_writeb_pci(atpdev, 0, 1, 0); in atp885_init()
1529 atp_writeb_pci(atpdev, 1, 1, 0); in atp885_init()
1531 atp_readb_io(atpdev, 0, 0x1b); in atp885_init()
1532 atp_readb_io(atpdev, 0, 0x17); in atp885_init()
1533 atp_readb_io(atpdev, 1, 0x1b); in atp885_init()
1534 atp_readb_io(atpdev, 1, 0x17); in atp885_init()
1536 k = atpdev->host_id[0]; in atp885_init()
1538 k = (k & 0x07) | 0x40; in atp885_init()
1539 atp_set_host_id(atpdev, 0, k); in atp885_init()
1543 k = (k & 0x07) | 0x40; in atp885_init()
1548 atp_is(atpdev, 0, true, atp_readb_io(atpdev, 0, 0x1b) >> 7); in atp885_init()
1549 atp_writeb_io(atpdev, 0, 0x16, 0x80); in atp885_init()
1551 atp_is(atpdev, 1, true, atp_readb_io(atpdev, 1, 0x1b) >> 7); in atp885_init()
1552 atp_writeb_io(atpdev, 1, 0x16, 0x80); in atp885_init()
1553 k = atp_readb_base(atpdev, 0x28) & 0xcf; in atp885_init()
1554 k |= 0xc0; in atp885_init()
1555 atp_writeb_base(atpdev, 0x28, k); in atp885_init()
1556 k = atp_readb_base(atpdev, 0x1f) | 0x80; in atp885_init()
1557 atp_writeb_base(atpdev, 0x1f, k); in atp885_init()
1558 k = atp_readb_base(atpdev, 0x29) | 0x01; in atp885_init()
1559 atp_writeb_base(atpdev, 0x29, k); in atp885_init()
1561 shpnt->max_lun = (atpdev->global_map[0] & 0x07) + 1; in atp885_init()
1563 shpnt->this_id = atpdev->host_id[0]; in atp885_init()
1604 shpnt->io_port = pci_resource_start(pdev, 0); in atp870u_probe()
1605 shpnt->io_port &= 0xfffffff8; in atp870u_probe()
1606 shpnt->n_io_port = pci_resource_len(pdev, 0); in atp870u_probe()
1635 return 0; in atp870u_probe()
1668 for (j = 0; j < 0x18; j++) { in atp870u_abort()
1671 printk(" r1c=%2x", atp_readb_io(dev, c, 0x1c)); in atp870u_abort()
1672 printk(" r1f=%2x in_snd=%2x ", atp_readb_io(dev, c, 0x1f), dev->in_snd[c]); in atp870u_abort()
1673 printk(" d00=%2x", atp_readb_pci(dev, c, 0x00)); in atp870u_abort()
1674 printk(" d02=%2x", atp_readb_pci(dev, c, 0x02)); in atp870u_abort()
1675 for(j=0;j<16;j++) { in atp870u_abort()
1679 for (k=0; k < workrequ->cmd_len; k++) { in atp870u_abort()
1703 return 0; in atp870u_show_info()
1720 ip[0] = heads; in atp870u_biosparam()
1724 return 0; in atp870u_biosparam()
1767 { 0, },
1787 static unsigned char satn[9] = { 0, 0, 0, 0, 0, 0, 0, 6, 6 }; in atp_is()
1788 static unsigned char inqd[9] = { 0x12, 0, 0, 0, 0x24, 0, 0, 0x24, 6 }; in atp_is()
1789 static unsigned char synn[6] = { 0x80, 1, 3, 1, 0x19, 0x0e }; in atp_is()
1790 unsigned char synu[6] = { 0x80, 1, 3, 1, 0x0a, 0x0e }; in atp_is()
1791 static unsigned char synw[6] = { 0x80, 1, 3, 1, 0x19, 0x0e }; in atp_is()
1792 static unsigned char synw_870[6] = { 0x80, 1, 3, 1, 0x0c, 0x07 }; in atp_is()
1793 unsigned char synuw[6] = { 0x80, 1, 3, 1, 0x0a, 0x0e }; in atp_is()
1794 static unsigned char wide[6] = { 0x80, 1, 2, 3, 1, 0 }; in atp_is()
1795 static unsigned char u3[9] = { 0x80, 1, 6, 4, 0x09, 00, 0x0e, 0x01, 0x02 }; in atp_is()
1797 for (i = 0; i < 16; i++) { in atp_is()
1802 if ((m & dev->active_id[c]) != 0) { in atp_is()
1809 atp_writeb_io(dev, c, 0x1b, wide_chip ? 0x01 : 0x00); in atp_is()
1810 atp_writeb_io(dev, c, 1, 0x08); in atp_is()
1811 atp_writeb_io(dev, c, 2, 0x7f); in atp_is()
1812 atp_writeb_io(dev, c, 3, satn[0]); in atp_is()
1818 atp_writeb_io(dev, c, 0x0f, 0); in atp_is()
1819 atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp); in atp_is()
1820 atp_writeb_io(dev, c, 0x12, 0); in atp_is()
1821 atp_writeb_io(dev, c, 0x13, satn[6]); in atp_is()
1822 atp_writeb_io(dev, c, 0x14, satn[7]); in atp_is()
1824 if ((j & 0x08) != 0) { in atp_is()
1825 j = (j & 0x07) | 0x40; in atp_is()
1827 atp_writeb_io(dev, c, 0x15, j); in atp_is()
1828 atp_writeb_io(dev, c, 0x18, satn[8]); in atp_is()
1830 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) in atp_is()
1833 if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e) in atp_is()
1836 while (atp_readb_io(dev, c, 0x17) != 0x8e) in atp_is()
1841 atp_writeb_io(dev, c, 0x10, 0x30); in atp_is()
1843 atp_writeb_io(dev, c, 0x14, 0x00); in atp_is()
1845 atp_writeb_io(dev, c, 0x04, 0x00); in atp_is()
1848 atp_writeb_io(dev, c, 0x18, 0x08); in atp_is()
1850 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) in atp_is()
1853 j = atp_readb_io(dev, c, 0x17); in atp_is()
1854 if (j != 0x16) { in atp_is()
1855 atp_writeb_io(dev, c, 0x10, 0x41); in atp_is()
1859 atp_writeb_io(dev, c, 3, inqd[0]); in atp_is()
1865 atp_writeb_io(dev, c, 0x0f, 0); in atp_is()
1866 atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp); in atp_is()
1867 atp_writeb_io(dev, c, 0x12, 0); in atp_is()
1868 atp_writeb_io(dev, c, 0x13, inqd[6]); in atp_is()
1869 atp_writeb_io(dev, c, 0x14, inqd[7]); in atp_is()
1870 atp_writeb_io(dev, c, 0x18, inqd[8]); in atp_is()
1872 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) in atp_is()
1875 if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e) in atp_is()
1878 while (atp_readb_io(dev, c, 0x17) != 0x8e) in atp_is()
1882 atp_writeb_io(dev, c, 0x1b, 0x00); in atp_is()
1884 atp_writeb_io(dev, c, 0x18, 0x08); in atp_is()
1885 j = 0; in atp_is()
1887 k = atp_readb_io(dev, c, 0x1f); in atp_is()
1888 if ((k & 0x01) != 0) { in atp_is()
1889 mbuf[j++] = atp_readb_io(dev, c, 0x19); in atp_is()
1892 if ((k & 0x80) == 0) { in atp_is()
1895 j = atp_readb_io(dev, c, 0x17); in atp_is()
1896 if (j == 0x16) { in atp_is()
1899 atp_writeb_io(dev, c, 0x10, 0x46); in atp_is()
1900 atp_writeb_io(dev, c, 0x12, 0); in atp_is()
1901 atp_writeb_io(dev, c, 0x13, 0); in atp_is()
1902 atp_writeb_io(dev, c, 0x14, 0); in atp_is()
1903 atp_writeb_io(dev, c, 0x18, 0x08); in atp_is()
1905 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) in atp_is()
1908 if (atp_readb_io(dev, c, 0x17) != 0x16) in atp_is()
1912 mbuf[36] = 0; in atp_is()
1914 dev->id[c][i].devtype = mbuf[0]; in atp_is()
1919 if ((mbuf[7] & 0x60) == 0) { in atp_is()
1923 if ((i < 8) && ((dev->global_map[c] & 0x20) == 0)) in atp_is()
1926 if ((dev->global_map[c] & 0x20) == 0) in atp_is()
1929 if (lvdmode == 0) { in atp_is()
1932 if (dev->sp[c][i] != 0x04) // force u2 in atp_is()
1937 atp_writeb_io(dev, c, 0x1b, 0x01); in atp_is()
1938 atp_writeb_io(dev, c, 3, satn[0]); in atp_is()
1944 atp_writeb_io(dev, c, 0x0f, 0); in atp_is()
1945 atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp); in atp_is()
1946 atp_writeb_io(dev, c, 0x12, 0); in atp_is()
1947 atp_writeb_io(dev, c, 0x13, satn[6]); in atp_is()
1948 atp_writeb_io(dev, c, 0x14, satn[7]); in atp_is()
1949 atp_writeb_io(dev, c, 0x18, satn[8]); in atp_is()
1951 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) in atp_is()
1954 if (atp_readb_io(dev, c, 0x17) != 0x11 && atp_readb_io(dev, c, 0x17) != 0x8e) in atp_is()
1957 while (atp_readb_io(dev, c, 0x17) != 0x8e) in atp_is()
1961 j = 0; in atp_is()
1962 atp_writeb_io(dev, c, 0x14, 0x09); in atp_is()
1963 atp_writeb_io(dev, c, 0x18, 0x20); in atp_is()
1965 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) { in atp_is()
1966 if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) in atp_is()
1967 atp_writeb_io(dev, c, 0x19, u3[j++]); in atp_is()
1971 while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00) in atp_is()
1974 j = atp_readb_io(dev, c, 0x17) & 0x0f; in atp_is()
1975 if (j == 0x0f) { in atp_is()
1978 if (j == 0x0a) { in atp_is()
1981 if (j == 0x0e) { in atp_is()
1986 atp_writeb_io(dev, c, 0x18, 0x20); in atp_is()
1987 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) { in atp_is()
1988 if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) in atp_is()
1989 atp_writeb_io(dev, c, 0x19, 0); in atp_is()
1992 j = atp_readb_io(dev, c, 0x17) & 0x0f; in atp_is()
1993 if (j == 0x0f) { in atp_is()
1996 if (j == 0x0a) { in atp_is()
1999 if (j == 0x0e) { in atp_is()
2004 atp_writeb_io(dev, c, 0x14, 0x09); in atp_is()
2005 atp_writeb_io(dev, c, 0x18, 0x20); in atp_is()
2006 k = 0; in atp_is()
2008 j = atp_readb_io(dev, c, 0x1f); in atp_is()
2009 if ((j & 0x01) != 0) { in atp_is()
2010 mbuf[k++] = atp_readb_io(dev, c, 0x19); in atp_is()
2013 if ((j & 0x80) == 0x00) { in atp_is()
2016 j = atp_readb_io(dev, c, 0x17) & 0x0f; in atp_is()
2017 if (j == 0x0f) { in atp_is()
2020 if (j == 0x0a) { in atp_is()
2023 if (j == 0x0e) { in atp_is()
2028 atp_writeb_io(dev, c, 0x10, 0x30); in atp_is()
2029 atp_writeb_io(dev, c, 0x14, 0x00); in atp_is()
2030 atp_writeb_io(dev, c, 0x18, 0x08); in atp_is()
2032 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00); in atp_is()
2034 j = atp_readb_io(dev, c, 0x17); in atp_is()
2035 if (j != 0x16) { in atp_is()
2036 if (j == 0x4e) { in atp_is()
2041 if (mbuf[0] != 0x01) { in atp_is()
2044 if (mbuf[1] != 0x06) { in atp_is()
2047 if (mbuf[2] != 0x04) { in atp_is()
2050 if (mbuf[3] == 0x09) { in atp_is()
2054 dev->id[c][i].devsp = 0xce; in atp_is()
2062 atp_writeb_io(dev, c, 0x1b, 0x01); in atp_is()
2063 atp_writeb_io(dev, c, 3, satn[0]); in atp_is()
2069 atp_writeb_io(dev, c, 0x0f, 0); in atp_is()
2070 atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp); in atp_is()
2071 atp_writeb_io(dev, c, 0x12, 0); in atp_is()
2072 atp_writeb_io(dev, c, 0x13, satn[6]); in atp_is()
2073 atp_writeb_io(dev, c, 0x14, satn[7]); in atp_is()
2074 atp_writeb_io(dev, c, 0x18, satn[8]); in atp_is()
2076 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) in atp_is()
2079 if (atp_readb_io(dev, c, 0x17) != 0x11 && in atp_is()
2080 atp_readb_io(dev, c, 0x17) != 0x8e) in atp_is()
2083 while (atp_readb_io(dev, c, 0x17) != 0x8e) in atp_is()
2087 j = 0; in atp_is()
2088 atp_writeb_io(dev, c, 0x14, 0x05); in atp_is()
2089 atp_writeb_io(dev, c, 0x18, 0x20); in atp_is()
2091 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) { in atp_is()
2092 if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) in atp_is()
2093 atp_writeb_io(dev, c, 0x19, wide[j++]); in atp_is()
2097 while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00) in atp_is()
2100 j = atp_readb_io(dev, c, 0x17) & 0x0f; in atp_is()
2101 if (j == 0x0f) { in atp_is()
2104 if (j == 0x0a) { in atp_is()
2107 if (j == 0x0e) { in atp_is()
2112 atp_writeb_io(dev, c, 0x18, 0x20); in atp_is()
2113 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) { in atp_is()
2114 if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) in atp_is()
2115 atp_writeb_io(dev, c, 0x19, 0); in atp_is()
2118 j = atp_readb_io(dev, c, 0x17) & 0x0f; in atp_is()
2119 if (j == 0x0f) { in atp_is()
2122 if (j == 0x0a) { in atp_is()
2125 if (j == 0x0e) { in atp_is()
2130 atp_writeb_io(dev, c, 0x14, 0xff); in atp_is()
2131 atp_writeb_io(dev, c, 0x18, 0x20); in atp_is()
2132 k = 0; in atp_is()
2134 j = atp_readb_io(dev, c, 0x1f); in atp_is()
2135 if ((j & 0x01) != 0) { in atp_is()
2136 mbuf[k++] = atp_readb_io(dev, c, 0x19); in atp_is()
2139 if ((j & 0x80) == 0x00) { in atp_is()
2142 j = atp_readb_io(dev, c, 0x17) & 0x0f; in atp_is()
2143 if (j == 0x0f) { in atp_is()
2146 if (j == 0x0a) { in atp_is()
2149 if (j == 0x0e) { in atp_is()
2154 atp_writeb_io(dev, c, 0x10, 0x30); in atp_is()
2155 atp_writeb_io(dev, c, 0x14, 0x00); in atp_is()
2156 atp_writeb_io(dev, c, 0x18, 0x08); in atp_is()
2158 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) in atp_is()
2161 j = atp_readb_io(dev, c, 0x17); in atp_is()
2162 if (j != 0x16) { in atp_is()
2163 if (j == 0x4e) { in atp_is()
2168 if (mbuf[0] != 0x01) { in atp_is()
2171 if (mbuf[1] != 0x02) { in atp_is()
2174 if (mbuf[2] != 0x03) { in atp_is()
2177 if (mbuf[3] != 0x01) { in atp_is()
2184 if ((dev->id[c][i].devtype == 0x00) || in atp_is()
2185 (dev->id[c][i].devtype == 0x07) || in atp_is()
2186 ((dev->id[c][i].devtype == 0x05) && ((n & 0x10) != 0))) { in atp_is()
2189 if ((dev->async[c] & m) != 0) { in atp_is()
2195 if ((!is885(dev) && !is880(dev)) || (dev->sp[c][i] == 0x02)) { in atp_is()
2196 synu[4] = 0x0c; in atp_is()
2197 synuw[4] = 0x0c; in atp_is()
2199 if (dev->sp[c][i] >= 0x03) { in atp_is()
2200 synu[4] = 0x0a; in atp_is()
2201 synuw[4] = 0x0a; in atp_is()
2204 j = 0; in atp_is()
2205 if ((m & dev->wide_id[c]) != 0) { in atp_is()
2206 j |= 0x01; in atp_is()
2208 atp_writeb_io(dev, c, 0x1b, j); in atp_is()
2209 atp_writeb_io(dev, c, 3, satn[0]); in atp_is()
2215 atp_writeb_io(dev, c, 0x0f, 0); in atp_is()
2216 atp_writeb_io(dev, c, 0x11, dev->id[c][i].devsp); in atp_is()
2217 atp_writeb_io(dev, c, 0x12, 0); in atp_is()
2218 atp_writeb_io(dev, c, 0x13, satn[6]); in atp_is()
2219 atp_writeb_io(dev, c, 0x14, satn[7]); in atp_is()
2220 atp_writeb_io(dev, c, 0x18, satn[8]); in atp_is()
2222 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) in atp_is()
2225 if (atp_readb_io(dev, c, 0x17) != 0x11 && in atp_is()
2226 atp_readb_io(dev, c, 0x17) != 0x8e) in atp_is()
2229 while (atp_readb_io(dev, c, 0x17) != 0x8e) in atp_is()
2233 j = 0; in atp_is()
2234 atp_writeb_io(dev, c, 0x14, 0x06); in atp_is()
2235 atp_writeb_io(dev, c, 0x18, 0x20); in atp_is()
2237 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0) { in atp_is()
2238 if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0) { in atp_is()
2239 if ((m & dev->wide_id[c]) != 0) { in atp_is()
2241 if ((m & dev->ultra_map[c]) != 0) { in atp_is()
2242 atp_writeb_io(dev, c, 0x19, synuw[j++]); in atp_is()
2244 atp_writeb_io(dev, c, 0x19, synw[j++]); in atp_is()
2247 atp_writeb_io(dev, c, 0x19, synw_870[j++]); in atp_is()
2249 if ((m & dev->ultra_map[c]) != 0) { in atp_is()
2250 atp_writeb_io(dev, c, 0x19, synu[j++]); in atp_is()
2252 atp_writeb_io(dev, c, 0x19, synn[j++]); in atp_is()
2258 while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00) in atp_is()
2261 j = atp_readb_io(dev, c, 0x17) & 0x0f; in atp_is()
2262 if (j == 0x0f) { in atp_is()
2265 if (j == 0x0a) { in atp_is()
2268 if (j == 0x0e) { in atp_is()
2273 atp_writeb_io(dev, c, 0x18, 0x20); in atp_is()
2274 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) { in atp_is()
2275 if ((atp_readb_io(dev, c, 0x1f) & 0x01) != 0x00) in atp_is()
2276 atp_writeb_io(dev, c, 0x19, 0x00); in atp_is()
2279 j = atp_readb_io(dev, c, 0x17); in atp_is()
2280 if (j == 0x85) { in atp_is()
2283 j &= 0x0f; in atp_is()
2284 if (j == 0x0f) { in atp_is()
2287 if (j == 0x0a) { in atp_is()
2290 if (j == 0x0e) { in atp_is()
2296 atp_writeb_io(dev, c, 0x14, 0x06); in atp_is()
2298 atp_writeb_io(dev, c, 0x14, 0xff); in atp_is()
2299 atp_writeb_io(dev, c, 0x18, 0x20); in atp_is()
2300 k = 0; in atp_is()
2302 j = atp_readb_io(dev, c, 0x1f); in atp_is()
2303 if ((j & 0x01) != 0x00) { in atp_is()
2304 mbuf[k++] = atp_readb_io(dev, c, 0x19); in atp_is()
2307 if ((j & 0x80) == 0x00) { in atp_is()
2311 while ((atp_readb_io(dev, c, 0x17) & 0x80) == 0x00); in atp_is()
2313 j = atp_readb_io(dev, c, 0x17); in atp_is()
2314 if (j == 0x85) { in atp_is()
2317 j &= 0x0f; in atp_is()
2318 if (j == 0x0f) { in atp_is()
2321 if (j == 0x0a) { in atp_is()
2324 if (j == 0x0e) { in atp_is()
2329 atp_writeb_io(dev, c, 0x10, 0x30); in atp_is()
2331 atp_writeb_io(dev, c, 0x14, 0x00); in atp_is()
2332 atp_writeb_io(dev, c, 0x18, 0x08); in atp_is()
2334 while ((atp_readb_io(dev, c, 0x1f) & 0x80) == 0x00) in atp_is()
2337 j = atp_readb_io(dev, c, 0x17); in atp_is()
2338 if (j != 0x16) { in atp_is()
2341 if (mbuf[0] != 0x01) { in atp_is()
2344 if (mbuf[1] != 0x03) { in atp_is()
2347 if (mbuf[4] == 0x00) { in atp_is()
2350 if (mbuf[3] > 0x64) { in atp_is()
2354 if (mbuf[4] > 0x0e) { in atp_is()
2355 mbuf[4] = 0x0e; in atp_is()
2358 if (mbuf[4] > 0x0c) { in atp_is()
2359 mbuf[4] = 0x0c; in atp_is()
2364 if (mbuf[3] < 0x0c) { in atp_is()
2365 j = 0xb0; in atp_is()
2368 if ((mbuf[3] < 0x0d) && (rmb == 0)) { in atp_is()
2369 j = 0xa0; in atp_is()
2372 if (mbuf[3] < 0x1a) { in atp_is()
2373 j = 0x20; in atp_is()
2376 if (mbuf[3] < 0x33) { in atp_is()
2377 j = 0x40; in atp_is()
2380 if (mbuf[3] < 0x4c) { in atp_is()
2381 j = 0x50; in atp_is()
2384 j = 0x60; in atp_is()
2386 dev->id[c][i].devsp = (dev->id[c][i].devsp & 0x0f) | j; in atp_is()