LOCAL int parse_param_file(byte *param_buffer, common_reg_enum_type en_type) { byte* (*fn_ptr)(byte*, common_reg_type*); common_reg_list_type* param_list; int param_list_idx; byte* curr_ptr; switch(en_type) { case COMMON_REG_REG : fn_ptr = fn_default_parse_reg; break; case COMMON_REG_REG_VAR4 : fn_ptr = fn_default_parse_reg_var4; break; case COMMON_REG_MEM : fn_ptr = fn_default_parse_mem; break; case COMMON_REG_MEM_VAR4 : fn_ptr = fn_default_parse_mem_var4; break; default: printk("PARM: Unknown type...\n"); } curr_ptr = param_buffer; param_list = (common_reg_list_type *)param_buffer; //param_list->list_regs = (common_reg_type*)((dword)param_list + FPOS(common_reg_list_type, list_regs)); param_list_idx = 0; while(curr_ptr) curr_ptr = fn_ptr(curr_ptr, ¶m_list->list_regs[param_list_idx++]); param_list->num_regs = param_list_idx - 1; return TRUE; }
int init_port_shared_data() { HMODULE native_handle; fn_port_init_shared_data_t fn_ptr; if (port_shared_data) return 0; native_handle = LoadLibrary(SHPORT_DLL_NAME); if (native_handle == NULL) return -1; fn_ptr = (fn_port_init_shared_data_t)GetProcAddress(native_handle, "port_init_shared_data"); if (!fn_ptr) return -1; return fn_ptr(&port_shared_data); }
static void handle_setup_packet(unsigned ep) { void (*fn_ptr)(unsigned a0, unsigned a1, unsigned a2, unsigned a3); unsigned type = (setup_packet.bmRequestType >> 5) & 0x3; unsigned pkt_cnt; prev_cmd = cmd; cmd = -1; switch (type) { case 0: handle_standard_request(); break; case 2: handle_vendor_request(); break; } if (in_data.size) { pkt_cnt = DIV_ROUND_UP(in_data.size, dwc2_max_packet_size(ep)); set_diep_size(ep, (pkt_cnt << 19) | in_data.size); set_diep_empmsk(1 << ep); } else { set_diep_size(ep, DOEPSIZE0_PKTCNT_BIT); } set_diep_ctl(ep, DEP_ENA_BIT | DEP_CLEAR_NAK); if (out_data.size) set_doep_ctl(ep, DEP_ENA_BIT | DEP_CLEAR_NAK); if (cmd == FW_REQ_JUMP) { fn_ptr = (void *)cmd_data.jump.addr; fn_ptr(0, 0, 0, 0); } }
bool TEE_MaskCancellation(void) { bool (*fn_ptr)() = fn_ptr_mask_cancellation(); return fn_ptr(); }
bool TEE_GetCancellationFlag(void) { bool (*fn_ptr)() = fn_ptr_get_cancel_flag(); return fn_ptr(); }