forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.7 KiB
109 lines
3.7 KiB
/* |
|
* 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 */
|
|
|