109 lines · 3.7 KB · C
RawDownload
/* * 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/device-id/mips_cdmm.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 const 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_EARLYCONint setup_early_fdc_console(void);#elsestatic inline int setup_early_fdc_console(void){	return -ENODEV;}#endif #endif /* __ASM_CDMM_H */