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);
561 DEBUGP(5, dev, "Timeout reading num_bytes_read\n");
566 DEBUGP(5, dev, "Reset the CARDMAN CONTROLLER\n");
570 DEBUGP(5, dev, "Read PPS reply\n");
577 DEBUGP(2, dev, "PTSreply: ");
584 DEBUGP(5, dev, "Clear Tactive in Flags1\n");
588 if ((dev->pts[0] == pts_reply[0]) &&
589 (dev->pts[1] == pts_reply[1]) &&
590 (dev->pts[2] == pts_reply[2]) && (dev->pts[3] == pts_reply[3])) {
592 dev->baudv = calc_baudv(dev->pts[2]);
593 set_cardparameter(dev);
594 } else if ((dev->pts[0] == pts_reply[0]) &&
595 ((dev->pts[1] & 0xef) == pts_reply[1]) &&
598 dev->baudv = calc_baudv(0x11);
599 set_cardparameter(dev);
604 DEBUGP(3, dev, "<- set_protocol\n");
608 static int io_detect_cm4000(unsigned int iobase, struct cm4000_dev *dev) in io_detect_cm4000() argument
613 clear_bit(IS_ATR_VALID, &dev->flags); in io_detect_cm4000()
614 set_bit(IS_CMM_ABSENT, &dev->flags); in io_detect_cm4000()
618 xoutb(dev->flags1 | 0x40, REG_FLAGS1(iobase)); in io_detect_cm4000()
620 clear_bit(IS_ATR_VALID, &dev->flags); in io_detect_cm4000()
621 set_bit(IS_CMM_ABSENT, &dev->flags); in io_detect_cm4000()
625 xoutb(dev->flags1, REG_FLAGS1(iobase)); in io_detect_cm4000()
629 static void terminate_monitor(struct cm4000_dev *dev) in terminate_monitor() argument
635 DEBUGP(3, dev, "-> terminate_monitor\n"); in terminate_monitor()
636 wait_event_interruptible(dev->devq, in terminate_monitor()
638 (void *)&dev->flags)); in terminate_monitor()
645 DEBUGP(5, dev, "Now allow last cycle of monitor!\n"); in terminate_monitor()
646 while (test_bit(LOCK_MONITOR, (void *)&dev->flags)) in terminate_monitor()
649 DEBUGP(5, dev, "Delete timer\n"); in terminate_monitor()
650 del_timer_sync(&dev->timer); in terminate_monitor()
652 dev->monitor_running = 0; in terminate_monitor()
655 DEBUGP(3, dev, "<- terminate_monitor\n"); in terminate_monitor()
668 struct cm4000_dev *dev = from_timer(dev, t, timer); in monitor_card() local
669 unsigned int iobase = dev->p_dev->resource[0]->start; in monitor_card()
674 DEBUGP(7, dev, "-> monitor_card\n"); in monitor_card()
677 if (test_and_set_bit(LOCK_MONITOR, &dev->flags)) { in monitor_card()
678 DEBUGP(4, dev, "About to stop monitor\n"); in monitor_card()
680 dev->rlen = in monitor_card()
681 dev->rpos = in monitor_card()
682 dev->atr_csum = dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
683 dev->mstate = M_FETCH_ATR; in monitor_card()
684 clear_bit(LOCK_MONITOR, &dev->flags); in monitor_card()
686 wake_up_interruptible(&dev->devq); in monitor_card()
687 DEBUGP(2, dev, "<- monitor_card (we are done now)\n"); in monitor_card()
692 if (test_and_set_bit(LOCK_IO, (void *)&dev->flags)) { in monitor_card()
693 DEBUGP(4, dev, "Couldn't get IO lock\n"); in monitor_card()
698 dev->flags0 = xinb(REG_FLAGS0(iobase)); in monitor_card()
699 DEBUGP(7, dev, "dev->flags0 = 0x%2x\n", dev->flags0); in monitor_card()
700 DEBUGP(7, dev, "smartcard present: %s\n", in monitor_card()
701 dev->flags0 & 1 ? "yes" : "no"); in monitor_card()
702 DEBUGP(7, dev, "cardman present: %s\n", in monitor_card()
703 dev->flags0 == 0xff ? "no" : "yes"); in monitor_card()
705 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in monitor_card()
706 || dev->flags0 == 0xff) { /* no cardman inserted */ in monitor_card()
708 dev->rlen = in monitor_card()
709 dev->rpos = in monitor_card()
710 dev->atr_csum = dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
711 dev->mstate = M_FETCH_ATR; in monitor_card()
713 dev->flags &= 0x000000ff; /* only keep IO and MONITOR locks */ in monitor_card()
715 if (dev->flags0 == 0xff) { in monitor_card()
716 DEBUGP(4, dev, "set IS_CMM_ABSENT bit\n"); in monitor_card()
717 set_bit(IS_CMM_ABSENT, &dev->flags); in monitor_card()
718 } else if (test_bit(IS_CMM_ABSENT, &dev->flags)) { in monitor_card()
719 DEBUGP(4, dev, "clear IS_CMM_ABSENT bit " in monitor_card()
721 clear_bit(IS_CMM_ABSENT, &dev->flags); in monitor_card()
725 } else if ((dev->flags0 & 1) && test_bit(IS_CMM_ABSENT, &dev->flags)) { in monitor_card()
728 DEBUGP(4, dev, "clear IS_CMM_ABSENT bit (card is inserted)\n"); in monitor_card()
729 clear_bit(IS_CMM_ABSENT, &dev->flags); in monitor_card()
732 if (test_bit(IS_ATR_VALID, &dev->flags) == 1) { in monitor_card()
733 DEBUGP(7, dev, "believe ATR is already valid (do nothing)\n"); in monitor_card()
737 switch (dev->mstate) { in monitor_card()
741 DEBUGP(4, dev, "M_CARDOFF\n"); in monitor_card()
745 dev->mdelay = T_10MSEC; in monitor_card()
753 dev->rlen = in monitor_card()
754 dev->rpos = in monitor_card()
755 dev->atr_csum = in monitor_card()
756 dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
757 dev->mstate = M_FETCH_ATR; in monitor_card()
760 dev->mdelay = T_50MSEC; in monitor_card()
765 DEBUGP(4, dev, "M_FETCH_ATR\n"); in monitor_card()
767 DEBUGP(4, dev, "Reset BAUDV to 9600\n"); in monitor_card()
768 dev->baudv = 0x173; /* 9600 */ in monitor_card()
774 xoutb(dev->flags0 & 2 ? 0x46 : 0x44, REG_FLAGS0(iobase)); in monitor_card()
775 dev->mdelay = T_40MSEC; in monitor_card()
776 dev->mstate = M_TIMEOUT_WAIT; in monitor_card()
779 DEBUGP(4, dev, "M_TIMEOUT_WAIT\n"); in monitor_card()
781 io_read_num_rec_bytes(iobase, &dev->atr_len); in monitor_card()
782 dev->mdelay = T_10MSEC; in monitor_card()
783 dev->mstate = M_READ_ATR_LEN; in monitor_card()
786 DEBUGP(4, dev, "M_READ_ATR_LEN\n"); in monitor_card()
791 if (dev->atr_len == io_read_num_rec_bytes(iobase, &s)) { in monitor_card()
792 if (dev->atr_len_retry++ >= MAX_ATR_LEN_RETRY) { /* + XX msec */ in monitor_card()
793 dev->mdelay = T_10MSEC; in monitor_card()
794 dev->mstate = M_READ_ATR; in monitor_card()
797 dev->atr_len = s; in monitor_card()
798 dev->atr_len_retry = 0; /* set new timeout */ in monitor_card()
801 DEBUGP(4, dev, "Current ATR_LEN = %i\n", dev->atr_len); in monitor_card()
804 DEBUGP(4, dev, "M_READ_ATR\n"); in monitor_card()
806 for (i = 0; i < dev->atr_len; i++) { in monitor_card()
808 dev->atr[i] = inb(REG_BUF_DATA(iobase)); in monitor_card()
811 DEBUGP(4, dev, "Deactivate T_Active flags\n"); in monitor_card()
812 dev->flags1 = 0x01; in monitor_card()
813 xoutb(dev->flags1, REG_FLAGS1(iobase)); in monitor_card()
816 set_bit(IS_ATR_PRESENT, &dev->flags); in monitor_card()
817 if (dev->atr[0] == 0x03) in monitor_card()
818 str_invert_revert(dev->atr, dev->atr_len); in monitor_card()
819 atrc = parse_atr(dev); in monitor_card()
821 dev->mdelay = 0; in monitor_card()
822 dev->mstate = M_BAD_CARD; in monitor_card()
824 dev->mdelay = T_50MSEC; in monitor_card()
825 dev->mstate = M_ATR_PRESENT; in monitor_card()
826 set_bit(IS_ATR_VALID, &dev->flags); in monitor_card()
829 if (test_bit(IS_ATR_VALID, &dev->flags) == 1) { in monitor_card()
830 DEBUGP(4, dev, "monitor_card: ATR valid\n"); in monitor_card()
833 if ((test_bit(IS_AUTOPPS_ACT, &dev->flags) == 0) && in monitor_card()
834 (dev->ta1 != 0x11) && in monitor_card()
835 !(test_bit(IS_ANY_T0, &dev->flags) && in monitor_card()
836 test_bit(IS_ANY_T1, &dev->flags))) { in monitor_card()
837 DEBUGP(4, dev, "Perform AUTOPPS\n"); in monitor_card()
838 set_bit(IS_AUTOPPS_ACT, &dev->flags); in monitor_card()
839 ptsreq.protocol = (0x01 << dev->proto); in monitor_card()
844 if (set_protocol(dev, &ptsreq) == 0) { in monitor_card()
845 DEBUGP(4, dev, "AUTOPPS ret SUCC\n"); in monitor_card()
846 clear_bit(IS_AUTOPPS_ACT, &dev->flags); in monitor_card()
847 wake_up_interruptible(&dev->atrq); in monitor_card()
849 DEBUGP(4, dev, "AUTOPPS failed: " in monitor_card()
852 clear_bit(IS_ATR_PRESENT, &dev->flags); in monitor_card()
853 clear_bit(IS_ATR_VALID, &dev->flags); in monitor_card()
854 dev->rlen = in monitor_card()
855 dev->rpos = in monitor_card()
856 dev->atr_csum = in monitor_card()
857 dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
858 dev->mstate = M_FETCH_ATR; in monitor_card()
860 dev->mdelay = T_50MSEC; in monitor_card()
865 set_cardparameter(dev); in monitor_card()
866 if (test_bit(IS_AUTOPPS_ACT, &dev->flags) == 1) in monitor_card()
867 DEBUGP(4, dev, "AUTOPPS already active " in monitor_card()
869 if (dev->ta1 == 0x11) in monitor_card()
870 DEBUGP(4, dev, "No AUTOPPS necessary " in monitor_card()
872 if (test_bit(IS_ANY_T0, &dev->flags) in monitor_card()
873 && test_bit(IS_ANY_T1, &dev->flags)) in monitor_card()
874 DEBUGP(4, dev, "Do NOT perform AUTOPPS " in monitor_card()
876 clear_bit(IS_AUTOPPS_ACT, &dev->flags); in monitor_card()
877 wake_up_interruptible(&dev->atrq); in monitor_card()
880 DEBUGP(4, dev, "ATR invalid\n"); in monitor_card()
881 wake_up_interruptible(&dev->atrq); in monitor_card()
885 DEBUGP(4, dev, "M_BAD_CARD\n"); in monitor_card()
887 if (dev->cwarn == 0 || dev->cwarn == 10) { in monitor_card()
888 set_bit(IS_BAD_CARD, &dev->flags); in monitor_card()
889 dev_warn(&dev->p_dev->dev, MODULE_NAME ": "); in monitor_card()
890 if (test_bit(IS_BAD_CSUM, &dev->flags)) { in monitor_card()
891 DEBUGP(4, dev, "ATR checksum (0x%.2x, should " in monitor_card()
892 "be zero) failed\n", dev->atr_csum); in monitor_card()
895 else if (test_bit(IS_BAD_LENGTH, &dev->flags)) { in monitor_card()
896 DEBUGP(4, dev, "ATR length error\n"); in monitor_card()
898 DEBUGP(4, dev, "card damaged or wrong way " in monitor_card()
902 dev->cwarn = 0; in monitor_card()
903 wake_up_interruptible(&dev->atrq); /* wake open */ in monitor_card()
905 dev->cwarn++; in monitor_card()
906 dev->mdelay = T_100MSEC; in monitor_card()
907 dev->mstate = M_FETCH_ATR; in monitor_card()
910 DEBUGP(7, dev, "Unknown action\n"); in monitor_card()
915 DEBUGP(7, dev, "release_io\n"); in monitor_card()
916 clear_bit(LOCK_IO, &dev->flags); in monitor_card()
917 wake_up_interruptible(&dev->ioq); /* whoever needs IO */ in monitor_card()
920 DEBUGP(7, dev, "<- monitor_card (returns with timer)\n"); in monitor_card()
921 mod_timer(&dev->timer, jiffies + dev->mdelay); in monitor_card()
922 clear_bit(LOCK_MONITOR, &dev->flags); in monitor_card()
930 struct cm4000_dev *dev = filp->private_data; in cmm_read() local
931 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_read()
935 DEBUGP(2, dev, "-> cmm_read(%s,%d)\n", current->comm, current->pid); in cmm_read()
940 if (!pcmcia_dev_present(dev->p_dev) || /* device removed */ in cmm_read()
941 test_bit(IS_CMM_ABSENT, &dev->flags)) in cmm_read()
944 if (test_bit(IS_BAD_CSUM, &dev->flags)) in cmm_read()
949 (dev->atrq, in cmm_read()
951 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) != 0)))) { in cmm_read()
957 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) in cmm_read()
962 (dev->readq, in cmm_read()
963 ((filp->f_flags & O_NONBLOCK) || (dev->rpos < dev->rlen)))) { in cmm_read()
971 (dev->ioq, in cmm_read()
973 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) { in cmm_read()
980 dev->flags0 = inb(REG_FLAGS0(iobase)); in cmm_read()
981 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in cmm_read()
982 || dev->flags0 == 0xff) { /* no cardman inserted */ in cmm_read()
983 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_read()
984 if (dev->flags0 & 1) { in cmm_read()
985 set_bit(IS_CMM_ABSENT, &dev->flags); in cmm_read()
993 DEBUGP(4, dev, "begin read answer\n"); in cmm_read()
994 j = min(count, (size_t)(dev->rlen - dev->rpos)); in cmm_read()
995 k = dev->rpos; in cmm_read()
998 DEBUGP(4, dev, "read1 j=%d\n", j); in cmm_read()
1001 dev->rbuf[i] = xinb(REG_BUF_DATA(iobase)); in cmm_read()
1003 j = min(count, (size_t)(dev->rlen - dev->rpos)); in cmm_read()
1005 DEBUGP(4, dev, "read2 j=%d\n", j); in cmm_read()
1006 dev->flags1 |= 0x10; /* MSB buf addr set */ in cmm_read()
1007 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_read()
1010 dev->rbuf[i] = xinb(REG_BUF_DATA(iobase)); in cmm_read()
1014 if (dev->proto == 0 && count > dev->rlen - dev->rpos && i) { in cmm_read()
1015 DEBUGP(4, dev, "T=0 and count > buffer\n"); in cmm_read()
1016 dev->rbuf[i] = dev->rbuf[i - 1]; in cmm_read()
1017 dev->rbuf[i - 1] = dev->procbyte; in cmm_read()
1022 dev->rpos = dev->rlen + 1; in cmm_read()
1025 DEBUGP(4, dev, "Clear T1Active\n"); in cmm_read()
1026 dev->flags1 &= 0xdf; in cmm_read()
1027 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_read()
1031 if (!io_detect_cm4000(iobase, dev)) { in cmm_read()
1036 if (test_bit(IS_INVREV, &dev->flags) && count > 0) in cmm_read()
1037 str_invert_revert(dev->rbuf, count); in cmm_read()
1039 if (copy_to_user(buf, dev->rbuf, count)) in cmm_read()
1043 clear_bit(LOCK_IO, &dev->flags); in cmm_read()
1044 wake_up_interruptible(&dev->ioq); in cmm_read()
1046 DEBUGP(2, dev, "<- cmm_read returns: rc = %zi\n", in cmm_read()
1054 struct cm4000_dev *dev = filp->private_data; in cmm_write() local
1055 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_write()
1064 DEBUGP(2, dev, "-> cmm_write(%s,%d)\n", current->comm, current->pid); in cmm_write()
1069 if (dev->proto == 0 && count < 4) { in cmm_write()
1071 DEBUGP(4, dev, "T0 short write\n"); in cmm_write()
1077 sendT0 = dev->proto ? 0 : nr > 5 ? 0x08 : 0; in cmm_write()
1079 if (!pcmcia_dev_present(dev->p_dev) || /* device removed */ in cmm_write()
1080 test_bit(IS_CMM_ABSENT, &dev->flags)) in cmm_write()
1083 if (test_bit(IS_BAD_CSUM, &dev->flags)) { in cmm_write()
1084 DEBUGP(4, dev, "bad csum\n"); in cmm_write()
1100 (dev->atrq, in cmm_write()
1102 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) != 0)))) { in cmm_write()
1108 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) { /* invalid atr */ in cmm_write()
1109 DEBUGP(4, dev, "invalid ATR\n"); in cmm_write()
1115 (dev->ioq, in cmm_write()
1117 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) { in cmm_write()
1123 if (copy_from_user(dev->sbuf, buf, ((count > 512) ? 512 : count))) in cmm_write()
1127 dev->flags0 = inb(REG_FLAGS0(iobase)); in cmm_write()
1128 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in cmm_write()
1129 || dev->flags0 == 0xff) { /* no cardman inserted */ in cmm_write()
1130 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_write()
1131 if (dev->flags0 & 1) { in cmm_write()
1132 set_bit(IS_CMM_ABSENT, &dev->flags); in cmm_write()
1135 DEBUGP(4, dev, "IO error\n"); in cmm_write()
1143 if (!io_detect_cm4000(iobase, dev)) { in cmm_write()
1149 dev->flags1 |= (sendT0); in cmm_write()
1151 set_cardparameter(dev); in cmm_write()
1156 dev->flags1 = 0x20 /* T_Active */ in cmm_write()
1158 | (test_bit(IS_INVREV, &dev->flags) ? 2 : 0)/* inverse parity */ in cmm_write()
1159 | (((dev->baudv - 1) & 0x0100) >> 8); /* MSB-Baud */ in cmm_write()
1160 DEBUGP(1, dev, "set dev->flags1 = 0x%.2x\n", dev->flags1); in cmm_write()
1161 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_write()
1164 DEBUGP(4, dev, "Xmit data\n"); in cmm_write()
1167 dev->flags1 = 0x20 /* T_Active */ in cmm_write()
1170 | (test_bit(IS_INVREV, &dev->flags) ? 2 : 0) in cmm_write()
1171 | (((dev->baudv - 1) & 0x0100) >> 8) /* MSB-Baud */ in cmm_write()
1173 DEBUGP(4, dev, "dev->flags = 0x%.2x - set address " in cmm_write()
1174 "high\n", dev->flags1); in cmm_write()
1175 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_write()
1177 if (test_bit(IS_INVREV, &dev->flags)) { in cmm_write()
1178 DEBUGP(4, dev, "Apply inverse convention for 0x%.2x " in cmm_write()
1179 "-> 0x%.2x\n", (unsigned char)dev->sbuf[i], in cmm_write()
1180 invert_revert(dev->sbuf[i])); in cmm_write()
1182 xoutb(invert_revert(dev->sbuf[i]), in cmm_write()
1186 xoutb(dev->sbuf[i], REG_BUF_DATA(iobase)); in cmm_write()
1189 DEBUGP(4, dev, "Xmit done\n"); in cmm_write()
1191 if (dev->proto == 0) { in cmm_write()
1194 DEBUGP(4, dev, "T=0 assumes 0 byte reply\n"); in cmm_write()
1196 if (test_bit(IS_INVREV, &dev->flags)) in cmm_write()
1209 nsend = 5 + (unsigned char)dev->sbuf[4]; in cmm_write()
1210 if (dev->sbuf[4] == 0) in cmm_write()
1218 if (test_bit(IS_INVREV, &dev->flags)) { in cmm_write()
1219 DEBUGP(4, dev, "T=0 set Procedure byte (inverse-reverse) " in cmm_write()
1220 "0x%.2x\n", invert_revert(dev->sbuf[1])); in cmm_write()
1221 xoutb(invert_revert(dev->sbuf[1]), REG_NUM_BYTES(iobase)); in cmm_write()
1223 DEBUGP(4, dev, "T=0 set Procedure byte 0x%.2x\n", dev->sbuf[1]); in cmm_write()
1224 xoutb(dev->sbuf[1], REG_NUM_BYTES(iobase)); in cmm_write()
1227 DEBUGP(1, dev, "set NumSendBytes = 0x%.2x\n", in cmm_write()
1231 DEBUGP(1, dev, "Trigger CARDMAN CONTROLLER (0x%.2x)\n", in cmm_write()
1233 | (dev->flags0 & 2 ? 0 : 4) /* power on if needed */ in cmm_write()
1234 |(dev->proto ? 0x10 : 0x08) /* T=1/T=0 */ in cmm_write()
1237 | (dev->flags0 & 2 ? 0 : 4) /* power on if needed */ in cmm_write()
1238 |(dev->proto ? 0x10 : 0x08) /* T=1/T=0 */ in cmm_write()
1243 if (dev->proto == 1) { in cmm_write()
1244 DEBUGP(4, dev, "Wait for xmit done\n"); in cmm_write()
1251 DEBUGP(4, dev, "timeout waiting for xmit done\n"); in cmm_write()
1260 if (dev->proto) { in cmm_write()
1266 DEBUGP(4, dev, "infolen=%d\n", infolen); in cmm_write()
1272 DEBUGP(4, dev, "timeout waiting for infoLen\n"); in cmm_write()
1277 clear_bit(IS_PROCBYTE_PRESENT, &dev->flags); in cmm_write()
1280 io_read_num_rec_bytes(iobase, &dev->rlen); in cmm_write()
1282 if (dev->proto) { in cmm_write()
1283 if (dev->rlen >= infolen + 4) in cmm_write()
1289 if (s > dev->rlen) { in cmm_write()
1290 DEBUGP(1, dev, "NumRecBytes inc (reset timeout)\n"); in cmm_write()
1292 dev->rlen = s; in cmm_write()
1301 else if (dev->proto == 0) { in cmm_write()
1304 DEBUGP(1, dev, "NoProcedure byte set\n"); in cmm_write()
1308 DEBUGP(1, dev, "NoProcedure byte unset " in cmm_write()
1310 dev->procbyte = inb(REG_FLAGS1(iobase)); in cmm_write()
1311 DEBUGP(1, dev, "Read procedure byte 0x%.2x\n", in cmm_write()
1312 dev->procbyte); in cmm_write()
1316 DEBUGP(1, dev, "T0Done flag (read reply)\n"); in cmm_write()
1320 if (dev->proto) in cmm_write()
1324 DEBUGP(1, dev, "timeout waiting for numRecBytes\n"); in cmm_write()
1328 if (dev->proto == 0) { in cmm_write()
1329 DEBUGP(1, dev, "Wait for T0Done bit to be set\n"); in cmm_write()
1336 DEBUGP(1, dev, "timeout waiting for T0Done\n"); in cmm_write()
1341 dev->procbyte = inb(REG_FLAGS1(iobase)); in cmm_write()
1342 DEBUGP(4, dev, "Read procedure byte 0x%.2x\n", in cmm_write()
1343 dev->procbyte); in cmm_write()
1345 io_read_num_rec_bytes(iobase, &dev->rlen); in cmm_write()
1346 DEBUGP(4, dev, "Read NumRecBytes = %i\n", dev->rlen); in cmm_write()
1351 dev->rpos = dev->proto ? 0 : nr == 4 ? 5 : nr > dev->rlen ? 5 : nr; in cmm_write()
1352 DEBUGP(4, dev, "dev->rlen = %i, dev->rpos = %i, nr = %i\n", in cmm_write()
1353 dev->rlen, dev->rpos, nr); in cmm_write()
1356 DEBUGP(4, dev, "Reset SM\n"); in cmm_write()
1360 DEBUGP(4, dev, "Write failed but clear T_Active\n"); in cmm_write()
1361 dev->flags1 &= 0xdf; in cmm_write()
1362 xoutb(dev->flags1, REG_FLAGS1(iobase)); in cmm_write()
1365 clear_bit(LOCK_IO, &dev->flags); in cmm_write()
1366 wake_up_interruptible(&dev->ioq); in cmm_write()
1367 wake_up_interruptible(&dev->readq); /* tell read we have data */ in cmm_write()
1370 memset((char *)dev->sbuf, 0, 512); in cmm_write()
1373 DEBUGP(2, dev, "<- cmm_write\n"); in cmm_write()
1377 static void start_monitor(struct cm4000_dev *dev) in start_monitor() argument
1379 DEBUGP(3, dev, "-> start_monitor\n"); in start_monitor()
1380 if (!dev->monitor_running) { in start_monitor()
1381 DEBUGP(5, dev, "create, init and add timer\n"); in start_monitor()
1382 timer_setup(&dev->timer, monitor_card, 0); in start_monitor()
1383 dev->monitor_running = 1; in start_monitor()
1384 mod_timer(&dev->timer, jiffies); in start_monitor()
1386 DEBUGP(5, dev, "monitor already running\n"); in start_monitor()
1387 DEBUGP(3, dev, "<- start_monitor\n"); in start_monitor()
1390 static void stop_monitor(struct cm4000_dev *dev) in stop_monitor() argument
1392 DEBUGP(3, dev, "-> stop_monitor\n"); in stop_monitor()
1393 if (dev->monitor_running) { in stop_monitor()
1394 DEBUGP(5, dev, "stopping monitor\n"); in stop_monitor()
1395 terminate_monitor(dev); in stop_monitor()
1397 clear_bit(IS_ATR_VALID, &dev->flags); in stop_monitor()
1398 clear_bit(IS_ATR_PRESENT, &dev->flags); in stop_monitor()
1400 DEBUGP(5, dev, "monitor already stopped\n"); in stop_monitor()
1401 DEBUGP(3, dev, "<- stop_monitor\n"); in stop_monitor()
1406 struct cm4000_dev *dev = filp->private_data; in cmm_ioctl() local
1407 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_ioctl()
1420 DEBUGP(3, dev, "cmm_ioctl(device=%d.%d) %s\n", imajor(inode), in cmm_ioctl()
1428 DEBUGP(4, dev, "DEV_OK false\n"); in cmm_ioctl()
1432 if (test_bit(IS_CMM_ABSENT, &dev->flags)) { in cmm_ioctl()
1433 DEBUGP(4, dev, "CMM_ABSENT flag set\n"); in cmm_ioctl()
1439 DEBUGP(4, dev, "ioctype mismatch\n"); in cmm_ioctl()
1443 DEBUGP(4, dev, "iocnr mismatch\n"); in cmm_ioctl()
1450 DEBUGP(4, dev, " ... in CM_IOCGSTATUS\n"); in cmm_ioctl()
1456 status = dev->flags0 & 3; in cmm_ioctl()
1457 if (test_bit(IS_ATR_PRESENT, &dev->flags)) in cmm_ioctl()
1459 if (test_bit(IS_ATR_VALID, &dev->flags)) in cmm_ioctl()
1461 if (test_bit(IS_CMM_ABSENT, &dev->flags)) in cmm_ioctl()
1463 if (test_bit(IS_BAD_CARD, &dev->flags)) in cmm_ioctl()
1470 DEBUGP(4, dev, "... in CM_IOCGATR\n"); in cmm_ioctl()
1476 (dev->atrq, in cmm_ioctl()
1478 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) in cmm_ioctl()
1488 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) { in cmm_ioctl()
1494 if (copy_to_user(atreq->atr, dev->atr, in cmm_ioctl()
1495 dev->atr_len)) in cmm_ioctl()
1498 tmp = dev->atr_len; in cmm_ioctl()
1508 DEBUGP(4, dev, "... in CM_IOCARDOFF\n"); in cmm_ioctl()
1509 if (dev->flags0 & 0x01) { in cmm_ioctl()
1510 DEBUGP(4, dev, " Card inserted\n"); in cmm_ioctl()
1512 DEBUGP(2, dev, " No card inserted\n"); in cmm_ioctl()
1514 if (dev->flags0 & 0x02) { in cmm_ioctl()
1515 DEBUGP(4, dev, " Card powered\n"); in cmm_ioctl()
1517 DEBUGP(2, dev, " Card not powered\n"); in cmm_ioctl()
1522 if ((dev->flags0 & 0x01) && (dev->flags0 & 0x02)) { in cmm_ioctl()
1526 (dev->ioq, in cmm_ioctl()
1528 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) in cmm_ioctl()
1537 DEBUGP(4, dev, "Set Flags0=0x42 \n"); in cmm_ioctl()
1539 clear_bit(IS_ATR_PRESENT, &dev->flags); in cmm_ioctl()
1540 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_ioctl()
1541 dev->mstate = M_CARDOFF; in cmm_ioctl()
1542 clear_bit(LOCK_IO, &dev->flags); in cmm_ioctl()
1544 (dev->atrq, in cmm_ioctl()
1546 || (test_bit(IS_ATR_VALID, (void *)&dev->flags) != in cmm_ioctl()
1556 clear_bit(LOCK_IO, &dev->flags); in cmm_ioctl()
1557 wake_up_interruptible(&dev->ioq); in cmm_ioctl()
1572 DEBUGP(4, dev, "... in CM_IOCSPTS\n"); in cmm_ioctl()
1575 (dev->atrq, in cmm_ioctl()
1577 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) in cmm_ioctl()
1587 (dev->ioq, in cmm_ioctl()
1589 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) in cmm_ioctl()
1598 if ((rc = set_protocol(dev, &krnptsreq)) != 0) { in cmm_ioctl()
1600 dev->mstate = M_FETCH_ATR; in cmm_ioctl()
1601 clear_bit(IS_ATR_VALID, &dev->flags); in cmm_ioctl()
1604 clear_bit(LOCK_IO, &dev->flags); in cmm_ioctl()
1605 wake_up_interruptible(&dev->ioq); in cmm_ioctl()
1615 DEBUGP(4, dev, "... in default (unknown IOCTL code)\n"); in cmm_ioctl()
1625 struct cm4000_dev *dev; in cmm_open() local
1645 dev = link->priv; in cmm_open()
1646 filp->private_data = dev; in cmm_open()
1648 DEBUGP(2, dev, "-> cmm_open(device=%d.%d process=%s,%d)\n", in cmm_open()
1655 ZERO_DEV(dev); in cmm_open()
1668 dev->mdelay = T_50MSEC; in cmm_open()
1671 start_monitor(dev); in cmm_open()
1675 DEBUGP(2, dev, "<- cmm_open\n"); in cmm_open()
1684 struct cm4000_dev *dev; in cmm_close() local
1695 dev = link->priv; in cmm_close()
1697 DEBUGP(2, dev, "-> cmm_close(maj/min=%d.%d)\n", in cmm_close()
1700 stop_monitor(dev); in cmm_close()
1702 ZERO_DEV(dev); in cmm_close()
1705 wake_up(&dev->devq); /* socket removed? */ in cmm_close()
1707 DEBUGP(2, dev, "cmm_close\n"); in cmm_close()
1713 struct cm4000_dev *dev = link->priv; in cmm_cm4000_release() local
1718 DEBUGP(3, dev, "-> cmm_cm4000_release\n"); in cmm_cm4000_release()
1726 wait_event(dev->devq, (link->open == 0)); in cmm_cm4000_release()
1729 DEBUGP(3, dev, "<- cmm_cm4000_release\n"); in cmm_cm4000_release()
1760 struct cm4000_dev *dev; in cm4000_suspend() local
1762 dev = link->priv; in cm4000_suspend()
1763 stop_monitor(dev); in cm4000_suspend()
1770 struct cm4000_dev *dev; in cm4000_resume() local
1772 dev = link->priv; in cm4000_resume()
1774 start_monitor(dev); in cm4000_resume()
1787 struct cm4000_dev *dev; in cm4000_probe() local
1800 dev = kzalloc(sizeof(struct cm4000_dev), GFP_KERNEL); in cm4000_probe()
1801 if (dev == NULL) in cm4000_probe()
1804 dev->p_dev = link; in cm4000_probe()
1805 link->priv = dev; in cm4000_probe()
1808 init_waitqueue_head(&dev->devq); in cm4000_probe()
1809 init_waitqueue_head(&dev->ioq); in cm4000_probe()
1810 init_waitqueue_head(&dev->atrq); in cm4000_probe()
1811 init_waitqueue_head(&dev->readq); in cm4000_probe()
1816 kfree(dev); in cm4000_probe()
1827 struct cm4000_dev *dev = link->priv; in cm4000_detach() local
1837 stop_monitor(dev); in cm4000_detach()
1842 kfree(dev); in cm4000_detach()