brintos

brintos / linux-shallow public Read only

0
0
Text · 3.2 KiB · bbfa4e6 Raw
97 lines · c
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_H10#define LINUX_PATA_PARPORT_H11 12#include <linux/libata.h>13 14struct pi_adapter {15	struct device dev;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 */25};26 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.30 */31 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))36 37#define w0(byte)		out_p(0, byte)38#define r0()			in_p(0)39#define w1(byte)		out_p(1, byte)40#define r1()			in_p(1)41#define w2(byte)		out_p(2, byte)42#define r2()			in_p(2)43#define w3(byte)		out_p(3, byte)44#define w4(byte)		out_p(4, byte)45#define r4()			in_p(4)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))50 51struct pi_protocol {52	char name[8];53 54	int max_mode;55	int epp_first;		/* modes >= this use 8 ports */56 57	int default_delay;58	int max_units;		/* max chained units probed for */59 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);64 65	void (*connect)(struct pi_adapter *pi);66	void (*disconnect)(struct pi_adapter *pi);67 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);72 73	int (*init_proto)(struct pi_adapter *pi);74	void (*release_proto)(struct pi_adapter *pi);75	struct module *owner;76	struct device_driver driver;77	struct scsi_host_template sht;78};79 80#define PATA_PARPORT_SHT ATA_PIO_SHT81 82int pata_parport_register_driver(struct pi_protocol *pr);83void pata_parport_unregister_driver(struct pi_protocol *pr);84 85/**86 * module_pata_parport_driver() - Helper macro for registering a pata_parport driver87 * @__pi_protocol: pi_protocol struct88 *89 * Helper macro for pata_parport drivers which do not do anything special in module90 * init/exit. This eliminates a lot of boilerplate. Each module may only91 * use this macro once, and calling it replaces module_init() and module_exit()92 */93#define module_pata_parport_driver(__pi_protocol) \94	module_driver(__pi_protocol, pata_parport_register_driver, pata_parport_unregister_driver)95 96#endif /* LINUX_PATA_PARPORT_H */97