Blame view

kernel/linux-rt-4.4.41/arch/mips/include/asm/cdmm.h 3.67 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  /*
   * 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 */