#ifdef MAXCOMPILER_VERSION_INFO #define MAXCOMPILER_VERSION_INFO_PRESENT 1 #define MAXFILE_MAXCOMPILER_VERSION_YEAR 2018 #define MAXFILE_MAXCOMPILER_VERSION_NUM 3 #define MAXFILE_MAXCOMPILER_VERSION_POINT 1 #define MAXFILE_MAXCOMPILER_VERSION_PATCH "" #define MAXFILE_MAXCOMPILER_VERSION_REV "b189b8e" #define MAXFILE_MAXCOMPILER_VERSION_RELEASE_DATE "2019-01-09" #define MAXFILE_MAXCOMPILER_VERSION_RELEASE_MODE true #endif #ifdef MAXFILE_BUILD_INFO #define MAXFILE_BUILD_INFO_PRESENT 1 #define MAXFILE_BUILD_NAME "StreamFMA" #define MAXFILE_BUILD_DIR "/mnt/beegfs/home/jusers/makni1/jumax/makni2/starpu.git/tests/./StreamFMA_MAX5C_DFE_SIM" #define MAXFILE_BUILD_DATE 20200128 #define MAXFILE_BUILD_REV 1 #endif #ifdef PARAM #define PARAM_PRESENT 1 PARAM(DYNAMIC_CLOCKS_ENABLED, 0) PARAM(MemCtrlPro_TotalNumStreams0, 6) PARAM(MemCtrlPro_NumRdStreams0, 4) PARAM(MemCtrlPro_NumWrStreams0, 2) PARAM(MemCtrlPro_DDRType0, 4) PARAM(MemCtrlPro_BurstSizeInBytes0, 192) PARAM(MemCtrlPro_MainFIFODepth0, 512) PARAM(APP_ID, 0) PARAM(REV_ID, 0) PARAM(CHAIN_LENGTH, 160) PARAM(IS_SIMULATION, 1) PARAM(MEC_SUPPORTED, 1) PARAM(PCIE_SLAVE_STREAMING, 0) PARAM(PCIE_ALIGNMENT, 16) PARAM(NUM_IFPGA_LINKS, 0) #endif #ifdef STRING_PARAM #define STRING_PARAM_PRESENT 1 STRING_PARAM(BOARD_MODEL, "MAX5_LIMA") #endif #ifdef INCLUDE_GENERATED_CPP_HEADERS #include "StateMachineManagerBlock_impl_addrgen_cmd_MemoryControllerPro0_oDataT2.h" #endif #ifdef INCLUDE_GENERATED_CPP_HEADERS #include "StateMachineManagerBlock_impl_addrgen_cmd_MemoryControllerPro0_oDataT1.h" #endif #ifdef INCLUDE_GENERATED_CPP_HEADERS #include "StateMachineManagerBlock_impl_addrgen_cmd_MemoryControllerPro0_inBT2.h" #endif #ifdef INCLUDE_GENERATED_CPP_HEADERS #include "StateMachineManagerBlock_impl_addrgen_cmd_MemoryControllerPro0_inAT3.h" #endif #ifdef INCLUDE_GENERATED_CPP_HEADERS #include "StateMachineManagerBlock_impl_addrgen_cmd_MemoryControllerPro0_inBT3.h" #endif #ifdef INCLUDE_GENERATED_CPP_HEADERS #include "StateMachineManagerBlock_impl_addrgen_cmd_MemoryControllerPro0_inAT2.h" #endif #ifdef INCLUDE_GENERATED_CPP_HEADERS #include "StateMachineManagerBlock_impl_MemoryControllerPro0.h" #endif #ifdef INCLUDE_GENERATED_CPP_HEADERS #include "StreamFMAKernel.h" #endif #ifdef ENGINE_PARAMETERS #define ENGINE_PARAMETERS_PRESENT 1 ENGINE_PARAMETERS(DFEModel, DFEMODEL, MAIA) ENGINE_PARAMETERS(maxFileName, STRING, "StreamFMA") ENGINE_PARAMETERS(target, ENUM, DFE_SIM) ENGINE_PARAMETERS(enableMPCX, BOOL, false) ENGINE_PARAMETERS(MPPRStartCT, INT, 1) ENGINE_PARAMETERS(MPPREndCT, INT, 1) ENGINE_PARAMETERS(MPPRThreads, INT, 1) ENGINE_PARAMETERS(MPPRRetryThreshold, INT, 0) #endif #ifdef MANAGER_NODE #define MANAGER_NODE_PRESENT 1 MANAGER_NODE(StreamFMAKernel, Kernel) MANAGER_NODE(inAT1, PCIe_From_Host) MANAGER_NODE(inBT1, PCIe_From_Host) MANAGER_NODE(oDataT3, PCIe_To_Host) MANAGER_NODE(MemoryControllerPro0, ManagerStateMachine_MemoryControllerPro0) MANAGER_NODE(MemoryControllerPro0_IntSource, MemoryInterruptSource) MANAGER_NODE(MemoryControllerInterface_b, MemoryControllerInterface_b) MANAGER_NODE(MemoryControllerInterface_a, MemoryControllerInterface_a) MANAGER_NODE(MemoryControllerInterface_c, MemoryControllerInterface_c) MANAGER_NODE(addrgen_cmd_MemoryControllerPro0_inAT2, ManagerStateMachine_addrgen_cmd_MemoryControllerPro0_inAT2) MANAGER_NODE(addrgen_cmd_MemoryControllerPro0_inBT2, ManagerStateMachine_addrgen_cmd_MemoryControllerPro0_inBT2) MANAGER_NODE(addrgen_cmd_MemoryControllerPro0_inAT3, ManagerStateMachine_addrgen_cmd_MemoryControllerPro0_inAT3) MANAGER_NODE(addrgen_cmd_MemoryControllerPro0_inBT3, ManagerStateMachine_addrgen_cmd_MemoryControllerPro0_inBT3) MANAGER_NODE(addrgen_cmd_MemoryControllerPro0_oDataT1, ManagerStateMachine_addrgen_cmd_MemoryControllerPro0_oDataT1) MANAGER_NODE(addrgen_cmd_MemoryControllerPro0_oDataT2, ManagerStateMachine_addrgen_cmd_MemoryControllerPro0_oDataT2) MANAGER_NODE(Stream_34_pipeline_4, Stream_34_pipeline) MANAGER_NODE(Stream_29_pipeline_4, Stream_29_pipeline) MANAGER_NODE(Stream_39_pipeline_4, Stream_39_pipeline) MANAGER_NODE(Stream_28_pipeline_4, Stream_28_pipeline) MANAGER_NODE(Stream_33_pipeline_4, Stream_33_pipeline) MANAGER_NODE(Stream_38_pipeline_4, Stream_38_pipeline) MANAGER_NODE(Stream_60, DualAspectReg) MANAGER_NODE(Stream_64, DualAspectReg) MANAGER_NODE(Stream_1, DualAspectMux) MANAGER_NODE(Stream_4, DualAspectMux) MANAGER_NODE(Stream_8, DualAspectMux) MANAGER_NODE(Stream_10, DualAspectMux) MANAGER_NODE(Stream_12, DualAspectMux) MANAGER_NODE(Stream_14, DualAspectMux) MANAGER_NODE(Stream_20, DualAspectReg) MANAGER_NODE(Stream_92, StreamPullPushAdapter) MANAGER_NODE(Stream_96, StreamPullPushAdapter) MANAGER_NODE(Stream_124, StreamPullPushAdapter) MANAGER_NODE(Stream_98, Fifo) MANAGER_NODE(Stream_102, Fifo) MANAGER_NODE(Stream_94, Fifo) MANAGER_NODE(Stream_80, Fifo) MANAGER_NODE(Stream_84, Fifo) MANAGER_NODE(Stream_90, Fifo) MANAGER_NODE(Stream_68, Fifo) MANAGER_NODE(Stream_72, Fifo) MANAGER_NODE(Stream_76, Fifo) MANAGER_NODE(Stream_42, Fifo) MANAGER_NODE(Stream_46, Fifo) MANAGER_NODE(Stream_50, Fifo) MANAGER_NODE(Stream_54, Fifo) MANAGER_NODE(Stream_58, Fifo) MANAGER_NODE(Stream_62, Fifo) MANAGER_NODE(Stream_100, Fifo) MANAGER_NODE(Stream_104, Fifo) MANAGER_NODE(Stream_108, Fifo) MANAGER_NODE(Stream_112, Fifo) MANAGER_NODE(Stream_116, Fifo) MANAGER_NODE(Stream_120, Fifo) MANAGER_NODE(Stream_88, Fifo) MANAGER_NODE(Stream_122, Fifo) #endif #ifdef MANAGER_NODE_IO #define MANAGER_NODE_IO_PRESENT 1 MANAGER_NODE_IO(StreamFMAKernel, inAT1, IN, STREAM, 32, PULL) MANAGER_NODE_IO(StreamFMAKernel, inBT1, IN, STREAM, 32, PULL) MANAGER_NODE_IO(StreamFMAKernel, inAT2, IN, STREAM, 32, PULL) MANAGER_NODE_IO(StreamFMAKernel, inBT2, IN, STREAM, 32, PULL) MANAGER_NODE_IO(StreamFMAKernel, inAT3, IN, STREAM, 32, PULL) MANAGER_NODE_IO(StreamFMAKernel, inBT3, IN, STREAM, 32, PULL) MANAGER_NODE_IO(StreamFMAKernel, oDataT1, OUT, STREAM, 32, PUSH) MANAGER_NODE_IO(StreamFMAKernel, oDataT2, OUT, STREAM, 32, PUSH) MANAGER_NODE_IO(StreamFMAKernel, oDataT3, OUT, STREAM, 32, PUSH) MANAGER_NODE_IO(inAT1, inAT1, OUT, PCIE, 128, PUSH) MANAGER_NODE_IO(inBT1, inBT1, OUT, PCIE, 128, PUSH) MANAGER_NODE_IO(oDataT3, oDataT3, IN, PCIE, 128, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, read_stream_maxj_a, IN, MemoryControllerPro0_clk, 512, PULL) MANAGER_NODE_IO(MemoryControllerPro0, read_stream_maxj_b, IN, MemoryControllerPro0_clk, 512, PULL) MANAGER_NODE_IO(MemoryControllerPro0, read_stream_maxj_c, IN, MemoryControllerPro0_clk, 512, PULL) MANAGER_NODE_IO(MemoryControllerPro0, read_command_0, IN, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, read_command_1, IN, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, read_command_2, IN, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, read_command_3, IN, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, write_0, IN, STREAM, 1536, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, write_1, IN, STREAM, 1536, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, write_command_0, IN, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, write_command_1, IN, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, read_0, OUT, STREAM, 1536, PULL) MANAGER_NODE_IO(MemoryControllerPro0, read_1, OUT, STREAM, 1536, PULL) MANAGER_NODE_IO(MemoryControllerPro0, read_2, OUT, STREAM, 1536, PULL) MANAGER_NODE_IO(MemoryControllerPro0, read_3, OUT, STREAM, 1536, PULL) MANAGER_NODE_IO(MemoryControllerPro0, Tag_Out, OUT, MemoryControllerPro0_clk, 1, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, cmd_stream_maxj_a, OUT, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, cmd_stream_maxj_b, OUT, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(MemoryControllerPro0, cmd_stream_maxj_c, OUT, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(MemoryControllerPro0_IntSource, Tag_In, IN, MemoryControllerPro0_clk, 1, PUSH) MANAGER_NODE_IO(MemoryControllerInterface_b, cmd_stream_maxj, IN, DDR_CLK_b, 544, PULL) MANAGER_NODE_IO(MemoryControllerInterface_b, read_stream_maxj, OUT, DDR_CLK_b, 512, PUSH) MANAGER_NODE_IO(MemoryControllerInterface_a, cmd_stream_maxj, IN, DDR_CLK_a, 544, PULL) MANAGER_NODE_IO(MemoryControllerInterface_a, read_stream_maxj, OUT, DDR_CLK_a, 512, PUSH) MANAGER_NODE_IO(MemoryControllerInterface_c, cmd_stream_maxj, IN, DDR_CLK_c, 544, PULL) MANAGER_NODE_IO(MemoryControllerInterface_c, read_stream_maxj, OUT, DDR_CLK_c, 512, PUSH) MANAGER_NODE_IO(addrgen_cmd_MemoryControllerPro0_inAT2, cgen_out_0, OUT, STREAM, 64, PUSH) MANAGER_NODE_IO(addrgen_cmd_MemoryControllerPro0_inBT2, cgen_out_0, OUT, STREAM, 64, PUSH) MANAGER_NODE_IO(addrgen_cmd_MemoryControllerPro0_inAT3, cgen_out_0, OUT, STREAM, 64, PUSH) MANAGER_NODE_IO(addrgen_cmd_MemoryControllerPro0_inBT3, cgen_out_0, OUT, STREAM, 64, PUSH) MANAGER_NODE_IO(addrgen_cmd_MemoryControllerPro0_oDataT1, cgen_out_0, OUT, STREAM, 64, PUSH) MANAGER_NODE_IO(addrgen_cmd_MemoryControllerPro0_oDataT2, cgen_out_0, OUT, STREAM, 64, PUSH) MANAGER_NODE_IO(Stream_34_pipeline_4, input, IN, DDR_CLK_a, 512, PUSH) MANAGER_NODE_IO(Stream_34_pipeline_4, output, OUT, DDR_CLK_a, 512, PUSH) MANAGER_NODE_IO(Stream_29_pipeline_4, input, IN, DDR_CLK_b, 512, PUSH) MANAGER_NODE_IO(Stream_29_pipeline_4, output, OUT, DDR_CLK_b, 512, PUSH) MANAGER_NODE_IO(Stream_39_pipeline_4, input, IN, DDR_CLK_c, 512, PUSH) MANAGER_NODE_IO(Stream_39_pipeline_4, output, OUT, DDR_CLK_c, 512, PUSH) MANAGER_NODE_IO(Stream_28_pipeline_4, input, IN, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(Stream_28_pipeline_4, output, OUT, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(Stream_33_pipeline_4, input, IN, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(Stream_33_pipeline_4, output, OUT, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(Stream_38_pipeline_4, input, IN, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(Stream_38_pipeline_4, output, OUT, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(Stream_60, input, IN, STREAM, 32, PULL) MANAGER_NODE_IO(Stream_60, output, OUT, STREAM, 1536, PULL) MANAGER_NODE_IO(Stream_64, input, IN, STREAM, 32, PULL) MANAGER_NODE_IO(Stream_64, output, OUT, STREAM, 1536, PULL) MANAGER_NODE_IO(Stream_1, input, IN, PCIE, 128, PULL) MANAGER_NODE_IO(Stream_1, output, OUT, PCIE, 32, PUSH) MANAGER_NODE_IO(Stream_4, input, IN, PCIE, 128, PULL) MANAGER_NODE_IO(Stream_4, output, OUT, PCIE, 32, PUSH) MANAGER_NODE_IO(Stream_8, input, IN, STREAM, 1536, PULL) MANAGER_NODE_IO(Stream_8, output, OUT, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_10, input, IN, STREAM, 1536, PULL) MANAGER_NODE_IO(Stream_10, output, OUT, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_12, input, IN, STREAM, 1536, PULL) MANAGER_NODE_IO(Stream_12, output, OUT, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_14, input, IN, STREAM, 1536, PULL) MANAGER_NODE_IO(Stream_14, output, OUT, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_20, input, IN, PCIE, 32, PULL) MANAGER_NODE_IO(Stream_20, output, OUT, PCIE, 128, PULL) MANAGER_NODE_IO(Stream_92, input, IN, STREAM, 1536, PULL) MANAGER_NODE_IO(Stream_92, output, OUT, STREAM, 1536, PUSH) MANAGER_NODE_IO(Stream_96, input, IN, STREAM, 1536, PULL) MANAGER_NODE_IO(Stream_96, output, OUT, STREAM, 1536, PUSH) MANAGER_NODE_IO(Stream_124, input, IN, PCIE, 128, PULL) MANAGER_NODE_IO(Stream_124, output, OUT, PCIE, 128, PUSH) MANAGER_NODE_IO(Stream_98, input, IN, PCIE, 128, PUSH) MANAGER_NODE_IO(Stream_98, output, OUT, PCIE, 128, PULL) MANAGER_NODE_IO(Stream_102, input, IN, PCIE, 128, PUSH) MANAGER_NODE_IO(Stream_102, output, OUT, PCIE, 128, PULL) MANAGER_NODE_IO(Stream_94, input, IN, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_94, output, OUT, STREAM, 32, PULL) MANAGER_NODE_IO(Stream_80, input, IN, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(Stream_80, output, OUT, DDR_CLK_b, 544, PULL) MANAGER_NODE_IO(Stream_84, input, IN, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(Stream_84, output, OUT, DDR_CLK_a, 544, PULL) MANAGER_NODE_IO(Stream_90, input, IN, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_90, output, OUT, STREAM, 32, PULL) MANAGER_NODE_IO(Stream_68, input, IN, DDR_CLK_a, 512, PUSH) MANAGER_NODE_IO(Stream_68, output, OUT, MemoryControllerPro0_clk, 512, PULL) MANAGER_NODE_IO(Stream_72, input, IN, DDR_CLK_b, 512, PUSH) MANAGER_NODE_IO(Stream_72, output, OUT, MemoryControllerPro0_clk, 512, PULL) MANAGER_NODE_IO(Stream_76, input, IN, DDR_CLK_c, 512, PUSH) MANAGER_NODE_IO(Stream_76, output, OUT, MemoryControllerPro0_clk, 512, PULL) MANAGER_NODE_IO(Stream_42, input, IN, STREAM, 64, PUSH) MANAGER_NODE_IO(Stream_42, output, OUT, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(Stream_46, input, IN, STREAM, 64, PUSH) MANAGER_NODE_IO(Stream_46, output, OUT, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(Stream_50, input, IN, STREAM, 64, PUSH) MANAGER_NODE_IO(Stream_50, output, OUT, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(Stream_54, input, IN, STREAM, 64, PUSH) MANAGER_NODE_IO(Stream_54, output, OUT, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(Stream_58, input, IN, STREAM, 64, PUSH) MANAGER_NODE_IO(Stream_58, output, OUT, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(Stream_62, input, IN, STREAM, 64, PUSH) MANAGER_NODE_IO(Stream_62, output, OUT, MemoryControllerPro0_clk, 64, PUSH) MANAGER_NODE_IO(Stream_100, input, IN, PCIE, 32, PUSH) MANAGER_NODE_IO(Stream_100, output, OUT, STREAM, 32, PULL) MANAGER_NODE_IO(Stream_104, input, IN, PCIE, 32, PUSH) MANAGER_NODE_IO(Stream_104, output, OUT, STREAM, 32, PULL) MANAGER_NODE_IO(Stream_108, input, IN, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_108, output, OUT, STREAM, 32, PULL) MANAGER_NODE_IO(Stream_112, input, IN, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_112, output, OUT, STREAM, 32, PULL) MANAGER_NODE_IO(Stream_116, input, IN, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_116, output, OUT, STREAM, 32, PULL) MANAGER_NODE_IO(Stream_120, input, IN, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_120, output, OUT, STREAM, 32, PULL) MANAGER_NODE_IO(Stream_88, input, IN, MemoryControllerPro0_clk, 544, PUSH) MANAGER_NODE_IO(Stream_88, output, OUT, DDR_CLK_c, 544, PULL) MANAGER_NODE_IO(Stream_122, input, IN, STREAM, 32, PUSH) MANAGER_NODE_IO(Stream_122, output, OUT, PCIE, 32, PULL) #endif #ifdef MANAGER_STREAM #define MANAGER_STREAM_PRESENT 1 MANAGER_STREAM(inAT1, inAT1, Stream_98, input, 128) MANAGER_STREAM(inBT1, inBT1, Stream_102, input, 128) MANAGER_STREAM(StreamFMAKernel, oDataT1, Stream_90, input, 32) MANAGER_STREAM(StreamFMAKernel, oDataT2, Stream_94, input, 32) MANAGER_STREAM(StreamFMAKernel, oDataT3, Stream_122, input, 32) MANAGER_STREAM(MemoryControllerPro0, Tag_Out, MemoryControllerPro0_IntSource, Tag_In, 1) MANAGER_STREAM(MemoryControllerPro0, cmd_stream_maxj_b, Stream_28_pipeline_4, input, 544) MANAGER_STREAM(MemoryControllerInterface_b, read_stream_maxj, Stream_29_pipeline_4, input, 512) MANAGER_STREAM(MemoryControllerPro0, cmd_stream_maxj_a, Stream_33_pipeline_4, input, 544) MANAGER_STREAM(MemoryControllerInterface_a, read_stream_maxj, Stream_34_pipeline_4, input, 512) MANAGER_STREAM(MemoryControllerPro0, cmd_stream_maxj_c, Stream_38_pipeline_4, input, 544) MANAGER_STREAM(MemoryControllerInterface_c, read_stream_maxj, Stream_39_pipeline_4, input, 512) MANAGER_STREAM(addrgen_cmd_MemoryControllerPro0_inAT2, cgen_out_0, Stream_42, input, 64) MANAGER_STREAM(MemoryControllerPro0, read_0, Stream_8, input, 1536) MANAGER_STREAM(addrgen_cmd_MemoryControllerPro0_inBT2, cgen_out_0, Stream_46, input, 64) MANAGER_STREAM(MemoryControllerPro0, read_1, Stream_10, input, 1536) MANAGER_STREAM(addrgen_cmd_MemoryControllerPro0_inAT3, cgen_out_0, Stream_50, input, 64) MANAGER_STREAM(MemoryControllerPro0, read_2, Stream_12, input, 1536) MANAGER_STREAM(addrgen_cmd_MemoryControllerPro0_inBT3, cgen_out_0, Stream_54, input, 64) MANAGER_STREAM(MemoryControllerPro0, read_3, Stream_14, input, 1536) MANAGER_STREAM(addrgen_cmd_MemoryControllerPro0_oDataT1, cgen_out_0, Stream_58, input, 64) MANAGER_STREAM(addrgen_cmd_MemoryControllerPro0_oDataT2, cgen_out_0, Stream_62, input, 64) MANAGER_STREAM(Stream_34_pipeline_4, output, Stream_68, input, 512) MANAGER_STREAM(Stream_29_pipeline_4, output, Stream_72, input, 512) MANAGER_STREAM(Stream_39_pipeline_4, output, Stream_76, input, 512) MANAGER_STREAM(Stream_28_pipeline_4, output, Stream_80, input, 544) MANAGER_STREAM(Stream_33_pipeline_4, output, Stream_84, input, 544) MANAGER_STREAM(Stream_38_pipeline_4, output, Stream_88, input, 544) MANAGER_STREAM(Stream_60, output, Stream_92, input, 1536) MANAGER_STREAM(Stream_64, output, Stream_96, input, 1536) MANAGER_STREAM(Stream_1, output, Stream_100, input, 32) MANAGER_STREAM(Stream_4, output, Stream_104, input, 32) MANAGER_STREAM(Stream_8, output, Stream_108, input, 32) MANAGER_STREAM(Stream_10, output, Stream_112, input, 32) MANAGER_STREAM(Stream_12, output, Stream_116, input, 32) MANAGER_STREAM(Stream_14, output, Stream_120, input, 32) MANAGER_STREAM(Stream_20, output, Stream_124, input, 128) MANAGER_STREAM(Stream_92, output, MemoryControllerPro0, write_0, 1536) MANAGER_STREAM(Stream_96, output, MemoryControllerPro0, write_1, 1536) MANAGER_STREAM(Stream_124, output, oDataT3, oDataT3, 128) MANAGER_STREAM(Stream_98, output, Stream_1, input, 128) MANAGER_STREAM(Stream_102, output, Stream_4, input, 128) MANAGER_STREAM(Stream_94, output, Stream_64, input, 32) MANAGER_STREAM(Stream_80, output, MemoryControllerInterface_b, cmd_stream_maxj, 544) MANAGER_STREAM(Stream_84, output, MemoryControllerInterface_a, cmd_stream_maxj, 544) MANAGER_STREAM(Stream_90, output, Stream_60, input, 32) MANAGER_STREAM(Stream_68, output, MemoryControllerPro0, read_stream_maxj_a, 512) MANAGER_STREAM(Stream_72, output, MemoryControllerPro0, read_stream_maxj_b, 512) MANAGER_STREAM(Stream_76, output, MemoryControllerPro0, read_stream_maxj_c, 512) MANAGER_STREAM(Stream_42, output, MemoryControllerPro0, read_command_0, 64) MANAGER_STREAM(Stream_46, output, MemoryControllerPro0, read_command_1, 64) MANAGER_STREAM(Stream_50, output, MemoryControllerPro0, read_command_2, 64) MANAGER_STREAM(Stream_54, output, MemoryControllerPro0, read_command_3, 64) MANAGER_STREAM(Stream_58, output, MemoryControllerPro0, write_command_0, 64) MANAGER_STREAM(Stream_62, output, MemoryControllerPro0, write_command_1, 64) MANAGER_STREAM(Stream_100, output, StreamFMAKernel, inAT1, 32) MANAGER_STREAM(Stream_104, output, StreamFMAKernel, inBT1, 32) MANAGER_STREAM(Stream_108, output, StreamFMAKernel, inAT2, 32) MANAGER_STREAM(Stream_112, output, StreamFMAKernel, inBT2, 32) MANAGER_STREAM(Stream_116, output, StreamFMAKernel, inAT3, 32) MANAGER_STREAM(Stream_120, output, StreamFMAKernel, inBT3, 32) MANAGER_STREAM(Stream_88, output, MemoryControllerInterface_c, cmd_stream_maxj, 544) MANAGER_STREAM(Stream_122, output, Stream_20, input, 32) #endif #ifdef MANAGER_NODE_STACK_TRACE #define MANAGER_NODE_STACK_TRACE_PRESENT 1 MANAGER_NODE_STACK_TRACE(StreamFMAKernel, "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") MANAGER_NODE_STACK_TRACE(inAT1, "com.maxeler.platform.max5.manager.Max5ManagerBase.addStreamFromCPU(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:26)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") MANAGER_NODE_STACK_TRACE(inBT1, "com.maxeler.platform.max5.manager.Max5ManagerBase.addStreamFromCPU(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:27)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") MANAGER_NODE_STACK_TRACE(oDataT3, "com.maxeler.platform.max5.manager.Max5ManagerBase.addStreamToCPU(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:52)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") MANAGER_NODE_STACK_TRACE(MemoryControllerPro0, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(MemoryControllerPro0_IntSource, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(MemoryControllerInterface_b, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(MemoryControllerInterface_a, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(MemoryControllerInterface_c, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(addrgen_cmd_MemoryControllerPro0_inAT2, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(addrgen_cmd_MemoryControllerPro0_inBT2, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(addrgen_cmd_MemoryControllerPro0_inAT3, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(addrgen_cmd_MemoryControllerPro0_inBT3, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(addrgen_cmd_MemoryControllerPro0_oDataT1, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(addrgen_cmd_MemoryControllerPro0_oDataT2, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_34_pipeline_4, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_29_pipeline_4, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_39_pipeline_4, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_28_pipeline_4, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_33_pipeline_4, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_38_pipeline_4, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_60, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_64, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_1, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_4, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_8, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_10, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_12, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_14, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_20, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_92, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_96, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_124, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_98, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_102, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_94, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_80, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_84, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_90, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_68, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_72, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_76, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_42, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_46, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_50, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_54, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_58, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_62, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_100, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_104, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_108, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_112, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_116, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_120, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_88, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") MANAGER_NODE_STACK_TRACE(Stream_122, "com.maxeler.platform.max5.manager.Max5ManagerBase.build(Unknown Source)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:61)\n") #endif #ifdef MANAGER_NODE_PROPERTY #define MANAGER_NODE_PROPERTY_PRESENT 1 MANAGER_NODE_PROPERTY(StreamFMAKernel, control_pipelining_depth, 2) #endif #ifdef KERNEL_CORE #define KERNEL_CORE_PRESENT 1 KERNEL_CORE(StreamFMAKernel) #endif #ifdef KERNEL_HOST_CONTROLLED #define KERNEL_HOST_CONTROLLED_PRESENT 1 KERNEL_HOST_CONTROLLED(StreamFMAKernel, StreamFMAKernel) #endif #ifdef DEBUG_INPUT_BITS #define DEBUG_INPUT_BITS_PRESENT 1 DEBUG_INPUT_BITS(StreamFMAKernel, inAT1, 0) DEBUG_INPUT_BITS(StreamFMAKernel, inBT1, 1) DEBUG_INPUT_BITS(StreamFMAKernel, inAT2, 2) DEBUG_INPUT_BITS(StreamFMAKernel, inBT2, 3) DEBUG_INPUT_BITS(StreamFMAKernel, inAT3, 4) DEBUG_INPUT_BITS(StreamFMAKernel, inBT3, 5) #endif #ifdef DEBUG_OUTPUT_BITS #define DEBUG_OUTPUT_BITS_PRESENT 1 DEBUG_OUTPUT_BITS(StreamFMAKernel, oDataT1, 0) DEBUG_OUTPUT_BITS(StreamFMAKernel, oDataT2, 1) DEBUG_OUTPUT_BITS(StreamFMAKernel, oDataT3, 2) #endif #ifdef MANAGER_NODE_CPP_SIM_MODEL_CTOR #define MANAGER_NODE_CPP_SIM_MODEL_CTOR_PRESENT 1 MANAGER_NODE_CPP_SIM_MODEL_CTOR(addrgen_cmd_MemoryControllerPro0_oDataT2, maxcompilersim::state_machine::ManagerBlockSM_addrgen_cmd_MemoryControllerPro0_oDataT2, "addrgen_cmd_MemoryControllerPro0_oDataT2") MANAGER_NODE_CPP_SIM_MODEL_CTOR(inAT1, PCIePushSourceSync16, "inAT1") MANAGER_NODE_CPP_SIM_MODEL_CTOR(addrgen_cmd_MemoryControllerPro0_oDataT1, maxcompilersim::state_machine::ManagerBlockSM_addrgen_cmd_MemoryControllerPro0_oDataT1, "addrgen_cmd_MemoryControllerPro0_oDataT1") MANAGER_NODE_CPP_SIM_MODEL_CTOR(addrgen_cmd_MemoryControllerPro0_inBT2, maxcompilersim::state_machine::ManagerBlockSM_addrgen_cmd_MemoryControllerPro0_inBT2, "addrgen_cmd_MemoryControllerPro0_inBT2") MANAGER_NODE_CPP_SIM_MODEL_CTOR(inBT1, PCIePushSourceSync16, "inBT1") MANAGER_NODE_CPP_SIM_MODEL_CTOR(addrgen_cmd_MemoryControllerPro0_inAT3, maxcompilersim::state_machine::ManagerBlockSM_addrgen_cmd_MemoryControllerPro0_inAT3, "addrgen_cmd_MemoryControllerPro0_inAT3") MANAGER_NODE_CPP_SIM_MODEL_CTOR(addrgen_cmd_MemoryControllerPro0_inBT3, maxcompilersim::state_machine::ManagerBlockSM_addrgen_cmd_MemoryControllerPro0_inBT3, "addrgen_cmd_MemoryControllerPro0_inBT3") MANAGER_NODE_CPP_SIM_MODEL_CTOR(addrgen_cmd_MemoryControllerPro0_inAT2, maxcompilersim::state_machine::ManagerBlockSM_addrgen_cmd_MemoryControllerPro0_inAT2, "addrgen_cmd_MemoryControllerPro0_inAT2") MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_58, FifoPushToPushSync, "Stream_58", false, 512, 64) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_50, FifoPushToPushSync, "Stream_50", false, 512, 64) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_42, FifoPushToPushSync, "Stream_42", false, 512, 64) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_98, FifoPushToPullSync, "Stream_98", false, 512, 128) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_62, FifoPushToPushSync, "Stream_62", false, 512, 64) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_54, FifoPushToPushSync, "Stream_54", false, 512, 64) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_46, FifoPushToPushSync, "Stream_46", false, 512, 64) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_102, FifoPushToPullSync, "Stream_102", false, 512, 128) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_4, DualAspectMuxSync, "Stream_4", 32, 4) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_1, DualAspectMuxSync, "Stream_1", 32, 4) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_104, FifoPushToPullSync, "Stream_104", false, 512, 32) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_100, FifoPushToPullSync, "Stream_100", false, 512, 32) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_96, PullToPushAdapterSync, "Stream_96") MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_28_pipeline_4, PipelineSync, "Stream_28_pipeline_4", 4, 544) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_80, FifoPushToPullSync, "Stream_80", false, 512, 544) MANAGER_NODE_CPP_SIM_MODEL_CTOR(MemoryControllerInterface_b, LMemSim, "MemoryControllerInterface_b", ConfigFactory::getConfig(0, "_b", 3, 0)) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_29_pipeline_4, PipelineSync, "Stream_29_pipeline_4", 4, 512) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_72, FifoPushToPullSync, "Stream_72", false, 512, 512) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_84, FifoPushToPullSync, "Stream_84", false, 512, 544) MANAGER_NODE_CPP_SIM_MODEL_CTOR(MemoryControllerInterface_a, LMemSim, "MemoryControllerInterface_a", ConfigFactory::getConfig(0, "_a", 3, 1)) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_34_pipeline_4, PipelineSync, "Stream_34_pipeline_4", 4, 512) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_68, FifoPushToPullSync, "Stream_68", false, 512, 512) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_90, FifoPushToPullSync, "Stream_90", false, 512, 32) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_60, DualAspectRegSync, "Stream_60", 32, 48) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_92, PullToPushAdapterSync, "Stream_92") MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_8, DualAspectMuxSync, "Stream_8", 32, 48) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_108, FifoPushToPullSync, "Stream_108", false, 512, 32) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_112, FifoPushToPullSync, "Stream_112", false, 512, 32) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_124, PullToPushAdapterSync, "Stream_124") MANAGER_NODE_CPP_SIM_MODEL_CTOR(oDataT3, PCIePushSinkSync16, "oDataT3") MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_10, DualAspectMuxSync, "Stream_10", 32, 48) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_39_pipeline_4, PipelineSync, "Stream_39_pipeline_4", 4, 512) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_76, FifoPushToPullSync, "Stream_76", false, 512, 512) MANAGER_NODE_CPP_SIM_MODEL_CTOR(MemoryControllerPro0, maxcompilersim::state_machine::ManagerBlockSM_MemoryControllerPro0, "MemoryControllerPro0") MANAGER_NODE_CPP_SIM_MODEL_CTOR(MemoryControllerPro0_IntSource, McpInterruptSource, "MemoryControllerPro0_IntSource") MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_12, DualAspectMuxSync, "Stream_12", 32, 48) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_14, DualAspectMuxSync, "Stream_14", 32, 48) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_38_pipeline_4, PipelineSync, "Stream_38_pipeline_4", 4, 544) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_33_pipeline_4, PipelineSync, "Stream_33_pipeline_4", 4, 544) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_116, FifoPushToPullSync, "Stream_116", false, 512, 32) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_120, FifoPushToPullSync, "Stream_120", false, 512, 32) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_88, FifoPushToPullSync, "Stream_88", false, 512, 544) MANAGER_NODE_CPP_SIM_MODEL_CTOR(StreamFMAKernel, StreamFMAKernel, "StreamFMAKernel") MANAGER_NODE_CPP_SIM_MODEL_CTOR(MemoryControllerInterface_c, LMemSim, "MemoryControllerInterface_c", ConfigFactory::getConfig(0, "_c", 3, 2)) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_122, FifoPushToPullSync, "Stream_122", false, 512, 32) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_94, FifoPushToPullSync, "Stream_94", false, 512, 32) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_20, DualAspectRegSync, "Stream_20", 32, 4) MANAGER_NODE_CPP_SIM_MODEL_CTOR(Stream_64, DualAspectRegSync, "Stream_64", 32, 48) MANAGER_NODE_CPP_SIM_MODEL_CTOR(CapabilityReg, CapRegs, "CapabilityReg", 0, 2, 1, 0, 0, 0, 0, 0, 160) MANAGER_NODE_CPP_SIM_MODEL_CTOR(ifpga, IFPGARegs) MANAGER_NODE_CPP_SIM_MODEL_CTOR(sfa, SFARegs) MANAGER_NODE_CPP_SIM_MODEL_CTOR(ChecksumMemory, ChecksumMem, "ChecksumMemory", "5677d622f2daecc91b0561585ae87653a418e3bb53c0a22186ca7832455db10b") #endif #ifdef MANAGER_NODE_CPP_SIM_MODEL_SETUP #define MANAGER_NODE_CPP_SIM_MODEL_SETUP_PRESENT 1 MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_almost_empty, 6, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_done, 6, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_empty, 6, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_read, 6, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_read_pipe_dbg, 18, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_ctld_request, 6, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_done_out, 1, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_fill_level, 4, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_flush_level, 4, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_flush_start, 1, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_flush_start_level, 4, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_flushing, 1, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_full_level, 4, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_out_stall, 3, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_out_valid, 3, 0) MANAGER_NODE_CPP_SIM_MODEL_SETUP(StreamFMAKernel, addDebugRegister, reg_dbg_stall_vector, 3, 0) #endif #ifdef PCIE_STREAM #define PCIE_STREAM_PRESENT 1 PCIE_STREAM(inAT1, STREAM_FROM_HOST, 0) PCIE_STREAM(inBT1, STREAM_FROM_HOST, 1) PCIE_STREAM(oDataT3, STREAM_TO_HOST, 0) #endif #ifdef REG #define REG_PRESENT 1 REG(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_Addr_En, 0x0, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_BlockSize_X, 0x1, 5, hwOffsetFix(33, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_CmdSize, 0x6, 1, hwOffsetFix(8, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_Offset_0, 0x7, 4, hwOffsetFix(31, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_Start_X_Addr, 0xb, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_Wrap_X, 0xf, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_Addr_En, 0x13, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_BlockSize_X, 0x14, 5, hwOffsetFix(33, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_CmdSize, 0x19, 1, hwOffsetFix(8, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_Offset_0, 0x1a, 4, hwOffsetFix(31, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_Start_X_Addr, 0x1e, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_Wrap_X, 0x22, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_Addr_En, 0x26, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_BlockSize_X, 0x27, 5, hwOffsetFix(33, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_CmdSize, 0x2c, 1, hwOffsetFix(8, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_Offset_0, 0x2d, 4, hwOffsetFix(31, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_Start_X_Addr, 0x31, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_Wrap_X, 0x35, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_Addr_En, 0x39, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_BlockSize_X, 0x3a, 5, hwOffsetFix(33, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_CmdSize, 0x3f, 1, hwOffsetFix(8, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_Offset_0, 0x40, 4, hwOffsetFix(31, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_Start_X_Addr, 0x44, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_Wrap_X, 0x48, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_Addr_En, 0x4c, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_BlockSize_X, 0x4d, 5, hwOffsetFix(33, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_CmdSize, 0x52, 1, hwOffsetFix(8, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_Offset_0, 0x53, 4, hwOffsetFix(31, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_Start_X_Addr, 0x57, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_Wrap_X, 0x5b, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_Addr_En, 0x5f, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_BlockSize_X, 0x60, 5, hwOffsetFix(33, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_CmdSize, 0x65, 1, hwOffsetFix(8, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_Offset_0, 0x66, 4, hwOffsetFix(31, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_Start_X_Addr, 0x6a, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_Wrap_X, 0x6e, 4, hwOffsetFix(32, 0, UNSIGNED)) REG(MemoryControllerPro0.Mcp_Int_Disable_OR, 0x72, 1, hwOffsetFix(6, 0, UNSIGNED)) REG(MemoryControllerPro0.Mcp_Int_Enable_AND, 0x73, 1, hwOffsetFix(6, 0, UNSIGNED)) REG(StreamFMAKernel.io_inAT1_force_disabled, 0x74, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(StreamFMAKernel.io_inBT1_force_disabled, 0x75, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(StreamFMAKernel.io_inAT2_force_disabled, 0x76, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(StreamFMAKernel.io_inBT2_force_disabled, 0x77, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(StreamFMAKernel.io_inAT3_force_disabled, 0x78, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(StreamFMAKernel.io_inBT3_force_disabled, 0x79, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(StreamFMAKernel.io_oDataT1_force_disabled, 0x7a, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(StreamFMAKernel.io_oDataT2_force_disabled, 0x7b, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(StreamFMAKernel.io_oDataT3_force_disabled, 0x7c, 1, hwOffsetFix(1, 0, UNSIGNED)) REG(StreamFMAKernel.run_cycle_count, 0x7d, 6, hwOffsetFix(48, 0, UNSIGNED)) REG(StreamFMAKernel.current_run_cycle_count, 0x83, 6, hwOffsetFix(48, 0, UNSIGNED)) REG(StreamFMAKernel.dbg_ctld_almost_empty, 0x89, 1, hwBits(6)) REG(StreamFMAKernel.dbg_ctld_done, 0x8a, 1, hwBits(6)) REG(StreamFMAKernel.dbg_ctld_empty, 0x8b, 1, hwBits(6)) REG(StreamFMAKernel.dbg_ctld_read, 0x8c, 1, hwBits(6)) REG(StreamFMAKernel.dbg_ctld_read_pipe_dbg, 0x8d, 3, hwBits(18)) REG(StreamFMAKernel.dbg_ctld_request, 0x90, 1, hwBits(6)) REG(StreamFMAKernel.dbg_done_out, 0x91, 1, hwBits(1)) REG(StreamFMAKernel.dbg_fill_level, 0x92, 1, hwBits(4)) REG(StreamFMAKernel.dbg_flush_level, 0x93, 1, hwBits(4)) REG(StreamFMAKernel.dbg_flush_start, 0x94, 1, hwBits(1)) REG(StreamFMAKernel.dbg_flush_start_level, 0x95, 1, hwBits(4)) REG(StreamFMAKernel.dbg_flushing, 0x96, 1, hwBits(1)) REG(StreamFMAKernel.dbg_full_level, 0x97, 1, hwBits(4)) REG(StreamFMAKernel.dbg_out_stall, 0x98, 1, hwBits(3)) REG(StreamFMAKernel.dbg_out_valid, 0x99, 1, hwBits(3)) REG(StreamFMAKernel.dbg_stall_vector, 0x9a, 1, hwBits(3)) REG(ifpga.ifpga_ctrl, 0x9b, 1, hwBits(8)) REG(SignalForwardingAdapter.SFA_FORWARD_EN, 0x9c, 4, hwBits(32)) #endif #ifdef REG_V2 #define REG_V2_PRESENT 1 REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_Addr_En, 0x0, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_BlockSize_X, 0x1, 5, hwOffsetFix(33, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_CmdSize, 0x6, 1, hwOffsetFix(8, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_Offset_0, 0x7, 4, hwOffsetFix(31, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_Start_X_Addr, 0xb, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT2.AGen_Wrap_X, 0xf, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_Addr_En, 0x13, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_BlockSize_X, 0x14, 5, hwOffsetFix(33, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_CmdSize, 0x19, 1, hwOffsetFix(8, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_Offset_0, 0x1a, 4, hwOffsetFix(31, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_Start_X_Addr, 0x1e, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_oDataT1.AGen_Wrap_X, 0x22, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_Addr_En, 0x26, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_BlockSize_X, 0x27, 5, hwOffsetFix(33, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_CmdSize, 0x2c, 1, hwOffsetFix(8, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_Offset_0, 0x2d, 4, hwOffsetFix(31, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_Start_X_Addr, 0x31, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT2.AGen_Wrap_X, 0x35, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_Addr_En, 0x39, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_BlockSize_X, 0x3a, 5, hwOffsetFix(33, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_CmdSize, 0x3f, 1, hwOffsetFix(8, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_Offset_0, 0x40, 4, hwOffsetFix(31, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_Start_X_Addr, 0x44, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT3.AGen_Wrap_X, 0x48, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_Addr_En, 0x4c, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_BlockSize_X, 0x4d, 5, hwOffsetFix(33, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_CmdSize, 0x52, 1, hwOffsetFix(8, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_Offset_0, 0x53, 4, hwOffsetFix(31, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_Start_X_Addr, 0x57, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inBT3.AGen_Wrap_X, 0x5b, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_Addr_En, 0x5f, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_BlockSize_X, 0x60, 5, hwOffsetFix(33, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_CmdSize, 0x65, 1, hwOffsetFix(8, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_Offset_0, 0x66, 4, hwOffsetFix(31, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_Start_X_Addr, 0x6a, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(addrgen_cmd_MemoryControllerPro0_inAT2.AGen_Wrap_X, 0x6e, 4, hwOffsetFix(32, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(MemoryControllerPro0.Mcp_Int_Disable_OR, 0x72, 1, hwOffsetFix(6, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(MemoryControllerPro0.Mcp_Int_Enable_AND, 0x73, 1, hwOffsetFix(6, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(StreamFMAKernel.io_inAT1_force_disabled, 0x74, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true) REG_V2(StreamFMAKernel.io_inBT1_force_disabled, 0x75, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true) REG_V2(StreamFMAKernel.io_inAT2_force_disabled, 0x76, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true) REG_V2(StreamFMAKernel.io_inBT2_force_disabled, 0x77, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true) REG_V2(StreamFMAKernel.io_inAT3_force_disabled, 0x78, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true) REG_V2(StreamFMAKernel.io_inBT3_force_disabled, 0x79, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true) REG_V2(StreamFMAKernel.io_oDataT1_force_disabled, 0x7a, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true) REG_V2(StreamFMAKernel.io_oDataT2_force_disabled, 0x7b, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true) REG_V2(StreamFMAKernel.io_oDataT3_force_disabled, 0x7c, 1, hwOffsetFix(1, 0, UNSIGNED), HOST_WRITE_ONLY, true) REG_V2(StreamFMAKernel.run_cycle_count, 0x7d, 6, hwOffsetFix(48, 0, UNSIGNED), HOST_WRITE_ONLY, false) REG_V2(StreamFMAKernel.current_run_cycle_count, 0x83, 6, hwOffsetFix(48, 0, UNSIGNED), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_ctld_almost_empty, 0x89, 1, hwBits(6), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_ctld_done, 0x8a, 1, hwBits(6), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_ctld_empty, 0x8b, 1, hwBits(6), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_ctld_read, 0x8c, 1, hwBits(6), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_ctld_read_pipe_dbg, 0x8d, 3, hwBits(18), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_ctld_request, 0x90, 1, hwBits(6), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_done_out, 0x91, 1, hwBits(1), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_fill_level, 0x92, 1, hwBits(4), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_flush_level, 0x93, 1, hwBits(4), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_flush_start, 0x94, 1, hwBits(1), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_flush_start_level, 0x95, 1, hwBits(4), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_flushing, 0x96, 1, hwBits(1), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_full_level, 0x97, 1, hwBits(4), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_out_stall, 0x98, 1, hwBits(3), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_out_valid, 0x99, 1, hwBits(3), HOST_READ_ONLY, false) REG_V2(StreamFMAKernel.dbg_stall_vector, 0x9a, 1, hwBits(3), HOST_READ_ONLY, false) REG_V2(ifpga.ifpga_ctrl, 0x9b, 1, hwBits(8), HOST_READ_WRITE, false) REG_V2(SignalForwardingAdapter.SFA_FORWARD_EN, 0x9c, 4, hwBits(32), HOST_READ_WRITE, false) #endif #ifdef CHECKSUM #define CHECKSUM_PRESENT 1 CHECKSUM("5677d622f2daecc91b0561585ae87653a418e3bb53c0a22186ca7832455db10b") #endif #ifdef MANAGER_MEMCTL #define MANAGER_MEMCTL_PRESENT 1 MANAGER_MEMCTL(MemoryControllerPro0, MemoryControllerPro0.Mcp, 192, 0) #endif #ifdef MANAGER_MEMCTL_CONTROL_GROUP #define MANAGER_MEMCTL_CONTROL_GROUP_PRESENT 1 MANAGER_MEMCTL_CONTROL_GROUP(MemoryControllerPro0, cmd_MemoryControllerPro0_inAT2, addrgen_cmd_MemoryControllerPro0_inAT2.AGen, LINEAR_1D) MANAGER_MEMCTL_CONTROL_GROUP(MemoryControllerPro0, cmd_MemoryControllerPro0_inBT2, addrgen_cmd_MemoryControllerPro0_inBT2.AGen, LINEAR_1D) MANAGER_MEMCTL_CONTROL_GROUP(MemoryControllerPro0, cmd_MemoryControllerPro0_inAT3, addrgen_cmd_MemoryControllerPro0_inAT3.AGen, LINEAR_1D) MANAGER_MEMCTL_CONTROL_GROUP(MemoryControllerPro0, cmd_MemoryControllerPro0_inBT3, addrgen_cmd_MemoryControllerPro0_inBT3.AGen, LINEAR_1D) MANAGER_MEMCTL_CONTROL_GROUP(MemoryControllerPro0, cmd_MemoryControllerPro0_oDataT1, addrgen_cmd_MemoryControllerPro0_oDataT1.AGen, LINEAR_1D) MANAGER_MEMCTL_CONTROL_GROUP(MemoryControllerPro0, cmd_MemoryControllerPro0_oDataT2, addrgen_cmd_MemoryControllerPro0_oDataT2.AGen, LINEAR_1D) #endif #ifdef MANAGER_MEMCTL_DATA_STREAM #define MANAGER_MEMCTL_DATA_STREAM_PRESENT 1 MANAGER_MEMCTL_DATA_STREAM(MemoryControllerPro0, cmd_MemoryControllerPro0_inAT2, inAT2, 0, 0, READ) MANAGER_MEMCTL_DATA_STREAM(MemoryControllerPro0, cmd_MemoryControllerPro0_inBT2, inBT2, 0, 1, READ) MANAGER_MEMCTL_DATA_STREAM(MemoryControllerPro0, cmd_MemoryControllerPro0_inAT3, inAT3, 0, 2, READ) MANAGER_MEMCTL_DATA_STREAM(MemoryControllerPro0, cmd_MemoryControllerPro0_inBT3, inBT3, 0, 3, READ) MANAGER_MEMCTL_DATA_STREAM(MemoryControllerPro0, cmd_MemoryControllerPro0_oDataT1, oDataT1, 0, 4, WRITE) MANAGER_MEMCTL_DATA_STREAM(MemoryControllerPro0, cmd_MemoryControllerPro0_oDataT2, oDataT2, 0, 5, WRITE) #endif #ifdef CAPABILITY #define CAPABILITY_PRESENT 1 CAPABILITY(LIMAREV, LIMAREVA) CAPABILITY(LIMARAM, DDR4_48GB) CAPABILITY(LIMAFPGA, xcVU9P_FLGB2104_2_E) #endif #ifdef DEFINE_DESIGN_NAME #define DESIGN_NAME StreamFMA #endif /* DEFINE_DESIGN_NAME */ #ifndef SLIC_NO_DECLARATIONS /**\file */ #ifndef SLIC_DECLARATIONS_StreamFMA_H #define SLIC_DECLARATIONS_StreamFMA_H #include "MaxSLiCInterface.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define StreamFMA_DYNAMIC_CLOCKS_ENABLED (0) #define StreamFMA_PCIE_ALIGNMENT (16) /*----------------------------------------------------------------------------*/ /*---------------------------- Interface default -----------------------------*/ /*----------------------------------------------------------------------------*/ /** * \brief Basic static function for the interface 'default'. * * \param [in] ticks_StreamFMAKernel The number of ticks for which kernel "StreamFMAKernel" will run. * \param [in] instream_inAT1 Stream "inAT1". * \param [in] instream_size_inAT1 The size of the stream instream_inAT1 in bytes. * \param [in] instream_inBT1 Stream "inBT1". * \param [in] instream_size_inBT1 The size of the stream instream_inBT1 in bytes. * \param [out] outstream_oDataT3 Stream "oDataT3". * \param [in] outstream_size_oDataT3 The size of the stream outstream_oDataT3 in bytes. * \param [in] lmem_address_MemoryControllerPro0_inAT2 Linear LMem control for "inAT2" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_inAT2 Linear LMem control for "inAT2" stream: array size, in bytes. * \param [in] lmem_address_MemoryControllerPro0_inAT3 Linear LMem control for "inAT3" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_inAT3 Linear LMem control for "inAT3" stream: array size, in bytes. * \param [in] lmem_address_MemoryControllerPro0_inBT2 Linear LMem control for "inBT2" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_inBT2 Linear LMem control for "inBT2" stream: array size, in bytes. * \param [in] lmem_address_MemoryControllerPro0_inBT3 Linear LMem control for "inBT3" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_inBT3 Linear LMem control for "inBT3" stream: array size, in bytes. * \param [in] lmem_address_MemoryControllerPro0_oDataT1 Linear LMem control for "oDataT1" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_oDataT1 Linear LMem control for "oDataT1" stream: array size, in bytes. * \param [in] lmem_address_MemoryControllerPro0_oDataT2 Linear LMem control for "oDataT2" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_oDataT2 Linear LMem control for "oDataT2" stream: array size, in bytes. */ void StreamFMA( uint64_t ticks_StreamFMAKernel, const void *instream_inAT1, size_t instream_size_inAT1, const void *instream_inBT1, size_t instream_size_inBT1, void *outstream_oDataT3, size_t outstream_size_oDataT3, size_t lmem_address_MemoryControllerPro0_inAT2, size_t lmem_arr_size_MemoryControllerPro0_inAT2, size_t lmem_address_MemoryControllerPro0_inAT3, size_t lmem_arr_size_MemoryControllerPro0_inAT3, size_t lmem_address_MemoryControllerPro0_inBT2, size_t lmem_arr_size_MemoryControllerPro0_inBT2, size_t lmem_address_MemoryControllerPro0_inBT3, size_t lmem_arr_size_MemoryControllerPro0_inBT3, size_t lmem_address_MemoryControllerPro0_oDataT1, size_t lmem_arr_size_MemoryControllerPro0_oDataT1, size_t lmem_address_MemoryControllerPro0_oDataT2, size_t lmem_arr_size_MemoryControllerPro0_oDataT2); /** * \brief Basic static non-blocking function for the interface 'default'. * * Schedule to run on an engine and return immediately. * The status of the run can be checked either by ::max_wait or ::max_nowait; * note that one of these *must* be called, so that associated memory can be released. * * * \param [in] ticks_StreamFMAKernel The number of ticks for which kernel "StreamFMAKernel" will run. * \param [in] instream_inAT1 Stream "inAT1". * \param [in] instream_size_inAT1 The size of the stream instream_inAT1 in bytes. * \param [in] instream_inBT1 Stream "inBT1". * \param [in] instream_size_inBT1 The size of the stream instream_inBT1 in bytes. * \param [out] outstream_oDataT3 Stream "oDataT3". * \param [in] outstream_size_oDataT3 The size of the stream outstream_oDataT3 in bytes. * \param [in] lmem_address_MemoryControllerPro0_inAT2 Linear LMem control for "inAT2" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_inAT2 Linear LMem control for "inAT2" stream: array size, in bytes. * \param [in] lmem_address_MemoryControllerPro0_inAT3 Linear LMem control for "inAT3" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_inAT3 Linear LMem control for "inAT3" stream: array size, in bytes. * \param [in] lmem_address_MemoryControllerPro0_inBT2 Linear LMem control for "inBT2" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_inBT2 Linear LMem control for "inBT2" stream: array size, in bytes. * \param [in] lmem_address_MemoryControllerPro0_inBT3 Linear LMem control for "inBT3" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_inBT3 Linear LMem control for "inBT3" stream: array size, in bytes. * \param [in] lmem_address_MemoryControllerPro0_oDataT1 Linear LMem control for "oDataT1" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_oDataT1 Linear LMem control for "oDataT1" stream: array size, in bytes. * \param [in] lmem_address_MemoryControllerPro0_oDataT2 Linear LMem control for "oDataT2" stream: base address, in bytes. * \param [in] lmem_arr_size_MemoryControllerPro0_oDataT2 Linear LMem control for "oDataT2" stream: array size, in bytes. * \return A handle on the execution status, or NULL in case of error. */ max_run_t *StreamFMA_nonblock( uint64_t ticks_StreamFMAKernel, const void *instream_inAT1, size_t instream_size_inAT1, const void *instream_inBT1, size_t instream_size_inBT1, void *outstream_oDataT3, size_t outstream_size_oDataT3, size_t lmem_address_MemoryControllerPro0_inAT2, size_t lmem_arr_size_MemoryControllerPro0_inAT2, size_t lmem_address_MemoryControllerPro0_inAT3, size_t lmem_arr_size_MemoryControllerPro0_inAT3, size_t lmem_address_MemoryControllerPro0_inBT2, size_t lmem_arr_size_MemoryControllerPro0_inBT2, size_t lmem_address_MemoryControllerPro0_inBT3, size_t lmem_arr_size_MemoryControllerPro0_inBT3, size_t lmem_address_MemoryControllerPro0_oDataT1, size_t lmem_arr_size_MemoryControllerPro0_oDataT1, size_t lmem_address_MemoryControllerPro0_oDataT2, size_t lmem_arr_size_MemoryControllerPro0_oDataT2); /** * \brief Advanced static interface, structure for the engine interface 'default' * */ typedef struct { uint64_t ticks_StreamFMAKernel; /**< [in] The number of ticks for which kernel "StreamFMAKernel" will run. */ const void *instream_inAT1; /**< [in] Stream "inAT1". */ size_t instream_size_inAT1; /**< [in] The size of the stream instream_inAT1 in bytes. */ const void *instream_inBT1; /**< [in] Stream "inBT1". */ size_t instream_size_inBT1; /**< [in] The size of the stream instream_inBT1 in bytes. */ void *outstream_oDataT3; /**< [out] Stream "oDataT3". */ size_t outstream_size_oDataT3; /**< [in] The size of the stream outstream_oDataT3 in bytes. */ size_t lmem_address_MemoryControllerPro0_inAT2; /**< [in] Linear LMem control for "inAT2" stream: base address, in bytes. */ size_t lmem_arr_size_MemoryControllerPro0_inAT2; /**< [in] Linear LMem control for "inAT2" stream: array size, in bytes. */ size_t lmem_address_MemoryControllerPro0_inAT3; /**< [in] Linear LMem control for "inAT3" stream: base address, in bytes. */ size_t lmem_arr_size_MemoryControllerPro0_inAT3; /**< [in] Linear LMem control for "inAT3" stream: array size, in bytes. */ size_t lmem_address_MemoryControllerPro0_inBT2; /**< [in] Linear LMem control for "inBT2" stream: base address, in bytes. */ size_t lmem_arr_size_MemoryControllerPro0_inBT2; /**< [in] Linear LMem control for "inBT2" stream: array size, in bytes. */ size_t lmem_address_MemoryControllerPro0_inBT3; /**< [in] Linear LMem control for "inBT3" stream: base address, in bytes. */ size_t lmem_arr_size_MemoryControllerPro0_inBT3; /**< [in] Linear LMem control for "inBT3" stream: array size, in bytes. */ size_t lmem_address_MemoryControllerPro0_oDataT1; /**< [in] Linear LMem control for "oDataT1" stream: base address, in bytes. */ size_t lmem_arr_size_MemoryControllerPro0_oDataT1; /**< [in] Linear LMem control for "oDataT1" stream: array size, in bytes. */ size_t lmem_address_MemoryControllerPro0_oDataT2; /**< [in] Linear LMem control for "oDataT2" stream: base address, in bytes. */ size_t lmem_arr_size_MemoryControllerPro0_oDataT2; /**< [in] Linear LMem control for "oDataT2" stream: array size, in bytes. */ } StreamFMA_actions_t; /** * \brief Advanced static function for the interface 'default'. * * \param [in] engine The engine on which the actions will be executed. * \param [in,out] interface_actions Actions to be executed. */ void StreamFMA_run( max_engine_t *engine, StreamFMA_actions_t *interface_actions); /** * \brief Advanced static non-blocking function for the interface 'default'. * * Schedule the actions to run on the engine and return immediately. * The status of the run can be checked either by ::max_wait or ::max_nowait; * note that one of these *must* be called, so that associated memory can be released. * * * \param [in] engine The engine on which the actions will be executed. * \param [in] interface_actions Actions to be executed. * \return A handle on the execution status of the actions, or NULL in case of error. */ max_run_t *StreamFMA_run_nonblock( max_engine_t *engine, StreamFMA_actions_t *interface_actions); /** * \brief Group run advanced static function for the interface 'default'. * * \param [in] group Group to use. * \param [in,out] interface_actions Actions to run. * * Run the actions on the first device available in the group. */ void StreamFMA_run_group(max_group_t *group, StreamFMA_actions_t *interface_actions); /** * \brief Group run advanced static non-blocking function for the interface 'default'. * * * Schedule the actions to run on the first device available in the group and return immediately. * The status of the run must be checked with ::max_wait. * Note that use of ::max_nowait is prohibited with non-blocking running on groups: * see the ::max_run_group_nonblock documentation for more explanation. * * \param [in] group Group to use. * \param [in] interface_actions Actions to run. * \return A handle on the execution status of the actions, or NULL in case of error. */ max_run_t *StreamFMA_run_group_nonblock(max_group_t *group, StreamFMA_actions_t *interface_actions); /** * \brief Array run advanced static function for the interface 'default'. * * \param [in] engarray The array of devices to use. * \param [in,out] interface_actions The array of actions to run. * * Run the array of actions on the array of engines. The length of interface_actions * must match the size of engarray. */ void StreamFMA_run_array(max_engarray_t *engarray, StreamFMA_actions_t *interface_actions[]); /** * \brief Array run advanced static non-blocking function for the interface 'default'. * * * Schedule to run the array of actions on the array of engines, and return immediately. * The length of interface_actions must match the size of engarray. * The status of the run can be checked either by ::max_wait or ::max_nowait; * note that one of these *must* be called, so that associated memory can be released. * * \param [in] engarray The array of devices to use. * \param [in] interface_actions The array of actions to run. * \return A handle on the execution status of the actions, or NULL in case of error. */ max_run_t *StreamFMA_run_array_nonblock(max_engarray_t *engarray, StreamFMA_actions_t *interface_actions[]); /** * \brief Converts a static-interface action struct into a dynamic-interface max_actions_t struct. * * Note that this is an internal utility function used by other functions in the static interface. * * \param [in] maxfile The maxfile to use. * \param [in] interface_actions The interface-specific actions to run. * \return The dynamic-interface actions to run, or NULL in case of error. */ max_actions_t* StreamFMA_convert(max_file_t *maxfile, StreamFMA_actions_t *interface_actions); /** * \brief Initialise a maxfile. */ max_file_t* StreamFMA_init(void); /* Error handling functions */ int StreamFMA_has_errors(void); const char* StreamFMA_get_errors(void); void StreamFMA_clear_errors(void); /* Free statically allocated maxfile data */ void StreamFMA_free(void); /* returns: -1 = error running command; 0 = no error reported */ int StreamFMA_simulator_start(void); /* returns: -1 = error running command; 0 = no error reported */ int StreamFMA_simulator_stop(void); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* SLIC_DECLARATIONS_StreamFMA_H */ #endif /* SLIC_NO_DECLARATIONS */ #ifdef PHOTON_NODE_DATA #define PHOTON_NODE_DATA_PRESENT 1 PHOTON_NODE_DATA(StreamFMAKernel, 22, NodeInputMappedReg, "Scalar input (io_oDataT1_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:31)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 23, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:31)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 0, NodeInputMappedReg, "Scalar input (io_inAT1_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:15)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 1, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:15)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 2, NodeInput, "Input(inAT1)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:15)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 3, NodeInputMappedReg, "Scalar input (io_inBT1_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:16)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 4, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:16)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 5, NodeInput, "Input(inBT1)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:16)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 18, NodeAdd, "+", "com.maxeler.maxcompiler.v2.kernelcompiler.types.base.DFEVar.add(DFEVar.java:1010)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:27)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 25, NodeOutput, "Output(oDataT1)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:31)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 27, NodeInputMappedReg, "Scalar input (io_oDataT2_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:32)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 28, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:32)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 6, NodeInputMappedReg, "Scalar input (io_inAT2_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:19)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 7, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:19)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 8, NodeInput, "Input(inAT2)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:19)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 9, NodeInputMappedReg, "Scalar input (io_inBT2_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:20)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 10, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:20)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 11, NodeInput, "Input(inBT2)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:20)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 19, NodeMul, "*", "com.maxeler.maxcompiler.v2.kernelcompiler.types.base.DFEVar.mul(DFEVar.java:1118)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:28)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 30, NodeOutput, "Output(oDataT2)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:32)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 32, NodeInputMappedReg, "Scalar input (io_oDataT3_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:33)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 33, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:33)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 12, NodeInputMappedReg, "Scalar input (io_inAT3_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:23)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 13, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:23)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 14, NodeInput, "Input(inAT3)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:23)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 15, NodeInputMappedReg, "Scalar input (io_inBT3_force_disabled)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:24)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 16, NodeNot, "~", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:24)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 17, NodeInput, "Input(inBT3)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.input(IO.java:630)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:24)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 20, NodeAdd, "+", "com.maxeler.maxcompiler.v2.kernelcompiler.types.base.DFEVar.add(DFEVar.java:1010)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:29)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 35, NodeOutput, "Output(oDataT3)", "com.maxeler.maxcompiler.v2.kernelcompiler.stdlib.core.IO.output(IO.java:836)\nperfmodels.StreamFMAKernel.(StreamFMAKernel.maxj:33)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 40, NodeConstantRawBits, "{HWOffsetFix:1, 0, UNSIGNED}\n0x1; 1.0", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 50, NodeConstantRawBits, "{HWOffsetFix:1, 0, UNSIGNED}\n0x1; 1.0", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 37, NodeConstantRawBits, "{HWOffsetFix:49, 0, UNSIGNED}\n0x1000000000000; 2.81474976710656E14", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 38, NodeCounter, "Counter(NUMERIC_INCREMENTING)\nInc: 1\nReset: 0\nInit: 0", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 39, NodeStreamOffset, "stream offset: 1", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 41, NodeOutputMappedReg, "Scalar output (current_run_cycle_count)", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 49, NodeConstantRawBits, "{HWOffsetFix:1, 0, UNSIGNED}\n0x1; 1.0", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 43, NodeConstantRawBits, "{HWOffsetFix:49, 0, UNSIGNED}\n0x1000000000000; 2.81474976710656E14", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 44, NodeCounter, "Counter(NUMERIC_INCREMENTING)\nInc: 1\nReset: 0\nInit: 0", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 46, NodeInputMappedReg, "Scalar input (run_cycle_count)", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 48, NodeEqInlined, "==", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") PHOTON_NODE_DATA(StreamFMAKernel, 45, NodeFlush, "flush on trigger", "com.maxeler.platform.max5.manager.Max5ManagerBase.addKernel(Unknown Source)\nperfmodels.StreamFMAManager.(StreamFMAManager.maxj:22)\nperfmodels.StreamFMAManager.main(StreamFMAManager.maxj:59)\n") #endif #ifdef SLIC_USE_DEFINITIONS #include #include #include #include #include #include static max_file_t *stored_maxfile = NULL; static max_engine_t *stored_engine = NULL; static char *stored_error = NULL; static int stored_has_error = 0; static pthread_once_t slic_bs_is_initialised = PTHREAD_ONCE_INIT; static void set_error(const char *error_str) { stored_has_error = 1; if(stored_error == NULL) { stored_error = strdup(error_str); } else { char *nerr = malloc(strlen(stored_error) + strlen(error_str) + 2); sprintf(nerr, "%s\n%s", stored_error, error_str); free(stored_error); stored_error = nerr; } } static void set_error_and_free(char *error_str){ set_error(error_str); free(error_str); } int StreamFMA_has_errors(void) { return stored_has_error; } const char* StreamFMA_get_errors(void) { return stored_error; } void StreamFMA_clear_errors(void) { free(stored_error); stored_error = NULL; stored_has_error = 0; } static char StreamFMA_use_simulation[16]; static void StreamFMA_def_use_simulation(void) { long pid = ((long) getpid()) % 100000; snprintf(StreamFMA_use_simulation, 16, "StreamFM_%05ld_", pid); } static const char *StreamFMA_check_use_simulation(void) { StreamFMA_def_use_simulation(); const char *use_sim = max_config_get_string(MAX_CONFIG_USE_SIMULATION); if (use_sim == NULL) { use_sim = StreamFMA_use_simulation; max_config_set_string(MAX_CONFIG_USE_SIMULATION, use_sim); } return use_sim; } static int StreamFMA_simulation_launch = 0; int StreamFMA_simulator_start(void) { int retval = 0; const char *use_sim = StreamFMA_check_use_simulation(); char buff[1024]; snprintf(buff, 1024, "PATH=simutils:$PATH maxcompilersim -d 1 -n %s -c MAX5C -S simutils restart", use_sim); FILE *pipe_fp = popen(buff, "r"); if (pipe_fp == NULL) { strncat(buff, " : failed to execute.", (1024 - strlen(buff))); set_error(buff); return -1; } while (fgets(buff, 1024, pipe_fp) != NULL) { /* Uncomment this to get simulator command output */ /* fprintf(stderr, buff); */ if (strstr(buff, "Error")) { set_error(buff); retval = -1; } } pclose(pipe_fp); return retval; } int StreamFMA_simulator_stop(void) { const char *use_sim = StreamFMA_check_use_simulation(); char buff[1024]; snprintf(buff, 1024, "PATH=simutils:$PATH maxcompilersim -d 1 -n %s -c MAX5C -S simutils stop", use_sim); FILE *pipe_fp = popen(buff, "r"); if (pipe_fp == NULL) { strncat(buff, " : failed to execute.", (1024 - strlen(buff))); set_error(buff); return -1; } while (fgets(buff, 1024, pipe_fp) != NULL) { /* Uncomment this to get simulator command output */ /* fprintf(stderr, buff); */ ; } pclose(pipe_fp); return 0; } static void StreamFMA_static_init(void) { stored_maxfile = StreamFMA_init(); if (stored_maxfile == NULL || !max_ok(stored_maxfile->errors)) { stored_maxfile = NULL; if(max_config_get_bool(MAX_CONFIG_STATIC_INTERFACE_ABORT_ON_ERROR)) abort(); else { set_error("Unable to load maxfile"); return; } } if(!max_ok(max_global_errors())) { set_error_and_free(max_errors_trace(max_global_errors())); return; } if(!max_config_get_bool(MAX_CONFIG_STATIC_INTERFACE_ABORT_ON_ERROR)) max_errors_mode(stored_maxfile->errors, 0); time_t timeout_previous = max_load_timeout(stored_maxfile, 30); const char *use_sim = StreamFMA_check_use_simulation(); if (max_ping_daemon(stored_maxfile, use_sim) == 0) { int sim_stat = StreamFMA_simulator_start(); if ((sim_stat == 0) && (max_ping_daemon(stored_maxfile, use_sim) == 1)) { StreamFMA_simulation_launch = 1; } else { set_error("Error: An error occurred while trying to start the simulation infrastructure automatically."); set_error("Error: Check that 'use_simulation=' is set correctly in your SLiC configuration"); set_error("Error: and that the associated simulated system daemon is running."); max_file_free(stored_maxfile); stored_maxfile = NULL; return; } } stored_engine = max_load(stored_maxfile, "*"); if (!max_ok(stored_maxfile->errors)) { if(max_config_get_bool(MAX_CONFIG_STATIC_INTERFACE_ABORT_ON_ERROR)) { fprintf(stderr, "\nUnable to load engine: aborting now.\n\n"); fflush(stderr); abort(); } else { set_error_and_free(max_errors_trace(stored_maxfile->errors)); max_file_free(stored_maxfile); stored_maxfile = NULL; return; } } max_load_timeout(stored_maxfile, timeout_previous); } void StreamFMA_free(void) { if (stored_engine != NULL) { max_unload(stored_engine); stored_engine = NULL; } if (stored_maxfile != NULL) { max_file_free(stored_maxfile); stored_maxfile = NULL; } if (stored_error != NULL) { free(stored_error); stored_error = NULL; } if (StreamFMA_simulation_launch == 1) { int sim_stat = StreamFMA_simulator_stop(); if (sim_stat != 0 ) { fprintf(stderr, "Error stopping simulator."); } StreamFMA_simulation_launch = 0; } } static int StreamFMA_get_pcie_alignment(void) { #ifdef StreamFMA_PCIE_ALIGNMENT return ((StreamFMA_PCIE_ALIGNMENT < 1) ? 16 : StreamFMA_PCIE_ALIGNMENT); #else return 16; #endif } static int StreamFMA_check_aligned(const void *data) { uintptr_t pointer = (uintptr_t) data; int alignment = StreamFMA_get_pcie_alignment(); return (pointer % alignment) ? 1 : 0; } static void *StreamFMA_malloc_aligned(const size_t size) { void *ptr; int alignment = StreamFMA_get_pcie_alignment(); posix_memalign(&ptr, alignment, size); return ptr; } /*----------------------------------------------------------------------------*/ /*---------------------------- Interface default -----------------------------*/ /*----------------------------------------------------------------------------*/ #define CHECK_ERRORS_ST(ST, RET) if(!max_ok(ST->errors)) { if(max_config_get_bool(MAX_CONFIG_STATIC_INTERFACE_ABORT_ON_ERROR)) { fprintf(stderr, "%s\n", max_errors_trace(ST->errors)); abort(); } set_error_and_free(max_errors_trace(ST->errors)); return RET; } #define CHECK_NULL(VALUE, MESSAGE, RET) if(VALUE == NULL) { if (max_config_get_bool(MAX_CONFIG_STATIC_INTERFACE_ABORT_ON_ERROR)) { fprintf(stderr, "%s\n%s\n", (stored_error == NULL) ? "" : stored_error, MESSAGE); abort(); } set_error(MESSAGE); return RET; } typedef struct StreamFMA_callback_stream { uint8_t *user_ptr; uint8_t *aligned_ptr; size_t size; int is_output; } StreamFMA_callback_stream_t; typedef struct StreamFMA_callback_data { StreamFMA_callback_stream_t stream[3]; int count; int max_count; } StreamFMA_callback_data_t; static void StreamFMA_callback_internal(void *cb_data) { StreamFMA_callback_data_t *data = (StreamFMA_callback_data_t*) cb_data; for (int i = 0 ; i < data->count ; i++ ) { StreamFMA_callback_stream_t *s = &data->stream[i]; if (s->is_output && (s->size > 0)) { memcpy(s->user_ptr, s->aligned_ptr, s->size); } free(s->aligned_ptr); } free(data); } static max_actions_t* StreamFMA_convert_internal( max_file_t *maxfile, StreamFMA_actions_t *interface_actions, int is_internal_call, void (**callback_func)(void*), void **callback_data) { max_actions_t *actions = max_actions_init(maxfile, NULL); if(actions == NULL) return NULL; #define CHECK_ERRORS if(!max_ok(actions->errors)) { set_error_and_free(max_errors_trace(actions->errors)); return NULL; } StreamFMA_callback_data_t *cb_data = NULL; int use_callback = (callback_func != NULL) && (callback_data != NULL); if (use_callback) { cb_data = malloc(sizeof(StreamFMA_callback_data_t)); if (cb_data == NULL) { fprintf(stderr, "Unable to allocate memory for stream callback data in function StreamFMA_convert_internal\n"); return NULL; } cb_data->max_count = 3; cb_data->count = 0; *callback_data = cb_data; *callback_func = &StreamFMA_callback_internal; } /* code for scalar StreamFMAKernel.run_cycle_count */ uint64_t ticks_StreamFMAKernel = interface_actions->ticks_StreamFMAKernel; max_set_ticks(actions, "StreamFMAKernel", ticks_StreamFMAKernel); CHECK_ERRORS; /* end of code for scalar StreamFMAKernel.run_cycle_count*/ /* code for stream inAT1 */ size_t instream_size_inAT1 = interface_actions->instream_size_inAT1; if (instream_size_inAT1 > 0) { const void *stream_ptr = interface_actions->instream_inAT1; if (use_callback && (1 == StreamFMA_check_aligned(interface_actions->instream_inAT1))) { void *aligned_instream_inAT1 = malloc(instream_size_inAT1); if (aligned_instream_inAT1 == NULL) { max_report_error_slic(actions->errors, __FILE__, __LINE__, 526, "Failed to allocate aligned memory for stream 'inAT1'"); CHECK_ERRORS; } (&cb_data->stream[cb_data->count])->user_ptr = (uint8_t*) interface_actions->instream_inAT1; (&cb_data->stream[cb_data->count])->aligned_ptr = (uint8_t*) aligned_instream_inAT1; (&cb_data->stream[cb_data->count])->size = instream_size_inAT1; (&cb_data->stream[cb_data->count])->is_output = 0; cb_data->count += 1; memcpy(aligned_instream_inAT1, interface_actions->instream_inAT1, instream_size_inAT1); stream_ptr = aligned_instream_inAT1; } max_queue_input(actions, "inAT1", stream_ptr, instream_size_inAT1); CHECK_ERRORS; } /* end of code for stream inAT1 */ /* code for stream inBT1 */ size_t instream_size_inBT1 = interface_actions->instream_size_inBT1; if (instream_size_inBT1 > 0) { const void *stream_ptr = interface_actions->instream_inBT1; if (use_callback && (1 == StreamFMA_check_aligned(interface_actions->instream_inBT1))) { void *aligned_instream_inBT1 = malloc(instream_size_inBT1); if (aligned_instream_inBT1 == NULL) { max_report_error_slic(actions->errors, __FILE__, __LINE__, 526, "Failed to allocate aligned memory for stream 'inBT1'"); CHECK_ERRORS; } (&cb_data->stream[cb_data->count])->user_ptr = (uint8_t*) interface_actions->instream_inBT1; (&cb_data->stream[cb_data->count])->aligned_ptr = (uint8_t*) aligned_instream_inBT1; (&cb_data->stream[cb_data->count])->size = instream_size_inBT1; (&cb_data->stream[cb_data->count])->is_output = 0; cb_data->count += 1; memcpy(aligned_instream_inBT1, interface_actions->instream_inBT1, instream_size_inBT1); stream_ptr = aligned_instream_inBT1; } max_queue_input(actions, "inBT1", stream_ptr, instream_size_inBT1); CHECK_ERRORS; } /* end of code for stream inBT1 */ /* code for stream oDataT3 */ size_t outstream_size_oDataT3 = interface_actions->outstream_size_oDataT3; if (outstream_size_oDataT3 > 0) { void *stream_ptr = interface_actions->outstream_oDataT3; if (use_callback && (1 == StreamFMA_check_aligned(interface_actions->outstream_oDataT3))) { void *aligned_outstream_oDataT3 = malloc(outstream_size_oDataT3); if (aligned_outstream_oDataT3 == NULL) { max_report_error_slic(actions->errors, __FILE__, __LINE__, 526, "Failed to allocate aligned memory for stream 'oDataT3'"); CHECK_ERRORS; } (&cb_data->stream[cb_data->count])->user_ptr = (uint8_t*) interface_actions->outstream_oDataT3; (&cb_data->stream[cb_data->count])->aligned_ptr = (uint8_t*) aligned_outstream_oDataT3; (&cb_data->stream[cb_data->count])->size = outstream_size_oDataT3; (&cb_data->stream[cb_data->count])->is_output = 1; cb_data->count += 1; stream_ptr = aligned_outstream_oDataT3; } max_queue_output(actions, "oDataT3", stream_ptr, outstream_size_oDataT3); CHECK_ERRORS; } /* end of code for stream oDataT3 */ /* code for linear memory-stream "inAT2" in memory-controller "MemoryControllerPro0" */ size_t lmem_address_MemoryControllerPro0_inAT2 = interface_actions->lmem_address_MemoryControllerPro0_inAT2; size_t lmem_arr_size_MemoryControllerPro0_inAT2 = interface_actions->lmem_arr_size_MemoryControllerPro0_inAT2; int lmem_burst_size_MemoryControllerPro0_inAT2 = max_get_burst_size(maxfile, "MemoryControllerPro0"); if ( (lmem_address_MemoryControllerPro0_inAT2 % lmem_burst_size_MemoryControllerPro0_inAT2) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem inAT2 parameter 'lmem_address_MemoryControllerPro0_inAT2' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_address_MemoryControllerPro0_inAT2, lmem_burst_size_MemoryControllerPro0_inAT2 ); } if ( (lmem_arr_size_MemoryControllerPro0_inAT2 % lmem_burst_size_MemoryControllerPro0_inAT2) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem inAT2 parameter 'lmem_arr_size_MemoryControllerPro0_inAT2' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_arr_size_MemoryControllerPro0_inAT2, lmem_burst_size_MemoryControllerPro0_inAT2 ); } if (lmem_arr_size_MemoryControllerPro0_inAT2 > 0) { max_memctl_linear(actions, "MemoryControllerPro0", "inAT2", lmem_address_MemoryControllerPro0_inAT2, lmem_arr_size_MemoryControllerPro0_inAT2); } else { max_ignore_memctl(actions, "MemoryControllerPro0", "inAT2"); } CHECK_ERRORS; /* end of code for linear memory-stream "inAT2" in memory-controller "MemoryControllerPro0" */ /* code for linear memory-stream "inAT3" in memory-controller "MemoryControllerPro0" */ size_t lmem_address_MemoryControllerPro0_inAT3 = interface_actions->lmem_address_MemoryControllerPro0_inAT3; size_t lmem_arr_size_MemoryControllerPro0_inAT3 = interface_actions->lmem_arr_size_MemoryControllerPro0_inAT3; int lmem_burst_size_MemoryControllerPro0_inAT3 = max_get_burst_size(maxfile, "MemoryControllerPro0"); if ( (lmem_address_MemoryControllerPro0_inAT3 % lmem_burst_size_MemoryControllerPro0_inAT3) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem inAT3 parameter 'lmem_address_MemoryControllerPro0_inAT3' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_address_MemoryControllerPro0_inAT3, lmem_burst_size_MemoryControllerPro0_inAT3 ); } if ( (lmem_arr_size_MemoryControllerPro0_inAT3 % lmem_burst_size_MemoryControllerPro0_inAT3) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem inAT3 parameter 'lmem_arr_size_MemoryControllerPro0_inAT3' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_arr_size_MemoryControllerPro0_inAT3, lmem_burst_size_MemoryControllerPro0_inAT3 ); } if (lmem_arr_size_MemoryControllerPro0_inAT3 > 0) { max_memctl_linear(actions, "MemoryControllerPro0", "inAT3", lmem_address_MemoryControllerPro0_inAT3, lmem_arr_size_MemoryControllerPro0_inAT3); } else { max_ignore_memctl(actions, "MemoryControllerPro0", "inAT3"); } CHECK_ERRORS; /* end of code for linear memory-stream "inAT3" in memory-controller "MemoryControllerPro0" */ /* code for linear memory-stream "inBT2" in memory-controller "MemoryControllerPro0" */ size_t lmem_address_MemoryControllerPro0_inBT2 = interface_actions->lmem_address_MemoryControllerPro0_inBT2; size_t lmem_arr_size_MemoryControllerPro0_inBT2 = interface_actions->lmem_arr_size_MemoryControllerPro0_inBT2; int lmem_burst_size_MemoryControllerPro0_inBT2 = max_get_burst_size(maxfile, "MemoryControllerPro0"); if ( (lmem_address_MemoryControllerPro0_inBT2 % lmem_burst_size_MemoryControllerPro0_inBT2) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem inBT2 parameter 'lmem_address_MemoryControllerPro0_inBT2' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_address_MemoryControllerPro0_inBT2, lmem_burst_size_MemoryControllerPro0_inBT2 ); } if ( (lmem_arr_size_MemoryControllerPro0_inBT2 % lmem_burst_size_MemoryControllerPro0_inBT2) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem inBT2 parameter 'lmem_arr_size_MemoryControllerPro0_inBT2' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_arr_size_MemoryControllerPro0_inBT2, lmem_burst_size_MemoryControllerPro0_inBT2 ); } if (lmem_arr_size_MemoryControllerPro0_inBT2 > 0) { max_memctl_linear(actions, "MemoryControllerPro0", "inBT2", lmem_address_MemoryControllerPro0_inBT2, lmem_arr_size_MemoryControllerPro0_inBT2); } else { max_ignore_memctl(actions, "MemoryControllerPro0", "inBT2"); } CHECK_ERRORS; /* end of code for linear memory-stream "inBT2" in memory-controller "MemoryControllerPro0" */ /* code for linear memory-stream "inBT3" in memory-controller "MemoryControllerPro0" */ size_t lmem_address_MemoryControllerPro0_inBT3 = interface_actions->lmem_address_MemoryControllerPro0_inBT3; size_t lmem_arr_size_MemoryControllerPro0_inBT3 = interface_actions->lmem_arr_size_MemoryControllerPro0_inBT3; int lmem_burst_size_MemoryControllerPro0_inBT3 = max_get_burst_size(maxfile, "MemoryControllerPro0"); if ( (lmem_address_MemoryControllerPro0_inBT3 % lmem_burst_size_MemoryControllerPro0_inBT3) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem inBT3 parameter 'lmem_address_MemoryControllerPro0_inBT3' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_address_MemoryControllerPro0_inBT3, lmem_burst_size_MemoryControllerPro0_inBT3 ); } if ( (lmem_arr_size_MemoryControllerPro0_inBT3 % lmem_burst_size_MemoryControllerPro0_inBT3) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem inBT3 parameter 'lmem_arr_size_MemoryControllerPro0_inBT3' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_arr_size_MemoryControllerPro0_inBT3, lmem_burst_size_MemoryControllerPro0_inBT3 ); } if (lmem_arr_size_MemoryControllerPro0_inBT3 > 0) { max_memctl_linear(actions, "MemoryControllerPro0", "inBT3", lmem_address_MemoryControllerPro0_inBT3, lmem_arr_size_MemoryControllerPro0_inBT3); } else { max_ignore_memctl(actions, "MemoryControllerPro0", "inBT3"); } CHECK_ERRORS; /* end of code for linear memory-stream "inBT3" in memory-controller "MemoryControllerPro0" */ /* code for linear memory-stream "oDataT1" in memory-controller "MemoryControllerPro0" */ size_t lmem_address_MemoryControllerPro0_oDataT1 = interface_actions->lmem_address_MemoryControllerPro0_oDataT1; size_t lmem_arr_size_MemoryControllerPro0_oDataT1 = interface_actions->lmem_arr_size_MemoryControllerPro0_oDataT1; int lmem_burst_size_MemoryControllerPro0_oDataT1 = max_get_burst_size(maxfile, "MemoryControllerPro0"); if ( (lmem_address_MemoryControllerPro0_oDataT1 % lmem_burst_size_MemoryControllerPro0_oDataT1) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem oDataT1 parameter 'lmem_address_MemoryControllerPro0_oDataT1' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_address_MemoryControllerPro0_oDataT1, lmem_burst_size_MemoryControllerPro0_oDataT1 ); } if ( (lmem_arr_size_MemoryControllerPro0_oDataT1 % lmem_burst_size_MemoryControllerPro0_oDataT1) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem oDataT1 parameter 'lmem_arr_size_MemoryControllerPro0_oDataT1' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_arr_size_MemoryControllerPro0_oDataT1, lmem_burst_size_MemoryControllerPro0_oDataT1 ); } if (lmem_arr_size_MemoryControllerPro0_oDataT1 > 0) { max_memctl_linear(actions, "MemoryControllerPro0", "oDataT1", lmem_address_MemoryControllerPro0_oDataT1, lmem_arr_size_MemoryControllerPro0_oDataT1); } else { max_ignore_memctl(actions, "MemoryControllerPro0", "oDataT1"); } CHECK_ERRORS; /* end of code for linear memory-stream "oDataT1" in memory-controller "MemoryControllerPro0" */ /* code for linear memory-stream "oDataT2" in memory-controller "MemoryControllerPro0" */ size_t lmem_address_MemoryControllerPro0_oDataT2 = interface_actions->lmem_address_MemoryControllerPro0_oDataT2; size_t lmem_arr_size_MemoryControllerPro0_oDataT2 = interface_actions->lmem_arr_size_MemoryControllerPro0_oDataT2; int lmem_burst_size_MemoryControllerPro0_oDataT2 = max_get_burst_size(maxfile, "MemoryControllerPro0"); if ( (lmem_address_MemoryControllerPro0_oDataT2 % lmem_burst_size_MemoryControllerPro0_oDataT2) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem oDataT2 parameter 'lmem_address_MemoryControllerPro0_oDataT2' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_address_MemoryControllerPro0_oDataT2, lmem_burst_size_MemoryControllerPro0_oDataT2 ); } if ( (lmem_arr_size_MemoryControllerPro0_oDataT2 % lmem_burst_size_MemoryControllerPro0_oDataT2) != 0 ) { fprintf(stdout, "\nSLiC Error: %s:%d : LMem oDataT2 parameter 'lmem_arr_size_MemoryControllerPro0_oDataT2' is set to %zd bytes; it must be a multiple of %d bytes\n", __FILE__, __LINE__, lmem_arr_size_MemoryControllerPro0_oDataT2, lmem_burst_size_MemoryControllerPro0_oDataT2 ); } if (lmem_arr_size_MemoryControllerPro0_oDataT2 > 0) { max_memctl_linear(actions, "MemoryControllerPro0", "oDataT2", lmem_address_MemoryControllerPro0_oDataT2, lmem_arr_size_MemoryControllerPro0_oDataT2); } else { max_ignore_memctl(actions, "MemoryControllerPro0", "oDataT2"); } CHECK_ERRORS; /* end of code for linear memory-stream "oDataT2" in memory-controller "MemoryControllerPro0" */ if (use_callback && cb_data->count == 0) { *callback_data = NULL; *callback_func = NULL; free(cb_data); } return actions; #undef CHECK_ERRORS } void StreamFMA( uint64_t ticks_StreamFMAKernel, const void *instream_inAT1, size_t instream_size_inAT1, const void *instream_inBT1, size_t instream_size_inBT1, void *outstream_oDataT3, size_t outstream_size_oDataT3, size_t lmem_address_MemoryControllerPro0_inAT2, size_t lmem_arr_size_MemoryControllerPro0_inAT2, size_t lmem_address_MemoryControllerPro0_inAT3, size_t lmem_arr_size_MemoryControllerPro0_inAT3, size_t lmem_address_MemoryControllerPro0_inBT2, size_t lmem_arr_size_MemoryControllerPro0_inBT2, size_t lmem_address_MemoryControllerPro0_inBT3, size_t lmem_arr_size_MemoryControllerPro0_inBT3, size_t lmem_address_MemoryControllerPro0_oDataT1, size_t lmem_arr_size_MemoryControllerPro0_oDataT1, size_t lmem_address_MemoryControllerPro0_oDataT2, size_t lmem_arr_size_MemoryControllerPro0_oDataT2) { (void) pthread_once(&slic_bs_is_initialised, StreamFMA_static_init); CHECK_NULL(stored_maxfile, "Maxfile was not loaded", ); max_run_t *run = StreamFMA_nonblock(ticks_StreamFMAKernel, instream_inAT1, instream_size_inAT1, instream_inBT1, instream_size_inBT1, outstream_oDataT3, outstream_size_oDataT3, lmem_address_MemoryControllerPro0_inAT2, lmem_arr_size_MemoryControllerPro0_inAT2, lmem_address_MemoryControllerPro0_inAT3, lmem_arr_size_MemoryControllerPro0_inAT3, lmem_address_MemoryControllerPro0_inBT2, lmem_arr_size_MemoryControllerPro0_inBT2, lmem_address_MemoryControllerPro0_inBT3, lmem_arr_size_MemoryControllerPro0_inBT3, lmem_address_MemoryControllerPro0_oDataT1, lmem_arr_size_MemoryControllerPro0_oDataT1, lmem_address_MemoryControllerPro0_oDataT2, lmem_arr_size_MemoryControllerPro0_oDataT2); CHECK_NULL(run, "Unable to run actions", ); max_wait(run); } max_run_t *StreamFMA_nonblock( uint64_t ticks_StreamFMAKernel, const void *instream_inAT1, size_t instream_size_inAT1, const void *instream_inBT1, size_t instream_size_inBT1, void *outstream_oDataT3, size_t outstream_size_oDataT3, size_t lmem_address_MemoryControllerPro0_inAT2, size_t lmem_arr_size_MemoryControllerPro0_inAT2, size_t lmem_address_MemoryControllerPro0_inAT3, size_t lmem_arr_size_MemoryControllerPro0_inAT3, size_t lmem_address_MemoryControllerPro0_inBT2, size_t lmem_arr_size_MemoryControllerPro0_inBT2, size_t lmem_address_MemoryControllerPro0_inBT3, size_t lmem_arr_size_MemoryControllerPro0_inBT3, size_t lmem_address_MemoryControllerPro0_oDataT1, size_t lmem_arr_size_MemoryControllerPro0_oDataT1, size_t lmem_address_MemoryControllerPro0_oDataT2, size_t lmem_arr_size_MemoryControllerPro0_oDataT2) { StreamFMA_actions_t interface_actions; interface_actions.ticks_StreamFMAKernel = ticks_StreamFMAKernel; interface_actions.instream_inAT1 = instream_inAT1; interface_actions.instream_size_inAT1 = instream_size_inAT1; interface_actions.instream_inBT1 = instream_inBT1; interface_actions.instream_size_inBT1 = instream_size_inBT1; interface_actions.outstream_oDataT3 = outstream_oDataT3; interface_actions.outstream_size_oDataT3 = outstream_size_oDataT3; interface_actions.lmem_address_MemoryControllerPro0_inAT2 = lmem_address_MemoryControllerPro0_inAT2; interface_actions.lmem_arr_size_MemoryControllerPro0_inAT2 = lmem_arr_size_MemoryControllerPro0_inAT2; interface_actions.lmem_address_MemoryControllerPro0_inAT3 = lmem_address_MemoryControllerPro0_inAT3; interface_actions.lmem_arr_size_MemoryControllerPro0_inAT3 = lmem_arr_size_MemoryControllerPro0_inAT3; interface_actions.lmem_address_MemoryControllerPro0_inBT2 = lmem_address_MemoryControllerPro0_inBT2; interface_actions.lmem_arr_size_MemoryControllerPro0_inBT2 = lmem_arr_size_MemoryControllerPro0_inBT2; interface_actions.lmem_address_MemoryControllerPro0_inBT3 = lmem_address_MemoryControllerPro0_inBT3; interface_actions.lmem_arr_size_MemoryControllerPro0_inBT3 = lmem_arr_size_MemoryControllerPro0_inBT3; interface_actions.lmem_address_MemoryControllerPro0_oDataT1 = lmem_address_MemoryControllerPro0_oDataT1; interface_actions.lmem_arr_size_MemoryControllerPro0_oDataT1 = lmem_arr_size_MemoryControllerPro0_oDataT1; interface_actions.lmem_address_MemoryControllerPro0_oDataT2 = lmem_address_MemoryControllerPro0_oDataT2; interface_actions.lmem_arr_size_MemoryControllerPro0_oDataT2 = lmem_arr_size_MemoryControllerPro0_oDataT2; (void) pthread_once(&slic_bs_is_initialised, StreamFMA_static_init); CHECK_NULL(stored_maxfile, "Maxfile was not loaded", NULL); void (*cb_func)(void*) = NULL; void *cb_data = NULL; max_actions_t *actions = StreamFMA_convert_internal(stored_maxfile, &interface_actions, 1, &cb_func, &cb_data); CHECK_NULL(actions, "Unable to build actions", NULL); max_validate(actions); CHECK_ERRORS_ST(actions, NULL); CHECK_ERRORS_ST(stored_engine, NULL); max_run_t *run; if (cb_func == NULL) { run = max_run_nonblock(stored_engine, actions); } else { run = max_run_nonblock_with_cb(stored_engine, actions, cb_func, cb_data); } CHECK_NULL(run, "Unable to run actions", NULL); CHECK_ERRORS_ST(actions, NULL); max_actions_free(actions); return run; } void StreamFMA_run( max_engine_t *engine, StreamFMA_actions_t *interface_actions) { max_run_t *run = StreamFMA_run_nonblock(engine, interface_actions); CHECK_NULL(run, "Unable to run actions", ); max_wait(run); } max_run_t *StreamFMA_run_nonblock( max_engine_t *engine, StreamFMA_actions_t *interface_actions) { max_file_t *maxfile = max_engine_get_max_file(engine); void (*cb_func)(void*) = NULL; void *cb_data = NULL; max_actions_t *actions = StreamFMA_convert_internal(maxfile, interface_actions, 1, &cb_func, &cb_data); CHECK_NULL(actions, "Unable to build actions", NULL); max_validate(actions); CHECK_ERRORS_ST(actions, NULL); max_run_t *run; if (cb_func == NULL) { run = max_run_nonblock(engine, actions); } else { run = max_run_nonblock_with_cb(engine, actions, cb_func, cb_data); } CHECK_NULL(run, "Unable to run actions", NULL); max_actions_free(actions); return run; } /** * \brief Group run advanced static function for the interface 'default'. * * \param [in] group Group to use. * \param [in,out] interface_actions Actions to run. * * Run the actions on the first device available in the group. */ void StreamFMA_run_group(max_group_t *group, StreamFMA_actions_t *interface_actions) { max_run_t *run = StreamFMA_run_group_nonblock(group, interface_actions); CHECK_NULL(run, "Unable to run actions", ); max_wait(run); } /** * \brief Group run advanced static non-blocking function for the interface 'default'. * * * Schedule the actions to run on the first device available in the group and return immediately. * The status of the run must be checked with ::max_wait. * Note that use of ::max_nowait is prohibited with non-blocking running on groups: * see the ::max_run_group_nonblock documentation for more explanation. * * \param [in] group Group to use. * \param [in] interface_actions Actions to run. * \return A handle on the execution status of the actions, or NULL in case of error. */ max_run_t *StreamFMA_run_group_nonblock(max_group_t *group, StreamFMA_actions_t *interface_actions) { max_file_t *maxfile = max_group_get_max_file(group); max_actions_t *actions = StreamFMA_convert_internal(maxfile, interface_actions, 1, NULL, NULL); if(actions == NULL) return NULL; if(!max_ok(actions->errors)) return NULL; max_validate(actions); max_run_t *run = max_run_group_nonblock(group, actions); max_actions_free(actions); return run; } /** * \brief Array run advanced static function for the interface 'default'. * * \param [in] engarray The array of devices to use. * \param [in,out] interface_actions The array of actions to run. * * Run the array of actions on the array of engines. The length of interface_actions * must match the size of engarray. */ void StreamFMA_run_array(max_engarray_t *engarray, StreamFMA_actions_t *interface_actions[]) { max_run_t *run = StreamFMA_run_array_nonblock(engarray, interface_actions); CHECK_NULL(run, "Unable to run actions", ); max_wait(run); } /** * \brief Array run advanced static non-blocking function for the interface 'default'. * * * Schedule to run the array of actions on the array of engines, and return immediately. * The length of interface_actions must match the size of engarray. * The status of the run can be checked either by ::max_wait or ::max_nowait; * note that one of these *must* be called, so that associated memory can be released. * * \param [in] engarray The array of devices to use. * \param [in] interface_actions The array of actions to run. * \return A handle on the execution status of the actions, or NULL in case of error. */ max_run_t *StreamFMA_run_array_nonblock(max_engarray_t *engarray, StreamFMA_actions_t *interface_actions[]) { max_file_t *maxfile = max_engarray_get_max_file(engarray, 0); int i; max_actarray_t *actarray = max_actarray_init(maxfile, engarray->size); if (actarray == NULL) return NULL; max_actions_t **arr_actions = malloc(engarray->size * sizeof(max_actions_t*)); for ( i = 0 ; i < actarray->size; i++ ) { max_actions_t *actions = StreamFMA_convert_internal(maxfile, interface_actions[i], 1, NULL, NULL); if (actions == NULL) return NULL; arr_actions[i] = actions; max_set_action(actarray, i, actions); } max_run_t *run = max_run_array_nonblock(engarray, actarray); for ( i = 0 ; i < actarray->size ; i++ ) { max_actions_free(arr_actions[i]); } max_actarray_free(actarray); free(arr_actions); return run; } /** * \brief Converts a static-interface action struct into a dynamic-interface max_actions_t struct. * * Note that this is an internal utility function used by other functions in the static interface. * * \param [in] maxfile The maxfile to use. * \param [in] interface_actions The interface-specific actions to run. * \return The dynamic-interface actions to run, or NULL in case of error. */ max_actions_t* StreamFMA_convert(max_file_t *maxfile, StreamFMA_actions_t *interface_actions) { return StreamFMA_convert_internal(maxfile, interface_actions, 0, NULL, NULL); } #undef CHECK_ERRORS_ST #undef CHECK_NULL #endif /* SLIC_USE_DEFINITIONS */ #ifdef SLIC_DYNAMIC_CODE SLIC_MODE_START(default) SLIC_MODE_END(default) #endif /* SLIC_DYNAMIC_CODE */ #ifdef SKIN_META_DATA PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PG1h eGZpbGUgZm9ybWF0LXZlcnNpb249IjIwMTIwMjAwIiBoZWFkZXI9IlN0cmVhbUZNQS5oIiBuYW1l PSJTdHJlYW1GTUEiPjxjb25zdGFudCBuYW1lPSJEWU5BTUlDX0NMT0NLU19FTkFCTEVEIiB0eXBl PSJsb25nIiB2YWx1ZT0iMCIvPjxjb25zdGFudCBuYW1lPSJQQ0lFX0FMSUdOTUVOVCIgdHlwZT0i bG9uZyIgdmFsdWU9IjE2Ii8+PGVuZ2luZW1vZGUgbmFtZT0iZGVmYXVsdCI+PGZ1bmN0aW9uIG5h bWU9IlN0cmVhbUZNQSIgcmV0dXJuLXZhbHVlPSJ2b2lkIj48c2NhbGFyIGRlc2M9IlRoZSBudW1i ZXIgb2YgdGlja3MgZm9yIHdoaWNoIGtlcm5lbCAmcXVvdDtTdHJlYW1GTUFLZXJuZWwmcXVvdDsg d2lsbCBydW4uIiBkaXJlY3Rpb249IklucHV0IiBuYW1lPSJ0aWNrc19TdHJlYW1GTUFLZXJuZWwi IHR5cGU9InVpbnQ2NF90Ii8+PGFycmF5IGRlc2M9IlN0cmVhbSAmcXVvdDtpbkFUMSZxdW90Oy4i IGRpcmVjdGlvbj0iSW5wdXQiIG5hbWU9Imluc3RyZWFtX2luQVQxIiBzaXplPSJpbnN0cmVhbV9z aXplX2luQVQxIiB0cmFuc3Bvc2U9ImZhbHNlIiB0eXBlPSJ2b2lkIi8+PHNjYWxhciBkZXNjPSJU aGUgc2l6ZSBvZiB0aGUgc3RyZWFtIGluc3RyZWFtX2luQVQxIGluIGJ5dGVzLiIgZGlyZWN0aW9u PSJJbnB1dCIgbmFtZT0iaW5zdHJlYW1fc2l6ZV9pbkFUMSIgdHlwZT0idWludDY0X3QiLz48YXJy YXkgZGVzYz0iU3RyZWFtICZxdW90O2luQlQxJnF1b3Q7LiIgZGlyZWN0aW9uPSJJbnB1dCIgbmFt ZT0iaW5zdHJlYW1faW5CVDEiIHNpemU9Imluc3RyZWFtX3NpemVfaW5CVDEiIHRyYW5zcG9zZT0i ZmFsc2UiIHR5cGU9InZvaWQiLz48c2NhbGFyIGRlc2M9IlRoZSBzaXplIG9mIHRoZSBzdHJlYW0g aW5zdHJlYW1faW5CVDEgaW4gYnl0ZXMuIiBkaXJlY3Rpb249IklucHV0IiBuYW1lPSJpbnN0cmVh bV9zaXplX2luQlQxIiB0eXBlPSJ1aW50NjRfdCIvPjxhcnJheSBkZXNjPSJTdHJlYW0gJnF1b3Q7 b0RhdGFUMyZxdW90Oy4iIGRpcmVjdGlvbj0iT3V0cHV0IiBuYW1lPSJvdXRzdHJlYW1fb0RhdGFU MyIgc2l6ZT0ib3V0c3RyZWFtX3NpemVfb0RhdGFUMyIgdHJhbnNwb3NlPSJmYWxzZSIgdHlwZT0i dm9pZCIvPjxzY2FsYXIgZGVzYz0iVGhlIHNpemUgb2YgdGhlIHN0cmVhbSBvdXRzdHJlYW1fb0Rh dGFUMyBpbiBieXRlcy4iIGRpcmVjdGlvbj0iSW5wdXQiIG5hbWU9Im91dHN0cmVhbV9zaXplX29E YXRhVDMiIHR5cGU9InVpbnQ2NF90Ii8+PHNjYWxhciBkZXNjPSJMaW5lYXIgTE1lbSBjb250cm9s IGZvciAmcXVvdDtpbkFUMiZxdW90OyBzdHJlYW06IGJhc2UgYWRkcmVzcywgaW4gYnl0ZXMuIiBk aXJlY3Rpb249IklucHV0IiBuYW1lPSJsbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBf aW5BVDIiIHR5cGU9InVpbnQ2NF90Ii8+PHNjYWxhciBkZXNjPSJMaW5lYXIgTE1lbSBjb250cm9s IGZvciAmcXVvdDtpbkFUMiZxdW90OyBzdHJlYW06IGFycmF5IHNpemUsIGluIGJ5dGVzLiIgZGly ZWN0aW9uPSJJbnB1dCIgbmFtZT0ibG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9p bkFUMiIgdHlwZT0idWludDY0X3QiLz48c2NhbGFyIGRlc2M9IkxpbmVhciBMTWVtIGNvbnRyb2wg Zm9yICZxdW90O2luQVQzJnF1b3Q7IHN0cmVhbTogYmFzZSBhZGRyZXNzLCBpbiBieXRlcy4iIGRp cmVjdGlvbj0iSW5wdXQiIG5hbWU9ImxtZW1fYWRkcmVzc19NZW1vcnlDb250cm9sbGVyUHJvMF9p bkFUMyIgdHlwZT0idWludDY0X3QiLz48c2NhbGFyIGRlc2M9IkxpbmVhciBMTWVtIGNvbnRyb2wg Zm9yICZxdW90O2luQVQzJnF1b3Q7IHN0cmVhbTogYXJyYXkgc2l6ZSwgaW4gYnl0ZXMuIiBkaXJl Y3Rpb249IklucHV0IiBuYW1lPSJsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2lu QVQzIiB0eXBlPSJ1aW50NjRfdCIvPjxzY2FsYXIgZGVzYz0iTGluZWFyIExNZW0gY29udHJvbCBm b3IgJnF1b3Q7aW5CVDImcXVvdDsgc3RyZWFtOiBiYXNlIGFkZHJlc3MsIGluIGJ5dGVzLiIgZGly ZWN0aW9uPSJJbnB1dCIgbmFtZT0ibG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2lu QlQyIiB0eXBlPSJ1aW50NjRfdCIvPjxzY2FsYXIgZGVzYz0iTGluZWFyIExNZW0gY29udHJvbCBm b3IgJnF1b3Q7aW5CVDImcXVvdDsgc3RyZWFtOiBhcnJheSBzaXplLCBpbiBieXRlcy4iIGRpcmVj dGlvbj0iSW5wdXQiIG5hbWU9ImxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5C VDIiIHR5cGU9InVpbnQ2NF90Ii8+PHNjYWxhciBkZXNjPSJMaW5lYXIgTE1lbSBjb250cm9sIGZv ciAmcXVvdDtpbkJUMyZxdW90OyBzdHJlYW06IGJhc2UgYWRkcmVzcywgaW4gYnl0ZXMuIiBkaXJl Y3Rpb249IklucHV0IiBuYW1lPSJsbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5C VDMiIHR5cGU9InVpbnQ2NF90Ii8+PHNjYWxhciBkZXNjPSJMaW5lYXIgTE1lbSBjb250cm9sIGZv ciAmcXVvdDtpbkJUMyZxdW90OyBzdHJlYW06IGFycmF5IHNpemUsIGluIGJ5dGVzLiIgZGlyZWN0 aW9uPSJJbnB1dCIgbmFtZT0ibG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9pbkJU MyIgdHlwZT0idWludDY0X3QiLz48c2NhbGFyIGRlc2M9IkxpbmVhciBMTWVtIGNvbnRyb2wgZm9y ICZxdW90O29EYXRhVDEmcXVvdDsgc3RyZWFtOiBiYXNlIGFkZHJlc3MsIGluIGJ5dGVzLiIgZGly ZWN0aW9uPSJJbnB1dCIgbmFtZT0ibG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX29E YXRhVDEiIHR5cGU9InVpbnQ2NF90Ii8+PHNjYWxhciBkZXNjPSJMaW5lYXIgTE1lbSBjb250cm9s IGZvciAmcXVvdDtvRGF0YVQxJnF1b3Q7IHN0cmVhbTogYXJyYXkgc2l6ZSwgaW4gYnl0ZXMuIiBk aXJlY3Rpb249IklucHV0IiBuYW1lPSJsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8w X29EYXRhVDEiIHR5cGU9InVpbnQ2NF90Ii8+PHNjYWxhciBkZXNjPSJMaW5lYXIgTE1lbSBjb250 cm9sIGZvciAmcXVvdDtvRGF0YVQyJnF1b3Q7IHN0cmVhbTogYmFzZSBhZGRyZXNzLCBpbiBieXRl cy4iIGRpcmVjdGlvbj0iSW5wdXQiIG5hbWU9ImxtZW1fYWRkcmVzc19NZW1vcnlDb250cm9sbGVy UHJvMF9vRGF0YVQyIiB0eXBlPSJ1aW50NjRfdCIvPjxzY2FsYXIgZGVzYz0iTGluZWFyIExNZW0g Y29udHJvbCBmb3IgJnF1b3Q7b0RhdGFUMiZxdW90OyBzdHJlYW06IGFycmF5IHNpemUsIGluIGJ5 dGVzLiIgZGlyZWN0aW9uPSJJbnB1dCIgbmFtZT0ibG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9s bGVyUHJvMF9vRGF0YVQyIiB0eXBlPSJ1aW50NjRfdCIvPjwvZnVuY3Rpb24+PC9lbmdpbmVtb2Rl PjwvbWF4ZmlsZT4= #endif /* SKIN_META_DATA */ #ifdef SLIC_B64_DEFINITIONS I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+ CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3RkbGli Lmg+CnN0YXRpYyBtYXhfZmlsZV90ICpzdG9yZWRfbWF4ZmlsZSA9IE5VTEw7CnN0YXRpYyBtYXhf ZW5naW5lX3QgKnN0b3JlZF9lbmdpbmUgPSBOVUxMOwpzdGF0aWMgY2hhciAqc3RvcmVkX2Vycm9y ID0gTlVMTDsKc3RhdGljIGludCBzdG9yZWRfaGFzX2Vycm9yID0gMDsKc3RhdGljIHB0aHJlYWRf b25jZV90IHNsaWNfYnNfaXNfaW5pdGlhbGlzZWQgPSBQVEhSRUFEX09OQ0VfSU5JVDsKCnN0YXRp YyB2b2lkIHNldF9lcnJvcihjb25zdCBjaGFyICplcnJvcl9zdHIpCnsKCXN0b3JlZF9oYXNfZXJy b3IgPSAxOyAKCWlmKHN0b3JlZF9lcnJvciA9PSBOVUxMKSB7CgkJc3RvcmVkX2Vycm9yID0gc3Ry ZHVwKGVycm9yX3N0cik7Cgl9IGVsc2UgewoJCWNoYXIgKm5lcnIgPSBtYWxsb2Moc3RybGVuKHN0 b3JlZF9lcnJvcikgKyBzdHJsZW4oZXJyb3Jfc3RyKSArIDIpOwoJCXNwcmludGYobmVyciwgIiVz XG4lcyIsIHN0b3JlZF9lcnJvciwgZXJyb3Jfc3RyKTsKCQlmcmVlKHN0b3JlZF9lcnJvcik7CgkJ c3RvcmVkX2Vycm9yID0gbmVycjsKCX0KfQpzdGF0aWMgdm9pZCBzZXRfZXJyb3JfYW5kX2ZyZWUo Y2hhciAqZXJyb3Jfc3RyKXsKCXNldF9lcnJvcihlcnJvcl9zdHIpOwoJZnJlZShlcnJvcl9zdHIp Owp9CmludCBTdHJlYW1GTUFfaGFzX2Vycm9ycyh2b2lkKQp7CXJldHVybiBzdG9yZWRfaGFzX2Vy cm9yOyB9CmNvbnN0IGNoYXIqIFN0cmVhbUZNQV9nZXRfZXJyb3JzKHZvaWQpCnsJcmV0dXJuIHN0 b3JlZF9lcnJvcjsgfQp2b2lkIFN0cmVhbUZNQV9jbGVhcl9lcnJvcnModm9pZCkKewoJZnJlZShz dG9yZWRfZXJyb3IpOwoJc3RvcmVkX2Vycm9yID0gTlVMTDsKCXN0b3JlZF9oYXNfZXJyb3IgPSAw Owp9CgpzdGF0aWMgY2hhciBTdHJlYW1GTUFfdXNlX3NpbXVsYXRpb25bMTZdOwpzdGF0aWMgdm9p ZCBTdHJlYW1GTUFfZGVmX3VzZV9zaW11bGF0aW9uKHZvaWQpCnsKCWxvbmcgcGlkID0gKChsb25n KSBnZXRwaWQoKSkgJSAxMDAwMDA7CglzbnByaW50ZihTdHJlYW1GTUFfdXNlX3NpbXVsYXRpb24s IDE2LCAiU3RyZWFtRk1fJTA1bGRfIiwgcGlkKTsKfQpzdGF0aWMgY29uc3QgY2hhciAqU3RyZWFt Rk1BX2NoZWNrX3VzZV9zaW11bGF0aW9uKHZvaWQpCnsKCVN0cmVhbUZNQV9kZWZfdXNlX3NpbXVs YXRpb24oKTsKCWNvbnN0IGNoYXIgKnVzZV9zaW0gPSBtYXhfY29uZmlnX2dldF9zdHJpbmcoTUFY X0NPTkZJR19VU0VfU0lNVUxBVElPTik7CglpZiAodXNlX3NpbSA9PSBOVUxMKSB7CgkJdXNlX3Np bSA9IFN0cmVhbUZNQV91c2Vfc2ltdWxhdGlvbjsKCQltYXhfY29uZmlnX3NldF9zdHJpbmcoTUFY X0NPTkZJR19VU0VfU0lNVUxBVElPTiwgdXNlX3NpbSk7Cgl9CglyZXR1cm4gdXNlX3NpbTsKfQoK c3RhdGljIGludCBTdHJlYW1GTUFfc2ltdWxhdGlvbl9sYXVuY2ggPSAwOwppbnQgU3RyZWFtRk1B X3NpbXVsYXRvcl9zdGFydCh2b2lkKQp7CglpbnQgcmV0dmFsID0gMDsKCWNvbnN0IGNoYXIgKnVz ZV9zaW0gPSBTdHJlYW1GTUFfY2hlY2tfdXNlX3NpbXVsYXRpb24oKTsKCWNoYXIgYnVmZlsxMDI0 XTsKCXNucHJpbnRmKGJ1ZmYsIDEwMjQsICJQQVRIPXNpbXV0aWxzOiRQQVRIIG1heGNvbXBpbGVy c2ltIC1kIDEgLW4gJXMgLWMgTUFYNUMgLVMgc2ltdXRpbHMgcmVzdGFydCIsIHVzZV9zaW0pOwoJ RklMRSAqcGlwZV9mcCA9IHBvcGVuKGJ1ZmYsICJyIik7CglpZiAocGlwZV9mcCA9PSBOVUxMKSB7 CgkJc3RybmNhdChidWZmLCAiIDogZmFpbGVkIHRvIGV4ZWN1dGUuIiwgKDEwMjQgLSBzdHJsZW4o YnVmZikpKTsKCQlzZXRfZXJyb3IoYnVmZik7CgkJcmV0dXJuIC0xOwoJfQoJd2hpbGUgKGZnZXRz KGJ1ZmYsIDEwMjQsIHBpcGVfZnApICE9IE5VTEwpIHsKCQkvKiBVbmNvbW1lbnQgdGhpcyB0byBn ZXQgc2ltdWxhdG9yIGNvbW1hbmQgb3V0cHV0ICovCgkJLyogZnByaW50ZihzdGRlcnIsIGJ1ZmYp OyAqLwoJCWlmIChzdHJzdHIoYnVmZiwgIkVycm9yIikpIHsKCQkJc2V0X2Vycm9yKGJ1ZmYpOwoJ CQlyZXR2YWwgPSAtMTsKCQl9Cgl9CglwY2xvc2UocGlwZV9mcCk7CglyZXR1cm4gcmV0dmFsOwp9 CgppbnQgU3RyZWFtRk1BX3NpbXVsYXRvcl9zdG9wKHZvaWQpCnsKCWNvbnN0IGNoYXIgKnVzZV9z aW0gPSBTdHJlYW1GTUFfY2hlY2tfdXNlX3NpbXVsYXRpb24oKTsKCWNoYXIgYnVmZlsxMDI0XTsK CXNucHJpbnRmKGJ1ZmYsIDEwMjQsICJQQVRIPXNpbXV0aWxzOiRQQVRIIG1heGNvbXBpbGVyc2lt IC1kIDEgLW4gJXMgLWMgTUFYNUMgLVMgc2ltdXRpbHMgc3RvcCIsIHVzZV9zaW0pOwoJRklMRSAq cGlwZV9mcCA9IHBvcGVuKGJ1ZmYsICJyIik7CglpZiAocGlwZV9mcCA9PSBOVUxMKSB7CgkJc3Ry bmNhdChidWZmLCAiIDogZmFpbGVkIHRvIGV4ZWN1dGUuIiwgKDEwMjQgLSBzdHJsZW4oYnVmZikp KTsKCQlzZXRfZXJyb3IoYnVmZik7CgkJcmV0dXJuIC0xOwoJfQoJd2hpbGUgKGZnZXRzKGJ1ZmYs IDEwMjQsIHBpcGVfZnApICE9IE5VTEwpIHsKCQkvKiBVbmNvbW1lbnQgdGhpcyB0byBnZXQgc2lt dWxhdG9yIGNvbW1hbmQgb3V0cHV0ICovCgkJLyogZnByaW50ZihzdGRlcnIsIGJ1ZmYpOyAqLwoJ CTsKCX0KCXBjbG9zZShwaXBlX2ZwKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9pZCBTdHJlYW1G TUFfc3RhdGljX2luaXQodm9pZCkgCnsKCXN0b3JlZF9tYXhmaWxlID0gU3RyZWFtRk1BX2luaXQo KTsKCWlmIChzdG9yZWRfbWF4ZmlsZSA9PSBOVUxMIHx8ICFtYXhfb2soc3RvcmVkX21heGZpbGUt PmVycm9ycykpIHsKCQlzdG9yZWRfbWF4ZmlsZSA9IE5VTEw7CgkJaWYobWF4X2NvbmZpZ19nZXRf Ym9vbChNQVhfQ09ORklHX1NUQVRJQ19JTlRFUkZBQ0VfQUJPUlRfT05fRVJST1IpKSBhYm9ydCgp OwoJCWVsc2UgeyBzZXRfZXJyb3IoIlVuYWJsZSB0byBsb2FkIG1heGZpbGUiKTsgcmV0dXJuOyB9 Cgl9CglpZighbWF4X29rKG1heF9nbG9iYWxfZXJyb3JzKCkpKSB7CgkJc2V0X2Vycm9yX2FuZF9m cmVlKG1heF9lcnJvcnNfdHJhY2UobWF4X2dsb2JhbF9lcnJvcnMoKSkpOwoJCXJldHVybjsKCX0K CWlmKCFtYXhfY29uZmlnX2dldF9ib29sKE1BWF9DT05GSUdfU1RBVElDX0lOVEVSRkFDRV9BQk9S VF9PTl9FUlJPUikpCgkJbWF4X2Vycm9yc19tb2RlKHN0b3JlZF9tYXhmaWxlLT5lcnJvcnMsIDAp OwoJdGltZV90IHRpbWVvdXRfcHJldmlvdXMgPSBtYXhfbG9hZF90aW1lb3V0KHN0b3JlZF9tYXhm aWxlLCAzMCk7Cgljb25zdCBjaGFyICp1c2Vfc2ltID0gU3RyZWFtRk1BX2NoZWNrX3VzZV9zaW11 bGF0aW9uKCk7CglpZiAobWF4X3BpbmdfZGFlbW9uKHN0b3JlZF9tYXhmaWxlLCB1c2Vfc2ltKSA9 PSAwKSB7CgkJaW50IHNpbV9zdGF0ID0gU3RyZWFtRk1BX3NpbXVsYXRvcl9zdGFydCgpOwoJCWlm ICgoc2ltX3N0YXQgPT0gMCkgJiYgKG1heF9waW5nX2RhZW1vbihzdG9yZWRfbWF4ZmlsZSwgdXNl X3NpbSkgPT0gMSkpIHsKCQkJU3RyZWFtRk1BX3NpbXVsYXRpb25fbGF1bmNoID0gMTsKCQl9IGVs c2UgewoJCQlzZXRfZXJyb3IoIkVycm9yOiBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcg dG8gc3RhcnQgdGhlIHNpbXVsYXRpb24gaW5mcmFzdHJ1Y3R1cmUgYXV0b21hdGljYWxseS4iKTsK CQkJc2V0X2Vycm9yKCJFcnJvcjogQ2hlY2sgdGhhdCAndXNlX3NpbXVsYXRpb249PHNpbXVsYXRv cl9uYW1lPicgaXMgc2V0IGNvcnJlY3RseSBpbiB5b3VyIFNMaUMgY29uZmlndXJhdGlvbiIpOwoJ CQlzZXRfZXJyb3IoIkVycm9yOiBhbmQgdGhhdCB0aGUgYXNzb2NpYXRlZCBzaW11bGF0ZWQgc3lz dGVtIGRhZW1vbiBpcyBydW5uaW5nLiIpOwoJCQltYXhfZmlsZV9mcmVlKHN0b3JlZF9tYXhmaWxl KTsKCQkJc3RvcmVkX21heGZpbGUgPSBOVUxMOwoJCQlyZXR1cm47CgkJfQoJfQoJc3RvcmVkX2Vu Z2luZSA9IG1heF9sb2FkKHN0b3JlZF9tYXhmaWxlLCAiKiIpOwoJaWYgKCFtYXhfb2soc3RvcmVk X21heGZpbGUtPmVycm9ycykpIHsKCQlpZihtYXhfY29uZmlnX2dldF9ib29sKE1BWF9DT05GSUdf U1RBVElDX0lOVEVSRkFDRV9BQk9SVF9PTl9FUlJPUikpIHsKCQkJZnByaW50ZihzdGRlcnIsICJc blVuYWJsZSB0byBsb2FkIGVuZ2luZTogYWJvcnRpbmcgbm93LlxuXG4iKTsKCQkJZmZsdXNoKHN0 ZGVycik7CgkJCWFib3J0KCk7CgkJfSBlbHNlIHsKCQkJc2V0X2Vycm9yX2FuZF9mcmVlKG1heF9l cnJvcnNfdHJhY2Uoc3RvcmVkX21heGZpbGUtPmVycm9ycykpOwoJCQltYXhfZmlsZV9mcmVlKHN0 b3JlZF9tYXhmaWxlKTsKCQkJc3RvcmVkX21heGZpbGUgPSBOVUxMOwoJCQlyZXR1cm47CgkJfSAK CX0gCgltYXhfbG9hZF90aW1lb3V0KHN0b3JlZF9tYXhmaWxlLCB0aW1lb3V0X3ByZXZpb3VzKTsK fQp2b2lkIFN0cmVhbUZNQV9mcmVlKHZvaWQpCnsKCWlmIChzdG9yZWRfZW5naW5lICE9IE5VTEwp IHsKCQltYXhfdW5sb2FkKHN0b3JlZF9lbmdpbmUpOwoJCXN0b3JlZF9lbmdpbmUgPSBOVUxMOwoJ fQoJaWYgKHN0b3JlZF9tYXhmaWxlICE9IE5VTEwpIHsKCQltYXhfZmlsZV9mcmVlKHN0b3JlZF9t YXhmaWxlKTsKCQlzdG9yZWRfbWF4ZmlsZSA9IE5VTEw7Cgl9CglpZiAoc3RvcmVkX2Vycm9yICE9 IE5VTEwpIHsKCQlmcmVlKHN0b3JlZF9lcnJvcik7CgkJc3RvcmVkX2Vycm9yID0gTlVMTDsKCX0K CWlmIChTdHJlYW1GTUFfc2ltdWxhdGlvbl9sYXVuY2ggPT0gMSkgewoJCWludCBzaW1fc3RhdCA9 IFN0cmVhbUZNQV9zaW11bGF0b3Jfc3RvcCgpOwoJCWlmIChzaW1fc3RhdCAhPSAwICkgewoJCQlm cHJpbnRmKHN0ZGVyciwgIkVycm9yIHN0b3BwaW5nIHNpbXVsYXRvci4iKTsKCQl9CgkJU3RyZWFt Rk1BX3NpbXVsYXRpb25fbGF1bmNoID0gMDsKCX0KfQoKc3RhdGljIGludCBTdHJlYW1GTUFfZ2V0 X3BjaWVfYWxpZ25tZW50KHZvaWQpCnsKI2lmZGVmIFN0cmVhbUZNQV9QQ0lFX0FMSUdOTUVOVAoJ cmV0dXJuICgoU3RyZWFtRk1BX1BDSUVfQUxJR05NRU5UIDwgMSkgPyAxNiA6IFN0cmVhbUZNQV9Q Q0lFX0FMSUdOTUVOVCk7CiNlbHNlCglyZXR1cm4gMTY7CiNlbmRpZgp9CgpzdGF0aWMgaW50IFN0 cmVhbUZNQV9jaGVja19hbGlnbmVkKGNvbnN0IHZvaWQgKmRhdGEpCnsKCXVpbnRwdHJfdCBwb2lu dGVyID0gKHVpbnRwdHJfdCkgZGF0YTsKCWludCBhbGlnbm1lbnQgPSBTdHJlYW1GTUFfZ2V0X3Bj aWVfYWxpZ25tZW50KCk7CglyZXR1cm4gKHBvaW50ZXIgJSBhbGlnbm1lbnQpID8gMSA6IDA7Cn0K CnN0YXRpYyB2b2lkICpTdHJlYW1GTUFfbWFsbG9jX2FsaWduZWQoY29uc3Qgc2l6ZV90IHNpemUp CnsKCXZvaWQgKnB0cjsKCWludCBhbGlnbm1lbnQgPSBTdHJlYW1GTUFfZ2V0X3BjaWVfYWxpZ25t ZW50KCk7Cglwb3NpeF9tZW1hbGlnbigmcHRyLCBhbGlnbm1lbnQsIHNpemUpOwoJcmV0dXJuIHB0 cjsKfQoKCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gSW50ZXJmYWNlIGRlZmF1bHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwov Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKCgojZGVmaW5lIENIRUNLX0VSUk9SU19TVChTVCwgUkVU KSBpZighbWF4X29rKFNULT5lcnJvcnMpKSB7IGlmKG1heF9jb25maWdfZ2V0X2Jvb2woTUFYX0NP TkZJR19TVEFUSUNfSU5URVJGQUNFX0FCT1JUX09OX0VSUk9SKSkgeyBmcHJpbnRmKHN0ZGVyciwg IiVzXG4iLCBtYXhfZXJyb3JzX3RyYWNlKFNULT5lcnJvcnMpKTsgYWJvcnQoKTsgfSBzZXRfZXJy b3JfYW5kX2ZyZWUobWF4X2Vycm9yc190cmFjZShTVC0+ZXJyb3JzKSk7IHJldHVybiBSRVQ7IH0g CiNkZWZpbmUgQ0hFQ0tfTlVMTChWQUxVRSwgTUVTU0FHRSwgUkVUKSBpZihWQUxVRSA9PSBOVUxM KSB7IGlmIChtYXhfY29uZmlnX2dldF9ib29sKE1BWF9DT05GSUdfU1RBVElDX0lOVEVSRkFDRV9B Qk9SVF9PTl9FUlJPUikpIHsgZnByaW50ZihzdGRlcnIsICIlc1xuJXNcbiIsIChzdG9yZWRfZXJy b3IgPT0gTlVMTCkgPyAiIiA6IHN0b3JlZF9lcnJvciwgTUVTU0FHRSk7IGFib3J0KCk7IH0gc2V0 X2Vycm9yKE1FU1NBR0UpOyByZXR1cm4gUkVUOyB9CgogCnR5cGVkZWYgc3RydWN0IFN0cmVhbUZN QV9jYWxsYmFja19zdHJlYW0gewoJdWludDhfdCAqdXNlcl9wdHI7Cgl1aW50OF90ICphbGlnbmVk X3B0cjsKCXNpemVfdCAgIHNpemU7CglpbnQgICAgICBpc19vdXRwdXQ7Cn0gU3RyZWFtRk1BX2Nh bGxiYWNrX3N0cmVhbV90OwoKdHlwZWRlZiBzdHJ1Y3QgU3RyZWFtRk1BX2NhbGxiYWNrX2RhdGEg ewoJU3RyZWFtRk1BX2NhbGxiYWNrX3N0cmVhbV90IHN0cmVhbVszXTsgCglpbnQgY291bnQ7Cglp bnQgbWF4X2NvdW50Owp9IFN0cmVhbUZNQV9jYWxsYmFja19kYXRhX3Q7CgpzdGF0aWMgdm9pZCBT dHJlYW1GTUFfY2FsbGJhY2tfaW50ZXJuYWwodm9pZCAqY2JfZGF0YSkKewoJU3RyZWFtRk1BX2Nh bGxiYWNrX2RhdGFfdCAqZGF0YSA9IChTdHJlYW1GTUFfY2FsbGJhY2tfZGF0YV90KikgY2JfZGF0 YTsKCWZvciAoaW50IGkgPSAwIDsgaSA8IGRhdGEtPmNvdW50IDsgaSsrICkgewoJCVN0cmVhbUZN QV9jYWxsYmFja19zdHJlYW1fdCAqcyA9ICZkYXRhLT5zdHJlYW1baV07CgkJaWYgKHMtPmlzX291 dHB1dCAmJiAocy0+c2l6ZSA+IDApKSB7CgkJCW1lbWNweShzLT51c2VyX3B0ciwgcy0+YWxpZ25l ZF9wdHIsIHMtPnNpemUpOwoJCX0KCQlmcmVlKHMtPmFsaWduZWRfcHRyKTsKCX0KCWZyZWUoZGF0 YSk7Cn0KCnN0YXRpYyBtYXhfYWN0aW9uc190KiBTdHJlYW1GTUFfY29udmVydF9pbnRlcm5hbCgK CW1heF9maWxlX3QgKm1heGZpbGUsCglTdHJlYW1GTUFfYWN0aW9uc190ICppbnRlcmZhY2VfYWN0 aW9ucywKCWludCAgaXNfaW50ZXJuYWxfY2FsbCwKCXZvaWQgKCoqY2FsbGJhY2tfZnVuYykodm9p ZCopLAoJdm9pZCAqKmNhbGxiYWNrX2RhdGEpCnsKCW1heF9hY3Rpb25zX3QgKmFjdGlvbnMgPSBt YXhfYWN0aW9uc19pbml0KG1heGZpbGUsIE5VTEwpOwoJaWYoYWN0aW9ucyA9PSBOVUxMKSByZXR1 cm4gTlVMTDsKCiNkZWZpbmUgQ0hFQ0tfRVJST1JTIGlmKCFtYXhfb2soYWN0aW9ucy0+ZXJyb3Jz KSkgeyBzZXRfZXJyb3JfYW5kX2ZyZWUobWF4X2Vycm9yc190cmFjZShhY3Rpb25zLT5lcnJvcnMp KTsgcmV0dXJuIE5VTEw7IH0gCgoJU3RyZWFtRk1BX2NhbGxiYWNrX2RhdGFfdCAqY2JfZGF0YSA9 IE5VTEw7CglpbnQgdXNlX2NhbGxiYWNrID0gKGNhbGxiYWNrX2Z1bmMgIT0gTlVMTCkgJiYgKGNh bGxiYWNrX2RhdGEgIT0gTlVMTCk7CglpZiAodXNlX2NhbGxiYWNrKSB7CgkJY2JfZGF0YSA9IG1h bGxvYyhzaXplb2YoU3RyZWFtRk1BX2NhbGxiYWNrX2RhdGFfdCkpOwoJCWlmIChjYl9kYXRhID09 IE5VTEwpIHsKCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZv ciBzdHJlYW0gY2FsbGJhY2sgZGF0YSBpbiBmdW5jdGlvbiBTdHJlYW1GTUFfY29udmVydF9pbnRl cm5hbFxuIik7CgkJCXJldHVybiBOVUxMOwoJCX0KCQljYl9kYXRhLT5tYXhfY291bnQgPSAzOwoJ CWNiX2RhdGEtPmNvdW50ICAgICA9IDA7CgkJKmNhbGxiYWNrX2RhdGEgICAgID0gY2JfZGF0YTsK CQkqY2FsbGJhY2tfZnVuYyAgICAgPSAmU3RyZWFtRk1BX2NhbGxiYWNrX2ludGVybmFsOwoJfQoK CS8qIGNvZGUgZm9yIHNjYWxhciBTdHJlYW1GTUFLZXJuZWwucnVuX2N5Y2xlX2NvdW50ICovCgl1 aW50NjRfdCB0aWNrc19TdHJlYW1GTUFLZXJuZWwgPSBpbnRlcmZhY2VfYWN0aW9ucy0+dGlja3Nf U3RyZWFtRk1BS2VybmVsOwoJbWF4X3NldF90aWNrcyhhY3Rpb25zLCAiU3RyZWFtRk1BS2VybmVs IiwgdGlja3NfU3RyZWFtRk1BS2VybmVsKTsKCUNIRUNLX0VSUk9SUzsKCS8qIGVuZCBvZiBjb2Rl IGZvciBzY2FsYXIgU3RyZWFtRk1BS2VybmVsLnJ1bl9jeWNsZV9jb3VudCovCgkKCS8qIGNvZGUg Zm9yIHN0cmVhbSBpbkFUMSAqLwoJc2l6ZV90IGluc3RyZWFtX3NpemVfaW5BVDEgPSBpbnRlcmZh Y2VfYWN0aW9ucy0+aW5zdHJlYW1fc2l6ZV9pbkFUMTsKCWlmIChpbnN0cmVhbV9zaXplX2luQVQx ID4gMCkgewoJCWNvbnN0IHZvaWQgKnN0cmVhbV9wdHIgPSBpbnRlcmZhY2VfYWN0aW9ucy0+aW5z dHJlYW1faW5BVDE7CgkJaWYgKHVzZV9jYWxsYmFjayAmJiAoMSA9PSBTdHJlYW1GTUFfY2hlY2tf YWxpZ25lZChpbnRlcmZhY2VfYWN0aW9ucy0+aW5zdHJlYW1faW5BVDEpKSkgewoJCQl2b2lkICph bGlnbmVkX2luc3RyZWFtX2luQVQxID0gbWFsbG9jKGluc3RyZWFtX3NpemVfaW5BVDEpOwoJCQlp ZiAoYWxpZ25lZF9pbnN0cmVhbV9pbkFUMSA9PSBOVUxMKSB7CgkJCQltYXhfcmVwb3J0X2Vycm9y X3NsaWMoYWN0aW9ucy0+ZXJyb3JzLCBfX0ZJTEVfXywgX19MSU5FX18sIDUyNiwgIkZhaWxlZCB0 byBhbGxvY2F0ZSBhbGlnbmVkIG1lbW9yeSBmb3Igc3RyZWFtICdpbkFUMSciKTsKCQkJCUNIRUNL X0VSUk9SUzsKCQkJfQoJCQkoJmNiX2RhdGEtPnN0cmVhbVtjYl9kYXRhLT5jb3VudF0pLT51c2Vy X3B0ciAgICA9ICh1aW50OF90KikgaW50ZXJmYWNlX2FjdGlvbnMtPmluc3RyZWFtX2luQVQxOwoJ CQkoJmNiX2RhdGEtPnN0cmVhbVtjYl9kYXRhLT5jb3VudF0pLT5hbGlnbmVkX3B0ciA9ICh1aW50 OF90KikgYWxpZ25lZF9pbnN0cmVhbV9pbkFUMTsKCQkJKCZjYl9kYXRhLT5zdHJlYW1bY2JfZGF0 YS0+Y291bnRdKS0+c2l6ZSAgICAgICAgPSBpbnN0cmVhbV9zaXplX2luQVQxOwoJCQkoJmNiX2Rh dGEtPnN0cmVhbVtjYl9kYXRhLT5jb3VudF0pLT5pc19vdXRwdXQgICA9IDA7CgkJCWNiX2RhdGEt PmNvdW50ICs9IDE7CgkJCW1lbWNweShhbGlnbmVkX2luc3RyZWFtX2luQVQxLCBpbnRlcmZhY2Vf YWN0aW9ucy0+aW5zdHJlYW1faW5BVDEsIGluc3RyZWFtX3NpemVfaW5BVDEpOwoJCQlzdHJlYW1f cHRyID0gYWxpZ25lZF9pbnN0cmVhbV9pbkFUMTsKCQl9CgkJbWF4X3F1ZXVlX2lucHV0KGFjdGlv bnMsICJpbkFUMSIsIHN0cmVhbV9wdHIsIGluc3RyZWFtX3NpemVfaW5BVDEpOwoJCUNIRUNLX0VS Uk9SUzsKCX0KCS8qIGVuZCBvZiBjb2RlIGZvciBzdHJlYW0gaW5BVDEgKi8KCQoJLyogY29kZSBm b3Igc3RyZWFtIGluQlQxICovCglzaXplX3QgaW5zdHJlYW1fc2l6ZV9pbkJUMSA9IGludGVyZmFj ZV9hY3Rpb25zLT5pbnN0cmVhbV9zaXplX2luQlQxOwoJaWYgKGluc3RyZWFtX3NpemVfaW5CVDEg PiAwKSB7CgkJY29uc3Qgdm9pZCAqc3RyZWFtX3B0ciA9IGludGVyZmFjZV9hY3Rpb25zLT5pbnN0 cmVhbV9pbkJUMTsKCQlpZiAodXNlX2NhbGxiYWNrICYmICgxID09IFN0cmVhbUZNQV9jaGVja19h bGlnbmVkKGludGVyZmFjZV9hY3Rpb25zLT5pbnN0cmVhbV9pbkJUMSkpKSB7CgkJCXZvaWQgKmFs aWduZWRfaW5zdHJlYW1faW5CVDEgPSBtYWxsb2MoaW5zdHJlYW1fc2l6ZV9pbkJUMSk7CgkJCWlm IChhbGlnbmVkX2luc3RyZWFtX2luQlQxID09IE5VTEwpIHsKCQkJCW1heF9yZXBvcnRfZXJyb3Jf c2xpYyhhY3Rpb25zLT5lcnJvcnMsIF9fRklMRV9fLCBfX0xJTkVfXywgNTI2LCAiRmFpbGVkIHRv IGFsbG9jYXRlIGFsaWduZWQgbWVtb3J5IGZvciBzdHJlYW0gJ2luQlQxJyIpOwoJCQkJQ0hFQ0tf RVJST1JTOwoJCQl9CgkJCSgmY2JfZGF0YS0+c3RyZWFtW2NiX2RhdGEtPmNvdW50XSktPnVzZXJf cHRyICAgID0gKHVpbnQ4X3QqKSBpbnRlcmZhY2VfYWN0aW9ucy0+aW5zdHJlYW1faW5CVDE7CgkJ CSgmY2JfZGF0YS0+c3RyZWFtW2NiX2RhdGEtPmNvdW50XSktPmFsaWduZWRfcHRyID0gKHVpbnQ4 X3QqKSBhbGlnbmVkX2luc3RyZWFtX2luQlQxOwoJCQkoJmNiX2RhdGEtPnN0cmVhbVtjYl9kYXRh LT5jb3VudF0pLT5zaXplICAgICAgICA9IGluc3RyZWFtX3NpemVfaW5CVDE7CgkJCSgmY2JfZGF0 YS0+c3RyZWFtW2NiX2RhdGEtPmNvdW50XSktPmlzX291dHB1dCAgID0gMDsKCQkJY2JfZGF0YS0+ Y291bnQgKz0gMTsKCQkJbWVtY3B5KGFsaWduZWRfaW5zdHJlYW1faW5CVDEsIGludGVyZmFjZV9h Y3Rpb25zLT5pbnN0cmVhbV9pbkJUMSwgaW5zdHJlYW1fc2l6ZV9pbkJUMSk7CgkJCXN0cmVhbV9w dHIgPSBhbGlnbmVkX2luc3RyZWFtX2luQlQxOwoJCX0KCQltYXhfcXVldWVfaW5wdXQoYWN0aW9u cywgImluQlQxIiwgc3RyZWFtX3B0ciwgaW5zdHJlYW1fc2l6ZV9pbkJUMSk7CgkJQ0hFQ0tfRVJS T1JTOwoJfQoJLyogZW5kIG9mIGNvZGUgZm9yIHN0cmVhbSBpbkJUMSAqLwoJCgkvKiBjb2RlIGZv ciBzdHJlYW0gb0RhdGFUMyAqLwoJc2l6ZV90IG91dHN0cmVhbV9zaXplX29EYXRhVDMgPSBpbnRl cmZhY2VfYWN0aW9ucy0+b3V0c3RyZWFtX3NpemVfb0RhdGFUMzsKCWlmIChvdXRzdHJlYW1fc2l6 ZV9vRGF0YVQzID4gMCkgewoJCXZvaWQgKnN0cmVhbV9wdHIgPSBpbnRlcmZhY2VfYWN0aW9ucy0+ b3V0c3RyZWFtX29EYXRhVDM7CgkJaWYgKHVzZV9jYWxsYmFjayAmJiAoMSA9PSBTdHJlYW1GTUFf Y2hlY2tfYWxpZ25lZChpbnRlcmZhY2VfYWN0aW9ucy0+b3V0c3RyZWFtX29EYXRhVDMpKSkgewoJ CQl2b2lkICphbGlnbmVkX291dHN0cmVhbV9vRGF0YVQzID0gbWFsbG9jKG91dHN0cmVhbV9zaXpl X29EYXRhVDMpOwoJCQlpZiAoYWxpZ25lZF9vdXRzdHJlYW1fb0RhdGFUMyA9PSBOVUxMKSB7CgkJ CQltYXhfcmVwb3J0X2Vycm9yX3NsaWMoYWN0aW9ucy0+ZXJyb3JzLCBfX0ZJTEVfXywgX19MSU5F X18sIDUyNiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBhbGlnbmVkIG1lbW9yeSBmb3Igc3RyZWFtICdv RGF0YVQzJyIpOwoJCQkJQ0hFQ0tfRVJST1JTOwoJCQl9CgkJCSgmY2JfZGF0YS0+c3RyZWFtW2Ni X2RhdGEtPmNvdW50XSktPnVzZXJfcHRyICAgID0gKHVpbnQ4X3QqKSBpbnRlcmZhY2VfYWN0aW9u cy0+b3V0c3RyZWFtX29EYXRhVDM7CgkJCSgmY2JfZGF0YS0+c3RyZWFtW2NiX2RhdGEtPmNvdW50 XSktPmFsaWduZWRfcHRyID0gKHVpbnQ4X3QqKSBhbGlnbmVkX291dHN0cmVhbV9vRGF0YVQzOwoJ CQkoJmNiX2RhdGEtPnN0cmVhbVtjYl9kYXRhLT5jb3VudF0pLT5zaXplICAgICAgICA9IG91dHN0 cmVhbV9zaXplX29EYXRhVDM7CgkJCSgmY2JfZGF0YS0+c3RyZWFtW2NiX2RhdGEtPmNvdW50XSkt PmlzX291dHB1dCAgID0gMTsKCQkJY2JfZGF0YS0+Y291bnQgKz0gMTsKCQkJc3RyZWFtX3B0ciA9 IGFsaWduZWRfb3V0c3RyZWFtX29EYXRhVDM7CgkJfQoJCW1heF9xdWV1ZV9vdXRwdXQoYWN0aW9u cywgIm9EYXRhVDMiLCBzdHJlYW1fcHRyLCBvdXRzdHJlYW1fc2l6ZV9vRGF0YVQzKTsKCQlDSEVD S19FUlJPUlM7Cgl9CgkvKiBlbmQgb2YgY29kZSBmb3Igc3RyZWFtIG9EYXRhVDMgKi8KCQoJLyog Y29kZSBmb3IgbGluZWFyIG1lbW9yeS1zdHJlYW0gImluQVQyIiBpbiBtZW1vcnktY29udHJvbGxl ciAiTWVtb3J5Q29udHJvbGxlclBybzAiICovCglzaXplX3QgbG1lbV9hZGRyZXNzX01lbW9yeUNv bnRyb2xsZXJQcm8wX2luQVQyID0gaW50ZXJmYWNlX2FjdGlvbnMtPmxtZW1fYWRkcmVzc19NZW1v cnlDb250cm9sbGVyUHJvMF9pbkFUMjsKCXNpemVfdCBsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRy b2xsZXJQcm8wX2luQVQyID0gaW50ZXJmYWNlX2FjdGlvbnMtPmxtZW1fYXJyX3NpemVfTWVtb3J5 Q29udHJvbGxlclBybzBfaW5BVDI7CglpbnQgbG1lbV9idXJzdF9zaXplX01lbW9yeUNvbnRyb2xs ZXJQcm8wX2luQVQyID0gbWF4X2dldF9idXJzdF9zaXplKG1heGZpbGUsICJNZW1vcnlDb250cm9s bGVyUHJvMCIpOwoJaWYgKCAobG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQy ICUgbG1lbV9idXJzdF9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQyKSAhPSAwICkgewoJ CWZwcmludGYoc3Rkb3V0LCAiXG5TTGlDIEVycm9yOiAlczolZCA6IExNZW0gaW5BVDIgcGFyYW1l dGVyICdsbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDInIGlzIHNldCB0byAl emQgYnl0ZXM7IGl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlZCBieXRlc1xuIiwgX19GSUxFX18s IF9fTElORV9fLCBsbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDIsIGxtZW1f YnVyc3Rfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9pbkFUMiApOwoJfQoJaWYgKCAobG1lbV9h cnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9pbkFUMiAlIGxtZW1fYnVyc3Rfc2l6ZV9NZW1v cnlDb250cm9sbGVyUHJvMF9pbkFUMikgIT0gMCApIHsKCQlmcHJpbnRmKHN0ZG91dCwgIlxuU0xp QyBFcnJvcjogJXM6JWQgOiBMTWVtIGluQVQyIHBhcmFtZXRlciAnbG1lbV9hcnJfc2l6ZV9NZW1v cnlDb250cm9sbGVyUHJvMF9pbkFUMicgaXMgc2V0IHRvICV6ZCBieXRlczsgaXQgbXVzdCBiZSBh IG11bHRpcGxlIG9mICVkIGJ5dGVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIGxtZW1fYXJyX3Np emVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDIsIGxtZW1fYnVyc3Rfc2l6ZV9NZW1vcnlDb250 cm9sbGVyUHJvMF9pbkFUMiApOwoJfQoJaWYgKGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxl clBybzBfaW5BVDIgPiAwKSB7CgkJbWF4X21lbWN0bF9saW5lYXIoYWN0aW9ucywgIk1lbW9yeUNv bnRyb2xsZXJQcm8wIiwgImluQVQyIiwgbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8w X2luQVQyLCBsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQyKTsKCX0gZWxz ZSB7CgkJbWF4X2lnbm9yZV9tZW1jdGwoYWN0aW9ucywgIk1lbW9yeUNvbnRyb2xsZXJQcm8wIiwg ImluQVQyIik7Cgl9CglDSEVDS19FUlJPUlM7CgkvKiBlbmQgb2YgY29kZSBmb3IgbGluZWFyIG1l bW9yeS1zdHJlYW0gImluQVQyIiBpbiBtZW1vcnktY29udHJvbGxlciAiTWVtb3J5Q29udHJvbGxl clBybzAiICovCgkKCS8qIGNvZGUgZm9yIGxpbmVhciBtZW1vcnktc3RyZWFtICJpbkFUMyIgaW4g bWVtb3J5LWNvbnRyb2xsZXIgIk1lbW9yeUNvbnRyb2xsZXJQcm8wIiAqLwoJc2l6ZV90IGxtZW1f YWRkcmVzc19NZW1vcnlDb250cm9sbGVyUHJvMF9pbkFUMyA9IGludGVyZmFjZV9hY3Rpb25zLT5s bWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDM7CglzaXplX3QgbG1lbV9hcnJf c2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9pbkFUMyA9IGludGVyZmFjZV9hY3Rpb25zLT5sbWVt X2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQzOwoJaW50IGxtZW1fYnVyc3Rfc2l6 ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9pbkFUMyA9IG1heF9nZXRfYnVyc3Rfc2l6ZShtYXhmaWxl LCAiTWVtb3J5Q29udHJvbGxlclBybzAiKTsKCWlmICggKGxtZW1fYWRkcmVzc19NZW1vcnlDb250 cm9sbGVyUHJvMF9pbkFUMyAlIGxtZW1fYnVyc3Rfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9p bkFUMykgIT0gMCApIHsKCQlmcHJpbnRmKHN0ZG91dCwgIlxuU0xpQyBFcnJvcjogJXM6JWQgOiBM TWVtIGluQVQzIHBhcmFtZXRlciAnbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2lu QVQzJyBpcyBzZXQgdG8gJXpkIGJ5dGVzOyBpdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJWQgYnl0 ZXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQ cm8wX2luQVQzLCBsbWVtX2J1cnN0X3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDMgKTsK CX0KCWlmICggKGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDMgJSBsbWVt X2J1cnN0X3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDMpICE9IDAgKSB7CgkJZnByaW50 ZihzdGRvdXQsICJcblNMaUMgRXJyb3I6ICVzOiVkIDogTE1lbSBpbkFUMyBwYXJhbWV0ZXIgJ2xt ZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDMnIGlzIHNldCB0byAlemQgYnl0 ZXM7IGl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlZCBieXRlc1xuIiwgX19GSUxFX18sIF9fTElO RV9fLCBsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQzLCBsbWVtX2J1cnN0 X3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDMgKTsKCX0KCWlmIChsbWVtX2Fycl9zaXpl X01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQzID4gMCkgewoJCW1heF9tZW1jdGxfbGluZWFyKGFj dGlvbnMsICJNZW1vcnlDb250cm9sbGVyUHJvMCIsICJpbkFUMyIsIGxtZW1fYWRkcmVzc19NZW1v cnlDb250cm9sbGVyUHJvMF9pbkFUMywgbG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJv MF9pbkFUMyk7Cgl9IGVsc2UgewoJCW1heF9pZ25vcmVfbWVtY3RsKGFjdGlvbnMsICJNZW1vcnlD b250cm9sbGVyUHJvMCIsICJpbkFUMyIpOwoJfQoJQ0hFQ0tfRVJST1JTOwoJLyogZW5kIG9mIGNv ZGUgZm9yIGxpbmVhciBtZW1vcnktc3RyZWFtICJpbkFUMyIgaW4gbWVtb3J5LWNvbnRyb2xsZXIg Ik1lbW9yeUNvbnRyb2xsZXJQcm8wIiAqLwoJCgkvKiBjb2RlIGZvciBsaW5lYXIgbWVtb3J5LXN0 cmVhbSAiaW5CVDIiIGluIG1lbW9yeS1jb250cm9sbGVyICJNZW1vcnlDb250cm9sbGVyUHJvMCIg Ki8KCXNpemVfdCBsbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5CVDIgPSBpbnRl cmZhY2VfYWN0aW9ucy0+bG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQyOwoJ c2l6ZV90IGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5CVDIgPSBpbnRlcmZh Y2VfYWN0aW9ucy0+bG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9pbkJUMjsKCWlu dCBsbWVtX2J1cnN0X3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5CVDIgPSBtYXhfZ2V0X2J1 cnN0X3NpemUobWF4ZmlsZSwgIk1lbW9yeUNvbnRyb2xsZXJQcm8wIik7CglpZiAoIChsbWVtX2Fk ZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5CVDIgJSBsbWVtX2J1cnN0X3NpemVfTWVtb3J5 Q29udHJvbGxlclBybzBfaW5CVDIpICE9IDAgKSB7CgkJZnByaW50ZihzdGRvdXQsICJcblNMaUMg RXJyb3I6ICVzOiVkIDogTE1lbSBpbkJUMiBwYXJhbWV0ZXIgJ2xtZW1fYWRkcmVzc19NZW1vcnlD b250cm9sbGVyUHJvMF9pbkJUMicgaXMgc2V0IHRvICV6ZCBieXRlczsgaXQgbXVzdCBiZSBhIG11 bHRpcGxlIG9mICVkIGJ5dGVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIGxtZW1fYWRkcmVzc19N ZW1vcnlDb250cm9sbGVyUHJvMF9pbkJUMiwgbG1lbV9idXJzdF9zaXplX01lbW9yeUNvbnRyb2xs ZXJQcm8wX2luQlQyICk7Cgl9CglpZiAoIChsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQ cm8wX2luQlQyICUgbG1lbV9idXJzdF9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQyKSAh PSAwICkgewoJCWZwcmludGYoc3Rkb3V0LCAiXG5TTGlDIEVycm9yOiAlczolZCA6IExNZW0gaW5C VDIgcGFyYW1ldGVyICdsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQyJyBp cyBzZXQgdG8gJXpkIGJ5dGVzOyBpdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJWQgYnl0ZXNcbiIs IF9fRklMRV9fLCBfX0xJTkVfXywgbG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9p bkJUMiwgbG1lbV9idXJzdF9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQyICk7Cgl9Cglp ZiAobG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9pbkJUMiA+IDApIHsKCQltYXhf bWVtY3RsX2xpbmVhcihhY3Rpb25zLCAiTWVtb3J5Q29udHJvbGxlclBybzAiLCAiaW5CVDIiLCBs bWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5CVDIsIGxtZW1fYXJyX3NpemVfTWVt b3J5Q29udHJvbGxlclBybzBfaW5CVDIpOwoJfSBlbHNlIHsKCQltYXhfaWdub3JlX21lbWN0bChh Y3Rpb25zLCAiTWVtb3J5Q29udHJvbGxlclBybzAiLCAiaW5CVDIiKTsKCX0KCUNIRUNLX0VSUk9S UzsKCS8qIGVuZCBvZiBjb2RlIGZvciBsaW5lYXIgbWVtb3J5LXN0cmVhbSAiaW5CVDIiIGluIG1l bW9yeS1jb250cm9sbGVyICJNZW1vcnlDb250cm9sbGVyUHJvMCIgKi8KCQoJLyogY29kZSBmb3Ig bGluZWFyIG1lbW9yeS1zdHJlYW0gImluQlQzIiBpbiBtZW1vcnktY29udHJvbGxlciAiTWVtb3J5 Q29udHJvbGxlclBybzAiICovCglzaXplX3QgbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQ cm8wX2luQlQzID0gaW50ZXJmYWNlX2FjdGlvbnMtPmxtZW1fYWRkcmVzc19NZW1vcnlDb250cm9s bGVyUHJvMF9pbkJUMzsKCXNpemVfdCBsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8w X2luQlQzID0gaW50ZXJmYWNlX2FjdGlvbnMtPmxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxl clBybzBfaW5CVDM7CglpbnQgbG1lbV9idXJzdF9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2lu QlQzID0gbWF4X2dldF9idXJzdF9zaXplKG1heGZpbGUsICJNZW1vcnlDb250cm9sbGVyUHJvMCIp OwoJaWYgKCAobG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQzICUgbG1lbV9i dXJzdF9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQzKSAhPSAwICkgewoJCWZwcmludGYo c3Rkb3V0LCAiXG5TTGlDIEVycm9yOiAlczolZCA6IExNZW0gaW5CVDMgcGFyYW1ldGVyICdsbWVt X2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5CVDMnIGlzIHNldCB0byAlemQgYnl0ZXM7 IGl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAlZCBieXRlc1xuIiwgX19GSUxFX18sIF9fTElORV9f LCBsbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5CVDMsIGxtZW1fYnVyc3Rfc2l6 ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9pbkJUMyApOwoJfQoJaWYgKCAobG1lbV9hcnJfc2l6ZV9N ZW1vcnlDb250cm9sbGVyUHJvMF9pbkJUMyAlIGxtZW1fYnVyc3Rfc2l6ZV9NZW1vcnlDb250cm9s bGVyUHJvMF9pbkJUMykgIT0gMCApIHsKCQlmcHJpbnRmKHN0ZG91dCwgIlxuU0xpQyBFcnJvcjog JXM6JWQgOiBMTWVtIGluQlQzIHBhcmFtZXRlciAnbG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9s bGVyUHJvMF9pbkJUMycgaXMgc2V0IHRvICV6ZCBieXRlczsgaXQgbXVzdCBiZSBhIG11bHRpcGxl IG9mICVkIGJ5dGVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIGxtZW1fYXJyX3NpemVfTWVtb3J5 Q29udHJvbGxlclBybzBfaW5CVDMsIGxtZW1fYnVyc3Rfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJv MF9pbkJUMyApOwoJfQoJaWYgKGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5C VDMgPiAwKSB7CgkJbWF4X21lbWN0bF9saW5lYXIoYWN0aW9ucywgIk1lbW9yeUNvbnRyb2xsZXJQ cm8wIiwgImluQlQzIiwgbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQzLCBs bWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQzKTsKCX0gZWxzZSB7CgkJbWF4 X2lnbm9yZV9tZW1jdGwoYWN0aW9ucywgIk1lbW9yeUNvbnRyb2xsZXJQcm8wIiwgImluQlQzIik7 Cgl9CglDSEVDS19FUlJPUlM7CgkvKiBlbmQgb2YgY29kZSBmb3IgbGluZWFyIG1lbW9yeS1zdHJl YW0gImluQlQzIiBpbiBtZW1vcnktY29udHJvbGxlciAiTWVtb3J5Q29udHJvbGxlclBybzAiICov CgkKCS8qIGNvZGUgZm9yIGxpbmVhciBtZW1vcnktc3RyZWFtICJvRGF0YVQxIiBpbiBtZW1vcnkt Y29udHJvbGxlciAiTWVtb3J5Q29udHJvbGxlclBybzAiICovCglzaXplX3QgbG1lbV9hZGRyZXNz X01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRhVDEgPSBpbnRlcmZhY2VfYWN0aW9ucy0+bG1lbV9h ZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRhVDE7CglzaXplX3QgbG1lbV9hcnJfc2l6 ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQxID0gaW50ZXJmYWNlX2FjdGlvbnMtPmxtZW1f YXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfb0RhdGFUMTsKCWludCBsbWVtX2J1cnN0X3Np emVfTWVtb3J5Q29udHJvbGxlclBybzBfb0RhdGFUMSA9IG1heF9nZXRfYnVyc3Rfc2l6ZShtYXhm aWxlLCAiTWVtb3J5Q29udHJvbGxlclBybzAiKTsKCWlmICggKGxtZW1fYWRkcmVzc19NZW1vcnlD b250cm9sbGVyUHJvMF9vRGF0YVQxICUgbG1lbV9idXJzdF9zaXplX01lbW9yeUNvbnRyb2xsZXJQ cm8wX29EYXRhVDEpICE9IDAgKSB7CgkJZnByaW50ZihzdGRvdXQsICJcblNMaUMgRXJyb3I6ICVz OiVkIDogTE1lbSBvRGF0YVQxIHBhcmFtZXRlciAnbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xs ZXJQcm8wX29EYXRhVDEnIGlzIHNldCB0byAlemQgYnl0ZXM7IGl0IG11c3QgYmUgYSBtdWx0aXBs ZSBvZiAlZCBieXRlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCBsbWVtX2FkZHJlc3NfTWVtb3J5 Q29udHJvbGxlclBybzBfb0RhdGFUMSwgbG1lbV9idXJzdF9zaXplX01lbW9yeUNvbnRyb2xsZXJQ cm8wX29EYXRhVDEgKTsKCX0KCWlmICggKGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBy bzBfb0RhdGFUMSAlIGxtZW1fYnVyc3Rfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQx KSAhPSAwICkgewoJCWZwcmludGYoc3Rkb3V0LCAiXG5TTGlDIEVycm9yOiAlczolZCA6IExNZW0g b0RhdGFUMSBwYXJhbWV0ZXIgJ2xtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfb0Rh dGFUMScgaXMgc2V0IHRvICV6ZCBieXRlczsgaXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mICVkIGJ5 dGVzXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxl clBybzBfb0RhdGFUMSwgbG1lbV9idXJzdF9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRh VDEgKTsKCX0KCWlmIChsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRhVDEg PiAwKSB7CgkJbWF4X21lbWN0bF9saW5lYXIoYWN0aW9ucywgIk1lbW9yeUNvbnRyb2xsZXJQcm8w IiwgIm9EYXRhVDEiLCBsbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfb0RhdGFUMSwg bG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQxKTsKCX0gZWxzZSB7CgkJ bWF4X2lnbm9yZV9tZW1jdGwoYWN0aW9ucywgIk1lbW9yeUNvbnRyb2xsZXJQcm8wIiwgIm9EYXRh VDEiKTsKCX0KCUNIRUNLX0VSUk9SUzsKCS8qIGVuZCBvZiBjb2RlIGZvciBsaW5lYXIgbWVtb3J5 LXN0cmVhbSAib0RhdGFUMSIgaW4gbWVtb3J5LWNvbnRyb2xsZXIgIk1lbW9yeUNvbnRyb2xsZXJQ cm8wIiAqLwoJCgkvKiBjb2RlIGZvciBsaW5lYXIgbWVtb3J5LXN0cmVhbSAib0RhdGFUMiIgaW4g bWVtb3J5LWNvbnRyb2xsZXIgIk1lbW9yeUNvbnRyb2xsZXJQcm8wIiAqLwoJc2l6ZV90IGxtZW1f YWRkcmVzc19NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQyID0gaW50ZXJmYWNlX2FjdGlvbnMt PmxtZW1fYWRkcmVzc19NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQyOwoJc2l6ZV90IGxtZW1f YXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfb0RhdGFUMiA9IGludGVyZmFjZV9hY3Rpb25z LT5sbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRhVDI7CglpbnQgbG1lbV9i dXJzdF9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRhVDIgPSBtYXhfZ2V0X2J1cnN0X3Np emUobWF4ZmlsZSwgIk1lbW9yeUNvbnRyb2xsZXJQcm8wIik7CglpZiAoIChsbWVtX2FkZHJlc3Nf TWVtb3J5Q29udHJvbGxlclBybzBfb0RhdGFUMiAlIGxtZW1fYnVyc3Rfc2l6ZV9NZW1vcnlDb250 cm9sbGVyUHJvMF9vRGF0YVQyKSAhPSAwICkgewoJCWZwcmludGYoc3Rkb3V0LCAiXG5TTGlDIEVy cm9yOiAlczolZCA6IExNZW0gb0RhdGFUMiBwYXJhbWV0ZXIgJ2xtZW1fYWRkcmVzc19NZW1vcnlD b250cm9sbGVyUHJvMF9vRGF0YVQyJyBpcyBzZXQgdG8gJXpkIGJ5dGVzOyBpdCBtdXN0IGJlIGEg bXVsdGlwbGUgb2YgJWQgYnl0ZXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgbG1lbV9hZGRyZXNz X01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRhVDIsIGxtZW1fYnVyc3Rfc2l6ZV9NZW1vcnlDb250 cm9sbGVyUHJvMF9vRGF0YVQyICk7Cgl9CglpZiAoIChsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRy b2xsZXJQcm8wX29EYXRhVDIgJSBsbWVtX2J1cnN0X3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBf b0RhdGFUMikgIT0gMCApIHsKCQlmcHJpbnRmKHN0ZG91dCwgIlxuU0xpQyBFcnJvcjogJXM6JWQg OiBMTWVtIG9EYXRhVDIgcGFyYW1ldGVyICdsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQ cm8wX29EYXRhVDInIGlzIHNldCB0byAlemQgYnl0ZXM7IGl0IG11c3QgYmUgYSBtdWx0aXBsZSBv ZiAlZCBieXRlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCBsbWVtX2Fycl9zaXplX01lbW9yeUNv bnRyb2xsZXJQcm8wX29EYXRhVDIsIGxtZW1fYnVyc3Rfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJv MF9vRGF0YVQyICk7Cgl9CglpZiAobG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9v RGF0YVQyID4gMCkgewoJCW1heF9tZW1jdGxfbGluZWFyKGFjdGlvbnMsICJNZW1vcnlDb250cm9s bGVyUHJvMCIsICJvRGF0YVQyIiwgbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX29E YXRhVDIsIGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfb0RhdGFUMik7Cgl9IGVs c2UgewoJCW1heF9pZ25vcmVfbWVtY3RsKGFjdGlvbnMsICJNZW1vcnlDb250cm9sbGVyUHJvMCIs ICJvRGF0YVQyIik7Cgl9CglDSEVDS19FUlJPUlM7CgkvKiBlbmQgb2YgY29kZSBmb3IgbGluZWFy IG1lbW9yeS1zdHJlYW0gIm9EYXRhVDIiIGluIG1lbW9yeS1jb250cm9sbGVyICJNZW1vcnlDb250 cm9sbGVyUHJvMCIgKi8KCQoJaWYgKHVzZV9jYWxsYmFjayAmJiBjYl9kYXRhLT5jb3VudCA9PSAw KSB7CgkJKmNhbGxiYWNrX2RhdGEgPSBOVUxMOwoJCSpjYWxsYmFja19mdW5jID0gTlVMTDsKCQlm cmVlKGNiX2RhdGEpOwoJfQoJcmV0dXJuIGFjdGlvbnM7CiN1bmRlZiBDSEVDS19FUlJPUlMKfQoK dm9pZCBTdHJlYW1GTUEoCgl1aW50NjRfdCB0aWNrc19TdHJlYW1GTUFLZXJuZWwsCgljb25zdCB2 b2lkICppbnN0cmVhbV9pbkFUMSwKCXNpemVfdCBpbnN0cmVhbV9zaXplX2luQVQxLAoJY29uc3Qg dm9pZCAqaW5zdHJlYW1faW5CVDEsCglzaXplX3QgaW5zdHJlYW1fc2l6ZV9pbkJUMSwKCXZvaWQg Km91dHN0cmVhbV9vRGF0YVQzLAoJc2l6ZV90IG91dHN0cmVhbV9zaXplX29EYXRhVDMsCglzaXpl X3QgbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQyLAoJc2l6ZV90IGxtZW1f YXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDIsCglzaXplX3QgbG1lbV9hZGRyZXNz X01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQzLAoJc2l6ZV90IGxtZW1fYXJyX3NpemVfTWVtb3J5 Q29udHJvbGxlclBybzBfaW5BVDMsCglzaXplX3QgbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xs ZXJQcm8wX2luQlQyLAoJc2l6ZV90IGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBf aW5CVDIsCglzaXplX3QgbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQzLAoJ c2l6ZV90IGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5CVDMsCglzaXplX3Qg bG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRhVDEsCglzaXplX3QgbG1lbV9h cnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQxLAoJc2l6ZV90IGxtZW1fYWRkcmVz c19NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQyLAoJc2l6ZV90IGxtZW1fYXJyX3NpemVfTWVt b3J5Q29udHJvbGxlclBybzBfb0RhdGFUMikKewoJKHZvaWQpIHB0aHJlYWRfb25jZSgmc2xpY19i c19pc19pbml0aWFsaXNlZCwgU3RyZWFtRk1BX3N0YXRpY19pbml0KTsKCUNIRUNLX05VTEwoc3Rv cmVkX21heGZpbGUsICJNYXhmaWxlIHdhcyBub3QgbG9hZGVkIiwgKTsKCW1heF9ydW5fdCAqcnVu ID0gU3RyZWFtRk1BX25vbmJsb2NrKHRpY2tzX1N0cmVhbUZNQUtlcm5lbCwgaW5zdHJlYW1faW5B VDEsIGluc3RyZWFtX3NpemVfaW5BVDEsIGluc3RyZWFtX2luQlQxLCBpbnN0cmVhbV9zaXplX2lu QlQxLCBvdXRzdHJlYW1fb0RhdGFUMywgb3V0c3RyZWFtX3NpemVfb0RhdGFUMywgbG1lbV9hZGRy ZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQyLCBsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRy b2xsZXJQcm8wX2luQVQyLCBsbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDMs IGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDMsIGxtZW1fYWRkcmVzc19N ZW1vcnlDb250cm9sbGVyUHJvMF9pbkJUMiwgbG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVy UHJvMF9pbkJUMiwgbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQzLCBsbWVt X2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQzLCBsbWVtX2FkZHJlc3NfTWVtb3J5 Q29udHJvbGxlclBybzBfb0RhdGFUMSwgbG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJv MF9vRGF0YVQxLCBsbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfb0RhdGFUMiwgbG1l bV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQyKTsKCUNIRUNLX05VTEwocnVu LCAiVW5hYmxlIHRvIHJ1biBhY3Rpb25zIiwgKTsKCW1heF93YWl0KHJ1bik7Cn0KCm1heF9ydW5f dCAqU3RyZWFtRk1BX25vbmJsb2NrKAoJdWludDY0X3QgdGlja3NfU3RyZWFtRk1BS2VybmVsLAoJ Y29uc3Qgdm9pZCAqaW5zdHJlYW1faW5BVDEsCglzaXplX3QgaW5zdHJlYW1fc2l6ZV9pbkFUMSwK CWNvbnN0IHZvaWQgKmluc3RyZWFtX2luQlQxLAoJc2l6ZV90IGluc3RyZWFtX3NpemVfaW5CVDEs Cgl2b2lkICpvdXRzdHJlYW1fb0RhdGFUMywKCXNpemVfdCBvdXRzdHJlYW1fc2l6ZV9vRGF0YVQz LAoJc2l6ZV90IGxtZW1fYWRkcmVzc19NZW1vcnlDb250cm9sbGVyUHJvMF9pbkFUMiwKCXNpemVf dCBsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQyLAoJc2l6ZV90IGxtZW1f YWRkcmVzc19NZW1vcnlDb250cm9sbGVyUHJvMF9pbkFUMywKCXNpemVfdCBsbWVtX2Fycl9zaXpl X01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQzLAoJc2l6ZV90IGxtZW1fYWRkcmVzc19NZW1vcnlD b250cm9sbGVyUHJvMF9pbkJUMiwKCXNpemVfdCBsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xs ZXJQcm8wX2luQlQyLAoJc2l6ZV90IGxtZW1fYWRkcmVzc19NZW1vcnlDb250cm9sbGVyUHJvMF9p bkJUMywKCXNpemVfdCBsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQzLAoJ c2l6ZV90IGxtZW1fYWRkcmVzc19NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQxLAoJc2l6ZV90 IGxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBybzBfb0RhdGFUMSwKCXNpemVfdCBsbWVt X2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfb0RhdGFUMiwKCXNpemVfdCBsbWVtX2Fycl9z aXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRhVDIpCnsKCVN0cmVhbUZNQV9hY3Rpb25zX3Qg aW50ZXJmYWNlX2FjdGlvbnM7CglpbnRlcmZhY2VfYWN0aW9ucy50aWNrc19TdHJlYW1GTUFLZXJu ZWwgPSB0aWNrc19TdHJlYW1GTUFLZXJuZWw7CglpbnRlcmZhY2VfYWN0aW9ucy5pbnN0cmVhbV9p bkFUMSA9IGluc3RyZWFtX2luQVQxOwoJaW50ZXJmYWNlX2FjdGlvbnMuaW5zdHJlYW1fc2l6ZV9p bkFUMSA9IGluc3RyZWFtX3NpemVfaW5BVDE7CglpbnRlcmZhY2VfYWN0aW9ucy5pbnN0cmVhbV9p bkJUMSA9IGluc3RyZWFtX2luQlQxOwoJaW50ZXJmYWNlX2FjdGlvbnMuaW5zdHJlYW1fc2l6ZV9p bkJUMSA9IGluc3RyZWFtX3NpemVfaW5CVDE7CglpbnRlcmZhY2VfYWN0aW9ucy5vdXRzdHJlYW1f b0RhdGFUMyA9IG91dHN0cmVhbV9vRGF0YVQzOwoJaW50ZXJmYWNlX2FjdGlvbnMub3V0c3RyZWFt X3NpemVfb0RhdGFUMyA9IG91dHN0cmVhbV9zaXplX29EYXRhVDM7CglpbnRlcmZhY2VfYWN0aW9u cy5sbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDIgPSBsbWVtX2FkZHJlc3Nf TWVtb3J5Q29udHJvbGxlclBybzBfaW5BVDI7CglpbnRlcmZhY2VfYWN0aW9ucy5sbWVtX2Fycl9z aXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQyID0gbG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250 cm9sbGVyUHJvMF9pbkFUMjsKCWludGVyZmFjZV9hY3Rpb25zLmxtZW1fYWRkcmVzc19NZW1vcnlD b250cm9sbGVyUHJvMF9pbkFUMyA9IGxtZW1fYWRkcmVzc19NZW1vcnlDb250cm9sbGVyUHJvMF9p bkFUMzsKCWludGVyZmFjZV9hY3Rpb25zLmxtZW1fYXJyX3NpemVfTWVtb3J5Q29udHJvbGxlclBy bzBfaW5BVDMgPSBsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQVQzOwoJaW50 ZXJmYWNlX2FjdGlvbnMubG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQyID0g bG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX2luQlQyOwoJaW50ZXJmYWNlX2FjdGlv bnMubG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9pbkJUMiA9IGxtZW1fYXJyX3Np emVfTWVtb3J5Q29udHJvbGxlclBybzBfaW5CVDI7CglpbnRlcmZhY2VfYWN0aW9ucy5sbWVtX2Fk ZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfaW5CVDMgPSBsbWVtX2FkZHJlc3NfTWVtb3J5Q29u dHJvbGxlclBybzBfaW5CVDM7CglpbnRlcmZhY2VfYWN0aW9ucy5sbWVtX2Fycl9zaXplX01lbW9y eUNvbnRyb2xsZXJQcm8wX2luQlQzID0gbG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJv MF9pbkJUMzsKCWludGVyZmFjZV9hY3Rpb25zLmxtZW1fYWRkcmVzc19NZW1vcnlDb250cm9sbGVy UHJvMF9vRGF0YVQxID0gbG1lbV9hZGRyZXNzX01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRhVDE7 CglpbnRlcmZhY2VfYWN0aW9ucy5sbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX29E YXRhVDEgPSBsbWVtX2Fycl9zaXplX01lbW9yeUNvbnRyb2xsZXJQcm8wX29EYXRhVDE7CglpbnRl cmZhY2VfYWN0aW9ucy5sbWVtX2FkZHJlc3NfTWVtb3J5Q29udHJvbGxlclBybzBfb0RhdGFUMiA9 IGxtZW1fYWRkcmVzc19NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQyOwoJaW50ZXJmYWNlX2Fj dGlvbnMubG1lbV9hcnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQyID0gbG1lbV9h cnJfc2l6ZV9NZW1vcnlDb250cm9sbGVyUHJvMF9vRGF0YVQyOwoJKHZvaWQpIHB0aHJlYWRfb25j ZSgmc2xpY19ic19pc19pbml0aWFsaXNlZCwgU3RyZWFtRk1BX3N0YXRpY19pbml0KTsKCUNIRUNL X05VTEwoc3RvcmVkX21heGZpbGUsICJNYXhmaWxlIHdhcyBub3QgbG9hZGVkIiwgTlVMTCk7Cgl2 b2lkICgqY2JfZnVuYykodm9pZCopID0gTlVMTDsKCXZvaWQgICpjYl9kYXRhICAgICAgICAgPSBO VUxMOwoJbWF4X2FjdGlvbnNfdCAqYWN0aW9ucyA9IFN0cmVhbUZNQV9jb252ZXJ0X2ludGVybmFs KHN0b3JlZF9tYXhmaWxlLCAmaW50ZXJmYWNlX2FjdGlvbnMsIDEsICZjYl9mdW5jLCAmY2JfZGF0 YSk7CglDSEVDS19OVUxMKGFjdGlvbnMsICJVbmFibGUgdG8gYnVpbGQgYWN0aW9ucyIsIE5VTEwp OwoJbWF4X3ZhbGlkYXRlKGFjdGlvbnMpOwoJQ0hFQ0tfRVJST1JTX1NUKGFjdGlvbnMsIE5VTEwp OwoJQ0hFQ0tfRVJST1JTX1NUKHN0b3JlZF9lbmdpbmUsIE5VTEwpOwoJbWF4X3J1bl90ICpydW47 CglpZiAoY2JfZnVuYyA9PSBOVUxMKSB7CgkJcnVuID0gbWF4X3J1bl9ub25ibG9jayhzdG9yZWRf ZW5naW5lLCBhY3Rpb25zKTsKCX0gZWxzZSB7CgkJcnVuID0gbWF4X3J1bl9ub25ibG9ja193aXRo X2NiKHN0b3JlZF9lbmdpbmUsIGFjdGlvbnMsIGNiX2Z1bmMsIGNiX2RhdGEpOwoJfQoJQ0hFQ0tf TlVMTChydW4sICJVbmFibGUgdG8gcnVuIGFjdGlvbnMiLCBOVUxMKTsKCUNIRUNLX0VSUk9SU19T VChhY3Rpb25zLCBOVUxMKTsKCW1heF9hY3Rpb25zX2ZyZWUoYWN0aW9ucyk7CglyZXR1cm4gcnVu Owp9Cgp2b2lkIFN0cmVhbUZNQV9ydW4oCgltYXhfZW5naW5lX3QgKmVuZ2luZSwKCVN0cmVhbUZN QV9hY3Rpb25zX3QgKmludGVyZmFjZV9hY3Rpb25zKQp7CgltYXhfcnVuX3QgKnJ1biA9IFN0cmVh bUZNQV9ydW5fbm9uYmxvY2soZW5naW5lLCBpbnRlcmZhY2VfYWN0aW9ucyk7CglDSEVDS19OVUxM KHJ1biwgIlVuYWJsZSB0byBydW4gYWN0aW9ucyIsICk7CgltYXhfd2FpdChydW4pOwp9CgptYXhf cnVuX3QgKlN0cmVhbUZNQV9ydW5fbm9uYmxvY2soCgltYXhfZW5naW5lX3QgKmVuZ2luZSwKCVN0 cmVhbUZNQV9hY3Rpb25zX3QgKmludGVyZmFjZV9hY3Rpb25zKQp7CgltYXhfZmlsZV90ICptYXhm aWxlID0gbWF4X2VuZ2luZV9nZXRfbWF4X2ZpbGUoZW5naW5lKTsgCgl2b2lkICgqY2JfZnVuYyko dm9pZCopID0gTlVMTDsKCXZvaWQgICpjYl9kYXRhICAgICAgICAgPSBOVUxMOwoJbWF4X2FjdGlv bnNfdCAqYWN0aW9ucyA9IFN0cmVhbUZNQV9jb252ZXJ0X2ludGVybmFsKG1heGZpbGUsIGludGVy ZmFjZV9hY3Rpb25zLCAxLCAmY2JfZnVuYywgJmNiX2RhdGEpOwoJQ0hFQ0tfTlVMTChhY3Rpb25z LCAiVW5hYmxlIHRvIGJ1aWxkIGFjdGlvbnMiLCBOVUxMKTsKCW1heF92YWxpZGF0ZShhY3Rpb25z KTsKCUNIRUNLX0VSUk9SU19TVChhY3Rpb25zLCBOVUxMKTsKCW1heF9ydW5fdCAqcnVuOwoJaWYg KGNiX2Z1bmMgPT0gTlVMTCkgewoJCXJ1biA9IG1heF9ydW5fbm9uYmxvY2soZW5naW5lLCBhY3Rp b25zKTsKCX0gZWxzZSB7CgkJcnVuID0gbWF4X3J1bl9ub25ibG9ja193aXRoX2NiKGVuZ2luZSwg YWN0aW9ucywgY2JfZnVuYywgY2JfZGF0YSk7Cgl9CglDSEVDS19OVUxMKHJ1biwgIlVuYWJsZSB0 byBydW4gYWN0aW9ucyIsIE5VTEwpOwoJbWF4X2FjdGlvbnNfZnJlZShhY3Rpb25zKTsKCXJldHVy biBydW47Cn0KCgovKioKICogXGJyaWVmIEdyb3VwIHJ1biBhZHZhbmNlZCBzdGF0aWMgZnVuY3Rp b24gZm9yIHRoZSBpbnRlcmZhY2UgJ2RlZmF1bHQnLgogKiAKICogXHBhcmFtIFtpbl0gZ3JvdXAg R3JvdXAgdG8gdXNlLgogKiBccGFyYW0gW2luLG91dF0gaW50ZXJmYWNlX2FjdGlvbnMgQWN0aW9u cyB0byBydW4uCiAqCiAqIFJ1biB0aGUgYWN0aW9ucyBvbiB0aGUgZmlyc3QgZGV2aWNlIGF2YWls YWJsZSBpbiB0aGUgZ3JvdXAuCiAqLwp2b2lkIFN0cmVhbUZNQV9ydW5fZ3JvdXAobWF4X2dyb3Vw X3QgKmdyb3VwLCBTdHJlYW1GTUFfYWN0aW9uc190ICppbnRlcmZhY2VfYWN0aW9ucykKewoJbWF4 X3J1bl90ICpydW4gPSBTdHJlYW1GTUFfcnVuX2dyb3VwX25vbmJsb2NrKGdyb3VwLCBpbnRlcmZh Y2VfYWN0aW9ucyk7CglDSEVDS19OVUxMKHJ1biwgIlVuYWJsZSB0byBydW4gYWN0aW9ucyIsICk7 CgltYXhfd2FpdChydW4pOwp9CgoKLyoqCiAqIFxicmllZiBHcm91cCBydW4gYWR2YW5jZWQgc3Rh dGljIG5vbi1ibG9ja2luZyBmdW5jdGlvbiBmb3IgdGhlIGludGVyZmFjZSAnZGVmYXVsdCcuCiAq IAogKgogKiBTY2hlZHVsZSB0aGUgYWN0aW9ucyB0byBydW4gb24gdGhlIGZpcnN0IGRldmljZSBh dmFpbGFibGUgaW4gdGhlIGdyb3VwIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkuCiAqIFRoZSBzdGF0 dXMgb2YgdGhlIHJ1biBtdXN0IGJlIGNoZWNrZWQgd2l0aCA6Om1heF93YWl0LiAKICogTm90ZSB0 aGF0IHVzZSBvZiA6Om1heF9ub3dhaXQgaXMgcHJvaGliaXRlZCB3aXRoIG5vbi1ibG9ja2luZyBy dW5uaW5nIG9uIGdyb3VwczoKICogc2VlIHRoZSA6Om1heF9ydW5fZ3JvdXBfbm9uYmxvY2sgZG9j dW1lbnRhdGlvbiBmb3IgbW9yZSBleHBsYW5hdGlvbi4KICoKICogXHBhcmFtIFtpbl0gZ3JvdXAg R3JvdXAgdG8gdXNlLgogKiBccGFyYW0gW2luXSBpbnRlcmZhY2VfYWN0aW9ucyBBY3Rpb25zIHRv IHJ1bi4KICogXHJldHVybiBBIGhhbmRsZSBvbiB0aGUgZXhlY3V0aW9uIHN0YXR1cyBvZiB0aGUg YWN0aW9ucywgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgogKi8KbWF4X3J1bl90ICpTdHJlYW1G TUFfcnVuX2dyb3VwX25vbmJsb2NrKG1heF9ncm91cF90ICpncm91cCwgU3RyZWFtRk1BX2FjdGlv bnNfdCAqaW50ZXJmYWNlX2FjdGlvbnMpCnsKCW1heF9maWxlX3QgKm1heGZpbGUgPSBtYXhfZ3Jv dXBfZ2V0X21heF9maWxlKGdyb3VwKTsKCW1heF9hY3Rpb25zX3QgKmFjdGlvbnMgPSBTdHJlYW1G TUFfY29udmVydF9pbnRlcm5hbChtYXhmaWxlLCBpbnRlcmZhY2VfYWN0aW9ucywgMSwgTlVMTCwg TlVMTCk7CglpZihhY3Rpb25zID09IE5VTEwpIHJldHVybiBOVUxMOwoJaWYoIW1heF9vayhhY3Rp b25zLT5lcnJvcnMpKSByZXR1cm4gTlVMTDsKCW1heF92YWxpZGF0ZShhY3Rpb25zKTsKCW1heF9y dW5fdCAqcnVuID0gbWF4X3J1bl9ncm91cF9ub25ibG9jayhncm91cCwgYWN0aW9ucyk7CgltYXhf YWN0aW9uc19mcmVlKGFjdGlvbnMpOwoJcmV0dXJuIHJ1bjsKfQoKCi8qKgogKiBcYnJpZWYgQXJy YXkgcnVuIGFkdmFuY2VkIHN0YXRpYyBmdW5jdGlvbiBmb3IgdGhlIGludGVyZmFjZSAnZGVmYXVs dCcuCiAqIAogKiBccGFyYW0gW2luXSBlbmdhcnJheSBUaGUgYXJyYXkgb2YgZGV2aWNlcyB0byB1 c2UuCiAqIFxwYXJhbSBbaW4sb3V0XSBpbnRlcmZhY2VfYWN0aW9ucyBUaGUgYXJyYXkgb2YgYWN0 aW9ucyB0byBydW4uCiAqCiAqIFJ1biB0aGUgYXJyYXkgb2YgYWN0aW9ucyBvbiB0aGUgYXJyYXkg b2YgZW5naW5lcy4gIFRoZSBsZW5ndGggb2YgaW50ZXJmYWNlX2FjdGlvbnMKICogbXVzdCBtYXRj aCB0aGUgc2l6ZSBvZiBlbmdhcnJheS4KICovCnZvaWQgU3RyZWFtRk1BX3J1bl9hcnJheShtYXhf ZW5nYXJyYXlfdCAqZW5nYXJyYXksIFN0cmVhbUZNQV9hY3Rpb25zX3QgKmludGVyZmFjZV9hY3Rp b25zW10pCnsKCW1heF9ydW5fdCAqcnVuID0gU3RyZWFtRk1BX3J1bl9hcnJheV9ub25ibG9jayhl bmdhcnJheSwgaW50ZXJmYWNlX2FjdGlvbnMpOwoJQ0hFQ0tfTlVMTChydW4sICJVbmFibGUgdG8g cnVuIGFjdGlvbnMiLCApOwoJbWF4X3dhaXQocnVuKTsKfQoKCi8qKgogKiBcYnJpZWYgQXJyYXkg cnVuIGFkdmFuY2VkIHN0YXRpYyBub24tYmxvY2tpbmcgZnVuY3Rpb24gZm9yIHRoZSBpbnRlcmZh Y2UgJ2RlZmF1bHQnLgogKiAKICoKICogU2NoZWR1bGUgdG8gcnVuIHRoZSBhcnJheSBvZiBhY3Rp b25zIG9uIHRoZSBhcnJheSBvZiBlbmdpbmVzLCBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5LgogKiBU aGUgbGVuZ3RoIG9mIGludGVyZmFjZV9hY3Rpb25zIG11c3QgbWF0Y2ggdGhlIHNpemUgb2YgZW5n YXJyYXkuCiAqIFRoZSBzdGF0dXMgb2YgdGhlIHJ1biBjYW4gYmUgY2hlY2tlZCBlaXRoZXIgYnkg OjptYXhfd2FpdCBvciA6Om1heF9ub3dhaXQ7CiAqIG5vdGUgdGhhdCBvbmUgb2YgdGhlc2UgKm11 c3QqIGJlIGNhbGxlZCwgc28gdGhhdCBhc3NvY2lhdGVkIG1lbW9yeSBjYW4gYmUgcmVsZWFzZWQu CiAqCiAqIFxwYXJhbSBbaW5dIGVuZ2FycmF5IFRoZSBhcnJheSBvZiBkZXZpY2VzIHRvIHVzZS4K ICogXHBhcmFtIFtpbl0gaW50ZXJmYWNlX2FjdGlvbnMgVGhlIGFycmF5IG9mIGFjdGlvbnMgdG8g cnVuLgogKiBccmV0dXJuIEEgaGFuZGxlIG9uIHRoZSBleGVjdXRpb24gc3RhdHVzIG9mIHRoZSBh Y3Rpb25zLCBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCiAqLwptYXhfcnVuX3QgKlN0cmVhbUZN QV9ydW5fYXJyYXlfbm9uYmxvY2sobWF4X2VuZ2FycmF5X3QgKmVuZ2FycmF5LCBTdHJlYW1GTUFf YWN0aW9uc190ICppbnRlcmZhY2VfYWN0aW9uc1tdKQp7CgltYXhfZmlsZV90ICptYXhmaWxlID0g bWF4X2VuZ2FycmF5X2dldF9tYXhfZmlsZShlbmdhcnJheSwgMCk7CglpbnQgaTsKCW1heF9hY3Rh cnJheV90ICphY3RhcnJheSA9IG1heF9hY3RhcnJheV9pbml0KG1heGZpbGUsIGVuZ2FycmF5LT5z aXplKTsKCWlmIChhY3RhcnJheSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKCW1heF9hY3Rpb25zX3Qg KiphcnJfYWN0aW9ucyA9IG1hbGxvYyhlbmdhcnJheS0+c2l6ZSAqIHNpemVvZihtYXhfYWN0aW9u c190KikpOwoJZm9yICggaSA9IDAgOyBpIDwgYWN0YXJyYXktPnNpemU7IGkrKyApIHsKCQltYXhf YWN0aW9uc190ICphY3Rpb25zID0gU3RyZWFtRk1BX2NvbnZlcnRfaW50ZXJuYWwobWF4ZmlsZSwg aW50ZXJmYWNlX2FjdGlvbnNbaV0sIDEsIE5VTEwsIE5VTEwpOwoJCWlmIChhY3Rpb25zID09IE5V TEwpIHJldHVybiBOVUxMOwoJCWFycl9hY3Rpb25zW2ldID0gYWN0aW9uczsKCQltYXhfc2V0X2Fj dGlvbihhY3RhcnJheSwgaSwgYWN0aW9ucyk7Cgl9CgltYXhfcnVuX3QgKnJ1biA9IG1heF9ydW5f YXJyYXlfbm9uYmxvY2soZW5nYXJyYXksIGFjdGFycmF5KTsKCWZvciAoIGkgPSAwIDsgaSA8IGFj dGFycmF5LT5zaXplIDsgaSsrICkgeyBtYXhfYWN0aW9uc19mcmVlKGFycl9hY3Rpb25zW2ldKTsg fQoJbWF4X2FjdGFycmF5X2ZyZWUoYWN0YXJyYXkpOwoJZnJlZShhcnJfYWN0aW9ucyk7CglyZXR1 cm4gcnVuOwp9CgoKLyoqCiAqIFxicmllZiBDb252ZXJ0cyBhIHN0YXRpYy1pbnRlcmZhY2UgYWN0 aW9uIHN0cnVjdCBpbnRvIGEgZHluYW1pYy1pbnRlcmZhY2UgbWF4X2FjdGlvbnNfdCBzdHJ1Y3Qu CiAqCiAqIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb24gdXNl ZCBieSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIHN0YXRpYyBpbnRlcmZhY2UuCiAqCiAqIFxwYXJh bSBbaW5dIG1heGZpbGUgVGhlIG1heGZpbGUgdG8gdXNlLgogKiBccGFyYW0gW2luXSBpbnRlcmZh Y2VfYWN0aW9ucyBUaGUgaW50ZXJmYWNlLXNwZWNpZmljIGFjdGlvbnMgdG8gcnVuLgogKiBccmV0 dXJuIFRoZSBkeW5hbWljLWludGVyZmFjZSBhY3Rpb25zIHRvIHJ1biwgb3IgTlVMTCBpbiBjYXNl IG9mIGVycm9yLgogKi8KbWF4X2FjdGlvbnNfdCogU3RyZWFtRk1BX2NvbnZlcnQobWF4X2ZpbGVf dCAqbWF4ZmlsZSwgU3RyZWFtRk1BX2FjdGlvbnNfdCAqaW50ZXJmYWNlX2FjdGlvbnMpCnsKCXJl dHVybiBTdHJlYW1GTUFfY29udmVydF9pbnRlcm5hbChtYXhmaWxlLCBpbnRlcmZhY2VfYWN0aW9u cywgMCwgTlVMTCwgTlVMTCk7Cn0KCiN1bmRlZiBDSEVDS19FUlJPUlNfU1QKI3VuZGVmIENIRUNL X05VTEwKCgo= #endif /* SLIC_B64_DEFINITIONS */ #ifdef SLIC_EXTRA_FILES PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHVz ZXJmaWxlcyBmb3JtYXQtdmVyc2lvbj0iMjAxMjAyMDAiLz4= #endif /* SLIC_EXTRA_FILES */ #ifdef PHOTON_NODE_ADD_DATA #define PHOTON_NODE_ADD_DATA_PRESENT 1 PHOTON_NODE_ADD_DATA(StreamFMAKernel, 22, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 23, "SquashFactor", 1.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 0, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 1, "SquashFactor", 1.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 2, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 3, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 4, "SquashFactor", 1.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 5, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 18, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 25, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 27, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 28, "SquashFactor", 1.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 6, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 7, "SquashFactor", 1.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 8, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 9, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 10, "SquashFactor", 1.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 11, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 19, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 30, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 32, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 33, "SquashFactor", 1.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 12, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 13, "SquashFactor", 1.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 14, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 15, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 16, "SquashFactor", 1.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 17, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 20, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 35, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 40, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 50, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 37, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 38, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 39, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 41, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 49, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 43, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 44, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 46, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 48, "SquashFactor", 0.0) PHOTON_NODE_ADD_DATA(StreamFMAKernel, 45, "SquashFactor", 0.0) #endif #ifdef MAXFILE_SIGNATURE #define MAXFILE_SIGNATURE_PRESENT 1 MAXFILE_SIGNATURE("302d02150088772342d2d888822b583166fd04736983822f1b02143417323058ae7f98fb7b34570f80ed9ff6bfc31e") #endif