1855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*
2855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
3855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
4855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
5855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * you may not use this file except in compliance with the License.
6855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * You may obtain a copy of the License at
7855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
8855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
9855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
10855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
11855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
12855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * See the License for the specific language governing permissions and
14855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * limitations under the License.
15855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */
16855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
17855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
18855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @file         M4OSA_OptionID.h
19855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @ingroup      OSAL
20855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief        Option ID macros
21855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note         This file defines macros to generate and analyze option ID.
22855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *               Option ID is used by M4YYY_ZZsetOption() and
23855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *               M4YYY_ZZgetOption() functions.
24855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
25855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
26855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
27855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifndef M4OSA_OPTIONID_H
28855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_OPTIONID_H
29855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
30855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
31855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Types.h"
32855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
33855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** M4OSA_OptionID is a 32 bits unsigned integer.
34855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi- Right access (2 bits): Some options may have read only, write only or read
35855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi  and write access
36855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi- Core ID (14 bits): It is a unique ID for each core component
37855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi- SubOption ID (16 bits): To select which option in a specific core component
38855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
39855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargitypedef M4OSA_UInt32 M4OSA_OptionID;
40855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargitypedef void*        M4OSA_DataOption;
41855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
42855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4_READ      0x01
43855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4_WRITE     0x02
44855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4_READWRITE 0x03
45855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
46855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/* Macro to process M4OSA_OptionID */
47855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
48855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** This macro creates an optionID given read/write access,
49855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    coreID and SubOptionID*/
50855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_OPTION_ID_CREATE(right, coreID, errorID)\
51855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi   (M4OSA_Int32)((((((M4OSA_UInt32)right)&0x03)<<30))+((((M4OSA_UInt32)coreID)&0x003FFF)<<16)+(((M4OSA_UInt32)errorID)&0x00FFFF))
52855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
53855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** This macro splits an optionID into read/write access,
54855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    coreID and SubOptionID*/
55855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_OPTION_ID_SPLIT(optionID, right, coreID, errorID)\
56855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi   { right=(M4OSA_UInt8)((optionID)>>30);\
57855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     coreID=(M4OSA_UInt16)(((optionID)>>16)&0x00003FFF);\
58855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     errorID=(M4OSA_UInt32)((optionID)&0x0000FFFF); }
59855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
60855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** This macro returns 1 if the optionID is writable, 0 otherwise*/
61855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_OPTION_ID_IS_WRITABLE(optionID) ((((optionID)>>30)&M4_WRITE)!=0)
62855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
63855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** This macro returns 1 if the optionID is readable, 0 otherwise*/
64855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_OPTION_ID_IS_READABLE(optionID) ((((optionID)>>30)&M4_READ)!=0)
65855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
66855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** This macro returns 1 if the optionID has its core ID equal to 'coreID', 0 otherwise*/
67855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_OPTION_ID_IS_COREID(optionID, coreID)\
68855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi   (((((optionID)>>16)&0x003FFF) == (coreID)) ? M4OSA_TRUE:M4OSA_FALSE)
69855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
70855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
71855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif   /*M4OSA_OPTIONID_H*/
72855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
73