1e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/* 2e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Copyright (C) 2016 The Android Open Source Project 3e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 4e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Licensed under the Apache License, Version 2.0 (the "License"); 5e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * you may not use this file except in compliance with the License. 6e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * You may obtain a copy of the License at 7e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 8e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * http://www.apache.org/licenses/LICENSE-2.0 9e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 10e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Unless required by applicable law or agreed to in writing, software 11e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * distributed under the License is distributed on an "AS IS" BASIS, 12e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * See the License for the specific language governing permissions and 14e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * limitations under the License. 15e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 16e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 173b19f44cd6a77d1bb95397e4ec730bd362b0f37dBrian Duddie#ifndef CHRE_PAL_VERSION_H_ 183b19f44cd6a77d1bb95397e4ec730bd362b0f37dBrian Duddie#define CHRE_PAL_VERSION_H_ 19e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 20e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/** 21e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * @file 22e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Shared definitions related to CHRE PAL versioning. 23e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 24e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Versioning guidelines 25e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 26e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Like the CHRE nanoapp API, CHRE PAL APIs are versioned by a 32-bit integer 27e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * where the most significant byte represents the major version, the next most 28e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * significant byte represents the minor version, and the two least significant 29e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * bytes represent the implementation patch version in little endian order. 30e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 31e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Semantic versioning guidelines are followed, such that a new major version 32e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * indicates a compatibility-breaking change was introduced, a new minor version 33e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * indicates that new functionality was added in a backwards-compatible way, and 34e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * a new patch version indicates bug fixes in the implementation. The patch 35e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * version does not apply to the API itself, only a particular implementation of 36e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * the API. 37e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 38e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Note that although the PALs are generally closely related to the CHRE API, 39e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * they are versioned independently. For example, new features may be added to 40e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * the PAL APIs to support CHRE core system requirements that do not impact the 41e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * CHRE API directly. Also, a change may be made to the CHRE API that only 42e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * results in a minor version change due to compatibility layers between CHRE 43e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * nanoapps and the CHRE system, however this may require a major version bump 44e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * to the PAL in order to implement it. In general, this is done to keep the PAL 45e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * APIs simpler, as the components of the CHRE system are more tightly coupled 46e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * than the apps that run on top of it and are typically updated at the same 47e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * time. So we would want to ensure that a given nanoapp can run on multiple 48e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * versions of the CHRE API, but it is less important for PAL modules to work 49e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * with multiple versions of the core CHRE implementation, and vice versa. 50e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 51e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 52e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include <stdint.h> 53e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 54e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#ifdef __cplusplus 55e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddieextern "C" { 56e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#endif 57e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 58e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/** 59e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Extracts only the API version component of a module version 60e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 61e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#define CHRE_PAL_GET_API_VERSION(moduleVersion) \ 62e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie ((moduleVersion) & UINT32_C(0xFFFF0000)) 63e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 64e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/** 65e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Extracts only the module patch version of a module version 66e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 67e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#define CHRE_PAL_GET_PATCH_VERSION(moduleVersion) \ 68e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie ((moduleVersion) & UINT32_C(0x0000FFFF)) 69e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 70e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/** 71e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Constructs an API version from major & minor patch versions 72e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 73e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * @param major Major version, valid range 0-255 74e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * @param minor Minor version, valid range 0-255 75e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 76e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#define CHRE_PAL_CREATE_API_VERSION(major, minor) \ 77e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie ((uint32_t) ((((major) & 0xFF) << 24) | (((minor) & 0xFF) << 16))) 78e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 79e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/** 80e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Constructs a module version from a complete API version and a module patch 81e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * version 82e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 83e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#define CHRE_PAL_CREATE_MODULE_VERSION(apiVersion, patchVersion) \ 84e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie ((uint32_t) (CHRE_PAL_GET_API_VERSION(apiVersion) | \ 85e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie CHRE_PAL_GET_PATCH_VERSION(patchVersion))) 86e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 87e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#ifdef __cplusplus 88e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie} 89e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#endif 90e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 913b19f44cd6a77d1bb95397e4ec730bd362b0f37dBrian Duddie#endif // CHRE_VERSION_H_ 92