iPXE
devtree.h
Go to the documentation of this file.
1 #ifndef _IPXE_DEVTREE_H
2 #define _IPXE_DEVTREE_H
3 
4 /** @file
5  *
6  * Devicetree bus
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 
12 #include <ipxe/device.h>
13 #include <ipxe/dma.h>
14 #include <ipxe/fdt.h>
15 
16 /** A devicetree device */
17 struct dt_device {
18  /** Device name */
19  const char *name;
20  /** Generic device */
21  struct device dev;
22  /** DMA device */
23  struct dma_device dma;
24  /** Driver for this device */
25  struct dt_driver *driver;
26  /** Driver-private data */
27  void *priv;
28 };
29 
30 /** A devicetree driver */
31 struct dt_driver {
32  /** Driver name */
33  const char *name;
34  /** Compatible programming model identifiers */
35  const char **ids;
36  /** Number of compatible programming model identifiers */
37  unsigned int id_count;
38  /**
39  * Probe device
40  *
41  * @v dt Devicetree device
42  * @v offset Starting node offset
43  * @ret rc Return status code
44  */
45  int ( * probe ) ( struct dt_device *dt, unsigned int offset );
46  /**
47  * Remove device
48  *
49  * @v dt Devicetree device
50  */
51  void ( * remove ) ( struct dt_device *dt );
52 };
53 
54 /** Devicetree driver table */
55 #define DT_DRIVERS __table ( struct dt_driver, "dt_drivers" )
56 
57 /** Declare a devicetree driver */
58 #define __dt_driver __table_entry ( DT_DRIVERS, 01 )
59 
60 /**
61  * Set devicetree driver-private data
62  *
63  * @v dt Devicetree device
64  * @v priv Private data
65  */
66 static inline void dt_set_drvdata ( struct dt_device *dt, void *priv ) {
67  dt->priv = priv;
68 }
69 
70 /**
71  * Get devicetree driver-private data
72  *
73  * @v dt Devicetree device
74  * @ret priv Private data
75  */
76 static inline void * dt_get_drvdata ( struct dt_device *dt ) {
77  return dt->priv;
78 }
79 
80 /**
81  * Get devicetree parent device
82  *
83  * @v dt Devicetree device
84  * @ret parent Parent devicetree device
85  */
86 static inline struct dt_device * dt_parent ( struct dt_device *dt ) {
87  return container_of ( dt->dev.parent, struct dt_device, dev );
88 }
89 
90 extern void * dt_ioremap ( struct dt_device *dt, unsigned int offset,
91  unsigned int index, size_t len );
92 extern int dt_probe_node ( struct device *parent, unsigned int offset );
93 extern void dt_remove_node ( struct device *parent );
94 extern int dt_probe_children ( struct dt_device *parent, unsigned int offset );
95 extern void dt_remove_children ( struct dt_device *parent );
96 
97 #endif /* _IPXE_DEVTREE_H */
void * dt_ioremap(struct dt_device *dt, unsigned int offset, unsigned int index, size_t len)
Map devicetree range.
Definition: devtree.c:52
void(* remove)(struct dt_device *dt)
Remove device.
Definition: devtree.h:51
const char ** ids
Compatible programming model identifiers.
Definition: devtree.h:35
A devicetree driver.
Definition: devtree.h:31
void dt_remove_node(struct device *parent)
Remove devicetree node.
Definition: devtree.c:241
long index
Definition: bigint.h:62
DMA mappings.
struct device * parent
Bus device.
Definition: device.h:88
struct device dev
Generic device.
Definition: devtree.h:21
int(* probe)(struct dt_device *dt, unsigned int offset)
Probe device.
Definition: devtree.h:45
A hardware device.
Definition: device.h:76
static struct dt_device * dt_parent(struct dt_device *dt)
Get devicetree parent device.
Definition: devtree.h:86
int dt_probe_node(struct device *parent, unsigned int offset)
Probe devicetree node.
Definition: devtree.c:196
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:35
ring len
Length.
Definition: dwmac.h:231
struct dt_driver * driver
Driver for this device.
Definition: devtree.h:25
A devicetree device.
Definition: devtree.h:17
void * priv
Driver-private data.
Definition: devtree.h:27
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
unsigned int id_count
Number of compatible programming model identifiers.
Definition: devtree.h:37
static void dt_set_drvdata(struct dt_device *dt, void *priv)
Set devicetree driver-private data.
Definition: devtree.h:66
const char * name
Device name.
Definition: devtree.h:19
void dt_remove_children(struct dt_device *parent)
Remove devicetree children.
Definition: devtree.c:310
const char * name
Driver name.
Definition: devtree.h:33
static struct tlan_private * priv
Definition: tlan.c:225
Flattened Device Tree.
Device model.
int dt_probe_children(struct dt_device *parent, unsigned int offset)
Probe devicetree children.
Definition: devtree.c:264
uint16_t offset
Offset to command line.
Definition: bzimage.h:8
struct dma_device dma
DMA device.
Definition: devtree.h:23
static void * dt_get_drvdata(struct dt_device *dt)
Get devicetree driver-private data.
Definition: devtree.h:76
A DMA-capable device.
Definition: dma.h:47