| /* | |
| * 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 */ |