13c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/**************************************************************************** 23c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang **************************************************************************** 33c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** 43c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** This header was automatically generated from a Linux kernel header 53c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** of the same name, to make information necessary for userspace to 63c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** call into the kernel available to libc. It contains only constants, 73c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** structures, and macros generated from the original header, and thus, 83c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** contains no copyrightable information. 93c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** 103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** To edit the content of this header, modify the corresponding 113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** source file (e.g. under external/kernel-headers/original/) then 123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** run bionic/libc/kernel/tools/update_all.py 133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** 143c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** Any manual change here will be lost the next time this script will 153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** be run. You've been warned! 163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang *** 173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang **************************************************************************** 183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang ****************************************************************************/ 193c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#ifndef __LINUX_MSMB_CAMERA_H 203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define __LINUX_MSMB_CAMERA_H 213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#include <linux/videodev2.h> 223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#include <linux/types.h> 233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 243c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#include <linux/ioctl.h> 253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAM_V4L2_IOCTL_NOTIFY _IOW('V', BASE_VIDIOC_PRIVATE + 30, struct msm_v4l2_event_data) 263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAM_V4L2_IOCTL_NOTIFY_META _IOW('V', BASE_VIDIOC_PRIVATE + 31, struct msm_v4l2_event_data) 273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAM_V4L2_IOCTL_CMD_ACK _IOW('V', BASE_VIDIOC_PRIVATE + 32, struct msm_v4l2_event_data) 283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 293c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAM_V4L2_IOCTL_NOTIFY_ERROR _IOW('V', BASE_VIDIOC_PRIVATE + 33, struct msm_v4l2_event_data) 303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define QCAMERA_DEVICE_GROUP_ID 1 313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define QCAMERA_VNODE_GROUP_ID 2 323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_NAME "msm_camera" 333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 343c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CONFIGURATION_NAME "msm_config" 353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_CSIPHY 0 363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_CSID 1 373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_ISPIF 2 383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 393c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_VFE 3 403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_AXI 4 413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_VPE 5 423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_SENSOR 6 433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 443c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_ACTUATOR 7 453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_EEPROM 8 463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_CPP 9 473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_CCI 10 483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 493c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_LED_FLASH 11 503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_STROBE_FLASH 12 513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_BUF_MNGR 13 523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_SENSOR_INIT 14 533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 54f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_SUBDEV_OIS 15 553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SUBDEV_CCI_INTF 20 563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_MAX_CAMERA_SENSORS 5 573c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_MAX_STREAM_BUF 40 583c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 59f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_FEATURE_BASE 0x00010000 603c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_FEATURE_SHUTDOWN (MSM_CAMERA_FEATURE_BASE + 1) 613c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_STATUS_BASE 0x00020000 623c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_STATUS_FAIL (MSM_CAMERA_STATUS_BASE + 1) 633c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 64f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_STATUS_SUCCESS (MSM_CAMERA_STATUS_BASE + 2) 653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_V4L2_EVENT_TYPE (V4L2_EVENT_PRIVATE_START + 0x00002000) 663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_EVENT_MIN 0 673c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_NEW_SESSION (MSM_CAMERA_EVENT_MIN + 1) 683c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 69f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_DEL_SESSION (MSM_CAMERA_EVENT_MIN + 2) 703c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_SET_PARM (MSM_CAMERA_EVENT_MIN + 3) 713c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_GET_PARM (MSM_CAMERA_EVENT_MIN + 4) 723c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_MAPPING_CFG (MSM_CAMERA_EVENT_MIN + 5) 733c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 74f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_MAPPING_SES (MSM_CAMERA_EVENT_MIN + 6) 753c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_MSM_NOTIFY (MSM_CAMERA_EVENT_MIN + 7) 763c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_EVENT_MAX (MSM_CAMERA_EVENT_MIN + 8) 773c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_S_CROP (V4L2_CID_PRIVATE_BASE + 1) 783c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 79f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_PRIV_G_CROP (V4L2_CID_PRIVATE_BASE + 2) 803c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_G_FMT (V4L2_CID_PRIVATE_BASE + 3) 813c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_S_FMT (V4L2_CID_PRIVATE_BASE + 4) 823c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_TRY_FMT (V4L2_CID_PRIVATE_BASE + 5) 833c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 84f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_PRIV_METADATA (V4L2_CID_PRIVATE_BASE + 6) 853c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_QUERY_CAP (V4L2_CID_PRIVATE_BASE + 7) 863c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_STREAM_ON (V4L2_CID_PRIVATE_BASE + 8) 873c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_STREAM_OFF (V4L2_CID_PRIVATE_BASE + 9) 883c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 89f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_PRIV_NEW_STREAM (V4L2_CID_PRIVATE_BASE + 10) 903c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_DEL_STREAM (V4L2_CID_PRIVATE_BASE + 11) 913c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_SHUTDOWN (V4L2_CID_PRIVATE_BASE + 12) 923c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_PRIV_STREAM_INFO_SYNC (V4L2_CID_PRIVATE_BASE + 13) 933c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 94f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_CMD_SUCESS 0x00000001 953c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_BUF_MAP_SUCESS 0x00000002 963c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_ERR_EVT_BASE 0x00010000 973c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_CAMERA_ERR_CMD_FAIL (MSM_CAMERA_ERR_EVT_BASE + 1) 983c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 99f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_CAMERA_ERR_MAPPING (MSM_CAMERA_ERR_EVT_BASE + 2) 1003c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_v4l2_event_data { 1013c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int command; 1023c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int status; 1033c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 104f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab unsigned int session_id; 1053c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int stream_id; 1063c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int map_op; 1073c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int map_buf_idx; 1083c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 109f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab unsigned int notify; 1103c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int arg_value; 1113c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int ret_value; 1123c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int v4l2_event_type; 1133c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 114f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab unsigned int v4l2_event_id; 1153c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int nop5; 1163c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int nop6; 1173c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int nop7; 1183c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 119f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab unsigned int nop8; 1203c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int nop9; 1213c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1223c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_v4l2_format_data { 1233c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 124f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab enum v4l2_buf_type type; 1253c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int width; 1263c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int height; 1273c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int pixelformat; 1283c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 129f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab unsigned char num_planes; 1303c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang unsigned int plane_sizes[VIDEO_MAX_PLANES]; 1313c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1323c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define msm_v4l2_fourcc(a, b, c, d) ((__u32)(a) | ((__u32)(b) << 8) | ((__u32)(c) << 16) | ((__u32)(d) << 24)) 1333c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 134f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_V4L2_PIX_FMT_STATS_COMB v4l2_fourcc('S', 'T', 'C', 'M') 1353c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_AE v4l2_fourcc('S', 'T', 'A', 'E') 1363c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_AF v4l2_fourcc('S', 'T', 'A', 'F') 1373c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_AWB v4l2_fourcc('S', 'T', 'W', 'B') 1383c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 139f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_V4L2_PIX_FMT_STATS_IHST v4l2_fourcc('I', 'H', 'S', 'T') 1403c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_CS v4l2_fourcc('S', 'T', 'C', 'S') 1413c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_RS v4l2_fourcc('S', 'T', 'R', 'S') 1423c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_BG v4l2_fourcc('S', 'T', 'B', 'G') 1433c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 144f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab#define MSM_V4L2_PIX_FMT_STATS_BF v4l2_fourcc('S', 'T', 'B', 'F') 1453c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#define MSM_V4L2_PIX_FMT_STATS_BHST v4l2_fourcc('B', 'H', 'S', 'T') 1463c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangenum smmu_attach_mode { 1473c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang NON_SECURE_MODE, 1483c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 149f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab SECURE_MODE, 1503c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MAX_PROTECTION_MODE, 1513c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1523c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wangstruct msm_camera_smmu_attach_type { 1533c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ 154f6bc42d03f50713e4981b36beda109a565d4b07cMansoor Aftab enum smmu_attach_mode attach; 1553c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang}; 1563c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang#endif 157