paride.h (5097B)
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 36struct 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 57typedef struct pi_adapter PIA; 58 59/* functions exported by paride to the high level drivers */ 60 61extern 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 74extern 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 83extern void pi_write_regr(PIA *pi, int cont, int regr, int val); 84 85extern int pi_read_regr(PIA *pi, int cont, int regr); 86 87extern void pi_write_block(PIA *pi, char * buf, int count); 88 89extern void pi_read_block(PIA *pi, char * buf, int count); 90 91extern void pi_connect(PIA *pi); 92 93extern void pi_disconnect(PIA *pi); 94 95extern void pi_do_claimed(PIA *pi, void (*cont)(void)); 96extern 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 118static 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 126static 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 135struct 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 164typedef struct pi_protocol PIP; 165 166extern int paride_register( PIP * ); 167extern void paride_unregister ( PIP * ); 168void *pi_register_driver(char *); 169void pi_unregister_driver(void *); 170 171#endif /* __DRIVERS_PARIDE_H__ */ 172/* end of paride.h */