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