1 #include <asm/arch/dl_engine.h>
2 #include <asm/arch/packet.h>
3 #include <asm/arch/fdl_stdio.h>
4 #include <linux/string.h>
6 typedef struct _DL_STATUS
9 int data_verify; /* Record the result of the latest file download
11 } DL_STATUS, *PDL_STATUS;
13 typedef struct _CMDPROC_TAB
17 } CMDPROC_TAB, *PCMDPROC_TAB;
19 CMDPROC_TAB g_proctab[BSL_CMD_TYPE_MAX - BSL_CMD_TYPE_MIN] = {0, 0};
21 #define IS_VALID_CMD(cmd) ((cmd >= BSL_CMD_TYPE_MIN) && (cmd < BSL_CMD_TYPE_MAX))
22 #define CMD_IND(cmd) ((cmd) - BSL_CMD_TYPE_MIN)
23 #define CMD_PROC(cmd) (g_proctab[CMD_IND(cmd)].proc)
24 #define CMD_ARG(cmd) (g_proctab[CMD_IND(cmd)].arg)
25 #define CALL_PROC(cmd, packet) (CMD_PROC(cmd)((packet), CMD_ARG(cmd)))
27 unsigned char FDL_DlInit (void)
29 memset (g_proctab, 0, sizeof (g_proctab));
33 unsigned char FDL_DlReg (CMD_TYPE cmd, CMDPROC proc, void *arg)
35 if (!IS_VALID_CMD (cmd))
40 CMD_PROC (cmd) = proc;
46 int FDL_DlEntry (DL_STAGE start)
48 cmd_pkt_type pkt_type;
54 packet_ptr = FDL_GetPacket();
56 pkt_type = (cmd_pkt_type) (packet_ptr->packet_body.type);
57 pkt_type = (cmd_pkt_type)(EndianConv_16((unsigned short)pkt_type));
58 packet_ptr->packet_body.size = EndianConv_16(packet_ptr->packet_body.size);
60 CALL_PROC(pkt_type, packet_ptr);
62 FDL_FreePacket (packet_ptr);
65 // return BSL_PHONE_SUCCEED;