1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * ISA bus.
4*4882a593Smuzhiyun */
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun #ifndef __LINUX_ISA_H
7*4882a593Smuzhiyun #define __LINUX_ISA_H
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun #include <linux/device.h>
10*4882a593Smuzhiyun #include <linux/errno.h>
11*4882a593Smuzhiyun #include <linux/kernel.h>
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun struct isa_driver {
14*4882a593Smuzhiyun int (*match)(struct device *, unsigned int);
15*4882a593Smuzhiyun int (*probe)(struct device *, unsigned int);
16*4882a593Smuzhiyun int (*remove)(struct device *, unsigned int);
17*4882a593Smuzhiyun void (*shutdown)(struct device *, unsigned int);
18*4882a593Smuzhiyun int (*suspend)(struct device *, unsigned int, pm_message_t);
19*4882a593Smuzhiyun int (*resume)(struct device *, unsigned int);
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun struct device_driver driver;
22*4882a593Smuzhiyun struct device *devices;
23*4882a593Smuzhiyun };
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun #define to_isa_driver(x) container_of((x), struct isa_driver, driver)
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun #ifdef CONFIG_ISA_BUS_API
28*4882a593Smuzhiyun int isa_register_driver(struct isa_driver *, unsigned int);
29*4882a593Smuzhiyun void isa_unregister_driver(struct isa_driver *);
30*4882a593Smuzhiyun #else
isa_register_driver(struct isa_driver * d,unsigned int i)31*4882a593Smuzhiyun static inline int isa_register_driver(struct isa_driver *d, unsigned int i)
32*4882a593Smuzhiyun {
33*4882a593Smuzhiyun return -ENODEV;
34*4882a593Smuzhiyun }
35*4882a593Smuzhiyun
isa_unregister_driver(struct isa_driver * d)36*4882a593Smuzhiyun static inline void isa_unregister_driver(struct isa_driver *d)
37*4882a593Smuzhiyun {
38*4882a593Smuzhiyun }
39*4882a593Smuzhiyun #endif
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun /**
42*4882a593Smuzhiyun * module_isa_driver() - Helper macro for registering a ISA driver
43*4882a593Smuzhiyun * @__isa_driver: isa_driver struct
44*4882a593Smuzhiyun * @__num_isa_dev: number of devices to register
45*4882a593Smuzhiyun *
46*4882a593Smuzhiyun * Helper macro for ISA drivers which do not do anything special in module
47*4882a593Smuzhiyun * init/exit. This eliminates a lot of boilerplate code. Each module may only
48*4882a593Smuzhiyun * use this macro once, and calling it replaces module_init and module_exit.
49*4882a593Smuzhiyun */
50*4882a593Smuzhiyun #define module_isa_driver(__isa_driver, __num_isa_dev) \
51*4882a593Smuzhiyun static int __init __isa_driver##_init(void) \
52*4882a593Smuzhiyun { \
53*4882a593Smuzhiyun return isa_register_driver(&(__isa_driver), __num_isa_dev); \
54*4882a593Smuzhiyun } \
55*4882a593Smuzhiyun module_init(__isa_driver##_init); \
56*4882a593Smuzhiyun static void __exit __isa_driver##_exit(void) \
57*4882a593Smuzhiyun { \
58*4882a593Smuzhiyun isa_unregister_driver(&(__isa_driver)); \
59*4882a593Smuzhiyun } \
60*4882a593Smuzhiyun module_exit(__isa_driver##_exit);
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun /**
63*4882a593Smuzhiyun * max_num_isa_dev() - Maximum possible number registered of an ISA device
64*4882a593Smuzhiyun * @__ida_dev_ext: ISA device address extent
65*4882a593Smuzhiyun *
66*4882a593Smuzhiyun * The highest base address possible for an ISA device is 0x3FF; this results in
67*4882a593Smuzhiyun * 1024 possible base addresses. Dividing the number of possible base addresses
68*4882a593Smuzhiyun * by the address extent taken by each device results in the maximum number of
69*4882a593Smuzhiyun * devices on a system.
70*4882a593Smuzhiyun */
71*4882a593Smuzhiyun #define max_num_isa_dev(__isa_dev_ext) (1024 / __isa_dev_ext)
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun #endif /* __LINUX_ISA_H */
74