1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef SDS_PRIVATE_H 8*91f16700Schasinglulu #define SDS_PRIVATE_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu /* SDS Header defines */ 11*91f16700Schasinglulu #define SDS_HEADER_ID_SHIFT 0 12*91f16700Schasinglulu #define SDS_HEADER_ID_WIDTH 16 13*91f16700Schasinglulu #define SDS_HEADER_ID_MASK ((1 << SDS_HEADER_ID_WIDTH) - 1) 14*91f16700Schasinglulu 15*91f16700Schasinglulu #define SDS_HEADER_MINOR_VERSION_WIDTH 8 16*91f16700Schasinglulu #define SDS_HEADER_MINOR_VERSION_SHIFT 16 17*91f16700Schasinglulu #define SDS_HEADER_MAJOR_VERSION_WIDTH 8 18*91f16700Schasinglulu 19*91f16700Schasinglulu #define MAKE_SDS_HEADER_VERSION(major, minor) \ 20*91f16700Schasinglulu (((((major) & 0xff) << SDS_HEADER_MINOR_VERSION_WIDTH) | ((minor) & 0xff))) 21*91f16700Schasinglulu #define SDS_HEADER_VERSION_MASK \ 22*91f16700Schasinglulu ((1 << (SDS_HEADER_MINOR_VERSION_WIDTH + SDS_HEADER_MAJOR_VERSION_WIDTH)) - 1) 23*91f16700Schasinglulu 24*91f16700Schasinglulu #define SDS_HEADER_VERSION MAKE_SDS_HEADER_VERSION(1, 0) 25*91f16700Schasinglulu #define SDS_HEADER_STRUCT_SIZE_WIDTH 23 26*91f16700Schasinglulu #define SDS_HEADER_STRUCT_SIZE_SHIFT 1 27*91f16700Schasinglulu #define SDS_HEADER_STRUCT_SIZE_MASK ((1 << SDS_HEADER_STRUCT_SIZE_WIDTH) - 1) 28*91f16700Schasinglulu #define SDS_HEADER_VALID_MASK 0x1 29*91f16700Schasinglulu #define SDS_HEADER_VALID_SHIFT 0 30*91f16700Schasinglulu #define SDS_HEADER_SIZE 0x8 31*91f16700Schasinglulu 32*91f16700Schasinglulu /* Arbitrary, 16 bit value that indicates a valid SDS Memory Region */ 33*91f16700Schasinglulu #define SDS_REGION_SIGNATURE 0xAA7A 34*91f16700Schasinglulu #define SDS_REGION_SIGNATURE_WIDTH 16 35*91f16700Schasinglulu #define SDS_REGION_SIGNATURE_SHIFT 0 36*91f16700Schasinglulu #define SDS_REGION_SIGNATURE_MASK ((1 << SDS_REGION_SIGNATURE_WIDTH) - 1) 37*91f16700Schasinglulu 38*91f16700Schasinglulu #define SDS_REGION_STRUCT_COUNT_SHIFT 16 39*91f16700Schasinglulu #define SDS_REGION_STRUCT_COUNT_WIDTH 8 40*91f16700Schasinglulu #define SDS_REGION_STRUCT_COUNT_MASK ((1 << SDS_REGION_STRUCT_COUNT_WIDTH) - 1) 41*91f16700Schasinglulu 42*91f16700Schasinglulu #define SDS_REGION_SCH_MINOR_SHIFT 24 43*91f16700Schasinglulu #define SDS_REGION_SCH_MINOR_WIDTH 4 44*91f16700Schasinglulu #define SDS_REGION_SCH_MINOR_MASK ((1 << SDS_REGION_SCH_MINOR_WIDTH) - 1) 45*91f16700Schasinglulu 46*91f16700Schasinglulu #define SDS_REGION_SCH_MAJOR_SHIFT 28 47*91f16700Schasinglulu #define SDS_REGION_SCH_MAJOR_WIDTH 4 48*91f16700Schasinglulu #define SDS_REGION_SCH_MAJOR_MASK ((1 << SDS_REGION_SCH_MAJOR_WIDTH) - 1) 49*91f16700Schasinglulu 50*91f16700Schasinglulu #define SDS_REGION_SCH_VERSION_MASK \ 51*91f16700Schasinglulu ((1 << (SDS_REGION_SCH_MINOR_WIDTH + SDS_REGION_SCH_MAJOR_WIDTH)) - 1) 52*91f16700Schasinglulu 53*91f16700Schasinglulu #define MAKE_SDS_REGION_SCH_VERSION(maj, min) \ 54*91f16700Schasinglulu ((((maj) & SDS_REGION_SCH_MAJOR_MASK) << SDS_REGION_SCH_MINOR_WIDTH) | \ 55*91f16700Schasinglulu ((min) & SDS_REGION_SCH_MINOR_MASK)) 56*91f16700Schasinglulu 57*91f16700Schasinglulu #define SDS_REGION_SCH_VERSION MAKE_SDS_REGION_SCH_VERSION(1, 0) 58*91f16700Schasinglulu #define SDS_REGION_REGIONSIZE_OFFSET 0x4 59*91f16700Schasinglulu #define SDS_REGION_DESC_SIZE 0x8 60*91f16700Schasinglulu 61*91f16700Schasinglulu #ifndef __ASSEMBLER__ 62*91f16700Schasinglulu #include <stddef.h> 63*91f16700Schasinglulu #include <stdint.h> 64*91f16700Schasinglulu 65*91f16700Schasinglulu /* Header containing Shared Data Structure metadata */ 66*91f16700Schasinglulu typedef struct structure_header { 67*91f16700Schasinglulu uint32_t reg[2]; 68*91f16700Schasinglulu } struct_header_t; 69*91f16700Schasinglulu 70*91f16700Schasinglulu #define GET_SDS_HEADER_ID(_header) \ 71*91f16700Schasinglulu ((((struct_header_t *)(_header))->reg[0]) & SDS_HEADER_ID_MASK) 72*91f16700Schasinglulu #define GET_SDS_HEADER_VERSION(_header) \ 73*91f16700Schasinglulu (((((struct_header_t *)(_header))->reg[0]) >> SDS_HEADER_MINOR_VERSION_SHIFT)\ 74*91f16700Schasinglulu & SDS_HEADER_VERSION_MASK) 75*91f16700Schasinglulu #define GET_SDS_HEADER_STRUCT_SIZE(_header) \ 76*91f16700Schasinglulu (((((struct_header_t *)(_header))->reg[1]) >> SDS_HEADER_STRUCT_SIZE_SHIFT)\ 77*91f16700Schasinglulu & SDS_HEADER_STRUCT_SIZE_MASK) 78*91f16700Schasinglulu #define IS_SDS_HEADER_VALID(_header) \ 79*91f16700Schasinglulu ((((struct_header_t *)(_header))->reg[1]) & SDS_HEADER_VALID_MASK) 80*91f16700Schasinglulu #define GET_SDS_STRUCT_FIELD(_header, _field_offset) \ 81*91f16700Schasinglulu ((((uint8_t *)(_header)) + sizeof(struct_header_t)) + (_field_offset)) 82*91f16700Schasinglulu 83*91f16700Schasinglulu /* Region Descriptor describing the SDS Memory Region */ 84*91f16700Schasinglulu typedef struct region_descriptor { 85*91f16700Schasinglulu uint32_t reg[2]; 86*91f16700Schasinglulu } region_desc_t; 87*91f16700Schasinglulu 88*91f16700Schasinglulu #define IS_SDS_REGION_VALID(region) \ 89*91f16700Schasinglulu (((((region_desc_t *)(region))->reg[0]) & SDS_REGION_SIGNATURE_MASK) == SDS_REGION_SIGNATURE) 90*91f16700Schasinglulu #define GET_SDS_REGION_STRUCTURE_COUNT(region) \ 91*91f16700Schasinglulu (((((region_desc_t *)(region))->reg[0]) >> SDS_REGION_STRUCT_COUNT_SHIFT)\ 92*91f16700Schasinglulu & SDS_REGION_STRUCT_COUNT_MASK) 93*91f16700Schasinglulu #define GET_SDS_REGION_SCHEMA_VERSION(region) \ 94*91f16700Schasinglulu (((((region_desc_t *)(region))->reg[0]) >> SDS_REGION_SCH_MINOR_SHIFT)\ 95*91f16700Schasinglulu & SDS_REGION_SCH_VERSION_MASK) 96*91f16700Schasinglulu #define GET_SDS_REGION_SIZE(region) ((((region_desc_t *)(region))->reg[1])) 97*91f16700Schasinglulu 98*91f16700Schasinglulu #endif /* __ASSEMBLER__ */ 99*91f16700Schasinglulu 100*91f16700Schasinglulu #endif /* SDS_PRIVATE_H */ 101