nmi_backtrace: add more trigger_*_cpu_backtrace() methods
[cascardo/linux.git] / arch / mips / include / asm / cdmm.h
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 2014 Imagination Technologies Ltd.
7  */
8 #ifndef __ASM_CDMM_H
9 #define __ASM_CDMM_H
10
11 #include <linux/device.h>
12 #include <linux/mod_devicetable.h>
13
14 /**
15  * struct mips_cdmm_device - Represents a single device on a CDMM bus.
16  * @dev:        Driver model device object.
17  * @cpu:        CPU which can access this device.
18  * @res:        MMIO resource.
19  * @type:       Device type identifier.
20  * @rev:        Device revision number.
21  */
22 struct mips_cdmm_device {
23         struct device           dev;
24         unsigned int            cpu;
25         struct resource         res;
26         unsigned int            type;
27         unsigned int            rev;
28 };
29
30 /**
31  * struct mips_cdmm_driver - Represents a driver for a CDMM device.
32  * @drv:        Driver model driver object.
33  * @probe       Callback for probing newly discovered devices.
34  * @remove:     Callback to remove the device.
35  * @shutdown:   Callback on system shutdown.
36  * @cpu_down:   Callback when the parent CPU is going down.
37  *              Any CPU pinned threads/timers should be disabled.
38  * @cpu_up:     Callback when the parent CPU is coming back up again.
39  *              CPU pinned threads/timers can be restarted.
40  * @id_table:   Table for CDMM IDs to match against.
41  */
42 struct mips_cdmm_driver {
43         struct device_driver    drv;
44         int                     (*probe)(struct mips_cdmm_device *);
45         int                     (*remove)(struct mips_cdmm_device *);
46         void                    (*shutdown)(struct mips_cdmm_device *);
47         int                     (*cpu_down)(struct mips_cdmm_device *);
48         int                     (*cpu_up)(struct mips_cdmm_device *);
49         const struct mips_cdmm_device_id *id_table;
50 };
51
52 /**
53  * mips_cdmm_phys_base() - Choose a physical base address for CDMM region.
54  *
55  * Picking a suitable physical address at which to map the CDMM region is
56  * platform specific, so this function can be defined by platform code to
57  * pick a suitable value if none is configured by the bootloader.
58  *
59  * This address must be 32kB aligned, and the region occupies a maximum of 32kB
60  * of physical address space which must not be used for anything else.
61  *
62  * Returns:     Physical base address for CDMM region, or 0 on failure.
63  */
64 phys_addr_t mips_cdmm_phys_base(void);
65
66 extern struct bus_type mips_cdmm_bustype;
67 void __iomem *mips_cdmm_early_probe(unsigned int dev_type);
68
69 #define to_mips_cdmm_device(d)  container_of(d, struct mips_cdmm_device, dev)
70
71 #define mips_cdmm_get_drvdata(d)        dev_get_drvdata(&d->dev)
72 #define mips_cdmm_set_drvdata(d, p)     dev_set_drvdata(&d->dev, p)
73
74 int mips_cdmm_driver_register(struct mips_cdmm_driver *);
75 void mips_cdmm_driver_unregister(struct mips_cdmm_driver *);
76
77 /*
78  * module_mips_cdmm_driver() - Helper macro for drivers that don't do
79  * anything special in module init/exit.  This eliminates a lot of
80  * boilerplate.  Each module may only use this macro once, and
81  * calling it replaces module_init() and module_exit()
82  */
83 #define module_mips_cdmm_driver(__mips_cdmm_driver) \
84         module_driver(__mips_cdmm_driver, mips_cdmm_driver_register, \
85                         mips_cdmm_driver_unregister)
86
87 /*
88  * builtin_mips_cdmm_driver() - Helper macro for drivers that don't do anything
89  * special in init and have no exit. This eliminates some boilerplate. Each
90  * driver may only use this macro once, and calling it replaces device_initcall
91  * (or in some cases, the legacy __initcall). This is meant to be a direct
92  * parallel of module_mips_cdmm_driver() above but without the __exit stuff that
93  * is not used for builtin cases.
94  */
95 #define builtin_mips_cdmm_driver(__mips_cdmm_driver) \
96         builtin_driver(__mips_cdmm_driver, mips_cdmm_driver_register)
97
98 /* drivers/tty/mips_ejtag_fdc.c */
99
100 #ifdef CONFIG_MIPS_EJTAG_FDC_EARLYCON
101 int setup_early_fdc_console(void);
102 #else
103 static inline int setup_early_fdc_console(void)
104 {
105         return -ENODEV;
106 }
107 #endif
108
109 #endif /* __ASM_CDMM_H */