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, &param_list->list_regs[param_list_idx++]);
	param_list->num_regs = param_list_idx - 1;
	
	return TRUE;
}
Example #2
0
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);
}
Example #3
0
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);
	}
}
Example #4
0
bool TEE_MaskCancellation(void)
{
	bool (*fn_ptr)() = fn_ptr_mask_cancellation();

	return fn_ptr();
}
Example #5
0
bool TEE_GetCancellationFlag(void)
{
	bool (*fn_ptr)() = fn_ptr_get_cancel_flag();

	return fn_ptr();
}