Lines Matching +full:0 +full:x11
12 * current version: 2.4.0gm4
55 } while (0)
71 /* note: the first state has to have number 0 always */
73 #define M_FETCH_ATR 0
81 #define LOCK_IO 0
96 #define REG_FLAGS0(x) (x + 0)
126 unsigned char procbyte; /* T=0 procedure byte */
129 unsigned char flags0; /* cardman IO-flags 0 */
135 unsigned char proto; /* T=0, T=1, ... */
146 memset(&dev->atr_csum,0, \
159 /* 0 */ {0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11},
160 /* 1 */ {0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x91,0x11,0x11,0x11,0x11},
161 /* 2 */ {0x02,0x12,0x22,0x32,0x11,0x11,0x11,0x11,0x11,0x92,0xA2,0xB2,0x11,0x11},
162 /* 3 */ {0x03,0x13,0x23,0x33,0x43,0x53,0x63,0x11,0x11,0x93,0xA3,0xB3,0xC3,0xD3},
163 /* 4 */ {0x04,0x14,0x24,0x34,0x44,0x54,0x64,0x11,0x11,0x94,0xA4,0xB4,0xC4,0xD4},
164 /* 5 */ {0x00,0x15,0x25,0x35,0x45,0x55,0x65,0x11,0x11,0x95,0xA5,0xB5,0xC5,0xD5},
165 /* 6 */ {0x06,0x16,0x26,0x36,0x46,0x56,0x66,0x11,0x11,0x96,0xA6,0xB6,0xC6,0xD6},
166 /* 7 */ {0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11},
167 /* 8 */ {0x08,0x11,0x28,0x38,0x48,0x58,0x68,0x11,0x11,0x98,0xA8,0xB8,0xC8,0xD8},
168 /* 9 */ {0x09,0x19,0x29,0x39,0x49,0x59,0x69,0x11,0x11,0x99,0xA9,0xB9,0xC9,0xD9}
200 for (i = 0; i < len; i++) in str_invert_revert()
216 switch ((fidi >> 4) & 0x0F) { in calc_baudv()
217 case 0x00: in calc_baudv()
220 case 0x01: in calc_baudv()
223 case 0x02: in calc_baudv()
226 case 0x03: in calc_baudv()
229 case 0x04: in calc_baudv()
232 case 0x05: in calc_baudv()
235 case 0x06: in calc_baudv()
238 case 0x07: in calc_baudv()
241 case 0x08: in calc_baudv()
244 case 0x09: in calc_baudv()
247 case 0x0A: in calc_baudv()
250 case 0x0B: in calc_baudv()
253 case 0x0C: in calc_baudv()
256 case 0x0D: in calc_baudv()
265 switch (fidi & 0x0F) { in calc_baudv()
266 case 0x00: in calc_baudv()
269 case 0x01: in calc_baudv()
272 case 0x02: in calc_baudv()
275 case 0x03: in calc_baudv()
278 case 0x04: in calc_baudv()
281 case 0x05: in calc_baudv()
284 case 0x06: in calc_baudv()
287 case 0x07: in calc_baudv()
290 case 0x08: in calc_baudv()
293 case 0x09: in calc_baudv()
309 tmp = *s = 0; in io_read_num_rec_bytes()
313 (inb(REG_FLAGS0(iobase)) & 4 ? 0x100 : 0); in io_read_num_rec_bytes()
329 return 0; in parse_atr()
332 if (dev->atr[0] == 0x3f) in parse_atr()
339 dev->proto = 0; /* XXX PROTO */ in parse_atr()
340 any_t1 = any_t0 = done = 0; in parse_atr()
341 dev->ta1 = 0x11; /* defaults to 9600 baud */ in parse_atr()
343 if (ifno == 1 && (ch & 0x10)) { in parse_atr()
346 DEBUGP(5, dev, "Card says FiDi is 0x%.2x\n", dev->ta1); in parse_atr()
348 } else if ((ifno == 2) && (ch & 0x10)) { /* TA(2) */ in parse_atr()
349 dev->ta1 = 0x11; in parse_atr()
353 DEBUGP(5, dev, "Yi=%.2x\n", ch & 0xf0); in parse_atr()
354 ix += ((ch & 0x10) >> 4) /* no of int.face chars */ in parse_atr()
355 +((ch & 0x20) >> 5) in parse_atr()
356 + ((ch & 0x40) >> 6) in parse_atr()
357 + ((ch & 0x80) >> 7); in parse_atr()
359 if (ch & 0x80) { /* TDi */ in parse_atr()
361 if ((ch & 0x0f)) { in parse_atr()
366 DEBUGP(5, dev, "card is capable of T=0\n"); in parse_atr()
374 if (ix + 1 + (dev->atr[1] & 0x0f) + any_t1 != dev->atr_len) { in parse_atr()
376 return 0; in parse_atr()
382 dev->atr_csum = 0; in parse_atr()
392 if (any_t0 == 0) in parse_atr()
408 .atr = { 0x3b, 0xb3, 0x11, 0x00, 0x00, 0x41, 0x01 },
410 .stopbits = 0x03,
413 .atr = {0x3b, 0x76, 0x13, 0x00, 0x00, 0x80, 0x62, 0x07,
414 0x41, 0x81, 0x81 },
416 .stopbits = 0x04,
423 unsigned int iobase = dev->p_dev->resource[0]->start; in set_cardparameter()
424 u_int8_t stopbits = 0x02; /* ISO default */ in set_cardparameter()
428 dev->flags1 = dev->flags1 | (((dev->baudv - 1) & 0x0100) >> 8); 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()
439 for (i = 0; i < ARRAY_SIZE(card_fixups); i++) { in set_cardparameter()
456 unsigned int iobase = dev->p_dev->resource[0]->start; in set_protocol()
458 rc = 0; in set_protocol()
461 DEBUGP(5, dev, "ptsreq->Protocol = 0x%.8x, ptsreq->Flags=0x%.8x, " in set_protocol()
462 "ptsreq->pts1=0x%.2x, ptsreq->pts2=0x%.2x, " in set_protocol()
463 "ptsreq->pts3=0x%.2x\n", (unsigned int)ptsreq->protocol, in set_protocol()
468 dev->pts[0] = 0xff; in set_protocol()
469 dev->pts[1] = 0x00; in set_protocol()
471 while ((tmp = (tmp >> 1)) > 0) 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()
485 dev->pts[0], dev->pts[1], dev->pts[2], dev->pts[3]); in set_protocol()
492 xoutb(0x80, REG_FLAGS0(iobase)); 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()
501 DEBUGP(5, dev, "Enable message buffer -> flags1 = 0x%.2x\n", in set_protocol()
506 for (i = 0; i < 4; i++) { in set_protocol()
510 pr_debug("0x%.2x ", dev->pts[i]); in set_protocol()
519 xoutb(0x04, REG_NUM_SEND(iobase));
522 xoutb(0x50, REG_FLAGS0(iobase));
528 for (i = 0; i < 100; i++) {
529 if (inb(REG_FLAGS0(iobase)) & 0x08) {
543 for (i = 0; i < 100; i++) {
554 i = 0;
563 xoutb(0x80, REG_FLAGS0(iobase));
567 for (i = 0; i < num_bytes_read; i++) {
574 for (i = 0; i < num_bytes_read; i++) {
575 pr_debug("0x%.2x ", pts_reply[i]);
581 xoutb(0x20, REG_FLAGS1(iobase));
584 if ((dev->pts[0] == pts_reply[0]) &&
590 } else if ((dev->pts[0] == pts_reply[0]) &&
591 ((dev->pts[1] & 0xef) == pts_reply[1]) &&
592 ((pts_reply[0] ^ pts_reply[1]) == pts_reply[2])) {
594 dev->baudv = calc_baudv(0x11);
611 return 0; /* detect CMM = 1 -> failure */ in io_detect_cm4000()
613 /* xoutb(0x40, REG_FLAGS1(iobase)); detectCMM */ in io_detect_cm4000()
614 xoutb(dev->flags1 | 0x40, REG_FLAGS1(iobase)); in io_detect_cm4000()
615 if ((inb(REG_FLAGS0(iobase)) & 8) == 0) { in io_detect_cm4000()
618 return 0; /* detect CMM=0 -> failure */ in io_detect_cm4000()
648 dev->monitor_running = 0; in terminate_monitor()
665 unsigned int iobase = dev->p_dev->resource[0]->start; in monitor_card()
678 dev->atr_csum = dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
695 DEBUGP(7, dev, "dev->flags0 = 0x%2x\n", dev->flags0); 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()
706 dev->atr_csum = dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
709 dev->flags &= 0x000000ff; /* only keep IO and MONITOR locks */ in monitor_card()
711 if (dev->flags0 == 0xff) { in monitor_card()
739 if (flags0 & 0x02) { in monitor_card()
745 xoutb(0x80, REG_FLAGS0(iobase)); in monitor_card()
752 dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
762 xoutb(0x80, REG_FLAGS0(iobase)); in monitor_card()
764 dev->baudv = 0x173; /* 9600 */ in monitor_card()
765 xoutb(0x02, REG_STOPBITS(iobase)); /* stopbits=2 */ in monitor_card()
766 xoutb(0x73, REG_BAUDRATE(iobase)); /* baud value */ in monitor_card()
767 xoutb(0x21, REG_FLAGS1(iobase)); /* T_Active=1, baud in monitor_card()
770 xoutb(dev->flags0 & 2 ? 0x46 : 0x44, REG_FLAGS0(iobase)); in monitor_card()
794 dev->atr_len_retry = 0; /* set new timeout */ in monitor_card()
801 xoutb(0x80, REG_FLAGS0(iobase)); /* reset SM */ in monitor_card()
802 for (i = 0; i < dev->atr_len; i++) { in monitor_card()
808 dev->flags1 = 0x01; in monitor_card()
813 if (dev->atr[0] == 0x03) in monitor_card()
816 if (atrc == 0) { /* atr invalid */ in monitor_card()
817 dev->mdelay = 0; in monitor_card()
827 /* if ta1 == 0x11, no PPS necessary (default values) */ in monitor_card()
829 if ((test_bit(IS_AUTOPPS_ACT, &dev->flags) == 0) && in monitor_card()
830 (dev->ta1 != 0x11) && in monitor_card()
835 ptsreq.protocol = (0x01 << dev->proto); in monitor_card()
836 ptsreq.flags = 0x01; in monitor_card()
837 ptsreq.pts1 = 0x00; in monitor_card()
838 ptsreq.pts2 = 0x00; in monitor_card()
839 ptsreq.pts3 = 0x00; in monitor_card()
840 if (set_protocol(dev, &ptsreq) == 0) { in monitor_card()
853 dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
865 if (dev->ta1 == 0x11) in monitor_card()
867 "TA(1)==0x11\n"); in monitor_card()
883 if (dev->cwarn == 0 || dev->cwarn == 10) { in monitor_card()
887 DEBUGP(4, dev, "ATR checksum (0x%.2x, should " in monitor_card()
898 dev->cwarn = 0; in monitor_card()
927 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_read()
933 if (count == 0) /* according to manpage */ in cmm_read()
934 return 0; in cmm_read()
947 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) != 0)))) { in cmm_read()
953 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) in cmm_read()
969 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) { in cmm_read()
975 rc = 0; in cmm_read()
977 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in cmm_read()
978 || dev->flags0 == 0xff) { /* no cardman inserted */ in cmm_read()
995 for (i = 0; i < j; i++) { in cmm_read()
1002 dev->flags1 |= 0x10; /* MSB buf addr set */ in cmm_read()
1010 if (dev->proto == 0 && count > dev->rlen - dev->rpos && i) { in cmm_read()
1011 DEBUGP(4, dev, "T=0 and count > buffer\n"); in cmm_read()
1022 dev->flags1 &= 0xdf; in cmm_read()
1025 xoutb(0, REG_FLAGS1(iobase)); /* clear detectCMM */ in cmm_read()
1032 if (test_bit(IS_INVREV, &dev->flags) && count > 0) in cmm_read()
1043 (rc < 0 ? rc : count)); in cmm_read()
1044 return rc < 0 ? rc : count; in cmm_read()
1051 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_write()
1063 if (count == 0) /* according to manpage */ in cmm_write()
1064 return 0; in cmm_write()
1066 if (dev->proto == 0 && count < 4) { in cmm_write()
1072 nr = count & 0x1ff; /* max bytes to write */ in cmm_write()
1074 sendT0 = dev->proto ? 0 : nr > 5 ? 0x08 : 0; in cmm_write()
1099 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) != 0)))) { in cmm_write()
1105 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) { /* invalid atr */ in cmm_write()
1114 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) { in cmm_write()
1123 rc = 0; in cmm_write()
1125 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */ in cmm_write()
1126 || dev->flags0 == 0xff) { /* no cardman inserted */ in cmm_write()
1138 xoutb(0x80, REG_FLAGS0(iobase)); /* reset SM */ in cmm_write()
1145 /* reflect T=0 send/read mode in flags1 */ in cmm_write()
1153 dev->flags1 = 0x20 /* T_Active */ in cmm_write()
1155 | (test_bit(IS_INVREV, &dev->flags) ? 2 : 0)/* inverse parity */ in cmm_write()
1156 | (((dev->baudv - 1) & 0x0100) >> 8); /* MSB-Baud */ in cmm_write()
1157 DEBUGP(1, dev, "set dev->flags1 = 0x%.2x\n", dev->flags1); in cmm_write()
1162 for (i = 0; i < nr; i++) { in cmm_write()
1164 dev->flags1 = 0x20 /* T_Active */ in cmm_write()
1167 | (test_bit(IS_INVREV, &dev->flags) ? 2 : 0) in cmm_write()
1168 | (((dev->baudv - 1) & 0x0100) >> 8) /* MSB-Baud */ in cmm_write()
1169 | 0x10; /* set address high */ in cmm_write()
1170 DEBUGP(4, dev, "dev->flags = 0x%.2x - set address " in cmm_write()
1175 DEBUGP(4, dev, "Apply inverse convention for 0x%.2x " in cmm_write()
1176 "-> 0x%.2x\n", (unsigned char)dev->sbuf[i], in cmm_write()
1188 if (dev->proto == 0) { in cmm_write()
1189 /* T=0 proto: 0 byte reply */ in cmm_write()
1191 DEBUGP(4, dev, "T=0 assumes 0 byte reply\n"); in cmm_write()
1194 xoutb(0xff, REG_BUF_DATA(iobase)); in cmm_write()
1196 xoutb(0x00, REG_BUF_DATA(iobase)); in cmm_write()
1207 if (dev->sbuf[4] == 0) in cmm_write()
1208 nsend += 0x100; in cmm_write()
1216 DEBUGP(4, dev, "T=0 set Procedure byte (inverse-reverse) " in cmm_write()
1217 "0x%.2x\n", invert_revert(dev->sbuf[1])); in cmm_write()
1220 DEBUGP(4, dev, "T=0 set Procedure byte 0x%.2x\n", dev->sbuf[1]); in cmm_write()
1224 DEBUGP(1, dev, "set NumSendBytes = 0x%.2x\n", in cmm_write()
1225 (unsigned char)(nsend & 0xff)); in cmm_write()
1226 xoutb((unsigned char)(nsend & 0xff), REG_NUM_SEND(iobase)); in cmm_write()
1228 DEBUGP(1, dev, "Trigger CARDMAN CONTROLLER (0x%.2x)\n", in cmm_write()
1229 0x40 /* SM_Active */ in cmm_write()
1230 | (dev->flags0 & 2 ? 0 : 4) /* power on if needed */ in cmm_write()
1231 |(dev->proto ? 0x10 : 0x08) /* T=1/T=0 */ in cmm_write()
1232 |(nsend & 0x100) >> 8 /* MSB numSendBytes */ ); in cmm_write()
1233 xoutb(0x40 /* SM_Active */ in cmm_write()
1234 | (dev->flags0 & 2 ? 0 : 4) /* power on if needed */ in cmm_write()
1235 |(dev->proto ? 0x10 : 0x08) /* T=1/T=0 */ in cmm_write()
1236 |(nsend & 0x100) >> 8, /* MSB numSendBytes */ in cmm_write()
1242 for (i = 0; i < 1000; i++) { in cmm_write()
1243 if (inb(REG_FLAGS0(iobase)) & 0x08) in cmm_write()
1256 infolen = 0; in cmm_write()
1259 for (i = 0; i < 6000; i++) { /* max waiting time of 1 min */ in cmm_write()
1278 for (i = 0; i < 600; i++) { /* max waiting time of 2 sec */ in cmm_write()
1288 i = 0; /* reset timeout */ in cmm_write()
1291 /* T=0: we are done when numRecBytes doesn't in cmm_write()
1298 else if (dev->proto == 0) { in cmm_write()
1299 if ((inb(REG_BUF_ADDR(iobase)) & 0x80)) { in cmm_write()
1302 /* i=0; */ in cmm_write()
1308 DEBUGP(1, dev, "Read procedure byte 0x%.2x\n", in cmm_write()
1310 i = 0; /* resettimeout */ in cmm_write()
1312 if (inb(REG_FLAGS0(iobase)) & 0x08) { in cmm_write()
1325 if (dev->proto == 0) { in cmm_write()
1327 for (i = 0; i < 1000; i++) { in cmm_write()
1328 if (inb(REG_FLAGS0(iobase)) & 0x08) in cmm_write()
1339 DEBUGP(4, dev, "Read procedure byte 0x%.2x\n", in cmm_write()
1347 /* T=1: read offset=zero, T=0: read offset=after challenge */ in cmm_write()
1348 dev->rpos = dev->proto ? 0 : nr == 4 ? 5 : nr > dev->rlen ? 5 : nr; in cmm_write()
1354 xoutb(0x80, REG_FLAGS0(iobase)); /* reset SM */ in cmm_write()
1356 if (rc < 0) { in cmm_write()
1358 dev->flags1 &= 0xdf; in cmm_write()
1367 memset((char *)dev->sbuf, 0, 512); in cmm_write()
1371 return rc < 0 ? rc : nr; in cmm_write()
1379 timer_setup(&dev->timer, monitor_card, 0); in start_monitor()
1404 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_ioctl()
1443 rc = 0; in cmm_ioctl()
1476 != 0)))) { in cmm_ioctl()
1485 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) { in cmm_ioctl()
1499 rc = 0; in cmm_ioctl()
1506 if (dev->flags0 & 0x01) { in cmm_ioctl()
1511 if (dev->flags0 & 0x02) { in cmm_ioctl()
1519 if ((dev->flags0 & 0x01) && (dev->flags0 & 0x02)) { in cmm_ioctl()
1526 == 0)))) { in cmm_ioctl()
1533 /* Set Flags0 = 0x42 */ in cmm_ioctl()
1534 DEBUGP(4, dev, "Set Flags0=0x42 \n"); in cmm_ioctl()
1535 xoutb(0x42, REG_FLAGS0(iobase)); in cmm_ioctl()
1544 0)))) { in cmm_ioctl()
1556 rc = 0; in cmm_ioctl()
1568 rc = 0; in cmm_ioctl()
1575 != 0)))) { in cmm_ioctl()
1587 == 0)))) { in cmm_ioctl()
1595 if ((rc = set_protocol(dev, &krnptsreq)) != 0) { in cmm_ioctl()
1701 link->open = 0; /* only one open per device */ in cmm_close()
1705 return 0; in cmm_close()
1723 wait_event(dev->devq, (link->open == 0)); in cmm_cm4000_release()
1748 return 0; in cm4000_config()
1762 return 0; in cm4000_suspend()
1773 return 0; in cm4000_resume()
1787 for (i = 0; i < CM4000_MAX_DEV; i++) in cm4000_probe()
1819 return 0; in cm4000_probe()
1828 for (devno = 0; devno < CM4000_MAX_DEV; devno++) in cm4000_detach()
1857 PCMCIA_DEVICE_MANF_CARD(0x0223, 0x0002),
1858 PCMCIA_DEVICE_PROD_ID12("CardMan", "4000", 0x2FB368CA, 0xA2BD8C39),
1881 major = register_chrdev(0, DEVICE_NAME, &cm4000_fops); in cmm_init()
1882 if (major < 0) { in cmm_init()
1890 if (rc < 0) { in cmm_init()
1896 return 0; in cmm_init()