]>
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 | |
bb58503d SG |
58 | /** |
59 | * dm_scan_other() - Scan for other devices | |
60 | * | |
61 | * Some devices may not be visible to Driver Model. This weak function can | |
62 | * be provided by boards which wish to create their own devices | |
63 | * programmaticaly. They should do this by calling device_bind() on each | |
64 | * device. | |
65 | * | |
66 | * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC | |
67 | * flag. If false bind all drivers. | |
68 | */ | |
69 | int dm_scan_other(bool pre_reloc_only); | |
70 | ||
ab7cd627 SG |
71 | /** |
72 | * dm_init_and_scan() - Initialise Driver Model structures and scan for devices | |
73 | * | |
74 | * This function initialises the roots of the driver tree and uclass trees, | |
75 | * then scans and binds available devices from platform data and the FDT. | |
76 | * This calls dm_init() to set up Driver Model structures. | |
77 | * | |
78 | * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC | |
79 | * flag. If false bind all drivers. | |
80 | * @return 0 if OK, -ve on error | |
81 | */ | |
82 | int dm_init_and_scan(bool pre_reloc_only); | |
83 | ||
6494d708 | 84 | /** |
f2bc6fc3 | 85 | * dm_init() - Initialise Driver Model structures |
6494d708 SG |
86 | * |
87 | * This function will initialize roots of driver tree and class tree. | |
88 | * This needs to be called before anything uses the DM | |
89 | * | |
19c8205e | 90 | * @of_live: Enable live device tree |
6494d708 SG |
91 | * @return 0 if OK, -ve on error |
92 | */ | |
19c8205e | 93 | int dm_init(bool of_live); |
6494d708 | 94 | |
9adbd7a1 SG |
95 | /** |
96 | * dm_uninit - Uninitialise Driver Model structures | |
97 | * | |
98 | * All devices will be removed and unbound | |
99 | * @return 0 if OK, -ve on error | |
100 | */ | |
101 | int dm_uninit(void); | |
102 | ||
bc85aa40 SR |
103 | #if CONFIG_IS_ENABLED(DM_DEVICE_REMOVE) |
104 | /** | |
105 | * dm_remove_devices_flags - Call remove function of all drivers with | |
106 | * specific removal flags set to selectively | |
107 | * remove drivers | |
108 | * | |
109 | * All devices with the matching flags set will be removed | |
110 | * | |
111 | * @flags: Flags for selective device removal | |
112 | * @return 0 if OK, -ve on error | |
113 | */ | |
114 | int dm_remove_devices_flags(uint flags); | |
115 | #else | |
116 | static inline int dm_remove_devices_flags(uint flags) { return 0; } | |
117 | #endif | |
118 | ||
6494d708 | 119 | #endif |