Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / mips / include / asm / cdmm.h
diff --git a/kernel/arch/mips/include/asm/cdmm.h b/kernel/arch/mips/include/asm/cdmm.h
new file mode 100644 (file)
index 0000000..16e22ce
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * 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 weak 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 __weak 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)
+
+/* 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 */