Lines Matching refs:dev

46 #define reader_to_dev(x)	(&x->p_dev->dev)
147 #define ZERO_DEV(dev) memset(&((dev)->init), 0, sizeof((dev)->init)) argument
203 #define ATRLENCK(dev,pos) \ argument
204 if (pos>=dev->atr_len || pos>=MAX_ATR) \
318 static int parse_atr(struct cm4000_dev *dev) in parse_atr() argument
324 DEBUGP(3, dev, "-> parse_atr: dev->atr_len = %i\n", dev->atr_len); in parse_atr()
326 if (dev->atr_len < 3) { in parse_atr()
327 DEBUGP(5, dev, "parse_atr: atr_len < 3\n"); in parse_atr()
331 if (dev->atr[0] == 0x3f) in parse_atr()
332 set_bit(IS_INVREV, &dev->flags); in parse_atr()
334 clear_bit(IS_INVREV, &dev->flags); in parse_atr()
337 ch = dev->atr[1]; in parse_atr()
338 dev->proto = 0; /* XXX PROTO */ in parse_atr()
340 dev->ta1 = 0x11; /* defaults to 9600 baud */ in parse_atr()
344 dev->ta1 = dev->atr[2]; in parse_atr()
345 DEBUGP(5, dev, "Card says FiDi is 0x%.2x\n", dev->ta1); in parse_atr()
348 dev->ta1 = 0x11; in parse_atr()
352 DEBUGP(5, dev, "Yi=%.2x\n", ch & 0xf0); in parse_atr()
359 ch = dev->atr[ix]; in parse_atr()
362 DEBUGP(5, dev, "card is capable of T=1\n"); in parse_atr()
365 DEBUGP(5, dev, "card is capable of T=0\n"); in parse_atr()
371 DEBUGP(5, dev, "ix=%d noHist=%d any_t1=%d\n", in parse_atr()
372 ix, dev->atr[1] & 15, any_t1); in parse_atr()
373 if (ix + 1 + (dev->atr[1] & 0x0f) + any_t1 != dev->atr_len) { in parse_atr()
374 DEBUGP(5, dev, "length error\n"); in parse_atr()
378 set_bit(IS_ANY_T0, &dev->flags); in parse_atr()
381 dev->atr_csum = 0; in parse_atr()
383 for (i = 1; i < dev->atr_len; i++) in parse_atr()
384 dev->atr_csum ^= dev->atr[i]; in parse_atr()
385 if (dev->atr_csum) { in parse_atr()
386 set_bit(IS_BAD_CSUM, &dev->flags); in parse_atr()
387 DEBUGP(5, dev, "bad checksum\n"); in parse_atr()
392 dev->proto = 1; /* XXX PROTO */ in parse_atr()
393 set_bit(IS_ANY_T1, &dev->flags); in parse_atr()
419 static void set_cardparameter(struct cm4000_dev *dev) in set_cardparameter() argument
422 unsigned int iobase = dev->p_dev->resource[0]->start; in set_cardparameter()
425 DEBUGP(3, dev, "-> set_cardparameter\n"); in set_cardparameter()
427 dev->flags1 = dev->flags1 | (((dev->baudv - 1) & 0x0100) >> 8); in set_cardparameter()
428 xoutb(dev->flags1, REG_FLAGS1(iobase)); in set_cardparameter()
429 DEBUGP(5, dev, "flags1 = 0x%02x\n", dev->flags1); in set_cardparameter()
432 xoutb((unsigned char)((dev->baudv - 1) & 0xFF), REG_BAUDRATE(iobase)); in set_cardparameter()
434 DEBUGP(5, dev, "baudv = %i -> write 0x%02x\n", dev->baudv, in set_cardparameter()
435 ((dev->baudv - 1) & 0xFF)); in set_cardparameter()
439 if (!memcmp(dev->atr, card_fixups[i].atr, in set_cardparameter()
445 DEBUGP(3, dev, "<- set_cardparameter\n"); in set_cardparameter()
448 static int set_protocol(struct cm4000_dev *dev, struct ptsreq *ptsreq) in set_protocol() argument
455 unsigned int iobase = dev->p_dev->resource[0]->start; in set_protocol()
459 DEBUGP(3, dev, "-> set_protocol\n"); in set_protocol()
460 DEBUGP(5, dev, "ptsreq->Protocol = 0x%.8x, ptsreq->Flags=0x%.8x, " in set_protocol()
467 dev->pts[0] = 0xff; in set_protocol()
468 dev->pts[1] = 0x00; in set_protocol()
471 dev->pts[1]++; in set_protocol()
472 dev->proto = dev->pts[1]; /* Set new protocol */ in set_protocol()
473 dev->pts[1] = (0x01 << 4) | (dev->pts[1]); in set_protocol()
476 DEBUGP(5, dev, "Ta(1) from ATR is 0x%.2x\n", dev->ta1); in set_protocol()
478 dev->pts[2] = fi_di_table[dev->ta1 & 0x0F][(dev->ta1 >> 4) & 0x0F]; in set_protocol()
481 dev->pts[3] = dev->pts[0] ^ dev->pts[1] ^ dev->pts[2]; in set_protocol()
483 DEBUGP(5, dev, "pts0=%.2x, pts1=%.2x, pts2=%.2x, pts3=%.2x\n", in set_protocol()
484 dev->pts[0], dev->pts[1], dev->pts[2], dev->pts[3]); in set_protocol()
487 if (test_bit(IS_INVREV, &dev->flags)) in set_protocol()
488 str_invert_revert(dev->pts, 4); in set_protocol()
494 DEBUGP(5, dev, "Enable access to the messages buffer\n"); in set_protocol()
495 dev->flags1 = 0x20 /* T_Active */ in set_protocol()
496 | (test_bit(IS_INVREV, &dev->flags) ? 0x02 : 0x00) /* inv parity */ in set_protocol()
497 | ((dev->baudv >> 8) & 0x01); /* MSB-baud */ in set_protocol()
498 xoutb(dev->flags1, REG_FLAGS1(iobase)); in set_protocol()
500 DEBUGP(5, dev, "Enable message buffer -> flags1 = 0x%.2x\n", in set_protocol()
501 dev->flags1); in set_protocol()
504 DEBUGP(5, dev, "Write challenge to buffer: "); in set_protocol()
507 xoutb(dev->pts[i], REG_BUF_DATA(iobase)); /* buf data */ in set_protocol()
509 pr_debug("0x%.2x ", dev->pts[i]); in set_protocol()
517 DEBUGP(5, dev, "Set number of bytes to write\n");
525 DEBUGP(5, dev, "Waiting for NumRecBytes getting valid\n");
529 DEBUGP(5, dev, "NumRecBytes is valid\n");
535 DEBUGP(5, dev, "Timeout waiting for NumRecBytes getting "
541 DEBUGP(5, dev, "Reading NumRecBytes\n");
545 DEBUGP(2, dev, "NumRecBytes = %i\n", num_bytes_read);
560 DEBUGP(5, dev, "Timeout reading num_bytes_read\n");
565 DEBUGP(5, dev, "Reset the CARDMAN CONTROLLER\n");
569 DEBUGP(5, dev, "Read PPS reply\n");
576 DEBUGP(2, dev, "PTSreply: ");
583 DEBUGP(5, dev, "Clear Tactive in Flags1\n");
587 if ((dev->pts[0] == pts_reply[0]) &&
588 (dev->pts[1] == pts_reply[1]) &&
589 (dev->pts[2] == pts_reply[2]) && (dev->pts[3] == pts_reply[3])) {
591 dev->baudv = calc_baudv(dev->pts[2]);
592 set_cardparameter(dev);
593 } else if ((dev->pts[0] == pts_reply[0]) &&
594 ((dev->pts[1] & 0xef) == pts_reply[1]) &&
597 dev->baudv = calc_baudv(0x11);
598 set_cardparameter(dev);
603 DEBUGP(3, dev, "<- set_protocol\n");
607 static int io_detect_cm4000(unsigned int iobase, struct cm4000_dev *dev) in io_detect_cm4000() argument
612 clear_bit(IS_ATR_VALID, &dev->flags); in io_detect_cm4000()
613 set_bit(IS_CMM_ABSENT, &dev->flags); in io_detect_cm4000()
617 xoutb(dev->flags1 | 0x40, REG_FLAGS1(iobase)); in io_detect_cm4000()
619 clear_bit(IS_ATR_VALID, &dev->flags); in io_detect_cm4000()
620 set_bit(IS_CMM_ABSENT, &dev->flags); in io_detect_cm4000()
624 xoutb(dev->flags1, REG_FLAGS1(iobase)); in io_detect_cm4000()
628 static void terminate_monitor(struct cm4000_dev *dev) in terminate_monitor() argument
634 DEBUGP(3, dev, "-> terminate_monitor\n"); in terminate_monitor()
635 wait_event_interruptible(dev->devq, in terminate_monitor()
637 (void *)&dev->flags)); in terminate_monitor()
644 DEBUGP(5, dev, "Now allow last cycle of monitor!\n"); in terminate_monitor()
645 while (test_bit(LOCK_MONITOR, (void *)&dev->flags)) in terminate_monitor()
648 DEBUGP(5, dev, "Delete timer\n"); in terminate_monitor()
649 del_timer_sync(&dev->timer); in terminate_monitor()
651 dev->monitor_running = 0; in terminate_monitor()
654 DEBUGP(3, dev, "<- terminate_monitor\n"); in terminate_monitor()
667 struct cm4000_dev *dev = from_timer(dev, t, timer); in monitor_card() local
668 unsigned int iobase = dev->p_dev->resource[0]->start; in monitor_card()
673 DEBUGP(7, dev, "-> monitor_card\n"); in monitor_card()
676 if (test_and_set_bit(LOCK_MONITOR, &dev->flags)) { in monitor_card()
677 DEBUGP(4, dev, "About to stop monitor\n"); in monitor_card()
679 dev->rlen = in monitor_card()
680 dev->rpos = in monitor_card()
681 dev->atr_csum = dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
682 dev->mstate = M_FETCH_ATR; in monitor_card()
683 clear_bit(LOCK_MONITOR, &dev->flags); in monitor_card()
685 wake_up_interruptible(&dev->devq); in monitor_card()
686 DEBUGP(2, dev, "<- monitor_card (we are done now)\n"); in monitor_card()
691 if (test_and_set_bit(LOCK_IO, (void *)&dev->flags)) { in monitor_card()
692 DEBUGP(4, dev, "Couldn't get IO lock\n"); in monitor_card()
697 dev->flags0 = xinb(REG_FLAGS0(iobase)); in monitor_card()
698 DEBUGP(7, dev, "dev->flags0 = 0x%2x\n", dev->flags0); in monitor_card()
699 DEBUGP(7, dev, "smartcard present: %s\n", in monitor_card()
700 dev->flags0 & 1 ? "yes" : "no"); in monitor_card()
701 DEBUGP(7, dev, "cardman present: %s\n", in monitor_card()
702 dev->flags0 == 0xff ? "no" : "yes"); in monitor_card()
704 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in monitor_card()
705 || dev->flags0 == 0xff) { /* no cardman inserted */ in monitor_card()
707 dev->rlen = in monitor_card()
708 dev->rpos = in monitor_card()
709 dev->atr_csum = dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
710 dev->mstate = M_FETCH_ATR; in monitor_card()
712 dev->flags &= 0x000000ff; /* only keep IO and MONITOR locks */ in monitor_card()
714 if (dev->flags0 == 0xff) { in monitor_card()
715 DEBUGP(4, dev, "set IS_CMM_ABSENT bit\n"); in monitor_card()
716 set_bit(IS_CMM_ABSENT, &dev->flags); in monitor_card()
717 } else if (test_bit(IS_CMM_ABSENT, &dev->flags)) { in monitor_card()
718 DEBUGP(4, dev, "clear IS_CMM_ABSENT bit " in monitor_card()
720 clear_bit(IS_CMM_ABSENT, &dev->flags); in monitor_card()
724 } else if ((dev->flags0 & 1) && test_bit(IS_CMM_ABSENT, &dev->flags)) { in monitor_card()
727 DEBUGP(4, dev, "clear IS_CMM_ABSENT bit (card is inserted)\n"); in monitor_card()
728 clear_bit(IS_CMM_ABSENT, &dev->flags); in monitor_card()
731 if (test_bit(IS_ATR_VALID, &dev->flags) == 1) { in monitor_card()
732 DEBUGP(7, dev, "believe ATR is already valid (do nothing)\n"); in monitor_card()
736 switch (dev->mstate) { in monitor_card()
740 DEBUGP(4, dev, "M_CARDOFF\n"); in monitor_card()
744 dev->mdelay = T_10MSEC; in monitor_card()
752 dev->rlen = in monitor_card()
753 dev->rpos = in monitor_card()
754 dev->atr_csum = in monitor_card()
755 dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
756 dev->mstate = M_FETCH_ATR; in monitor_card()
759 dev->mdelay = T_50MSEC; in monitor_card()
764 DEBUGP(4, dev, "M_FETCH_ATR\n"); in monitor_card()
766 DEBUGP(4, dev, "Reset BAUDV to 9600\n"); in monitor_card()
767 dev->baudv = 0x173; /* 9600 */ in monitor_card()
773 xoutb(dev->flags0 & 2 ? 0x46 : 0x44, REG_FLAGS0(iobase)); in monitor_card()
774 dev->mdelay = T_40MSEC; in monitor_card()
775 dev->mstate = M_TIMEOUT_WAIT; in monitor_card()
778 DEBUGP(4, dev, "M_TIMEOUT_WAIT\n"); in monitor_card()
780 io_read_num_rec_bytes(iobase, &dev->atr_len); in monitor_card()
781 dev->mdelay = T_10MSEC; in monitor_card()
782 dev->mstate = M_READ_ATR_LEN; in monitor_card()
785 DEBUGP(4, dev, "M_READ_ATR_LEN\n"); in monitor_card()
790 if (dev->atr_len == io_read_num_rec_bytes(iobase, &s)) { in monitor_card()
791 if (dev->atr_len_retry++ >= MAX_ATR_LEN_RETRY) { /* + XX msec */ in monitor_card()
792 dev->mdelay = T_10MSEC; in monitor_card()
793 dev->mstate = M_READ_ATR; in monitor_card()
796 dev->atr_len = s; in monitor_card()
797 dev->atr_len_retry = 0; /* set new timeout */ in monitor_card()
800 DEBUGP(4, dev, "Current ATR_LEN = %i\n", dev->atr_len); in monitor_card()
803 DEBUGP(4, dev, "M_READ_ATR\n"); in monitor_card()
805 for (i = 0; i < dev->atr_len; i++) { in monitor_card()
807 dev->atr[i] = inb(REG_BUF_DATA(iobase)); in monitor_card()
810 DEBUGP(4, dev, "Deactivate T_Active flags\n"); in monitor_card()
811 dev->flags1 = 0x01; in monitor_card()
812 xoutb(dev->flags1, REG_FLAGS1(iobase)); in monitor_card()
815 set_bit(IS_ATR_PRESENT, &dev->flags); in monitor_card()
816 if (dev->atr[0] == 0x03) in monitor_card()
817 str_invert_revert(dev->atr, dev->atr_len); in monitor_card()
818 atrc = parse_atr(dev); in monitor_card()
820 dev->mdelay = 0; in monitor_card()
821 dev->mstate = M_BAD_CARD; in monitor_card()
823 dev->mdelay = T_50MSEC; in monitor_card()
824 dev->mstate = M_ATR_PRESENT; in monitor_card()
825 set_bit(IS_ATR_VALID, &dev->flags); in monitor_card()
828 if (test_bit(IS_ATR_VALID, &dev->flags) == 1) { in monitor_card()
829 DEBUGP(4, dev, "monitor_card: ATR valid\n"); in monitor_card()
832 if ((test_bit(IS_AUTOPPS_ACT, &dev->flags) == 0) && in monitor_card()
833 (dev->ta1 != 0x11) && in monitor_card()
834 !(test_bit(IS_ANY_T0, &dev->flags) && in monitor_card()
835 test_bit(IS_ANY_T1, &dev->flags))) { in monitor_card()
836 DEBUGP(4, dev, "Perform AUTOPPS\n"); in monitor_card()
837 set_bit(IS_AUTOPPS_ACT, &dev->flags); in monitor_card()
838 ptsreq.protocol = (0x01 << dev->proto); in monitor_card()
843 if (set_protocol(dev, &ptsreq) == 0) { in monitor_card()
844 DEBUGP(4, dev, "AUTOPPS ret SUCC\n"); in monitor_card()
845 clear_bit(IS_AUTOPPS_ACT, &dev->flags); in monitor_card()
846 wake_up_interruptible(&dev->atrq); in monitor_card()
848 DEBUGP(4, dev, "AUTOPPS failed: " in monitor_card()
851 clear_bit(IS_ATR_PRESENT, &dev->flags); in monitor_card()
852 clear_bit(IS_ATR_VALID, &dev->flags); in monitor_card()
853 dev->rlen = in monitor_card()
854 dev->rpos = in monitor_card()
855 dev->atr_csum = in monitor_card()
856 dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
857 dev->mstate = M_FETCH_ATR; in monitor_card()
859 dev->mdelay = T_50MSEC; in monitor_card()
864 set_cardparameter(dev); in monitor_card()
865 if (test_bit(IS_AUTOPPS_ACT, &dev->flags) == 1) in monitor_card()
866 DEBUGP(4, dev, "AUTOPPS already active " in monitor_card()
868 if (dev->ta1 == 0x11) in monitor_card()
869 DEBUGP(4, dev, "No AUTOPPS necessary " in monitor_card()
871 if (test_bit(IS_ANY_T0, &dev->flags) in monitor_card()
872 && test_bit(IS_ANY_T1, &dev->flags)) in monitor_card()
873 DEBUGP(4, dev, "Do NOT perform AUTOPPS " in monitor_card()
875 clear_bit(IS_AUTOPPS_ACT, &dev->flags); in monitor_card()
876 wake_up_interruptible(&dev->atrq); in monitor_card()
879 DEBUGP(4, dev, "ATR invalid\n"); in monitor_card()
880 wake_up_interruptible(&dev->atrq); in monitor_card()
884 DEBUGP(4, dev, "M_BAD_CARD\n"); in monitor_card()
886 if (dev->cwarn == 0 || dev->cwarn == 10) { in monitor_card()
887 set_bit(IS_BAD_CARD, &dev->flags); in monitor_card()
888 dev_warn(&dev->p_dev->dev, MODULE_NAME ": "); in monitor_card()
889 if (test_bit(IS_BAD_CSUM, &dev->flags)) { in monitor_card()
890 DEBUGP(4, dev, "ATR checksum (0x%.2x, should " in monitor_card()
891 "be zero) failed\n", dev->atr_csum); in monitor_card()
894 else if (test_bit(IS_BAD_LENGTH, &dev->flags)) { in monitor_card()
895 DEBUGP(4, dev, "ATR length error\n"); in monitor_card()
897 DEBUGP(4, dev, "card damaged or wrong way " in monitor_card()
901 dev->cwarn = 0; in monitor_card()
902 wake_up_interruptible(&dev->atrq); /* wake open */ in monitor_card()
904 dev->cwarn++; in monitor_card()
905 dev->mdelay = T_100MSEC; in monitor_card()
906 dev->mstate = M_FETCH_ATR; in monitor_card()
909 DEBUGP(7, dev, "Unknown action\n"); in monitor_card()
914 DEBUGP(7, dev, "release_io\n"); in monitor_card()
915 clear_bit(LOCK_IO, &dev->flags); in monitor_card()
916 wake_up_interruptible(&dev->ioq); /* whoever needs IO */ in monitor_card()
919 DEBUGP(7, dev, "<- monitor_card (returns with timer)\n"); in monitor_card()
920 mod_timer(&dev->timer, jiffies + dev->mdelay); in monitor_card()
921 clear_bit(LOCK_MONITOR, &dev->flags); in monitor_card()
929 struct cm4000_dev *dev = filp->private_data; in cmm_read() local
930 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_read()
934 DEBUGP(2, dev, "-> cmm_read(%s,%d)\n", current->comm, current->pid); in cmm_read()
939 if (!pcmcia_dev_present(dev->p_dev) || /* device removed */ in cmm_read()
940 test_bit(IS_CMM_ABSENT, &dev->flags)) in cmm_read()
943 if (test_bit(IS_BAD_CSUM, &dev->flags)) in cmm_read()
948 (dev->atrq, in cmm_read()
950 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) != 0)))) { in cmm_read()
956 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) in cmm_read()
961 (dev->readq, in cmm_read()
962 ((filp->f_flags & O_NONBLOCK) || (dev->rpos < dev->rlen)))) { in cmm_read()
970 (dev->ioq, in cmm_read()
972 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) { in cmm_read()
979 dev->flags0 = inb(REG_FLAGS0(iobase)); in cmm_read()
980 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in cmm_read()
981 || dev->flags0 == 0xff) { /* no cardman inserted */ in cmm_read()
982 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_read()
983 if (dev->flags0 & 1) { in cmm_read()
984 set_bit(IS_CMM_ABSENT, &dev->flags); in cmm_read()
992 DEBUGP(4, dev, "begin read answer\n"); in cmm_read()
993 j = min(count, (size_t)(dev->rlen - dev->rpos)); in cmm_read()
994 k = dev->rpos; in cmm_read()
997 DEBUGP(4, dev, "read1 j=%d\n", j); in cmm_read()
1000 dev->rbuf[i] = xinb(REG_BUF_DATA(iobase)); in cmm_read()
1002 j = min(count, (size_t)(dev->rlen - dev->rpos)); in cmm_read()
1004 DEBUGP(4, dev, "read2 j=%d\n", j); in cmm_read()
1005 dev->flags1 |= 0x10; /* MSB buf addr set */ in cmm_read()
1006 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_read()
1009 dev->rbuf[i] = xinb(REG_BUF_DATA(iobase)); in cmm_read()
1013 if (dev->proto == 0 && count > dev->rlen - dev->rpos && i) { in cmm_read()
1014 DEBUGP(4, dev, "T=0 and count > buffer\n"); in cmm_read()
1015 dev->rbuf[i] = dev->rbuf[i - 1]; in cmm_read()
1016 dev->rbuf[i - 1] = dev->procbyte; in cmm_read()
1021 dev->rpos = dev->rlen + 1; in cmm_read()
1024 DEBUGP(4, dev, "Clear T1Active\n"); in cmm_read()
1025 dev->flags1 &= 0xdf; in cmm_read()
1026 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_read()
1030 if (!io_detect_cm4000(iobase, dev)) { in cmm_read()
1035 if (test_bit(IS_INVREV, &dev->flags) && count > 0) in cmm_read()
1036 str_invert_revert(dev->rbuf, count); in cmm_read()
1038 if (copy_to_user(buf, dev->rbuf, count)) in cmm_read()
1042 clear_bit(LOCK_IO, &dev->flags); in cmm_read()
1043 wake_up_interruptible(&dev->ioq); in cmm_read()
1045 DEBUGP(2, dev, "<- cmm_read returns: rc = %zi\n", in cmm_read()
1053 struct cm4000_dev *dev = filp->private_data; in cmm_write() local
1054 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_write()
1063 DEBUGP(2, dev, "-> cmm_write(%s,%d)\n", current->comm, current->pid); in cmm_write()
1068 if (dev->proto == 0 && count < 4) { in cmm_write()
1070 DEBUGP(4, dev, "T0 short write\n"); in cmm_write()
1076 sendT0 = dev->proto ? 0 : nr > 5 ? 0x08 : 0; in cmm_write()
1078 if (!pcmcia_dev_present(dev->p_dev) || /* device removed */ in cmm_write()
1079 test_bit(IS_CMM_ABSENT, &dev->flags)) in cmm_write()
1082 if (test_bit(IS_BAD_CSUM, &dev->flags)) { in cmm_write()
1083 DEBUGP(4, dev, "bad csum\n"); in cmm_write()
1099 (dev->atrq, in cmm_write()
1101 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) != 0)))) { in cmm_write()
1107 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) { /* invalid atr */ in cmm_write()
1108 DEBUGP(4, dev, "invalid ATR\n"); in cmm_write()
1114 (dev->ioq, in cmm_write()
1116 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) { in cmm_write()
1122 if (copy_from_user(dev->sbuf, buf, ((count > 512) ? 512 : count))) in cmm_write()
1126 dev->flags0 = inb(REG_FLAGS0(iobase)); in cmm_write()
1127 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in cmm_write()
1128 || dev->flags0 == 0xff) { /* no cardman inserted */ in cmm_write()
1129 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_write()
1130 if (dev->flags0 & 1) { in cmm_write()
1131 set_bit(IS_CMM_ABSENT, &dev->flags); in cmm_write()
1134 DEBUGP(4, dev, "IO error\n"); in cmm_write()
1142 if (!io_detect_cm4000(iobase, dev)) { in cmm_write()
1148 dev->flags1 |= (sendT0); in cmm_write()
1150 set_cardparameter(dev); in cmm_write()
1155 dev->flags1 = 0x20 /* T_Active */ in cmm_write()
1157 | (test_bit(IS_INVREV, &dev->flags) ? 2 : 0)/* inverse parity */ in cmm_write()
1158 | (((dev->baudv - 1) & 0x0100) >> 8); /* MSB-Baud */ in cmm_write()
1159 DEBUGP(1, dev, "set dev->flags1 = 0x%.2x\n", dev->flags1); in cmm_write()
1160 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_write()
1163 DEBUGP(4, dev, "Xmit data\n"); in cmm_write()
1166 dev->flags1 = 0x20 /* T_Active */ in cmm_write()
1169 | (test_bit(IS_INVREV, &dev->flags) ? 2 : 0) in cmm_write()
1170 | (((dev->baudv - 1) & 0x0100) >> 8) /* MSB-Baud */ in cmm_write()
1172 DEBUGP(4, dev, "dev->flags = 0x%.2x - set address " in cmm_write()
1173 "high\n", dev->flags1); in cmm_write()
1174 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_write()
1176 if (test_bit(IS_INVREV, &dev->flags)) { in cmm_write()
1177 DEBUGP(4, dev, "Apply inverse convention for 0x%.2x " in cmm_write()
1178 "-> 0x%.2x\n", (unsigned char)dev->sbuf[i], in cmm_write()
1179 invert_revert(dev->sbuf[i])); in cmm_write()
1181 xoutb(invert_revert(dev->sbuf[i]), in cmm_write()
1185 xoutb(dev->sbuf[i], REG_BUF_DATA(iobase)); in cmm_write()
1188 DEBUGP(4, dev, "Xmit done\n"); in cmm_write()
1190 if (dev->proto == 0) { in cmm_write()
1193 DEBUGP(4, dev, "T=0 assumes 0 byte reply\n"); in cmm_write()
1195 if (test_bit(IS_INVREV, &dev->flags)) in cmm_write()
1208 nsend = 5 + (unsigned char)dev->sbuf[4]; in cmm_write()
1209 if (dev->sbuf[4] == 0) in cmm_write()
1217 if (test_bit(IS_INVREV, &dev->flags)) { in cmm_write()
1218 DEBUGP(4, dev, "T=0 set Procedure byte (inverse-reverse) " in cmm_write()
1219 "0x%.2x\n", invert_revert(dev->sbuf[1])); in cmm_write()
1220 xoutb(invert_revert(dev->sbuf[1]), REG_NUM_BYTES(iobase)); in cmm_write()
1222 DEBUGP(4, dev, "T=0 set Procedure byte 0x%.2x\n", dev->sbuf[1]); in cmm_write()
1223 xoutb(dev->sbuf[1], REG_NUM_BYTES(iobase)); in cmm_write()
1226 DEBUGP(1, dev, "set NumSendBytes = 0x%.2x\n", in cmm_write()
1230 DEBUGP(1, dev, "Trigger CARDMAN CONTROLLER (0x%.2x)\n", 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()
1236 | (dev->flags0 & 2 ? 0 : 4) /* power on if needed */ in cmm_write()
1237 |(dev->proto ? 0x10 : 0x08) /* T=1/T=0 */ in cmm_write()
1242 if (dev->proto == 1) { in cmm_write()
1243 DEBUGP(4, dev, "Wait for xmit done\n"); in cmm_write()
1250 DEBUGP(4, dev, "timeout waiting for xmit done\n"); in cmm_write()
1259 if (dev->proto) { in cmm_write()
1265 DEBUGP(4, dev, "infolen=%d\n", infolen); in cmm_write()
1271 DEBUGP(4, dev, "timeout waiting for infoLen\n"); in cmm_write()
1276 clear_bit(IS_PROCBYTE_PRESENT, &dev->flags); in cmm_write()
1279 io_read_num_rec_bytes(iobase, &dev->rlen); in cmm_write()
1281 if (dev->proto) { in cmm_write()
1282 if (dev->rlen >= infolen + 4) in cmm_write()
1288 if (s > dev->rlen) { in cmm_write()
1289 DEBUGP(1, dev, "NumRecBytes inc (reset timeout)\n"); in cmm_write()
1291 dev->rlen = s; in cmm_write()
1300 else if (dev->proto == 0) { in cmm_write()
1303 DEBUGP(1, dev, "NoProcedure byte set\n"); in cmm_write()
1307 DEBUGP(1, dev, "NoProcedure byte unset " in cmm_write()
1309 dev->procbyte = inb(REG_FLAGS1(iobase)); in cmm_write()
1310 DEBUGP(1, dev, "Read procedure byte 0x%.2x\n", in cmm_write()
1311 dev->procbyte); in cmm_write()
1315 DEBUGP(1, dev, "T0Done flag (read reply)\n"); in cmm_write()
1319 if (dev->proto) in cmm_write()
1323 DEBUGP(1, dev, "timeout waiting for numRecBytes\n"); in cmm_write()
1327 if (dev->proto == 0) { in cmm_write()
1328 DEBUGP(1, dev, "Wait for T0Done bit to be set\n"); in cmm_write()
1335 DEBUGP(1, dev, "timeout waiting for T0Done\n"); in cmm_write()
1340 dev->procbyte = inb(REG_FLAGS1(iobase)); in cmm_write()
1341 DEBUGP(4, dev, "Read procedure byte 0x%.2x\n", in cmm_write()
1342 dev->procbyte); in cmm_write()
1344 io_read_num_rec_bytes(iobase, &dev->rlen); in cmm_write()
1345 DEBUGP(4, dev, "Read NumRecBytes = %i\n", dev->rlen); in cmm_write()
1350 dev->rpos = dev->proto ? 0 : nr == 4 ? 5 : nr > dev->rlen ? 5 : nr; in cmm_write()
1351 DEBUGP(4, dev, "dev->rlen = %i, dev->rpos = %i, nr = %i\n", in cmm_write()
1352 dev->rlen, dev->rpos, nr); in cmm_write()
1355 DEBUGP(4, dev, "Reset SM\n"); in cmm_write()
1359 DEBUGP(4, dev, "Write failed but clear T_Active\n"); in cmm_write()
1360 dev->flags1 &= 0xdf; in cmm_write()
1361 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_write()
1364 clear_bit(LOCK_IO, &dev->flags); in cmm_write()
1365 wake_up_interruptible(&dev->ioq); in cmm_write()
1366 wake_up_interruptible(&dev->readq); /* tell read we have data */ in cmm_write()
1369 memset((char *)dev->sbuf, 0, 512); in cmm_write()
1372 DEBUGP(2, dev, "<- cmm_write\n"); in cmm_write()
1376 static void start_monitor(struct cm4000_dev *dev) in start_monitor() argument
1378 DEBUGP(3, dev, "-> start_monitor\n"); in start_monitor()
1379 if (!dev->monitor_running) { in start_monitor()
1380 DEBUGP(5, dev, "create, init and add timer\n"); in start_monitor()
1381 timer_setup(&dev->timer, monitor_card, 0); in start_monitor()
1382 dev->monitor_running = 1; in start_monitor()
1383 mod_timer(&dev->timer, jiffies); in start_monitor()
1385 DEBUGP(5, dev, "monitor already running\n"); in start_monitor()
1386 DEBUGP(3, dev, "<- start_monitor\n"); in start_monitor()
1389 static void stop_monitor(struct cm4000_dev *dev) in stop_monitor() argument
1391 DEBUGP(3, dev, "-> stop_monitor\n"); in stop_monitor()
1392 if (dev->monitor_running) { in stop_monitor()
1393 DEBUGP(5, dev, "stopping monitor\n"); in stop_monitor()
1394 terminate_monitor(dev); in stop_monitor()
1396 clear_bit(IS_ATR_VALID, &dev->flags); in stop_monitor()
1397 clear_bit(IS_ATR_PRESENT, &dev->flags); in stop_monitor()
1399 DEBUGP(5, dev, "monitor already stopped\n"); in stop_monitor()
1400 DEBUGP(3, dev, "<- stop_monitor\n"); in stop_monitor()
1405 struct cm4000_dev *dev = filp->private_data; in cmm_ioctl() local
1406 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_ioctl()
1419 DEBUGP(3, dev, "cmm_ioctl(device=%d.%d) %s\n", imajor(inode), in cmm_ioctl()
1427 DEBUGP(4, dev, "DEV_OK false\n"); in cmm_ioctl()
1431 if (test_bit(IS_CMM_ABSENT, &dev->flags)) { in cmm_ioctl()
1432 DEBUGP(4, dev, "CMM_ABSENT flag set\n"); in cmm_ioctl()
1438 DEBUGP(4, dev, "ioctype mismatch\n"); in cmm_ioctl()
1442 DEBUGP(4, dev, "iocnr mismatch\n"); in cmm_ioctl()
1449 DEBUGP(4, dev, " ... in CM_IOCGSTATUS\n"); in cmm_ioctl()
1455 status = dev->flags0 & 3; in cmm_ioctl()
1456 if (test_bit(IS_ATR_PRESENT, &dev->flags)) in cmm_ioctl()
1458 if (test_bit(IS_ATR_VALID, &dev->flags)) in cmm_ioctl()
1460 if (test_bit(IS_CMM_ABSENT, &dev->flags)) in cmm_ioctl()
1462 if (test_bit(IS_BAD_CARD, &dev->flags)) in cmm_ioctl()
1469 DEBUGP(4, dev, "... in CM_IOCGATR\n"); in cmm_ioctl()
1475 (dev->atrq, in cmm_ioctl()
1477 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) in cmm_ioctl()
1487 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) { in cmm_ioctl()
1493 if (copy_to_user(atreq->atr, dev->atr, in cmm_ioctl()
1494 dev->atr_len)) in cmm_ioctl()
1497 tmp = dev->atr_len; in cmm_ioctl()
1507 DEBUGP(4, dev, "... in CM_IOCARDOFF\n"); in cmm_ioctl()
1508 if (dev->flags0 & 0x01) { in cmm_ioctl()
1509 DEBUGP(4, dev, " Card inserted\n"); in cmm_ioctl()
1511 DEBUGP(2, dev, " No card inserted\n"); in cmm_ioctl()
1513 if (dev->flags0 & 0x02) { in cmm_ioctl()
1514 DEBUGP(4, dev, " Card powered\n"); in cmm_ioctl()
1516 DEBUGP(2, dev, " Card not powered\n"); in cmm_ioctl()
1521 if ((dev->flags0 & 0x01) && (dev->flags0 & 0x02)) { in cmm_ioctl()
1525 (dev->ioq, in cmm_ioctl()
1527 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) in cmm_ioctl()
1536 DEBUGP(4, dev, "Set Flags0=0x42 \n"); in cmm_ioctl()
1538 clear_bit(IS_ATR_PRESENT, &dev->flags); in cmm_ioctl()
1539 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_ioctl()
1540 dev->mstate = M_CARDOFF; in cmm_ioctl()
1541 clear_bit(LOCK_IO, &dev->flags); in cmm_ioctl()
1543 (dev->atrq, in cmm_ioctl()
1545 || (test_bit(IS_ATR_VALID, (void *)&dev->flags) != in cmm_ioctl()
1555 clear_bit(LOCK_IO, &dev->flags); in cmm_ioctl()
1556 wake_up_interruptible(&dev->ioq); in cmm_ioctl()
1571 DEBUGP(4, dev, "... in CM_IOCSPTS\n"); in cmm_ioctl()
1574 (dev->atrq, in cmm_ioctl()
1576 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) in cmm_ioctl()
1586 (dev->ioq, in cmm_ioctl()
1588 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) in cmm_ioctl()
1597 if ((rc = set_protocol(dev, &krnptsreq)) != 0) { in cmm_ioctl()
1599 dev->mstate = M_FETCH_ATR; in cmm_ioctl()
1600 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_ioctl()
1603 clear_bit(LOCK_IO, &dev->flags); in cmm_ioctl()
1604 wake_up_interruptible(&dev->ioq); in cmm_ioctl()
1614 DEBUGP(4, dev, "... in default (unknown IOCTL code)\n"); in cmm_ioctl()
1624 struct cm4000_dev *dev; in cmm_open() local
1644 dev = link->priv; in cmm_open()
1645 filp->private_data = dev; in cmm_open()
1647 DEBUGP(2, dev, "-> cmm_open(device=%d.%d process=%s,%d)\n", in cmm_open()
1654 ZERO_DEV(dev); in cmm_open()
1667 dev->mdelay = T_50MSEC; in cmm_open()
1670 start_monitor(dev); in cmm_open()
1674 DEBUGP(2, dev, "<- cmm_open\n"); in cmm_open()
1683 struct cm4000_dev *dev; in cmm_close() local
1694 dev = link->priv; in cmm_close()
1696 DEBUGP(2, dev, "-> cmm_close(maj/min=%d.%d)\n", in cmm_close()
1699 stop_monitor(dev); in cmm_close()
1701 ZERO_DEV(dev); in cmm_close()
1704 wake_up(&dev->devq); /* socket removed? */ in cmm_close()
1706 DEBUGP(2, dev, "cmm_close\n"); in cmm_close()
1712 struct cm4000_dev *dev = link->priv; in cmm_cm4000_release() local
1717 DEBUGP(3, dev, "-> cmm_cm4000_release\n"); in cmm_cm4000_release()
1725 wait_event(dev->devq, (link->open == 0)); in cmm_cm4000_release()
1728 DEBUGP(3, dev, "<- cmm_cm4000_release\n"); in cmm_cm4000_release()
1759 struct cm4000_dev *dev; in cm4000_suspend() local
1761 dev = link->priv; in cm4000_suspend()
1762 stop_monitor(dev); in cm4000_suspend()
1769 struct cm4000_dev *dev; in cm4000_resume() local
1771 dev = link->priv; in cm4000_resume()
1773 start_monitor(dev); in cm4000_resume()
1786 struct cm4000_dev *dev; in cm4000_probe() local
1799 dev = kzalloc(sizeof(struct cm4000_dev), GFP_KERNEL); in cm4000_probe()
1800 if (dev == NULL) in cm4000_probe()
1803 dev->p_dev = link; in cm4000_probe()
1804 link->priv = dev; in cm4000_probe()
1807 init_waitqueue_head(&dev->devq); in cm4000_probe()
1808 init_waitqueue_head(&dev->ioq); in cm4000_probe()
1809 init_waitqueue_head(&dev->atrq); in cm4000_probe()
1810 init_waitqueue_head(&dev->readq); in cm4000_probe()
1815 kfree(dev); in cm4000_probe()
1826 struct cm4000_dev *dev = link->priv; in cm4000_detach() local
1836 stop_monitor(dev); in cm4000_detach()
1841 kfree(dev); in cm4000_detach()