15932d194SAntonio Nino Diaz /* 25932d194SAntonio Nino Diaz * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 35932d194SAntonio Nino Diaz * 45932d194SAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause 55932d194SAntonio Nino Diaz */ 65932d194SAntonio Nino Diaz 75932d194SAntonio Nino Diaz #ifndef SDS_PRIVATE_H 85932d194SAntonio Nino Diaz #define SDS_PRIVATE_H 95932d194SAntonio Nino Diaz 105932d194SAntonio Nino Diaz /* SDS Header defines */ 115932d194SAntonio Nino Diaz #define SDS_HEADER_ID_SHIFT 0 125932d194SAntonio Nino Diaz #define SDS_HEADER_ID_WIDTH 16 135932d194SAntonio Nino Diaz #define SDS_HEADER_ID_MASK ((1 << SDS_HEADER_ID_WIDTH) - 1) 145932d194SAntonio Nino Diaz 155932d194SAntonio Nino Diaz #define SDS_HEADER_MINOR_VERSION_WIDTH 8 165932d194SAntonio Nino Diaz #define SDS_HEADER_MINOR_VERSION_SHIFT 16 175932d194SAntonio Nino Diaz #define SDS_HEADER_MAJOR_VERSION_WIDTH 8 185932d194SAntonio Nino Diaz 195932d194SAntonio Nino Diaz #define MAKE_SDS_HEADER_VERSION(major, minor) \ 205932d194SAntonio Nino Diaz (((((major) & 0xff) << SDS_HEADER_MINOR_VERSION_WIDTH) | ((minor) & 0xff))) 215932d194SAntonio Nino Diaz #define SDS_HEADER_VERSION_MASK \ 225932d194SAntonio Nino Diaz ((1 << (SDS_HEADER_MINOR_VERSION_WIDTH + SDS_HEADER_MAJOR_VERSION_WIDTH)) - 1) 235932d194SAntonio Nino Diaz 245932d194SAntonio Nino Diaz #define SDS_HEADER_VERSION MAKE_SDS_HEADER_VERSION(1, 0) 255932d194SAntonio Nino Diaz #define SDS_HEADER_STRUCT_SIZE_WIDTH 23 265932d194SAntonio Nino Diaz #define SDS_HEADER_STRUCT_SIZE_SHIFT 1 275932d194SAntonio Nino Diaz #define SDS_HEADER_STRUCT_SIZE_MASK ((1 << SDS_HEADER_STRUCT_SIZE_WIDTH) - 1) 285932d194SAntonio Nino Diaz #define SDS_HEADER_VALID_MASK 0x1 295932d194SAntonio Nino Diaz #define SDS_HEADER_VALID_SHIFT 0 305932d194SAntonio Nino Diaz #define SDS_HEADER_SIZE 0x8 315932d194SAntonio Nino Diaz 325932d194SAntonio Nino Diaz /* Arbitrary, 16 bit value that indicates a valid SDS Memory Region */ 335932d194SAntonio Nino Diaz #define SDS_REGION_SIGNATURE 0xAA7A 345932d194SAntonio Nino Diaz #define SDS_REGION_SIGNATURE_WIDTH 16 355932d194SAntonio Nino Diaz #define SDS_REGION_SIGNATURE_SHIFT 0 365932d194SAntonio Nino Diaz #define SDS_REGION_SIGNATURE_MASK ((1 << SDS_REGION_SIGNATURE_WIDTH) - 1) 375932d194SAntonio Nino Diaz 385932d194SAntonio Nino Diaz #define SDS_REGION_STRUCT_COUNT_SHIFT 16 395932d194SAntonio Nino Diaz #define SDS_REGION_STRUCT_COUNT_WIDTH 8 405932d194SAntonio Nino Diaz #define SDS_REGION_STRUCT_COUNT_MASK ((1 << SDS_REGION_STRUCT_COUNT_WIDTH) - 1) 415932d194SAntonio Nino Diaz 425932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MINOR_SHIFT 24 435932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MINOR_WIDTH 4 445932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MINOR_MASK ((1 << SDS_REGION_SCH_MINOR_WIDTH) - 1) 455932d194SAntonio Nino Diaz 465932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MAJOR_SHIFT 28 475932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MAJOR_WIDTH 4 485932d194SAntonio Nino Diaz #define SDS_REGION_SCH_MAJOR_MASK ((1 << SDS_REGION_SCH_MAJOR_WIDTH) - 1) 495932d194SAntonio Nino Diaz 505932d194SAntonio Nino Diaz #define SDS_REGION_SCH_VERSION_MASK \ 515932d194SAntonio Nino Diaz ((1 << (SDS_REGION_SCH_MINOR_WIDTH + SDS_REGION_SCH_MAJOR_WIDTH)) - 1) 525932d194SAntonio Nino Diaz 535932d194SAntonio Nino Diaz #define MAKE_SDS_REGION_SCH_VERSION(maj, min) \ 545932d194SAntonio Nino Diaz ((((maj) & SDS_REGION_SCH_MAJOR_MASK) << SDS_REGION_SCH_MINOR_WIDTH) | \ 555932d194SAntonio Nino Diaz ((min) & SDS_REGION_SCH_MINOR_MASK)) 565932d194SAntonio Nino Diaz 575932d194SAntonio Nino Diaz #define SDS_REGION_SCH_VERSION MAKE_SDS_REGION_SCH_VERSION(1, 0) 585932d194SAntonio Nino Diaz #define SDS_REGION_REGIONSIZE_OFFSET 0x4 595932d194SAntonio Nino Diaz #define SDS_REGION_DESC_SIZE 0x8 605932d194SAntonio Nino Diaz 61*d5dfdeb6SJulius Werner #ifndef __ASSEMBLER__ 625932d194SAntonio Nino Diaz #include <stddef.h> 635932d194SAntonio Nino Diaz #include <stdint.h> 645932d194SAntonio Nino Diaz 655932d194SAntonio Nino Diaz /* Header containing Shared Data Structure metadata */ 665932d194SAntonio Nino Diaz typedef struct structure_header { 675932d194SAntonio Nino Diaz uint32_t reg[2]; 685932d194SAntonio Nino Diaz } struct_header_t; 695932d194SAntonio Nino Diaz 705932d194SAntonio Nino Diaz #define GET_SDS_HEADER_ID(_header) \ 715932d194SAntonio Nino Diaz ((((struct_header_t *)(_header))->reg[0]) & SDS_HEADER_ID_MASK) 725932d194SAntonio Nino Diaz #define GET_SDS_HEADER_VERSION(_header) \ 735932d194SAntonio Nino Diaz (((((struct_header_t *)(_header))->reg[0]) >> SDS_HEADER_MINOR_VERSION_SHIFT)\ 745932d194SAntonio Nino Diaz & SDS_HEADER_VERSION_MASK) 755932d194SAntonio Nino Diaz #define GET_SDS_HEADER_STRUCT_SIZE(_header) \ 765932d194SAntonio Nino Diaz (((((struct_header_t *)(_header))->reg[1]) >> SDS_HEADER_STRUCT_SIZE_SHIFT)\ 775932d194SAntonio Nino Diaz & SDS_HEADER_STRUCT_SIZE_MASK) 785932d194SAntonio Nino Diaz #define IS_SDS_HEADER_VALID(_header) \ 795932d194SAntonio Nino Diaz ((((struct_header_t *)(_header))->reg[1]) & SDS_HEADER_VALID_MASK) 805932d194SAntonio Nino Diaz #define GET_SDS_STRUCT_FIELD(_header, _field_offset) \ 815932d194SAntonio Nino Diaz ((((uint8_t *)(_header)) + sizeof(struct_header_t)) + (_field_offset)) 825932d194SAntonio Nino Diaz 835932d194SAntonio Nino Diaz /* Region Descriptor describing the SDS Memory Region */ 845932d194SAntonio Nino Diaz typedef struct region_descriptor { 855932d194SAntonio Nino Diaz uint32_t reg[2]; 865932d194SAntonio Nino Diaz } region_desc_t; 875932d194SAntonio Nino Diaz 885932d194SAntonio Nino Diaz #define IS_SDS_REGION_VALID(region) \ 895932d194SAntonio Nino Diaz (((((region_desc_t *)(region))->reg[0]) & SDS_REGION_SIGNATURE_MASK) == SDS_REGION_SIGNATURE) 905932d194SAntonio Nino Diaz #define GET_SDS_REGION_STRUCTURE_COUNT(region) \ 915932d194SAntonio Nino Diaz (((((region_desc_t *)(region))->reg[0]) >> SDS_REGION_STRUCT_COUNT_SHIFT)\ 925932d194SAntonio Nino Diaz & SDS_REGION_STRUCT_COUNT_MASK) 935932d194SAntonio Nino Diaz #define GET_SDS_REGION_SCHEMA_VERSION(region) \ 945932d194SAntonio Nino Diaz (((((region_desc_t *)(region))->reg[0]) >> SDS_REGION_SCH_MINOR_SHIFT)\ 955932d194SAntonio Nino Diaz & SDS_REGION_SCH_VERSION_MASK) 965932d194SAntonio Nino Diaz #define GET_SDS_REGION_SIZE(region) ((((region_desc_t *)(region))->reg[1])) 975932d194SAntonio Nino Diaz 98*d5dfdeb6SJulius Werner #endif /* __ASSEMBLER__ */ 995932d194SAntonio Nino Diaz 1005932d194SAntonio Nino Diaz #endif /* SDS_PRIVATE_H */ 101