From 2e32a2e4a4f466a46637f6328a8c2be3da27eaf4 Mon Sep 17 00:00:00 2001 From: Liu Yuan Date: Sun, 8 Apr 2018 10:51:26 +0800 Subject: [PATCH] IOC mediator: add IOC mediator definition Add Automotive IOC mediator data structure definitions. Signed-off-by: Liu Yuan Reviewed-by: Wang Yu Reviewed-by: Liu Shuo Reviewed-by: Zhao Yakui Acked-by: Eddie Dong --- include/ioc.h | 664 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 664 insertions(+) create mode 100644 include/ioc.h diff --git a/include/ioc.h b/include/ioc.h new file mode 100644 index 000000000..71f4c3449 --- /dev/null +++ b/include/ioc.h @@ -0,0 +1,664 @@ +/* + * Copyright (C) 2018 Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Intel Corporation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef _IOC_H_ +#define _IOC_H_ + +#include +/* + * Carrier Board Communication(CBC) frame definition + * +---+---------+-----------+---------------+---------+----------+---------+ + * + * +---------------+-------------+ + * | ServiceHeader | DataPayload | + * | 8b | 24b...504b | + * ++--------------+-------------+ + * Service Layer + * \ / + * +-------------+----------\-------------/ + * | Multiplexer | Priority | UpperLayer | + * | 5b | 3b | | + * +-------------+------------------------+ + * Address Layer + * \ / + * +---+---------+-----------+---------------+---------\----------/---------+ + * |SOF|Extension|FrameLength|SequenceCounter|TimeStamp|UpperLayer|CheckSum | + * |8b | 1b | 5b | 2b |32B(n/a) | | 8b | + * +---+---------+-----------+---------------+---------+----------+---------+ + * Link Layer + * + */ + +#define CBC_SOF_VALUE 0x05 /* CBC start of frame value */ +#define CBC_EXT_VALUE 0x00 /* CBC extension bit value */ +#define CBC_PRIO_MASK 0x07 /* CBC priority bitmask */ +#define CBC_MUX_MASK 0x1F /* CBC muxtiplexer bitmask */ +#define CBC_LEN_MASK 0x1F /* CBC frame length bitmask */ +#define CBC_SEQ_MASK 0x03 /* CBC sequence bitmask */ +#define CBC_EXT_MASK 0x01 /* CBC extension bits bitmask */ +#define CBC_MUX_OFFSET 3 /* CBC muxtiplexer offset */ +#define CBC_SEQ_OFFSET 0 /* CBC sequence offset */ +#define CBC_LEN_OFFSET 2 /* CBC service frame length offset */ +#define CBC_EXT_OFFSET 7 /* CBC extension bits offset */ +#define CBC_LEN_UNIT 4 /* CBC frame content in block length */ +#define CBC_PRIO_OFFSET 0 /* CBC priority offset */ +#define CBC_CHKSUM_SIZE 1 /* CBC checksum size */ +#define CBC_GRANULARITY 4 /* CBC frame alignment */ +#define CBC_LINK_HDR_SIZE 3 /* CBC link layer header size */ +#define CBC_ADDR_HDR_SIZE 1 /* CBC address layser header size */ +#define CBC_SRV_HDR_SIZE 1 /* CBC service layer header size */ +#define CBC_MAX_FRAME_SIZE 96 /* CBC maximum frame size */ +#define CBC_MIN_FRAME_SIZE 8 /* CBC mininum frame size */ +#define CBC_MAX_SERVICE_SIZE 64 /* CBC maximum service size */ + +/* + * Define the start positions of each layer headers. + * CBC_SOF_POS: start of frame start byte position + * CBC_ELS_POS: externsion, frame length and sequence start byte position + * CBC_ADDR_POS: address protocol start byte postion + * CBC_SRV_POS: service protocol start byte position + * CBC_PAYLOAD_POS: CBC payload start byte position + */ +#define CBC_SOF_POS 0 +#define CBC_ELS_POS (CBC_SOF_POS + 1) +#define CBC_ADDR_POS (CBC_SOF_POS + CBC_LINK_HDR_SIZE - CBC_CHKSUM_SIZE) +#define CBC_SRV_POS (CBC_ADDR_POS + CBC_ADDR_HDR_SIZE) +#define CBC_PAYLOAD_POS (CBC_SRV_POS + CBC_SRV_HDR_SIZE) + +#define CBC_WK_RSN_BTN (1 << 5) /* CBC wakeup reason field button */ +#define CBC_WK_RSN_RTC (1 << 9) /* CBC wakeup reason field rtc */ +#define CBC_WK_RSN_DOR (1 << 11) /* CBC wakeup reason field cardoor */ +#define CBC_WK_RSN_SOC (1 << 23) /* CBC wakeup reason field soc */ + +/* + * IOC mediator permits button, rtc and cardoor wakeup reasons which comes from + * IOC firmware, others will be masked. + */ +#define CBC_WK_RSN_ALL (CBC_WK_RSN_BTN | CBC_WK_RSN_RTC | CBC_WK_RSN_DOR) + +/* + * CBC ring buffer is used to buffer bytes before build one complete CBC frame. + */ +#define CBC_RING_BUFFER_SIZE 256 + +/* + * Default whitelist node is NULL before whitelist initialization. + */ +#define DEFAULT_WLIST_NODE (0) + +/* + * Default IOC channels file descriptor is -1 before open. + */ +#define IOC_INIT_FD -1 + +/* + * Maximum CBC requests number. + */ +#define IOC_MAX_REQUESTS 200 + +/* + * Maximum epoll events. + */ +#define IOC_MAX_EVENTS 32 + +/* IOC default path */ +#define IOC_DP_NONE "" + +/* + * IOC native channel path definition. + */ +#define IOC_NP_PMT "/dev/cbc-pmt" +#define IOC_NP_LF "/dev/cbc-lifecycle" +#define IOC_NP_SIG "/dev/cbc-signals" +#define IOC_NP_ESIG "/dev/cbc-early-signals" +#define IOC_NP_DIAG "/dev/cbc-diagnosis" +#define IOC_NP_DLT "/dev/cbc-dlt" +#define IOC_NP_LIND "/dev/cbc-linda" +#define IOC_NP_RAW0 "/dev/cbc-raw0" +#define IOC_NP_RAW1 "/dev/cbc-raw1" +#define IOC_NP_RAW2 "/dev/cbc-raw2" +#define IOC_NP_RAW3 "/dev/cbc-raw3" +#define IOC_NP_RAW4 "/dev/cbc-raw4" +#define IOC_NP_RAW5 "/dev/cbc-raw5" +#define IOC_NP_RAW6 "/dev/cbc-raw6" +#define IOC_NP_RAW7 "/dev/cbc-raw7" +#define IOC_NP_RAW8 "/dev/cbc-raw8" +#define IOC_NP_RAW9 "/dev/cbc-raw9" +#define IOC_NP_RAW10 "/dev/cbc-raw10" +#define IOC_NP_RAW11 "/dev/cbc-raw11" +#define IOC_NP_FLF "/tmp/ioc_fake_lifecycle" +#define IOC_NP_FSIG "/tmp/ioc_fake_signal" +#define IOC_NP_FRAW "/tmp/ioc_fake_raw11" + +/* + * CBC signal data command types. + * Signal Data Message + * +----------------+--------------+ + * | SignalDataCMD | Payload | + * | 8b | 0~56b | + * +----------------+--------------+ + */ +enum cbc_signal_data_command { + CBC_SD_SINGLE_SIGNAL = 1, /* Single signal update */ + CBC_SD_MULTI_SIGNAL = 2, /* Multi signal update */ + CBC_SD_GROUP_SIGNAL = 3, /* Group signal update */ + CBC_SD_DEFAULT_VALUES = 4, /* Update default values */ + CBC_SD_UPDATE_SNA = 5, /* Update SNA values */ + CBC_SD_INVAL_SSIG = 6, /* Invalidate signal */ + CBC_SD_INVAL_MSIG = 7, /* Invalidate multi signals */ + CBC_SD_INVAL_SGRP = 8, /* Invalidate signal group */ + CBC_SD_INVAL_MGRP = 9, /* Invalidate muliti groups */ + CBC_SD_OPEN_CHANNEL = 253, /* Open signal channel */ + CBC_SD_CLOSE_CHANNEL = 254, /* Clsoe signal channel */ + CBC_SD_RESET_CHANNEL = 255, /* Reset signal channel */ + CBC_SD_MAX +}; + +/* + * CBC system control command types. + * +------------------+------------+ + * | SystemControlCMD | Payload | + * | 8b | 24b | + * +------------------+------------+ + */ +enum cbc_system_control_command { + CBC_SC_WK_RSN = 1, /* Wakeup reasons */ + CBC_SC_HB = 2, /* Heartbeat */ + CBC_SC_BOOTSEL = 3, /* Boot selector */ + CBC_SC_SPRS_HB = 4, /* Suppress heartbeat check */ + CBC_SC_MAX +}; + +/* + * CBC system control - heartbeat: command types. + * Heartbeat Message + * +------------------+---------+-----------------+------+ + * | SystemControlCMD | Command | SUS_STAT Action | Resv | + * | 8b | 8b | 8b | 8b | + * +------------------+---------+-----------------+------+ + */ +enum cbc_heartbeat_command { + CBC_HB_SD_PREP, /* Shutdown prepared */ + CBC_HB_ACTIVE, /* Active */ + CBC_HB_SD_DLY, /* Shutdown delay */ + CBC_HB_INITIAL, /* Initial */ + CBC_HB_STANDBY, /* Standby */ + CBC_HB_DIAG, /* Diagnosis */ + CBC_HB_SD_REQ, /* Cm shutdown request */ + CBC_HB_SD_EXE, /* Shutdown execute */ + CBC_HB_EMG_SD, /* Mmergency shutdown execute */ + CBC_HB_MAX +}; + +/* + * CBC system control - heartbeat: suspend state action types. + */ +enum cbc_sus_stat_action { + CBC_SS_INVALID, /* Invalid */ + CBC_SS_HALT_I0, /* Halt */ + CBC_SS_REBOOT0, /* Reboot */ + CBC_SS_HALT_I1, /* Ignore once then halt */ + CBC_SS_REBOOT1, /* Ignore once then reboot */ + CBC_SS_HALT_I2, /* Ignore twice then halt */ + CBC_SS_REBOOT2, /* Ignore twice then reboot */ + CBC_SS_REFRESH, /* Ram refresh, S3 */ + CBC_SS_MAX +}; + +/* + * CBC rx signal identity definition. + */ +enum cbc_rx_signal_id { + CBC_SIG_ID_STFR = 20000, /* SetTunerFrequency */ + CBC_SIG_ID_EGYO = 20001, /* EnableGyro */ + CBC_SIG_ID_WACS = 20002, /* WriteAmplifierConfigurationSequence*/ + CBC_SIG_ID_RIFC = 20003, /* RequestIocFblChecksum */ + CBC_SIG_ID_RIWC = 20004, /* RequestIocWfChecksum */ + CBC_SIG_ID_RIAC = 20005, /* RequestIocAppChecksum */ + CBC_SIG_ID_RIVS = 20006, /* RequestIocVersion */ + CBC_SIG_ID_RRMS = 20007, /* RequestRuntimeMeasurement */ + CBC_SIG_ID_MTAM = 20008, /* MuteAmplifier */ + CBC_SIG_ID_VICL = 651, /* VideoInCtrl */ +}; + +/* + * CBC tx signal identity definition. + */ +enum cbc_tx_signal_id { + CBC_SIG_ID_MBV = 501, /* MainBatteryVoltage */ + CBC_SIG_ID_TSA = 502, /* TemperatureSensorAmplifier */ + CBC_SIG_ID_TSE = 503, /* TemperatureSensorEnvironment */ + CBC_SIG_ID_VSWA = 701, /* VehicleSteeringWheelAngle */ + CBC_SIG_ID_VSPD = 702, /* VehicleSpeed */ + CBC_SIG_ID_VESP = 703, /* VehicleEngineSpeed */ + CBC_SIG_ID_VECT = 704, /* VehicleEngineCoolantTemp */ + CBC_SIG_ID_VRGR = 705, /* VehicleReverseGear */ + CBC_SIG_ID_VPS = 706, /* VehiclePowerStatus */ + CBC_SIG_ID_VPM = 707, /* VehiclePowerMode */ + CBC_SIG_ID_VMD = 708, /* VehicleMode */ + CBC_SIG_ID_VIS = 709, /* VehicleImmobilizerState */ + CBC_SIG_ID_VGP = 710, /* VehicleGearshiftPosition */ + CBC_SIG_ID_VAG = 711, /* VehicleActualGear */ + CBC_SIG_ID_VFS = 712, /* VehicleFuelStatus */ + CBC_SIG_ID_VFL = 713, /* VehicleFuelLevel */ + CBC_SIG_ID_VDTE = 714, /* VehicleDistanceToEmpty */ + CBC_SIG_ID_SWUB = 715, /* SteeringWheelUpBtn */ + CBC_SIG_ID_SWRB = 716, /* SteeringWheelRightBtn */ + CBC_SIG_ID_SWPB = 717, /* SteeringWheelPrevBtn */ + CBC_SIG_ID_SWNB = 718, /* SteeringWheelNextBtn */ + CBC_SIG_ID_SWLB = 719, /* SteeringWheelLeftBtn */ + CBC_SIG_ID_SWDB = 720, /* SteeringWheelDownBtn */ + CBC_SIG_ID_SWVA = 721, /* SteeringWheelVolumeAdjust */ + CBC_SIG_ID_SWSCB = 722, /* SteeringWheelSpeechCtrlBtn */ + CBC_SIG_ID_SWPLB = 723, /* SteeringWheelPlayBtn */ + CBC_SIG_ID_SWPCB = 724, /* SteeringWheelPickupCallBtn */ + CBC_SIG_ID_SWPSB = 725, /* SteeringWheelPauseBtn */ + CBC_SIG_ID_SWHB = 726, /* SteeringWheelHomeBtn */ + CBC_SIG_ID_SWEB = 727, /* SteeringWheelEnterBtn */ + CBC_SIG_ID_SWECB = 728, /* SteeringWheelEndCallBtn */ + CBC_SIG_ID_SWCB = 729, /* SteeringWheelConfigBtn */ + CBC_SIG_ID_SWCLB = 730, /* SteeringWheelCancelBtn */ + CBC_SIG_ID_SWAMB = 731, /* SteeringWheelAudioMuteBtn */ + CBC_SIG_ID_RRSUB = 732, /* RightRearSeatUpBtn */ + CBC_SIG_ID_RRSRB = 733, /* RightRearSeatRightBtn */ + CBC_SIG_ID_RRSPB = 734, /* RightRearSeatPrevBtn */ + CBC_SIG_ID_RRSP9B = 735, /* RightRearSeatPosition9Btn */ + CBC_SIG_ID_RRSP8B = 736, /* RightRearSeatPosition8Btn */ + CBC_SIG_ID_RRSP7B = 737, /* RightRearSeatPosition7Btn */ + CBC_SIG_ID_RRSP6B = 738, /* RightRearSeatPosition6Btn */ + CBC_SIG_ID_RRSP5B = 739, /* RightRearSeatPosition5Btn */ + CBC_SIG_ID_RRSP4B = 740, /* RightRearSeatPosition4Btn */ + CBC_SIG_ID_RRSP3B = 741, /* RightRearSeatPosition3Btn */ + CBC_SIG_ID_RRSP2B = 742, /* RightRearSeatPosition2Btn */ + CBC_SIG_ID_RRSP1B = 743, /* RightRearSeatPosition1Btn */ + CBC_SIG_ID_RRSP0B = 744, /* RightRearSeatPosition0Btn */ + CBC_SIG_ID_RRSNB = 745, /* RightRearSeatNextBtn */ + CBC_SIG_ID_RRSLB = 746, /* RightRearSeatLeftBtn */ + CBC_SIG_ID_RRSDB = 747, /* RightRearSeatDownBtn */ + CBC_SIG_ID_RRSVA = 748, /* RightRearSeatVolumeAdjust */ + CBC_SIG_ID_RSSSB = 749, /* RightRearSeatStopBtn */ + CBC_SIG_ID_RRSSCB = 750, /* RightRearSeatSpeechCtrlBtn */ + CBC_SIG_ID_RRSSB = 751, /* RightRearSeatSearchBtn */ + CBC_SIG_ID_RRSRDB = 752, /* RightRearSeatRadioBtn */ + CBC_SIG_ID_RRSPLB = 753, /* RightRearSeatPlayBtn */ + CBC_SIG_ID_RRSPSB = 754, /* RightRearSeatPauseBtn */ + CBC_SIG_ID_RRSOMB = 755, /* RightRearSeatOpticalMediaBtn */ + CBC_SIG_ID_RRSHB = 756, /* RightRearSeatHomeBtn */ + CBC_SIG_ID_RRSHDB = 757, /* RightRearSeatHarddiskBtn */ + CBC_SIG_ID_RRSENB = 758, /* RightRearSeatEnterBtn */ + CBC_SIG_ID_RRSEJB = 759, /* RightRearSeatEjectBtn */ + CBC_SIG_ID_RRSCB = 760, /* RightRearSeatConfigBtn */ + CBC_SIG_ID_RRSCLB = 761, /* RightRearSeatCancelBtn */ + CBC_SIG_ID_RRSAMB = 762, /* RightRearSeatAudioMuteBtn */ + CBC_SIG_ID_RVCS = 763, /* RearViewCameraStatus */ + CBC_SIG_ID_PSS = 764, /* PdcSwitchStatus */ + CBC_SIG_ID_PUB = 765, /* PassengerUpBtn */ + CBC_SIG_ID_PRB = 766, /* PassengerRightBtn */ + CBC_SIG_ID_PPB = 767, /* PassengerPrevBtn */ + CBC_SIG_ID_PP9B = 768, /* PassengerPosition9Btn */ + CBC_SIG_ID_PP8B = 769, /* PassengerPosition8Btn */ + CBC_SIG_ID_PP7B = 770, /* PassengerPosition7Btn */ + CBC_SIG_ID_PP6B = 771, /* PassengerPosition6Btn */ + CBC_SIG_ID_PP5B = 772, /* PassengerPosition5Btn */ + CBC_SIG_ID_PP4B = 773, /* PassengerPosition4Btn */ + CBC_SIG_ID_PP3B = 774, /* PassengerPosition3Btn */ + CBC_SIG_ID_PP2B = 775, /* PassengerPosition2Btn */ + CBC_SIG_ID_PP1B = 776, /* PassengerPosition1Btn */ + CBC_SIG_ID_PP0B = 777, /* PassengerPosition0Btn */ + CBC_SIG_ID_PNB = 778, /* PassengerNextBtn */ + CBC_SIG_ID_PLB = 779, /* PassengerLeftBtn */ + CBC_SIG_ID_PDB = 780, /* PassengerDownBtn */ + CBC_SIG_ID_PVA = 781, /* PassengerVolumeAdjust */ + CBC_SIG_ID_PSB = 782, /* PassengerStopBtn */ + CBC_SIG_ID_PSCB = 783, /* PassengerSpeechCtrlBtn */ + CBC_SIG_ID_PSRB = 784, /* PassengerSearchBtn */ + CBC_SIG_ID_PRDB = 785, /* PassengerRadioBtn */ + CBC_SIG_ID_PPLB = 786, /* PassengerPlayBtn */ + CBC_SIG_ID_PPSB = 787, /* PassengerPauseBtn */ + CBC_SIG_ID_POMB = 788, /* PassengerOpticalMediaBtn */ + CBC_SIG_ID_PHMB = 789, /* PassengerHomeBtn */ + CBC_SIG_ID_PHDB = 790, /* PassengerHarddiskBtn */ + CBC_SIG_ID_PENB = 791, /* PassengerEnterBtn */ + CBC_SIG_ID_PEJB = 792, /* PassengerEjectBtn */ + CBC_SIG_ID_PCFB = 793, /* PassengerConfigBtn */ + CBC_SIG_ID_PCLB = 794, /* PassengerCancelBtn */ + CBC_SIG_ID_PAMB = 795, /* PassengerAudioMuteBtn */ + CBC_SIG_ID_LRSUB = 796, /* LeftRearSeatUpBtn */ + CBC_SIG_ID_LRSRB = 797, /* LeftRearSeatRightBtn */ + CBC_SIG_ID_LRSPB = 798, /* LeftRearSeatPrevBtn */ + CBC_SIG_ID_LRSP9B = 799, /* LeftRearSeatPosition9Btn */ + CBC_SIG_ID_LRSP8B = 800, /* LeftRearSeatPosition8Btn */ + CBC_SIG_ID_LRSP7B = 801, /* LeftRearSeatPosition7Btn */ + CBC_SIG_ID_LRSP6B = 802, /* LeftRearSeatPosition6Btn */ + CBC_SIG_ID_LRSP5B = 803, /* LeftRearSeatPosition5Btn */ + CBC_SIG_ID_LRSP4B = 804, /* LeftRearSeatPosition4Btn */ + CBC_SIG_ID_LRSP3B = 805, /* LeftRearSeatPosition3Btn */ + CBC_SIG_ID_LRSP2B = 806, /* LeftRearSeatPosition2Btn */ + CBC_SIG_ID_LRSP1B = 807, /* LeftRearSeatPosition1Btn */ + CBC_SIG_ID_LRSP0B = 808, /* LeftRearSeatPosition0Btn */ + CBC_SIG_ID_LRSNB = 809, /* LeftRearSeatNextBtn */ + CBC_SIG_ID_LRSLB = 810, /* LeftRearSeatLeftBtn */ + CBC_SIG_ID_LRSDB = 811, /* LeftRearSeatDownBtn */ + CBC_SIG_ID_LRSVA = 812, /* LeftRearSeatVolumeAdjust */ + CBC_SIG_ID_LRSAMB = 813, /* LeftRearSeatAudioMuteBtn */ + CBC_SIG_ID_LRSSB = 814, /* LeftRearSeatStopBtn */ + CBC_SIG_ID_LRSSCB = 815, /* LeftRearSeatSpeechCtrlBtn */ + CBC_SIG_ID_LRSSRB = 816, /* LeftRearSeatSearchBtn */ + CBC_SIG_ID_LRSRDB = 817, /* LeftRearSeatRadioBtn */ + CBC_SIG_ID_LRSPLB = 818, /* LeftRearSeatPlayBtn */ + CBC_SIG_ID_LRSPSB = 819, /* LeftRearSeatPauseBtn */ + CBC_SIG_ID_LRSOMB = 820, /* LeftRearSeatOpticalMediaBtn */ + CBC_SIG_ID_LRSHMB = 821, /* LeftRearSeatHomeBtn */ + CBC_SIG_ID_LRSHDB = 822, /* LeftRearSeatHarddiskBtn */ + CBC_SIG_ID_LRSENB = 823, /* LeftRearSeatEnterBtn */ + CBC_SIG_ID_LRSEJB = 824, /* LeftRearSeatEjectBtn */ + CBC_SIG_ID_LRSCFB = 825, /* LeftRearSeatConfigBtn */ + CBC_SIG_ID_LRSCLB = 826, /* LeftRearSeatCancelBtn */ + CBC_SIG_ID_DVA = 827, /* DriverVolumeAdjust */ + CBC_SIG_ID_DECSP = 828, /* DriverErgoCommanderSteps */ + CBC_SIG_ID_DECST = 829, /* DriverErgoCommanderStatus */ + CBC_SIG_ID_DAMB = 830, /* DriverAudioMuteBtn */ + CBC_SIG_ID_DNB = 831, /* DriverNextBtn */ + CBC_SIG_ID_DLB = 832, /* DriverLeftBtn */ + CBC_SIG_ID_DDB = 833, /* DriverDownBtn */ + CBC_SIG_ID_DUB = 834, /* DriverUpBtn */ + CBC_SIG_ID_DRB = 835, /* DriverRightBtn */ + CBC_SIG_ID_DPB = 836, /* DriverPrevBtn */ + CBC_SIG_ID_DP9B = 837, /* DriverPosition9Btn */ + CBC_SIG_ID_DP8B = 838, /* DriverPosition8Btn */ + CBC_SIG_ID_DP7B = 839, /* DriverPosition7Btn */ + CBC_SIG_ID_DP6B = 840, /* DriverPosition6Btn */ + CBC_SIG_ID_DP5B = 841, /* DriverPosition5Btn */ + CBC_SIG_ID_DP4B = 842, /* DriverPosition4Btn */ + CBC_SIG_ID_DP3B = 843, /* DriverPosition3Btn */ + CBC_SIG_ID_DP2B = 844, /* DriverPosition2Btn */ + CBC_SIG_ID_DP1B = 845, /* DriverPosition1Btn */ + CBC_SIG_ID_DP0B = 846, /* DriverPosition0Btn */ + CBC_SIG_ID_DSCB = 847, /* DriverSpeechCtrlBtn */ + CBC_SIG_ID_DSRB = 848, /* DriverSearchBtn */ + CBC_SIG_ID_DRDB = 849, /* DriverRadioBtn */ + CBC_SIG_ID_DSTB = 850, /* DriverStopBtn */ + CBC_SIG_ID_DPLB = 851, /* DriverPlayBtn */ + CBC_SIG_ID_DPSB = 852, /* DriverPauseBtn */ + CBC_SIG_ID_DOMB = 853, /* DriverOpticalMediaBtn */ + CBC_SIG_ID_DHMB = 854, /* DriverHomeBtn */ + CBC_SIG_ID_DHHB = 855, /* DriverHarddiskBtn */ + CBC_SIG_ID_DENB = 856, /* DriverEnterBtn */ + CBC_SIG_ID_DEJB = 857, /* DriverEjectBtn */ + CBC_SIG_ID_DCFB = 858, /* DriverConfigBtn */ + CBC_SIG_ID_DCLB = 859, /* DriverCancelBtn */ + CBC_SIG_ID_DSTG = 860, /* DoorStatusTailgate */ + CBC_SIG_ID_DSRR = 861, /* DoorStatusRightRear */ + CBC_SIG_ID_DSRF = 862, /* DoorStatusRightFront */ + CBC_SIG_ID_DSLR = 863, /* DoorStatusLeftRear */ + CBC_SIG_ID_DSLF = 864, /* DoorStatusLeftFront */ + CBC_SIG_ID_DSEH = 865, /* DoorStatusEngineHood */ + CBC_SIG_ID_CSSRRW = 866, /* ChildSafetyStatusRightRearWnd */ + CBC_SIG_ID_CSSRR = 867, /* ChildSafetyStatusRightRear */ + CBC_SIG_ID_CSSLRW = 868, /* ChildSafetyStatusLeftRearWnd */ + CBC_SIG_ID_CSSLR = 869, /* ChildSafetyStatusLeftRear */ + CBC_SIG_ID_ATEMP = 870, /* AmbientTemperature */ + CBC_SIG_ID_ANSL = 871, /* AmbientNoiseLevel */ + CBC_SIG_ID_ALTI = 872, /* AmbientLightIntensity */ + CBC_SIG_ID_VSA = 873, /* VehicleSteeringAngle */ + CBC_SIG_ID_LLAT = 875, /* LocationLatitude */ + CBC_SIG_ID_LLON = 876, /* LocationLongitude */ + CBC_SIG_ID_LALT = 877, /* LocationAltitude */ + CBC_SIG_ID_LACC = 878, /* LocationAccuracy */ + CBC_SIG_ID_LHED = 879, /* LocationHeading */ + CBC_SIG_ID_LSPD = 880, /* LocationSpeed */ + CBC_SIG_ID_LSRC = 881, /* LocationSource */ + CBC_SIG_ID_LSCT = 882, /* LocationSourceCount */ + CBC_SIG_ID_PDFB = 884, /* PdcDistanceFrontCenter */ + CBC_SIG_ID_PDFL1 = 885, /* PdcDistanceFrontLeft1 */ + CBC_SIG_ID_PDFL2 = 886, /* PdcDistanceFrontLeft2 */ + CBC_SIG_ID_PDFL3 = 887, /* PdcDistanceFrontLeft3 */ + CBC_SIG_ID_PDFR1 = 888, /* PdcDistanceFrontRight1 */ + CBC_SIG_ID_PDFR2 = 889, /* PdcDistanceFrontRight2 */ + CBC_SIG_ID_PDFR3 = 890, /* PdcDistanceFrontRight3 */ + CBC_SIG_ID_PDRC = 892, /* PdcDistanceRearCenter */ + CBC_SIG_ID_PDRL1 = 893, /* PdcDistanceRearLeft1 */ + CBC_SIG_ID_PDRL2 = 894, /* PdcDistanceRearLeft2 */ + CBC_SIG_ID_PDRL3 = 895, /* PdcDistanceRearLeft3 */ + CBC_SIG_ID_PDRR1 = 896, /* PdcDistanceRearRight1 */ + CBC_SIG_ID_PDRR2 = 897, /* PdcDistanceRearRight2 */ + CBC_SIG_ID_PDRR3 = 898, /* PdcDistanceRearRight3 */ + CBC_SIG_ID_VXA = 900, /* VehicleXAcceleration */ + CBC_SIG_ID_VYA = 901, /* VehicleYAcceleration */ + CBC_SIG_ID_VZA = 902, /* VehicleZAcceleration */ + CBC_SIG_ID_IACR = 906, /* IocAppChecksumResponse */ + CBC_SIG_ID_IWCR = 907, /* IocWfChecksumResponse */ + CBC_SIG_ID_IFCR = 908, /* IocFblChecksumResponse */ + CBC_SIG_ID_GYROX = 911, /* GyroX */ + CBC_SIG_ID_GYROY = 912, /* GyroY */ + CBC_SIG_ID_IAVB = 915, /* IocAppVersionBuild */ + CBC_SIG_ID_IAVMJ = 916, /* IocAppVersionMajor */ + CBC_SIG_ID_RAV = 919, /* RuntimeAverageValue */ + CBC_SIG_ID_RMAX = 920, /* RuntimeMaxValue */ + CBC_SIG_ID_RMIN = 921, /* RuntimeMinValue */ + CBC_SIG_ID_ACCX = 924, /* AccX */ + CBC_SIG_ID_ACCY = 925, /* AccY */ + CBC_SIG_ID_ACCZ = 926, /* AccZ */ + CBC_SIG_ID_MDS = 927, /* MrbDipSwitch */ + CBC_SIG_ID_FCP = 928, /* FanCurrentRpm */ + CBC_SIG_ID_GYROZ = 929, /* GyroZ */ + CBC_SIG_ID_IAVMN = 930, /* IocAppVersionMinor */ + CBC_SIG_ID_RTST = 931, /* RuntimeSamplesTaken */ +}; + +/* + * CBC rx group identity definition. + */ +enum cbc_rx_group_id { + CBC_GRP_ID_0 = 0, +}; + +/* + * CBC tx group identity definition. + */ +enum cbc_tx_group_id { + CBC_GRP_ID_LOC = 874, /* Location */ + CBC_GRP_ID_PDF = 883, /* PdcDistanceFront */ + CBC_GRP_ID_PDR = 891, /* PdcDistanceRear */ + CBC_GRP_ID_VAC = 899, /* VehicleAcceleration */ + CBC_GRP_ID_GAS = 909, /* GyroAbs */ + CBC_GRP_ID_IVR = 913, /* IocVersionResponse */ + CBC_GRP_ID_IRM = 917, /* IocRuntimeMeasurementResultsResponse */ + CBC_GRP_ID_GAC = 922, /* GyroAcc */ +}; + +/* + * IOC channels definition. + * Include all native CBC channels and one virtual UART + */ +enum ioc_ch_id { + IOC_NATIVE_PMT, /* Native /dev/cbc-pmt */ + IOC_NATIVE_LFCC, /* Native /dev/cbc-lifecycle */ + IOC_NATIVE_SIGNAL, /* Native /dev/cbc-signals */ + IOC_NATIVE_ESIG, /* Native /dev/cbc-early-signals */ + IOC_NATIVE_DIAG, /* Native /dev/cbc-diagnosis */ + IOC_NATIVE_DLT, /* Native /dev/cbc_dlt */ + IOC_NATIVE_LINDA, /* Native /dev/cbc-lindata */ + IOC_NATIVE_RAW0, /* Native /dev/cbc-raw0 */ + IOC_NATIVE_RAW1, /* Native /dev/cbc-raw1 */ + IOC_NATIVE_RAW2, /* Native /dev/cbc-raw2 */ + IOC_NATIVE_RAW3, /* Native /dev/cbc-raw3 */ + IOC_NATIVE_RAW4, /* Native /dev/cbc-raw4 */ + IOC_NATIVE_RAW5, /* Native /dev/cbc-raw5 */ + IOC_NATIVE_RAW6, /* Native /dev/cbc-raw6 */ + IOC_NATIVE_RAW7, /* Native /dev/cbc-raw7 */ + IOC_NATIVE_RAW8, /* Native /dev/cbc-raw8 */ + IOC_NATIVE_RAW9, /* Native /dev/cbc-raw9 */ + IOC_NATIVE_RAW10, /* Native /dev/cbc-raw10 */ + IOC_NATIVE_RAW11, /* Native /dev/cbc-raw11 */ + IOC_VIRTUAL_UART, /* Virtual UART */ + IOC_NATIVE_DUMMY0, /* Native fake lifecycle channel */ + IOC_NATIVE_DUMMY1, /* Native fake signal channel */ + IOC_NATIVE_DUMMY2, /* Native Fake oem raw channel */ + IOC_CH_MAX +}; + +/* + * CBC priority is used to pack CBC address layer header. + */ +enum cbc_prio { + CBC_PRIO_LOW = 2, + CBC_PRIO_MEDIUM = 3, + CBC_PRIO_HIGH = 6 +}; + +/* + * CBC invalidation types. + */ +enum cbc_inval_type { + CBC_INVAL_T_SIGNAL, + CBC_INVAL_T_GROUP +}; + +/* + * CBC signal and group state flag. + */ +enum cbc_flag { + CBC_INACTIVE, + CBC_ACTIVE +}; + +/* + * CBC queue types. + * Rx queue buffers cbc_requests for virtual UART -> native CBC channels. + * Tx queue buffers cbc_requests for antive CBC cdevs -> virtual UART. + * Free queue buffers the cbc_requests that are not in rx/tx queues for new data + * comming. + */ +enum cbc_queue_type { + CBC_QUEUE_T_RX, + CBC_QUEUE_T_TX, + CBC_QUEUE_T_FREE +}; + +/* + * CBC request types. + */ +enum cbc_request_type { + CBC_REQ_T_PROT, /* CBC protocol request */ + CBC_REQ_T_VMM_S3, /* VMM suspend request */ + CBC_REQ_T_VMM_S5, /* VMM shutdown request */ + CBC_REQ_T_SOC /* SOC state update request */ +}; + +/* + * Open the channel and add it into IOC epoll event data if the channel state + * is ON, otherwise ignore it. + */ +enum ioc_ch_stat { + IOC_CH_OFF, + IOC_CH_ON +}; + +struct cbc_signal { + uint16_t id; /* CBC signal id number */ + uint16_t len; /* CBC signal length in bits not bytes */ + enum cbc_flag flag; /* CBC signal active/inactive flag */ +}; + +struct cbc_group { + uint16_t id; /* CBC group id number */ + enum cbc_flag flag; /* CBC group active/inactive flag */ +}; + +struct wlist_signal { + uint16_t id; + struct cbc_signal *sig; +}; + +struct wlist_group { + uint16_t id; + struct cbc_group *grp; +}; + +/* + * CBC ring is used to buffer bytes before build one complete CBC frame. + */ +struct cbc_ring { + uint32_t head; + uint32_t tail; + uint8_t buf[CBC_RING_BUFFER_SIZE]; +}; + +/* + * CBC configuration contains signal/group tables and whiltlist tables. + */ +struct cbc_config { + int32_t cbc_sig_num; /* CBC signals number */ + int32_t cbc_grp_num; /* CBC groups number */ + int32_t wlist_sig_num; /* Whitelist signals number */ + int32_t wlist_grp_num; /* Whitelist groups number */ + struct cbc_signal *cbc_sig_tbl; /* CBC signals table */ + struct cbc_group *cbc_grp_tbl; /* CBC groups table */ + struct wlist_signal *wlist_sig_tbl; /* Whitelist signals table */ + struct wlist_group *wlist_grp_tbl; /* Whitelist groups table */ +}; + +/* + * IOC channel information. + */ +struct ioc_ch_info { + int32_t fd; /* IOC channel fd */ + char name[32]; /* IOC channel name */ + enum ioc_ch_id id; /* IOC channel identity number */ + enum ioc_ch_stat stat; /* IOC channel state */ +}; + +/* + * CBC request is mainly structure of communication between threads. + */ +struct cbc_request { + int32_t srv_len; /* Service frame length */ + int32_t link_len; /* Link frame length */ + enum ioc_ch_id id; /* Channel id number */ + enum cbc_request_type rtype; /* Request types */ + uint8_t buf[CBC_MAX_FRAME_SIZE]; + + SIMPLEQ_ENTRY(cbc_request) me_queue; +}; + +/* + * CBC packet is mainly structure for CBC protocol process. + */ +struct cbc_pkt { + uint8_t soc_active; /* Record soc state */ + uint8_t hb_state; /* Record Heartbeat state */ + uint32_t reason; /* Record current wakeup reason */ + struct cbc_request *req; /* CBC packet data */ + struct cbc_config *cfg; /* CBC and whitelist configurations */ + enum cbc_queue_type qtype; /* Routes cbc_request to queue */ +}; +#endif