Lines Matching +full:0 +full:xb8

28 #define IMM_PROBE_SPP   0x0001
29 #define IMM_PROBE_PS2 0x0002
30 #define IMM_PROBE_ECR 0x0010
31 #define IMM_PROBE_EPP17 0x0100
32 #define IMM_PROBE_EPP19 0x0200
60 MODULE_PARM_DESC(mode, "Transfer mode (0 = Autodetect, 1 = SPP 4-bit, "
86 if (parport_claim(dev->dev) == 0) { in imm_wakeup()
88 dev->wanted = 0; in imm_wakeup()
99 if (parport_claim(dev->dev) == 0) { in imm_pb_claim()
101 res = 0; in imm_pb_claim()
114 dev->wanted = 0; in imm_pb_dismiss()
126 * parameters) by writing to the /proc/scsi/imm/0 file.
136 if ((length > 5) && (strncmp(buffer, "mode=", 5) == 0)) { in imm_write_info()
137 dev->mode = simple_strtoul(buffer + 5, NULL, 0); in imm_write_info()
151 return 0; in imm_show_info()
154 #if IMM_DEBUG > 0
176 * the 0x80 ready bit.
184 w_ctr(ppb, 0x0c); in imm_wait()
192 while (!(r & 0x80) && (k)); in imm_wait()
199 * 0x80 S_REQ S_REQ in imm_wait()
200 * 0x40 !S_BSY (????) in imm_wait()
201 * 0x20 !S_CD !S_CD in imm_wait()
202 * 0x10 !S_IO !S_IO in imm_wait()
203 * 0x08 (????) !S_BSY in imm_wait()
207 * 0xf0 0xb8 Bit mask in imm_wait()
208 * 0xc0 0x88 ZIP wants more data in imm_wait()
209 * 0xd0 0x98 ZIP wants to send more data in imm_wait()
210 * 0xe0 0xa8 ZIP is expecting SCSI command data in imm_wait()
211 * 0xf0 0xb8 end of transfer, ZIP is sending status in imm_wait()
213 w_ctr(ppb, 0x04); in imm_wait()
215 return (r & 0xb8); in imm_wait()
220 return 0; /* command timed out */ in imm_wait()
233 * Return 0 if data available in imm_negotiate()
242 mode = 0x00; in imm_negotiate()
245 mode = 0x01; in imm_negotiate()
248 return 0; in imm_negotiate()
251 w_ctr(base, 0x04); in imm_negotiate()
255 w_ctr(base, 0x06); in imm_negotiate()
257 a = (r_str(base) & 0x20) ? 0 : 1; in imm_negotiate()
259 w_ctr(base, 0x07); in imm_negotiate()
261 w_ctr(base, 0x06); in imm_negotiate()
280 w_str(ppb, i & 0xfe); in epp_reset()
290 if (ppb_hi == 0) in ecp_sync()
293 if ((r_ecr(ppb_hi) & 0xe0) == 0x60) { /* mode 011 == ECP fifo mode */ in ecp_sync()
294 for (i = 0; i < 100; i++) { in ecp_sync()
295 if (r_ecr(ppb_hi) & 0x01) in ecp_sync()
307 w_ctr(base, 0x4); /* apparently a sane mode */ in imm_byte_out()
310 w_ctr(base, 0x5); /* Drop STROBE low */ in imm_byte_out()
312 w_ctr(base, 0x0); /* STROBE high + INIT low */ in imm_byte_out()
314 w_ctr(base, 0x4); /* apparently a sane mode */ in imm_byte_out()
326 w_ctr(base, 0x4); in imm_nibble_in()
328 w_ctr(base, 0x6); in imm_nibble_in()
329 l = (r_str(base) & 0xf0) >> 4; in imm_nibble_in()
330 w_ctr(base, 0x5); in imm_nibble_in()
331 *buffer++ = (r_str(base) & 0xf0) | l; in imm_nibble_in()
332 w_ctr(base, 0x4); in imm_nibble_in()
344 w_ctr(base, 0x4); in imm_byte_in()
346 w_ctr(base, 0x26); in imm_byte_in()
348 w_ctr(base, 0x25); in imm_byte_in()
363 if ((r & 0x18) != 0x08) { in imm_out()
366 return 0; in imm_out()
373 w_ctr(ppb, 0x4); in imm_out()
374 if (dev->mode == IMM_EPP_32 && !(((long) buffer | len) & 0x03)) in imm_out()
376 else if (dev->mode == IMM_EPP_16 && !(((long) buffer | len) & 0x01)) in imm_out()
380 w_ctr(ppb, 0xc); in imm_out()
381 r = !(r_str(ppb) & 0x01); in imm_out()
382 w_ctr(ppb, 0xc); in imm_out()
394 r = 0; in imm_out()
409 if ((r & 0x18) != 0x18) { in imm_in()
411 return 0; in imm_in()
417 w_ctr(ppb, 0xc); in imm_in()
423 w_ctr(ppb, 0xc); in imm_in()
430 w_ctr(ppb, 0x24); in imm_in()
431 if (dev->mode == IMM_EPP_32 && !(((long) buffer | len) & 0x03)) in imm_in()
433 else if (dev->mode == IMM_EPP_16 && !(((long) buffer | len) & 0x01)) in imm_in()
437 w_ctr(ppb, 0x2c); in imm_in()
438 r = !(r_str(ppb) & 0x01); in imm_in()
439 w_ctr(ppb, 0x2c); in imm_in()
445 r = 0; in imm_in()
459 w_ctr(ppb, 0x0c); in imm_cpp()
461 w_dtr(ppb, 0xaa); in imm_cpp()
463 w_dtr(ppb, 0x55); in imm_cpp()
465 w_dtr(ppb, 0x00); in imm_cpp()
467 w_dtr(ppb, 0xff); in imm_cpp()
469 s1 = r_str(ppb) & 0xb8; in imm_cpp()
470 w_dtr(ppb, 0x87); in imm_cpp()
472 s2 = r_str(ppb) & 0xb8; in imm_cpp()
473 w_dtr(ppb, 0x78); in imm_cpp()
475 s3 = r_str(ppb) & 0x38; in imm_cpp()
488 w_ctr(ppb, 0x0c); in imm_cpp()
490 w_ctr(ppb, 0x0d); in imm_cpp()
492 w_ctr(ppb, 0x0c); in imm_cpp()
494 w_dtr(ppb, 0xff); in imm_cpp()
502 * S1 0 X 1 1 1 in imm_cpp()
503 * S2 1 X 0 1 1 in imm_cpp()
513 if ((s1 == 0xb8) && (s2 == 0x18) && (s3 == 0x30)) in imm_cpp()
515 if ((s1 == 0xb8) && (s2 == 0x18) && (s3 == 0x38)) in imm_cpp()
516 return 0; /* Disconnected */ in imm_cpp()
525 imm_cpp(ppb, 0xe0); /* Select device 0 in compatible mode */ in imm_connect()
526 imm_cpp(ppb, 0x30); /* Disconnect all devices */ in imm_connect()
531 return imm_cpp(ppb, 0x28); /* Select device 0 in EPP mode */ in imm_connect()
532 return imm_cpp(ppb, 0xe0); /* Select device 0 in compatible mode */ in imm_connect()
537 imm_cpp(dev->base, 0x30); /* Disconnect all devices */ in imm_disconnect()
549 w_ctr(ppb, 0xc); in imm_select()
554 } while ((r_str(ppb) & 0x08) && (k)); in imm_select()
557 return 0; in imm_select()
562 w_ctr(ppb, 0x4); in imm_select()
563 w_dtr(ppb, 0x80 | (1 << target)); in imm_select()
569 w_ctr(ppb, 0xc); in imm_select()
570 w_ctr(ppb, 0xd); in imm_select()
580 while (!(r_str(ppb) & 0x08) && (k)); in imm_select()
585 w_ctr(ppb, 0xc); in imm_select()
586 return (k) ? 1 : 0; in imm_select()
605 if (imm_connect(dev, 0) != 1) in imm_init()
621 for (k = 0; k < cmd->cmd_len; k += 2) in imm_send_command()
623 return 0; in imm_send_command()
639 * 0 Told to schedule in imm_completion()
650 v = cmd->cmnd[0]; in imm_completion()
658 w_ctr(ppb, 0x0c); in imm_completion()
659 r = (r_str(ppb) & 0xb8); in imm_completion()
665 while (r != (unsigned char) 0xb8) { in imm_completion()
671 return 0; in imm_completion()
678 if ((r & 0x88) != 0x88 || scsi_pointer->this_residual <= 0) { in imm_completion()
683 if (dev->rd == 0) { in imm_completion()
713 if (scsi_pointer->this_residual & 0x01) in imm_completion()
718 w_ctr(ppb, 0x0c); in imm_completion()
719 r = (r_str(ppb) & 0xb8); in imm_completion()
722 if (!(r & 0x80)) in imm_completion()
723 return 0; in imm_completion()
745 #if IMM_DEBUG > 0 in imm_interrupt()
746 switch ((cmd->result >> 16) & 0xff) { in imm_interrupt()
775 (cmd->result >> 16) & 0xff); in imm_interrupt()
795 unsigned char l = 0, h = 0; in imm_engine()
802 return 0; in imm_engine()
805 case 0: /* Phase 0 - Waiting for parport */ in imm_engine()
812 return 0; in imm_engine()
824 return 0; in imm_engine()
830 w_ctr(ppb, 0x0c); in imm_engine()
831 if (!(r_str(ppb) & 0x80)) in imm_engine()
835 return 0; in imm_engine()
846 scsi_pointer->this_residual = 0; in imm_engine()
851 if (scsi_pointer->this_residual & 0x01) in imm_engine()
857 w_ctr(ppb, 0x0c); in imm_engine()
858 if (!(r_str(ppb) & 0x80)) in imm_engine()
862 x = (r_str(ppb) & 0xb8); in imm_engine()
863 dev->rd = (x & 0x10) ? 1 : 0; in imm_engine()
864 dev->dp = (x & 0x20) ? 0 : 1; in imm_engine()
868 return 0; in imm_engine()
874 w_ctr(ppb, 0x0c); in imm_engine()
875 if (!(r_str(ppb) & 0x80)) in imm_engine()
881 return 0; in imm_engine()
882 if (retv == 0) in imm_engine()
891 w_ctr(ppb, 0x4); in imm_engine()
892 w_ctr(ppb, 0xc); in imm_engine()
893 w_ctr(ppb, 0xe); in imm_engine()
894 w_ctr(ppb, 0x4); in imm_engine()
902 if (imm_wait(dev) != (unsigned char) 0xb8) { in imm_engine()
904 return 0; in imm_engine()
907 return 0; in imm_engine()
910 if (imm_wait(dev) == (unsigned char) 0xb8) in imm_engine()
915 w_ctr(ppb, 0x4); in imm_engine()
916 w_ctr(ppb, 0xc); in imm_engine()
917 w_ctr(ppb, 0xe); in imm_engine()
918 w_ctr(ppb, 0x4); in imm_engine()
920 return 0; /* Finished */ in imm_engine()
925 return 0; in imm_engine()
934 return 0; in imm_queuecommand_lck()
936 dev->failed = 0; in imm_queuecommand_lck()
940 imm_scsi_pointer(cmd)->phase = 0; /* bus free */ in imm_queuecommand_lck()
942 schedule_delayed_work(&dev->imm_tq, 0); in imm_queuecommand_lck()
946 return 0; in imm_queuecommand_lck()
960 ip[0] = 0x40; in DEF_SCSI_QCMD()
961 ip[1] = 0x20; in DEF_SCSI_QCMD()
962 ip[2] = ((unsigned long) capacity + 1) / (ip[0] * ip[1]); in DEF_SCSI_QCMD()
964 ip[0] = 0xff; in DEF_SCSI_QCMD()
965 ip[1] = 0x3f; in DEF_SCSI_QCMD()
966 ip[2] = ((unsigned long) capacity + 1) / (ip[0] * ip[1]); in DEF_SCSI_QCMD()
968 return 0; in DEF_SCSI_QCMD()
980 case 0: /* Do not have access to parport */ in imm_abort()
991 w_ctr(base, 0x04); in imm_reset_pulse()
992 w_dtr(base, 0x40); in imm_reset_pulse()
994 w_ctr(base, 0x0c); in imm_reset_pulse()
995 w_ctr(base, 0x0d); in imm_reset_pulse()
997 w_ctr(base, 0x0c); in imm_reset_pulse()
998 w_ctr(base, 0x04); in imm_reset_pulse()
1022 static char cmd[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; in device_check()
1027 for (loop = 0; loop < 8; loop++) { in device_check()
1029 if (autodetect && (ppb & 0x0007) == 0x0000) in device_check()
1044 w_ctr(ppb, 0x0c); in device_check()
1045 for (l = 0; (l < 3) && (status); l++) in device_check()
1062 w_ctr(ppb, 0x0c); in device_check()
1069 } while (!(l & 0x80) && (k)); in device_check()
1071 l &= 0xb8; in device_check()
1073 if (l != 0xb8) { in device_check()
1090 ("imm: Communication established at 0x%x with ID %i using %s\n", in device_check()
1097 return 0; in device_check()
1134 unsigned int cnt = 0; in find_parent()
1174 memset(&imm_cb, 0, sizeof(imm_cb)); in __imm_attach()
1204 w_ctr(dev->base, 0x0c); in __imm_attach()
1242 return 0; in __imm_attach()