linux/arch/mips/include/asm/cdmm.h
<<
>>
Prefs
   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/* drivers/tty/mips_ejtag_fdc.c */
  88
  89#ifdef CONFIG_MIPS_EJTAG_FDC_EARLYCON
  90int setup_early_fdc_console(void);
  91#else
  92static inline int setup_early_fdc_console(void)
  93{
  94        return -ENODEV;
  95}
  96#endif
  97
  98#endif /* __ASM_CDMM_H */
  99