1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * pata_parport.h (c) 1997-8 Grant R. Guenther <grant@torque.net>
4 * Under the terms of the GPL.
6 * This file defines the interface for parallel port IDE adapter chip drivers.
9 #ifndef LINUX_PATA_PARPORT_H
10 #define LINUX_PATA_PARPORT_H
12 #include <linux/libata.h>
16 struct pi_protocol
*proto
; /* adapter protocol */
17 int port
; /* base address of parallel port */
18 int mode
; /* transfer mode in use */
19 int delay
; /* adapter delay setting */
20 int unit
; /* unit number for chained adapters */
21 int saved_r0
; /* saved port state */
22 int saved_r2
; /* saved port state */
23 unsigned long private; /* for protocol module */
24 struct pardevice
*pardev
; /* pointer to pardevice */
27 /* registers are addressed as (cont,regr)
28 * cont: 0 for command register file, 1 for control register(s)
29 * regr: 0-7 for register number.
32 /* macros and functions exported to the protocol modules */
33 #define delay_p (pi->delay ? udelay(pi->delay) : (void)0)
34 #define out_p(offs, byte) do { outb(byte, pi->port + offs); delay_p; } while (0)
35 #define in_p(offs) (delay_p, inb(pi->port + offs))
37 #define w0(byte) out_p(0, byte)
39 #define w1(byte) out_p(1, byte)
41 #define w2(byte) out_p(2, byte)
43 #define w3(byte) out_p(3, byte)
44 #define w4(byte) out_p(4, byte)
46 #define w4w(data) do { outw(data, pi->port + 4); delay_p; } while (0)
47 #define w4l(data) do { outl(data, pi->port + 4); delay_p; } while (0)
48 #define r4w() (delay_p, inw(pi->port + 4))
49 #define r4l() (delay_p, inl(pi->port + 4))
55 int epp_first
; /* modes >= this use 8 ports */
58 int max_units
; /* max chained units probed for */
60 void (*write_regr
)(struct pi_adapter
*pi
, int cont
, int regr
, int val
);
61 int (*read_regr
)(struct pi_adapter
*pi
, int cont
, int regr
);
62 void (*write_block
)(struct pi_adapter
*pi
, char *buf
, int count
);
63 void (*read_block
)(struct pi_adapter
*pi
, char *buf
, int count
);
65 void (*connect
)(struct pi_adapter
*pi
);
66 void (*disconnect
)(struct pi_adapter
*pi
);
68 int (*test_port
)(struct pi_adapter
*pi
);
69 int (*probe_unit
)(struct pi_adapter
*pi
);
70 int (*test_proto
)(struct pi_adapter
*pi
);
71 void (*log_adapter
)(struct pi_adapter
*pi
);
73 int (*init_proto
)(struct pi_adapter
*pi
);
74 void (*release_proto
)(struct pi_adapter
*pi
);
76 struct device_driver driver
;
77 struct scsi_host_template sht
;
80 #define PATA_PARPORT_SHT ATA_PIO_SHT
82 int pata_parport_register_driver(struct pi_protocol
*pr
);
83 void pata_parport_unregister_driver(struct pi_protocol
*pr
);
86 * module_pata_parport_driver() - Helper macro for registering a pata_parport driver
87 * @__pi_protocol: pi_protocol struct
89 * Helper macro for pata_parport drivers which do not do anything special in module
90 * init/exit. This eliminates a lot of boilerplate. Each module may only
91 * use this macro once, and calling it replaces module_init() and module_exit()
93 #define module_pata_parport_driver(__pi_protocol) \
94 module_driver(__pi_protocol, pata_parport_register_driver, pata_parport_unregister_driver)
96 #endif /* LINUX_PATA_PARPORT_H */