123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- /*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 2014 Imagination Technologies Ltd.
- */
- #ifndef __ASM_CDMM_H
- #define __ASM_CDMM_H
- #include <linux/device.h>
- #include <linux/mod_devicetable.h>
- /**
- * struct mips_cdmm_device - Represents a single device on a CDMM bus.
- * @dev: Driver model device object.
- * @cpu: CPU which can access this device.
- * @res: MMIO resource.
- * @type: Device type identifier.
- * @rev: Device revision number.
- */
- struct mips_cdmm_device {
- struct device dev;
- unsigned int cpu;
- struct resource res;
- unsigned int type;
- unsigned int rev;
- };
- /**
- * struct mips_cdmm_driver - Represents a driver for a CDMM device.
- * @drv: Driver model driver object.
- * @probe Callback for probing newly discovered devices.
- * @remove: Callback to remove the device.
- * @shutdown: Callback on system shutdown.
- * @cpu_down: Callback when the parent CPU is going down.
- * Any CPU pinned threads/timers should be disabled.
- * @cpu_up: Callback when the parent CPU is coming back up again.
- * CPU pinned threads/timers can be restarted.
- * @id_table: Table for CDMM IDs to match against.
- */
- struct mips_cdmm_driver {
- struct device_driver drv;
- int (*probe)(struct mips_cdmm_device *);
- int (*remove)(struct mips_cdmm_device *);
- void (*shutdown)(struct mips_cdmm_device *);
- int (*cpu_down)(struct mips_cdmm_device *);
- int (*cpu_up)(struct mips_cdmm_device *);
- const struct mips_cdmm_device_id *id_table;
- };
- /**
- * mips_cdmm_phys_base() - Choose a physical base address for CDMM region.
- *
- * Picking a suitable physical address at which to map the CDMM region is
- * platform specific, so this function can be defined by platform code to
- * pick a suitable value if none is configured by the bootloader.
- *
- * This address must be 32kB aligned, and the region occupies a maximum of 32kB
- * of physical address space which must not be used for anything else.
- *
- * Returns: Physical base address for CDMM region, or 0 on failure.
- */
- phys_addr_t mips_cdmm_phys_base(void);
- extern struct bus_type mips_cdmm_bustype;
- void __iomem *mips_cdmm_early_probe(unsigned int dev_type);
- #define to_mips_cdmm_device(d) container_of(d, struct mips_cdmm_device, dev)
- #define mips_cdmm_get_drvdata(d) dev_get_drvdata(&d->dev)
- #define mips_cdmm_set_drvdata(d, p) dev_set_drvdata(&d->dev, p)
- int mips_cdmm_driver_register(struct mips_cdmm_driver *);
- void mips_cdmm_driver_unregister(struct mips_cdmm_driver *);
- /*
- * module_mips_cdmm_driver() - Helper macro for drivers that don't do
- * anything special in module init/exit. This eliminates a lot of
- * boilerplate. Each module may only use this macro once, and
- * calling it replaces module_init() and module_exit()
- */
- #define module_mips_cdmm_driver(__mips_cdmm_driver) \
- module_driver(__mips_cdmm_driver, mips_cdmm_driver_register, \
- mips_cdmm_driver_unregister)
- /*
- * builtin_mips_cdmm_driver() - Helper macro for drivers that don't do anything
- * special in init and have no exit. This eliminates some boilerplate. Each
- * driver may only use this macro once, and calling it replaces device_initcall
- * (or in some cases, the legacy __initcall). This is meant to be a direct
- * parallel of module_mips_cdmm_driver() above but without the __exit stuff that
- * is not used for builtin cases.
- */
- #define builtin_mips_cdmm_driver(__mips_cdmm_driver) \
- builtin_driver(__mips_cdmm_driver, mips_cdmm_driver_register)
- /* drivers/tty/mips_ejtag_fdc.c */
- #ifdef CONFIG_MIPS_EJTAG_FDC_EARLYCON
- int setup_early_fdc_console(void);
- #else
- static inline int setup_early_fdc_console(void)
- {
- return -ENODEV;
- }
- #endif
- #endif /* __ASM_CDMM_H */
|