103df61656820e64c6035b3e419dd7b3c5931e0f
[keystone-rtos/rm-lld.git] / include / rm_dtb_utilloc.h
1 /*
2  *  file  rm_dtb_utilloc.h
3  *
4  *  Private Resource List and Policy DTB Parsing Utilities
5  *
6  *  ============================================================================
7  *      (C) Copyright 2012, Texas Instruments, Inc.
8  * 
9  *  Redistribution and use in source and binary forms, with or without 
10  *  modification, are permitted provided that the following conditions 
11  *  are met:
12  *
13  *    Redistributions of source code must retain the above copyright 
14  *    notice, this list of conditions and the following disclaimer.
15  *
16  *    Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the 
18  *    documentation and/or other materials provided with the   
19  *    distribution.
20  *
21  *    Neither the name of Texas Instruments Incorporated nor the names of
22  *    its contributors may be used to endorse or promote products derived
23  *    from this software without specific prior written permission.
24  *
25  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
26  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
27  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
29  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
30  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
31  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
34  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
35  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  *
37  *  \par
38 */
40 #ifndef RM_DTB_UTILLOC_H_
41 #define RM_DTB_UTILLOC_H_
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
47 /**********************************************************************
48  *************Common RM DTB Parsing Defines and Functions**************
49  **********************************************************************/
51 /** 
52 * @brief LIBFDT's return codes start at 1.  Map a return value of 0 to an okay result
53 *        from the LIBFDT APIs
54 */
55 #define RM_DTB_UTIL_RESULT_OKAY 0
56 /** 
57 * @brief DTB starting node offset for parsing
58 */
59 #define RM_DTB_UTIL_STARTING_NODE_OFFSET 0
60 /** 
61 * @brief DTB starting depth for parsing
62 */
63 #define RM_DTB_UTIL_STARTING_DEPTH 0
65 typedef struct {
66     uint32_t base;
67     uint32_t length;
68     void *nextRange;
69 } Rm_ResourceRange;
71 /**********************************************************************
72  ***********Resource List DTB Parsing Defines and Functions************
73  **********************************************************************/
75 /** 
76 * @brief Linux DTB alias offset not set
77 */
78 #define RM_DTB_LINUX_ALIAS_OFFSET_NOT_SET 0xFFFF
80 typedef enum {
81     /** Resource DTB unknown property type */
82     Rm_resourcePropType_UNKNOWN = 0,
83     /** Resource DTB device name property type */
84     Rm_resourcePropType_DEVICE_NAME = 1,    
85     /** Resource DTB resource range property type */
86     Rm_resourcePropType_RESOURCE_RANGE = 2,
87     /** Resource DTB resource alias path in Linux DTB */
88     Rm_resourcePropType_RESOURCE_LINUX_ALIAS = 3,    
89     /** Resource DTB NameServer assignment property type */
90     Rm_resourcePropType_NSASSIGNMENT = 4,    
91 } Rm_ResourcePropType;
93 typedef struct {
94     char *path;
95     uint32_t baseOffset;
96     uint32_t lengthOffset;
97     void *nextLinuxAlias;
98 } Rm_LinuxAlias;
100 typedef struct {
101     char *nsName;
102     uint32_t resourceBase;
103     uint32_t resourceLength;
104     void *nextNsAssignment;
105 } Rm_NsAssignment;
107 Rm_ResourcePropType Rm_resourceGetPropertyType(const char *propertyName);
108 char *Rm_resourceExtractDeviceName(const void *dtbDataPtr, int32_t dtbDataLen);
109 void Rm_resourceFreeDeviceName(char *deviceName);
110 Rm_ResourceRange *Rm_resourceExtractRange(const void *dtbDataPtr, int32_t dtbDataLen);
111 void Rm_resourceFreeRange(Rm_ResourceRange *rangeList);
112 Rm_LinuxAlias *Rm_resourceExtractLinuxAlias(const void *dtbDataPtr, int32_t dtbDataLen);
113 void Rm_resourceFreeLinuxAlias(Rm_LinuxAlias *aliasList);
114 Rm_NsAssignment *Rm_resourceExtractNsAssignment(const void *dtbDataPtr, int32_t dtbDataLen);
115 void Rm_resourceFreeNsAssignmentList(Rm_NsAssignment *nsAssignmentList);
117 /**********************************************************************
118  ***************Policy DTB Parsing Defines and Functions***************
119  **********************************************************************/
121 typedef enum {
122     /** Policy DTB unknown property type */
123     Rm_policyPropType_UNKNOWN = 0,
124     /** Policy DTB policy type property type */
125     Rm_policyPropType_POLICY_TYPE = 1,      
126     /** Policy DTB resource assigned ranges property type */
127     Rm_policyPropType_RESOURCE_ASSIGNED_RANGES = 2,
128     /** Policy DTB resource allocation sizes property type */
129     Rm_policyPropType_RESOURCE_ALLOCATION_SIZES = 3,
130     /** Policy DTB assigned NameServer names property type */
131     Rm_policyPropType_ASSIGNED_NS_NAMES = 4,    
132 } Rm_PolicyPropType;
134 typedef struct {
135     uint32_t allocationSize;
136     void *nextAllocationSize;
137 } Rm_AllocationSize;
139 typedef struct {
140     char *assignedName;
141     void *nextAssignedName;
142 } Rm_AssignedNsNames;
144 Rm_PolicyPropType Rm_policyGetPropertyType(const char *propertyName);
145 char *Rm_policyExtractPolicyType(const void *dtbDataPtr, int32_t dtbDataLen);
146 void Rm_policyFreePolicyType(char *policyType);
147 Rm_ResourceRange *Rm_policyExtractAssignedRanges(const void *dtbDataPtr, int32_t dtbDataLen);
148 void Rm_policyFreeAssignedRanges(Rm_ResourceRange *rangeList);
149 Rm_AllocationSize *Rm_policyExtractAllocationSizes(const void *dtbDataPtr, int32_t dtbDataLen);
150 void Rm_policyFreeAllocationSizesPropList(Rm_AllocationSize *allocationSizeList);
151 Rm_AssignedNsNames *Rm_policyExtractAssignedNsNames(const void *dtbDataPtr, int32_t dtbDataLen);
152 void Rm_policyFreeAssignmentNsNamesList(Rm_AssignedNsNames *assignedNsNamesList);
154 /**********************************************************************
155  ****************Linux DTB Parsing Defines and Functions***************
156  **********************************************************************/
158 typedef struct {
159     uint32_t value;
160     void *nextValue;
161 } Rm_LinuxValueRange;
163 Rm_LinuxValueRange *Rm_linuxExtractValues(const void *dtbDataPtr, int32_t dtbDataLen);
164 void Rm_linuxFreeValues(Rm_LinuxValueRange *valueList);
166 #ifdef __cplusplus
168 #endif
170 #endif /* RM_DTB_UTILLOC_H_ */