110 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * 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 */
 | 
