* [PATCH v2 0/6] misc patches @ 2010-01-11 20:12 Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 1/6] DSPBRIDGE: replace IO_ADDRESS with ioremap Omar Ramirez Luna 0 siblings, 1 reply; 9+ messages in thread From: Omar Ramirez Luna @ 2010-01-11 20:12 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishant 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. *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 (6): 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 arch/arm/plat-omap/include/dspbridge/wcdioctl.h | 167 +++++++++-------- drivers/dsp/bridge/pmgr/wcd.c | 228 +++++++++++++---------- drivers/dsp/bridge/rmgr/drv_interface.c | 3 - drivers/dsp/bridge/services/clk.c | 23 ++- 4 files changed, 234 insertions(+), 187 deletions(-) CC: Nishant 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] 9+ messages in thread
* [PATCH 1/6] DSPBRIDGE: replace IO_ADDRESS with ioremap 2010-01-11 20:12 [PATCH v2 0/6] misc patches Omar Ramirez Luna @ 2010-01-11 20:12 ` Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 2/6] DSPBRIDGE: Replace magic numbers in SSI configuration Omar Ramirez Luna 2010-01-11 22:32 ` [PATCH 1/6] DSPBRIDGE: replace IO_ADDRESS with ioremap Tony Lindgren 0 siblings, 2 replies; 9+ messages in thread From: Omar Ramirez Luna @ 2010-01-11 20:12 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishant 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: Nishant 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 | 15 +++++++++------ 1 files changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/dsp/bridge/services/clk.c b/drivers/dsp/bridge/services/clk.c index d1c68fc..116e10e 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,9 @@ 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 (FLAG) { /* Set Autoidle, SIDLEMode to smart idle, and MIDLEmode to @@ -368,5 +369,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] 9+ messages in thread
* [PATCH 2/6] DSPBRIDGE: Replace magic numbers in SSI configuration 2010-01-11 20:12 ` [PATCH 1/6] DSPBRIDGE: replace IO_ADDRESS with ioremap Omar Ramirez Luna @ 2010-01-11 20:12 ` Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 3/6] DSPBRIDGE: Mark unused ioctls as deprecated Omar Ramirez Luna 2010-01-11 22:32 ` [PATCH 1/6] DSPBRIDGE: replace IO_ADDRESS with ioremap Tony Lindgren 1 sibling, 1 reply; 9+ messages in thread From: Omar Ramirez Luna @ 2010-01-11 20:12 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishant 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: Nishant 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 116e10e..0537487 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); @@ -362,14 +366,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] 9+ messages in thread
* [PATCH 3/6] DSPBRIDGE: Mark unused ioctls as deprecated 2010-01-11 20:12 ` [PATCH 2/6] DSPBRIDGE: Replace magic numbers in SSI configuration Omar Ramirez Luna @ 2010-01-11 20:12 ` Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 4/6] DSPBRIDGE: remove ioctl runtime check Omar Ramirez Luna 0 siblings, 1 reply; 9+ messages in thread From: Omar Ramirez Luna @ 2010-01-11 20:12 UTC (permalink / raw) To: linux-omap; +Cc: Omar Ramirez Luna, Nishant Menon, Felipe Contreras Mark unused ioctls as deprecated for future removal. Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> CC: Nishant Menon <nm@ti.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] 9+ messages in thread
* [PATCH 4/6] DSPBRIDGE: remove ioctl runtime check 2010-01-11 20:12 ` [PATCH 3/6] DSPBRIDGE: Mark unused ioctls as deprecated Omar Ramirez Luna @ 2010-01-11 20:12 ` Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 5/6] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Omar Ramirez Luna 0 siblings, 1 reply; 9+ messages in thread From: Omar Ramirez Luna @ 2010-01-11 20:12 UTC (permalink / raw) To: linux-omap; +Cc: Omar Ramirez Luna, Nishant Menon, Felipe Contreras This patch removes the runtime check of device ioctl array. Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> CC: Nishant Menon <nm@ti.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] 9+ messages in thread
* [PATCH 5/6] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl 2010-01-11 20:12 ` [PATCH 4/6] DSPBRIDGE: remove ioctl runtime check Omar Ramirez Luna @ 2010-01-11 20:12 ` Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 6/6] DSPBRIDGE: Use _IOxx macro to define ioctls Omar Ramirez Luna 0 siblings, 1 reply; 9+ messages in thread From: Omar Ramirez Luna @ 2010-01-11 20:12 UTC (permalink / raw) To: linux-omap; +Cc: Omar Ramirez Luna, Nishant Menon Trivial cleanup, rename pResult to result for WCD_CallDevIOCtl Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> CC: Nishant Menon <nm@ti.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] 9+ messages in thread
* [PATCH 6/6] DSPBRIDGE: Use _IOxx macro to define ioctls 2010-01-11 20:12 ` [PATCH 5/6] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Omar Ramirez Luna @ 2010-01-11 20:12 ` Omar Ramirez Luna 2010-01-11 20:11 ` Nishanth Menon 0 siblings, 1 reply; 9+ messages in thread From: Omar Ramirez Luna @ 2010-01-11 20:12 UTC (permalink / raw) To: linux-omap Cc: Omar Ramirez Luna, Nishant 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: Nishant 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 | 164 +++++++++++---------- drivers/dsp/bridge/pmgr/wcd.c | 182 ++++++++++++++--------- drivers/dsp/bridge/rmgr/drv_interface.c | 3 - 3 files changed, 200 insertions(+), 149 deletions(-) diff --git a/arch/arm/plat-omap/include/dspbridge/wcdioctl.h b/arch/arm/plat-omap/include/dspbridge/wcdioctl.h index 4b9dd0a..452be83 100644 --- a/arch/arm/plat-omap/include/dspbridge/wcdioctl.h +++ b/arch/arm/plat-omap/include/dspbridge/wcdioctl.h @@ -437,86 +437,92 @@ union Trapped_Args { } ARGS_UTIL_TESTDLL; } ; -#define CMD_BASE 1 +/* Ioctl driver name */ +#define DB 0xDB + +/* Ioctl module masks */ +#define DB_MGR 0x0 +#define DB_PROC 0x20 +#define DB_NODE 0x40 +#define DB_STRM 0x60 +#define DB_CMM 0x80 + +/* + * 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 + +/* Macro used to calculate the ioctl per dspbridge module */ +#define DB_IOC(module, num) \ + (((module) & DB_MODULE_MASK) | ((num) & 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) + /* 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) + /* 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)98, 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..f52b7b8 100644 --- a/drivers/dsp/bridge/pmgr/wcd.c +++ b/drivers/dsp/bridge/pmgr/wcd.c @@ -157,72 +157,85 @@ 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}, -#ifndef RES_CLEANUP_DISABLE - {MGRWRAP_GetProcessResourcesInfo, CMD_MGR_RESOUCES_OFFSET}, -#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} + +/* 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}, /* MGR_GET_PROC_RES */ + #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 */ +}; + +/* 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 */ }; static inline void __cp_fm_usr(void *to, const void __user *from, @@ -273,13 +286,48 @@ 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); + int i; + + if (_IOC_TYPE(cmd) != DB) { + pr_err("%s: Incompatible dspbridge ioctl number\n", __func__); + goto err; } - return DSP_EINVALIDARG; + /* Retrieve the fxn via the cmd table */ + i = cmd & DB_IOC_MASK; + switch (cmd & DB_MODULE_MASK) { + 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; + default: + pr_err("%s: unknown dspbridge ioctl\n", __func__); + goto err; + } + + if (!ioctl_cmd) { + pr_err("%s: requested ioctl not defined\n", __func__); + goto err; + } else { + *result = (*ioctl_cmd)(args, pr_ctxt); + } + + 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] 9+ messages in thread
* Re: [PATCH 6/6] DSPBRIDGE: Use _IOxx macro to define ioctls 2010-01-11 20:12 ` [PATCH 6/6] DSPBRIDGE: Use _IOxx macro to define ioctls Omar Ramirez Luna @ 2010-01-11 20:11 ` Nishanth Menon 0 siblings, 0 replies; 9+ messages in thread From: Nishanth Menon @ 2010-01-11 20:11 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 02:12 PM, the following: [...] > diff --git a/drivers/dsp/bridge/pmgr/wcd.c b/drivers/dsp/bridge/pmgr/wcd.c > index 02def74..f52b7b8 100644 > --- a/drivers/dsp/bridge/pmgr/wcd.c > +++ b/drivers/dsp/bridge/pmgr/wcd.c [...] > > static inline void __cp_fm_usr(void *to, const void __user *from, > @@ -273,13 +286,48 @@ 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); > + int i; > + > + if (_IOC_TYPE(cmd) != DB) { > + pr_err("%s: Incompatible dspbridge ioctl number\n", __func__); > + goto err; > } > > - return DSP_EINVALIDARG; > + /* Retrieve the fxn via the cmd table */ > + i = cmd & DB_IOC_MASK; > + switch (cmd & DB_MODULE_MASK) { > + case DB_MGR: > + ioctl_cmd = mgr_cmd[i].fxn; just realized we have a risk here. if i > sizeof(mgr_cmd), then we will not catch the out of range error. [...] -- Regards, Nishanth Menon ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/6] DSPBRIDGE: replace IO_ADDRESS with ioremap 2010-01-11 20:12 ` [PATCH 1/6] DSPBRIDGE: replace IO_ADDRESS with ioremap Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 2/6] DSPBRIDGE: Replace magic numbers in SSI configuration Omar Ramirez Luna @ 2010-01-11 22:32 ` Tony Lindgren 1 sibling, 0 replies; 9+ messages in thread From: Tony Lindgren @ 2010-01-11 22:32 UTC (permalink / raw) To: Omar Ramirez Luna Cc: linux-omap, Nishant Menon, Hiroshi Doyu, Ameya Palande, Felipe Contreras * Omar Ramirez Luna <omar.ramirez@ti.com> [100111 12:02]: > Use ioremap() instead of using IO_ADDRESS macro to make it generic. > > Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> > CC: Nishant 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 | 15 +++++++++------ > 1 files changed, 9 insertions(+), 6 deletions(-) > > diff --git a/drivers/dsp/bridge/services/clk.c b/drivers/dsp/bridge/services/clk.c > index d1c68fc..116e10e 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,9 @@ 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); Please check the results from ioremap. Currently we're using static mapping, but that may not always be the case in the future. Regards, Tony ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2010-01-11 22:32 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-01-11 20:12 [PATCH v2 0/6] misc patches Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 1/6] DSPBRIDGE: replace IO_ADDRESS with ioremap Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 2/6] DSPBRIDGE: Replace magic numbers in SSI configuration Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 3/6] DSPBRIDGE: Mark unused ioctls as deprecated Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 4/6] DSPBRIDGE: remove ioctl runtime check Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 5/6] DSPBRIDGE: Rename pResult to result for WCD_CallDevIOCtl Omar Ramirez Luna 2010-01-11 20:12 ` [PATCH 6/6] DSPBRIDGE: Use _IOxx macro to define ioctls Omar Ramirez Luna 2010-01-11 20:11 ` Nishanth Menon 2010-01-11 22:32 ` [PATCH 1/6] DSPBRIDGE: replace IO_ADDRESS with ioremap Tony Lindgren
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox