Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.3 111 lines 3.5 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * pata_parport.h (c) 1997-8 Grant R. Guenther <grant@torque.net> 4 * Under the terms of the GPL. 5 * 6 * This file defines the interface for parallel port IDE adapter chip drivers. 7 */ 8 9#ifndef LINUX_PATA_PARPORT_H 10#define LINUX_PATA_PARPORT_H 11 12#include <linux/libata.h> 13 14#define PI_PCD 1 /* dummy for paride protocol modules */ 15 16struct pi_adapter { 17 struct device dev; 18 struct pi_protocol *proto; /* adapter protocol */ 19 int port; /* base address of parallel port */ 20 int mode; /* transfer mode in use */ 21 int delay; /* adapter delay setting */ 22 int devtype; /* dummy for paride protocol modules */ 23 char *device; /* dummy for paride protocol modules */ 24 int unit; /* unit number for chained adapters */ 25 int saved_r0; /* saved port state */ 26 int saved_r2; /* saved port state */ 27 unsigned long private; /* for protocol module */ 28 struct pardevice *pardev; /* pointer to pardevice */ 29}; 30 31typedef struct pi_adapter PIA; /* for paride protocol modules */ 32 33/* registers are addressed as (cont,regr) 34 * cont: 0 for command register file, 1 for control register(s) 35 * regr: 0-7 for register number. 36 */ 37 38/* macros and functions exported to the protocol modules */ 39#define delay_p (pi->delay ? udelay(pi->delay) : (void)0) 40#define out_p(offs, byte) do { outb(byte, pi->port + offs); delay_p; } while (0) 41#define in_p(offs) (delay_p, inb(pi->port + offs)) 42 43#define w0(byte) out_p(0, byte) 44#define r0() in_p(0) 45#define w1(byte) out_p(1, byte) 46#define r1() in_p(1) 47#define w2(byte) out_p(2, byte) 48#define r2() in_p(2) 49#define w3(byte) out_p(3, byte) 50#define w4(byte) out_p(4, byte) 51#define r4() in_p(4) 52#define w4w(data) do { outw(data, pi->port + 4); delay_p; } while (0) 53#define w4l(data) do { outl(data, pi->port + 4); delay_p; } while (0) 54#define r4w() (delay_p, inw(pi->port + 4)) 55#define r4l() (delay_p, inl(pi->port + 4)) 56 57static inline u16 pi_swab16(char *b, int k) 58{ 59 union { u16 u; char t[2]; } r; 60 61 r.t[0] = b[2 * k + 1]; r.t[1] = b[2 * k]; 62 return r.u; 63} 64 65static inline u32 pi_swab32(char *b, int k) 66{ 67 union { u32 u; char f[4]; } r; 68 69 r.f[0] = b[4 * k + 1]; r.f[1] = b[4 * k]; 70 r.f[2] = b[4 * k + 3]; r.f[3] = b[4 * k + 2]; 71 return r.u; 72} 73 74struct pi_protocol { 75 char name[8]; 76 77 int max_mode; 78 int epp_first; /* modes >= this use 8 ports */ 79 80 int default_delay; 81 int max_units; /* max chained units probed for */ 82 83 void (*write_regr)(struct pi_adapter *pi, int cont, int regr, int val); 84 int (*read_regr)(struct pi_adapter *pi, int cont, int regr); 85 void (*write_block)(struct pi_adapter *pi, char *buf, int count); 86 void (*read_block)(struct pi_adapter *pi, char *buf, int count); 87 88 void (*connect)(struct pi_adapter *pi); 89 void (*disconnect)(struct pi_adapter *pi); 90 91 int (*test_port)(struct pi_adapter *pi); 92 int (*probe_unit)(struct pi_adapter *pi); 93 int (*test_proto)(struct pi_adapter *pi, char *scratch, int verbose); 94 void (*log_adapter)(struct pi_adapter *pi, char *scratch, int verbose); 95 96 int (*init_proto)(struct pi_adapter *pi); 97 void (*release_proto)(struct pi_adapter *pi); 98 struct module *owner; 99 struct device_driver driver; 100 struct scsi_host_template sht; 101}; 102 103#define PATA_PARPORT_SHT ATA_PIO_SHT 104 105int pata_parport_register_driver(struct pi_protocol *pr); 106void pata_parport_unregister_driver(struct pi_protocol *pr); 107/* defines for old paride protocol modules */ 108#define paride_register pata_parport_register_driver 109#define paride_unregister pata_parport_unregister_driver 110 111#endif /* LINUX_PATA_PARPORT_H */