* [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 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 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 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 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 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 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 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