File Index
Files and directories
Sign in
FILE

isa.h

File preview with syntax highlighting.

linux-6.19.14/include/linux/isa.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * ISA bus.
  4 */
  5
  6#ifndef __LINUX_ISA_H
  7#define __LINUX_ISA_H
  8
  9#include <linux/device.h>
 10#include <linux/errno.h>
 11#include <linux/kernel.h>
 12
 13struct isa_driver {
 14	int (*match)(struct device *, unsigned int);
 15	int (*probe)(struct device *, unsigned int);
 16	void (*remove)(struct device *, unsigned int);
 17	void (*shutdown)(struct device *, unsigned int);
 18	int (*suspend)(struct device *, unsigned int, pm_message_t);
 19	int (*resume)(struct device *, unsigned int);
 20
 21	struct device_driver driver;
 22	struct device *devices;
 23};
 24
 25#define to_isa_driver(x) container_of((x), struct isa_driver, driver)
 26
 27#ifdef CONFIG_ISA_BUS_API
 28int isa_register_driver(struct isa_driver *, unsigned int);
 29void isa_unregister_driver(struct isa_driver *);
 30#else
 31static inline int isa_register_driver(struct isa_driver *d, unsigned int i)
 32{
 33	return -ENODEV;
 34}
 35
 36static inline void isa_unregister_driver(struct isa_driver *d)
 37{
 38}
 39#endif
 40
 41#define module_isa_driver_init(__isa_driver, __num_isa_dev) \
 42static int __init __isa_driver##_init(void) \
 43{ \
 44	return isa_register_driver(&(__isa_driver), __num_isa_dev); \
 45} \
 46module_init(__isa_driver##_init)
 47
 48#define module_isa_driver_with_irq_init(__isa_driver, __num_isa_dev, __num_irq) \
 49static int __init __isa_driver##_init(void) \
 50{ \
 51	if (__num_irq != __num_isa_dev) { \
 52		pr_err("%s: Number of irq (%u) does not match number of base (%u)\n", \
 53		       __isa_driver.driver.name, __num_irq, __num_isa_dev); \
 54		return -EINVAL; \
 55	} \
 56	return isa_register_driver(&(__isa_driver), __num_isa_dev); \
 57} \
 58module_init(__isa_driver##_init)
 59
 60#define module_isa_driver_exit(__isa_driver) \
 61static void __exit __isa_driver##_exit(void) \
 62{ \
 63	isa_unregister_driver(&(__isa_driver)); \
 64} \
 65module_exit(__isa_driver##_exit)
 66
 67/**
 68 * module_isa_driver() - Helper macro for registering a ISA driver
 69 * @__isa_driver: isa_driver struct
 70 * @__num_isa_dev: number of devices to register
 71 *
 72 * Helper macro for ISA drivers which do not do anything special in module
 73 * init/exit. This eliminates a lot of boilerplate code. Each module may only
 74 * use this macro once, and calling it replaces module_init and module_exit.
 75 */
 76#define module_isa_driver(__isa_driver, __num_isa_dev) \
 77module_isa_driver_init(__isa_driver, __num_isa_dev); \
 78module_isa_driver_exit(__isa_driver)
 79
 80/**
 81 * module_isa_driver_with_irq() - Helper macro for registering an ISA driver with irq
 82 * @__isa_driver: isa_driver struct
 83 * @__num_isa_dev: number of devices to register
 84 * @__num_irq: number of IRQ to register
 85 *
 86 * Helper macro for ISA drivers with irq that do not do anything special in
 87 * module init/exit. Each module may only use this macro once, and calling it
 88 * replaces module_init and module_exit.
 89 */
 90#define module_isa_driver_with_irq(__isa_driver, __num_isa_dev, __num_irq) \
 91module_isa_driver_with_irq_init(__isa_driver, __num_isa_dev, __num_irq); \
 92module_isa_driver_exit(__isa_driver)
 93
 94/**
 95 * max_num_isa_dev() - Maximum possible number registered of an ISA device
 96 * @__ida_dev_ext: ISA device address extent
 97 *
 98 * The highest base address possible for an ISA device is 0x3FF; this results in
 99 * 1024 possible base addresses. Dividing the number of possible base addresses
100 * by the address extent taken by each device results in the maximum number of
101 * devices on a system.
102 */
103#define max_num_isa_dev(__isa_dev_ext) (1024 / __isa_dev_ext)
104
105#endif /* __LINUX_ISA_H */
~/ Read-only file preview.