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()
738 if (flags0 & 0x02) { in monitor_card()
744 xoutb(0x80, REG_FLAGS0(iobase)); in monitor_card()
751 dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
760 xoutb(0x80, REG_FLAGS0(iobase)); in monitor_card()
762 dev->baudv = 0x173; /* 9600 */ in monitor_card()
763 xoutb(0x02, REG_STOPBITS(iobase)); /* stopbits=2 */ in monitor_card()
764 xoutb(0x73, REG_BAUDRATE(iobase)); /* baud value */ in monitor_card()
765 xoutb(0x21, REG_FLAGS1(iobase)); /* T_Active=1, baud in monitor_card()
768 xoutb(dev->flags0 & 2 ? 0x46 : 0x44, REG_FLAGS0(iobase)); in monitor_card()
792 dev->atr_len_retry = 0; /* set new timeout */ in monitor_card()
799 xoutb(0x80, REG_FLAGS0(iobase)); /* reset SM */ in monitor_card()
800 for (i = 0; i < dev->atr_len; i++) { in monitor_card()
806 dev->flags1 = 0x01; in monitor_card()
811 if (dev->atr[0] == 0x03) in monitor_card()
814 if (atrc == 0) { /* atr invalid */ in monitor_card()
815 dev->mdelay = 0; in monitor_card()
825 /* if ta1 == 0x11, no PPS necessary (default values) */ in monitor_card()
827 if ((test_bit(IS_AUTOPPS_ACT, &dev->flags) == 0) && in monitor_card()
828 (dev->ta1 != 0x11) && in monitor_card()
833 ptsreq.protocol = (0x01 << dev->proto); in monitor_card()
834 ptsreq.flags = 0x01; in monitor_card()
835 ptsreq.pts1 = 0x00; in monitor_card()
836 ptsreq.pts2 = 0x00; in monitor_card()
837 ptsreq.pts3 = 0x00; in monitor_card()
838 if (set_protocol(dev, &ptsreq) == 0) { in monitor_card()
851 dev->atr_len_retry = dev->cwarn = 0; in monitor_card()
863 if (dev->ta1 == 0x11) in monitor_card()
865 "TA(1)==0x11\n"); in monitor_card()
881 if (dev->cwarn == 0 || dev->cwarn == 10) { in monitor_card()
885 DEBUGP(4, dev, "ATR checksum (0x%.2x, should " in monitor_card()
896 dev->cwarn = 0; in monitor_card()
925 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_read()
931 if (count == 0) /* according to manpage */ in cmm_read()
932 return 0; 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()
967 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) { in cmm_read()
973 rc = 0; 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()
993 for (i = 0; i < j; i++) { in cmm_read()
1000 dev->flags1 |= 0x10; /* MSB buf addr set */ 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()
1020 dev->flags1 &= 0xdf; in cmm_read()
1023 xoutb(0, REG_FLAGS1(iobase)); /* clear detectCMM */ in cmm_read()
1030 if (test_bit(IS_INVREV, &dev->flags) && count > 0) in cmm_read()
1041 (rc < 0 ? rc : count)); in cmm_read()
1042 return rc < 0 ? rc : count; in cmm_read()
1049 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_write()
1061 if (count == 0) /* according to manpage */ in cmm_write()
1062 return 0; in cmm_write()
1064 if (dev->proto == 0 && count < 4) { in cmm_write()
1070 nr = count & 0x1ff; /* max bytes to write */ in cmm_write()
1072 sendT0 = dev->proto ? 0 : nr > 5 ? 0x08 : 0; 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()
1112 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) { in cmm_write()
1121 rc = 0; 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()
1136 xoutb(0x80, REG_FLAGS0(iobase)); /* reset SM */ in cmm_write()
1143 /* reflect T=0 send/read mode in flags1 */ 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()
1160 for (i = 0; i < nr; i++) { 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()
1167 | 0x10; /* set address high */ in cmm_write()
1168 DEBUGP(4, dev, "dev->flags = 0x%.2x - set address " 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()
1186 if (dev->proto == 0) { in cmm_write()
1187 /* T=0 proto: 0 byte reply */ in cmm_write()
1189 DEBUGP(4, dev, "T=0 assumes 0 byte reply\n"); in cmm_write()
1192 xoutb(0xff, REG_BUF_DATA(iobase)); in cmm_write()
1194 xoutb(0x00, REG_BUF_DATA(iobase)); in cmm_write()
1205 if (dev->sbuf[4] == 0) in cmm_write()
1206 nsend += 0x100; 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()
1218 DEBUGP(4, dev, "T=0 set Procedure byte 0x%.2x\n", dev->sbuf[1]); in cmm_write()
1222 DEBUGP(1, dev, "set NumSendBytes = 0x%.2x\n", in cmm_write()
1223 (unsigned char)(nsend & 0xff)); in cmm_write()
1224 xoutb((unsigned char)(nsend & 0xff), REG_NUM_SEND(iobase)); in cmm_write()
1226 DEBUGP(1, dev, "Trigger CARDMAN CONTROLLER (0x%.2x)\n", in cmm_write()
1227 0x40 /* SM_Active */ 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()
1230 |(nsend & 0x100) >> 8 /* MSB numSendBytes */ ); in cmm_write()
1231 xoutb(0x40 /* SM_Active */ 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()
1234 |(nsend & 0x100) >> 8, /* MSB numSendBytes */ in cmm_write()
1240 for (i = 0; i < 1000; i++) { in cmm_write()
1241 if (inb(REG_FLAGS0(iobase)) & 0x08) in cmm_write()
1254 infolen = 0; in cmm_write()
1257 for (i = 0; i < 6000; i++) { /* max waiting time of 1 min */ in cmm_write()
1276 for (i = 0; i < 600; i++) { /* max waiting time of 2 sec */ in cmm_write()
1286 i = 0; /* reset timeout */ in cmm_write()
1289 /* T=0: we are done when numRecBytes doesn't in cmm_write()
1296 else if (dev->proto == 0) { in cmm_write()
1297 if ((inb(REG_BUF_ADDR(iobase)) & 0x80)) { in cmm_write()
1300 /* i=0; */ in cmm_write()
1306 DEBUGP(1, dev, "Read procedure byte 0x%.2x\n", in cmm_write()
1308 i = 0; /* resettimeout */ in cmm_write()
1310 if (inb(REG_FLAGS0(iobase)) & 0x08) { in cmm_write()
1323 if (dev->proto == 0) { in cmm_write()
1325 for (i = 0; i < 1000; i++) { in cmm_write()
1326 if (inb(REG_FLAGS0(iobase)) & 0x08) in cmm_write()
1337 DEBUGP(4, dev, "Read procedure byte 0x%.2x\n", in cmm_write()
1345 /* T=1: read offset=zero, T=0: read offset=after challenge */ in cmm_write()
1346 dev->rpos = dev->proto ? 0 : nr == 4 ? 5 : nr > dev->rlen ? 5 : nr; in cmm_write()
1352 xoutb(0x80, REG_FLAGS0(iobase)); /* reset SM */ in cmm_write()
1354 if (rc < 0) { in cmm_write()
1356 dev->flags1 &= 0xdf; in cmm_write()
1365 memset((char *)dev->sbuf, 0, 512); in cmm_write()
1369 return rc < 0 ? rc : nr; in cmm_write()
1377 timer_setup(&dev->timer, monitor_card, 0); in start_monitor()
1402 unsigned int iobase = dev->p_dev->resource[0]->start; in cmm_ioctl()
1455 rc = 0; in cmm_ioctl()
1488 != 0)))) { in cmm_ioctl()
1497 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) { in cmm_ioctl()
1511 rc = 0; in cmm_ioctl()
1518 if (dev->flags0 & 0x01) { in cmm_ioctl()
1523 if (dev->flags0 & 0x02) { in cmm_ioctl()
1531 if ((dev->flags0 & 0x01) && (dev->flags0 & 0x02)) { in cmm_ioctl()
1538 == 0)))) { in cmm_ioctl()
1545 /* Set Flags0 = 0x42 */ in cmm_ioctl()
1546 DEBUGP(4, dev, "Set Flags0=0x42 \n"); in cmm_ioctl()
1547 xoutb(0x42, REG_FLAGS0(iobase)); in cmm_ioctl()
1556 0)))) { in cmm_ioctl()
1568 rc = 0; in cmm_ioctl()
1580 rc = 0; in cmm_ioctl()
1587 != 0)))) { in cmm_ioctl()
1599 == 0)))) { in cmm_ioctl()
1607 if ((rc = set_protocol(dev, &krnptsreq)) != 0) { in cmm_ioctl()
1713 link->open = 0; /* only one open per device */ in cmm_close()
1717 return 0; in cmm_close()
1735 wait_event(dev->devq, (link->open == 0)); in cmm_cm4000_release()
1760 return 0; in cm4000_config()
1774 return 0; in cm4000_suspend()
1785 return 0; in cm4000_resume()
1799 for (i = 0; i < CM4000_MAX_DEV; i++) in cm4000_probe()
1831 return 0; in cm4000_probe()
1840 for (devno = 0; devno < CM4000_MAX_DEV; devno++) in cm4000_detach()
1869 PCMCIA_DEVICE_MANF_CARD(0x0223, 0x0002),
1870 PCMCIA_DEVICE_PROD_ID12("CardMan", "4000", 0x2FB368CA, 0xA2BD8C39),
1893 major = register_chrdev(0, DEVICE_NAME, &cm4000_fops); in cmm_init()
1894 if (major < 0) { in cmm_init()
1902 if (rc < 0) { in cmm_init()
1908 return 0; in cmm_init()