LCOV - code coverage report
Current view: top level - drivers/common/dpaax - dpaa_of.h (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 3 0.0 %
Date: 2024-12-01 18:57:19 Functions: 0 0 -
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 96 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
       2                 :            :  *
       3                 :            :  * Copyright 2010-2016 Freescale Semiconductor, Inc.
       4                 :            :  * Copyright 2017 NXP
       5                 :            :  *
       6                 :            :  */
       7                 :            : 
       8                 :            : #ifndef __OF_H
       9                 :            : #define __OF_H
      10                 :            : 
      11                 :            : #include <unistd.h>
      12                 :            : #include <stdio.h>
      13                 :            : #include <string.h>
      14                 :            : #include <stdbool.h>
      15                 :            : #include <stdlib.h>
      16                 :            : #include <inttypes.h>
      17                 :            : #include <sys/stat.h>
      18                 :            : #include <sys/types.h>
      19                 :            : #include <dirent.h>
      20                 :            : #include <fcntl.h>
      21                 :            : #include <glob.h>
      22                 :            : #include <errno.h>
      23                 :            : #include <ctype.h>
      24                 :            : #include <limits.h>
      25                 :            : #include <rte_common.h>
      26                 :            : #include <dpaa_list.h>
      27                 :            : #include <rte_compat.h>
      28                 :            : 
      29                 :            : #ifndef OF_INIT_DEFAULT_PATH
      30                 :            : #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
      31                 :            : #endif
      32                 :            : 
      33                 :            : #define OF_DEFAULT_NA 1
      34                 :            : #define OF_DEFAULT_NS 1
      35                 :            : 
      36                 :            : #define OF_FILE_BUF_MAX 256
      37                 :            : 
      38                 :            : /**
      39                 :            :  * Layout of Device Tree:
      40                 :            :  * dt_dir
      41                 :            :  *  |- dt_dir
      42                 :            :  *  |   |- dt_dir
      43                 :            :  *  |   |  |- dt_dir
      44                 :            :  *  |   |  |  |- dt_file
      45                 :            :  *  |   |  |  ``- dt_file
      46                 :            :  *  |   |  ``- dt_file
      47                 :            :  *  |   `-dt_file`
      48                 :            :  *  ``- dt_file
      49                 :            :  *
      50                 :            :  *  +------------------+
      51                 :            :  *  |dt_dir            |
      52                 :            :  *  |+----------------+|
      53                 :            :  *  ||dt_node         ||
      54                 :            :  *  ||+--------------+||
      55                 :            :  *  |||device_node   |||
      56                 :            :  *  ||+--------------+||
      57                 :            :  *  || list_dt_nodes  ||
      58                 :            :  *  |+----------------+|
      59                 :            :  *  | list of subdir   |
      60                 :            :  *  | list of files    |
      61                 :            :  *  +------------------+
      62                 :            :  */
      63                 :            : 
      64                 :            : /**
      65                 :            :  * Device description on of a device node in device tree.
      66                 :            :  */
      67                 :            : struct device_node {
      68                 :            :         char name[NAME_MAX];
      69                 :            :         char full_name[PATH_MAX];
      70                 :            : };
      71                 :            : 
      72                 :            : /**
      73                 :            :  * List of device nodes available in a device tree layout
      74                 :            :  */
      75                 :            : struct dt_node {
      76                 :            :         struct device_node node; /**< Property of node */
      77                 :            :         int is_file; /**< FALSE==dir, TRUE==file */
      78                 :            :         struct list_head list; /**< Nodes within a parent subdir */
      79                 :            : };
      80                 :            : 
      81                 :            : /**
      82                 :            :  * Types we use to represent directories and files
      83                 :            :  */
      84                 :            : struct dt_file;
      85                 :            : struct dt_dir {
      86                 :            :         struct dt_node node;
      87                 :            :         struct list_head subdirs;
      88                 :            :         struct list_head files;
      89                 :            :         struct list_head linear;
      90                 :            :         struct dt_dir *parent;
      91                 :            :         struct dt_file *compatible;
      92                 :            :         struct dt_file *status;
      93                 :            :         struct dt_file *lphandle;
      94                 :            :         struct dt_file *a_cells;
      95                 :            :         struct dt_file *s_cells;
      96                 :            :         struct dt_file *reg;
      97                 :            : };
      98                 :            : 
      99                 :            : struct dt_file {
     100                 :            :         struct dt_node node;
     101                 :            :         struct dt_dir *parent;
     102                 :            :         ssize_t len;
     103                 :            :         uint64_t buf[OF_FILE_BUF_MAX >> 3];
     104                 :            : };
     105                 :            : 
     106                 :            : __rte_internal
     107                 :            : const struct device_node *of_find_compatible_node(
     108                 :            :                                         const struct device_node *from,
     109                 :            :                                         const char *type __rte_unused,
     110                 :            :                                         const char *compatible)
     111                 :            :         __attribute__((nonnull(3)));
     112                 :            : 
     113                 :            : #define for_each_compatible_node(dev_node, type, compatible) \
     114                 :            :         for (dev_node = of_find_compatible_node(NULL, type, compatible); \
     115                 :            :                 dev_node != NULL; \
     116                 :            :                 dev_node = of_find_compatible_node(dev_node, type, compatible))
     117                 :            : 
     118                 :            : __rte_internal
     119                 :            : const void *of_get_property(const struct device_node *from, const char *name,
     120                 :            :                             size_t *lenp) __attribute__((nonnull(2)));
     121                 :            : __rte_internal
     122                 :            : bool of_device_is_available(const struct device_node *dev_node);
     123                 :            : 
     124                 :            : __rte_internal
     125                 :            : const struct device_node *of_find_node_by_phandle(uint64_t ph);
     126                 :            : 
     127                 :            : __rte_internal
     128                 :            : const struct device_node *of_get_parent(const struct device_node *dev_node);
     129                 :            : 
     130                 :            : __rte_internal
     131                 :            : const struct device_node *of_get_next_child(const struct device_node *dev_node,
     132                 :            :                                             const struct device_node *prev);
     133                 :            : 
     134                 :            : __rte_internal
     135                 :            : const void *of_get_mac_address(const struct device_node *np);
     136                 :            : 
     137                 :            : #define for_each_child_node(parent, child) \
     138                 :            :         for (child = of_get_next_child(parent, NULL); child != NULL; \
     139                 :            :                         child = of_get_next_child(parent, child))
     140                 :            : 
     141                 :            : __rte_internal
     142                 :            : uint32_t of_n_addr_cells(const struct device_node *dev_node);
     143                 :            : uint32_t of_n_size_cells(const struct device_node *dev_node);
     144                 :            : 
     145                 :            : __rte_internal
     146                 :            : const uint32_t *of_get_address(const struct device_node *dev_node, size_t idx,
     147                 :            :                                uint64_t *size, uint32_t *flags);
     148                 :            : 
     149                 :            : __rte_internal
     150                 :            : uint64_t of_translate_address(const struct device_node *dev_node,
     151                 :            :                               const uint32_t *addr) __attribute__((nonnull));
     152                 :            : 
     153                 :            : __rte_internal
     154                 :            : bool of_device_is_compatible(const struct device_node *dev_node,
     155                 :            :                              const char *compatible);
     156                 :            : 
     157                 :            : /* of_init() must be called prior to initialisation or use of any driver
     158                 :            :  * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers, etc.
     159                 :            :  * The path should usually be "/proc/device-tree".
     160                 :            :  */
     161                 :            : __rte_internal
     162                 :            : int of_init_path(const char *dt_path);
     163                 :            : 
     164                 :            : /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
     165                 :            :  * full reload is desired without a process exit.
     166                 :            :  */
     167                 :            : void of_finish(void);
     168                 :            : 
     169                 :            : /* Use of this wrapper is recommended. */
     170                 :            : static inline int of_init(void)
     171                 :            : {
     172                 :          0 :         return of_init_path(OF_INIT_DEFAULT_PATH);
     173                 :            : }
     174                 :            : 
     175                 :            : /* Read a numeric property according to its size and return it as a 64-bit
     176                 :            :  * value.
     177                 :            :  */
     178                 :            : static inline uint64_t of_read_number(const uint32_t *cell, int size)
     179                 :            : {
     180                 :            :         uint64_t r = 0;
     181                 :            : 
     182   [ #  #  #  #  :          0 :         while (size--)
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
     183                 :          0 :                 r = (r << 32) | be32toh(*(cell++));
     184                 :            :         return r;
     185                 :            : }
     186                 :            : 
     187                 :            : #endif  /*  __OF_H */

Generated by: LCOV version 1.14