diff options
| author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
| commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
| tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /drivers/block/paride/paride.h | |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'drivers/block/paride/paride.h')
| -rw-r--r-- | drivers/block/paride/paride.h | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/drivers/block/paride/paride.h b/drivers/block/paride/paride.h new file mode 100644 index 000000000000..c6d98ef09e48 --- /dev/null +++ b/drivers/block/paride/paride.h | |||
| @@ -0,0 +1,170 @@ | |||
| 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 | unsigned long 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 | extern int pi_schedule_claimed(PIA *pi, void (*cont)(void)); | ||
| 97 | |||
| 98 | /* macros and functions exported to the protocol modules */ | ||
| 99 | |||
| 100 | #define delay_p (pi->delay?udelay(pi->delay):(void)0) | ||
| 101 | #define out_p(offs,byte) outb(byte,pi->port+offs); delay_p; | ||
| 102 | #define in_p(offs) (delay_p,inb(pi->port+offs)) | ||
| 103 | |||
| 104 | #define w0(byte) {out_p(0,byte);} | ||
| 105 | #define r0() (in_p(0) & 0xff) | ||
| 106 | #define w1(byte) {out_p(1,byte);} | ||
| 107 | #define r1() (in_p(1) & 0xff) | ||
| 108 | #define w2(byte) {out_p(2,byte);} | ||
| 109 | #define r2() (in_p(2) & 0xff) | ||
| 110 | #define w3(byte) {out_p(3,byte);} | ||
| 111 | #define w4(byte) {out_p(4,byte);} | ||
| 112 | #define r4() (in_p(4) & 0xff) | ||
| 113 | #define w4w(data) {outw(data,pi->port+4); delay_p;} | ||
| 114 | #define w4l(data) {outl(data,pi->port+4); delay_p;} | ||
| 115 | #define r4w() (delay_p,inw(pi->port+4)&0xffff) | ||
| 116 | #define r4l() (delay_p,inl(pi->port+4)&0xffffffff) | ||
| 117 | |||
| 118 | static inline u16 pi_swab16( char *b, int k) | ||
| 119 | |||
| 120 | { union { u16 u; char t[2]; } r; | ||
| 121 | |||
| 122 | r.t[0]=b[2*k+1]; r.t[1]=b[2*k]; | ||
| 123 | return r.u; | ||
| 124 | } | ||
| 125 | |||
| 126 | static inline u32 pi_swab32( char *b, int k) | ||
| 127 | |||
| 128 | { union { u32 u; char f[4]; } r; | ||
| 129 | |||
| 130 | r.f[0]=b[4*k+1]; r.f[1]=b[4*k]; | ||
| 131 | r.f[2]=b[4*k+3]; r.f[3]=b[4*k+2]; | ||
| 132 | return r.u; | ||
| 133 | } | ||
| 134 | |||
| 135 | struct pi_protocol { | ||
| 136 | |||
| 137 | char name[8]; /* name for this protocol */ | ||
| 138 | int index; /* index into protocol table */ | ||
| 139 | |||
| 140 | int max_mode; /* max mode number */ | ||
| 141 | int epp_first; /* modes >= this use 8 ports */ | ||
| 142 | |||
| 143 | int default_delay; /* delay parameter if not specified */ | ||
| 144 | int max_units; /* max chained units probed for */ | ||
| 145 | |||
| 146 | void (*write_regr)(PIA *,int,int,int); | ||
| 147 | int (*read_regr)(PIA *,int,int); | ||
| 148 | void (*write_block)(PIA *,char *,int); | ||
| 149 | void (*read_block)(PIA *,char *,int); | ||
| 150 | |||
| 151 | void (*connect)(PIA *); | ||
| 152 | void (*disconnect)(PIA *); | ||
| 153 | |||
| 154 | int (*test_port)(PIA *); | ||
| 155 | int (*probe_unit)(PIA *); | ||
| 156 | int (*test_proto)(PIA *,char *,int); | ||
| 157 | void (*log_adapter)(PIA *,char *,int); | ||
| 158 | |||
| 159 | int (*init_proto)(PIA *); | ||
| 160 | void (*release_proto)(PIA *); | ||
| 161 | struct module *owner; | ||
| 162 | }; | ||
| 163 | |||
| 164 | typedef struct pi_protocol PIP; | ||
| 165 | |||
| 166 | extern int pi_register( PIP * ); | ||
| 167 | extern void pi_unregister ( PIP * ); | ||
| 168 | |||
| 169 | #endif /* __DRIVERS_PARIDE_H__ */ | ||
| 170 | /* end of paride.h */ | ||
