Lines Matching refs:dev

46 #define reader_to_dev(x)	(&x->p_dev->dev)
145 #define ZERO_DEV(dev) \ argument
146 memset(&dev->atr_csum,0, \
204 #define ATRLENCK(dev,pos) \ argument
205 if (pos>=dev->atr_len || pos>=MAX_ATR) \
319 static int parse_atr(struct cm4000_dev *dev) in parse_atr() argument
325 DEBUGP(3, dev, "-> parse_atr: dev->atr_len = %i\n", dev->atr_len); in parse_atr()
327 if (dev->atr_len < 3) { in parse_atr()
328 DEBUGP(5, dev, "parse_atr: atr_len < 3\n"); in parse_atr()
332 if (dev->atr[0] == 0x3f) in parse_atr()
333 set_bit(IS_INVREV, &dev->flags); in parse_atr()
335 clear_bit(IS_INVREV, &dev->flags); in parse_atr()
338 ch = dev->atr[1]; in parse_atr()
339 dev->proto = 0; /* XXX PROTO */ in parse_atr()
341 dev->ta1 = 0x11; /* defaults to 9600 baud */ in parse_atr()
345 dev->ta1 = dev->atr[2]; in parse_atr()
346 DEBUGP(5, dev, "Card says FiDi is 0x%.2x\n", dev->ta1); in parse_atr()
349 dev->ta1 = 0x11; in parse_atr()
353 DEBUGP(5, dev, "Yi=%.2x\n", ch & 0xf0); in parse_atr()
360 ch = dev->atr[ix]; in parse_atr()
363 DEBUGP(5, dev, "card is capable of T=1\n"); in parse_atr()
366 DEBUGP(5, dev, "card is capable of T=0\n"); in parse_atr()
372 DEBUGP(5, dev, "ix=%d noHist=%d any_t1=%d\n", in parse_atr()
373 ix, dev->atr[1] & 15, any_t1); in parse_atr()
374 if (ix + 1 + (dev->atr[1] & 0x0f) + any_t1 != dev->atr_len) { in parse_atr()
375 DEBUGP(5, dev, "length error\n"); in parse_atr()
379 set_bit(IS_ANY_T0, &dev->flags); in parse_atr()
382 dev->atr_csum = 0; in parse_atr()
384 for (i = 1; i < dev->atr_len; i++) in parse_atr()
385 dev->atr_csum ^= dev->atr[i]; in parse_atr()
386 if (dev->atr_csum) { in parse_atr()
387 set_bit(IS_BAD_CSUM, &dev->flags); in parse_atr()
388 DEBUGP(5, dev, "bad checksum\n"); in parse_atr()
393 dev->proto = 1; /* XXX PROTO */ in parse_atr()
394 set_bit(IS_ANY_T1, &dev->flags); in parse_atr()
420 static void set_cardparameter(struct cm4000_dev *dev) in set_cardparameter() argument
423 unsigned int iobase = dev->p_dev->resource[0]->start; in set_cardparameter()
426 DEBUGP(3, dev, "-> set_cardparameter\n"); in set_cardparameter()
428 dev->flags1 = dev->flags1 | (((dev->baudv - 1) & 0x0100) >> 8); in set_cardparameter()
429 xoutb(dev->flags1, REG_FLAGS1(iobase)); in set_cardparameter()
430 DEBUGP(5, dev, "flags1 = 0x%02x\n", dev->flags1); in set_cardparameter()
433 xoutb((unsigned char)((dev->baudv - 1) & 0xFF), REG_BAUDRATE(iobase)); in set_cardparameter()
435 DEBUGP(5, dev, "baudv = %i -> write 0x%02x\n", dev->baudv, in set_cardparameter()
436 ((dev->baudv - 1) & 0xFF)); in set_cardparameter()
440 if (!memcmp(dev->atr, card_fixups[i].atr, in set_cardparameter()
446 DEBUGP(3, dev, "<- set_cardparameter\n"); in set_cardparameter()
449 static int set_protocol(struct cm4000_dev *dev, struct ptsreq *ptsreq) in set_protocol() argument
456 unsigned int iobase = dev->p_dev->resource[0]->start; in set_protocol()
460 DEBUGP(3, dev, "-> set_protocol\n"); in set_protocol()
461 DEBUGP(5, dev, "ptsreq->Protocol = 0x%.8x, ptsreq->Flags=0x%.8x, " in set_protocol()
468 dev->pts[0] = 0xff; in set_protocol()
469 dev->pts[1] = 0x00; in set_protocol()
472 dev->pts[1]++; in set_protocol()
473 dev->proto = dev->pts[1]; /* Set new protocol */ in set_protocol()
474 dev->pts[1] = (0x01 << 4) | (dev->pts[1]); in set_protocol()
477 DEBUGP(5, dev, "Ta(1) from ATR is 0x%.2x\n", dev->ta1); in set_protocol()
479 dev->pts[2] = fi_di_table[dev->ta1 & 0x0F][(dev->ta1 >> 4) & 0x0F]; in set_protocol()
482 dev->pts[3] = dev->pts[0] ^ dev->pts[1] ^ dev->pts[2]; in set_protocol()
484 DEBUGP(5, dev, "pts0=%.2x, pts1=%.2x, pts2=%.2x, pts3=%.2x\n", in set_protocol()
485 dev->pts[0], dev->pts[1], dev->pts[2], dev->pts[3]); in set_protocol()
488 if (test_bit(IS_INVREV, &dev->flags)) in set_protocol()
489 str_invert_revert(dev->pts, 4); in set_protocol()
495 DEBUGP(5, dev, "Enable access to the messages buffer\n"); in set_protocol()
496 dev->flags1 = 0x20 /* T_Active */ in set_protocol()
497 | (test_bit(IS_INVREV, &dev->flags) ? 0x02 : 0x00) /* inv parity */ in set_protocol()
498 | ((dev->baudv >> 8) & 0x01); /* MSB-baud */ in set_protocol()
499 xoutb(dev->flags1, REG_FLAGS1(iobase)); in set_protocol()
501 DEBUGP(5, dev, "Enable message buffer -> flags1 = 0x%.2x\n", in set_protocol()
502 dev->flags1); in set_protocol()
505 DEBUGP(5, dev, "Write challenge to buffer: "); in set_protocol()
508 xoutb(dev->pts[i], REG_BUF_DATA(iobase)); /* buf data */ in set_protocol()
510 pr_debug("0x%.2x ", dev->pts[i]); in set_protocol()
518 DEBUGP(5, dev, "Set number of bytes to write\n");
526 DEBUGP(5, dev, "Waiting for NumRecBytes getting valid\n");
530 DEBUGP(5, dev, "NumRecBytes is valid\n");
536 DEBUGP(5, dev, "Timeout waiting for NumRecBytes getting "
542 DEBUGP(5, dev, "Reading NumRecBytes\n");
546 DEBUGP(2, dev, "NumRecBytes = %i\n", num_bytes_read);
557 DEBUGP(5, dev, "Timeout reading num_bytes_read\n");
562 DEBUGP(5, dev, "Reset the CARDMAN CONTROLLER\n");
566 DEBUGP(5, dev, "Read PPS reply\n");
573 DEBUGP(2, dev, "PTSreply: ");
580 DEBUGP(5, dev, "Clear Tactive in Flags1\n");
584 if ((dev->pts[0] == pts_reply[0]) &&
585 (dev->pts[1] == pts_reply[1]) &&
586 (dev->pts[2] == pts_reply[2]) && (dev->pts[3] == pts_reply[3])) {
588 dev->baudv = calc_baudv(dev->pts[2]);
589 set_cardparameter(dev);
590 } else if ((dev->pts[0] == pts_reply[0]) &&
591 ((dev->pts[1] & 0xef) == pts_reply[1]) &&
594 dev->baudv = calc_baudv(0x11);
595 set_cardparameter(dev);
600 DEBUGP(3, dev, "<- set_protocol\n");
604 static int io_detect_cm4000(unsigned int iobase, struct cm4000_dev *dev) in io_detect_cm4000() argument
609 clear_bit(IS_ATR_VALID, &dev->flags); in io_detect_cm4000()
610 set_bit(IS_CMM_ABSENT, &dev->flags); in io_detect_cm4000()
614 xoutb(dev->flags1 | 0x40, REG_FLAGS1(iobase)); in io_detect_cm4000()
616 clear_bit(IS_ATR_VALID, &dev->flags); in io_detect_cm4000()
617 set_bit(IS_CMM_ABSENT, &dev->flags); in io_detect_cm4000()
621 xoutb(dev->flags1, REG_FLAGS1(iobase)); in io_detect_cm4000()
625 static void terminate_monitor(struct cm4000_dev *dev) in terminate_monitor() argument
631 DEBUGP(3, dev, "-> terminate_monitor\n"); in terminate_monitor()
632 wait_event_interruptible(dev->devq, in terminate_monitor()
634 (void *)&dev->flags)); in terminate_monitor()
641 DEBUGP(5, dev, "Now allow last cycle of monitor!\n"); in terminate_monitor()
642 while (test_bit(LOCK_MONITOR, (void *)&dev->flags)) in terminate_monitor()
645 DEBUGP(5, dev, "Delete timer\n"); in terminate_monitor()
646 del_timer_sync(&dev->timer); in terminate_monitor()
648 dev->monitor_running = 0; in terminate_monitor()
651 DEBUGP(3, dev, "<- terminate_monitor\n"); in terminate_monitor()
664 struct cm4000_dev *dev = (struct cm4000_dev *) p; in monitor_card() local
665 unsigned int iobase = dev->p_dev->resource[0]->start; in monitor_card()
670 DEBUGP(7, dev, "-> monitor_card\n"); in monitor_card()
673 if (test_and_set_bit(LOCK_MONITOR, &dev->flags)) { in monitor_card()
674 DEBUGP(4, dev, "About to stop monitor\n"); in monitor_card()
676 dev->rlen = in monitor_card()
677 dev->rpos = in monitor_card()
678 dev->atr_csum = dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
679 dev->mstate = M_FETCH_ATR; in monitor_card()
680 clear_bit(LOCK_MONITOR, &dev->flags); in monitor_card()
682 wake_up_interruptible(&dev->devq); in monitor_card()
683 DEBUGP(2, dev, "<- monitor_card (we are done now)\n"); in monitor_card()
688 if (test_and_set_bit(LOCK_IO, (void *)&dev->flags)) { in monitor_card()
689 DEBUGP(4, dev, "Couldn't get IO lock\n"); in monitor_card()
694 dev->flags0 = xinb(REG_FLAGS0(iobase)); in monitor_card()
695 DEBUGP(7, dev, "dev->flags0 = 0x%2x\n", dev->flags0); in monitor_card()
696 DEBUGP(7, dev, "smartcard present: %s\n", in monitor_card()
697 dev->flags0 & 1 ? "yes" : "no"); in monitor_card()
698 DEBUGP(7, dev, "cardman present: %s\n", in monitor_card()
699 dev->flags0 == 0xff ? "no" : "yes"); in monitor_card()
701 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in monitor_card()
702 || dev->flags0 == 0xff) { /* no cardman inserted */ in monitor_card()
704 dev->rlen = in monitor_card()
705 dev->rpos = in monitor_card()
706 dev->atr_csum = dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
707 dev->mstate = M_FETCH_ATR; in monitor_card()
709 dev->flags &= 0x000000ff; /* only keep IO and MONITOR locks */ in monitor_card()
711 if (dev->flags0 == 0xff) { in monitor_card()
712 DEBUGP(4, dev, "set IS_CMM_ABSENT bit\n"); in monitor_card()
713 set_bit(IS_CMM_ABSENT, &dev->flags); in monitor_card()
714 } else if (test_bit(IS_CMM_ABSENT, &dev->flags)) { in monitor_card()
715 DEBUGP(4, dev, "clear IS_CMM_ABSENT bit " in monitor_card()
717 clear_bit(IS_CMM_ABSENT, &dev->flags); in monitor_card()
721 } else if ((dev->flags0 & 1) && test_bit(IS_CMM_ABSENT, &dev->flags)) { in monitor_card()
724 DEBUGP(4, dev, "clear IS_CMM_ABSENT bit (card is inserted)\n"); in monitor_card()
725 clear_bit(IS_CMM_ABSENT, &dev->flags); in monitor_card()
728 if (test_bit(IS_ATR_VALID, &dev->flags) == 1) { in monitor_card()
729 DEBUGP(7, dev, "believe ATR is already valid (do nothing)\n"); in monitor_card()
733 switch (dev->mstate) { in monitor_card()
736 DEBUGP(4, dev, "M_CARDOFF\n"); in monitor_card()
740 dev->mdelay = T_10MSEC; in monitor_card()
748 dev->rlen = in monitor_card()
749 dev->rpos = in monitor_card()
750 dev->atr_csum = in monitor_card()
751 dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
752 dev->mstate = M_FETCH_ATR; in monitor_card()
755 dev->mdelay = T_50MSEC; in monitor_card()
759 DEBUGP(4, dev, "M_FETCH_ATR\n"); in monitor_card()
761 DEBUGP(4, dev, "Reset BAUDV to 9600\n"); in monitor_card()
762 dev->baudv = 0x173; /* 9600 */ in monitor_card()
768 xoutb(dev->flags0 & 2 ? 0x46 : 0x44, REG_FLAGS0(iobase)); in monitor_card()
769 dev->mdelay = T_40MSEC; in monitor_card()
770 dev->mstate = M_TIMEOUT_WAIT; in monitor_card()
773 DEBUGP(4, dev, "M_TIMEOUT_WAIT\n"); in monitor_card()
775 io_read_num_rec_bytes(iobase, &dev->atr_len); in monitor_card()
776 dev->mdelay = T_10MSEC; in monitor_card()
777 dev->mstate = M_READ_ATR_LEN; in monitor_card()
780 DEBUGP(4, dev, "M_READ_ATR_LEN\n"); in monitor_card()
785 if (dev->atr_len == io_read_num_rec_bytes(iobase, &s)) { in monitor_card()
786 if (dev->atr_len_retry++ >= MAX_ATR_LEN_RETRY) { /* + XX msec */ in monitor_card()
787 dev->mdelay = T_10MSEC; in monitor_card()
788 dev->mstate = M_READ_ATR; in monitor_card()
791 dev->atr_len = s; in monitor_card()
792 dev->atr_len_retry = 0; /* set new timeout */ in monitor_card()
795 DEBUGP(4, dev, "Current ATR_LEN = %i\n", dev->atr_len); in monitor_card()
798 DEBUGP(4, dev, "M_READ_ATR\n"); in monitor_card()
800 for (i = 0; i < dev->atr_len; i++) { in monitor_card()
802 dev->atr[i] = inb(REG_BUF_DATA(iobase)); in monitor_card()
805 DEBUGP(4, dev, "Deactivate T_Active flags\n"); in monitor_card()
806 dev->flags1 = 0x01; in monitor_card()
807 xoutb(dev->flags1, REG_FLAGS1(iobase)); in monitor_card()
810 set_bit(IS_ATR_PRESENT, &dev->flags); in monitor_card()
811 if (dev->atr[0] == 0x03) in monitor_card()
812 str_invert_revert(dev->atr, dev->atr_len); in monitor_card()
813 atrc = parse_atr(dev); in monitor_card()
815 dev->mdelay = 0; in monitor_card()
816 dev->mstate = M_BAD_CARD; in monitor_card()
818 dev->mdelay = T_50MSEC; in monitor_card()
819 dev->mstate = M_ATR_PRESENT; in monitor_card()
820 set_bit(IS_ATR_VALID, &dev->flags); in monitor_card()
823 if (test_bit(IS_ATR_VALID, &dev->flags) == 1) { in monitor_card()
824 DEBUGP(4, dev, "monitor_card: ATR valid\n"); in monitor_card()
827 if ((test_bit(IS_AUTOPPS_ACT, &dev->flags) == 0) && in monitor_card()
828 (dev->ta1 != 0x11) && in monitor_card()
829 !(test_bit(IS_ANY_T0, &dev->flags) && in monitor_card()
830 test_bit(IS_ANY_T1, &dev->flags))) { in monitor_card()
831 DEBUGP(4, dev, "Perform AUTOPPS\n"); in monitor_card()
832 set_bit(IS_AUTOPPS_ACT, &dev->flags); in monitor_card()
833 ptsreq.protocol = (0x01 << dev->proto); in monitor_card()
838 if (set_protocol(dev, &ptsreq) == 0) { in monitor_card()
839 DEBUGP(4, dev, "AUTOPPS ret SUCC\n"); in monitor_card()
840 clear_bit(IS_AUTOPPS_ACT, &dev->flags); in monitor_card()
841 wake_up_interruptible(&dev->atrq); in monitor_card()
843 DEBUGP(4, dev, "AUTOPPS failed: " in monitor_card()
846 clear_bit(IS_ATR_PRESENT, &dev->flags); in monitor_card()
847 clear_bit(IS_ATR_VALID, &dev->flags); in monitor_card()
848 dev->rlen = in monitor_card()
849 dev->rpos = in monitor_card()
850 dev->atr_csum = in monitor_card()
851 dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
852 dev->mstate = M_FETCH_ATR; in monitor_card()
854 dev->mdelay = T_50MSEC; in monitor_card()
859 set_cardparameter(dev); in monitor_card()
860 if (test_bit(IS_AUTOPPS_ACT, &dev->flags) == 1) in monitor_card()
861 DEBUGP(4, dev, "AUTOPPS already active " in monitor_card()
863 if (dev->ta1 == 0x11) in monitor_card()
864 DEBUGP(4, dev, "No AUTOPPS necessary " in monitor_card()
866 if (test_bit(IS_ANY_T0, &dev->flags) in monitor_card()
867 && test_bit(IS_ANY_T1, &dev->flags)) in monitor_card()
868 DEBUGP(4, dev, "Do NOT perform AUTOPPS " in monitor_card()
870 clear_bit(IS_AUTOPPS_ACT, &dev->flags); in monitor_card()
871 wake_up_interruptible(&dev->atrq); in monitor_card()
874 DEBUGP(4, dev, "ATR invalid\n"); in monitor_card()
875 wake_up_interruptible(&dev->atrq); in monitor_card()
879 DEBUGP(4, dev, "M_BAD_CARD\n"); in monitor_card()
881 if (dev->cwarn == 0 || dev->cwarn == 10) { in monitor_card()
882 set_bit(IS_BAD_CARD, &dev->flags); in monitor_card()
883 dev_warn(&dev->p_dev->dev, MODULE_NAME ": "); in monitor_card()
884 if (test_bit(IS_BAD_CSUM, &dev->flags)) { in monitor_card()
885 DEBUGP(4, dev, "ATR checksum (0x%.2x, should " in monitor_card()
886 "be zero) failed\n", dev->atr_csum); in monitor_card()
889 else if (test_bit(IS_BAD_LENGTH, &dev->flags)) { in monitor_card()
890 DEBUGP(4, dev, "ATR length error\n"); in monitor_card()
892 DEBUGP(4, dev, "card damaged or wrong way " in monitor_card()
896 dev->cwarn = 0; in monitor_card()
897 wake_up_interruptible(&dev->atrq); /* wake open */ in monitor_card()
899 dev->cwarn++; in monitor_card()
900 dev->mdelay = T_100MSEC; in monitor_card()
901 dev->mstate = M_FETCH_ATR; in monitor_card()
904 DEBUGP(7, dev, "Unknown action\n"); in monitor_card()
909 DEBUGP(7, dev, "release_io\n"); in monitor_card()
910 clear_bit(LOCK_IO, &dev->flags); in monitor_card()
911 wake_up_interruptible(&dev->ioq); /* whoever needs IO */ in monitor_card()
914 DEBUGP(7, dev, "<- monitor_card (returns with timer)\n"); in monitor_card()
915 mod_timer(&dev->timer, jiffies + dev->mdelay); in monitor_card()
916 clear_bit(LOCK_MONITOR, &dev->flags); in monitor_card()
924 struct cm4000_dev *dev = filp->private_data; in cmm_read() local
925 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_read()
929 DEBUGP(2, dev, "-> cmm_read(%s,%d)\n", current->comm, current->pid); in cmm_read()
934 if (!pcmcia_dev_present(dev->p_dev) || /* device removed */ in cmm_read()
935 test_bit(IS_CMM_ABSENT, &dev->flags)) in cmm_read()
938 if (test_bit(IS_BAD_CSUM, &dev->flags)) in cmm_read()
943 (dev->atrq, in cmm_read()
945 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) != 0)))) { in cmm_read()
951 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) in cmm_read()
956 (dev->readq, in cmm_read()
957 ((filp->f_flags & O_NONBLOCK) || (dev->rpos < dev->rlen)))) { in cmm_read()
965 (dev->ioq, in cmm_read()
967 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) { in cmm_read()
974 dev->flags0 = inb(REG_FLAGS0(iobase)); in cmm_read()
975 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in cmm_read()
976 || dev->flags0 == 0xff) { /* no cardman inserted */ in cmm_read()
977 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_read()
978 if (dev->flags0 & 1) { in cmm_read()
979 set_bit(IS_CMM_ABSENT, &dev->flags); in cmm_read()
987 DEBUGP(4, dev, "begin read answer\n"); in cmm_read()
988 j = min(count, (size_t)(dev->rlen - dev->rpos)); in cmm_read()
989 k = dev->rpos; in cmm_read()
992 DEBUGP(4, dev, "read1 j=%d\n", j); in cmm_read()
995 dev->rbuf[i] = xinb(REG_BUF_DATA(iobase)); in cmm_read()
997 j = min(count, (size_t)(dev->rlen - dev->rpos)); in cmm_read()
999 DEBUGP(4, dev, "read2 j=%d\n", j); in cmm_read()
1000 dev->flags1 |= 0x10; /* MSB buf addr set */ in cmm_read()
1001 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_read()
1004 dev->rbuf[i] = xinb(REG_BUF_DATA(iobase)); in cmm_read()
1008 if (dev->proto == 0 && count > dev->rlen - dev->rpos && i) { in cmm_read()
1009 DEBUGP(4, dev, "T=0 and count > buffer\n"); in cmm_read()
1010 dev->rbuf[i] = dev->rbuf[i - 1]; in cmm_read()
1011 dev->rbuf[i - 1] = dev->procbyte; in cmm_read()
1016 dev->rpos = dev->rlen + 1; in cmm_read()
1019 DEBUGP(4, dev, "Clear T1Active\n"); in cmm_read()
1020 dev->flags1 &= 0xdf; in cmm_read()
1021 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_read()
1025 if (!io_detect_cm4000(iobase, dev)) { in cmm_read()
1030 if (test_bit(IS_INVREV, &dev->flags) && count > 0) in cmm_read()
1031 str_invert_revert(dev->rbuf, count); in cmm_read()
1033 if (copy_to_user(buf, dev->rbuf, count)) in cmm_read()
1037 clear_bit(LOCK_IO, &dev->flags); in cmm_read()
1038 wake_up_interruptible(&dev->ioq); in cmm_read()
1040 DEBUGP(2, dev, "<- cmm_read returns: rc = %Zi\n", in cmm_read()
1048 struct cm4000_dev *dev = filp->private_data; in cmm_write() local
1049 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_write()
1059 DEBUGP(2, dev, "-> cmm_write(%s,%d)\n", current->comm, current->pid); in cmm_write()
1064 if (dev->proto == 0 && count < 4) { in cmm_write()
1066 DEBUGP(4, dev, "T0 short write\n"); in cmm_write()
1072 sendT0 = dev->proto ? 0 : nr > 5 ? 0x08 : 0; in cmm_write()
1074 if (!pcmcia_dev_present(dev->p_dev) || /* device removed */ in cmm_write()
1075 test_bit(IS_CMM_ABSENT, &dev->flags)) in cmm_write()
1078 if (test_bit(IS_BAD_CSUM, &dev->flags)) { in cmm_write()
1079 DEBUGP(4, dev, "bad csum\n"); in cmm_write()
1095 (dev->atrq, in cmm_write()
1097 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) != 0)))) { in cmm_write()
1103 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) { /* invalid atr */ in cmm_write()
1104 DEBUGP(4, dev, "invalid ATR\n"); in cmm_write()
1110 (dev->ioq, in cmm_write()
1112 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) { in cmm_write()
1118 if (copy_from_user(dev->sbuf, buf, ((count > 512) ? 512 : count))) in cmm_write()
1122 dev->flags0 = inb(REG_FLAGS0(iobase)); in cmm_write()
1123 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in cmm_write()
1124 || dev->flags0 == 0xff) { /* no cardman inserted */ in cmm_write()
1125 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_write()
1126 if (dev->flags0 & 1) { in cmm_write()
1127 set_bit(IS_CMM_ABSENT, &dev->flags); in cmm_write()
1130 DEBUGP(4, dev, "IO error\n"); in cmm_write()
1138 if (!io_detect_cm4000(iobase, dev)) { in cmm_write()
1144 dev->flags1 |= (sendT0); in cmm_write()
1146 set_cardparameter(dev); in cmm_write()
1151 dev->flags1 = 0x20 /* T_Active */ in cmm_write()
1153 | (test_bit(IS_INVREV, &dev->flags) ? 2 : 0)/* inverse parity */ in cmm_write()
1154 | (((dev->baudv - 1) & 0x0100) >> 8); /* MSB-Baud */ in cmm_write()
1155 DEBUGP(1, dev, "set dev->flags1 = 0x%.2x\n", dev->flags1); in cmm_write()
1156 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_write()
1159 DEBUGP(4, dev, "Xmit data\n"); in cmm_write()
1162 dev->flags1 = 0x20 /* T_Active */ in cmm_write()
1165 | (test_bit(IS_INVREV, &dev->flags) ? 2 : 0) in cmm_write()
1166 | (((dev->baudv - 1) & 0x0100) >> 8) /* MSB-Baud */ in cmm_write()
1168 DEBUGP(4, dev, "dev->flags = 0x%.2x - set address " in cmm_write()
1169 "high\n", dev->flags1); in cmm_write()
1170 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_write()
1172 if (test_bit(IS_INVREV, &dev->flags)) { in cmm_write()
1173 DEBUGP(4, dev, "Apply inverse convention for 0x%.2x " in cmm_write()
1174 "-> 0x%.2x\n", (unsigned char)dev->sbuf[i], in cmm_write()
1175 invert_revert(dev->sbuf[i])); in cmm_write()
1177 xoutb(invert_revert(dev->sbuf[i]), in cmm_write()
1181 xoutb(dev->sbuf[i], REG_BUF_DATA(iobase)); in cmm_write()
1184 DEBUGP(4, dev, "Xmit done\n"); in cmm_write()
1186 if (dev->proto == 0) { in cmm_write()
1189 DEBUGP(4, dev, "T=0 assumes 0 byte reply\n"); in cmm_write()
1191 if (test_bit(IS_INVREV, &dev->flags)) in cmm_write()
1204 nsend = 5 + (unsigned char)dev->sbuf[4]; in cmm_write()
1205 if (dev->sbuf[4] == 0) in cmm_write()
1213 if (test_bit(IS_INVREV, &dev->flags)) { in cmm_write()
1214 DEBUGP(4, dev, "T=0 set Procedure byte (inverse-reverse) " in cmm_write()
1215 "0x%.2x\n", invert_revert(dev->sbuf[1])); in cmm_write()
1216 xoutb(invert_revert(dev->sbuf[1]), REG_NUM_BYTES(iobase)); in cmm_write()
1218 DEBUGP(4, dev, "T=0 set Procedure byte 0x%.2x\n", dev->sbuf[1]); in cmm_write()
1219 xoutb(dev->sbuf[1], REG_NUM_BYTES(iobase)); in cmm_write()
1222 DEBUGP(1, dev, "set NumSendBytes = 0x%.2x\n", in cmm_write()
1226 DEBUGP(1, dev, "Trigger CARDMAN CONTROLLER (0x%.2x)\n", in cmm_write()
1228 | (dev->flags0 & 2 ? 0 : 4) /* power on if needed */ in cmm_write()
1229 |(dev->proto ? 0x10 : 0x08) /* T=1/T=0 */ in cmm_write()
1232 | (dev->flags0 & 2 ? 0 : 4) /* power on if needed */ in cmm_write()
1233 |(dev->proto ? 0x10 : 0x08) /* T=1/T=0 */ in cmm_write()
1238 if (dev->proto == 1) { in cmm_write()
1239 DEBUGP(4, dev, "Wait for xmit done\n"); in cmm_write()
1246 DEBUGP(4, dev, "timeout waiting for xmit done\n"); in cmm_write()
1255 if (dev->proto) { in cmm_write()
1261 DEBUGP(4, dev, "infolen=%d\n", infolen); in cmm_write()
1267 DEBUGP(4, dev, "timeout waiting for infoLen\n"); in cmm_write()
1272 clear_bit(IS_PROCBYTE_PRESENT, &dev->flags); in cmm_write()
1275 io_read_num_rec_bytes(iobase, &dev->rlen); in cmm_write()
1277 if (dev->proto) { in cmm_write()
1278 if (dev->rlen >= infolen + 4) in cmm_write()
1284 if (s > dev->rlen) { in cmm_write()
1285 DEBUGP(1, dev, "NumRecBytes inc (reset timeout)\n"); in cmm_write()
1287 dev->rlen = s; in cmm_write()
1296 else if (dev->proto == 0) { in cmm_write()
1299 DEBUGP(1, dev, "NoProcedure byte set\n"); in cmm_write()
1303 DEBUGP(1, dev, "NoProcedure byte unset " in cmm_write()
1305 dev->procbyte = inb(REG_FLAGS1(iobase)); in cmm_write()
1306 DEBUGP(1, dev, "Read procedure byte 0x%.2x\n", in cmm_write()
1307 dev->procbyte); in cmm_write()
1311 DEBUGP(1, dev, "T0Done flag (read reply)\n"); in cmm_write()
1315 if (dev->proto) in cmm_write()
1319 DEBUGP(1, dev, "timeout waiting for numRecBytes\n"); in cmm_write()
1323 if (dev->proto == 0) { in cmm_write()
1324 DEBUGP(1, dev, "Wait for T0Done bit to be set\n"); in cmm_write()
1331 DEBUGP(1, dev, "timeout waiting for T0Done\n"); in cmm_write()
1336 dev->procbyte = inb(REG_FLAGS1(iobase)); in cmm_write()
1337 DEBUGP(4, dev, "Read procedure byte 0x%.2x\n", in cmm_write()
1338 dev->procbyte); in cmm_write()
1340 io_read_num_rec_bytes(iobase, &dev->rlen); in cmm_write()
1341 DEBUGP(4, dev, "Read NumRecBytes = %i\n", dev->rlen); in cmm_write()
1346 dev->rpos = dev->proto ? 0 : nr == 4 ? 5 : nr > dev->rlen ? 5 : nr; in cmm_write()
1347 DEBUGP(4, dev, "dev->rlen = %i, dev->rpos = %i, nr = %i\n", in cmm_write()
1348 dev->rlen, dev->rpos, nr); in cmm_write()
1351 DEBUGP(4, dev, "Reset SM\n"); in cmm_write()
1355 DEBUGP(4, dev, "Write failed but clear T_Active\n"); in cmm_write()
1356 dev->flags1 &= 0xdf; in cmm_write()
1357 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_write()
1360 clear_bit(LOCK_IO, &dev->flags); in cmm_write()
1361 wake_up_interruptible(&dev->ioq); in cmm_write()
1362 wake_up_interruptible(&dev->readq); /* tell read we have data */ in cmm_write()
1365 memset((char *)dev->sbuf, 0, 512); in cmm_write()
1368 DEBUGP(2, dev, "<- cmm_write\n"); in cmm_write()
1372 static void start_monitor(struct cm4000_dev *dev) in start_monitor() argument
1374 DEBUGP(3, dev, "-> start_monitor\n"); in start_monitor()
1375 if (!dev->monitor_running) { in start_monitor()
1376 DEBUGP(5, dev, "create, init and add timer\n"); in start_monitor()
1377 setup_timer(&dev->timer, monitor_card, (unsigned long)dev); in start_monitor()
1378 dev->monitor_running = 1; in start_monitor()
1379 mod_timer(&dev->timer, jiffies); in start_monitor()
1381 DEBUGP(5, dev, "monitor already running\n"); in start_monitor()
1382 DEBUGP(3, dev, "<- start_monitor\n"); in start_monitor()
1385 static void stop_monitor(struct cm4000_dev *dev) in stop_monitor() argument
1387 DEBUGP(3, dev, "-> stop_monitor\n"); in stop_monitor()
1388 if (dev->monitor_running) { in stop_monitor()
1389 DEBUGP(5, dev, "stopping monitor\n"); in stop_monitor()
1390 terminate_monitor(dev); in stop_monitor()
1392 clear_bit(IS_ATR_VALID, &dev->flags); in stop_monitor()
1393 clear_bit(IS_ATR_PRESENT, &dev->flags); in stop_monitor()
1395 DEBUGP(5, dev, "monitor already stopped\n"); in stop_monitor()
1396 DEBUGP(3, dev, "<- stop_monitor\n"); in stop_monitor()
1401 struct cm4000_dev *dev = filp->private_data; in cmm_ioctl() local
1402 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_ioctl()
1416 DEBUGP(3, dev, "cmm_ioctl(device=%d.%d) %s\n", imajor(inode), in cmm_ioctl()
1424 DEBUGP(4, dev, "DEV_OK false\n"); in cmm_ioctl()
1428 if (test_bit(IS_CMM_ABSENT, &dev->flags)) { in cmm_ioctl()
1429 DEBUGP(4, dev, "CMM_ABSENT flag set\n"); in cmm_ioctl()
1435 DEBUGP(4, dev, "ioctype mismatch\n"); in cmm_ioctl()
1439 DEBUGP(4, dev, "iocnr mismatch\n"); in cmm_ioctl()
1444 DEBUGP(4, dev, "iocdir=%.4x iocr=%.4x iocw=%.4x iocsize=%d cmd=%.4x\n", in cmm_ioctl()
1459 DEBUGP(4, dev, " ... in CM_IOCGSTATUS\n"); in cmm_ioctl()
1465 status = dev->flags0 & 3; in cmm_ioctl()
1466 if (test_bit(IS_ATR_PRESENT, &dev->flags)) in cmm_ioctl()
1468 if (test_bit(IS_ATR_VALID, &dev->flags)) in cmm_ioctl()
1470 if (test_bit(IS_CMM_ABSENT, &dev->flags)) in cmm_ioctl()
1472 if (test_bit(IS_BAD_CARD, &dev->flags)) in cmm_ioctl()
1479 DEBUGP(4, dev, "... in CM_IOCGATR\n"); in cmm_ioctl()
1485 (dev->atrq, in cmm_ioctl()
1487 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) in cmm_ioctl()
1497 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) { in cmm_ioctl()
1503 if (copy_to_user(atreq->atr, dev->atr, in cmm_ioctl()
1504 dev->atr_len)) in cmm_ioctl()
1507 tmp = dev->atr_len; in cmm_ioctl()
1517 DEBUGP(4, dev, "... in CM_IOCARDOFF\n"); in cmm_ioctl()
1518 if (dev->flags0 & 0x01) { in cmm_ioctl()
1519 DEBUGP(4, dev, " Card inserted\n"); in cmm_ioctl()
1521 DEBUGP(2, dev, " No card inserted\n"); in cmm_ioctl()
1523 if (dev->flags0 & 0x02) { in cmm_ioctl()
1524 DEBUGP(4, dev, " Card powered\n"); in cmm_ioctl()
1526 DEBUGP(2, dev, " Card not powered\n"); in cmm_ioctl()
1531 if ((dev->flags0 & 0x01) && (dev->flags0 & 0x02)) { in cmm_ioctl()
1535 (dev->ioq, in cmm_ioctl()
1537 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) in cmm_ioctl()
1546 DEBUGP(4, dev, "Set Flags0=0x42 \n"); in cmm_ioctl()
1548 clear_bit(IS_ATR_PRESENT, &dev->flags); in cmm_ioctl()
1549 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_ioctl()
1550 dev->mstate = M_CARDOFF; in cmm_ioctl()
1551 clear_bit(LOCK_IO, &dev->flags); in cmm_ioctl()
1553 (dev->atrq, in cmm_ioctl()
1555 || (test_bit(IS_ATR_VALID, (void *)&dev->flags) != in cmm_ioctl()
1565 clear_bit(LOCK_IO, &dev->flags); in cmm_ioctl()
1566 wake_up_interruptible(&dev->ioq); in cmm_ioctl()
1581 DEBUGP(4, dev, "... in CM_IOCSPTS\n"); in cmm_ioctl()
1584 (dev->atrq, in cmm_ioctl()
1586 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) in cmm_ioctl()
1596 (dev->ioq, in cmm_ioctl()
1598 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) in cmm_ioctl()
1607 if ((rc = set_protocol(dev, &krnptsreq)) != 0) { in cmm_ioctl()
1609 dev->mstate = M_FETCH_ATR; in cmm_ioctl()
1610 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_ioctl()
1613 clear_bit(LOCK_IO, &dev->flags); in cmm_ioctl()
1614 wake_up_interruptible(&dev->ioq); in cmm_ioctl()
1624 DEBUGP(4, dev, "... in default (unknown IOCTL code)\n"); in cmm_ioctl()
1634 struct cm4000_dev *dev; in cmm_open() local
1654 dev = link->priv; in cmm_open()
1655 filp->private_data = dev; in cmm_open()
1657 DEBUGP(2, dev, "-> cmm_open(device=%d.%d process=%s,%d)\n", in cmm_open()
1664 ZERO_DEV(dev); in cmm_open()
1677 dev->mdelay = T_50MSEC; in cmm_open()
1680 start_monitor(dev); in cmm_open()
1684 DEBUGP(2, dev, "<- cmm_open\n"); in cmm_open()
1693 struct cm4000_dev *dev; in cmm_close() local
1704 dev = link->priv; in cmm_close()
1706 DEBUGP(2, dev, "-> cmm_close(maj/min=%d.%d)\n", in cmm_close()
1709 stop_monitor(dev); in cmm_close()
1711 ZERO_DEV(dev); in cmm_close()
1714 wake_up(&dev->devq); /* socket removed? */ in cmm_close()
1716 DEBUGP(2, dev, "cmm_close\n"); in cmm_close()
1722 struct cm4000_dev *dev = link->priv; in cmm_cm4000_release() local
1727 DEBUGP(3, dev, "-> cmm_cm4000_release\n"); in cmm_cm4000_release()
1735 wait_event(dev->devq, (link->open == 0)); in cmm_cm4000_release()
1738 DEBUGP(3, dev, "<- cmm_cm4000_release\n"); in cmm_cm4000_release()
1751 struct cm4000_dev *dev; in cm4000_config() local
1762 dev = link->priv; in cm4000_config()
1773 struct cm4000_dev *dev; in cm4000_suspend() local
1775 dev = link->priv; in cm4000_suspend()
1776 stop_monitor(dev); in cm4000_suspend()
1783 struct cm4000_dev *dev; in cm4000_resume() local
1785 dev = link->priv; in cm4000_resume()
1787 start_monitor(dev); in cm4000_resume()
1800 struct cm4000_dev *dev; in cm4000_probe() local
1813 dev = kzalloc(sizeof(struct cm4000_dev), GFP_KERNEL); in cm4000_probe()
1814 if (dev == NULL) in cm4000_probe()
1817 dev->p_dev = link; in cm4000_probe()
1818 link->priv = dev; in cm4000_probe()
1821 init_waitqueue_head(&dev->devq); in cm4000_probe()
1822 init_waitqueue_head(&dev->ioq); in cm4000_probe()
1823 init_waitqueue_head(&dev->atrq); in cm4000_probe()
1824 init_waitqueue_head(&dev->readq); in cm4000_probe()
1829 kfree(dev); in cm4000_probe()
1840 struct cm4000_dev *dev = link->priv; in cm4000_detach() local
1850 stop_monitor(dev); in cm4000_detach()
1855 kfree(dev); in cm4000_detach()