0001 #ifndef __DRIVERS_PARIDE_H__
0002 #define __DRIVERS_PARIDE_H__
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #define PARIDE_H_VERSION "1.01"
0019
0020
0021
0022
0023
0024
0025 #define PI_PD 0
0026 #define PI_PCD 1
0027 #define PI_PF 2
0028 #define PI_PT 3
0029 #define PI_PG 4
0030
0031
0032
0033
0034
0035
0036 struct pi_adapter {
0037
0038 struct pi_protocol *proto;
0039 int port;
0040 int mode;
0041 int delay;
0042 int devtype;
0043 char *device;
0044 int unit;
0045 int saved_r0;
0046 int saved_r2;
0047 int reserved;
0048 unsigned long private;
0049
0050 wait_queue_head_t parq;
0051 void *pardev;
0052 char *parname;
0053 int claimed;
0054 void (*claim_cont)(void);
0055 };
0056
0057 typedef struct pi_adapter PIA;
0058
0059
0060
0061 extern int pi_init(PIA *pi,
0062 int autoprobe,
0063 int port,
0064 int mode,
0065 int unit,
0066 int protocol,
0067 int delay,
0068 char * scratch,
0069 int devtype,
0070 int verbose,
0071 char *device
0072 );
0073
0074 extern void pi_release(PIA *pi);
0075
0076
0077
0078
0079
0080
0081
0082
0083 extern void pi_write_regr(PIA *pi, int cont, int regr, int val);
0084
0085 extern int pi_read_regr(PIA *pi, int cont, int regr);
0086
0087 extern void pi_write_block(PIA *pi, char * buf, int count);
0088
0089 extern void pi_read_block(PIA *pi, char * buf, int count);
0090
0091 extern void pi_connect(PIA *pi);
0092
0093 extern void pi_disconnect(PIA *pi);
0094
0095 extern void pi_do_claimed(PIA *pi, void (*cont)(void));
0096 extern int pi_schedule_claimed(PIA *pi, void (*cont)(void));
0097
0098
0099
0100 #define delay_p (pi->delay?udelay(pi->delay):(void)0)
0101 #define out_p(offs,byte) outb(byte,pi->port+offs); delay_p;
0102 #define in_p(offs) (delay_p,inb(pi->port+offs))
0103
0104 #define w0(byte) {out_p(0,byte);}
0105 #define r0() (in_p(0) & 0xff)
0106 #define w1(byte) {out_p(1,byte);}
0107 #define r1() (in_p(1) & 0xff)
0108 #define w2(byte) {out_p(2,byte);}
0109 #define r2() (in_p(2) & 0xff)
0110 #define w3(byte) {out_p(3,byte);}
0111 #define w4(byte) {out_p(4,byte);}
0112 #define r4() (in_p(4) & 0xff)
0113 #define w4w(data) {outw(data,pi->port+4); delay_p;}
0114 #define w4l(data) {outl(data,pi->port+4); delay_p;}
0115 #define r4w() (delay_p,inw(pi->port+4)&0xffff)
0116 #define r4l() (delay_p,inl(pi->port+4)&0xffffffff)
0117
0118 static inline u16 pi_swab16( char *b, int k)
0119
0120 { union { u16 u; char t[2]; } r;
0121
0122 r.t[0]=b[2*k+1]; r.t[1]=b[2*k];
0123 return r.u;
0124 }
0125
0126 static inline u32 pi_swab32( char *b, int k)
0127
0128 { union { u32 u; char f[4]; } r;
0129
0130 r.f[0]=b[4*k+1]; r.f[1]=b[4*k];
0131 r.f[2]=b[4*k+3]; r.f[3]=b[4*k+2];
0132 return r.u;
0133 }
0134
0135 struct pi_protocol {
0136
0137 char name[8];
0138 int index;
0139
0140 int max_mode;
0141 int epp_first;
0142
0143 int default_delay;
0144 int max_units;
0145
0146 void (*write_regr)(PIA *,int,int,int);
0147 int (*read_regr)(PIA *,int,int);
0148 void (*write_block)(PIA *,char *,int);
0149 void (*read_block)(PIA *,char *,int);
0150
0151 void (*connect)(PIA *);
0152 void (*disconnect)(PIA *);
0153
0154 int (*test_port)(PIA *);
0155 int (*probe_unit)(PIA *);
0156 int (*test_proto)(PIA *,char *,int);
0157 void (*log_adapter)(PIA *,char *,int);
0158
0159 int (*init_proto)(PIA *);
0160 void (*release_proto)(PIA *);
0161 struct module *owner;
0162 };
0163
0164 typedef struct pi_protocol PIP;
0165
0166 extern int paride_register( PIP * );
0167 extern void paride_unregister ( PIP * );
0168 void *pi_register_driver(char *);
0169 void pi_unregister_driver(void *);
0170
0171 #endif
0172