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