* [PATCH v3 0/7] misc patches (for ioctl and ssi) @ 2010-01-12 1:00 Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap Omar Ramirez Luna 2010-01-15 13:06 ` [PATCH v3 0/7] misc patches (for ioctl and ssi) Ameya Palande 0 siblings, 2 replies; 18+ messages in thread From: Omar Ramirez Luna @ 2010-01-12 1:00 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishanth Menon, Hiroshi Doyu, Ameya Palande, Felipe Contreras Ioctl numbers has changed, this will require an update on libbridge and clients accesing directly to the driver - IO_ADDRESS is replaced for ioremap. *v3 - modified: DSPBRIDGE: replace IO_ADDRESS with ioremap, checking the result of ioremap (http://marc.info/?l=linux-omap&m=126324914710445&w=2). DSPBRIDGE: Use _IOxx macro to define ioctls (as per Nishanth comments) - new patch: DSPBRIDGE: remove WCD_Cmd structure *v2 - dropped from the series: DSPBRIDGE: Increased DMM size to 256MB DSPBRIDGE: sysfs entry for global driver state - will be kept in bridge-pm DSPBRIDGE: Use dspbridge to initialize platform data DSPBRIDGE: change to cpufreq_register_notifier for OPP changes DSPBRIDGE: Fix header locations mach to plat - previously acked DSPBRIDGE: Remove unused hDrvObject in bridge_[open|release] Omar Ramirez Luna (7): DSPBRIDGE: replace IO_ADDRESS with ioremap DSPBRIDGE: Replace magic numbers in SSI configuration DSPBRIDGE: Mark unused ioctls as deprecated DSPBRIDGE: remove ioctl runtime check DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl DSPBRIDGE: Use _IOxx macro to define ioctls DSPBRIDGE: remove WCD_Cmd structure arch/arm/plat-omap/include/dspbridge/wcdioctl.h | 184 ++++++++++------- drivers/dsp/bridge/pmgr/wcd.c | 250 ++++++++++++++--------- drivers/dsp/bridge/rmgr/drv_interface.c | 3 - drivers/dsp/bridge/services/clk.c | 27 ++- 4 files changed, 274 insertions(+), 190 deletions(-) CC: Nishanth Menon <nm@ti.com> CC: Hiroshi Doyu <Hiroshi.DOYU@nokia.com> CC: Ameya Palande <ameya.palande@nokia.com> CC: Felipe Contreras <felipe.contreras@gmail.com> ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap 2010-01-12 1:00 [PATCH v3 0/7] misc patches (for ioctl and ssi) Omar Ramirez Luna @ 2010-01-12 1:00 ` Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration Omar Ramirez Luna 2010-01-13 23:57 ` [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap Ramirez Luna, Omar 2010-01-15 13:06 ` [PATCH v3 0/7] misc patches (for ioctl and ssi) Ameya Palande 1 sibling, 2 replies; 18+ messages in thread From: Omar Ramirez Luna @ 2010-01-12 1:00 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Tony Lindgren, Nishanth Menon, Hiroshi Doyu, Ameya Palande, Felipe Contreras Use ioremap() instead of using IO_ADDRESS macro to make it generic. Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> CC: Tony Lindgren <tony@atomide.com> CC: Nishanth Menon <nm@ti.com> CC: Hiroshi Doyu <Hiroshi.DOYU@nokia.com> CC: Ameya Palande <ameya.palande@nokia.com> CC: Felipe Contreras <felipe.contreras@gmail.com> --- drivers/dsp/bridge/services/clk.c | 19 +++++++++++++------ 1 files changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/dsp/bridge/services/clk.c b/drivers/dsp/bridge/services/clk.c index d1c68fc..21a61d8 100644 --- a/drivers/dsp/bridge/services/clk.c +++ b/drivers/dsp/bridge/services/clk.c @@ -54,10 +54,9 @@ typedef volatile unsigned long REG_UWORD32; -#define SSI_Base 0x48058000 - -#define SSI_BASE IO_ADDRESS(SSI_Base) - +#define OMAP_SSI_OFFSET 0x58000 +#define OMAP_SSI_SIZE 0x1000 +#define OMAP_SSI_SYSCONFIG_OFFSET 0x10 struct SERVICES_Clk_t { struct clk *clk_handle; @@ -355,7 +354,13 @@ s32 CLK_Get_UseCnt(IN enum SERVICES_ClkId clk_id) void SSI_Clk_Prepare(bool FLAG) { u32 ssi_sysconfig; - ssi_sysconfig = __raw_readl((SSI_BASE) + 0x10); + void __iomem *ssi_base; + + ssi_base = ioremap(L4_34XX_BASE + OMAP_SSI_OFFSET, OMAP_SSI_SIZE); + if (!ssi_base) { + pr_err("%s: error, SSI not configured\n", __func__); + return; + } if (FLAG) { /* Set Autoidle, SIDLEMode to smart idle, and MIDLEmode to @@ -368,5 +373,7 @@ void SSI_Clk_Prepare(bool FLAG) */ ssi_sysconfig = 0x1; } - __raw_writel((u32)ssi_sysconfig, SSI_BASE + 0x10); + + __raw_writel(ssi_sysconfig, ssi_base + OMAP_SSI_SYSCONFIG_OFFSET); + iounmap(ssi_base); } -- 1.6.2.4 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration 2010-01-12 1:00 ` [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap Omar Ramirez Luna @ 2010-01-12 1:00 ` Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated Omar Ramirez Luna 2010-01-14 0:22 ` [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration Ramirez Luna, Omar 2010-01-13 23:57 ` [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap Ramirez Luna, Omar 1 sibling, 2 replies; 18+ messages in thread From: Omar Ramirez Luna @ 2010-01-12 1:00 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishanth Menon, Hiroshi Doyu, Ameya Palande, Felipe Contreras Rename ssi_sysconfig variable and replace the usage of magic numbers while updating SSI configuration. Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> CC: Nishanth Menon <nm@ti.com> CC: Hiroshi Doyu <Hiroshi.DOYU@nokia.com> CC: Ameya Palande <ameya.palande@nokia.com> CC: Felipe Contreras <felipe.contreras@gmail.com> --- drivers/dsp/bridge/services/clk.c | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/dsp/bridge/services/clk.c b/drivers/dsp/bridge/services/clk.c index 21a61d8..d6b2259 100644 --- a/drivers/dsp/bridge/services/clk.c +++ b/drivers/dsp/bridge/services/clk.c @@ -58,6 +58,10 @@ typedef volatile unsigned long REG_UWORD32; #define OMAP_SSI_SIZE 0x1000 #define OMAP_SSI_SYSCONFIG_OFFSET 0x10 +#define SSI_AUTOIDLE (1 << 0) +#define SSI_SIDLE_SMARTIDLE (2 << 3) +#define SSI_MIDLE_NOIDLE (1 << 12) + struct SERVICES_Clk_t { struct clk *clk_handle; const char *clk_name; @@ -353,8 +357,8 @@ s32 CLK_Get_UseCnt(IN enum SERVICES_ClkId clk_id) void SSI_Clk_Prepare(bool FLAG) { - u32 ssi_sysconfig; void __iomem *ssi_base; + unsigned int value; ssi_base = ioremap(L4_34XX_BASE + OMAP_SSI_OFFSET, OMAP_SSI_SIZE); if (!ssi_base) { @@ -366,14 +370,14 @@ void SSI_Clk_Prepare(bool FLAG) /* Set Autoidle, SIDLEMode to smart idle, and MIDLEmode to * no idle */ - ssi_sysconfig = 0x1011; + value = SSI_AUTOIDLE | SSI_SIDLE_SMARTIDLE | SSI_MIDLE_NOIDLE; } else { /* Set Autoidle, SIDLEMode to forced idle, and MIDLEmode to * forced idle */ - ssi_sysconfig = 0x1; + value = SSI_AUTOIDLE; } - __raw_writel(ssi_sysconfig, ssi_base + OMAP_SSI_SYSCONFIG_OFFSET); + __raw_writel(value, ssi_base + OMAP_SSI_SYSCONFIG_OFFSET); iounmap(ssi_base); } -- 1.6.2.4 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated 2010-01-12 1:00 ` [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration Omar Ramirez Luna @ 2010-01-12 1:00 ` Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check Omar Ramirez Luna 2010-01-14 0:23 ` [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated Ramirez Luna, Omar 2010-01-14 0:22 ` [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration Ramirez Luna, Omar 1 sibling, 2 replies; 18+ messages in thread From: Omar Ramirez Luna @ 2010-01-12 1:00 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishanth Menon, Hiroshi Doyu, Ameya Palande, Felipe Contreras Mark unused ioctls as deprecated for future removal and print an error message whenever they are used. Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> CC: Nishanth Menon <nm@ti.com> CC: Hiroshi Doyu <Hiroshi.DOYU@nokia.com> CC: Ameya Palande <ameya.palande@nokia.com> CC: Felipe Contreras <felipe.contreras@gmail.com> --- arch/arm/plat-omap/include/dspbridge/wcdioctl.h | 11 ++++-- drivers/dsp/bridge/pmgr/wcd.c | 38 +++++++++-------------- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/arch/arm/plat-omap/include/dspbridge/wcdioctl.h b/arch/arm/plat-omap/include/dspbridge/wcdioctl.h index 04b13ab..4b9dd0a 100644 --- a/arch/arm/plat-omap/include/dspbridge/wcdioctl.h +++ b/arch/arm/plat-omap/include/dspbridge/wcdioctl.h @@ -439,6 +439,8 @@ union Trapped_Args { #define CMD_BASE 1 +/* TODO: Remove deprecated and not implemented */ + /* MGR module offsets */ #define CMD_MGR_BASE_OFFSET CMD_BASE #define CMD_MGR_ENUMNODE_INFO_OFFSET (CMD_MGR_BASE_OFFSET + 0) @@ -448,7 +450,7 @@ union Trapped_Args { #define CMD_MGR_WAIT_OFFSET (CMD_MGR_BASE_OFFSET + 4) #ifndef RES_CLEANUP_DISABLE -#define CMD_MGR_RESOUCES_OFFSET (CMD_MGR_BASE_OFFSET + 5) +#define CMD_MGR_RESOUCES_OFFSET (CMD_MGR_BASE_OFFSET + 5) /* Deprecated */ #define CMD_MGR_END_OFFSET CMD_MGR_RESOUCES_OFFSET #else #define CMD_MGR_END_OFFSET CMD_MGR_WAIT_OFFSET @@ -457,7 +459,7 @@ union Trapped_Args { #define CMD_PROC_BASE_OFFSET (CMD_MGR_END_OFFSET + 1) #define CMD_PROC_ATTACH_OFFSET (CMD_PROC_BASE_OFFSET + 0) #define CMD_PROC_CTRL_OFFSET (CMD_PROC_BASE_OFFSET + 1) -#define CMD_PROC_DETACH_OFFSET (CMD_PROC_BASE_OFFSET + 2) +#define CMD_PROC_DETACH_OFFSET (CMD_PROC_BASE_OFFSET + 2) /* Deprecated */ #define CMD_PROC_ENUMNODE_OFFSET (CMD_PROC_BASE_OFFSET + 3) #define CMD_PROC_ENUMRESOURCES_OFFSET (CMD_PROC_BASE_OFFSET + 4) #define CMD_PROC_GETSTATE_OFFSET (CMD_PROC_BASE_OFFSET + 5) @@ -497,6 +499,7 @@ union Trapped_Args { #define CMD_STRM_ALLOCATEBUFFER_OFFSET (CMD_STRM_BASE_OFFSET + 0) #define CMD_STRM_CLOSE_OFFSET (CMD_STRM_BASE_OFFSET + 1) #define CMD_STRM_FREEBUFFER_OFFSET (CMD_STRM_BASE_OFFSET + 2) +/* Not Impl'd */ #define CMD_STRM_GETEVENTHANDLE_OFFSET (CMD_STRM_BASE_OFFSET + 3) #define CMD_STRM_GETINFO_OFFSET (CMD_STRM_BASE_OFFSET + 4) #define CMD_STRM_IDLE_OFFSET (CMD_STRM_BASE_OFFSET + 5) @@ -509,8 +512,8 @@ union Trapped_Args { /* Communication Memory Manager (UCMM) */ #define CMD_CMM_BASE_OFFSET (CMD_STRM_END_OFFSET + 1) -#define CMD_CMM_ALLOCBUF_OFFSET (CMD_CMM_BASE_OFFSET + 0) -#define CMD_CMM_FREEBUF_OFFSET (CMD_CMM_BASE_OFFSET + 1) +#define CMD_CMM_ALLOCBUF_OFFSET (CMD_CMM_BASE_OFFSET + 0) /* Not Impl'd */ +#define CMD_CMM_FREEBUF_OFFSET (CMD_CMM_BASE_OFFSET + 1) /* Not Impl'd */ #define CMD_CMM_GETHANDLE_OFFSET (CMD_CMM_BASE_OFFSET + 2) #define CMD_CMM_GETINFO_OFFSET (CMD_CMM_BASE_OFFSET + 3) #define CMD_CMM_END_OFFSET CMD_CMM_GETINFO_OFFSET diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c index 7226b5a..f95980b 100644 --- a/drivers/dsp/bridge/pmgr/wcd.c +++ b/drivers/dsp/bridge/pmgr/wcd.c @@ -456,6 +456,8 @@ DSP_STATUS WCD_InitComplete2(void) return status; } +/* TODO: Remove deprecated and not implemented ioctl wrappers */ + /* * ======== MGRWRAP_EnumNode_Info ======== */ @@ -634,21 +636,11 @@ u32 MGRWRAP_WaitForBridgeEvents(union Trapped_Args *args, void *pr_ctxt) /* * ======== MGRWRAP_GetProcessResourceInfo ======== */ -u32 MGRWRAP_GetProcessResourcesInfo(union Trapped_Args *args, void *pr_ctxt) +u32 __deprecated MGRWRAP_GetProcessResourcesInfo(union Trapped_Args *args, + void *pr_ctxt) { - DSP_STATUS status = DSP_SOK; - u32 uSize = 0; - u8 *pBuf = MEM_Alloc(8092, MEM_NONPAGED); - GT_1trace(WCD_debugMask, GT_ENTER, - "MGRWRAP_GetProcessResourcesInfo:uSize=%d :\n", uSize); - cp_to_usr(args->ARGS_PROC_GETTRACE.pBuf, pBuf, status, uSize); - GT_0trace(WCD_debugMask, GT_ENTER, "\n***********" - "123MGRWRAP_GetProcessResourcesInfo:**************\n"); - GT_0trace(WCD_debugMask, GT_ENTER, "\n***********" - "456MGRWRAP_GetProcessResourcesInfo:**************\n"); - cp_to_usr(args->ARGS_PROC_GETTRACE.pSize, &uSize, status, 1); - MEM_Free(pBuf); - return status; + pr_err("%s: deprecated dspbridge ioctl\n", __func__); + return DSP_SOK; } #endif @@ -732,14 +724,10 @@ func_end: /* * ======== PROCWRAP_Detach ======== */ -u32 PROCWRAP_Detach(union Trapped_Args *args, void *pr_ctxt) +u32 __deprecated PROCWRAP_Detach(union Trapped_Args *args, void *pr_ctxt) { - GT_1trace(WCD_debugMask, GT_ENTER, - "PROCWRAP_Detach: entered args\n0x%x " - "hProceesor \n", args->ARGS_PROC_DETACH.hProcessor); - /* PROC_Detach called at bridge_release only */ - + pr_err("%s: deprecated dspbridge ioctl\n", __func__); return DSP_SOK; } @@ -1540,8 +1528,10 @@ u32 STRMWRAP_FreeBuffer(union Trapped_Args *args, void *pr_ctxt) /* * ======== STRMWRAP_GetEventHandle ======== */ -u32 STRMWRAP_GetEventHandle(union Trapped_Args *args, void *pr_ctxt) +u32 __deprecated STRMWRAP_GetEventHandle(union Trapped_Args *args, + void *pr_ctxt) { + pr_err("%s: deprecated dspbridge ioctl\n", __func__); return DSP_ENOTIMPL; } @@ -1703,18 +1693,20 @@ u32 STRMWRAP_Select(union Trapped_Args *args, void *pr_ctxt) /* * ======== CMMWRAP_CallocBuf ======== */ -u32 CMMWRAP_CallocBuf(union Trapped_Args *args, void *pr_ctxt) +u32 __deprecated CMMWRAP_CallocBuf(union Trapped_Args *args, void *pr_ctxt) { /* This operation is done in kernel */ + pr_err("%s: deprecated dspbridge ioctl\n", __func__); return DSP_ENOTIMPL; } /* * ======== CMMWRAP_FreeBuf ======== */ -u32 CMMWRAP_FreeBuf(union Trapped_Args *args, void *pr_ctxt) +u32 __deprecated CMMWRAP_FreeBuf(union Trapped_Args *args, void *pr_ctxt) { /* This operation is done in kernel */ + pr_err("%s: deprecated dspbridge ioctl\n", __func__); return DSP_ENOTIMPL; } -- 1.6.2.4 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check 2010-01-12 1:00 ` [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated Omar Ramirez Luna @ 2010-01-12 1:00 ` Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Omar Ramirez Luna 2010-01-14 0:23 ` [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check Ramirez Luna, Omar 2010-01-14 0:23 ` [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated Ramirez Luna, Omar 1 sibling, 2 replies; 18+ messages in thread From: Omar Ramirez Luna @ 2010-01-12 1:00 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishanth Menon, Hiroshi Doyu, Ameya Palande, Felipe Contreras This patch removes the runtime check of device ioctl array. Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> CC: Nishanth Menon <nm@ti.com> CC: Hiroshi Doyu <Hiroshi.DOYU@nokia.com> CC: Ameya Palande <ameya.palande@nokia.com> CC: Felipe Contreras <felipe.contreras@gmail.com> --- drivers/dsp/bridge/pmgr/wcd.c | 6 ------ 1 files changed, 0 insertions(+), 6 deletions(-) diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c index f95980b..960b3cb 100644 --- a/drivers/dsp/bridge/pmgr/wcd.c +++ b/drivers/dsp/bridge/pmgr/wcd.c @@ -321,13 +321,7 @@ bool WCD_Init(void) bool fInit = true; bool fDRV, fDEV, fCOD, fSERVICES, fCHNL, fMSG, fIO; bool fMGR, fPROC, fNODE, fDISP, fNTFY, fSTRM, fRMM; -#ifdef DEBUG - /* runtime check of Device IOCtl array. */ - u32 i; - for (i = 1; i < ARRAY_SIZE(WCD_cmdTable); i++) - DBC_Assert(WCD_cmdTable[i - 1].dwIndex == i); -#endif if (WCD_cRefs == 0) { /* initialize all SERVICES modules */ fSERVICES = SERVICES_Init(); -- 1.6.2.4 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl 2010-01-12 1:00 ` [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check Omar Ramirez Luna @ 2010-01-12 1:00 ` Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls Omar Ramirez Luna 2010-01-14 0:23 ` [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Ramirez Luna, Omar 2010-01-14 0:23 ` [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check Ramirez Luna, Omar 1 sibling, 2 replies; 18+ messages in thread From: Omar Ramirez Luna @ 2010-01-12 1:00 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishanth Menon, Hiroshi Doyu, Ameya Palande, Felipe Contreras Trivial cleanup, rename pResult to result for WCD_CallDevIOCtl Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> CC: Nishanth Menon <nm@ti.com> CC: Hiroshi Doyu <Hiroshi.DOYU@nokia.com> CC: Ameya Palande <ameya.palande@nokia.com> CC: Felipe Contreras <felipe.contreras@gmail.com> --- drivers/dsp/bridge/pmgr/wcd.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c index 960b3cb..02def74 100644 --- a/drivers/dsp/bridge/pmgr/wcd.c +++ b/drivers/dsp/bridge/pmgr/wcd.c @@ -271,11 +271,11 @@ static inline void __cp_to_usr(void __user *to, const void *from, * Call the (wrapper) function for the corresponding WCD IOCTL. */ inline DSP_STATUS WCD_CallDevIOCtl(u32 cmd, union Trapped_Args *args, - u32 *pResult, void *pr_ctxt) + u32 *result, void *pr_ctxt) { if (cmd < ARRAY_SIZE(WCD_cmdTable)) { /* make the fxn call via the cmd table */ - *pResult = (*WCD_cmdTable[cmd].fxn) (args, pr_ctxt); + *result = (*WCD_cmdTable[cmd].fxn) (args, pr_ctxt); return DSP_SOK; } -- 1.6.2.4 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls 2010-01-12 1:00 ` [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Omar Ramirez Luna @ 2010-01-12 1:00 ` Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 7/7] DSPBRIDGE: remove WCD_Cmd structure Omar Ramirez Luna ` (2 more replies) 2010-01-14 0:23 ` [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Ramirez Luna, Omar 1 sibling, 3 replies; 18+ messages in thread From: Omar Ramirez Luna @ 2010-01-12 1:00 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishanth Menon, Hiroshi Doyu, Ameya Palande, Felipe Contreras - Use standard convention to define ioctls. Currently 0xDB is used as identifier for dspbridge. Discussion: http://marc.info/?l=linux-omap&m=126297631603035&w=2 WARNING: An update in api ioctl definitions is required, usually replacing to a new libbridge (with ioctl patch) should be enough. Other clients (not using libbridge) need to update their ioctl numbers manually. Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> CC: Nishanth Menon <nm@ti.com> CC: Hiroshi Doyu <Hiroshi.DOYU@nokia.com> CC: Ameya Palande <ameya.palande@nokia.com> CC: Felipe Contreras <felipe.contreras@gmail.com> --- arch/arm/plat-omap/include/dspbridge/wcdioctl.h | 181 ++++++++++++--------- drivers/dsp/bridge/pmgr/wcd.c | 200 +++++++++++++++-------- drivers/dsp/bridge/rmgr/drv_interface.c | 3 - 3 files changed, 237 insertions(+), 147 deletions(-) diff --git a/arch/arm/plat-omap/include/dspbridge/wcdioctl.h b/arch/arm/plat-omap/include/dspbridge/wcdioctl.h index 4b9dd0a..656d56b 100644 --- a/arch/arm/plat-omap/include/dspbridge/wcdioctl.h +++ b/arch/arm/plat-omap/include/dspbridge/wcdioctl.h @@ -437,86 +437,109 @@ union Trapped_Args { } ARGS_UTIL_TESTDLL; } ; -#define CMD_BASE 1 +/* + * Dspbridge Ioctl numbering scheme + * + * 7 0 + * --------------------------------- + * | Module | Ioctl Number | + * --------------------------------- + * | x | x | x | 0 | 0 | 0 | 0 | 0 | + * --------------------------------- + */ + +/* Ioctl driver identifier */ +#define DB 0xDB + +/* + * Following are used to distinguish between module ioctls, this is needed + * in case new ioctls are introduced. + */ +#define DB_MODULE_MASK 0xE0 +#define DB_IOC_MASK 0x1F + +/* Ioctl module masks */ +#define DB_MGR 0x0 +#define DB_PROC 0x20 +#define DB_NODE 0x40 +#define DB_STRM 0x60 +#define DB_CMM 0x80 + +#define DB_MODULE_SHIFT 5 + +/* Used to calculate the ioctl per dspbridge module */ +#define DB_IOC(module, num) \ + (((module) & DB_MODULE_MASK) | ((num) & DB_IOC_MASK)) +/* Used to get dspbridge ioctl module */ +#define DB_GET_MODULE(cmd) ((cmd) & DB_MODULE_MASK) +/* Used to get dspbridge ioctl number */ +#define DB_GET_IOC(cmd) ((cmd) & DB_IOC_MASK) /* TODO: Remove deprecated and not implemented */ -/* MGR module offsets */ -#define CMD_MGR_BASE_OFFSET CMD_BASE -#define CMD_MGR_ENUMNODE_INFO_OFFSET (CMD_MGR_BASE_OFFSET + 0) -#define CMD_MGR_ENUMPROC_INFO_OFFSET (CMD_MGR_BASE_OFFSET + 1) -#define CMD_MGR_REGISTEROBJECT_OFFSET (CMD_MGR_BASE_OFFSET + 2) -#define CMD_MGR_UNREGISTEROBJECT_OFFSET (CMD_MGR_BASE_OFFSET + 3) -#define CMD_MGR_WAIT_OFFSET (CMD_MGR_BASE_OFFSET + 4) - -#ifndef RES_CLEANUP_DISABLE -#define CMD_MGR_RESOUCES_OFFSET (CMD_MGR_BASE_OFFSET + 5) /* Deprecated */ -#define CMD_MGR_END_OFFSET CMD_MGR_RESOUCES_OFFSET -#else -#define CMD_MGR_END_OFFSET CMD_MGR_WAIT_OFFSET -#endif - -#define CMD_PROC_BASE_OFFSET (CMD_MGR_END_OFFSET + 1) -#define CMD_PROC_ATTACH_OFFSET (CMD_PROC_BASE_OFFSET + 0) -#define CMD_PROC_CTRL_OFFSET (CMD_PROC_BASE_OFFSET + 1) -#define CMD_PROC_DETACH_OFFSET (CMD_PROC_BASE_OFFSET + 2) /* Deprecated */ -#define CMD_PROC_ENUMNODE_OFFSET (CMD_PROC_BASE_OFFSET + 3) -#define CMD_PROC_ENUMRESOURCES_OFFSET (CMD_PROC_BASE_OFFSET + 4) -#define CMD_PROC_GETSTATE_OFFSET (CMD_PROC_BASE_OFFSET + 5) -#define CMD_PROC_GETTRACE_OFFSET (CMD_PROC_BASE_OFFSET + 6) -#define CMD_PROC_LOAD_OFFSET (CMD_PROC_BASE_OFFSET + 7) -#define CMD_PROC_REGISTERNOTIFY_OFFSET (CMD_PROC_BASE_OFFSET + 8) -#define CMD_PROC_START_OFFSET (CMD_PROC_BASE_OFFSET + 9) -#define CMD_PROC_RSVMEM_OFFSET (CMD_PROC_BASE_OFFSET + 10) -#define CMD_PROC_UNRSVMEM_OFFSET (CMD_PROC_BASE_OFFSET + 11) -#define CMD_PROC_MAPMEM_OFFSET (CMD_PROC_BASE_OFFSET + 12) -#define CMD_PROC_UNMAPMEM_OFFSET (CMD_PROC_BASE_OFFSET + 13) -#define CMD_PROC_FLUSHMEMORY_OFFSET (CMD_PROC_BASE_OFFSET + 14) -#define CMD_PROC_STOP_OFFSET (CMD_PROC_BASE_OFFSET + 15) -#define CMD_PROC_INVALIDATEMEMORY_OFFSET (CMD_PROC_BASE_OFFSET + 16) -#define CMD_PROC_END_OFFSET CMD_PROC_INVALIDATEMEMORY_OFFSET - - -#define CMD_NODE_BASE_OFFSET (CMD_PROC_END_OFFSET + 1) -#define CMD_NODE_ALLOCATE_OFFSET (CMD_NODE_BASE_OFFSET + 0) -#define CMD_NODE_ALLOCMSGBUF_OFFSET (CMD_NODE_BASE_OFFSET + 1) -#define CMD_NODE_CHANGEPRIORITY_OFFSET (CMD_NODE_BASE_OFFSET + 2) -#define CMD_NODE_CONNECT_OFFSET (CMD_NODE_BASE_OFFSET + 3) -#define CMD_NODE_CREATE_OFFSET (CMD_NODE_BASE_OFFSET + 4) -#define CMD_NODE_DELETE_OFFSET (CMD_NODE_BASE_OFFSET + 5) -#define CMD_NODE_FREEMSGBUF_OFFSET (CMD_NODE_BASE_OFFSET + 6) -#define CMD_NODE_GETATTR_OFFSET (CMD_NODE_BASE_OFFSET + 7) -#define CMD_NODE_GETMESSAGE_OFFSET (CMD_NODE_BASE_OFFSET + 8) -#define CMD_NODE_PAUSE_OFFSET (CMD_NODE_BASE_OFFSET + 9) -#define CMD_NODE_PUTMESSAGE_OFFSET (CMD_NODE_BASE_OFFSET + 10) -#define CMD_NODE_REGISTERNOTIFY_OFFSET (CMD_NODE_BASE_OFFSET + 11) -#define CMD_NODE_RUN_OFFSET (CMD_NODE_BASE_OFFSET + 12) -#define CMD_NODE_TERMINATE_OFFSET (CMD_NODE_BASE_OFFSET + 13) -#define CMD_NODE_GETUUIDPROPS_OFFSET (CMD_NODE_BASE_OFFSET + 14) -#define CMD_NODE_END_OFFSET CMD_NODE_GETUUIDPROPS_OFFSET - -#define CMD_STRM_BASE_OFFSET (CMD_NODE_END_OFFSET + 1) -#define CMD_STRM_ALLOCATEBUFFER_OFFSET (CMD_STRM_BASE_OFFSET + 0) -#define CMD_STRM_CLOSE_OFFSET (CMD_STRM_BASE_OFFSET + 1) -#define CMD_STRM_FREEBUFFER_OFFSET (CMD_STRM_BASE_OFFSET + 2) -/* Not Impl'd */ -#define CMD_STRM_GETEVENTHANDLE_OFFSET (CMD_STRM_BASE_OFFSET + 3) -#define CMD_STRM_GETINFO_OFFSET (CMD_STRM_BASE_OFFSET + 4) -#define CMD_STRM_IDLE_OFFSET (CMD_STRM_BASE_OFFSET + 5) -#define CMD_STRM_ISSUE_OFFSET (CMD_STRM_BASE_OFFSET + 6) -#define CMD_STRM_OPEN_OFFSET (CMD_STRM_BASE_OFFSET + 7) -#define CMD_STRM_RECLAIM_OFFSET (CMD_STRM_BASE_OFFSET + 8) -#define CMD_STRM_REGISTERNOTIFY_OFFSET (CMD_STRM_BASE_OFFSET + 9) -#define CMD_STRM_SELECT_OFFSET (CMD_STRM_BASE_OFFSET + 10) -#define CMD_STRM_END_OFFSET CMD_STRM_SELECT_OFFSET - -/* Communication Memory Manager (UCMM) */ -#define CMD_CMM_BASE_OFFSET (CMD_STRM_END_OFFSET + 1) -#define CMD_CMM_ALLOCBUF_OFFSET (CMD_CMM_BASE_OFFSET + 0) /* Not Impl'd */ -#define CMD_CMM_FREEBUF_OFFSET (CMD_CMM_BASE_OFFSET + 1) /* Not Impl'd */ -#define CMD_CMM_GETHANDLE_OFFSET (CMD_CMM_BASE_OFFSET + 2) -#define CMD_CMM_GETINFO_OFFSET (CMD_CMM_BASE_OFFSET + 3) -#define CMD_CMM_END_OFFSET CMD_CMM_GETINFO_OFFSET - -#define CMD_BASE_END_OFFSET CMD_CMM_END_OFFSET +/* MGR Module */ +#define MGR_ENUMNODE_INFO _IOWR(DB, DB_IOC(DB_MGR, 0), unsigned long) +#define MGR_ENUMPROC_INFO _IOWR(DB, DB_IOC(DB_MGR, 1), unsigned long) +#define MGR_REGISTEROBJECT _IOWR(DB, DB_IOC(DB_MGR, 2), unsigned long) +#define MGR_UNREGISTEROBJECT _IOWR(DB, DB_IOC(DB_MGR, 3), unsigned long) +#define MGR_WAIT _IOWR(DB, DB_IOC(DB_MGR, 4), unsigned long) +/* MGR_GET_PROC_RES Deprecated */ +#define MGR_GET_PROC_RES _IOR(DB, DB_IOC(DB_MGR, 5), unsigned long) + +/* PROC Module */ +#define PROC_ATTACH _IOWR(DB, DB_IOC(DB_PROC, 0), unsigned long) +#define PROC_CTRL _IOR(DB, DB_IOC(DB_PROC, 1), unsigned long) +/* PROC_DETACH Deprecated */ +#define PROC_DETACH _IOR(DB, DB_IOC(DB_PROC, 2), unsigned long) +#define PROC_ENUMNODE _IOWR(DB, DB_IOC(DB_PROC, 3), unsigned long) +#define PROC_ENUMRESOURCES _IOWR(DB, DB_IOC(DB_PROC, 4), unsigned long) +#define PROC_GET_STATE _IOWR(DB, DB_IOC(DB_PROC, 5), unsigned long) +#define PROC_GET_TRACE _IOWR(DB, DB_IOC(DB_PROC, 6), unsigned long) +#define PROC_LOAD _IOW(DB, DB_IOC(DB_PROC, 7), unsigned long) +#define PROC_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_PROC, 8), unsigned long) +#define PROC_START _IOW(DB, DB_IOC(DB_PROC, 9), unsigned long) +#define PROC_RSVMEM _IOWR(DB, DB_IOC(DB_PROC, 10), unsigned long) +#define PROC_UNRSVMEM _IOW(DB, DB_IOC(DB_PROC, 11), unsigned long) +#define PROC_MAPMEM _IOWR(DB, DB_IOC(DB_PROC, 12), unsigned long) +#define PROC_UNMAPMEM _IOR(DB, DB_IOC(DB_PROC, 13), unsigned long) +#define PROC_FLUSHMEMORY _IOW(DB, DB_IOC(DB_PROC, 14), unsigned long) +#define PROC_STOP _IOWR(DB, DB_IOC(DB_PROC, 15), unsigned long) +#define PROC_INVALIDATEMEMORY _IOW(DB, DB_IOC(DB_PROC, 16), unsigned long) + +/* NODE Module */ +#define NODE_ALLOCATE _IOWR(DB, DB_IOC(DB_NODE, 0), unsigned long) +#define NODE_ALLOCMSGBUF _IOWR(DB, DB_IOC(DB_NODE, 1), unsigned long) +#define NODE_CHANGEPRIORITY _IOW(DB, DB_IOC(DB_NODE, 2), unsigned long) +#define NODE_CONNECT _IOW(DB, DB_IOC(DB_NODE, 3), unsigned long) +#define NODE_CREATE _IOW(DB, DB_IOC(DB_NODE, 4), unsigned long) +#define NODE_DELETE _IOW(DB, DB_IOC(DB_NODE, 5), unsigned long) +#define NODE_FREEMSGBUF _IOW(DB, DB_IOC(DB_NODE, 6), unsigned long) +#define NODE_GETATTR _IOWR(DB, DB_IOC(DB_NODE, 7), unsigned long) +#define NODE_GETMESSAGE _IOWR(DB, DB_IOC(DB_NODE, 8), unsigned long) +#define NODE_PAUSE _IOW(DB, DB_IOC(DB_NODE, 9), unsigned long) +#define NODE_PUTMESSAGE _IOW(DB, DB_IOC(DB_NODE, 10), unsigned long) +#define NODE_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_NODE, 11), unsigned long) +#define NODE_RUN _IOW(DB, DB_IOC(DB_NODE, 12), unsigned long) +#define NODE_TERMINATE _IOWR(DB, DB_IOC(DB_NODE, 13), unsigned long) +#define NODE_GETUUIDPROPS _IOWR(DB, DB_IOC(DB_NODE, 14), unsigned long) + +/* STRM Module */ +#define STRM_ALLOCATEBUFFER _IOWR(DB, DB_IOC(DB_STRM, 0), unsigned long) +#define STRM_CLOSE _IOW(DB, DB_IOC(DB_STRM, 1), unsigned long) +#define STRM_FREEBUFFER _IOWR(DB, DB_IOC(DB_STRM, 2), unsigned long) +#define STRM_GETEVENTHANDLE _IO(DB, DB_IOC(DB_STRM, 3)) /* Not Impl'd */ +#define STRM_GETINFO _IOWR(DB, DB_IOC(DB_STRM, 4), unsigned long) +#define STRM_IDLE _IOW(DB, DB_IOC(DB_STRM, 5), unsigned long) +#define STRM_ISSUE _IOW(DB, DB_IOC(DB_STRM, 6), unsigned long) +#define STRM_OPEN _IOWR(DB, DB_IOC(DB_STRM, 7), unsigned long) +#define STRM_RECLAIM _IOWR(DB, DB_IOC(DB_STRM, 8), unsigned long) +#define STRM_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_STRM, 9), unsigned long) +#define STRM_SELECT _IOWR(DB, DB_IOC(DB_STRM, 10), unsigned long) + +/* CMM Module */ +#define CMM_ALLOCBUF _IO(DB, DB_IOC(DB_CMM, 0)) /* Not Impl'd */ +#define CMM_FREEBUF _IO(DB, DB_IOC(DB_CMM, 1)) /* Not Impl'd */ +#define CMM_GETHANDLE _IOR(DB, DB_IOC(DB_CMM, 2), unsigned long) +#define CMM_GETINFO _IOR(DB, DB_IOC(DB_CMM, 3), unsigned long) + #endif /* WCDIOCTL_ */ diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c index 02def74..27e8e8e 100644 --- a/drivers/dsp/bridge/pmgr/wcd.c +++ b/drivers/dsp/bridge/pmgr/wcd.c @@ -144,6 +144,9 @@ #define MAX_STREAMS 16 #define MAX_BUFS 64 +/* Used to get dspbridge ioctl table */ +#define DB_GET_IOC_TABLE(cmd) (DB_GET_MODULE(cmd) >> DB_MODULE_SHIFT) + /* Device IOCtl function pointer */ struct WCD_Cmd { u32(*fxn)(union Trapped_Args *args, void *pr_ctxt); @@ -157,72 +160,96 @@ static struct GT_Mask WCD_debugMask = { NULL, NULL }; /* Core VxD Mask */ static u32 WCD_cRefs; /* - * Function table. + * Function tables. * The order of these functions MUST be the same as the order of the command * numbers defined in wcdioctl.h This is how an IOCTL number in user mode * turns into a function call in kernel mode. */ -static struct WCD_Cmd WCD_cmdTable[] = { - /* MGR module */ - {MGRWRAP_EnumNode_Info, CMD_MGR_ENUMNODE_INFO_OFFSET}, - {MGRWRAP_EnumProc_Info, CMD_MGR_ENUMPROC_INFO_OFFSET}, - {MGRWRAP_RegisterObject, CMD_MGR_REGISTEROBJECT_OFFSET}, - {MGRWRAP_UnregisterObject, CMD_MGR_UNREGISTEROBJECT_OFFSET}, - {MGRWRAP_WaitForBridgeEvents, CMD_MGR_WAIT_OFFSET}, + +/* MGR wrapper functions */ +static struct WCD_Cmd mgr_cmd[] = { + {MGRWRAP_EnumNode_Info}, /* MGR_ENUMNODE_INFO */ + {MGRWRAP_EnumProc_Info}, /* MGR_ENUMPROC_INFO */ + {MGRWRAP_RegisterObject}, /* MGR_REGISTEROBJECT */ + {MGRWRAP_UnregisterObject}, /* MGR_UNREGISTEROBJECT */ + {MGRWRAP_WaitForBridgeEvents}, /* MGR_WAIT */ #ifndef RES_CLEANUP_DISABLE - {MGRWRAP_GetProcessResourcesInfo, CMD_MGR_RESOUCES_OFFSET}, + {MGRWRAP_GetProcessResourcesInfo}, /* MGR_GET_PROC_RES */ +#else + {NULL}, #endif - /* PROC Module */ - {PROCWRAP_Attach, CMD_PROC_ATTACH_OFFSET}, - {PROCWRAP_Ctrl, CMD_PROC_CTRL_OFFSET}, - {PROCWRAP_Detach, CMD_PROC_DETACH_OFFSET}, - {PROCWRAP_EnumNode_Info, CMD_PROC_ENUMNODE_OFFSET}, - {PROCWRAP_EnumResources, CMD_PROC_ENUMRESOURCES_OFFSET}, - {PROCWRAP_GetState, CMD_PROC_GETSTATE_OFFSET}, - {PROCWRAP_GetTrace, CMD_PROC_GETTRACE_OFFSET}, - {PROCWRAP_Load, CMD_PROC_LOAD_OFFSET}, - {PROCWRAP_RegisterNotify, CMD_PROC_REGISTERNOTIFY_OFFSET}, - {PROCWRAP_Start, CMD_PROC_START_OFFSET}, - {PROCWRAP_ReserveMemory, CMD_PROC_RSVMEM_OFFSET}, - {PROCWRAP_UnReserveMemory, CMD_PROC_UNRSVMEM_OFFSET}, - {PROCWRAP_Map, CMD_PROC_MAPMEM_OFFSET}, - {PROCWRAP_UnMap, CMD_PROC_UNMAPMEM_OFFSET}, - {PROCWRAP_FlushMemory, CMD_PROC_FLUSHMEMORY_OFFSET}, - {PROCWRAP_Stop, CMD_PROC_STOP_OFFSET}, - {PROCWRAP_InvalidateMemory, CMD_PROC_INVALIDATEMEMORY_OFFSET}, - /* NODE Module */ - {NODEWRAP_Allocate, CMD_NODE_ALLOCATE_OFFSET}, - {NODEWRAP_AllocMsgBuf, CMD_NODE_ALLOCMSGBUF_OFFSET}, - {NODEWRAP_ChangePriority, CMD_NODE_CHANGEPRIORITY_OFFSET}, - {NODEWRAP_Connect, CMD_NODE_CONNECT_OFFSET}, - {NODEWRAP_Create, CMD_NODE_CREATE_OFFSET}, - {NODEWRAP_Delete, CMD_NODE_DELETE_OFFSET}, - {NODEWRAP_FreeMsgBuf, CMD_NODE_FREEMSGBUF_OFFSET}, - {NODEWRAP_GetAttr, CMD_NODE_GETATTR_OFFSET}, - {NODEWRAP_GetMessage, CMD_NODE_GETMESSAGE_OFFSET}, - {NODEWRAP_Pause, CMD_NODE_PAUSE_OFFSET}, - {NODEWRAP_PutMessage, CMD_NODE_PUTMESSAGE_OFFSET}, - {NODEWRAP_RegisterNotify, CMD_NODE_REGISTERNOTIFY_OFFSET}, - {NODEWRAP_Run, CMD_NODE_RUN_OFFSET}, - {NODEWRAP_Terminate, CMD_NODE_TERMINATE_OFFSET}, - {NODEWRAP_GetUUIDProps, CMD_NODE_GETUUIDPROPS_OFFSET}, - /* STRM wrapper functions */ - {STRMWRAP_AllocateBuffer, CMD_STRM_ALLOCATEBUFFER_OFFSET}, - {STRMWRAP_Close, CMD_STRM_CLOSE_OFFSET}, - {STRMWRAP_FreeBuffer, CMD_STRM_FREEBUFFER_OFFSET}, - {STRMWRAP_GetEventHandle, CMD_STRM_GETEVENTHANDLE_OFFSET}, - {STRMWRAP_GetInfo, CMD_STRM_GETINFO_OFFSET}, - {STRMWRAP_Idle, CMD_STRM_IDLE_OFFSET}, - {STRMWRAP_Issue, CMD_STRM_ISSUE_OFFSET}, - {STRMWRAP_Open, CMD_STRM_OPEN_OFFSET}, - {STRMWRAP_Reclaim, CMD_STRM_RECLAIM_OFFSET}, - {STRMWRAP_RegisterNotify, CMD_STRM_REGISTERNOTIFY_OFFSET}, - {STRMWRAP_Select, CMD_STRM_SELECT_OFFSET}, - /* CMM module */ - {CMMWRAP_CallocBuf, CMD_CMM_ALLOCBUF_OFFSET}, - {CMMWRAP_FreeBuf, CMD_CMM_FREEBUF_OFFSET}, - {CMMWRAP_GetHandle, CMD_CMM_GETHANDLE_OFFSET}, - {CMMWRAP_GetInfo, CMD_CMM_GETINFO_OFFSET} +}; + +/* PROC wrapper functions */ +static struct WCD_Cmd proc_cmd[] = { + {PROCWRAP_Attach}, /* PROC_ATTACH */ + {PROCWRAP_Ctrl}, /* PROC_CTRL */ + {PROCWRAP_Detach}, /* PROC_DETACH */ + {PROCWRAP_EnumNode_Info}, /* PROC_ENUMNODE */ + {PROCWRAP_EnumResources}, /* PROC_ENUMRESOURCES */ + {PROCWRAP_GetState}, /* PROC_GET_STATE */ + {PROCWRAP_GetTrace}, /* PROC_GET_TRACE */ + {PROCWRAP_Load}, /* PROC_LOAD */ + {PROCWRAP_RegisterNotify}, /* PROC_REGISTERNOTIFY */ + {PROCWRAP_Start}, /* PROC_START */ + {PROCWRAP_ReserveMemory}, /* PROC_RSVMEM */ + {PROCWRAP_UnReserveMemory}, /* PROC_UNRSVMEM */ + {PROCWRAP_Map}, /* PROC_MAPMEM */ + {PROCWRAP_UnMap}, /* PROC_UNMAPMEM */ + {PROCWRAP_FlushMemory}, /* PROC_FLUSHMEMORY */ + {PROCWRAP_Stop}, /* PROC_STOP */ + {PROCWRAP_InvalidateMemory}, /* PROC_INVALIDATEMEMORY */ +}; + +/* NODE wrapper functions */ +static struct WCD_Cmd node_cmd[] = { + {NODEWRAP_Allocate}, /* NODE_ALLOCATE */ + {NODEWRAP_AllocMsgBuf}, /* NODE_ALLOCMSGBUF */ + {NODEWRAP_ChangePriority}, /* NODE_CHANGEPRIORITY */ + {NODEWRAP_Connect}, /* NODE_CONNECT */ + {NODEWRAP_Create}, /* NODE_CREATE */ + {NODEWRAP_Delete}, /* NODE_DELETE */ + {NODEWRAP_FreeMsgBuf}, /* NODE_FREEMSGBUF */ + {NODEWRAP_GetAttr}, /* NODE_GETATTR */ + {NODEWRAP_GetMessage}, /* NODE_GETMESSAGE */ + {NODEWRAP_Pause}, /* NODE_PAUSE */ + {NODEWRAP_PutMessage}, /* NODE_PUTMESSAGE */ + {NODEWRAP_RegisterNotify}, /* NODE_REGISTERNOTIFY */ + {NODEWRAP_Run}, /* NODE_RUN */ + {NODEWRAP_Terminate}, /* NODE_TERMINATE */ + {NODEWRAP_GetUUIDProps}, /* NODE_GETUUIDPROPS */ +}; + +/* STRM wrapper functions */ +static struct WCD_Cmd strm_cmd[] = { + {STRMWRAP_AllocateBuffer}, /* STRM_ALLOCATEBUFFER */ + {STRMWRAP_Close}, /* STRM_CLOSE */ + {STRMWRAP_FreeBuffer}, /* STRM_FREEBUFFER */ + {STRMWRAP_GetEventHandle}, /* STRM_GETEVENTHANDLE */ + {STRMWRAP_GetInfo}, /* STRM_GETINFO */ + {STRMWRAP_Idle}, /* STRM_IDLE */ + {STRMWRAP_Issue}, /* STRM_ISSUE */ + {STRMWRAP_Open}, /* STRM_OPEN */ + {STRMWRAP_Reclaim}, /* STRM_RECLAIM */ + {STRMWRAP_RegisterNotify}, /* STRM_REGISTERNOTIFY */ + {STRMWRAP_Select}, /* STRM_SELECT */ +}; + +/* CMM wrapper functions */ +static struct WCD_Cmd cmm_cmd[] = { + {CMMWRAP_CallocBuf}, /* CMM_ALLOCBUF */ + {CMMWRAP_FreeBuf}, /* CMM_FREEBUF */ + {CMMWRAP_GetHandle}, /* CMM_GETHANDLE */ + {CMMWRAP_GetInfo}, /* CMM_GETINFO */ +}; + +/* Array used to store ioctl table sizes. It can hold up to 8 entries */ +static short size_cmd[] = { + ARRAY_SIZE(mgr_cmd), + ARRAY_SIZE(proc_cmd), + ARRAY_SIZE(node_cmd), + ARRAY_SIZE(strm_cmd), + ARRAY_SIZE(cmm_cmd), }; static inline void __cp_fm_usr(void *to, const void __user *from, @@ -273,13 +300,56 @@ static inline void __cp_to_usr(void __user *to, const void *from, inline DSP_STATUS WCD_CallDevIOCtl(u32 cmd, union Trapped_Args *args, u32 *result, void *pr_ctxt) { - if (cmd < ARRAY_SIZE(WCD_cmdTable)) { - /* make the fxn call via the cmd table */ - *result = (*WCD_cmdTable[cmd].fxn) (args, pr_ctxt); - return DSP_SOK; + u32 (*ioctl_cmd)(union Trapped_Args *args, void *pr_ctxt) = NULL; + int i; + + if (_IOC_TYPE(cmd) != DB) { + pr_err("%s: Incompatible dspbridge ioctl number\n", __func__); + goto err; + } + + if (DB_GET_IOC_TABLE(cmd) > ARRAY_SIZE(size_cmd)) { + pr_err("%s: undefined ioctl module\n", __func__); + goto err; + } + + /* Check the size of the required cmd table */ + i = DB_GET_IOC(cmd); + if (i > size_cmd[DB_GET_IOC_TABLE(cmd)]) { + pr_err("%s: requested ioctl %d out of bounds for table %d\n", + __func__, i, DB_GET_IOC_TABLE(cmd)); + goto err; + } + + switch (DB_GET_MODULE(cmd)) { + case DB_MGR: + ioctl_cmd = mgr_cmd[i].fxn; + break; + case DB_PROC: + ioctl_cmd = proc_cmd[i].fxn; + break; + case DB_NODE: + ioctl_cmd = node_cmd[i].fxn; + break; + case DB_STRM: + ioctl_cmd = strm_cmd[i].fxn; + break; + case DB_CMM: + ioctl_cmd = cmm_cmd[i].fxn; + break; + } + + if (!ioctl_cmd) { + pr_err("%s: requested ioctl not defined\n", __func__); + goto err; + } else { + *result = (*ioctl_cmd)(args, pr_ctxt); } - return DSP_EINVALIDARG; + return DSP_SOK; + +err: + return -EINVAL; } /* diff --git a/drivers/dsp/bridge/rmgr/drv_interface.c b/drivers/dsp/bridge/rmgr/drv_interface.c index efce35d..78ecec4 100644 --- a/drivers/dsp/bridge/rmgr/drv_interface.c +++ b/drivers/dsp/bridge/rmgr/drv_interface.c @@ -611,9 +611,6 @@ static long bridge_ioctl(struct file *filp, unsigned int code, GT_0trace(driverTrace, GT_ENTER, " -> driver_ioctl\n"); - /* Deduct one for the CMD_BASE. */ - code = (code - 1); - status = copy_from_user(&pBufIn, (union Trapped_Args *)args, sizeof(union Trapped_Args)); -- 1.6.2.4 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v3 7/7] DSPBRIDGE: remove WCD_Cmd structure 2010-01-12 1:00 ` [PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls Omar Ramirez Luna @ 2010-01-12 1:00 ` Omar Ramirez Luna 2010-01-12 1:09 ` Nishanth Menon 2010-01-12 1:09 ` [RESEND][PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls Ramirez Luna, Omar 2010-01-14 0:24 ` [PATCH " Ramirez Luna, Omar 2 siblings, 1 reply; 18+ messages in thread From: Omar Ramirez Luna @ 2010-01-12 1:00 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishanth Menon, Hiroshi Doyu, Ameya Palande, Felipe Contreras Remove WCD_Cmd structure given that only one member is being used (fxn call), this structure is replaced for a definition of an array of function pointers for each dspbridge ioctl module. Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> CC: Nishanth Menon <nm@ti.com> CC: Hiroshi Doyu <Hiroshi.DOYU@nokia.com> CC: Ameya Palande <ameya.palande@nokia.com> CC: Felipe Contreras <felipe.contreras@gmail.com> --- drivers/dsp/bridge/pmgr/wcd.c | 134 +++++++++++++++++++--------------------- 1 files changed, 64 insertions(+), 70 deletions(-) diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c index 27e8e8e..37d1f8a 100644 --- a/drivers/dsp/bridge/pmgr/wcd.c +++ b/drivers/dsp/bridge/pmgr/wcd.c @@ -147,12 +147,6 @@ /* Used to get dspbridge ioctl table */ #define DB_GET_IOC_TABLE(cmd) (DB_GET_MODULE(cmd) >> DB_MODULE_SHIFT) -/* Device IOCtl function pointer */ -struct WCD_Cmd { - u32(*fxn)(union Trapped_Args *args, void *pr_ctxt); - u32 dwIndex; -} ; - /* ----------------------------------- Globals */ #if GT_TRACE static struct GT_Mask WCD_debugMask = { NULL, NULL }; /* Core VxD Mask */ @@ -167,80 +161,80 @@ static u32 WCD_cRefs; */ /* MGR wrapper functions */ -static struct WCD_Cmd mgr_cmd[] = { - {MGRWRAP_EnumNode_Info}, /* MGR_ENUMNODE_INFO */ - {MGRWRAP_EnumProc_Info}, /* MGR_ENUMPROC_INFO */ - {MGRWRAP_RegisterObject}, /* MGR_REGISTEROBJECT */ - {MGRWRAP_UnregisterObject}, /* MGR_UNREGISTEROBJECT */ - {MGRWRAP_WaitForBridgeEvents}, /* MGR_WAIT */ +static u32 (*mgr_cmd[])(union Trapped_Args *args, void *pr_ctxt) = { + MGRWRAP_EnumNode_Info, /* MGR_ENUMNODE_INFO */ + MGRWRAP_EnumProc_Info, /* MGR_ENUMPROC_INFO */ + MGRWRAP_RegisterObject, /* MGR_REGISTEROBJECT */ + MGRWRAP_UnregisterObject, /* MGR_UNREGISTEROBJECT */ + MGRWRAP_WaitForBridgeEvents, /* MGR_WAIT */ #ifndef RES_CLEANUP_DISABLE - {MGRWRAP_GetProcessResourcesInfo}, /* MGR_GET_PROC_RES */ + MGRWRAP_GetProcessResourcesInfo, /* MGR_GET_PROC_RES */ #else - {NULL}, + NULL, #endif }; /* PROC wrapper functions */ -static struct WCD_Cmd proc_cmd[] = { - {PROCWRAP_Attach}, /* PROC_ATTACH */ - {PROCWRAP_Ctrl}, /* PROC_CTRL */ - {PROCWRAP_Detach}, /* PROC_DETACH */ - {PROCWRAP_EnumNode_Info}, /* PROC_ENUMNODE */ - {PROCWRAP_EnumResources}, /* PROC_ENUMRESOURCES */ - {PROCWRAP_GetState}, /* PROC_GET_STATE */ - {PROCWRAP_GetTrace}, /* PROC_GET_TRACE */ - {PROCWRAP_Load}, /* PROC_LOAD */ - {PROCWRAP_RegisterNotify}, /* PROC_REGISTERNOTIFY */ - {PROCWRAP_Start}, /* PROC_START */ - {PROCWRAP_ReserveMemory}, /* PROC_RSVMEM */ - {PROCWRAP_UnReserveMemory}, /* PROC_UNRSVMEM */ - {PROCWRAP_Map}, /* PROC_MAPMEM */ - {PROCWRAP_UnMap}, /* PROC_UNMAPMEM */ - {PROCWRAP_FlushMemory}, /* PROC_FLUSHMEMORY */ - {PROCWRAP_Stop}, /* PROC_STOP */ - {PROCWRAP_InvalidateMemory}, /* PROC_INVALIDATEMEMORY */ +static u32 (*proc_cmd[])(union Trapped_Args *args, void *pr_ctxt) = { + PROCWRAP_Attach, /* PROC_ATTACH */ + PROCWRAP_Ctrl, /* PROC_CTRL */ + PROCWRAP_Detach, /* PROC_DETACH */ + PROCWRAP_EnumNode_Info, /* PROC_ENUMNODE */ + PROCWRAP_EnumResources, /* PROC_ENUMRESOURCES */ + PROCWRAP_GetState, /* PROC_GET_STATE */ + PROCWRAP_GetTrace, /* PROC_GET_TRACE */ + PROCWRAP_Load, /* PROC_LOAD */ + PROCWRAP_RegisterNotify, /* PROC_REGISTERNOTIFY */ + PROCWRAP_Start, /* PROC_START */ + PROCWRAP_ReserveMemory, /* PROC_RSVMEM */ + PROCWRAP_UnReserveMemory, /* PROC_UNRSVMEM */ + PROCWRAP_Map, /* PROC_MAPMEM */ + PROCWRAP_UnMap, /* PROC_UNMAPMEM */ + PROCWRAP_FlushMemory, /* PROC_FLUSHMEMORY */ + PROCWRAP_Stop, /* PROC_STOP */ + PROCWRAP_InvalidateMemory, /* PROC_INVALIDATEMEMORY */ }; /* NODE wrapper functions */ -static struct WCD_Cmd node_cmd[] = { - {NODEWRAP_Allocate}, /* NODE_ALLOCATE */ - {NODEWRAP_AllocMsgBuf}, /* NODE_ALLOCMSGBUF */ - {NODEWRAP_ChangePriority}, /* NODE_CHANGEPRIORITY */ - {NODEWRAP_Connect}, /* NODE_CONNECT */ - {NODEWRAP_Create}, /* NODE_CREATE */ - {NODEWRAP_Delete}, /* NODE_DELETE */ - {NODEWRAP_FreeMsgBuf}, /* NODE_FREEMSGBUF */ - {NODEWRAP_GetAttr}, /* NODE_GETATTR */ - {NODEWRAP_GetMessage}, /* NODE_GETMESSAGE */ - {NODEWRAP_Pause}, /* NODE_PAUSE */ - {NODEWRAP_PutMessage}, /* NODE_PUTMESSAGE */ - {NODEWRAP_RegisterNotify}, /* NODE_REGISTERNOTIFY */ - {NODEWRAP_Run}, /* NODE_RUN */ - {NODEWRAP_Terminate}, /* NODE_TERMINATE */ - {NODEWRAP_GetUUIDProps}, /* NODE_GETUUIDPROPS */ +static u32 (*node_cmd[])(union Trapped_Args *args, void *pr_ctxt) = { + NODEWRAP_Allocate, /* NODE_ALLOCATE */ + NODEWRAP_AllocMsgBuf, /* NODE_ALLOCMSGBUF */ + NODEWRAP_ChangePriority, /* NODE_CHANGEPRIORITY */ + NODEWRAP_Connect, /* NODE_CONNECT */ + NODEWRAP_Create, /* NODE_CREATE */ + NODEWRAP_Delete, /* NODE_DELETE */ + NODEWRAP_FreeMsgBuf, /* NODE_FREEMSGBUF */ + NODEWRAP_GetAttr, /* NODE_GETATTR */ + NODEWRAP_GetMessage, /* NODE_GETMESSAGE */ + NODEWRAP_Pause, /* NODE_PAUSE */ + NODEWRAP_PutMessage, /* NODE_PUTMESSAGE */ + NODEWRAP_RegisterNotify, /* NODE_REGISTERNOTIFY */ + NODEWRAP_Run, /* NODE_RUN */ + NODEWRAP_Terminate, /* NODE_TERMINATE */ + NODEWRAP_GetUUIDProps, /* NODE_GETUUIDPROPS */ }; /* STRM wrapper functions */ -static struct WCD_Cmd strm_cmd[] = { - {STRMWRAP_AllocateBuffer}, /* STRM_ALLOCATEBUFFER */ - {STRMWRAP_Close}, /* STRM_CLOSE */ - {STRMWRAP_FreeBuffer}, /* STRM_FREEBUFFER */ - {STRMWRAP_GetEventHandle}, /* STRM_GETEVENTHANDLE */ - {STRMWRAP_GetInfo}, /* STRM_GETINFO */ - {STRMWRAP_Idle}, /* STRM_IDLE */ - {STRMWRAP_Issue}, /* STRM_ISSUE */ - {STRMWRAP_Open}, /* STRM_OPEN */ - {STRMWRAP_Reclaim}, /* STRM_RECLAIM */ - {STRMWRAP_RegisterNotify}, /* STRM_REGISTERNOTIFY */ - {STRMWRAP_Select}, /* STRM_SELECT */ +static u32 (*strm_cmd[])(union Trapped_Args *args, void *pr_ctxt) = { + STRMWRAP_AllocateBuffer, /* STRM_ALLOCATEBUFFER */ + STRMWRAP_Close, /* STRM_CLOSE */ + STRMWRAP_FreeBuffer, /* STRM_FREEBUFFER */ + STRMWRAP_GetEventHandle, /* STRM_GETEVENTHANDLE */ + STRMWRAP_GetInfo, /* STRM_GETINFO */ + STRMWRAP_Idle, /* STRM_IDLE */ + STRMWRAP_Issue, /* STRM_ISSUE */ + STRMWRAP_Open, /* STRM_OPEN */ + STRMWRAP_Reclaim, /* STRM_RECLAIM */ + STRMWRAP_RegisterNotify, /* STRM_REGISTERNOTIFY */ + STRMWRAP_Select, /* STRM_SELECT */ }; /* CMM wrapper functions */ -static struct WCD_Cmd cmm_cmd[] = { - {CMMWRAP_CallocBuf}, /* CMM_ALLOCBUF */ - {CMMWRAP_FreeBuf}, /* CMM_FREEBUF */ - {CMMWRAP_GetHandle}, /* CMM_GETHANDLE */ - {CMMWRAP_GetInfo}, /* CMM_GETINFO */ +static u32 (*cmm_cmd[])(union Trapped_Args *args, void *pr_ctxt) = { + CMMWRAP_CallocBuf, /* CMM_ALLOCBUF */ + CMMWRAP_FreeBuf, /* CMM_FREEBUF */ + CMMWRAP_GetHandle, /* CMM_GETHANDLE */ + CMMWRAP_GetInfo, /* CMM_GETINFO */ }; /* Array used to store ioctl table sizes. It can hold up to 8 entries */ @@ -323,19 +317,19 @@ inline DSP_STATUS WCD_CallDevIOCtl(u32 cmd, union Trapped_Args *args, switch (DB_GET_MODULE(cmd)) { case DB_MGR: - ioctl_cmd = mgr_cmd[i].fxn; + ioctl_cmd = mgr_cmd[i]; break; case DB_PROC: - ioctl_cmd = proc_cmd[i].fxn; + ioctl_cmd = proc_cmd[i]; break; case DB_NODE: - ioctl_cmd = node_cmd[i].fxn; + ioctl_cmd = node_cmd[i]; break; case DB_STRM: - ioctl_cmd = strm_cmd[i].fxn; + ioctl_cmd = strm_cmd[i]; break; case DB_CMM: - ioctl_cmd = cmm_cmd[i].fxn; + ioctl_cmd = cmm_cmd[i]; break; } -- 1.6.2.4 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v3 7/7] DSPBRIDGE: remove WCD_Cmd structure 2010-01-12 1:00 ` [PATCH v3 7/7] DSPBRIDGE: remove WCD_Cmd structure Omar Ramirez Luna @ 2010-01-12 1:09 ` Nishanth Menon 0 siblings, 0 replies; 18+ messages in thread From: Nishanth Menon @ 2010-01-12 1:09 UTC (permalink / raw) To: Ramirez Luna, Omar Cc: linux-omap, Hiroshi Doyu, Ameya Palande, Felipe Contreras Ramirez Luna, Omar had written, on 01/11/2010 07:00 PM, the following: > Remove WCD_Cmd structure given that only one member is being > used (fxn call), this structure is replaced for a definition > of an array of function pointers for each dspbridge ioctl > module. > > Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> > CC: Nishanth Menon <nm@ti.com> > CC: Hiroshi Doyu <Hiroshi.DOYU@nokia.com> > CC: Ameya Palande <ameya.palande@nokia.com> > CC: Felipe Contreras <felipe.contreras@gmail.com> > --- > drivers/dsp/bridge/pmgr/wcd.c | 134 +++++++++++++++++++--------------------- > 1 files changed, 64 insertions(+), 70 deletions(-) > > diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c > index 27e8e8e..37d1f8a 100644 > --- a/drivers/dsp/bridge/pmgr/wcd.c > +++ b/drivers/dsp/bridge/pmgr/wcd.c > @@ -147,12 +147,6 @@ > /* Used to get dspbridge ioctl table */ > #define DB_GET_IOC_TABLE(cmd) (DB_GET_MODULE(cmd) >> DB_MODULE_SHIFT) > > -/* Device IOCtl function pointer */ > -struct WCD_Cmd { > - u32(*fxn)(union Trapped_Args *args, void *pr_ctxt); > - u32 dwIndex; > -} ; > - > /* ----------------------------------- Globals */ > #if GT_TRACE > static struct GT_Mask WCD_debugMask = { NULL, NULL }; /* Core VxD Mask */ > @@ -167,80 +161,80 @@ static u32 WCD_cRefs; > */ > > /* MGR wrapper functions */ > -static struct WCD_Cmd mgr_cmd[] = { > - {MGRWRAP_EnumNode_Info}, /* MGR_ENUMNODE_INFO */ > - {MGRWRAP_EnumProc_Info}, /* MGR_ENUMPROC_INFO */ > - {MGRWRAP_RegisterObject}, /* MGR_REGISTEROBJECT */ > - {MGRWRAP_UnregisterObject}, /* MGR_UNREGISTEROBJECT */ > - {MGRWRAP_WaitForBridgeEvents}, /* MGR_WAIT */ > +static u32 (*mgr_cmd[])(union Trapped_Args *args, void *pr_ctxt) = { agreed that we dont need dwIndex anymore and struct wrapper is an overhead, but, just being a nitpick again, but is'nt typedef a necessary evil at this point to ensure that all cmd_ function pointers are of the same style for each of the arrays? -- Regards, Nishanth Menon ^ permalink raw reply [flat|nested] 18+ messages in thread
* [RESEND][PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls 2010-01-12 1:00 ` [PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 7/7] DSPBRIDGE: remove WCD_Cmd structure Omar Ramirez Luna @ 2010-01-12 1:09 ` Ramirez Luna, Omar 2010-01-14 0:24 ` [PATCH " Ramirez Luna, Omar 2 siblings, 0 replies; 18+ messages in thread From: Ramirez Luna, Omar @ 2010-01-12 1:09 UTC (permalink / raw) To: linux-omap; +Cc: Menon, Nishanth, Hiroshi Doyu, Ameya Palande, Felipe Contreras Resending with u8 instead of short for size_cmd array >From: Ramirez Luna, Omar > >- Use standard convention to define ioctls. > >Currently 0xDB is used as identifier for dspbridge. > >Discussion: >http://marc.info/?l=linux-omap&m=126297631603035&w=2 > >WARNING: >An update in api ioctl definitions is required, usually replacing >to a new libbridge (with ioctl patch) should be enough. Other >clients (not using libbridge) need to update their ioctl numbers >manually. > >Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> >CC: Nishanth Menon <nm@ti.com> >CC: Hiroshi Doyu <Hiroshi.DOYU@nokia.com> >CC: Ameya Palande <ameya.palande@nokia.com> >CC: Felipe Contreras <felipe.contreras@gmail.com> >--- > arch/arm/plat-omap/include/dspbridge/wcdioctl.h | 181 ++++++++++++--------- > drivers/dsp/bridge/pmgr/wcd.c | 200 +++++++++++++++-------- > drivers/dsp/bridge/rmgr/drv_interface.c | 3 - > 3 files changed, 237 insertions(+), 147 deletions(-) > diff --git a/arch/arm/plat-omap/include/dspbridge/wcdioctl.h b/arch/arm/plat-omap/include/dspbridge/wcdioctl.h index 4b9dd0a..656d56b 100644 --- a/arch/arm/plat-omap/include/dspbridge/wcdioctl.h +++ b/arch/arm/plat-omap/include/dspbridge/wcdioctl.h @@ -437,86 +437,109 @@ union Trapped_Args { } ARGS_UTIL_TESTDLL; } ; -#define CMD_BASE 1 +/* + * Dspbridge Ioctl numbering scheme + * + * 7 0 + * --------------------------------- + * | Module | Ioctl Number | + * --------------------------------- + * | x | x | x | 0 | 0 | 0 | 0 | 0 | + * --------------------------------- + */ + +/* Ioctl driver identifier */ +#define DB 0xDB + +/* + * Following are used to distinguish between module ioctls, this is needed + * in case new ioctls are introduced. + */ +#define DB_MODULE_MASK 0xE0 +#define DB_IOC_MASK 0x1F + +/* Ioctl module masks */ +#define DB_MGR 0x0 +#define DB_PROC 0x20 +#define DB_NODE 0x40 +#define DB_STRM 0x60 +#define DB_CMM 0x80 + +#define DB_MODULE_SHIFT 5 + +/* Used to calculate the ioctl per dspbridge module */ +#define DB_IOC(module, num) \ + (((module) & DB_MODULE_MASK) | ((num) & DB_IOC_MASK)) +/* Used to get dspbridge ioctl module */ +#define DB_GET_MODULE(cmd) ((cmd) & DB_MODULE_MASK) +/* Used to get dspbridge ioctl number */ +#define DB_GET_IOC(cmd) ((cmd) & DB_IOC_MASK) /* TODO: Remove deprecated and not implemented */ -/* MGR module offsets */ -#define CMD_MGR_BASE_OFFSET CMD_BASE -#define CMD_MGR_ENUMNODE_INFO_OFFSET (CMD_MGR_BASE_OFFSET + 0) -#define CMD_MGR_ENUMPROC_INFO_OFFSET (CMD_MGR_BASE_OFFSET + 1) -#define CMD_MGR_REGISTEROBJECT_OFFSET (CMD_MGR_BASE_OFFSET + 2) -#define CMD_MGR_UNREGISTEROBJECT_OFFSET (CMD_MGR_BASE_OFFSET + 3) -#define CMD_MGR_WAIT_OFFSET (CMD_MGR_BASE_OFFSET + 4) - -#ifndef RES_CLEANUP_DISABLE -#define CMD_MGR_RESOUCES_OFFSET (CMD_MGR_BASE_OFFSET + 5) /* Deprecated */ -#define CMD_MGR_END_OFFSET CMD_MGR_RESOUCES_OFFSET -#else -#define CMD_MGR_END_OFFSET CMD_MGR_WAIT_OFFSET -#endif - -#define CMD_PROC_BASE_OFFSET (CMD_MGR_END_OFFSET + 1) -#define CMD_PROC_ATTACH_OFFSET (CMD_PROC_BASE_OFFSET + 0) -#define CMD_PROC_CTRL_OFFSET (CMD_PROC_BASE_OFFSET + 1) -#define CMD_PROC_DETACH_OFFSET (CMD_PROC_BASE_OFFSET + 2) /* Deprecated */ -#define CMD_PROC_ENUMNODE_OFFSET (CMD_PROC_BASE_OFFSET + 3) -#define CMD_PROC_ENUMRESOURCES_OFFSET (CMD_PROC_BASE_OFFSET + 4) -#define CMD_PROC_GETSTATE_OFFSET (CMD_PROC_BASE_OFFSET + 5) -#define CMD_PROC_GETTRACE_OFFSET (CMD_PROC_BASE_OFFSET + 6) -#define CMD_PROC_LOAD_OFFSET (CMD_PROC_BASE_OFFSET + 7) -#define CMD_PROC_REGISTERNOTIFY_OFFSET (CMD_PROC_BASE_OFFSET + 8) -#define CMD_PROC_START_OFFSET (CMD_PROC_BASE_OFFSET + 9) -#define CMD_PROC_RSVMEM_OFFSET (CMD_PROC_BASE_OFFSET + 10) -#define CMD_PROC_UNRSVMEM_OFFSET (CMD_PROC_BASE_OFFSET + 11) -#define CMD_PROC_MAPMEM_OFFSET (CMD_PROC_BASE_OFFSET + 12) -#define CMD_PROC_UNMAPMEM_OFFSET (CMD_PROC_BASE_OFFSET + 13) -#define CMD_PROC_FLUSHMEMORY_OFFSET (CMD_PROC_BASE_OFFSET + 14) -#define CMD_PROC_STOP_OFFSET (CMD_PROC_BASE_OFFSET + 15) -#define CMD_PROC_INVALIDATEMEMORY_OFFSET (CMD_PROC_BASE_OFFSET + 16) -#define CMD_PROC_END_OFFSET CMD_PROC_INVALIDATEMEMORY_OFFSET - - -#define CMD_NODE_BASE_OFFSET (CMD_PROC_END_OFFSET + 1) -#define CMD_NODE_ALLOCATE_OFFSET (CMD_NODE_BASE_OFFSET + 0) -#define CMD_NODE_ALLOCMSGBUF_OFFSET (CMD_NODE_BASE_OFFSET + 1) -#define CMD_NODE_CHANGEPRIORITY_OFFSET (CMD_NODE_BASE_OFFSET + 2) -#define CMD_NODE_CONNECT_OFFSET (CMD_NODE_BASE_OFFSET + 3) -#define CMD_NODE_CREATE_OFFSET (CMD_NODE_BASE_OFFSET + 4) -#define CMD_NODE_DELETE_OFFSET (CMD_NODE_BASE_OFFSET + 5) -#define CMD_NODE_FREEMSGBUF_OFFSET (CMD_NODE_BASE_OFFSET + 6) -#define CMD_NODE_GETATTR_OFFSET (CMD_NODE_BASE_OFFSET + 7) -#define CMD_NODE_GETMESSAGE_OFFSET (CMD_NODE_BASE_OFFSET + 8) -#define CMD_NODE_PAUSE_OFFSET (CMD_NODE_BASE_OFFSET + 9) -#define CMD_NODE_PUTMESSAGE_OFFSET (CMD_NODE_BASE_OFFSET + 10) -#define CMD_NODE_REGISTERNOTIFY_OFFSET (CMD_NODE_BASE_OFFSET + 11) -#define CMD_NODE_RUN_OFFSET (CMD_NODE_BASE_OFFSET + 12) -#define CMD_NODE_TERMINATE_OFFSET (CMD_NODE_BASE_OFFSET + 13) -#define CMD_NODE_GETUUIDPROPS_OFFSET (CMD_NODE_BASE_OFFSET + 14) -#define CMD_NODE_END_OFFSET CMD_NODE_GETUUIDPROPS_OFFSET - -#define CMD_STRM_BASE_OFFSET (CMD_NODE_END_OFFSET + 1) -#define CMD_STRM_ALLOCATEBUFFER_OFFSET (CMD_STRM_BASE_OFFSET + 0) -#define CMD_STRM_CLOSE_OFFSET (CMD_STRM_BASE_OFFSET + 1) -#define CMD_STRM_FREEBUFFER_OFFSET (CMD_STRM_BASE_OFFSET + 2) -/* Not Impl'd */ -#define CMD_STRM_GETEVENTHANDLE_OFFSET (CMD_STRM_BASE_OFFSET + 3) -#define CMD_STRM_GETINFO_OFFSET (CMD_STRM_BASE_OFFSET + 4) -#define CMD_STRM_IDLE_OFFSET (CMD_STRM_BASE_OFFSET + 5) -#define CMD_STRM_ISSUE_OFFSET (CMD_STRM_BASE_OFFSET + 6) -#define CMD_STRM_OPEN_OFFSET (CMD_STRM_BASE_OFFSET + 7) -#define CMD_STRM_RECLAIM_OFFSET (CMD_STRM_BASE_OFFSET + 8) -#define CMD_STRM_REGISTERNOTIFY_OFFSET (CMD_STRM_BASE_OFFSET + 9) -#define CMD_STRM_SELECT_OFFSET (CMD_STRM_BASE_OFFSET + 10) -#define CMD_STRM_END_OFFSET CMD_STRM_SELECT_OFFSET - -/* Communication Memory Manager (UCMM) */ -#define CMD_CMM_BASE_OFFSET (CMD_STRM_END_OFFSET + 1) -#define CMD_CMM_ALLOCBUF_OFFSET (CMD_CMM_BASE_OFFSET + 0) /* Not Impl'd */ -#define CMD_CMM_FREEBUF_OFFSET (CMD_CMM_BASE_OFFSET + 1) /* Not Impl'd */ -#define CMD_CMM_GETHANDLE_OFFSET (CMD_CMM_BASE_OFFSET + 2) -#define CMD_CMM_GETINFO_OFFSET (CMD_CMM_BASE_OFFSET + 3) -#define CMD_CMM_END_OFFSET CMD_CMM_GETINFO_OFFSET - -#define CMD_BASE_END_OFFSET CMD_CMM_END_OFFSET +/* MGR Module */ +#define MGR_ENUMNODE_INFO _IOWR(DB, DB_IOC(DB_MGR, 0), unsigned long) +#define MGR_ENUMPROC_INFO _IOWR(DB, DB_IOC(DB_MGR, 1), unsigned long) +#define MGR_REGISTEROBJECT _IOWR(DB, DB_IOC(DB_MGR, 2), unsigned long) +#define MGR_UNREGISTEROBJECT _IOWR(DB, DB_IOC(DB_MGR, 3), unsigned long) +#define MGR_WAIT _IOWR(DB, DB_IOC(DB_MGR, 4), unsigned long) +/* MGR_GET_PROC_RES Deprecated */ +#define MGR_GET_PROC_RES _IOR(DB, DB_IOC(DB_MGR, 5), unsigned long) + +/* PROC Module */ +#define PROC_ATTACH _IOWR(DB, DB_IOC(DB_PROC, 0), unsigned long) +#define PROC_CTRL _IOR(DB, DB_IOC(DB_PROC, 1), unsigned long) +/* PROC_DETACH Deprecated */ +#define PROC_DETACH _IOR(DB, DB_IOC(DB_PROC, 2), unsigned long) +#define PROC_ENUMNODE _IOWR(DB, DB_IOC(DB_PROC, 3), unsigned long) +#define PROC_ENUMRESOURCES _IOWR(DB, DB_IOC(DB_PROC, 4), unsigned long) +#define PROC_GET_STATE _IOWR(DB, DB_IOC(DB_PROC, 5), unsigned long) +#define PROC_GET_TRACE _IOWR(DB, DB_IOC(DB_PROC, 6), unsigned long) +#define PROC_LOAD _IOW(DB, DB_IOC(DB_PROC, 7), unsigned long) +#define PROC_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_PROC, 8), unsigned long) +#define PROC_START _IOW(DB, DB_IOC(DB_PROC, 9), unsigned long) +#define PROC_RSVMEM _IOWR(DB, DB_IOC(DB_PROC, 10), unsigned long) +#define PROC_UNRSVMEM _IOW(DB, DB_IOC(DB_PROC, 11), unsigned long) +#define PROC_MAPMEM _IOWR(DB, DB_IOC(DB_PROC, 12), unsigned long) +#define PROC_UNMAPMEM _IOR(DB, DB_IOC(DB_PROC, 13), unsigned long) +#define PROC_FLUSHMEMORY _IOW(DB, DB_IOC(DB_PROC, 14), unsigned long) +#define PROC_STOP _IOWR(DB, DB_IOC(DB_PROC, 15), unsigned long) +#define PROC_INVALIDATEMEMORY _IOW(DB, DB_IOC(DB_PROC, 16), unsigned long) + +/* NODE Module */ +#define NODE_ALLOCATE _IOWR(DB, DB_IOC(DB_NODE, 0), unsigned long) +#define NODE_ALLOCMSGBUF _IOWR(DB, DB_IOC(DB_NODE, 1), unsigned long) +#define NODE_CHANGEPRIORITY _IOW(DB, DB_IOC(DB_NODE, 2), unsigned long) +#define NODE_CONNECT _IOW(DB, DB_IOC(DB_NODE, 3), unsigned long) +#define NODE_CREATE _IOW(DB, DB_IOC(DB_NODE, 4), unsigned long) +#define NODE_DELETE _IOW(DB, DB_IOC(DB_NODE, 5), unsigned long) +#define NODE_FREEMSGBUF _IOW(DB, DB_IOC(DB_NODE, 6), unsigned long) +#define NODE_GETATTR _IOWR(DB, DB_IOC(DB_NODE, 7), unsigned long) +#define NODE_GETMESSAGE _IOWR(DB, DB_IOC(DB_NODE, 8), unsigned long) +#define NODE_PAUSE _IOW(DB, DB_IOC(DB_NODE, 9), unsigned long) +#define NODE_PUTMESSAGE _IOW(DB, DB_IOC(DB_NODE, 10), unsigned long) +#define NODE_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_NODE, 11), unsigned long) +#define NODE_RUN _IOW(DB, DB_IOC(DB_NODE, 12), unsigned long) +#define NODE_TERMINATE _IOWR(DB, DB_IOC(DB_NODE, 13), unsigned long) +#define NODE_GETUUIDPROPS _IOWR(DB, DB_IOC(DB_NODE, 14), unsigned long) + +/* STRM Module */ +#define STRM_ALLOCATEBUFFER _IOWR(DB, DB_IOC(DB_STRM, 0), unsigned long) +#define STRM_CLOSE _IOW(DB, DB_IOC(DB_STRM, 1), unsigned long) +#define STRM_FREEBUFFER _IOWR(DB, DB_IOC(DB_STRM, 2), unsigned long) +#define STRM_GETEVENTHANDLE _IO(DB, DB_IOC(DB_STRM, 3)) /* Not Impl'd */ +#define STRM_GETINFO _IOWR(DB, DB_IOC(DB_STRM, 4), unsigned long) +#define STRM_IDLE _IOW(DB, DB_IOC(DB_STRM, 5), unsigned long) +#define STRM_ISSUE _IOW(DB, DB_IOC(DB_STRM, 6), unsigned long) +#define STRM_OPEN _IOWR(DB, DB_IOC(DB_STRM, 7), unsigned long) +#define STRM_RECLAIM _IOWR(DB, DB_IOC(DB_STRM, 8), unsigned long) +#define STRM_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_STRM, 9), unsigned long) +#define STRM_SELECT _IOWR(DB, DB_IOC(DB_STRM, 10), unsigned long) + +/* CMM Module */ +#define CMM_ALLOCBUF _IO(DB, DB_IOC(DB_CMM, 0)) /* Not Impl'd */ +#define CMM_FREEBUF _IO(DB, DB_IOC(DB_CMM, 1)) /* Not Impl'd */ +#define CMM_GETHANDLE _IOR(DB, DB_IOC(DB_CMM, 2), unsigned long) +#define CMM_GETINFO _IOR(DB, DB_IOC(DB_CMM, 3), unsigned long) + #endif /* WCDIOCTL_ */ diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c index 02def74..39e3110 100644 --- a/drivers/dsp/bridge/pmgr/wcd.c +++ b/drivers/dsp/bridge/pmgr/wcd.c @@ -144,6 +144,9 @@ #define MAX_STREAMS 16 #define MAX_BUFS 64 +/* Used to get dspbridge ioctl table */ +#define DB_GET_IOC_TABLE(cmd) (DB_GET_MODULE(cmd) >> DB_MODULE_SHIFT) + /* Device IOCtl function pointer */ struct WCD_Cmd { u32(*fxn)(union Trapped_Args *args, void *pr_ctxt); @@ -157,72 +160,96 @@ static struct GT_Mask WCD_debugMask = { NULL, NULL }; /* Core VxD Mask */ static u32 WCD_cRefs; /* - * Function table. + * Function tables. * The order of these functions MUST be the same as the order of the command * numbers defined in wcdioctl.h This is how an IOCTL number in user mode * turns into a function call in kernel mode. */ -static struct WCD_Cmd WCD_cmdTable[] = { - /* MGR module */ - {MGRWRAP_EnumNode_Info, CMD_MGR_ENUMNODE_INFO_OFFSET}, - {MGRWRAP_EnumProc_Info, CMD_MGR_ENUMPROC_INFO_OFFSET}, - {MGRWRAP_RegisterObject, CMD_MGR_REGISTEROBJECT_OFFSET}, - {MGRWRAP_UnregisterObject, CMD_MGR_UNREGISTEROBJECT_OFFSET}, - {MGRWRAP_WaitForBridgeEvents, CMD_MGR_WAIT_OFFSET}, + +/* MGR wrapper functions */ +static struct WCD_Cmd mgr_cmd[] = { + {MGRWRAP_EnumNode_Info}, /* MGR_ENUMNODE_INFO */ + {MGRWRAP_EnumProc_Info}, /* MGR_ENUMPROC_INFO */ + {MGRWRAP_RegisterObject}, /* MGR_REGISTEROBJECT */ + {MGRWRAP_UnregisterObject}, /* MGR_UNREGISTEROBJECT */ + {MGRWRAP_WaitForBridgeEvents}, /* MGR_WAIT */ #ifndef RES_CLEANUP_DISABLE - {MGRWRAP_GetProcessResourcesInfo, CMD_MGR_RESOUCES_OFFSET}, + {MGRWRAP_GetProcessResourcesInfo}, /* MGR_GET_PROC_RES */ +#else + {NULL}, #endif - /* PROC Module */ - {PROCWRAP_Attach, CMD_PROC_ATTACH_OFFSET}, - {PROCWRAP_Ctrl, CMD_PROC_CTRL_OFFSET}, - {PROCWRAP_Detach, CMD_PROC_DETACH_OFFSET}, - {PROCWRAP_EnumNode_Info, CMD_PROC_ENUMNODE_OFFSET}, - {PROCWRAP_EnumResources, CMD_PROC_ENUMRESOURCES_OFFSET}, - {PROCWRAP_GetState, CMD_PROC_GETSTATE_OFFSET}, - {PROCWRAP_GetTrace, CMD_PROC_GETTRACE_OFFSET}, - {PROCWRAP_Load, CMD_PROC_LOAD_OFFSET}, - {PROCWRAP_RegisterNotify, CMD_PROC_REGISTERNOTIFY_OFFSET}, - {PROCWRAP_Start, CMD_PROC_START_OFFSET}, - {PROCWRAP_ReserveMemory, CMD_PROC_RSVMEM_OFFSET}, - {PROCWRAP_UnReserveMemory, CMD_PROC_UNRSVMEM_OFFSET}, - {PROCWRAP_Map, CMD_PROC_MAPMEM_OFFSET}, - {PROCWRAP_UnMap, CMD_PROC_UNMAPMEM_OFFSET}, - {PROCWRAP_FlushMemory, CMD_PROC_FLUSHMEMORY_OFFSET}, - {PROCWRAP_Stop, CMD_PROC_STOP_OFFSET}, - {PROCWRAP_InvalidateMemory, CMD_PROC_INVALIDATEMEMORY_OFFSET}, - /* NODE Module */ - {NODEWRAP_Allocate, CMD_NODE_ALLOCATE_OFFSET}, - {NODEWRAP_AllocMsgBuf, CMD_NODE_ALLOCMSGBUF_OFFSET}, - {NODEWRAP_ChangePriority, CMD_NODE_CHANGEPRIORITY_OFFSET}, - {NODEWRAP_Connect, CMD_NODE_CONNECT_OFFSET}, - {NODEWRAP_Create, CMD_NODE_CREATE_OFFSET}, - {NODEWRAP_Delete, CMD_NODE_DELETE_OFFSET}, - {NODEWRAP_FreeMsgBuf, CMD_NODE_FREEMSGBUF_OFFSET}, - {NODEWRAP_GetAttr, CMD_NODE_GETATTR_OFFSET}, - {NODEWRAP_GetMessage, CMD_NODE_GETMESSAGE_OFFSET}, - {NODEWRAP_Pause, CMD_NODE_PAUSE_OFFSET}, - {NODEWRAP_PutMessage, CMD_NODE_PUTMESSAGE_OFFSET}, - {NODEWRAP_RegisterNotify, CMD_NODE_REGISTERNOTIFY_OFFSET}, - {NODEWRAP_Run, CMD_NODE_RUN_OFFSET}, - {NODEWRAP_Terminate, CMD_NODE_TERMINATE_OFFSET}, - {NODEWRAP_GetUUIDProps, CMD_NODE_GETUUIDPROPS_OFFSET}, - /* STRM wrapper functions */ - {STRMWRAP_AllocateBuffer, CMD_STRM_ALLOCATEBUFFER_OFFSET}, - {STRMWRAP_Close, CMD_STRM_CLOSE_OFFSET}, - {STRMWRAP_FreeBuffer, CMD_STRM_FREEBUFFER_OFFSET}, - {STRMWRAP_GetEventHandle, CMD_STRM_GETEVENTHANDLE_OFFSET}, - {STRMWRAP_GetInfo, CMD_STRM_GETINFO_OFFSET}, - {STRMWRAP_Idle, CMD_STRM_IDLE_OFFSET}, - {STRMWRAP_Issue, CMD_STRM_ISSUE_OFFSET}, - {STRMWRAP_Open, CMD_STRM_OPEN_OFFSET}, - {STRMWRAP_Reclaim, CMD_STRM_RECLAIM_OFFSET}, - {STRMWRAP_RegisterNotify, CMD_STRM_REGISTERNOTIFY_OFFSET}, - {STRMWRAP_Select, CMD_STRM_SELECT_OFFSET}, - /* CMM module */ - {CMMWRAP_CallocBuf, CMD_CMM_ALLOCBUF_OFFSET}, - {CMMWRAP_FreeBuf, CMD_CMM_FREEBUF_OFFSET}, - {CMMWRAP_GetHandle, CMD_CMM_GETHANDLE_OFFSET}, - {CMMWRAP_GetInfo, CMD_CMM_GETINFO_OFFSET} +}; + +/* PROC wrapper functions */ +static struct WCD_Cmd proc_cmd[] = { + {PROCWRAP_Attach}, /* PROC_ATTACH */ + {PROCWRAP_Ctrl}, /* PROC_CTRL */ + {PROCWRAP_Detach}, /* PROC_DETACH */ + {PROCWRAP_EnumNode_Info}, /* PROC_ENUMNODE */ + {PROCWRAP_EnumResources}, /* PROC_ENUMRESOURCES */ + {PROCWRAP_GetState}, /* PROC_GET_STATE */ + {PROCWRAP_GetTrace}, /* PROC_GET_TRACE */ + {PROCWRAP_Load}, /* PROC_LOAD */ + {PROCWRAP_RegisterNotify}, /* PROC_REGISTERNOTIFY */ + {PROCWRAP_Start}, /* PROC_START */ + {PROCWRAP_ReserveMemory}, /* PROC_RSVMEM */ + {PROCWRAP_UnReserveMemory}, /* PROC_UNRSVMEM */ + {PROCWRAP_Map}, /* PROC_MAPMEM */ + {PROCWRAP_UnMap}, /* PROC_UNMAPMEM */ + {PROCWRAP_FlushMemory}, /* PROC_FLUSHMEMORY */ + {PROCWRAP_Stop}, /* PROC_STOP */ + {PROCWRAP_InvalidateMemory}, /* PROC_INVALIDATEMEMORY */ +}; + +/* NODE wrapper functions */ +static struct WCD_Cmd node_cmd[] = { + {NODEWRAP_Allocate}, /* NODE_ALLOCATE */ + {NODEWRAP_AllocMsgBuf}, /* NODE_ALLOCMSGBUF */ + {NODEWRAP_ChangePriority}, /* NODE_CHANGEPRIORITY */ + {NODEWRAP_Connect}, /* NODE_CONNECT */ + {NODEWRAP_Create}, /* NODE_CREATE */ + {NODEWRAP_Delete}, /* NODE_DELETE */ + {NODEWRAP_FreeMsgBuf}, /* NODE_FREEMSGBUF */ + {NODEWRAP_GetAttr}, /* NODE_GETATTR */ + {NODEWRAP_GetMessage}, /* NODE_GETMESSAGE */ + {NODEWRAP_Pause}, /* NODE_PAUSE */ + {NODEWRAP_PutMessage}, /* NODE_PUTMESSAGE */ + {NODEWRAP_RegisterNotify}, /* NODE_REGISTERNOTIFY */ + {NODEWRAP_Run}, /* NODE_RUN */ + {NODEWRAP_Terminate}, /* NODE_TERMINATE */ + {NODEWRAP_GetUUIDProps}, /* NODE_GETUUIDPROPS */ +}; + +/* STRM wrapper functions */ +static struct WCD_Cmd strm_cmd[] = { + {STRMWRAP_AllocateBuffer}, /* STRM_ALLOCATEBUFFER */ + {STRMWRAP_Close}, /* STRM_CLOSE */ + {STRMWRAP_FreeBuffer}, /* STRM_FREEBUFFER */ + {STRMWRAP_GetEventHandle}, /* STRM_GETEVENTHANDLE */ + {STRMWRAP_GetInfo}, /* STRM_GETINFO */ + {STRMWRAP_Idle}, /* STRM_IDLE */ + {STRMWRAP_Issue}, /* STRM_ISSUE */ + {STRMWRAP_Open}, /* STRM_OPEN */ + {STRMWRAP_Reclaim}, /* STRM_RECLAIM */ + {STRMWRAP_RegisterNotify}, /* STRM_REGISTERNOTIFY */ + {STRMWRAP_Select}, /* STRM_SELECT */ +}; + +/* CMM wrapper functions */ +static struct WCD_Cmd cmm_cmd[] = { + {CMMWRAP_CallocBuf}, /* CMM_ALLOCBUF */ + {CMMWRAP_FreeBuf}, /* CMM_FREEBUF */ + {CMMWRAP_GetHandle}, /* CMM_GETHANDLE */ + {CMMWRAP_GetInfo}, /* CMM_GETINFO */ +}; + +/* Array used to store ioctl table sizes. It can hold up to 8 entries */ +static u8 size_cmd[] = { + ARRAY_SIZE(mgr_cmd), + ARRAY_SIZE(proc_cmd), + ARRAY_SIZE(node_cmd), + ARRAY_SIZE(strm_cmd), + ARRAY_SIZE(cmm_cmd), }; static inline void __cp_fm_usr(void *to, const void __user *from, @@ -273,13 +300,56 @@ static inline void __cp_to_usr(void __user *to, const void *from, inline DSP_STATUS WCD_CallDevIOCtl(u32 cmd, union Trapped_Args *args, u32 *result, void *pr_ctxt) { - if (cmd < ARRAY_SIZE(WCD_cmdTable)) { - /* make the fxn call via the cmd table */ - *result = (*WCD_cmdTable[cmd].fxn) (args, pr_ctxt); - return DSP_SOK; + u32 (*ioctl_cmd)(union Trapped_Args *args, void *pr_ctxt) = NULL; + int i; + + if (_IOC_TYPE(cmd) != DB) { + pr_err("%s: Incompatible dspbridge ioctl number\n", __func__); + goto err; + } + + if (DB_GET_IOC_TABLE(cmd) > ARRAY_SIZE(size_cmd)) { + pr_err("%s: undefined ioctl module\n", __func__); + goto err; + } + + /* Check the size of the required cmd table */ + i = DB_GET_IOC(cmd); + if (i > size_cmd[DB_GET_IOC_TABLE(cmd)]) { + pr_err("%s: requested ioctl %d out of bounds for table %d\n", + __func__, i, DB_GET_IOC_TABLE(cmd)); + goto err; + } + + switch (DB_GET_MODULE(cmd)) { + case DB_MGR: + ioctl_cmd = mgr_cmd[i].fxn; + break; + case DB_PROC: + ioctl_cmd = proc_cmd[i].fxn; + break; + case DB_NODE: + ioctl_cmd = node_cmd[i].fxn; + break; + case DB_STRM: + ioctl_cmd = strm_cmd[i].fxn; + break; + case DB_CMM: + ioctl_cmd = cmm_cmd[i].fxn; + break; + } + + if (!ioctl_cmd) { + pr_err("%s: requested ioctl not defined\n", __func__); + goto err; + } else { + *result = (*ioctl_cmd)(args, pr_ctxt); } - return DSP_EINVALIDARG; + return DSP_SOK; + +err: + return -EINVAL; } /* diff --git a/drivers/dsp/bridge/rmgr/drv_interface.c b/drivers/dsp/bridge/rmgr/drv_interface.c index efce35d..78ecec4 100644 --- a/drivers/dsp/bridge/rmgr/drv_interface.c +++ b/drivers/dsp/bridge/rmgr/drv_interface.c @@ -611,9 +611,6 @@ static long bridge_ioctl(struct file *filp, unsigned int code, GT_0trace(driverTrace, GT_ENTER, " -> driver_ioctl\n"); - /* Deduct one for the CMD_BASE. */ - code = (code - 1); - status = copy_from_user(&pBufIn, (union Trapped_Args *)args, sizeof(union Trapped_Args)); -- 1.6.2.4 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* RE: [PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls 2010-01-12 1:00 ` [PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 7/7] DSPBRIDGE: remove WCD_Cmd structure Omar Ramirez Luna 2010-01-12 1:09 ` [RESEND][PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls Ramirez Luna, Omar @ 2010-01-14 0:24 ` Ramirez Luna, Omar 2 siblings, 0 replies; 18+ messages in thread From: Ramirez Luna, Omar @ 2010-01-14 0:24 UTC (permalink / raw) To: linux-omap; +Cc: Menon, Nishanth, Hiroshi Doyu, Ameya Palande, Felipe Contreras >From: Ramirez Luna, Omar >Sent: Monday, January 11, 2010 7:01 PM >To: linux-omap >Cc: Ramirez Luna, Omar; Menon, Nishanth; Hiroshi Doyu; Ameya Palande; Felipe Contreras >Subject: [PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls > >- Use standard convention to define ioctls. > >Currently 0xDB is used as identifier for dspbridge. > >Discussion: >http://marc.info/?l=linux-omap&m=126297631603035&w=2 > >WARNING: >An update in api ioctl definitions is required, usually replacing >to a new libbridge (with ioctl patch) should be enough. Other >clients (not using libbridge) need to update their ioctl numbers >manually. > >Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> >--- > arch/arm/plat-omap/include/dspbridge/wcdioctl.h | 181 ++++++++++++--------- > drivers/dsp/bridge/pmgr/wcd.c | 200 +++++++++++++++-------- > drivers/dsp/bridge/rmgr/drv_interface.c | 3 - > 3 files changed, 237 insertions(+), 147 deletions(-) > Pushed to dspbridge - omar ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl 2010-01-12 1:00 ` [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls Omar Ramirez Luna @ 2010-01-14 0:23 ` Ramirez Luna, Omar 1 sibling, 0 replies; 18+ messages in thread From: Ramirez Luna, Omar @ 2010-01-14 0:23 UTC (permalink / raw) To: linux-omap; +Cc: Menon, Nishanth, Hiroshi Doyu, Ameya Palande, Felipe Contreras >From: Ramirez Luna, Omar >Sent: Monday, January 11, 2010 7:01 PM >To: linux-omap >Cc: Ramirez Luna, Omar; Menon, Nishanth; Hiroshi Doyu; Ameya Palande; Felipe Contreras >Subject: [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl > >Trivial cleanup, rename pResult to result for WCD_CallDevIOCtl > >Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> >--- > drivers/dsp/bridge/pmgr/wcd.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > Pushed to dspbridge - omar ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check 2010-01-12 1:00 ` [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Omar Ramirez Luna @ 2010-01-14 0:23 ` Ramirez Luna, Omar 1 sibling, 0 replies; 18+ messages in thread From: Ramirez Luna, Omar @ 2010-01-14 0:23 UTC (permalink / raw) To: linux-omap; +Cc: Menon, Nishanth, Hiroshi Doyu, Ameya Palande, Felipe Contreras >From: Ramirez Luna, Omar >Sent: Monday, January 11, 2010 7:01 PM >To: linux-omap >Cc: Ramirez Luna, Omar; Menon, Nishanth; Hiroshi Doyu; Ameya Palande; Felipe Contreras >Subject: [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check > >This patch removes the runtime check of device >ioctl array. > >Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> >--- > drivers/dsp/bridge/pmgr/wcd.c | 6 ------ > 1 files changed, 0 insertions(+), 6 deletions(-) > Pushed to dspbridge - omar ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated 2010-01-12 1:00 ` [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check Omar Ramirez Luna @ 2010-01-14 0:23 ` Ramirez Luna, Omar 1 sibling, 0 replies; 18+ messages in thread From: Ramirez Luna, Omar @ 2010-01-14 0:23 UTC (permalink / raw) To: linux-omap; +Cc: Menon, Nishanth, Hiroshi Doyu, Ameya Palande, Felipe Contreras >From: Ramirez Luna, Omar >Sent: Monday, January 11, 2010 7:01 PM >To: linux-omap >Cc: Ramirez Luna, Omar; Menon, Nishanth; Hiroshi Doyu; Ameya Palande; Felipe Contreras >Subject: [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated > >Mark unused ioctls as deprecated for future removal >and print an error message whenever they are used. > >Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> >--- > arch/arm/plat-omap/include/dspbridge/wcdioctl.h | 11 ++++-- > drivers/dsp/bridge/pmgr/wcd.c | 38 +++++++++-------------- > 2 files changed, 22 insertions(+), 27 deletions(-) > Pushed to dspbridge - omar ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration 2010-01-12 1:00 ` [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated Omar Ramirez Luna @ 2010-01-14 0:22 ` Ramirez Luna, Omar 1 sibling, 0 replies; 18+ messages in thread From: Ramirez Luna, Omar @ 2010-01-14 0:22 UTC (permalink / raw) To: linux-omap; +Cc: Menon, Nishanth, Hiroshi Doyu, Ameya Palande, Felipe Contreras >From: Ramirez Luna, Omar >Sent: Monday, January 11, 2010 7:01 PM >To: linux-omap >Cc: Ramirez Luna, Omar; Menon, Nishanth; Hiroshi Doyu; Ameya Palande; Felipe Contreras >Subject: [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration > >Rename ssi_sysconfig variable and replace the usage of magic >numbers while updating SSI configuration. > >Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> >--- > drivers/dsp/bridge/services/clk.c | 12 ++++++++---- > 1 files changed, 8 insertions(+), 4 deletions(-) > Pushed to dspbridge - omar ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap 2010-01-12 1:00 ` [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration Omar Ramirez Luna @ 2010-01-13 23:57 ` Ramirez Luna, Omar 1 sibling, 0 replies; 18+ messages in thread From: Ramirez Luna, Omar @ 2010-01-13 23:57 UTC (permalink / raw) To: linux-omap Cc: Tony Lindgren, Menon, Nishanth, Hiroshi Doyu, Ameya Palande, Felipe Contreras >From: Ramirez Luna, Omar >Sent: Monday, January 11, 2010 7:01 PM >To: linux-omap >Cc: Ramirez Luna, Omar; Tony Lindgren; Menon, Nishanth; Hiroshi Doyu; Ameya Palande; Felipe Contreras >Subject: [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap > >Use ioremap() instead of using IO_ADDRESS macro to make it generic. > >Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> >--- > drivers/dsp/bridge/services/clk.c | 19 +++++++++++++------ > 1 files changed, 13 insertions(+), 6 deletions(-) > Pushed to dspbridge - omar ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v3 0/7] misc patches (for ioctl and ssi) 2010-01-12 1:00 [PATCH v3 0/7] misc patches (for ioctl and ssi) Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap Omar Ramirez Luna @ 2010-01-15 13:06 ` Ameya Palande 2010-01-16 2:04 ` Ramirez Luna, Omar 1 sibling, 1 reply; 18+ messages in thread From: Ameya Palande @ 2010-01-15 13:06 UTC (permalink / raw) To: Omar Ramirez Luna Cc: linux-omap, Nishanth Menon, Doyu Hiroshi (Nokia-D/Helsinki), Contreras Felipe Hi Omar, On Tue, 2010-01-12 at 02:00 +0100, ext Omar Ramirez Luna wrote: > Ioctl numbers has changed, this will require an update on libbridge and clients accesing directly to the driver > > - IO_ADDRESS is replaced for ioremap. > > *v3 > - modified: > DSPBRIDGE: replace IO_ADDRESS with ioremap, checking > the result of ioremap > (http://marc.info/?l=linux-omap&m=126324914710445&w=2). > DSPBRIDGE: Use _IOxx macro to define ioctls (as per Nishanth comments) > - new patch: > DSPBRIDGE: remove WCD_Cmd structure > > *v2 > - dropped from the series: > DSPBRIDGE: Increased DMM size to 256MB > DSPBRIDGE: sysfs entry for global driver state > - will be kept in bridge-pm > DSPBRIDGE: Use dspbridge to initialize platform data > DSPBRIDGE: change to cpufreq_register_notifier for OPP changes > DSPBRIDGE: Fix header locations mach to plat Where is the bridge-pm repository? I am trying to compile dspbridge branch with HEAD commit as: DSPBRIDGE: Use _IOxx macro to define ioctls. But compilation fails because of following missing commit: DSPBRIDGE: Fix header locations mach to plat Can you move this commit from bridge-pm to dspbridge so that dspbridge is in compilable state? Thanks! Cheers, Ameya. ^ permalink raw reply [flat|nested] 18+ messages in thread
* RE: [PATCH v3 0/7] misc patches (for ioctl and ssi) 2010-01-15 13:06 ` [PATCH v3 0/7] misc patches (for ioctl and ssi) Ameya Palande @ 2010-01-16 2:04 ` Ramirez Luna, Omar 0 siblings, 0 replies; 18+ messages in thread From: Ramirez Luna, Omar @ 2010-01-16 2:04 UTC (permalink / raw) To: Ameya Palande Cc: linux-omap, Menon, Nishanth, Doyu Hiroshi (Nokia-D/Helsinki), Contreras Felipe Hi Ameya, >Hi Omar, > >On Tue, 2010-01-12 at 02:00 +0100, ext Omar Ramirez Luna wrote: >> Ioctl numbers has changed, this will require an update on libbridge >> and clients accesing directly to the driver >> >> - IO_ADDRESS is replaced for ioremap. >> >> *v3 >> - modified: >> DSPBRIDGE: replace IO_ADDRESS with ioremap, checking >> the result of ioremap >> (http://marc.info/?l=linux-omap&m=126324914710445&w=2). >> DSPBRIDGE: Use _IOxx macro to define ioctls (as per Nishanth >> comments) >> - new patch: >> DSPBRIDGE: remove WCD_Cmd structure >> >> *v2 >> - dropped from the series: >> DSPBRIDGE: Increased DMM size to 256MB >> DSPBRIDGE: sysfs entry for global driver state >> - will be kept in bridge-pm >> DSPBRIDGE: Use dspbridge to initialize platform data >> DSPBRIDGE: change to cpufreq_register_notifier for OPP changes >> DSPBRIDGE: Fix header locations mach to plat > >Where is the bridge-pm repository? >I am trying to compile dspbridge branch with HEAD commit as: DSPBRIDGE: >Use _IOxx macro to define ioctls. But compilation fails because of following >missing commit: > >DSPBRIDGE: Fix header locations mach to plat > >Can you move this commit from bridge-pm to dspbridge so that dspbridge is >in compilable state? This will break any attempt to compile dspbridge as is on LO. I have created dspbridge-pm, however patch set to compile this branch has just been sent as nobody reviewed it yet. For the patches please refer to: http://marc.info/?l=linux-omap&m=126360672728600&w=2 Dspbridge-pm at dev.omapzoom.org http://dev.omapzoom.org/?p=tidspbridge/kernel-dspbridge.git;a=shortlog;h=refs/heads/dspbridge-pm The branch was created on top of pm-2.6.32. Best Regards, omar ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2010-01-16 2:04 UTC | newest] Thread overview: 18+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-01-12 1:00 [PATCH v3 0/7] misc patches (for ioctl and ssi) Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls Omar Ramirez Luna 2010-01-12 1:00 ` [PATCH v3 7/7] DSPBRIDGE: remove WCD_Cmd structure Omar Ramirez Luna 2010-01-12 1:09 ` Nishanth Menon 2010-01-12 1:09 ` [RESEND][PATCH v3 6/7] DSPBRIDGE: Use _IOxx macro to define ioctls Ramirez Luna, Omar 2010-01-14 0:24 ` [PATCH " Ramirez Luna, Omar 2010-01-14 0:23 ` [PATCH v3 5/7] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Ramirez Luna, Omar 2010-01-14 0:23 ` [PATCH v3 4/7] DSPBRIDGE: remove ioctl runtime check Ramirez Luna, Omar 2010-01-14 0:23 ` [PATCH v3 3/7] DSPBRIDGE: Mark unused ioctls as deprecated Ramirez Luna, Omar 2010-01-14 0:22 ` [PATCH v3 2/7] DSPBRIDGE: Replace magic numbers in SSI configuration Ramirez Luna, Omar 2010-01-13 23:57 ` [PATCH v3 1/7] DSPBRIDGE: replace IO_ADDRESS with ioremap Ramirez Luna, Omar 2010-01-15 13:06 ` [PATCH v3 0/7] misc patches (for ioctl and ssi) Ameya Palande 2010-01-16 2:04 ` Ramirez Luna, Omar
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox