cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cdmm.h (3761B)


      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 */
     22struct 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 */
     42struct 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 */
     64phys_addr_t mips_cdmm_phys_base(void);
     65
     66extern struct bus_type mips_cdmm_bustype;
     67void __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
     74int mips_cdmm_driver_register(struct mips_cdmm_driver *);
     75void 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
    101int setup_early_fdc_console(void);
    102#else
    103static inline int setup_early_fdc_console(void)
    104{
    105	return -ENODEV;
    106}
    107#endif
    108
    109#endif /* __ASM_CDMM_H */