• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  ****************************************************************************
3  ***
4  ***   This header was automatically generated from a Linux kernel header
5  ***   of the same name, to make information necessary for userspace to
6  ***   call into the kernel available to libc.  It contains only constants,
7  ***   structures, and macros generated from the original header, and thus,
8  ***   contains no copyrightable information.
9  ***
10  ***   To edit the content of this header, modify the corresponding
11  ***   source file (e.g. under external/kernel-headers/original/) then
12  ***   run bionic/libc/kernel/tools/update_all.py
13  ***
14  ***   Any manual change here will be lost the next time this script will
15  ***   be run. You've been warned!
16  ***
17  ****************************************************************************
18  ****************************************************************************/
19 #ifndef __UAPI_LINUX_MSM_CAMSENSOR_SDK_H
20 #define __UAPI_LINUX_MSM_CAMSENSOR_SDK_H
21 #include <linux/videodev2.h>
22 #define KVERSION 0x1
23 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
24 #define MAX_POWER_CONFIG 12
25 #define GPIO_OUT_LOW (0 << 1)
26 #define GPIO_OUT_HIGH (1 << 1)
27 #define CSI_EMBED_DATA 0x12
28 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
29 #define CSI_RESERVED_DATA_0 0x13
30 #define CSI_YUV422_8 0x1E
31 #define CSI_RAW8 0x2A
32 #define CSI_RAW10 0x2B
33 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
34 #define CSI_RAW12 0x2C
35 #define CSI_DECODE_6BIT 0
36 #define CSI_DECODE_8BIT 1
37 #define CSI_DECODE_10BIT 2
38 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
39 #define CSI_DECODE_12BIT 3
40 #define CSI_DECODE_DPCM_10_8_10 5
41 #define MAX_CID 16
42 #define I2C_SEQ_REG_DATA_MAX 1024
43 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
44 #define I2C_REG_DATA_MAX (8 * 1024)
45 #define MSM_V4L2_PIX_FMT_META v4l2_fourcc('M', 'E', 'T', 'A')
46 #define MSM_V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4')
47 #define MSM_V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4')
48 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
49 #define MSM_V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('B', 'A', '1', '4')
50 #define MSM_V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4')
51 #define MAX_ACTUATOR_REG_TBL_SIZE 8
52 #define MAX_ACTUATOR_REGION 5
53 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
54 #define NUM_ACTUATOR_DIR 2
55 #define MAX_ACTUATOR_SCENARIO 8
56 #define MAX_ACT_MOD_NAME_SIZE 32
57 #define MAX_ACT_NAME_SIZE 32
58 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
59 #define MAX_ACTUATOR_INIT_SET 120
60 #define MAX_I2C_REG_SET 12
61 #define MAX_LED_TRIGGERS 3
62 #define MSM_EEPROM_MEMORY_MAP_MAX_SIZE 80
63 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
64 #define MSM_EEPROM_MAX_MEM_MAP_CNT 8
65 enum msm_sensor_camera_id_t {
66   CAMERA_0,
67   CAMERA_1,
68 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
69   CAMERA_2,
70   CAMERA_3,
71   MAX_CAMERAS,
72 };
73 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
74 enum i2c_freq_mode_t {
75   I2C_STANDARD_MODE,
76   I2C_FAST_MODE,
77   I2C_CUSTOM_MODE,
78 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
79   I2C_FAST_PLUS_MODE,
80   I2C_MAX_MODES,
81 };
82 enum camb_position_t {
83 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
84   BACK_CAMERA_B,
85   FRONT_CAMERA_B,
86   AUX_CAMERA_B = 0x100,
87   INVALID_CAMERA_B,
88 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
89 };
90 enum msm_sensor_power_seq_type_t {
91   SENSOR_CLK,
92   SENSOR_GPIO,
93 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
94   SENSOR_VREG,
95   SENSOR_I2C_MUX,
96   SENSOR_I2C,
97 };
98 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
99 enum msm_camera_i2c_reg_addr_type {
100   MSM_CAMERA_I2C_BYTE_ADDR = 1,
101   MSM_CAMERA_I2C_WORD_ADDR,
102   MSM_CAMERA_I2C_3B_ADDR,
103 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
104   MSM_CAMERA_I2C_ADDR_TYPE_MAX,
105 };
106 enum msm_camera_i2c_data_type {
107   MSM_CAMERA_I2C_BYTE_DATA = 1,
108 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
109   MSM_CAMERA_I2C_WORD_DATA,
110   MSM_CAMERA_I2C_DWORD_DATA,
111   MSM_CAMERA_I2C_SET_BYTE_MASK,
112   MSM_CAMERA_I2C_UNSET_BYTE_MASK,
113 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
114   MSM_CAMERA_I2C_SET_WORD_MASK,
115   MSM_CAMERA_I2C_UNSET_WORD_MASK,
116   MSM_CAMERA_I2C_SET_BYTE_WRITE_MASK_DATA,
117   MSM_CAMERA_I2C_DATA_TYPE_MAX,
118 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
119 };
120 enum msm_sensor_power_seq_gpio_t {
121   SENSOR_GPIO_RESET,
122   SENSOR_GPIO_STANDBY,
123 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
124   SENSOR_GPIO_AF_PWDM,
125   SENSOR_GPIO_VIO,
126   SENSOR_GPIO_VANA,
127   SENSOR_GPIO_VDIG,
128 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
129   SENSOR_GPIO_VAF,
130   SENSOR_GPIO_FL_EN,
131   SENSOR_GPIO_FL_NOW,
132   SENSOR_GPIO_FL_RESET,
133 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
134   SENSOR_GPIO_CUSTOM1,
135   SENSOR_GPIO_CUSTOM2,
136   SENSOR_GPIO_MAX,
137 };
138 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
139 enum msm_camera_vreg_name_t {
140   CAM_VDIG,
141   CAM_VIO,
142   CAM_VANA,
143 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
144   CAM_VAF,
145   CAM_V_CUSTOM1,
146   CAM_V_CUSTOM2,
147   CAM_VREG_MAX,
148 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
149 };
150 enum msm_sensor_clk_type_t {
151   SENSOR_CAM_MCLK,
152   SENSOR_CAM_CLK,
153 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
154   SENSOR_CAM_CLK_MAX,
155 };
156 enum camerab_mode_t {
157   CAMERA_MODE_2D_B = (1 << 0),
158 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
159   CAMERA_MODE_3D_B = (1 << 1),
160   CAMERA_MODE_INVALID = (1 << 2),
161 };
162 enum msm_actuator_data_type {
163 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
164   MSM_ACTUATOR_BYTE_DATA = 1,
165   MSM_ACTUATOR_WORD_DATA,
166 };
167 enum msm_actuator_addr_type {
168 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
169   MSM_ACTUATOR_BYTE_ADDR = 1,
170   MSM_ACTUATOR_WORD_ADDR,
171 };
172 enum msm_actuator_write_type {
173 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
174   MSM_ACTUATOR_WRITE_HW_DAMP,
175   MSM_ACTUATOR_WRITE_DAC,
176   MSM_ACTUATOR_WRITE,
177   MSM_ACTUATOR_WRITE_DIR_REG,
178 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
179   MSM_ACTUATOR_POLL,
180   MSM_ACTUATOR_READ_WRITE,
181 };
182 enum msm_actuator_i2c_operation {
183 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
184   MSM_ACT_WRITE = 0,
185   MSM_ACT_POLL,
186 };
187 enum actuator_type {
188 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
189   ACTUATOR_VCM,
190   ACTUATOR_PIEZO,
191   ACTUATOR_HVCM,
192   ACTUATOR_BIVCM,
193 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
194 };
195 enum msm_flash_driver_type {
196   FLASH_DRIVER_PMIC,
197   FLASH_DRIVER_I2C,
198 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
199   FLASH_DRIVER_GPIO,
200   FLASH_DRIVER_DEFAULT
201 };
202 enum msm_flash_cfg_type_t {
203 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
204   CFG_FLASH_INIT,
205   CFG_FLASH_RELEASE,
206   CFG_FLASH_OFF,
207   CFG_FLASH_LOW,
208 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
209   CFG_FLASH_HIGH,
210 };
211 enum msm_sensor_output_format_t {
212   MSM_SENSOR_BAYER,
213 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
214   MSM_SENSOR_YCBCR,
215   MSM_SENSOR_META,
216 };
217 struct msm_sensor_power_setting {
218 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
219   enum msm_sensor_power_seq_type_t seq_type;
220   unsigned short seq_val;
221   long config_val;
222   unsigned short delay;
223 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
224   void * data[10];
225 };
226 struct msm_sensor_power_setting_array {
227   struct msm_sensor_power_setting power_setting_a[MAX_POWER_CONFIG];
228 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
229   struct msm_sensor_power_setting * power_setting;
230   unsigned short size;
231   struct msm_sensor_power_setting power_down_setting_a[MAX_POWER_CONFIG];
232   struct msm_sensor_power_setting * power_down_setting;
233 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
234   unsigned short size_down;
235 };
236 enum msm_camera_i2c_operation {
237   MSM_CAM_WRITE = 0,
238 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
239   MSM_CAM_POLL,
240   MSM_CAM_READ,
241 };
242 struct msm_sensor_i2c_sync_params {
243 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
244   unsigned int cid;
245   int csid;
246   unsigned short line;
247   unsigned short delay;
248 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
249 };
250 struct msm_camera_reg_settings_t {
251   uint16_t reg_addr;
252   enum msm_camera_i2c_reg_addr_type addr_type;
253 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
254   uint16_t reg_data;
255   enum msm_camera_i2c_data_type data_type;
256   enum msm_camera_i2c_operation i2c_operation;
257   uint16_t delay;
258 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
259 };
260 struct msm_eeprom_mem_map_t {
261   int slave_addr;
262   struct msm_camera_reg_settings_t mem_settings[MSM_EEPROM_MEMORY_MAP_MAX_SIZE];
263 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
264   int memory_map_size;
265 };
266 struct msm_eeprom_memory_map_array {
267   struct msm_eeprom_mem_map_t memory_map[MSM_EEPROM_MAX_MEM_MAP_CNT];
268 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
269   uint32_t msm_size_of_max_mappings;
270 };
271 struct msm_sensor_init_params {
272   int modes_supported;
273 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
274   enum camb_position_t position;
275   unsigned int sensor_mount_angle;
276 };
277 struct msm_sensor_id_info_t {
278 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
279   unsigned short sensor_id_reg_addr;
280   unsigned short sensor_id;
281   unsigned short sensor_id_mask;
282 };
283 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
284 struct msm_camera_sensor_slave_info {
285   char sensor_name[32];
286   char eeprom_name[32];
287   char actuator_name[32];
288 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
289   char ois_name[32];
290   char flash_name[32];
291   enum msm_sensor_camera_id_t camera_id;
292   unsigned short slave_addr;
293 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
294   enum i2c_freq_mode_t i2c_freq_mode;
295   enum msm_camera_i2c_reg_addr_type addr_type;
296   struct msm_sensor_id_info_t sensor_id_info;
297   struct msm_sensor_power_setting_array power_setting_array;
298 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
299   unsigned char is_init_params_valid;
300   struct msm_sensor_init_params sensor_init_params;
301   enum msm_sensor_output_format_t output_format;
302 };
303 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
304 struct msm_camera_i2c_reg_array {
305   unsigned short reg_addr;
306   unsigned short reg_data;
307   unsigned int delay;
308 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
309 };
310 struct msm_camera_i2c_reg_setting {
311   struct msm_camera_i2c_reg_array * reg_setting;
312   unsigned short size;
313 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
314   enum msm_camera_i2c_reg_addr_type addr_type;
315   enum msm_camera_i2c_data_type data_type;
316   unsigned short delay;
317 };
318 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
319 struct msm_camera_csid_vc_cfg {
320   unsigned char cid;
321   unsigned char dt;
322   unsigned char decode_format;
323 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
324 };
325 struct msm_camera_csid_lut_params {
326   unsigned char num_cid;
327   struct msm_camera_csid_vc_cfg vc_cfg_a[MAX_CID];
328 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
329   struct msm_camera_csid_vc_cfg * vc_cfg[MAX_CID];
330 };
331 struct msm_camera_csid_params {
332   unsigned char lane_cnt;
333 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
334   unsigned short lane_assign;
335   unsigned char phy_sel;
336   unsigned int csi_clk;
337   struct msm_camera_csid_lut_params lut_params;
338 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
339   unsigned char csi_3p_sel;
340 };
341 struct msm_camera_csid_testmode_parms {
342   unsigned int num_bytes_per_line;
343 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
344   unsigned int num_lines;
345   unsigned int h_blanking_count;
346   unsigned int v_blanking_count;
347   unsigned int payload_mode;
348 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
349 };
350 struct msm_camera_csiphy_params {
351   unsigned char lane_cnt;
352   unsigned char settle_cnt;
353 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
354   unsigned short lane_mask;
355   unsigned char combo_mode;
356   unsigned char csid_core;
357   unsigned int csiphy_clk;
358 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
359   unsigned char csi_3phase;
360 };
361 struct msm_camera_i2c_seq_reg_array {
362   unsigned short reg_addr;
363 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
364   unsigned char reg_data[I2C_SEQ_REG_DATA_MAX];
365   unsigned short reg_data_size;
366 };
367 struct msm_camera_i2c_seq_reg_setting {
368 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
369   struct msm_camera_i2c_seq_reg_array * reg_setting;
370   unsigned short size;
371   enum msm_camera_i2c_reg_addr_type addr_type;
372   unsigned short delay;
373 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
374 };
375 struct msm_actuator_reg_params_t {
376   enum msm_actuator_write_type reg_write_type;
377   unsigned int hw_mask;
378 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
379   unsigned short reg_addr;
380   unsigned short hw_shift;
381   unsigned short data_shift;
382   unsigned short data_type;
383 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
384   unsigned short addr_type;
385   unsigned short reg_data;
386   unsigned short delay;
387 };
388 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
389 struct damping_params_t {
390   unsigned int damping_step;
391   unsigned int damping_delay;
392   unsigned int hw_params;
393 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
394 };
395 struct region_params_t {
396   unsigned short step_bound[2];
397   unsigned short code_per_step;
398 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
399   unsigned int qvalue;
400 };
401 struct reg_settings_t {
402   unsigned short reg_addr;
403 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
404   enum msm_actuator_addr_type addr_type;
405   unsigned short reg_data;
406   enum msm_actuator_data_type data_type;
407   enum msm_actuator_i2c_operation i2c_operation;
408 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
409   unsigned int delay;
410 };
411 struct msm_camera_i2c_reg_setting_array {
412   struct msm_camera_i2c_reg_array reg_setting_a[MAX_I2C_REG_SET];
413 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
414   unsigned short size;
415   enum msm_camera_i2c_reg_addr_type addr_type;
416   enum msm_camera_i2c_data_type data_type;
417   unsigned short delay;
418 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
419 };
420 #endif
421 
422