Home | History | Annotate | Download | only in linux
      1 #ifndef	_CM4000_H_
      2 #define	_CM4000_H_
      3 
      4 #include <linux/types.h>
      5 
      6 #define	MAX_ATR			33
      7 
      8 #define	CM4000_MAX_DEV		4
      9 
     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