Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


cm4000_cs.h
01: #ifndef _CM4000_H_
02: #define _CM4000_H_
03: 
04: #include <linux/types.h>
05: 
06: #define MAX_ATR                 33
07: 
08: #define CM4000_MAX_DEV          4
09: 
10: /* those two structures are passed via ioctl() from/to userspace.  They are
11:  * used by existing userspace programs, so I kepth the awkward "bIFSD" naming
12:  * not to break compilation of userspace apps. -HW */
13: 
14: typedef struct atreq {
15:         __s32 atr_len;
16:         unsigned char atr[64];
17:         __s32 power_act;
18:         unsigned char bIFSD;
19:         unsigned char bIFSC;
20: } atreq_t;
21: 
22: 
23: /* what is particularly stupid in the original driver is the arch-dependent
24:  * member sizes. This leads to CONFIG_COMPAT breakage, since 32bit userspace
25:  * will lay out the structure members differently than the 64bit kernel.
26:  *
27:  * I've changed "ptsreq.protocol" from "unsigned long" to "__u32".
28:  * On 32bit this will make no difference.  With 64bit kernels, it will make
29:  * 32bit apps work, too.
30:  */
31: 
32: typedef struct ptsreq {
33:         __u32 protocol; /*T=0: 2^0, T=1:  2^1*/
34:         unsigned char flags;
35:         unsigned char pts1;
36:         unsigned char pts2;
37:         unsigned char pts3;
38: } ptsreq_t;
39: 
40: #define CM_IOC_MAGIC            'c'
41: #define CM_IOC_MAXNR            255
42: 
43: #define CM_IOCGSTATUS           _IOR (CM_IOC_MAGIC, 0, unsigned char *)
44: #define CM_IOCGATR              _IOWR(CM_IOC_MAGIC, 1, atreq_t *)
45: #define CM_IOCSPTS              _IOW (CM_IOC_MAGIC, 2, ptsreq_t *)
46: #define CM_IOCSRDR              _IO  (CM_IOC_MAGIC, 3)
47: #define CM_IOCARDOFF            _IO  (CM_IOC_MAGIC, 4)
48: 
49: #define CM_IOSDBGLVL            _IOW(CM_IOC_MAGIC, 250, int*)
50: 
51: /* card and device states */
52: #define CM_CARD_INSERTED                0x01
53: #define CM_CARD_POWERED                 0x02
54: #define CM_ATR_PRESENT                  0x04
55: #define CM_ATR_VALID                    0x08
56: #define CM_STATE_VALID                  0x0f
57: /* extra info only from CM4000 */
58: #define CM_NO_READER                    0x10
59: #define CM_BAD_CARD                     0x20
60: 
61: 
62: #endif  /* _CM4000_H_ */
63: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/