]>
Commit | Line | Data |
---|---|---|
6494d708 SG |
1 | /* |
2 | * Copyright (c) 2013 Google, Inc | |
3 | * | |
4 | * (C) Copyright 2012 | |
5 | * Pavel Herrmann <morpheus.ibis@gmail.com> | |
6 | * | |
7 | * SPDX-License-Identifier: GPL-2.0+ | |
8 | */ | |
9 | ||
10 | #ifndef _DM_ROOT_H_ | |
11 | #define _DM_ROOT_H_ | |
12 | ||
54c5d08a | 13 | struct udevice; |
6494d708 SG |
14 | |
15 | /** | |
16 | * dm_root() - Return pointer to the top of the driver tree | |
17 | * | |
18 | * This function returns pointer to the root node of the driver tree, | |
19 | * | |
20 | * @return pointer to root device, or NULL if not inited yet | |
21 | */ | |
54c5d08a | 22 | struct udevice *dm_root(void); |
6494d708 | 23 | |
2f11cd91 SG |
24 | struct global_data; |
25 | /** | |
26 | * dm_fixup_for_gd_move() - Handle global_data moving to a new place | |
27 | * | |
28 | * The uclass list is part of global_data. Due to the way lists work, moving | |
29 | * the list will cause it to become invalid. This function fixes that up so | |
30 | * that the uclass list will work correctly. | |
31 | */ | |
32 | void dm_fixup_for_gd_move(struct global_data *new_gd); | |
33 | ||
6494d708 SG |
34 | /** |
35 | * dm_scan_platdata() - Scan all platform data and bind drivers | |
36 | * | |
37 | * This scans all available platdata and creates drivers for each | |
38 | * | |
00606d7e SG |
39 | * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC |
40 | * flag. If false bind all drivers. | |
6494d708 SG |
41 | * @return 0 if OK, -ve on error |
42 | */ | |
00606d7e | 43 | int dm_scan_platdata(bool pre_reloc_only); |
6494d708 SG |
44 | |
45 | /** | |
46 | * dm_scan_fdt() - Scan the device tree and bind drivers | |
47 | * | |
0040b944 SG |
48 | * This scans the device tree and creates a driver for each node. Only |
49 | * the top-level subnodes are examined. | |
6494d708 SG |
50 | * |
51 | * @blob: Pointer to device tree blob | |
00606d7e SG |
52 | * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC |
53 | * flag. If false bind all drivers. | |
6494d708 SG |
54 | * @return 0 if OK, -ve on error |
55 | */ | |
00606d7e | 56 | int dm_scan_fdt(const void *blob, bool pre_reloc_only); |
6494d708 | 57 | |
e81c9864 PC |
58 | /** |
59 | * dm_extended_scan_fdt() - Scan the device tree and bind drivers | |
60 | * | |
61 | * This calls dm_scna_dft() which scans the device tree and creates a driver | |
62 | * for each node. the top-level subnodes are examined and also all sub-nodes | |
63 | * of "clocks" node. | |
64 | * | |
65 | * @blob: Pointer to device tree blob | |
66 | * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC | |
67 | * flag. If false bind all drivers. | |
68 | * @return 0 if OK, -ve on error | |
69 | */ | |
70 | int dm_extended_scan_fdt(const void *blob, bool pre_reloc_only); | |
71 | ||
bb58503d SG |
72 | /** |
73 | * dm_scan_other() - Scan for other devices | |
74 | * | |
75 | * Some devices may not be visible to Driver Model. This weak function can | |
76 | * be provided by boards which wish to create their own devices | |
77 | * programmaticaly. They should do this by calling device_bind() on each | |
78 | * device. | |
79 | * | |
80 | * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC | |
81 | * flag. If false bind all drivers. | |
82 | */ | |
83 | int dm_scan_other(bool pre_reloc_only); | |
84 | ||
ab7cd627 SG |
85 | /** |
86 | * dm_init_and_scan() - Initialise Driver Model structures and scan for devices | |
87 | * | |
88 | * This function initialises the roots of the driver tree and uclass trees, | |
89 | * then scans and binds available devices from platform data and the FDT. | |
90 | * This calls dm_init() to set up Driver Model structures. | |
91 | * | |
92 | * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC | |
93 | * flag. If false bind all drivers. | |
94 | * @return 0 if OK, -ve on error | |
95 | */ | |
96 | int dm_init_and_scan(bool pre_reloc_only); | |
97 | ||
6494d708 | 98 | /** |
f2bc6fc3 | 99 | * dm_init() - Initialise Driver Model structures |
6494d708 SG |
100 | * |
101 | * This function will initialize roots of driver tree and class tree. | |
102 | * This needs to be called before anything uses the DM | |
103 | * | |
19c8205e | 104 | * @of_live: Enable live device tree |
6494d708 SG |
105 | * @return 0 if OK, -ve on error |
106 | */ | |
19c8205e | 107 | int dm_init(bool of_live); |
6494d708 | 108 | |
9adbd7a1 SG |
109 | /** |
110 | * dm_uninit - Uninitialise Driver Model structures | |
111 | * | |
112 | * All devices will be removed and unbound | |
113 | * @return 0 if OK, -ve on error | |
114 | */ | |
115 | int dm_uninit(void); | |
116 | ||
bc85aa40 SR |
117 | #if CONFIG_IS_ENABLED(DM_DEVICE_REMOVE) |
118 | /** | |
119 | * dm_remove_devices_flags - Call remove function of all drivers with | |
120 | * specific removal flags set to selectively | |
121 | * remove drivers | |
122 | * | |
123 | * All devices with the matching flags set will be removed | |
124 | * | |
125 | * @flags: Flags for selective device removal | |
126 | * @return 0 if OK, -ve on error | |
127 | */ | |
128 | int dm_remove_devices_flags(uint flags); | |
129 | #else | |
130 | static inline int dm_remove_devices_flags(uint flags) { return 0; } | |
131 | #endif | |
132 | ||
6494d708 | 133 | #endif |