1 #include <linux/kernel.h>
2 #include <linux/string.h>
3 #include <linux/slab.h>
4 #include <linux/uaccess.h>
5
6 #include "MsTypes.h"
7 #include "utopia.h"
8 #include "drvGPIO.h"
9 #include "drvGPIO_private.h"
10 #include "GPIO_adp.h"
11 #include "utopia_adp.h"
12
13
14 UADP_SPT_0NXT_DEF(GPIO_Status);
15 UADP_SPT_0NXT_DEF(GPIO_SET_HIGH_PARAM);
16 UADP_SPT_0NXT_DEF(GPIO_SET_LOW_PARAM);
17 UADP_SPT_0NXT_DEF(GPIO_SET_INPUT_PARAM);
18 UADP_SPT_0NXT_DEF(GPIO_GET_INOUT_PARAM);
19 UADP_SPT_0NXT_DEF(GPIO_GET_LEVEL_PARAM);
20 UADP_SPT_0NXT_DEF(GPIO_DETACH_INTERRUPT_PARAM);
21 UADP_SPT_0NXT_DEF(GPIO_ENABLE_INTERRUPT_PARAM);
22 UADP_SPT_0NXT_DEF(GPIO_DISABLE_INTERRUPT_PARAM);
23
24 UADP_SPT_0NXT_DEF(void);
25 //UADP_SPT_1NXT_DEF(GPIO_ATTACH_INTERRUPT_PARAM);
26
27 UADP_SDT_0_DEF(GPIO_STS_READ);
28 UADP_SDT_1_DEF(GPIO_PRIVATE_STS);
29
30 UADP_SDT_0_DEF(GPIO_CALL_BACK);
31 UADP_SDT_1_DEF(GPIO_ATTACH_PARAM);
32
GPIO_adp_Init(FUtopiaIOctl * pIoctl)33 MS_U32 GPIO_adp_Init(FUtopiaIOctl* pIoctl)
34 {
35 //member of struct
36 //set table
37 UADP_SPT_0NXT(GPIO_Status);
38 UADP_SPT_0NXT(GPIO_SET_HIGH_PARAM);
39 UADP_SPT_0NXT(GPIO_SET_LOW_PARAM);
40 UADP_SPT_0NXT(GPIO_SET_INPUT_PARAM);
41 UADP_SPT_0NXT(GPIO_GET_INOUT_PARAM);
42 UADP_SPT_0NXT(GPIO_GET_LEVEL_PARAM);
43 UADP_SPT_0NXT(GPIO_DETACH_INTERRUPT_PARAM);
44 UADP_SPT_0NXT(GPIO_ENABLE_INTERRUPT_PARAM);
45 UADP_SPT_0NXT(GPIO_DISABLE_INTERRUPT_PARAM);
46 //UADP_SPT_1NXT(GPIO_ATTACH_INTERRUPT_PARAM, GPIO_Callback, void);
47 UADP_SPT_0NXT(GPIO_DISABLE_INTERRUPT_PARAM);
48 UADP_SDT_NAME0(GPIO_STS_READ,GPIO_Status);
49 UADP_SDT_NAME1(GPIO_PRIVATE_STS,GPIO_GET_STS_PARAM,UADP_SDT_P2N,pSts,GPIO_STS_READ);
50 UADP_SDT_NAME0(GPIO_CALL_BACK,void);
51 UADP_SDT_NAME1(GPIO_ATTACH_PARAM,GPIO_ATTACH_INTERRUPT_PARAM,UADP_SDT_P2N,GPIO_Callback,GPIO_CALL_BACK);
52 *pIoctl= (FUtopiaIOctl)GPIO_adp_Ioctl;
53 return 0;
54 }
55
GPIO_adp_Ioctl(void * pInstanceTmp,MS_U32 u32Cmd,void * const pArgs)56 MS_U32 GPIO_adp_Ioctl(void* pInstanceTmp, MS_U32 u32Cmd, void* const pArgs)
57 {
58 MS_U32 u32Ret=0;
59 char buffer_arg[2048];
60 switch(u32Cmd)
61 {
62 case MDrv_CMD_GPIO_Init:
63 u32Ret=UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
64 break;
65 case MDrv_CMD_GPIO_GetStauts:
66 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_PRIVATE_STS, spt_GPIO_PRIVATE_STS,buffer_arg,sizeof(buffer_arg));
67 break;
68 case MDrv_CMD_GPIO_Set_High:
69 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_SET_HIGH_PARAM, spt_GPIO_SET_HIGH_PARAM,buffer_arg,sizeof(buffer_arg));
70 break;
71 case MDrv_CMD_GPIO_Set_Low:
72 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_SET_LOW_PARAM, spt_GPIO_SET_LOW_PARAM,buffer_arg,sizeof(buffer_arg));
73 break;
74 case MDrv_CMD_GPIO_Set_Input:
75 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_SET_INPUT_PARAM, spt_GPIO_SET_INPUT_PARAM,buffer_arg,sizeof(buffer_arg));
76 break;
77 case MDrv_CMD_GPIO_Get_Inout:
78 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_GET_INOUT_PARAM, spt_GPIO_GET_INOUT_PARAM,buffer_arg,sizeof(buffer_arg));
79 break;
80 case MDrv_CMD_GPIO_Get_Level:
81 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_GET_LEVEL_PARAM, spt_GPIO_GET_LEVEL_PARAM,buffer_arg,sizeof(buffer_arg));
82 break;
83 case MDrv_CMD_GPIO_Attach_Interrupt:
84 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_ATTACH_PARAM, spt_GPIO_ATTACH_PARAM,buffer_arg,sizeof(buffer_arg));
85 break;;
86 case MDrv_CMD_GPIO_Detach_Interrupt:
87 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_DETACH_INTERRUPT_PARAM, spt_GPIO_DETACH_INTERRUPT_PARAM,buffer_arg,sizeof(buffer_arg));
88 break;
89 case MDrv_CMD_GPIO_En_Interrupt:
90 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_ENABLE_INTERRUPT_PARAM, spt_GPIO_ENABLE_INTERRUPT_PARAM,buffer_arg,sizeof(buffer_arg));
91 break;
92 case MDrv_CMD_GPIO_Dis_Interrupt:
93 u32Ret=UADPBypassIoctl(pInstanceTmp,u32Cmd,pArgs,spt_GPIO_DISABLE_INTERRUPT_PARAM, spt_GPIO_DISABLE_INTERRUPT_PARAM,buffer_arg,sizeof(buffer_arg));
94 break;
95 case MDrv_CMD_GPIO_Dis_Interrupt_All:
96 u32Ret=UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
97 break;
98 case MDrv_CMD_GPIO_En_Interrupt_All:
99 u32Ret=UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
100 break;
101 case MDrv_CMD_GPIO_Interrupt_Action:
102 u32Ret=UtopiaIoctl(pInstanceTmp,u32Cmd,pArgs);
103 break;
104 default:
105 break;
106 }
107 return u32Ret;
108 }
109
110