~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/drivers/block/paride/paride.h

Version: ~ [ 2.2.5 ] ~ [ 2.4.1 ] ~ [ 2.4.9 ] ~ [ 2.6.17.10 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef __DRIVERS_PARIDE_H__
  2 #define __DRIVERS_PARIDE_H__
  3 
  4 /* 
  5         paride.h        (c) 1997-8  Grant R. Guenther <grant@torque.net>
  6                                     Under the terms of the GPL.
  7 
  8    This file defines the interface between the high-level parallel
  9    IDE device drivers (pd, pf, pcd, pt) and the adapter chips.
 10 
 11 */
 12 
 13 /* Changes:
 14 
 15         1.01    GRG 1998.05.05  init_proto, release_proto
 16 */
 17 
 18 #define PARIDE_H_VERSION        "1.01"
 19 
 20 /* Some adapters need to know what kind of device they are in
 21 
 22    Values for devtype:
 23 */
 24 
 25 #define PI_PD   0       /* IDE disk */
 26 #define PI_PCD  1       /* ATAPI CDrom */
 27 #define PI_PF   2       /* ATAPI disk */
 28 #define PI_PT   3       /* ATAPI tape */
 29 #define PI_PG   4       /* ATAPI generic */
 30 
 31 /* The paride module contains no state, instead the drivers allocate
 32    a pi_adapter data structure and pass it to paride in every operation.
 33 
 34 */
 35 
 36 struct pi_adapter  {
 37 
 38         struct pi_protocol *proto;   /* adapter protocol */
 39         int     port;                /* base address of parallel port */
 40         int     mode;                /* transfer mode in use */
 41         int     delay;               /* adapter delay setting */
 42         int     devtype;             /* device type: PI_PD etc. */
 43         char    *device;             /* name of driver */
 44         int     unit;                /* unit number for chained adapters */
 45         int     saved_r0;            /* saved port state */
 46         int     saved_r2;            /* saved port state */
 47         int     reserved;            /* number of ports reserved */
 48         int     private;             /* for protocol module */
 49 
 50         wait_queue_head_t parq;     /* semaphore for parport sharing */
 51         void    *pardev;             /* pointer to pardevice */
 52         char    *parname;            /* parport name */
 53         int     claimed;             /* parport has already been claimed */
 54         void (*claim_cont)(void);    /* continuation for parport wait */
 55 };
 56 
 57 typedef struct pi_adapter PIA;
 58 
 59 /* functions exported by paride to the high level drivers */
 60 
 61 extern int pi_init(PIA *pi, 
 62         int autoprobe,          /* 1 to autoprobe */
 63         int port,               /* base port address */
 64         int mode,               /* -1 for autoprobe */
 65         int unit,               /* unit number, if supported */
 66         int protocol,           /* protocol to use */
 67         int delay,              /* -1 to use adapter specific default */
 68         char * scratch,         /* address of 512 byte buffer */
 69         int devtype,            /* device type: PI_PD, PI_PCD, etc ... */
 70         int verbose,            /* log verbose data while probing */
 71         char *device            /* name of the driver */
 72         );                      /* returns 0 on failure, 1 on success */
 73 
 74 extern void pi_release(PIA *pi);
 75 
 76 /* registers are addressed as (cont,regr)
 77 
 78         cont: 0 for command register file, 1 for control register(s)
 79         regr: 0-7 for register number.
 80 
 81 */
 82 
 83 extern void pi_write_regr(PIA *pi, int cont, int regr, int val);
 84 
 85 extern int pi_read_regr(PIA *pi, int cont, int regr);
 86 
 87 extern void pi_write_block(PIA *pi, char * buf, int count);
 88 
 89 extern void pi_read_block(PIA *pi, char * buf, int count);
 90 
 91 extern void pi_connect(PIA *pi);
 92 
 93 extern void pi_disconnect(PIA *pi);
 94 
 95 extern void pi_do_claimed(PIA *pi, void (*cont)(void));
 96 
 97 /* macros and functions exported to the protocol modules */
 98 
 99 #define delay_p                 (pi->delay?udelay(pi->delay):0)
100 #define out_p(offs,byte)        outb(byte,pi->port+offs); delay_p;
101 #define in_p(offs)              (delay_p,inb(pi->port+offs))
102 
103 #define w0(byte)                {out_p(0,byte);}
104 #define r0()                    (in_p(0) & 0xff)
105 #define w1(byte)                {out_p(1,byte);}
106 #define r1()                    (in_p(1) & 0xff)
107 #define w2(byte)                {out_p(2,byte);}
108 #define r2()                    (in_p(2) & 0xff)
109 #define w3(byte)                {out_p(3,byte);}
110 #define w4(byte)                {out_p(4,byte);}
111 #define r4()                    (in_p(4) & 0xff)
112 #define w4w(data)               {outw(data,pi->port+4); delay_p;}
113 #define w4l(data)               {outl(data,pi->port+4); delay_p;}
114 #define r4w()                   (delay_p,inw(pi->port+4)&0xffff)
115 #define r4l()                   (delay_p,inl(pi->port+4)&0xffffffff)
116 
117 static inline u16 pi_swab16( char *b, int k)
118 
119 {       union { u16 u; char t[2]; } r;
120 
121         r.t[0]=b[2*k+1]; r.t[1]=b[2*k];
122         return r.u;
123 }
124 
125 static inline u32 pi_swab32( char *b, int k)
126 
127 {       union { u32 u; char f[4]; } r;
128 
129         r.f[0]=b[4*k+1]; r.f[1]=b[4*k];
130         r.f[2]=b[4*k+3]; r.f[3]=b[4*k+2];
131         return r.u;
132 }
133 
134 struct pi_protocol {
135 
136         char    name[8];        /* name for this protocol */
137         int     index;          /* index into protocol table */
138 
139         int     max_mode;       /* max mode number */
140         int     epp_first;      /* modes >= this use 8 ports */
141         
142         int     default_delay;  /* delay parameter if not specified */
143         int     max_units;      /* max chained units probed for */
144 
145         void (*write_regr)(PIA *,int,int,int);
146         int  (*read_regr)(PIA *,int,int);
147         void (*write_block)(PIA *,char *,int);
148         void (*read_block)(PIA *,char *,int);
149 
150         void (*connect)(PIA *);
151         void (*disconnect)(PIA *);
152         
153         int  (*test_port)(PIA *);
154         int  (*probe_unit)(PIA *);
155         int  (*test_proto)(PIA *,char *,int);
156         void (*log_adapter)(PIA *,char *,int);
157         
158         void (*init_proto)(PIA *);
159         void (*release_proto)(PIA *);
160 };
161 
162 typedef struct pi_protocol PIP;
163 
164 extern int pi_register( PIP * );
165 extern void pi_unregister ( PIP * );
166 
167 #endif /* __DRIVERS_PARIDE_H__ */
168 /* end of paride.h */
169 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.