18c2ecf20Sopenharmony_ci/****************************************************************************\ 28c2ecf20Sopenharmony_ci* 38c2ecf20Sopenharmony_ci* Module Name displayobjectsoc15.h 48c2ecf20Sopenharmony_ci* Project 58c2ecf20Sopenharmony_ci* Device 68c2ecf20Sopenharmony_ci* 78c2ecf20Sopenharmony_ci* Description Contains the common definitions for display objects for SoC15 products. 88c2ecf20Sopenharmony_ci* 98c2ecf20Sopenharmony_ci* Copyright 2014 Advanced Micro Devices, Inc. 108c2ecf20Sopenharmony_ci* 118c2ecf20Sopenharmony_ci* Permission is hereby granted, free of charge, to any person obtaining a copy of this software 128c2ecf20Sopenharmony_ci* and associated documentation files (the "Software"), to deal in the Software without restriction, 138c2ecf20Sopenharmony_ci* including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 148c2ecf20Sopenharmony_ci* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 158c2ecf20Sopenharmony_ci* subject to the following conditions: 168c2ecf20Sopenharmony_ci* 178c2ecf20Sopenharmony_ci* The above copyright notice and this permission notice shall be included in all copies or substantial 188c2ecf20Sopenharmony_ci* portions of the Software. 198c2ecf20Sopenharmony_ci* 208c2ecf20Sopenharmony_ci* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 218c2ecf20Sopenharmony_ci* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 228c2ecf20Sopenharmony_ci* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 238c2ecf20Sopenharmony_ci* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 248c2ecf20Sopenharmony_ci* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 258c2ecf20Sopenharmony_ci* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 268c2ecf20Sopenharmony_ci* OTHER DEALINGS IN THE SOFTWARE. 278c2ecf20Sopenharmony_ci* 288c2ecf20Sopenharmony_ci\****************************************************************************/ 298c2ecf20Sopenharmony_ci#ifndef _DISPLAY_OBJECT_SOC15_H_ 308c2ecf20Sopenharmony_ci#define _DISPLAY_OBJECT_SOC15_H_ 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci#if defined(_X86_) 338c2ecf20Sopenharmony_ci#pragma pack(1) 348c2ecf20Sopenharmony_ci#endif 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci/**************************************************** 388c2ecf20Sopenharmony_ci* Display Object Type Definition 398c2ecf20Sopenharmony_ci*****************************************************/ 408c2ecf20Sopenharmony_cienum display_object_type{ 418c2ecf20Sopenharmony_ciDISPLAY_OBJECT_TYPE_NONE =0x00, 428c2ecf20Sopenharmony_ciDISPLAY_OBJECT_TYPE_GPU =0x01, 438c2ecf20Sopenharmony_ciDISPLAY_OBJECT_TYPE_ENCODER =0x02, 448c2ecf20Sopenharmony_ciDISPLAY_OBJECT_TYPE_CONNECTOR =0x03 458c2ecf20Sopenharmony_ci}; 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci/**************************************************** 488c2ecf20Sopenharmony_ci* Encorder Object Type Definition 498c2ecf20Sopenharmony_ci*****************************************************/ 508c2ecf20Sopenharmony_cienum encoder_object_type{ 518c2ecf20Sopenharmony_ciENCODER_OBJECT_ID_NONE =0x00, 528c2ecf20Sopenharmony_ciENCODER_OBJECT_ID_INTERNAL_UNIPHY =0x01, 538c2ecf20Sopenharmony_ciENCODER_OBJECT_ID_INTERNAL_UNIPHY1 =0x02, 548c2ecf20Sopenharmony_ciENCODER_OBJECT_ID_INTERNAL_UNIPHY2 =0x03, 558c2ecf20Sopenharmony_ci}; 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci/**************************************************** 598c2ecf20Sopenharmony_ci* Connector Object ID Definition 608c2ecf20Sopenharmony_ci*****************************************************/ 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_cienum connector_object_type{ 638c2ecf20Sopenharmony_ciCONNECTOR_OBJECT_ID_NONE =0x00, 648c2ecf20Sopenharmony_ciCONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D =0x01, 658c2ecf20Sopenharmony_ciCONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D =0x02, 668c2ecf20Sopenharmony_ciCONNECTOR_OBJECT_ID_HDMI_TYPE_A =0x03, 678c2ecf20Sopenharmony_ciCONNECTOR_OBJECT_ID_LVDS =0x04, 688c2ecf20Sopenharmony_ciCONNECTOR_OBJECT_ID_DISPLAYPORT =0x05, 698c2ecf20Sopenharmony_ciCONNECTOR_OBJECT_ID_eDP =0x06, 708c2ecf20Sopenharmony_ciCONNECTOR_OBJECT_ID_OPM =0x07 718c2ecf20Sopenharmony_ci}; 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci/**************************************************** 758c2ecf20Sopenharmony_ci* Protection Object ID Definition 768c2ecf20Sopenharmony_ci*****************************************************/ 778c2ecf20Sopenharmony_ci//No need 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ci/**************************************************** 808c2ecf20Sopenharmony_ci* Object ENUM ID Definition 818c2ecf20Sopenharmony_ci*****************************************************/ 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_cienum object_enum_id{ 848c2ecf20Sopenharmony_ciOBJECT_ENUM_ID1 =0x01, 858c2ecf20Sopenharmony_ciOBJECT_ENUM_ID2 =0x02, 868c2ecf20Sopenharmony_ciOBJECT_ENUM_ID3 =0x03, 878c2ecf20Sopenharmony_ciOBJECT_ENUM_ID4 =0x04, 888c2ecf20Sopenharmony_ciOBJECT_ENUM_ID5 =0x05, 898c2ecf20Sopenharmony_ciOBJECT_ENUM_ID6 =0x06 908c2ecf20Sopenharmony_ci}; 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci/**************************************************** 938c2ecf20Sopenharmony_ci*Object ID Bit definition 948c2ecf20Sopenharmony_ci*****************************************************/ 958c2ecf20Sopenharmony_cienum object_id_bit{ 968c2ecf20Sopenharmony_ciOBJECT_ID_MASK =0x00FF, 978c2ecf20Sopenharmony_ciENUM_ID_MASK =0x0F00, 988c2ecf20Sopenharmony_ciOBJECT_TYPE_MASK =0xF000, 998c2ecf20Sopenharmony_ciOBJECT_ID_SHIFT =0x00, 1008c2ecf20Sopenharmony_ciENUM_ID_SHIFT =0x08, 1018c2ecf20Sopenharmony_ciOBJECT_TYPE_SHIFT =0x0C 1028c2ecf20Sopenharmony_ci}; 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci/**************************************************** 1068c2ecf20Sopenharmony_ci* GPU Object definition - Shared with BIOS 1078c2ecf20Sopenharmony_ci*****************************************************/ 1088c2ecf20Sopenharmony_cienum gpu_objet_def{ 1098c2ecf20Sopenharmony_ciGPU_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_GPU << OBJECT_TYPE_SHIFT | OBJECT_ENUM_ID1 << ENUM_ID_SHIFT) 1108c2ecf20Sopenharmony_ci}; 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci/**************************************************** 1138c2ecf20Sopenharmony_ci* Encoder Object definition - Shared with BIOS 1148c2ecf20Sopenharmony_ci*****************************************************/ 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_cienum encoder_objet_def{ 1178c2ecf20Sopenharmony_ciENCODER_INTERNAL_UNIPHY_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ 1188c2ecf20Sopenharmony_ci OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ 1198c2ecf20Sopenharmony_ci ENCODER_OBJECT_ID_INTERNAL_UNIPHY << OBJECT_ID_SHIFT), 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_ciENCODER_INTERNAL_UNIPHY_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ 1228c2ecf20Sopenharmony_ci OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ 1238c2ecf20Sopenharmony_ci ENCODER_OBJECT_ID_INTERNAL_UNIPHY << OBJECT_ID_SHIFT), 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_ciENCODER_INTERNAL_UNIPHY1_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ 1268c2ecf20Sopenharmony_ci OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ 1278c2ecf20Sopenharmony_ci ENCODER_OBJECT_ID_INTERNAL_UNIPHY1 << OBJECT_ID_SHIFT), 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_ciENCODER_INTERNAL_UNIPHY1_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ 1308c2ecf20Sopenharmony_ci OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ 1318c2ecf20Sopenharmony_ci ENCODER_OBJECT_ID_INTERNAL_UNIPHY1 << OBJECT_ID_SHIFT), 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_ciENCODER_INTERNAL_UNIPHY2_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ 1348c2ecf20Sopenharmony_ci OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ 1358c2ecf20Sopenharmony_ci ENCODER_OBJECT_ID_INTERNAL_UNIPHY2 << OBJECT_ID_SHIFT), 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_ciENCODER_INTERNAL_UNIPHY2_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_ENCODER << OBJECT_TYPE_SHIFT |\ 1388c2ecf20Sopenharmony_ci OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ 1398c2ecf20Sopenharmony_ci ENCODER_OBJECT_ID_INTERNAL_UNIPHY2 << OBJECT_ID_SHIFT) 1408c2ecf20Sopenharmony_ci}; 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci/**************************************************** 1448c2ecf20Sopenharmony_ci* Connector Object definition - Shared with BIOS 1458c2ecf20Sopenharmony_ci*****************************************************/ 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_ci 1488c2ecf20Sopenharmony_cienum connector_objet_def{ 1498c2ecf20Sopenharmony_ciCONNECTOR_LVDS_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1508c2ecf20Sopenharmony_ci OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ 1518c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_LVDS << OBJECT_ID_SHIFT), 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_ci 1548c2ecf20Sopenharmony_ciCONNECTOR_eDP_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1558c2ecf20Sopenharmony_ci OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ 1568c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_eDP << OBJECT_ID_SHIFT), 1578c2ecf20Sopenharmony_ci 1588c2ecf20Sopenharmony_ciCONNECTOR_SINGLE_LINK_DVI_D_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1598c2ecf20Sopenharmony_ci OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ 1608c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D << OBJECT_ID_SHIFT), 1618c2ecf20Sopenharmony_ci 1628c2ecf20Sopenharmony_ciCONNECTOR_SINGLE_LINK_DVI_D_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1638c2ecf20Sopenharmony_ci OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ 1648c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D << OBJECT_ID_SHIFT), 1658c2ecf20Sopenharmony_ci 1668c2ecf20Sopenharmony_ci 1678c2ecf20Sopenharmony_ciCONNECTOR_DUAL_LINK_DVI_D_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1688c2ecf20Sopenharmony_ci OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ 1698c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D << OBJECT_ID_SHIFT), 1708c2ecf20Sopenharmony_ci 1718c2ecf20Sopenharmony_ciCONNECTOR_DUAL_LINK_DVI_D_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1728c2ecf20Sopenharmony_ci OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ 1738c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D << OBJECT_ID_SHIFT), 1748c2ecf20Sopenharmony_ci 1758c2ecf20Sopenharmony_ciCONNECTOR_HDMI_TYPE_A_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1768c2ecf20Sopenharmony_ci OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ 1778c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_HDMI_TYPE_A << OBJECT_ID_SHIFT), 1788c2ecf20Sopenharmony_ci 1798c2ecf20Sopenharmony_ciCONNECTOR_HDMI_TYPE_A_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1808c2ecf20Sopenharmony_ci OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ 1818c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_HDMI_TYPE_A << OBJECT_ID_SHIFT), 1828c2ecf20Sopenharmony_ci 1838c2ecf20Sopenharmony_ciCONNECTOR_DISPLAYPORT_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1848c2ecf20Sopenharmony_ci OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ 1858c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT), 1868c2ecf20Sopenharmony_ci 1878c2ecf20Sopenharmony_ciCONNECTOR_DISPLAYPORT_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1888c2ecf20Sopenharmony_ci OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ 1898c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT), 1908c2ecf20Sopenharmony_ci 1918c2ecf20Sopenharmony_ciCONNECTOR_DISPLAYPORT_ENUM_ID3 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1928c2ecf20Sopenharmony_ci OBJECT_ENUM_ID3 << ENUM_ID_SHIFT |\ 1938c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT), 1948c2ecf20Sopenharmony_ci 1958c2ecf20Sopenharmony_ciCONNECTOR_DISPLAYPORT_ENUM_ID4 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 1968c2ecf20Sopenharmony_ci OBJECT_ENUM_ID4 << ENUM_ID_SHIFT |\ 1978c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_DISPLAYPORT << OBJECT_ID_SHIFT), 1988c2ecf20Sopenharmony_ci 1998c2ecf20Sopenharmony_ciCONNECTOR_OPM_ENUM_ID1 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 2008c2ecf20Sopenharmony_ci OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\ 2018c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT), //Mapping to MXM_DP_A 2028c2ecf20Sopenharmony_ci 2038c2ecf20Sopenharmony_ciCONNECTOR_OPM_ENUM_ID2 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 2048c2ecf20Sopenharmony_ci OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\ 2058c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT), //Mapping to MXM_DP_B 2068c2ecf20Sopenharmony_ci 2078c2ecf20Sopenharmony_ciCONNECTOR_OPM_ENUM_ID3 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 2088c2ecf20Sopenharmony_ci OBJECT_ENUM_ID3 << ENUM_ID_SHIFT |\ 2098c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT), //Mapping to MXM_DP_C 2108c2ecf20Sopenharmony_ci 2118c2ecf20Sopenharmony_ciCONNECTOR_OPM_ENUM_ID4 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 2128c2ecf20Sopenharmony_ci OBJECT_ENUM_ID4 << ENUM_ID_SHIFT |\ 2138c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT), //Mapping to MXM_DP_D 2148c2ecf20Sopenharmony_ci 2158c2ecf20Sopenharmony_ciCONNECTOR_OPM_ENUM_ID5 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 2168c2ecf20Sopenharmony_ci OBJECT_ENUM_ID5 << ENUM_ID_SHIFT |\ 2178c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT), //Mapping to MXM_LVDS_TXxx 2188c2ecf20Sopenharmony_ci 2198c2ecf20Sopenharmony_ci 2208c2ecf20Sopenharmony_ciCONNECTOR_OPM_ENUM_ID6 =( DISPLAY_OBJECT_TYPE_CONNECTOR << OBJECT_TYPE_SHIFT |\ 2218c2ecf20Sopenharmony_ci OBJECT_ENUM_ID6 << ENUM_ID_SHIFT |\ 2228c2ecf20Sopenharmony_ci CONNECTOR_OBJECT_ID_OPM << OBJECT_ID_SHIFT) //Mapping to MXM_LVDS_TXxx 2238c2ecf20Sopenharmony_ci}; 2248c2ecf20Sopenharmony_ci 2258c2ecf20Sopenharmony_ci/**************************************************** 2268c2ecf20Sopenharmony_ci* Router Object ID definition - Shared with BIOS 2278c2ecf20Sopenharmony_ci*****************************************************/ 2288c2ecf20Sopenharmony_ci//No Need, in future we ever need, we can define a record in atomfirwareSoC15.h associated with an object that has this router 2298c2ecf20Sopenharmony_ci 2308c2ecf20Sopenharmony_ci 2318c2ecf20Sopenharmony_ci/**************************************************** 2328c2ecf20Sopenharmony_ci* PROTECTION Object ID definition - Shared with BIOS 2338c2ecf20Sopenharmony_ci*****************************************************/ 2348c2ecf20Sopenharmony_ci//No need,in future we ever need, all display path are capable of protection now. 2358c2ecf20Sopenharmony_ci 2368c2ecf20Sopenharmony_ci/**************************************************** 2378c2ecf20Sopenharmony_ci* Generic Object ID definition - Shared with BIOS 2388c2ecf20Sopenharmony_ci*****************************************************/ 2398c2ecf20Sopenharmony_ci//No need, in future we ever need like GLsync, we can define a record in atomfirwareSoC15.h associated with an object. 2408c2ecf20Sopenharmony_ci 2418c2ecf20Sopenharmony_ci 2428c2ecf20Sopenharmony_ci#if defined(_X86_) 2438c2ecf20Sopenharmony_ci#pragma pack() 2448c2ecf20Sopenharmony_ci#endif 2458c2ecf20Sopenharmony_ci 2468c2ecf20Sopenharmony_ci#endif 2478c2ecf20Sopenharmony_ci 2488c2ecf20Sopenharmony_ci 2498c2ecf20Sopenharmony_ci 250