uboot/include/dm/device-internal.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2013 Google, Inc
   3 *
   4 * (C) Copyright 2012
   5 * Pavel Herrmann <morpheus.ibis@gmail.com>
   6 * Marek Vasut <marex@denx.de>
   7 *
   8 * SPDX-License-Identifier:     GPL-2.0+
   9 */
  10
  11#ifndef _DM_DEVICE_INTERNAL_H
  12#define _DM_DEVICE_INTERNAL_H
  13
  14struct udevice;
  15
  16/**
  17 * device_bind() - Create a device and bind it to a driver
  18 *
  19 * Called to set up a new device attached to a driver. The device will either
  20 * have platdata, or a device tree node which can be used to create the
  21 * platdata.
  22 *
  23 * Once bound a device exists but is not yet active until device_probe() is
  24 * called.
  25 *
  26 * @parent: Pointer to device's parent, under which this driver will exist
  27 * @drv: Device's driver
  28 * @name: Name of device (e.g. device tree node name)
  29 * @platdata: Pointer to data for this device - the structure is device-
  30 * specific but may include the device's I/O address, etc.. This is NULL for
  31 * devices which use device tree.
  32 * @of_offset: Offset of device tree node for this device. This is -1 for
  33 * devices which don't use device tree.
  34 * @devp: if non-NULL, returns a pointer to the bound device
  35 * @return 0 if OK, -ve on error
  36 */
  37int device_bind(struct udevice *parent, const struct driver *drv,
  38                const char *name, void *platdata, int of_offset,
  39                struct udevice **devp);
  40
  41/**
  42 * device_bind_with_driver_data() - Create a device and bind it to a driver
  43 *
  44 * Called to set up a new device attached to a driver, in the case where the
  45 * driver was matched to the device by means of a match table that provides
  46 * driver_data.
  47 *
  48 * Once bound a device exists but is not yet active until device_probe() is
  49 * called.
  50 *
  51 * @parent: Pointer to device's parent, under which this driver will exist
  52 * @drv: Device's driver
  53 * @name: Name of device (e.g. device tree node name)
  54 * @driver_data: The driver_data field from the driver's match table.
  55 * @of_offset: Offset of device tree node for this device. This is -1 for
  56 * devices which don't use device tree.
  57 * @devp: if non-NULL, returns a pointer to the bound device
  58 * @return 0 if OK, -ve on error
  59 */
  60int device_bind_with_driver_data(struct udevice *parent,
  61                                 const struct driver *drv, const char *name,
  62                                 ulong driver_data, int of_offset,
  63                                 struct udevice **devp);
  64
  65/**
  66 * device_bind_by_name: Create a device and bind it to a driver
  67 *
  68 * This is a helper function used to bind devices which do not use device
  69 * tree.
  70 *
  71 * @parent: Pointer to device's parent
  72 * @pre_reloc_only: If true, bind the driver only if its DM_INIT_F flag is set.
  73 * If false bind the driver always.
  74 * @info: Name and platdata for this device
  75 * @devp: if non-NULL, returns a pointer to the bound device
  76 * @return 0 if OK, -ve on error
  77 */
  78int device_bind_by_name(struct udevice *parent, bool pre_reloc_only,
  79                        const struct driver_info *info, struct udevice **devp);
  80
  81/**
  82 * device_probe() - Probe a device, activating it
  83 *
  84 * Activate a device so that it is ready for use. All its parents are probed
  85 * first.
  86 *
  87 * @dev: Pointer to device to probe
  88 * @return 0 if OK, -ve on error
  89 */
  90int device_probe(struct udevice *dev);
  91
  92/**
  93 * device_remove() - Remove a device, de-activating it
  94 *
  95 * De-activate a device so that it is no longer ready for use. All its
  96 * children are deactivated first.
  97 *
  98 * @dev: Pointer to device to remove
  99 * @return 0 if OK, -ve on error (an error here is normally a very bad thing)
 100 */
 101#if CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)
 102int device_remove(struct udevice *dev);
 103#else
 104static inline int device_remove(struct udevice *dev) { return 0; }
 105#endif
 106
 107/**
 108 * device_unbind() - Unbind a device, destroying it
 109 *
 110 * Unbind a device and remove all memory used by it
 111 *
 112 * @dev: Pointer to device to unbind
 113 * @return 0 if OK, -ve on error
 114 */
 115#if CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)
 116int device_unbind(struct udevice *dev);
 117#else
 118static inline int device_unbind(struct udevice *dev) { return 0; }
 119#endif
 120
 121#if CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)
 122void device_free(struct udevice *dev);
 123#else
 124static inline void device_free(struct udevice *dev) {}
 125#endif
 126
 127/**
 128 * simple_bus_translate() - translate a bus address to a system address
 129 *
 130 * This handles the 'ranges' property in a simple bus. It translates the
 131 * device address @addr to a system address using this property.
 132 *
 133 * @dev:        Simple bus device (parent of target device)
 134 * @addr:       Address to translate
 135 * @return new address
 136 */
 137fdt_addr_t simple_bus_translate(struct udevice *dev, fdt_addr_t addr);
 138
 139/* Cast away any volatile pointer */
 140#define DM_ROOT_NON_CONST               (((gd_t *)gd)->dm_root)
 141#define DM_UCLASS_ROOT_NON_CONST        (((gd_t *)gd)->uclass_root)
 142
 143/* device resource management */
 144#ifdef CONFIG_DEVRES
 145
 146/**
 147 * devres_release_probe - Release managed resources allocated after probing
 148 * @dev: Device to release resources for
 149 *
 150 * Release all resources allocated for @dev when it was probed or later.
 151 * This function is called on driver removal.
 152 */
 153void devres_release_probe(struct udevice *dev);
 154
 155/**
 156 * devres_release_all - Release all managed resources
 157 * @dev: Device to release resources for
 158 *
 159 * Release all resources associated with @dev.  This function is
 160 * called on driver unbinding.
 161 */
 162void devres_release_all(struct udevice *dev);
 163
 164#else /* ! CONFIG_DEVRES */
 165
 166static inline void devres_release_probe(struct udevice *dev)
 167{
 168}
 169
 170static inline void devres_release_all(struct udevice *dev)
 171{
 172}
 173
 174#endif /* ! CONFIG_DEVRES */
 175#endif
 176