diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d766cf1de970653842b1e6bee33932b5c7be4c5e --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +system.sh +KERNEL +dl +deploy +SDK +SDK_BIN +DSP_Install_libs.tar.gz +GFX_*_libs.tar.gz +GFX_Linux_SDK.tar.gz +OMAP35x_Graphics_SDK_setuplinux_*.bin +Graphics_SDK_setuplinux_*.bin +patches/patch-*.bz2 diff --git a/patch.sh b/patch.sh index 9e89a3f1025fefb8a4fe638de17eb4ee22f95d22..7049b151373ab73bfd5c875eb90f90102ef6352a 100644 --- a/patch.sh +++ b/patch.sh @@ -191,32 +191,8 @@ patch -s -p1 < "${DIR}/patches/devkit8000/0001-arm-omap-devkit8000-for-lcd-use-s function dspbridge { echo "dspbridge from staging" -patch -s -p1 < "${DIR}/patches/dspbridge/0001-staging-tidspbridge-make-sync_wait_on_event-interrup.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0002-staging-tidspbridge-overwrite-DSP-error-codes.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0003-staging-tidspbridge-Eliminate-direct-manipulation-of.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0004-staging-tidspbridge-fix-mgr_enum_node_info.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0005-staging-tidspbridge-mgr_enum_node_info-cleanup.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0006-staging-tidspbridge-fix-kernel-oops-in-bridge_io_get.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0007-staging-tidspbridge-remove-gs-memory-allocator.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0008-staging-tidspbridge-remove-utildefs.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0009-staging-tidspbridge-switch-to-linux-bitmap-API.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0010-staging-tidspbridge-remove-gb-bitmap-implementation.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0011-staging-tidspbridge-convert-core-to-list_head.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0012-staging-tidspbridge-convert-pmgr-to-list_head.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0013-staging-tidspbridge-convert-rmgr-to-list_head.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0014-staging-tidspbridge-remove-custom-linked-list.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0015-staging-tidspbridge-core-code-cleanup.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0016-staging-tidspbridge-pmgr-code-cleanup.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0017-staging-tidspbridge-use-the-right-type-for-list_is_l.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0018-staging-tidspbridge-rmgr-node.c-code-cleanup.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0019-staging-tidspbridge-Fix-atoi-to-support-hexadecimal-.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0020-staging-tidspbridge-Remove-unused-defined-constants.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0021-staging-tidspbridge-Remove-unused-functions.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0022-staging-tidspbridge-Remove-unused-structs.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0023-staging-tidspbridge-Remove-unused-typedefs.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0024-staging-tidspbridge-Remove-trivial-header-files.patch" -patch -s -p1 < "${DIR}/patches/dspbridge/0025-staging-tidspbridge-remove-code-referred-by-OPT_ZERO.patch" - +patch -s -p1 < "${DIR}/patches/dspbridge/0001-staging-tidspbridge-configure-full-L1-MMU-range.patch" +patch -s -p1 < "${DIR}/patches/dspbridge/0001-staging-tidspbridge-replace-mbox-callback-with-notif.patch" } function dvfs { diff --git a/patches/defconfig b/patches/defconfig index 8f7c4050c1ddfabbf5519b2d72be07bcd4fc4ee8..8203a5ab7af6e8b978523c26bc89c92fff1f4d50 100644 --- a/patches/defconfig +++ b/patches/defconfig @@ -3223,7 +3223,15 @@ CONFIG_ZRAM=m # CONFIG_LIRC_STAGING is not set # CONFIG_SMB_FS is not set # CONFIG_EASYCAP is not set -# CONFIG_TIDSPBRIDGE is not set +CONFIG_TIDSPBRIDGE=m +CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE=0x600000 +# CONFIG_TIDSPBRIDGE_DEBUG is not set +CONFIG_TIDSPBRIDGE_RECOVERY=y +# CONFIG_TIDSPBRIDGE_CACHE_LINE_CHECK is not set +CONFIG_TIDSPBRIDGE_WDT3=y +CONFIG_TIDSPBRIDGE_WDT_TIMEOUT=5 +# CONFIG_TIDSPBRIDGE_NTFY_PWRERR is not set +# CONFIG_TIDSPBRIDGE_BACKTRACE is not set # CONFIG_WESTBRIDGE is not set CONFIG_WESTBRIDGE_HAL_SELECTED=y CONFIG_MACH_OMAP3_WESTBRIDGE_AST_PNAND_HAL=y diff --git a/patches/dspbridge/0001-omap-mailbox-fix-detection-for-previously-supported-.patch b/patches/dspbridge/0001-omap-mailbox-fix-detection-for-previously-supported-.patch deleted file mode 100644 index cb273b84b8643561e9aca1392cc7e9c7a2a4b7e1..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0001-omap-mailbox-fix-detection-for-previously-supported-.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 004d54121d73c8f7754497e0f77d5cfe6bbc95c8 Mon Sep 17 00:00:00 2001 -From: omar ramirez <omar.ramirez@ti.com> -Date: Sat, 6 Nov 2010 01:17:23 +0000 -Subject: [PATCH] omap: mailbox: fix detection for previously supported chips - -Fix the mailbox detection for OMAP3630 and 2430, also minor -cleanup on conditional ifdef's that could affect it. - -Given that 2430 has an iva too include it, as the same steps -for omap3 apply. - -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - arch/arm/mach-omap2/mailbox.c | 16 ++++++++++------ - 1 files changed, 10 insertions(+), 6 deletions(-) - -diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c -index 40ddeca..a0af532 100644 ---- a/arch/arm/mach-omap2/mailbox.c -+++ b/arch/arm/mach-omap2/mailbox.c -@@ -281,7 +281,7 @@ static struct omap_mbox_ops omap2_mbox_ops = { - - /* FIXME: the following structs should be filled automatically by the user id */ - --#if defined(CONFIG_ARCH_OMAP3430) || defined(CONFIG_ARCH_OMAP2420) -+#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP2) - /* DSP */ - static struct omap_mbox2_priv omap2_mbox_dsp_priv = { - .tx_fifo = { -@@ -306,7 +306,7 @@ struct omap_mbox mbox_dsp_info = { - }; - #endif - --#if defined(CONFIG_ARCH_OMAP3430) -+#if defined(CONFIG_ARCH_OMAP3) - struct omap_mbox *omap3_mboxes[] = { &mbox_dsp_info, NULL }; - #endif - -@@ -394,15 +394,19 @@ static int __devinit omap2_mbox_probe(struct platform_device *pdev) - - if (false) - ; --#if defined(CONFIG_ARCH_OMAP3430) -- else if (cpu_is_omap3430()) { -+#if defined(CONFIG_ARCH_OMAP3) -+ else if (cpu_is_omap34xx()) { - list = omap3_mboxes; - - list[0]->irq = platform_get_irq_byname(pdev, "dsp"); - } - #endif --#if defined(CONFIG_ARCH_OMAP2420) -- else if (cpu_is_omap2420()) { -+#if defined(CONFIG_ARCH_OMAP2) -+ else if (cpu_is_omap2430()) { -+ list = omap2_mboxes; -+ -+ list[0]->irq = platform_get_irq_byname(pdev, "dsp"); -+ } else if (cpu_is_omap2420()) { - list = omap2_mboxes; - - list[0]->irq = platform_get_irq_byname(pdev, "dsp"); --- -1.7.1 - diff --git a/patches/dspbridge/0001-staging-tidspbridge-configure-full-L1-MMU-range.patch b/patches/dspbridge/0001-staging-tidspbridge-configure-full-L1-MMU-range.patch new file mode 100644 index 0000000000000000000000000000000000000000..1ed31e6ef8fd35bcbf1a8dfaeefc8d8ea9d092fe --- /dev/null +++ b/patches/dspbridge/0001-staging-tidspbridge-configure-full-L1-MMU-range.patch @@ -0,0 +1,45 @@ +From 8e290fd41a15e392af87a33c9c4db3daffcd558b Mon Sep 17 00:00:00 2001 +From: Guzman Lugo, Fernando <fernando.lugo@ti.com> +Date: Thu, 13 Jan 2011 23:34:52 -0600 +Subject: [PATCH] staging: tidspbridge: configure full L1 MMU range + +IVA MMU can manage up to 4GB of address space through its page tables, +given that it's L1 is divided into 1MB sections it requires at least +16KB for its table which represents 4096 entries of 32 bits each. + +Previously, only 1GB was being handled by setting the page table size +to 4KB, any virtual address beyond of the L1 size used, would fall +into memory that does not belong to L1 translation tables, leading to +unpredictable results. + +So, set the L1 table size to cover the entire MMU range (4GB) whether +is meant to be used or not. + +Reported-by: Felipe Contreras <felipe.contreras@nokia.com> +Signed-off-by: Fernando Guzman Lugo <fernando.lugo@ti.com> +Signed-off-by: Felipe Contreras <felipe.contreras@nokia.com> +Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> +--- + drivers/staging/tidspbridge/core/tiomap3430.c | 5 +---- + 1 files changed, 1 insertions(+), 4 deletions(-) + +diff --git a/drivers/staging/tidspbridge/core/tiomap3430.c b/drivers/staging/tidspbridge/core/tiomap3430.c +index a3b0a18..c3126e2 100644 +--- a/drivers/staging/tidspbridge/core/tiomap3430.c ++++ b/drivers/staging/tidspbridge/core/tiomap3430.c +@@ -786,10 +786,7 @@ static int bridge_dev_create(struct bridge_dev_context + + pt_attrs = kzalloc(sizeof(struct pg_table_attrs), GFP_KERNEL); + if (pt_attrs != NULL) { +- /* Assuming that we use only DSP's memory map +- * until 0x4000:0000 , we would need only 1024 +- * L1 enties i.e L1 size = 4K */ +- pt_attrs->l1_size = 0x1000; ++ pt_attrs->l1_size = SZ_16K; /* 4096 entries of 32 bits */ + align_size = pt_attrs->l1_size; + /* Align sizes are expected to be power of 2 */ + /* we like to get aligned on L1 table size */ +-- +1.7.1 + diff --git a/patches/dspbridge/0001-staging-tidspbridge-make-sync_wait_on_event-interrup.patch b/patches/dspbridge/0001-staging-tidspbridge-make-sync_wait_on_event-interrup.patch deleted file mode 100644 index c3991d3dc6205040c5df7615a61672db387ab9ef..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0001-staging-tidspbridge-make-sync_wait_on_event-interrup.patch +++ /dev/null @@ -1,45 +0,0 @@ -From d66f2a4c63c6f5646c30ed22bb1b28a6c07cc7bc Mon Sep 17 00:00:00 2001 -From: Guzman Lugo, Fernando <x0095840@ti.com> -Date: Tue, 26 Oct 2010 00:51:46 +0000 -Subject: [PATCH 01/25] staging: tidspbridge - make sync_wait_on_event interruptible - -So that avoid non-killable process. - -Signed-off-by: Fernando Guzman Lugo <x0095840@ti.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - .../staging/tidspbridge/include/dspbridge/sync.h | 13 +++++++++++-- - 1 files changed, 11 insertions(+), 2 deletions(-) - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/sync.h b/drivers/staging/tidspbridge/include/dspbridge/sync.h -index e2651e7..df05b8f 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/sync.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/sync.h -@@ -80,13 +80,22 @@ void sync_set_event(struct sync_object *event); - * This functios will wait until @event is set or until timeout. In case of - * success the function will return 0 and - * in case of timeout the function will return -ETIME -+ * in case of signal the function will return -ERESTARTSYS - */ - - static inline int sync_wait_on_event(struct sync_object *event, - unsigned timeout) - { -- return wait_for_completion_timeout(&event->comp, -- msecs_to_jiffies(timeout)) ? 0 : -ETIME; -+ int res; -+ -+ res = wait_for_completion_interruptible_timeout(&event->comp, -+ msecs_to_jiffies(timeout)); -+ if (!res) -+ res = -ETIME; -+ else if (res > 0) -+ res = 0; -+ -+ return res; - } - - /** --- -1.7.1 - diff --git a/patches/dspbridge/0001-staging-tidspbridge-replace-mbox-callback-with-notif.patch b/patches/dspbridge/0001-staging-tidspbridge-replace-mbox-callback-with-notif.patch new file mode 100644 index 0000000000000000000000000000000000000000..e6b20447bdb57fba3aac1de749a8e791d786f4c0 --- /dev/null +++ b/patches/dspbridge/0001-staging-tidspbridge-replace-mbox-callback-with-notif.patch @@ -0,0 +1,135 @@ +From 85d139c977dd13cd1ca5cb3b9d8e39cb477eaf0c Mon Sep 17 00:00:00 2001 +From: Omar Ramirez Luna <omar.ramirez@ti.com> +Date: Fri, 14 Jan 2011 17:49:51 -0600 +Subject: [PATCH] staging: tidspbridge: replace mbox callback with notifier_call + +Lately, mailbox callbacks have been replaced by notifier block +call chains, this needs to be changed in the users of mailbox, +otherwise compilation will break due to missing parameters. + +For this new change to work, io_mbox_msg needs to be compatible +with the notifier_call definition. + +Reported-by: Hari Kanigeri <h-kanigeri2@ti.com> +Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> +--- + drivers/staging/tidspbridge/core/io_sm.c | 8 +++--- + drivers/staging/tidspbridge/core/tiomap3430.c | 10 +++++--- + .../staging/tidspbridge/include/dspbridge/io_sm.h | 21 +++++++------------ + 3 files changed, 18 insertions(+), 21 deletions(-) + +diff --git a/drivers/staging/tidspbridge/core/io_sm.c b/drivers/staging/tidspbridge/core/io_sm.c +index 5718645..27e0aa8 100644 +--- a/drivers/staging/tidspbridge/core/io_sm.c ++++ b/drivers/staging/tidspbridge/core/io_sm.c +@@ -949,7 +949,7 @@ func_end: + * Calls the Bridge's CHNL_ISR to determine if this interrupt is ours, then + * schedules a DPC to dispatch I/O. + */ +-void io_mbox_msg(u32 msg) ++int io_mbox_msg(struct notifier_block *self, unsigned long len, void *msg) + { + struct io_mgr *pio_mgr; + struct dev_object *dev_obj; +@@ -959,9 +959,9 @@ void io_mbox_msg(u32 msg) + dev_get_io_mgr(dev_obj, &pio_mgr); + + if (!pio_mgr) +- return; ++ return NOTIFY_BAD; + +- pio_mgr->intr_val = (u16)msg; ++ pio_mgr->intr_val = (u16)((u32)msg); + if (pio_mgr->intr_val & MBX_PM_CLASS) + io_dispatch_pm(pio_mgr); + +@@ -973,7 +973,7 @@ void io_mbox_msg(u32 msg) + spin_unlock_irqrestore(&pio_mgr->dpc_lock, flags); + tasklet_schedule(&pio_mgr->dpc_tasklet); + } +- return; ++ return NOTIFY_OK; + } + + /* +diff --git a/drivers/staging/tidspbridge/core/tiomap3430.c b/drivers/staging/tidspbridge/core/tiomap3430.c +index c3126e2..a3f69f6 100644 +--- a/drivers/staging/tidspbridge/core/tiomap3430.c ++++ b/drivers/staging/tidspbridge/core/tiomap3430.c +@@ -223,6 +223,10 @@ static struct bridge_drv_interface drv_interface_fxns = { + bridge_msg_set_queue_id, + }; + ++static struct notifier_block dsp_mbox_notifier = { ++ .notifier_call = io_mbox_msg, ++}; ++ + static inline void flush_all(struct bridge_dev_context *dev_context) + { + if (dev_context->dw_brd_state == BRD_DSP_HIBERNATION || +@@ -553,7 +557,7 @@ static int bridge_brd_start(struct bridge_dev_context *dev_ctxt, + * Enable Mailbox events and also drain any pending + * stale messages. + */ +- dev_context->mbox = omap_mbox_get("dsp"); ++ dev_context->mbox = omap_mbox_get("dsp", &dsp_mbox_notifier); + if (IS_ERR(dev_context->mbox)) { + dev_context->mbox = NULL; + pr_err("%s: Failed to get dsp mailbox handle\n", +@@ -563,8 +567,6 @@ static int bridge_brd_start(struct bridge_dev_context *dev_ctxt, + + } + if (!status) { +- dev_context->mbox->rxq->callback = (int (*)(void *))io_mbox_msg; +- + /*PM_IVA2GRPSEL_PER = 0xC0;*/ + temp = readl(resources->dw_per_pm_base + 0xA8); + temp = (temp & 0xFFFFFF30) | 0xC0; +@@ -685,7 +687,7 @@ static int bridge_brd_stop(struct bridge_dev_context *dev_ctxt) + /* Disable the mailbox interrupts */ + if (dev_context->mbox) { + omap_mbox_disable_irq(dev_context->mbox, IRQ_RX); +- omap_mbox_put(dev_context->mbox); ++ omap_mbox_put(dev_context->mbox, &dsp_mbox_notifier); + dev_context->mbox = NULL; + } + /* Reset IVA2 clocks*/ +diff --git a/drivers/staging/tidspbridge/include/dspbridge/io_sm.h b/drivers/staging/tidspbridge/include/dspbridge/io_sm.h +index 18aec55..8242c70 100644 +--- a/drivers/staging/tidspbridge/include/dspbridge/io_sm.h ++++ b/drivers/staging/tidspbridge/include/dspbridge/io_sm.h +@@ -72,22 +72,17 @@ extern void io_dpc(unsigned long ref_data); + /* + * ======== io_mbox_msg ======== + * Purpose: +- * Main interrupt handler for the shared memory Bridge channel manager. +- * Calls the Bridge's chnlsm_isr to determine if this interrupt is ours, +- * then schedules a DPC to dispatch I/O. ++ * Main message handler for the shared memory Bridge channel manager. ++ * Determine if this message is ours, then schedules a DPC to ++ * dispatch I/O. + * Parameters: +- * ref_data: Pointer to the channel manager object for this board. +- * Set in an initial call to ISR_Install(). ++ * self: Pointer to its own notifier_block struct. ++ * len: Length of message. ++ * msg: Message code received. + * Returns: +- * TRUE if interrupt handled; FALSE otherwise. +- * Requires: +- * Must be in locked memory if executing in kernel mode. +- * Must only call functions which are in locked memory if Kernel mode. +- * Must only call asynchronous services. +- * Interrupts are disabled and EOI for this interrupt has been sent. +- * Ensures: ++ * NOTIFY_OK if handled; NOTIFY_BAD otherwise. + */ +-void io_mbox_msg(u32 msg); ++int io_mbox_msg(struct notifier_block *self, unsigned long len, void *msg); + + /* + * ======== io_request_chnl ======== +-- +1.7.1 + diff --git a/patches/dspbridge/0002-staging-tidspbridge-overwrite-DSP-error-codes.patch b/patches/dspbridge/0002-staging-tidspbridge-overwrite-DSP-error-codes.patch deleted file mode 100644 index c42309732c8c3c28c5158f573b539abc160de586..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0002-staging-tidspbridge-overwrite-DSP-error-codes.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 991f03559122d43fccee62c956ea0faf87ee25d7 Mon Sep 17 00:00:00 2001 -From: Sapiens, Rene <rene.sapiens@ti.com> -Date: Thu, 4 Nov 2010 00:31:24 +0000 -Subject: [PATCH 02/25] staging: tidspbridge: overwrite DSP error codes - -When calling the DSP's remote functions, the DSP returns error -codes different from the ones managed by the kernel, the -function's return value is shared with the MPU using a shared -structure. This patch overwrites those error codes by kernel -specifics and deletes unnecessary code. - -Signed-off-by: Rene Sapiens <rene.sapiens@ti.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/rmgr/disp.c | 44 +++++------------------------- - 1 files changed, 8 insertions(+), 36 deletions(-) - -diff --git a/drivers/staging/tidspbridge/rmgr/disp.c b/drivers/staging/tidspbridge/rmgr/disp.c -index b7ce435..560069a 100644 ---- a/drivers/staging/tidspbridge/rmgr/disp.c -+++ b/drivers/staging/tidspbridge/rmgr/disp.c -@@ -460,17 +460,6 @@ int disp_node_create(struct disp_object *disp_obj, - DBC_ASSERT(ul_bytes < (RMS_COMMANDBUFSIZE * sizeof(rms_word))); - status = send_message(disp_obj, node_get_timeout(hnode), - ul_bytes, node_env); -- if (status >= 0) { -- /* -- * Message successfully received from RMS. -- * Return the status of the Node's create function -- * on the DSP-side -- */ -- status = (((rms_word *) (disp_obj->pbuf))[0]); -- if (status < 0) -- dev_dbg(bridge, "%s: DSP-side failed: 0x%x\n", -- __func__, status); -- } - } - func_end: - return status; -@@ -513,18 +502,6 @@ int disp_node_delete(struct disp_object *disp_obj, - status = send_message(disp_obj, node_get_timeout(hnode), - sizeof(struct rms_command), - &dw_arg); -- if (status >= 0) { -- /* -- * Message successfully received from RMS. -- * Return the status of the Node's delete -- * function on the DSP-side -- */ -- status = (((rms_word *) (disp_obj->pbuf))[0]); -- if (status < 0) -- dev_dbg(bridge, "%s: DSP-side failed: " -- "0x%x\n", __func__, status); -- } -- - } - } - return status; -@@ -566,18 +543,6 @@ int disp_node_run(struct disp_object *disp_obj, - status = send_message(disp_obj, node_get_timeout(hnode), - sizeof(struct rms_command), - &dw_arg); -- if (status >= 0) { -- /* -- * Message successfully received from RMS. -- * Return the status of the Node's execute -- * function on the DSP-side -- */ -- status = (((rms_word *) (disp_obj->pbuf))[0]); -- if (status < 0) -- dev_dbg(bridge, "%s: DSP-side failed: " -- "0x%x\n", __func__, status); -- } -- - } - } - -@@ -739,7 +704,14 @@ static int send_message(struct disp_object *disp_obj, u32 timeout, - } else { - if (CHNL_IS_IO_COMPLETE(chnl_ioc_obj)) { - DBC_ASSERT(chnl_ioc_obj.pbuf == pbuf); -- status = (*((rms_word *) chnl_ioc_obj.pbuf)); -+ if (*((int *)chnl_ioc_obj.pbuf) < 0) { -+ /* Translate DSP's to kernel error */ -+ status = -EREMOTEIO; -+ dev_dbg(bridge, "%s: DSP-side failed:" -+ " DSP errcode = 0x%x, Kernel " -+ "errcode = %d\n", __func__, -+ *(int *)pbuf, status); -+ } - *pdw_arg = - (((rms_word *) (chnl_ioc_obj.pbuf))[1]); - } else { --- -1.7.1 - diff --git a/patches/dspbridge/0003-staging-tidspbridge-Eliminate-direct-manipulation-of.patch b/patches/dspbridge/0003-staging-tidspbridge-Eliminate-direct-manipulation-of.patch deleted file mode 100644 index e3da15a78f828bf6f348d2044f73d22c6fd935d0..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0003-staging-tidspbridge-Eliminate-direct-manipulation-of.patch +++ /dev/null @@ -1,157 +0,0 @@ -From abfb6546fb6de50d1f7d0d614a09459e7818b2e1 Mon Sep 17 00:00:00 2001 -From: Armando Uribe <x0095078@ti.com> -Date: Mon, 1 Nov 2010 17:15:50 -0600 -Subject: [PATCH 03/25] staging: tidspbridge - Eliminate direct manipulation of OMAP_SYSC_BASE - -Eliminates Bridge direct manipulation of OMAP_SYSC_BASE registers - -Signed-off-by: Armando Uribe <x0095078@ti.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/core/dsp-clock.c | 52 +------------------- - drivers/staging/tidspbridge/core/tiomap3430.c | 3 - - .../tidspbridge/include/dspbridge/cfgdefs.h | 1 - - .../staging/tidspbridge/include/dspbridge/drv.h | 3 - - drivers/staging/tidspbridge/rmgr/drv.c | 1 - - 5 files changed, 2 insertions(+), 58 deletions(-) - -diff --git a/drivers/staging/tidspbridge/core/dsp-clock.c b/drivers/staging/tidspbridge/core/dsp-clock.c -index 46d17c7..589a055 100644 ---- a/drivers/staging/tidspbridge/core/dsp-clock.c -+++ b/drivers/staging/tidspbridge/core/dsp-clock.c -@@ -146,54 +146,6 @@ void dsp_clk_init(void) - ssi.sst_fck, ssi.ssr_fck, ssi.ick); - } - --#ifdef CONFIG_OMAP_MCBSP --static void mcbsp_clk_prepare(bool flag, u8 id) --{ -- struct cfg_hostres *resources; -- struct dev_object *hdev_object = NULL; -- struct bridge_dev_context *bridge_context = NULL; -- u32 val; -- -- hdev_object = (struct dev_object *)drv_get_first_dev_object(); -- if (!hdev_object) -- return; -- -- dev_get_bridge_context(hdev_object, &bridge_context); -- if (!bridge_context) -- return; -- -- resources = bridge_context->resources; -- if (!resources) -- return; -- -- if (flag) { -- if (id == DSP_CLK_MCBSP1) { -- /* set MCBSP1_CLKS, on McBSP1 ON */ -- val = __raw_readl(resources->dw_sys_ctrl_base + 0x274); -- val |= 1 << 2; -- __raw_writel(val, resources->dw_sys_ctrl_base + 0x274); -- } else if (id == DSP_CLK_MCBSP2) { -- /* set MCBSP2_CLKS, on McBSP2 ON */ -- val = __raw_readl(resources->dw_sys_ctrl_base + 0x274); -- val |= 1 << 6; -- __raw_writel(val, resources->dw_sys_ctrl_base + 0x274); -- } -- } else { -- if (id == DSP_CLK_MCBSP1) { -- /* clear MCBSP1_CLKS, on McBSP1 OFF */ -- val = __raw_readl(resources->dw_sys_ctrl_base + 0x274); -- val &= ~(1 << 2); -- __raw_writel(val, resources->dw_sys_ctrl_base + 0x274); -- } else if (id == DSP_CLK_MCBSP2) { -- /* clear MCBSP2_CLKS, on McBSP2 OFF */ -- val = __raw_readl(resources->dw_sys_ctrl_base + 0x274); -- val &= ~(1 << 6); -- __raw_writel(val, resources->dw_sys_ctrl_base + 0x274); -- } -- } --} --#endif -- - /** - * dsp_gpt_wait_overflow - set gpt overflow and wait for fixed timeout - * @clk_id: GP Timer clock id. -@@ -257,9 +209,9 @@ int dsp_clk_enable(enum dsp_clk_id clk_id) - break; - #ifdef CONFIG_OMAP_MCBSP - case MCBSP_CLK: -- mcbsp_clk_prepare(true, clk_id); - omap_mcbsp_set_io_type(MCBSP_ID(clk_id), OMAP_MCBSP_POLL_IO); - omap_mcbsp_request(MCBSP_ID(clk_id)); -+ omap2_mcbsp_set_clks_src(MCBSP_ID(clk_id), MCBSP_CLKS_PAD_SRC); - break; - #endif - case WDT_CLK: -@@ -334,7 +286,7 @@ int dsp_clk_disable(enum dsp_clk_id clk_id) - break; - #ifdef CONFIG_OMAP_MCBSP - case MCBSP_CLK: -- mcbsp_clk_prepare(false, clk_id); -+ omap2_mcbsp_set_clks_src(MCBSP_ID(clk_id), MCBSP_CLKS_PRCM_SRC); - omap_mcbsp_free(MCBSP_ID(clk_id)); - break; - #endif -diff --git a/drivers/staging/tidspbridge/core/tiomap3430.c b/drivers/staging/tidspbridge/core/tiomap3430.c -index 1be081f..cb45e93 100644 ---- a/drivers/staging/tidspbridge/core/tiomap3430.c -+++ b/drivers/staging/tidspbridge/core/tiomap3430.c -@@ -1037,15 +1037,12 @@ static int bridge_dev_destroy(struct bridge_dev_context *dev_ctxt) - iounmap((void *)host_res->dw_per_pm_base); - if (host_res->dw_core_pm_base) - iounmap((void *)host_res->dw_core_pm_base); -- if (host_res->dw_sys_ctrl_base) -- iounmap(host_res->dw_sys_ctrl_base); - - host_res->dw_mem_base[0] = (u32) NULL; - host_res->dw_mem_base[2] = (u32) NULL; - host_res->dw_mem_base[3] = (u32) NULL; - host_res->dw_mem_base[4] = (u32) NULL; - host_res->dw_dmmu_base = NULL; -- host_res->dw_sys_ctrl_base = NULL; - - kfree(host_res); - } -diff --git a/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h b/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h -index 38122db..f403c01 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h -@@ -69,7 +69,6 @@ struct cfg_hostres { - u32 dw_per_pm_base; - u32 dw_core_pm_base; - void __iomem *dw_dmmu_base; -- void __iomem *dw_sys_ctrl_base; - }; - - struct cfg_dspmemdesc { -diff --git a/drivers/staging/tidspbridge/include/dspbridge/drv.h b/drivers/staging/tidspbridge/include/dspbridge/drv.h -index c1f363e..37f5a45 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/drv.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/drv.h -@@ -65,9 +65,6 @@ - #define OMAP_CORE_PRM_BASE 0x48306A00 - #define OMAP_CORE_PRM_SIZE 0x1000 - --#define OMAP_SYSC_BASE 0x48002000 --#define OMAP_SYSC_SIZE 0x1000 -- - #define OMAP_DMMU_BASE 0x5D000000 - #define OMAP_DMMU_SIZE 0x1000 - -diff --git a/drivers/staging/tidspbridge/rmgr/drv.c b/drivers/staging/tidspbridge/rmgr/drv.c -index 81b1b90..c50579c 100644 ---- a/drivers/staging/tidspbridge/rmgr/drv.c -+++ b/drivers/staging/tidspbridge/rmgr/drv.c -@@ -740,7 +740,6 @@ static int request_bridge_resources(struct cfg_hostres *res) - host_res->num_mem_windows = 2; - - /* First window is for DSP internal memory */ -- host_res->dw_sys_ctrl_base = ioremap(OMAP_SYSC_BASE, OMAP_SYSC_SIZE); - dev_dbg(bridge, "dw_mem_base[0] 0x%x\n", host_res->dw_mem_base[0]); - dev_dbg(bridge, "dw_mem_base[3] 0x%x\n", host_res->dw_mem_base[3]); - dev_dbg(bridge, "dw_dmmu_base %p\n", host_res->dw_dmmu_base); --- -1.7.1 - diff --git a/patches/dspbridge/0004-staging-tidspbridge-fix-mgr_enum_node_info.patch b/patches/dspbridge/0004-staging-tidspbridge-fix-mgr_enum_node_info.patch deleted file mode 100644 index 71e347570299e684def9d122d0d03cd64de43b56..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0004-staging-tidspbridge-fix-mgr_enum_node_info.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 356be372017d3fcbe6fab3078a19b25c971c7a78 Mon Sep 17 00:00:00 2001 -From: Felipe Contreras <felipe.contreras@gmail.com> -Date: Fri, 5 Nov 2010 17:01:48 +0000 -Subject: [PATCH 04/25] staging: tidspbridge: fix mgr_enum_node_info - -The current code was always returning a non-zero status value -to userspace applications when this ioctl was called. - -The error code was ENODATA, which isn't actually an error, -it's always returned by dcd_enumerate_object() when it hits the -end of list. - -Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/rmgr/mgr.c | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -diff --git a/drivers/staging/tidspbridge/rmgr/mgr.c b/drivers/staging/tidspbridge/rmgr/mgr.c -index 0ea89a1..2eab6a5 100644 ---- a/drivers/staging/tidspbridge/rmgr/mgr.c -+++ b/drivers/staging/tidspbridge/rmgr/mgr.c -@@ -169,6 +169,11 @@ int mgr_enum_node_info(u32 node_id, struct dsp_ndbprops *pndb_props, - - } - } -+ -+ /* the last status is not 0, but neither an error */ -+ if (status > 0) -+ status = 0; -+ - if (!status) { - if (node_id > (node_index - 1)) { - status = -EINVAL; --- -1.7.1 - diff --git a/patches/dspbridge/0005-staging-tidspbridge-mgr_enum_node_info-cleanup.patch b/patches/dspbridge/0005-staging-tidspbridge-mgr_enum_node_info-cleanup.patch deleted file mode 100644 index 323b3a43171272943bfc9f80ddc7db794607ac72..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0005-staging-tidspbridge-mgr_enum_node_info-cleanup.patch +++ /dev/null @@ -1,99 +0,0 @@ -From c1a29417a1d1aab88e1249303bba2cbe58ff6d1e Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Fri, 5 Nov 2010 17:01:49 +0000 -Subject: [PATCH 05/25] staging: tidspbridge: mgr_enum_node_info cleanup - -Reorganized mgr_enum_node_info code to increase its -readability. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/rmgr/mgr.c | 51 ++++++++++---------------------- - 1 files changed, 16 insertions(+), 35 deletions(-) - -diff --git a/drivers/staging/tidspbridge/rmgr/mgr.c b/drivers/staging/tidspbridge/rmgr/mgr.c -index 2eab6a5..16410a5 100644 ---- a/drivers/staging/tidspbridge/rmgr/mgr.c -+++ b/drivers/staging/tidspbridge/rmgr/mgr.c -@@ -134,8 +134,7 @@ int mgr_enum_node_info(u32 node_id, struct dsp_ndbprops *pndb_props, - u32 undb_props_size, u32 *pu_num_nodes) - { - int status = 0; -- struct dsp_uuid node_uuid, temp_uuid; -- u32 temp_index = 0; -+ struct dsp_uuid node_uuid; - u32 node_index = 0; - struct dcd_genericobj gen_obj; - struct mgr_object *pmgr_obj = NULL; -@@ -149,24 +148,27 @@ int mgr_enum_node_info(u32 node_id, struct dsp_ndbprops *pndb_props, - *pu_num_nodes = 0; - /* Get the Manager Object from the driver data */ - if (!drv_datap || !drv_datap->mgr_object) { -- status = -ENODATA; - pr_err("%s: Failed to retrieve the object handle\n", __func__); -- goto func_cont; -- } else { -- pmgr_obj = drv_datap->mgr_object; -+ return -ENODATA; - } -+ pmgr_obj = drv_datap->mgr_object; - - DBC_ASSERT(pmgr_obj); - /* Forever loop till we hit failed or no more items in the - * Enumeration. We will exit the loop other than 0; */ -- while (status == 0) { -- status = dcd_enumerate_object(temp_index++, DSP_DCDNODETYPE, -- &temp_uuid); -- if (status == 0) { -- node_index++; -- if (node_id == (node_index - 1)) -- node_uuid = temp_uuid; -- -+ while (!status) { -+ status = dcd_enumerate_object(node_index++, DSP_DCDNODETYPE, -+ &node_uuid); -+ if (status) -+ break; -+ *pu_num_nodes = node_index; -+ if (node_id == (node_index - 1)) { -+ status = dcd_get_object_def(pmgr_obj->hdcd_mgr, -+ &node_uuid, DSP_DCDNODETYPE, &gen_obj); -+ if (status) -+ break; -+ /* Get the Obj def */ -+ *pndb_props = gen_obj.obj_data.node_obj.ndb_props; - } - } - -@@ -174,27 +176,6 @@ int mgr_enum_node_info(u32 node_id, struct dsp_ndbprops *pndb_props, - if (status > 0) - status = 0; - -- if (!status) { -- if (node_id > (node_index - 1)) { -- status = -EINVAL; -- } else { -- status = dcd_get_object_def(pmgr_obj->hdcd_mgr, -- (struct dsp_uuid *) -- &node_uuid, DSP_DCDNODETYPE, -- &gen_obj); -- if (!status) { -- /* Get the Obj def */ -- *pndb_props = -- gen_obj.obj_data.node_obj.ndb_props; -- *pu_num_nodes = node_index; -- } -- } -- } -- --func_cont: -- DBC_ENSURE((!status && *pu_num_nodes > 0) || -- (status && *pu_num_nodes == 0)); -- - return status; - } - --- -1.7.1 - diff --git a/patches/dspbridge/0006-staging-tidspbridge-fix-kernel-oops-in-bridge_io_get.patch b/patches/dspbridge/0006-staging-tidspbridge-fix-kernel-oops-in-bridge_io_get.patch deleted file mode 100644 index 88fc4c9a39018cab317076cb07314e7bd1fcc023..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0006-staging-tidspbridge-fix-kernel-oops-in-bridge_io_get.patch +++ /dev/null @@ -1,152 +0,0 @@ -From f0749e8db311802cd5eb811fb0bae7e64f114fa9 Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Fri, 5 Nov 2010 17:01:50 +0000 -Subject: [PATCH 06/25] staging: tidspbridge: fix kernel oops in bridge_io_get_proc_load - -The DSP shared memory area gets initialized only when -a COFF file is loaded. - -If bridge_io_get_proc_load is called before loading a base -image into the DSP, the shared_mem member of the io manager -will be NULL, resulting in a kernel oops when it's dereferenced. - -Also made some coding style changes to bridge_io_create. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/core/io_sm.c | 78 +++++++++++------------------ - 1 files changed, 30 insertions(+), 48 deletions(-) - -diff --git a/drivers/staging/tidspbridge/core/io_sm.c b/drivers/staging/tidspbridge/core/io_sm.c -index 5718645..9ee02d1 100644 ---- a/drivers/staging/tidspbridge/core/io_sm.c -+++ b/drivers/staging/tidspbridge/core/io_sm.c -@@ -167,57 +167,41 @@ int bridge_io_create(struct io_mgr **io_man, - struct dev_object *hdev_obj, - const struct io_attrs *mgr_attrts) - { -- int status = 0; - struct io_mgr *pio_mgr = NULL; -- struct shm *shared_mem = NULL; - struct bridge_dev_context *hbridge_context = NULL; - struct cfg_devnode *dev_node_obj; - struct chnl_mgr *hchnl_mgr; - u8 dev_type; - - /* Check requirements */ -- if (!io_man || !mgr_attrts || mgr_attrts->word_size == 0) { -- status = -EFAULT; -- goto func_end; -- } -+ if (!io_man || !mgr_attrts || mgr_attrts->word_size == 0) -+ return -EFAULT; -+ -+ *io_man = NULL; -+ - dev_get_chnl_mgr(hdev_obj, &hchnl_mgr); -- if (!hchnl_mgr || hchnl_mgr->hio_mgr) { -- status = -EFAULT; -- goto func_end; -- } -+ if (!hchnl_mgr || hchnl_mgr->hio_mgr) -+ return -EFAULT; -+ - /* - * Message manager will be created when a file is loaded, since - * size of message buffer in shared memory is configurable in - * the base image. - */ - dev_get_bridge_context(hdev_obj, &hbridge_context); -- if (!hbridge_context) { -- status = -EFAULT; -- goto func_end; -- } -+ if (!hbridge_context) -+ return -EFAULT; -+ - dev_get_dev_type(hdev_obj, &dev_type); -- /* -- * DSP shared memory area will get set properly when -- * a program is loaded. They are unknown until a COFF file is -- * loaded. I chose the value -1 because it was less likely to be -- * a valid address than 0. -- */ -- shared_mem = (struct shm *)-1; - - /* Allocate IO manager object */ - pio_mgr = kzalloc(sizeof(struct io_mgr), GFP_KERNEL); -- if (pio_mgr == NULL) { -- status = -ENOMEM; -- goto func_end; -- } -+ if (!pio_mgr) -+ return -ENOMEM; - - /* Initialize chnl_mgr object */ --#if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) || defined(CONFIG_TIDSPBRIDGE_DEBUG) -- pio_mgr->pmsg = NULL; --#endif - pio_mgr->hchnl_mgr = hchnl_mgr; - pio_mgr->word_size = mgr_attrts->word_size; -- pio_mgr->shared_mem = shared_mem; - - if (dev_type == DSP_UNIT) { - /* Create an IO DPC */ -@@ -229,29 +213,24 @@ int bridge_io_create(struct io_mgr **io_man, - - spin_lock_init(&pio_mgr->dpc_lock); - -- status = dev_get_dev_node(hdev_obj, &dev_node_obj); -+ if (dev_get_dev_node(hdev_obj, &dev_node_obj)) { -+ bridge_io_destroy(pio_mgr); -+ return -EIO; -+ } - } - -- if (!status) { -- pio_mgr->hbridge_context = hbridge_context; -- pio_mgr->shared_irq = mgr_attrts->irq_shared; -- if (dsp_wdt_init()) -- status = -EPERM; -- } else { -- status = -EIO; -- } --func_end: -- if (status) { -- /* Cleanup */ -+ pio_mgr->hbridge_context = hbridge_context; -+ pio_mgr->shared_irq = mgr_attrts->irq_shared; -+ if (dsp_wdt_init()) { - bridge_io_destroy(pio_mgr); -- if (io_man) -- *io_man = NULL; -- } else { -- /* Return IO manager object to caller... */ -- hchnl_mgr->hio_mgr = pio_mgr; -- *io_man = pio_mgr; -+ return -EPERM; - } -- return status; -+ -+ /* Return IO manager object to caller... */ -+ hchnl_mgr->hio_mgr = pio_mgr; -+ *io_man = pio_mgr; -+ -+ return 0; - } - - /* -@@ -1714,6 +1693,9 @@ int io_sh_msetting(struct io_mgr *hio_mgr, u8 desc, void *pargs) - int bridge_io_get_proc_load(struct io_mgr *hio_mgr, - struct dsp_procloadstat *proc_lstat) - { -+ if (!hio_mgr->shared_mem) -+ return -EFAULT; -+ - proc_lstat->curr_load = - hio_mgr->shared_mem->load_mon_info.curr_dsp_load; - proc_lstat->predicted_load = --- -1.7.1 - diff --git a/patches/dspbridge/0007-staging-tidspbridge-remove-gs-memory-allocator.patch b/patches/dspbridge/0007-staging-tidspbridge-remove-gs-memory-allocator.patch deleted file mode 100644 index ffb4591b6325f678e3fe50762eea665ae1f138a7..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0007-staging-tidspbridge-remove-gs-memory-allocator.patch +++ /dev/null @@ -1,348 +0,0 @@ -From 30388543eb8f0e2f5ed318b008e7ca20e757efbd Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Sun, 21 Nov 2010 10:46:19 +0000 -Subject: [PATCH 07/25] staging: tidspbridge: remove gs memory allocator - -Remove unnecessary wrappers for linux kernel memory -allocation primitives. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/Makefile | 2 +- - drivers/staging/tidspbridge/gen/gb.c | 11 +-- - drivers/staging/tidspbridge/gen/gh.c | 38 ++------- - drivers/staging/tidspbridge/gen/gs.c | 88 -------------------- - drivers/staging/tidspbridge/include/dspbridge/gs.h | 59 ------------- - 5 files changed, 15 insertions(+), 183 deletions(-) - delete mode 100644 drivers/staging/tidspbridge/gen/gs.c - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/gs.h - -diff --git a/drivers/staging/tidspbridge/Makefile b/drivers/staging/tidspbridge/Makefile -index 41c644c..648e392 100644 ---- a/drivers/staging/tidspbridge/Makefile -+++ b/drivers/staging/tidspbridge/Makefile -@@ -1,6 +1,6 @@ - obj-$(CONFIG_TIDSPBRIDGE) += bridgedriver.o - --libgen = gen/gb.o gen/gs.o gen/gh.o gen/uuidutil.o -+libgen = gen/gb.o gen/gh.o gen/uuidutil.o - libcore = core/chnl_sm.o core/msg_sm.o core/io_sm.o core/tiomap3430.o \ - core/tiomap3430_pwr.o core/tiomap_io.o \ - core/ue_deh.o core/wdt.o core/dsp-clock.o core/sync.o -diff --git a/drivers/staging/tidspbridge/gen/gb.c b/drivers/staging/tidspbridge/gen/gb.c -index 9f59023..3c0e04c 100644 ---- a/drivers/staging/tidspbridge/gen/gb.c -+++ b/drivers/staging/tidspbridge/gen/gb.c -@@ -19,7 +19,6 @@ - /* ----------------------------------- DSP/BIOS Bridge */ - #include <linux/types.h> - /* ----------------------------------- This */ --#include <dspbridge/gs.h> - #include <dspbridge/gb.h> - - struct gb_t_map { -@@ -52,17 +51,17 @@ struct gb_t_map *gb_create(u32 len) - { - struct gb_t_map *map; - u32 i; -- map = (struct gb_t_map *)gs_alloc(sizeof(struct gb_t_map)); -+ map = kzalloc(sizeof(struct gb_t_map), GFP_KERNEL); - if (map != NULL) { - map->len = len; - map->wcnt = len / BITS_PER_LONG + 1; -- map->words = (u32 *) gs_alloc(map->wcnt * sizeof(u32)); -+ map->words = kzalloc(map->wcnt * sizeof(u32), GFP_KERNEL); - if (map->words != NULL) { - for (i = 0; i < map->wcnt; i++) - map->words[i] = 0L; - - } else { -- gs_frees(map, sizeof(struct gb_t_map)); -+ kfree(map); - map = NULL; - } - } -@@ -78,8 +77,8 @@ struct gb_t_map *gb_create(u32 len) - - void gb_delete(struct gb_t_map *map) - { -- gs_frees(map->words, map->wcnt * sizeof(u32)); -- gs_frees(map, sizeof(struct gb_t_map)); -+ kfree(map->words); -+ kfree(map); - } - - /* -diff --git a/drivers/staging/tidspbridge/gen/gh.c b/drivers/staging/tidspbridge/gen/gh.c -index f72d943..cd72503 100644 ---- a/drivers/staging/tidspbridge/gen/gh.c -+++ b/drivers/staging/tidspbridge/gen/gh.c -@@ -17,9 +17,6 @@ - #include <linux/types.h> - - #include <dspbridge/host_os.h> -- --#include <dspbridge/gs.h> -- - #include <dspbridge/gh.h> - - struct element { -@@ -37,8 +34,6 @@ struct gh_t_hash_tab { - }; - - static void noop(void *p); --static s32 cur_init; --static void myfree(void *ptr, s32 size); - - /* - * ======== gh_create ======== -@@ -51,8 +46,7 @@ struct gh_t_hash_tab *gh_create(u16 max_bucket, u16 val_size, - { - struct gh_t_hash_tab *hash_tab; - u16 i; -- hash_tab = -- (struct gh_t_hash_tab *)gs_alloc(sizeof(struct gh_t_hash_tab)); -+ hash_tab = kzalloc(sizeof(struct gh_t_hash_tab), GFP_KERNEL); - if (hash_tab == NULL) - return NULL; - hash_tab->max_bucket = max_bucket; -@@ -62,7 +56,7 @@ struct gh_t_hash_tab *gh_create(u16 max_bucket, u16 val_size, - hash_tab->delete = delete == NULL ? noop : delete; - - hash_tab->buckets = (struct element **) -- gs_alloc(sizeof(struct element *) * max_bucket); -+ kzalloc(sizeof(struct element *) * max_bucket, GFP_KERNEL); - if (hash_tab->buckets == NULL) { - gh_delete(hash_tab); - return NULL; -@@ -89,17 +83,14 @@ void gh_delete(struct gh_t_hash_tab *hash_tab) - elem = next) { - next = elem->next; - (*hash_tab->delete) (elem->data); -- myfree(elem, -- sizeof(struct element) - 1 + -- hash_tab->val_size); -+ kfree(elem); - } - } - -- myfree(hash_tab->buckets, sizeof(struct element *) -- * hash_tab->max_bucket); -+ kfree(hash_tab->buckets); - } - -- myfree(hash_tab, sizeof(struct gh_t_hash_tab)); -+ kfree(hash_tab); - } - } - -@@ -109,9 +100,7 @@ void gh_delete(struct gh_t_hash_tab *hash_tab) - - void gh_exit(void) - { -- if (cur_init-- == 1) -- gs_exit(); -- -+ /* Do nothing */ - } - - /* -@@ -138,8 +127,7 @@ void *gh_find(struct gh_t_hash_tab *hash_tab, void *key) - - void gh_init(void) - { -- if (cur_init++ == 0) -- gs_init(); -+ /* Do nothing */ - } - - /* -@@ -152,8 +140,8 @@ void *gh_insert(struct gh_t_hash_tab *hash_tab, void *key, void *value) - u16 i; - char *src, *dst; - -- elem = (struct element *)gs_alloc(sizeof(struct element) - 1 + -- hash_tab->val_size); -+ elem = kzalloc(sizeof(struct element) - 1 + hash_tab->val_size, -+ GFP_KERNEL); - if (elem != NULL) { - - dst = (char *)elem->data; -@@ -180,14 +168,6 @@ static void noop(void *p) - p = p; /* stifle compiler warning */ - } - --/* -- * ======== myfree ======== -- */ --static void myfree(void *ptr, s32 size) --{ -- gs_free(ptr); --} -- - #ifdef CONFIG_TIDSPBRIDGE_BACKTRACE - /** - * gh_iterate() - This function goes through all the elements in the hash table -diff --git a/drivers/staging/tidspbridge/gen/gs.c b/drivers/staging/tidspbridge/gen/gs.c -deleted file mode 100644 -index 8335bf5..0000000 ---- a/drivers/staging/tidspbridge/gen/gs.c -+++ /dev/null -@@ -1,88 +0,0 @@ --/* -- * gs.c -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * General storage memory allocator services. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#include <linux/types.h> --/* ----------------------------------- DSP/BIOS Bridge */ --#include <dspbridge/dbdefs.h> -- --/* ----------------------------------- This */ --#include <dspbridge/gs.h> -- --#include <linux/slab.h> -- --/* ----------------------------------- Globals */ --static u32 cumsize; -- --/* -- * ======== gs_alloc ======== -- * purpose: -- * Allocates memory of the specified size. -- */ --void *gs_alloc(u32 size) --{ -- void *p; -- -- p = kzalloc(size, GFP_KERNEL); -- if (p == NULL) -- return NULL; -- cumsize += size; -- return p; --} -- --/* -- * ======== gs_exit ======== -- * purpose: -- * Discontinue the usage of the GS module. -- */ --void gs_exit(void) --{ -- /* Do nothing */ --} -- --/* -- * ======== gs_free ======== -- * purpose: -- * Frees the memory. -- */ --void gs_free(void *ptr) --{ -- kfree(ptr); -- /* ack! no size info */ -- /* cumsize -= size; */ --} -- --/* -- * ======== gs_frees ======== -- * purpose: -- * Frees the memory. -- */ --void gs_frees(void *ptr, u32 size) --{ -- kfree(ptr); -- cumsize -= size; --} -- --/* -- * ======== gs_init ======== -- * purpose: -- * Initializes the GS module. -- */ --void gs_init(void) --{ -- /* Do nothing */ --} -diff --git a/drivers/staging/tidspbridge/include/dspbridge/gs.h b/drivers/staging/tidspbridge/include/dspbridge/gs.h -deleted file mode 100644 -index f32d8d9..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/gs.h -+++ /dev/null -@@ -1,59 +0,0 @@ --/* -- * gs.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Memory allocation/release wrappers. This module allows clients to -- * avoid OS spacific issues related to memory allocation. It also provides -- * simple diagnostic capabilities to assist in the detection of memory -- * leaks. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef GS_ --#define GS_ -- --/* -- * ======== gs_alloc ======== -- * Alloc size bytes of space. Returns pointer to space -- * allocated, otherwise NULL. -- */ --extern void *gs_alloc(u32 size); -- --/* -- * ======== gs_exit ======== -- * Module exit. Do not change to "#define gs_init()"; in -- * some environments this operation must actually do some work! -- */ --extern void gs_exit(void); -- --/* -- * ======== gs_free ======== -- * Free space allocated by gs_alloc() or GS_calloc(). -- */ --extern void gs_free(void *ptr); -- --/* -- * ======== gs_frees ======== -- * Free space allocated by gs_alloc() or GS_calloc() and assert that -- * the size of the allocation is size bytes. -- */ --extern void gs_frees(void *ptr, u32 size); -- --/* -- * ======== gs_init ======== -- * Module initialization. Do not change to "#define gs_init()"; in -- * some environments this operation must actually do some work! -- */ --extern void gs_init(void); -- --#endif /*GS_ */ --- -1.7.1 - diff --git a/patches/dspbridge/0008-staging-tidspbridge-remove-utildefs.patch b/patches/dspbridge/0008-staging-tidspbridge-remove-utildefs.patch deleted file mode 100644 index 081b619dc592de431e8098a062b2f3a66c16eb6c..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0008-staging-tidspbridge-remove-utildefs.patch +++ /dev/null @@ -1,98 +0,0 @@ -From db2b369ad355755c1e3438f0490dd073c5040aca Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Sun, 21 Nov 2010 10:46:20 +0000 -Subject: [PATCH 08/25] staging: tidspbridge: remove utildefs - -Remove a header file that was not very useful to -the dspbridge driver. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - .../tidspbridge/include/dspbridge/utildefs.h | 39 -------------------- - drivers/staging/tidspbridge/pmgr/cmm.c | 9 +---- - 2 files changed, 1 insertions(+), 47 deletions(-) - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/utildefs.h - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/utildefs.h b/drivers/staging/tidspbridge/include/dspbridge/utildefs.h -deleted file mode 100644 -index 8fe5414..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/utildefs.h -+++ /dev/null -@@ -1,39 +0,0 @@ --/* -- * utildefs.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Global UTIL constants and types, shared between DSP API and DSPSYS. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef UTILDEFS_ --#define UTILDEFS_ -- --/* constants taken from configmg.h */ --#define UTIL_MAXMEMREGS 9 --#define UTIL_MAXIOPORTS 20 --#define UTIL_MAXIRQS 7 --#define UTIL_MAXDMACHNLS 7 -- --/* misc. constants */ --#define UTIL_MAXARGVS 10 -- --/* Platform specific important info */ --struct util_sysinfo { -- /* Granularity of page protection; usually 1k or 4k */ -- u32 dw_page_size; -- u32 dw_allocation_granularity; /* VM granularity, usually 64K */ -- u32 dw_number_of_processors; /* Used as sanity check */ --}; -- --#endif /* UTILDEFS_ */ -diff --git a/drivers/staging/tidspbridge/pmgr/cmm.c b/drivers/staging/tidspbridge/pmgr/cmm.c -index 93a7c4f..8dbdd20 100644 ---- a/drivers/staging/tidspbridge/pmgr/cmm.c -+++ b/drivers/staging/tidspbridge/pmgr/cmm.c -@@ -40,7 +40,6 @@ - /* ----------------------------------- OS Adaptation Layer */ - #include <dspbridge/list.h> - #include <dspbridge/sync.h> --#include <dspbridge/utildefs.h> - - /* ----------------------------------- Platform Manager */ - #include <dspbridge/dev.h> -@@ -245,7 +244,6 @@ int cmm_create(struct cmm_object **ph_cmm_mgr, - { - struct cmm_object *cmm_obj = NULL; - int status = 0; -- struct util_sysinfo sys_info; - - DBC_REQUIRE(refs > 0); - DBC_REQUIRE(ph_cmm_mgr != NULL); -@@ -261,12 +259,7 @@ int cmm_create(struct cmm_object **ph_cmm_mgr, - DBC_ASSERT(mgr_attrts->ul_min_block_size >= 4); - /* save away smallest block allocation for this cmm mgr */ - cmm_obj->ul_min_block_size = mgr_attrts->ul_min_block_size; -- /* save away the systems memory page size */ -- sys_info.dw_page_size = PAGE_SIZE; -- sys_info.dw_allocation_granularity = PAGE_SIZE; -- sys_info.dw_number_of_processors = 1; -- -- cmm_obj->dw_page_size = sys_info.dw_page_size; -+ cmm_obj->dw_page_size = PAGE_SIZE; - - /* Note: DSP SM seg table(aDSPSMSegTab[]) zero'd by - * MEM_ALLOC_OBJECT */ --- -1.7.1 - diff --git a/patches/dspbridge/0009-staging-tidspbridge-switch-to-linux-bitmap-API.patch b/patches/dspbridge/0009-staging-tidspbridge-switch-to-linux-bitmap-API.patch deleted file mode 100644 index 45fa8802d7b8afeba5992451c8291258a9c79282..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0009-staging-tidspbridge-switch-to-linux-bitmap-API.patch +++ /dev/null @@ -1,302 +0,0 @@ -From 46b167e5cb99f197ced91effa7c5fe4bc5eb15e8 Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Sun, 21 Nov 2010 10:46:21 +0000 -Subject: [PATCH 09/25] staging: tidspbridge: switch to linux bitmap API - -Replace the tidspbridge generic bitmap operations -with the linux standard bitmap implementation. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/rmgr/node.c | 166 ++++++++++++++----------------- - 1 files changed, 74 insertions(+), 92 deletions(-) - -diff --git a/drivers/staging/tidspbridge/rmgr/node.c b/drivers/staging/tidspbridge/rmgr/node.c -index 1562f3c..ab35806 100644 ---- a/drivers/staging/tidspbridge/rmgr/node.c -+++ b/drivers/staging/tidspbridge/rmgr/node.c -@@ -17,6 +17,7 @@ - */ - - #include <linux/types.h> -+#include <linux/bitmap.h> - /* ----------------------------------- Host OS */ - #include <dspbridge/host_os.h> - -@@ -50,7 +51,6 @@ - #include <dspbridge/dspioctl.h> - - /* ----------------------------------- Others */ --#include <dspbridge/gb.h> - #include <dspbridge/uuidutil.h> - - /* ----------------------------------- This */ -@@ -132,11 +132,14 @@ struct node_mgr { - struct lst_list *node_list; /* List of all allocated nodes */ - u32 num_nodes; /* Number of nodes in node_list */ - u32 num_created; /* Number of nodes *created* on DSP */ -- struct gb_t_map *pipe_map; /* Pipe connection bit map */ -- struct gb_t_map *pipe_done_map; /* Pipes that are half free */ -- struct gb_t_map *chnl_map; /* Channel allocation bit map */ -- struct gb_t_map *dma_chnl_map; /* DMA Channel allocation bit map */ -- struct gb_t_map *zc_chnl_map; /* Zero-Copy Channel alloc bit map */ -+ DECLARE_BITMAP(pipe_map, MAXPIPES); /* Pipe connection bitmap */ -+ DECLARE_BITMAP(pipe_done_map, MAXPIPES); /* Pipes that are half free */ -+ /* Channel allocation bitmap */ -+ DECLARE_BITMAP(chnl_map, CHNL_MAXCHANNELS); -+ /* DMA Channel allocation bitmap */ -+ DECLARE_BITMAP(dma_chnl_map, CHNL_MAXCHANNELS); -+ /* Zero-Copy Channel alloc bitmap */ -+ DECLARE_BITMAP(zc_chnl_map, CHNL_MAXCHANNELS); - struct ntfy_object *ntfy_obj; /* Manages registered notifications */ - struct mutex node_mgr_lock; /* For critical sections */ - u32 ul_fxn_addrs[NUMRMSFXNS]; /* RMS function addresses */ -@@ -847,8 +850,8 @@ int node_connect(struct node_object *node1, u32 stream1, - struct node_object *dev_node_obj; - struct node_object *hnode; - struct stream_chnl *pstream; -- u32 pipe_id = GB_NOBITS; -- u32 chnl_id = GB_NOBITS; -+ u32 pipe_id; -+ u32 chnl_id; - s8 chnl_mode; - u32 dw_length; - int status = 0; -@@ -951,10 +954,11 @@ int node_connect(struct node_object *node1, u32 stream1, - && (node2_type == NODE_TASK - || node2_type == NODE_DAISSOCKET))) { - /* Find available pipe */ -- pipe_id = gb_findandset(hnode_mgr->pipe_map); -- if (pipe_id == GB_NOBITS) { -+ pipe_id = find_first_zero_bit(hnode_mgr->pipe_map, MAXPIPES); -+ if (pipe_id == MAXPIPES) { - status = -ECONNREFUSED; - } else { -+ set_bit(pipe_id, hnode_mgr->pipe_map); - node1->outputs[stream1].type = NODECONNECT; - node2->inputs[stream2].type = NODECONNECT; - node1->outputs[stream1].dev_id = pipe_id; -@@ -971,7 +975,7 @@ int node_connect(struct node_object *node1, u32 stream1, - - output->sz_device = NULL; - input->sz_device = NULL; -- gb_clear(hnode_mgr->pipe_map, pipe_id); -+ clear_bit(pipe_id, hnode_mgr->pipe_map); - status = -ENOMEM; - } else { - /* Copy "/dbpipe<pipId>" name to device names */ -@@ -996,34 +1000,47 @@ int node_connect(struct node_object *node1, u32 stream1, - * called for this node. */ - if (pattrs) { - if (pattrs->strm_mode == STRMMODE_RDMA) { -- chnl_id = -- gb_findandset(hnode_mgr->dma_chnl_map); -+ chnl_id = find_first_zero_bit( -+ hnode_mgr->dma_chnl_map, -+ CHNL_MAXCHANNELS); - /* dma chans are 2nd transport chnl set - * ids(e.g. 16-31) */ -- (chnl_id != GB_NOBITS) ? -- (chnl_id = -- chnl_id + -- hnode_mgr->ul_num_chnls) : chnl_id; -+ if (chnl_id != CHNL_MAXCHANNELS) { -+ set_bit(chnl_id, -+ hnode_mgr->dma_chnl_map); -+ chnl_id = chnl_id + -+ hnode_mgr->ul_num_chnls; -+ } - } else if (pattrs->strm_mode == STRMMODE_ZEROCOPY) { -- chnl_id = gb_findandset(hnode_mgr->zc_chnl_map); -+ chnl_id = find_first_zero_bit( -+ hnode_mgr->zc_chnl_map, -+ CHNL_MAXCHANNELS); - /* zero-copy chans are 3nd transport set - * (e.g. 32-47) */ -- (chnl_id != GB_NOBITS) ? (chnl_id = chnl_id + -- (2 * -- hnode_mgr-> -- ul_num_chnls)) -- : chnl_id; -+ if (chnl_id != CHNL_MAXCHANNELS) { -+ set_bit(chnl_id, -+ hnode_mgr->zc_chnl_map); -+ chnl_id = chnl_id + -+ (2 * hnode_mgr->ul_num_chnls); -+ } - } else { /* must be PROCCOPY */ - DBC_ASSERT(pattrs->strm_mode == - STRMMODE_PROCCOPY); -- chnl_id = gb_findandset(hnode_mgr->chnl_map); -+ chnl_id = find_first_zero_bit( -+ hnode_mgr->chnl_map, -+ CHNL_MAXCHANNELS); - /* e.g. 0-15 */ -+ if (chnl_id != CHNL_MAXCHANNELS) -+ set_bit(chnl_id, hnode_mgr->chnl_map); - } - } else { - /* default to PROCCOPY */ -- chnl_id = gb_findandset(hnode_mgr->chnl_map); -+ chnl_id = find_first_zero_bit(hnode_mgr->chnl_map, -+ CHNL_MAXCHANNELS); -+ if (chnl_id != CHNL_MAXCHANNELS) -+ set_bit(chnl_id, hnode_mgr->chnl_map); - } -- if (chnl_id == GB_NOBITS) { -+ if (chnl_id == CHNL_MAXCHANNELS) { - status = -ECONNREFUSED; - goto func_cont2; - } -@@ -1033,18 +1050,19 @@ int node_connect(struct node_object *node1, u32 stream1, - - if (pattrs) { - if (pattrs->strm_mode == STRMMODE_RDMA) { -- gb_clear(hnode_mgr->dma_chnl_map, chnl_id - -- hnode_mgr->ul_num_chnls); -+ clear_bit(chnl_id - hnode_mgr->ul_num_chnls, -+ hnode_mgr->dma_chnl_map); - } else if (pattrs->strm_mode == STRMMODE_ZEROCOPY) { -- gb_clear(hnode_mgr->zc_chnl_map, chnl_id - -- (2 * hnode_mgr->ul_num_chnls)); -+ clear_bit(chnl_id - -+ (2 * hnode_mgr->ul_num_chnls), -+ hnode_mgr->zc_chnl_map); - } else { - DBC_ASSERT(pattrs->strm_mode == - STRMMODE_PROCCOPY); -- gb_clear(hnode_mgr->chnl_map, chnl_id); -+ clear_bit(chnl_id, hnode_mgr->chnl_map); - } - } else { -- gb_clear(hnode_mgr->chnl_map, chnl_id); -+ clear_bit(chnl_id, hnode_mgr->chnl_map); - } - status = -ENOMEM; - func_cont2: -@@ -1321,22 +1339,14 @@ int node_create_mgr(struct node_mgr **node_man, - if (node_mgr_obj) { - node_mgr_obj->hdev_obj = hdev_obj; - node_mgr_obj->node_list = kzalloc(sizeof(struct lst_list), -- GFP_KERNEL); -- node_mgr_obj->pipe_map = gb_create(MAXPIPES); -- node_mgr_obj->pipe_done_map = gb_create(MAXPIPES); -- if (node_mgr_obj->node_list == NULL -- || node_mgr_obj->pipe_map == NULL -- || node_mgr_obj->pipe_done_map == NULL) { -- status = -ENOMEM; -- } else { -- INIT_LIST_HEAD(&node_mgr_obj->node_list->head); -- node_mgr_obj->ntfy_obj = kmalloc( -+ GFP_KERNEL); -+ INIT_LIST_HEAD(&node_mgr_obj->node_list->head); -+ node_mgr_obj->ntfy_obj = kmalloc( - sizeof(struct ntfy_object), GFP_KERNEL); -- if (node_mgr_obj->ntfy_obj) -- ntfy_init(node_mgr_obj->ntfy_obj); -- else -- status = -ENOMEM; -- } -+ if (node_mgr_obj->ntfy_obj) -+ ntfy_init(node_mgr_obj->ntfy_obj); -+ else -+ status = -ENOMEM; - node_mgr_obj->num_created = 0; - } else { - status = -ENOMEM; -@@ -1372,27 +1382,14 @@ int node_create_mgr(struct node_mgr **node_man, - /* Get msg_ctrl queue manager */ - dev_get_msg_mgr(hdev_obj, &node_mgr_obj->msg_mgr_obj); - mutex_init(&node_mgr_obj->node_mgr_lock); -- node_mgr_obj->chnl_map = gb_create(node_mgr_obj->ul_num_chnls); -- /* dma chnl map. ul_num_chnls is # per transport */ -- node_mgr_obj->dma_chnl_map = -- gb_create(node_mgr_obj->ul_num_chnls); -- node_mgr_obj->zc_chnl_map = -- gb_create(node_mgr_obj->ul_num_chnls); -- if ((node_mgr_obj->chnl_map == NULL) -- || (node_mgr_obj->dma_chnl_map == NULL) -- || (node_mgr_obj->zc_chnl_map == NULL)) { -- status = -ENOMEM; -- } else { -- /* Block out reserved channels */ -- for (i = 0; i < node_mgr_obj->ul_chnl_offset; i++) -- gb_set(node_mgr_obj->chnl_map, i); -+ /* Block out reserved channels */ -+ for (i = 0; i < node_mgr_obj->ul_chnl_offset; i++) -+ set_bit(i, node_mgr_obj->chnl_map); - -- /* Block out channels reserved for RMS */ -- gb_set(node_mgr_obj->chnl_map, -- node_mgr_obj->ul_chnl_offset); -- gb_set(node_mgr_obj->chnl_map, -- node_mgr_obj->ul_chnl_offset + 1); -- } -+ /* Block out channels reserved for RMS */ -+ set_bit(node_mgr_obj->ul_chnl_offset, node_mgr_obj->chnl_map); -+ set_bit(node_mgr_obj->ul_chnl_offset + 1, -+ node_mgr_obj->chnl_map); - } - if (!status) { - /* NO RM Server on the IVA */ -@@ -2657,21 +2654,6 @@ static void delete_node_mgr(struct node_mgr *hnode_mgr) - kfree(hnode_mgr->ntfy_obj); - } - -- if (hnode_mgr->pipe_map) -- gb_delete(hnode_mgr->pipe_map); -- -- if (hnode_mgr->pipe_done_map) -- gb_delete(hnode_mgr->pipe_done_map); -- -- if (hnode_mgr->chnl_map) -- gb_delete(hnode_mgr->chnl_map); -- -- if (hnode_mgr->dma_chnl_map) -- gb_delete(hnode_mgr->dma_chnl_map); -- -- if (hnode_mgr->zc_chnl_map) -- gb_delete(hnode_mgr->zc_chnl_map); -- - if (hnode_mgr->disp_obj) - disp_delete(hnode_mgr->disp_obj); - -@@ -2786,25 +2768,25 @@ static void free_stream(struct node_mgr *hnode_mgr, struct stream_chnl stream) - { - /* Free up the pipe id unless other node has not yet been deleted. */ - if (stream.type == NODECONNECT) { -- if (gb_test(hnode_mgr->pipe_done_map, stream.dev_id)) { -+ if (test_bit(stream.dev_id, hnode_mgr->pipe_done_map)) { - /* The other node has already been deleted */ -- gb_clear(hnode_mgr->pipe_done_map, stream.dev_id); -- gb_clear(hnode_mgr->pipe_map, stream.dev_id); -+ clear_bit(stream.dev_id, hnode_mgr->pipe_done_map); -+ clear_bit(stream.dev_id, hnode_mgr->pipe_map); - } else { - /* The other node has not been deleted yet */ -- gb_set(hnode_mgr->pipe_done_map, stream.dev_id); -+ set_bit(stream.dev_id, hnode_mgr->pipe_done_map); - } - } else if (stream.type == HOSTCONNECT) { - if (stream.dev_id < hnode_mgr->ul_num_chnls) { -- gb_clear(hnode_mgr->chnl_map, stream.dev_id); -+ clear_bit(stream.dev_id, hnode_mgr->chnl_map); - } else if (stream.dev_id < (2 * hnode_mgr->ul_num_chnls)) { - /* dsp-dma */ -- gb_clear(hnode_mgr->dma_chnl_map, stream.dev_id - -- (1 * hnode_mgr->ul_num_chnls)); -+ clear_bit(stream.dev_id - (1 * hnode_mgr->ul_num_chnls), -+ hnode_mgr->dma_chnl_map); - } else if (stream.dev_id < (3 * hnode_mgr->ul_num_chnls)) { - /* zero-copy */ -- gb_clear(hnode_mgr->zc_chnl_map, stream.dev_id - -- (2 * hnode_mgr->ul_num_chnls)); -+ clear_bit(stream.dev_id - (2 * hnode_mgr->ul_num_chnls), -+ hnode_mgr->zc_chnl_map); - } - } - } --- -1.7.1 - diff --git a/patches/dspbridge/0010-staging-tidspbridge-remove-gb-bitmap-implementation.patch b/patches/dspbridge/0010-staging-tidspbridge-remove-gb-bitmap-implementation.patch deleted file mode 100644 index 18416f61f7312b5f5954e2faeae0b23dd3982959..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0010-staging-tidspbridge-remove-gb-bitmap-implementation.patch +++ /dev/null @@ -1,290 +0,0 @@ -From 8b20e71c83bf813b17a62ef4637a7373d15a2dbb Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Sun, 21 Nov 2010 10:46:22 +0000 -Subject: [PATCH 10/25] staging: tidspbridge: remove gb bitmap implementation - -Now that all users of gb have been converted to the -standard linux bitmap API, we can remove it from the -gen library. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/Makefile | 2 +- - drivers/staging/tidspbridge/gen/gb.c | 165 -------------------- - drivers/staging/tidspbridge/include/dspbridge/gb.h | 79 ---------- - 3 files changed, 1 insertions(+), 245 deletions(-) - delete mode 100644 drivers/staging/tidspbridge/gen/gb.c - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/gb.h - -diff --git a/drivers/staging/tidspbridge/Makefile b/drivers/staging/tidspbridge/Makefile -index 648e392..fd6a276 100644 ---- a/drivers/staging/tidspbridge/Makefile -+++ b/drivers/staging/tidspbridge/Makefile -@@ -1,6 +1,6 @@ - obj-$(CONFIG_TIDSPBRIDGE) += bridgedriver.o - --libgen = gen/gb.o gen/gh.o gen/uuidutil.o -+libgen = gen/gh.o gen/uuidutil.o - libcore = core/chnl_sm.o core/msg_sm.o core/io_sm.o core/tiomap3430.o \ - core/tiomap3430_pwr.o core/tiomap_io.o \ - core/ue_deh.o core/wdt.o core/dsp-clock.o core/sync.o -diff --git a/drivers/staging/tidspbridge/gen/gb.c b/drivers/staging/tidspbridge/gen/gb.c -deleted file mode 100644 -index 3c0e04c..0000000 ---- a/drivers/staging/tidspbridge/gen/gb.c -+++ /dev/null -@@ -1,165 +0,0 @@ --/* -- * gb.c -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Generic bitmap operations. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --/* ----------------------------------- DSP/BIOS Bridge */ --#include <linux/types.h> --/* ----------------------------------- This */ --#include <dspbridge/gb.h> -- --struct gb_t_map { -- u32 len; -- u32 wcnt; -- u32 *words; --}; -- --/* -- * ======== gb_clear ======== -- * purpose: -- * Clears a bit in the bit map. -- */ -- --void gb_clear(struct gb_t_map *map, u32 bitn) --{ -- u32 mask; -- -- mask = 1L << (bitn % BITS_PER_LONG); -- map->words[bitn / BITS_PER_LONG] &= ~mask; --} -- --/* -- * ======== gb_create ======== -- * purpose: -- * Creates a bit map. -- */ -- --struct gb_t_map *gb_create(u32 len) --{ -- struct gb_t_map *map; -- u32 i; -- map = kzalloc(sizeof(struct gb_t_map), GFP_KERNEL); -- if (map != NULL) { -- map->len = len; -- map->wcnt = len / BITS_PER_LONG + 1; -- map->words = kzalloc(map->wcnt * sizeof(u32), GFP_KERNEL); -- if (map->words != NULL) { -- for (i = 0; i < map->wcnt; i++) -- map->words[i] = 0L; -- -- } else { -- kfree(map); -- map = NULL; -- } -- } -- -- return map; --} -- --/* -- * ======== gb_delete ======== -- * purpose: -- * Frees a bit map. -- */ -- --void gb_delete(struct gb_t_map *map) --{ -- kfree(map->words); -- kfree(map); --} -- --/* -- * ======== gb_findandset ======== -- * purpose: -- * Finds a free bit and sets it. -- */ --u32 gb_findandset(struct gb_t_map *map) --{ -- u32 bitn; -- -- bitn = gb_minclear(map); -- -- if (bitn != GB_NOBITS) -- gb_set(map, bitn); -- -- return bitn; --} -- --/* -- * ======== gb_minclear ======== -- * purpose: -- * returns the location of the first unset bit in the bit map. -- */ --u32 gb_minclear(struct gb_t_map *map) --{ -- u32 bit_location = 0; -- u32 bit_acc = 0; -- u32 i; -- u32 bit; -- u32 *word; -- -- for (word = map->words, i = 0; i < map->wcnt; word++, i++) { -- if (~*word) { -- for (bit = 0; bit < BITS_PER_LONG; bit++, bit_acc++) { -- if (bit_acc == map->len) -- return GB_NOBITS; -- -- if (~*word & (1L << bit)) { -- bit_location = i * BITS_PER_LONG + bit; -- return bit_location; -- } -- -- } -- } else { -- bit_acc += BITS_PER_LONG; -- } -- } -- -- return GB_NOBITS; --} -- --/* -- * ======== gb_set ======== -- * purpose: -- * Sets a bit in the bit map. -- */ -- --void gb_set(struct gb_t_map *map, u32 bitn) --{ -- u32 mask; -- -- mask = 1L << (bitn % BITS_PER_LONG); -- map->words[bitn / BITS_PER_LONG] |= mask; --} -- --/* -- * ======== gb_test ======== -- * purpose: -- * Returns true if the bit is set in the specified location. -- */ -- --bool gb_test(struct gb_t_map *map, u32 bitn) --{ -- bool state; -- u32 mask; -- u32 word; -- -- mask = 1L << (bitn % BITS_PER_LONG); -- word = map->words[bitn / BITS_PER_LONG]; -- state = word & mask ? true : false; -- -- return state; --} -diff --git a/drivers/staging/tidspbridge/include/dspbridge/gb.h b/drivers/staging/tidspbridge/include/dspbridge/gb.h -deleted file mode 100644 -index fda783a..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/gb.h -+++ /dev/null -@@ -1,79 +0,0 @@ --/* -- * gb.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Generic bitmap manager. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef GB_ --#define GB_ -- --#define GB_NOBITS (~0) --#include <dspbridge/host_os.h> -- --struct gb_t_map; -- --/* -- * ======== gb_clear ======== -- * Clear the bit in position bitn in the bitmap map. Bit positions are -- * zero based. -- */ -- --extern void gb_clear(struct gb_t_map *map, u32 bitn); -- --/* -- * ======== gb_create ======== -- * Create a bit map with len bits. Initially all bits are cleared. -- */ -- --extern struct gb_t_map *gb_create(u32 len); -- --/* -- * ======== gb_delete ======== -- * Delete previously created bit map -- */ -- --extern void gb_delete(struct gb_t_map *map); -- --/* -- * ======== gb_findandset ======== -- * Finds a clear bit, sets it, and returns the position -- */ -- --extern u32 gb_findandset(struct gb_t_map *map); -- --/* -- * ======== gb_minclear ======== -- * gb_minclear returns the minimum clear bit position. If no bit is -- * clear, gb_minclear returns -1. -- */ --extern u32 gb_minclear(struct gb_t_map *map); -- --/* -- * ======== gb_set ======== -- * Set the bit in position bitn in the bitmap map. Bit positions are -- * zero based. -- */ -- --extern void gb_set(struct gb_t_map *map, u32 bitn); -- --/* -- * ======== gb_test ======== -- * Returns TRUE if the bit in position bitn is set in map; otherwise -- * gb_test returns FALSE. Bit positions are zero based. -- */ -- --extern bool gb_test(struct gb_t_map *map, u32 bitn); -- --#endif /*GB_ */ --- -1.7.1 - diff --git a/patches/dspbridge/0011-staging-tidspbridge-convert-core-to-list_head.patch b/patches/dspbridge/0011-staging-tidspbridge-convert-core-to-list_head.patch deleted file mode 100644 index 252c94fe16cf906373c76423d7fdad127ea19d11..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0011-staging-tidspbridge-convert-core-to-list_head.patch +++ /dev/null @@ -1,1199 +0,0 @@ -From 68fdb3c793591e3fdcf513b32daff725d1306114 Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Sun, 21 Nov 2010 10:46:24 +0000 -Subject: [PATCH 11/25] staging: tidspbridge: convert core to list_head - -Convert the core module of the tidspbridge driver -to use struct list_head instead of struct lst_list. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/core/_msg_sm.h | 12 +- - drivers/staging/tidspbridge/core/chnl_sm.c | 245 +++++++++----------- - drivers/staging/tidspbridge/core/io_sm.c | 142 +++++------- - drivers/staging/tidspbridge/core/msg_sm.c | 236 +++++++------------ - .../tidspbridge/include/dspbridge/_chnl_sm.h | 8 +- - .../tidspbridge/include/dspbridge/cmmdefs.h | 1 - - .../staging/tidspbridge/include/dspbridge/sync.h | 1 + - 7 files changed, 264 insertions(+), 381 deletions(-) - -diff --git a/drivers/staging/tidspbridge/core/_msg_sm.h b/drivers/staging/tidspbridge/core/_msg_sm.h -index 556de5c..b78d1a6 100644 ---- a/drivers/staging/tidspbridge/core/_msg_sm.h -+++ b/drivers/staging/tidspbridge/core/_msg_sm.h -@@ -20,7 +20,7 @@ - #ifndef _MSG_SM_ - #define _MSG_SM_ - --#include <dspbridge/list.h> -+#include <linux/list.h> - #include <dspbridge/msgdefs.h> - - /* -@@ -86,12 +86,12 @@ struct msg_mgr { - struct bridge_drv_interface *intf_fxns; - - struct io_mgr *hio_mgr; /* IO manager */ -- struct lst_list *queue_list; /* List of MSG_QUEUEs */ -+ struct list_head queue_list; /* List of MSG_QUEUEs */ - spinlock_t msg_mgr_lock; /* For critical sections */ - /* Signalled when MsgFrame is available */ - struct sync_object *sync_event; -- struct lst_list *msg_free_list; /* Free MsgFrames ready to be filled */ -- struct lst_list *msg_used_list; /* MsgFrames ready to go to DSP */ -+ struct list_head msg_free_list; /* Free MsgFrames ready to be filled */ -+ struct list_head msg_used_list; /* MsgFrames ready to go to DSP */ - u32 msgs_pending; /* # of queued messages to go to DSP */ - u32 max_msgs; /* Max # of msgs that fit in buffer */ - msg_onexit on_exit; /* called when RMS_EXIT is received */ -@@ -111,9 +111,9 @@ struct msg_queue { - struct msg_mgr *hmsg_mgr; - u32 max_msgs; /* Node message depth */ - u32 msgq_id; /* Node environment pointer */ -- struct lst_list *msg_free_list; /* Free MsgFrames ready to be filled */ -+ struct list_head msg_free_list; /* Free MsgFrames ready to be filled */ - /* Filled MsgFramess waiting to be read */ -- struct lst_list *msg_used_list; -+ struct list_head msg_used_list; - void *arg; /* Handle passed to mgr on_exit callback */ - struct sync_object *sync_event; /* Signalled when message is ready */ - struct sync_object *sync_done; /* For synchronizing cleanup */ -diff --git a/drivers/staging/tidspbridge/core/chnl_sm.c b/drivers/staging/tidspbridge/core/chnl_sm.c -index 662a5b5..f955036 100644 ---- a/drivers/staging/tidspbridge/core/chnl_sm.c -+++ b/drivers/staging/tidspbridge/core/chnl_sm.c -@@ -37,9 +37,9 @@ - * which may cause timeouts and/or failure offunction sync_wait_on_event. - * This invariant condition is: - * -- * LST_Empty(pchnl->pio_completions) ==> pchnl->sync_event is reset -+ * list_empty(&pchnl->pio_completions) ==> pchnl->sync_event is reset - * and -- * !LST_Empty(pchnl->pio_completions) ==> pchnl->sync_event is set. -+ * !list_empty(&pchnl->pio_completions) ==> pchnl->sync_event is set. - */ - - #include <linux/types.h> -@@ -73,11 +73,9 @@ - #define MAILBOX_IRQ INT_MAIL_MPU_IRQ - - /* ----------------------------------- Function Prototypes */ --static struct lst_list *create_chirp_list(u32 chirps); -+static int create_chirp_list(struct list_head *list, u32 chirps); - --static void free_chirp_list(struct lst_list *chirp_list); -- --static struct chnl_irp *make_new_chirp(void); -+static void free_chirp_list(struct list_head *list); - - static int search_free_channel(struct chnl_mgr *chnl_mgr_obj, - u32 *chnl); -@@ -179,10 +177,14 @@ func_cont: - } - if (!status) { - /* Get a free chirp: */ -- chnl_packet_obj = -- (struct chnl_irp *)lst_get_head(pchnl->free_packets_list); -- if (chnl_packet_obj == NULL) -+ if (!list_empty(&pchnl->free_packets_list)) { -+ chnl_packet_obj = list_first_entry( -+ &pchnl->free_packets_list, -+ struct chnl_irp, link); -+ list_del(&chnl_packet_obj->link); -+ } else { - status = -EIO; -+ } - - } - if (!status) { -@@ -206,8 +208,7 @@ func_cont: - chnl_packet_obj->dw_arg = dw_arg; - chnl_packet_obj->status = (is_eos ? CHNL_IOCSTATEOS : - CHNL_IOCSTATCOMPLETE); -- lst_put_tail(pchnl->pio_requests, -- (struct list_head *)chnl_packet_obj); -+ list_add_tail(&chnl_packet_obj->link, &pchnl->pio_requests); - pchnl->cio_reqs++; - DBC_ASSERT(pchnl->cio_reqs <= pchnl->chnl_packets); - /* -@@ -254,7 +255,7 @@ int bridge_chnl_cancel_io(struct chnl_object *chnl_obj) - struct chnl_object *pchnl = (struct chnl_object *)chnl_obj; - u32 chnl_id = -1; - s8 chnl_mode; -- struct chnl_irp *chnl_packet_obj; -+ struct chnl_irp *chirp, *tmp; - struct chnl_mgr *chnl_mgr_obj = NULL; - - /* Check args: */ -@@ -272,7 +273,7 @@ int bridge_chnl_cancel_io(struct chnl_object *chnl_obj) - * IORequests or dispatching. */ - spin_lock_bh(&chnl_mgr_obj->chnl_mgr_lock); - pchnl->dw_state |= CHNL_STATECANCEL; -- if (LST_IS_EMPTY(pchnl->pio_requests)) -+ if (list_empty(&pchnl->pio_requests)) - goto func_cont; - - if (pchnl->chnl_type == CHNL_PCPY) { -@@ -286,18 +287,14 @@ int bridge_chnl_cancel_io(struct chnl_object *chnl_obj) - } - } - /* Move all IOR's to IOC queue: */ -- while (!LST_IS_EMPTY(pchnl->pio_requests)) { -- chnl_packet_obj = -- (struct chnl_irp *)lst_get_head(pchnl->pio_requests); -- if (chnl_packet_obj) { -- chnl_packet_obj->byte_size = 0; -- chnl_packet_obj->status |= CHNL_IOCSTATCANCEL; -- lst_put_tail(pchnl->pio_completions, -- (struct list_head *)chnl_packet_obj); -- pchnl->cio_cs++; -- pchnl->cio_reqs--; -- DBC_ASSERT(pchnl->cio_reqs >= 0); -- } -+ list_for_each_entry_safe(chirp, tmp, &pchnl->pio_requests, link) { -+ list_del(&chirp->link); -+ chirp->byte_size = 0; -+ chirp->status |= CHNL_IOCSTATCANCEL; -+ list_add_tail(&chirp->link, &pchnl->pio_completions); -+ pchnl->cio_cs++; -+ pchnl->cio_reqs--; -+ DBC_ASSERT(pchnl->cio_reqs >= 0); - } - func_cont: - spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock); -@@ -353,20 +350,14 @@ func_cont: - pchnl->sync_event = NULL; - } - /* Free I/O request and I/O completion queues: */ -- if (pchnl->pio_completions) { -- free_chirp_list(pchnl->pio_completions); -- pchnl->pio_completions = NULL; -- pchnl->cio_cs = 0; -- } -- if (pchnl->pio_requests) { -- free_chirp_list(pchnl->pio_requests); -- pchnl->pio_requests = NULL; -- pchnl->cio_reqs = 0; -- } -- if (pchnl->free_packets_list) { -- free_chirp_list(pchnl->free_packets_list); -- pchnl->free_packets_list = NULL; -- } -+ free_chirp_list(&pchnl->pio_completions); -+ pchnl->cio_cs = 0; -+ -+ free_chirp_list(&pchnl->pio_requests); -+ pchnl->cio_reqs = 0; -+ -+ free_chirp_list(&pchnl->free_packets_list); -+ - /* Release channel object. */ - kfree(pchnl); - pchnl = NULL; -@@ -505,7 +496,7 @@ int bridge_chnl_flush_io(struct chnl_object *chnl_obj, u32 timeout) - && (pchnl->chnl_type == CHNL_PCPY)) { - /* Wait for IO completions, up to the specified - * timeout: */ -- while (!LST_IS_EMPTY(pchnl->pio_requests) && !status) { -+ while (!list_empty(&pchnl->pio_requests) && !status) { - status = bridge_chnl_get_ioc(chnl_obj, - timeout, &chnl_ioc_obj); - if (status) -@@ -521,7 +512,7 @@ int bridge_chnl_flush_io(struct chnl_object *chnl_obj, u32 timeout) - pchnl->dw_state &= ~CHNL_STATECANCEL; - } - } -- DBC_ENSURE(status || LST_IS_EMPTY(pchnl->pio_requests)); -+ DBC_ENSURE(status || list_empty(&pchnl->pio_requests)); - return status; - } - -@@ -581,7 +572,7 @@ int bridge_chnl_get_ioc(struct chnl_object *chnl_obj, u32 timeout, - if (!chan_ioc || !pchnl) { - status = -EFAULT; - } else if (timeout == CHNL_IOCNOWAIT) { -- if (LST_IS_EMPTY(pchnl->pio_completions)) -+ if (list_empty(&pchnl->pio_completions)) - status = -EREMOTEIO; - - } -@@ -596,7 +587,7 @@ int bridge_chnl_get_ioc(struct chnl_object *chnl_obj, u32 timeout, - - ioc.status = CHNL_IOCSTATCOMPLETE; - if (timeout != -- CHNL_IOCNOWAIT && LST_IS_EMPTY(pchnl->pio_completions)) { -+ CHNL_IOCNOWAIT && list_empty(&pchnl->pio_completions)) { - if (timeout == CHNL_IOCINFINITE) - timeout = SYNC_INFINITE; - -@@ -611,7 +602,7 @@ int bridge_chnl_get_ioc(struct chnl_object *chnl_obj, u32 timeout, - * fails due to unkown causes. */ - /* Even though Wait failed, there may be something in - * the Q: */ -- if (LST_IS_EMPTY(pchnl->pio_completions)) { -+ if (list_empty(&pchnl->pio_completions)) { - ioc.status |= CHNL_IOCSTATCANCEL; - dequeue_ioc = false; - } -@@ -622,30 +613,26 @@ int bridge_chnl_get_ioc(struct chnl_object *chnl_obj, u32 timeout, - omap_mbox_disable_irq(dev_ctxt->mbox, IRQ_RX); - if (dequeue_ioc) { - /* Dequeue IOC and set chan_ioc; */ -- DBC_ASSERT(!LST_IS_EMPTY(pchnl->pio_completions)); -- chnl_packet_obj = -- (struct chnl_irp *)lst_get_head(pchnl->pio_completions); -+ DBC_ASSERT(!list_empty(&pchnl->pio_completions)); -+ chnl_packet_obj = list_first_entry(&pchnl->pio_completions, -+ struct chnl_irp, link); -+ list_del(&chnl_packet_obj->link); - /* Update chan_ioc from channel state and chirp: */ -- if (chnl_packet_obj) { -- pchnl->cio_cs--; -- /* If this is a zero-copy channel, then set IOC's pbuf -- * to the DSP's address. This DSP address will get -- * translated to user's virtual addr later. */ -- { -- host_sys_buf = chnl_packet_obj->host_sys_buf; -- ioc.pbuf = chnl_packet_obj->host_user_buf; -- } -- ioc.byte_size = chnl_packet_obj->byte_size; -- ioc.buf_size = chnl_packet_obj->buf_size; -- ioc.dw_arg = chnl_packet_obj->dw_arg; -- ioc.status |= chnl_packet_obj->status; -- /* Place the used chirp on the free list: */ -- lst_put_tail(pchnl->free_packets_list, -- (struct list_head *)chnl_packet_obj); -- } else { -- ioc.pbuf = NULL; -- ioc.byte_size = 0; -- } -+ pchnl->cio_cs--; -+ /* -+ * If this is a zero-copy channel, then set IOC's pbuf -+ * to the DSP's address. This DSP address will get -+ * translated to user's virtual addr later. -+ */ -+ host_sys_buf = chnl_packet_obj->host_sys_buf; -+ ioc.pbuf = chnl_packet_obj->host_user_buf; -+ ioc.byte_size = chnl_packet_obj->byte_size; -+ ioc.buf_size = chnl_packet_obj->buf_size; -+ ioc.dw_arg = chnl_packet_obj->dw_arg; -+ ioc.status |= chnl_packet_obj->status; -+ /* Place the used chirp on the free list: */ -+ list_add_tail(&chnl_packet_obj->link, -+ &pchnl->free_packets_list); - } else { - ioc.pbuf = NULL; - ioc.byte_size = 0; -@@ -653,7 +640,7 @@ int bridge_chnl_get_ioc(struct chnl_object *chnl_obj, u32 timeout, - ioc.buf_size = 0; - } - /* Ensure invariant: If any IOC's are queued for this channel... */ -- if (!LST_IS_EMPTY(pchnl->pio_completions)) { -+ if (!list_empty(&pchnl->pio_completions)) { - /* Since DSPStream_Reclaim() does not take a timeout - * parameter, we pass the stream's timeout value to - * bridge_chnl_get_ioc. We cannot determine whether or not -@@ -818,9 +805,16 @@ int bridge_chnl_open(struct chnl_object **chnl, - /* Protect queues from io_dpc: */ - pchnl->dw_state = CHNL_STATECANCEL; - /* Allocate initial IOR and IOC queues: */ -- pchnl->free_packets_list = create_chirp_list(pattrs->uio_reqs); -- pchnl->pio_requests = create_chirp_list(0); -- pchnl->pio_completions = create_chirp_list(0); -+ status = create_chirp_list(&pchnl->free_packets_list, -+ pattrs->uio_reqs); -+ if (status) { -+ kfree(pchnl); -+ goto func_end; -+ } -+ -+ INIT_LIST_HEAD(&pchnl->pio_requests); -+ INIT_LIST_HEAD(&pchnl->pio_completions); -+ - pchnl->chnl_packets = pattrs->uio_reqs; - pchnl->cio_cs = 0; - pchnl->cio_reqs = 0; -@@ -840,40 +834,26 @@ int bridge_chnl_open(struct chnl_object **chnl, - } - - if (!status) { -- if (pchnl->pio_completions && pchnl->pio_requests && -- pchnl->free_packets_list) { -- /* Initialize CHNL object fields: */ -- pchnl->chnl_mgr_obj = chnl_mgr_obj; -- pchnl->chnl_id = ch_id; -- pchnl->chnl_mode = chnl_mode; -- pchnl->user_event = sync_event; -- pchnl->sync_event = sync_event; -- /* Get the process handle */ -- pchnl->process = current->tgid; -- pchnl->pcb_arg = 0; -- pchnl->bytes_moved = 0; -- /* Default to proc-copy */ -- pchnl->chnl_type = CHNL_PCPY; -- } else { -- status = -ENOMEM; -- } -+ /* Initialize CHNL object fields: */ -+ pchnl->chnl_mgr_obj = chnl_mgr_obj; -+ pchnl->chnl_id = ch_id; -+ pchnl->chnl_mode = chnl_mode; -+ pchnl->user_event = sync_event; -+ pchnl->sync_event = sync_event; -+ /* Get the process handle */ -+ pchnl->process = current->tgid; -+ pchnl->pcb_arg = 0; -+ pchnl->bytes_moved = 0; -+ /* Default to proc-copy */ -+ pchnl->chnl_type = CHNL_PCPY; - } - - if (status) { - /* Free memory */ -- if (pchnl->pio_completions) { -- free_chirp_list(pchnl->pio_completions); -- pchnl->pio_completions = NULL; -- pchnl->cio_cs = 0; -- } -- if (pchnl->pio_requests) { -- free_chirp_list(pchnl->pio_requests); -- pchnl->pio_requests = NULL; -- } -- if (pchnl->free_packets_list) { -- free_chirp_list(pchnl->free_packets_list); -- pchnl->free_packets_list = NULL; -- } -+ free_chirp_list(&pchnl->pio_completions); -+ pchnl->cio_cs = 0; -+ free_chirp_list(&pchnl->pio_requests); -+ free_chirp_list(&pchnl->free_packets_list); - kfree(sync_event); - sync_event = NULL; - -@@ -924,37 +904,35 @@ int bridge_chnl_register_notify(struct chnl_object *chnl_obj, - * Purpose: - * Initialize a queue of channel I/O Request/Completion packets. - * Parameters: -+ * list: Pointer to a list_head - * chirps: Number of Chirps to allocate. - * Returns: -- * Pointer to queue of IRPs, or NULL. -+ * 0 if successful, error code otherwise. - * Requires: - * Ensures: - */ --static struct lst_list *create_chirp_list(u32 chirps) -+static int create_chirp_list(struct list_head *list, u32 chirps) - { -- struct lst_list *chirp_list; -- struct chnl_irp *chnl_packet_obj; -+ struct chnl_irp *chirp; - u32 i; - -- chirp_list = kzalloc(sizeof(struct lst_list), GFP_KERNEL); -+ INIT_LIST_HEAD(list); - -- if (chirp_list) { -- INIT_LIST_HEAD(&chirp_list->head); -- /* Make N chirps and place on queue. */ -- for (i = 0; (i < chirps) -- && ((chnl_packet_obj = make_new_chirp()) != NULL); i++) { -- lst_put_tail(chirp_list, -- (struct list_head *)chnl_packet_obj); -- } -+ /* Make N chirps and place on queue. */ -+ for (i = 0; i < chirps; i++) { -+ chirp = kzalloc(sizeof(struct chnl_irp), GFP_KERNEL); -+ if (!chirp) -+ break; -+ list_add_tail(&chirp->link, list); -+ } - -- /* If we couldn't allocate all chirps, free those allocated: */ -- if (i != chirps) { -- free_chirp_list(chirp_list); -- chirp_list = NULL; -- } -+ /* If we couldn't allocate all chirps, free those allocated: */ -+ if (i != chirps) { -+ free_chirp_list(list); -+ return -ENOMEM; - } - -- return chirp_list; -+ return 0; - } - - /* -@@ -962,31 +940,16 @@ static struct lst_list *create_chirp_list(u32 chirps) - * Purpose: - * Free the queue of Chirps. - */ --static void free_chirp_list(struct lst_list *chirp_list) -+static void free_chirp_list(struct list_head *chirp_list) - { -- DBC_REQUIRE(chirp_list != NULL); -- -- while (!LST_IS_EMPTY(chirp_list)) -- kfree(lst_get_head(chirp_list)); -+ struct chnl_irp *chirp, *tmp; - -- kfree(chirp_list); --} -- --/* -- * ======== make_new_chirp ======== -- * Allocate the memory for a new channel IRP. -- */ --static struct chnl_irp *make_new_chirp(void) --{ -- struct chnl_irp *chnl_packet_obj; -+ DBC_REQUIRE(chirp_list != NULL); - -- chnl_packet_obj = kzalloc(sizeof(struct chnl_irp), GFP_KERNEL); -- if (chnl_packet_obj != NULL) { -- /* lst_init_elem only resets the list's member values. */ -- lst_init_elem(&chnl_packet_obj->link); -+ list_for_each_entry_safe(chirp, tmp, chirp_list, link) { -+ list_del(&chirp->link); -+ kfree(chirp); - } -- -- return chnl_packet_obj; - } - - /* -diff --git a/drivers/staging/tidspbridge/core/io_sm.c b/drivers/staging/tidspbridge/core/io_sm.c -index 9ee02d1..d30cc7e 100644 ---- a/drivers/staging/tidspbridge/core/io_sm.c -+++ b/drivers/staging/tidspbridge/core/io_sm.c -@@ -24,6 +24,7 @@ - * function. - */ - #include <linux/types.h> -+#include <linux/list.h> - - /* Host OS */ - #include <dspbridge/host_os.h> -@@ -1092,15 +1093,17 @@ static void input_chnl(struct io_mgr *pio_mgr, struct chnl_object *pchnl, - pchnl = chnl_mgr_obj->ap_channel[chnl_id]; - if ((pchnl != NULL) && CHNL_IS_INPUT(pchnl->chnl_mode)) { - if ((pchnl->dw_state & ~CHNL_STATEEOS) == CHNL_STATEREADY) { -- if (!pchnl->pio_requests) -- goto func_end; - /* Get the I/O request, and attempt a transfer */ -- chnl_packet_obj = (struct chnl_irp *) -- lst_get_head(pchnl->pio_requests); -- if (chnl_packet_obj) { -- pchnl->cio_reqs--; -- if (pchnl->cio_reqs < 0) -+ if (!list_empty(&pchnl->pio_requests)) { -+ if (!pchnl->cio_reqs) - goto func_end; -+ -+ chnl_packet_obj = list_first_entry( -+ &pchnl->pio_requests, -+ struct chnl_irp, link); -+ list_del(&chnl_packet_obj->link); -+ pchnl->cio_reqs--; -+ - /* - * Ensure we don't overflow the client's - * buffer. -@@ -1127,21 +1130,18 @@ static void input_chnl(struct io_mgr *pio_mgr, struct chnl_object *pchnl, - * the channel state. - */ - chnl_packet_obj->status |= -- CHNL_IOCSTATEOS; -+ CHNL_IOCSTATEOS; - pchnl->dw_state |= CHNL_STATEEOS; - /* - * Notify that end of stream has - * occurred. - */ - ntfy_notify(pchnl->ntfy_obj, -- DSP_STREAMDONE); -+ DSP_STREAMDONE); - } - /* Tell DSP if no more I/O buffers available */ -- if (!pchnl->pio_requests) -- goto func_end; -- if (LST_IS_EMPTY(pchnl->pio_requests)) { -+ if (list_empty(&pchnl->pio_requests)) - set_chnl_free(sm, pchnl->chnl_id); -- } - clear_chnl = true; - notify_client = true; - } else { -@@ -1213,21 +1213,18 @@ static void input_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) - msg.msgq_id = - read_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr); - msg_input += sizeof(struct msg_dspmsg); -- if (!hmsg_mgr->queue_list) -- goto func_end; - - /* Determine which queue to put the message in */ -- msg_queue_obj = -- (struct msg_queue *)lst_first(hmsg_mgr->queue_list); - dev_dbg(bridge, "input msg: dw_cmd=0x%x dw_arg1=0x%x " -- "dw_arg2=0x%x msgq_id=0x%x \n", msg.msg.dw_cmd, -+ "dw_arg2=0x%x msgq_id=0x%x\n", msg.msg.dw_cmd, - msg.msg.dw_arg1, msg.msg.dw_arg2, msg.msgq_id); - /* - * Interrupt may occur before shared memory and message - * input locations have been set up. If all nodes were - * cleaned up, hmsg_mgr->max_msgs should be 0. - */ -- while (msg_queue_obj != NULL) { -+ list_for_each_entry(msg_queue_obj, &hmsg_mgr->queue_list, -+ list_elem) { - if (msg.msgq_id == msg_queue_obj->msgq_id) { - /* Found it */ - if (msg.msg.dw_cmd == RMS_EXITACK) { -@@ -1237,47 +1234,39 @@ static void input_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) - * queued. - */ - (*hmsg_mgr->on_exit) ((void *) -- msg_queue_obj->arg, -- msg.msg.dw_arg1); -+ msg_queue_obj->arg, -+ msg.msg.dw_arg1); -+ break; -+ } -+ /* -+ * Not an exit acknowledgement, queue -+ * the message. -+ */ -+ if (!list_empty(&msg_queue_obj-> -+ msg_free_list)) { -+ pmsg = list_first_entry( -+ &msg_queue_obj->msg_free_list, -+ struct msg_frame, list_elem); -+ list_del(&pmsg->list_elem); -+ pmsg->msg_data = msg; -+ list_add_tail(&pmsg->list_elem, -+ &msg_queue_obj->msg_used_list); -+ ntfy_notify -+ (msg_queue_obj->ntfy_obj, -+ DSP_NODEMESSAGEREADY); -+ sync_set_event -+ (msg_queue_obj->sync_event); - } else { - /* -- * Not an exit acknowledgement, queue -- * the message. -+ * No free frame to copy the -+ * message into. - */ -- if (!msg_queue_obj->msg_free_list) -- goto func_end; -- pmsg = (struct msg_frame *)lst_get_head -- (msg_queue_obj->msg_free_list); -- if (msg_queue_obj->msg_used_list -- && pmsg) { -- pmsg->msg_data = msg; -- lst_put_tail -- (msg_queue_obj->msg_used_list, -- (struct list_head *)pmsg); -- ntfy_notify -- (msg_queue_obj->ntfy_obj, -- DSP_NODEMESSAGEREADY); -- sync_set_event -- (msg_queue_obj->sync_event); -- } else { -- /* -- * No free frame to copy the -- * message into. -- */ -- pr_err("%s: no free msg frames," -- " discarding msg\n", -- __func__); -- } -+ pr_err("%s: no free msg frames," -+ " discarding msg\n", -+ __func__); - } - break; - } -- -- if (!hmsg_mgr->queue_list || !msg_queue_obj) -- goto func_end; -- msg_queue_obj = -- (struct msg_queue *)lst_next(hmsg_mgr->queue_list, -- (struct list_head *) -- msg_queue_obj); - } - } - /* Set the post SWI flag */ -@@ -1301,8 +1290,7 @@ static void notify_chnl_complete(struct chnl_object *pchnl, - { - bool signal_event; - -- if (!pchnl || !pchnl->sync_event || -- !pchnl->pio_completions || !chnl_packet_obj) -+ if (!pchnl || !pchnl->sync_event || !chnl_packet_obj) - goto func_end; - - /* -@@ -1311,10 +1299,9 @@ static void notify_chnl_complete(struct chnl_object *pchnl, - * signalled by the only IO completion list consumer: - * bridge_chnl_get_ioc(). - */ -- signal_event = LST_IS_EMPTY(pchnl->pio_completions); -+ signal_event = list_empty(&pchnl->pio_completions); - /* Enqueue the IO completion info for the client */ -- lst_put_tail(pchnl->pio_completions, -- (struct list_head *)chnl_packet_obj); -+ list_add_tail(&chnl_packet_obj->link, &pchnl->pio_completions); - pchnl->cio_cs++; - - if (pchnl->cio_cs > pchnl->chnl_packets) -@@ -1361,21 +1348,23 @@ static void output_chnl(struct io_mgr *pio_mgr, struct chnl_object *pchnl, - goto func_end; - - pchnl = chnl_mgr_obj->ap_channel[chnl_id]; -- if (!pchnl || !pchnl->pio_requests) { -+ if (!pchnl || list_empty(&pchnl->pio_requests)) { - /* Shouldn't get here */ - goto func_end; - } -- /* Get the I/O request, and attempt a transfer */ -- chnl_packet_obj = (struct chnl_irp *)lst_get_head(pchnl->pio_requests); -- if (!chnl_packet_obj) -+ -+ if (!pchnl->cio_reqs) - goto func_end; - -+ /* Get the I/O request, and attempt a transfer */ -+ chnl_packet_obj = list_first_entry(&pchnl->pio_requests, -+ struct chnl_irp, link); -+ list_del(&chnl_packet_obj->link); -+ - pchnl->cio_reqs--; -- if (pchnl->cio_reqs < 0 || !pchnl->pio_requests) -- goto func_end; - - /* Record fact that no more I/O buffers available */ -- if (LST_IS_EMPTY(pchnl->pio_requests)) -+ if (list_empty(&pchnl->pio_requests)) - chnl_mgr_obj->dw_output_mask &= ~(1 << chnl_id); - - /* Transfer buffer to DSP side */ -@@ -1436,14 +1425,11 @@ static void output_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) - msg_output = pio_mgr->msg_output; - /* Copy num_msgs messages into shared memory */ - for (i = 0; i < num_msgs; i++) { -- if (!hmsg_mgr->msg_used_list) { -- pmsg = NULL; -- goto func_end; -- } else { -- pmsg = (struct msg_frame *) -- lst_get_head(hmsg_mgr->msg_used_list); -- } -- if (pmsg != NULL) { -+ if (!list_empty(&hmsg_mgr->msg_used_list)) { -+ pmsg = list_first_entry( -+ &hmsg_mgr->msg_used_list, -+ struct msg_frame, list_elem); -+ list_del(&pmsg->list_elem); - val = (pmsg->msg_data).msgq_id; - addr = (u32) &(((struct msg_dspmsg *) - msg_output)->msgq_id); -@@ -1465,10 +1451,8 @@ static void output_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) - write_ext32_bit_dsp_data( - pio_mgr->hbridge_context, addr, val); - msg_output += sizeof(struct msg_dspmsg); -- if (!hmsg_mgr->msg_free_list) -- goto func_end; -- lst_put_tail(hmsg_mgr->msg_free_list, -- (struct list_head *)pmsg); -+ list_add_tail(&pmsg->list_elem, -+ &hmsg_mgr->msg_free_list); - sync_set_event(hmsg_mgr->sync_event); - } - } -@@ -1492,8 +1476,6 @@ static void output_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) - MBX_PCPY_CLASS); - } - } --func_end: -- return; - } - - /* -diff --git a/drivers/staging/tidspbridge/core/msg_sm.c b/drivers/staging/tidspbridge/core/msg_sm.c -index 87712e2..de2cb83 100644 ---- a/drivers/staging/tidspbridge/core/msg_sm.c -+++ b/drivers/staging/tidspbridge/core/msg_sm.c -@@ -24,7 +24,6 @@ - #include <dspbridge/dbc.h> - - /* ----------------------------------- OS Adaptation Layer */ --#include <dspbridge/list.h> - #include <dspbridge/sync.h> - - /* ----------------------------------- Platform Manager */ -@@ -38,10 +37,10 @@ - #include <dspbridge/dspmsg.h> - - /* ----------------------------------- Function Prototypes */ --static int add_new_msg(struct lst_list *msg_list); -+static int add_new_msg(struct list_head *msg_list); - static void delete_msg_mgr(struct msg_mgr *hmsg_mgr); - static void delete_msg_queue(struct msg_queue *msg_queue_obj, u32 num_to_dsp); --static void free_msg_list(struct lst_list *msg_list); -+static void free_msg_list(struct list_head *msg_list); - - /* - * ======== bridge_msg_create ======== -@@ -73,25 +72,13 @@ int bridge_msg_create(struct msg_mgr **msg_man, - msg_mgr_obj->on_exit = msg_callback; - msg_mgr_obj->hio_mgr = hio_mgr; - /* List of MSG_QUEUEs */ -- msg_mgr_obj->queue_list = kzalloc(sizeof(struct lst_list), -- GFP_KERNEL); -+ INIT_LIST_HEAD(&msg_mgr_obj->queue_list); - /* Queues of message frames for messages to the DSP. Message - * frames will only be added to the free queue when a - * msg_queue object is created. */ -- msg_mgr_obj->msg_free_list = kzalloc(sizeof(struct lst_list), -- GFP_KERNEL); -- msg_mgr_obj->msg_used_list = kzalloc(sizeof(struct lst_list), -- GFP_KERNEL); -- if (msg_mgr_obj->queue_list == NULL || -- msg_mgr_obj->msg_free_list == NULL || -- msg_mgr_obj->msg_used_list == NULL) { -- status = -ENOMEM; -- } else { -- INIT_LIST_HEAD(&msg_mgr_obj->queue_list->head); -- INIT_LIST_HEAD(&msg_mgr_obj->msg_free_list->head); -- INIT_LIST_HEAD(&msg_mgr_obj->msg_used_list->head); -- spin_lock_init(&msg_mgr_obj->msg_mgr_lock); -- } -+ INIT_LIST_HEAD(&msg_mgr_obj->msg_free_list); -+ INIT_LIST_HEAD(&msg_mgr_obj->msg_used_list); -+ spin_lock_init(&msg_mgr_obj->msg_mgr_lock); - - /* Create an event to be used by bridge_msg_put() in waiting - * for an available free frame from the message manager. */ -@@ -128,7 +115,7 @@ int bridge_msg_create_queue(struct msg_mgr *hmsg_mgr, - struct msg_queue *msg_q; - int status = 0; - -- if (!hmsg_mgr || msgq == NULL || !hmsg_mgr->msg_free_list) { -+ if (!hmsg_mgr || msgq == NULL) { - status = -EFAULT; - goto func_end; - } -@@ -140,20 +127,13 @@ int bridge_msg_create_queue(struct msg_mgr *hmsg_mgr, - status = -ENOMEM; - goto func_end; - } -- lst_init_elem((struct list_head *)msg_q); - msg_q->max_msgs = max_msgs; - msg_q->hmsg_mgr = hmsg_mgr; - msg_q->arg = arg; /* Node handle */ - msg_q->msgq_id = msgq_id; /* Node env (not valid yet) */ - /* Queues of Message frames for messages from the DSP */ -- msg_q->msg_free_list = kzalloc(sizeof(struct lst_list), GFP_KERNEL); -- msg_q->msg_used_list = kzalloc(sizeof(struct lst_list), GFP_KERNEL); -- if (msg_q->msg_free_list == NULL || msg_q->msg_used_list == NULL) -- status = -ENOMEM; -- else { -- INIT_LIST_HEAD(&msg_q->msg_free_list->head); -- INIT_LIST_HEAD(&msg_q->msg_used_list->head); -- } -+ INIT_LIST_HEAD(&msg_q->msg_free_list); -+ INIT_LIST_HEAD(&msg_q->msg_used_list); - - /* Create event that will be signalled when a message from - * the DSP is available. */ -@@ -204,10 +184,10 @@ int bridge_msg_create_queue(struct msg_mgr *hmsg_mgr, - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); - /* Initialize message frames and put in appropriate queues */ - for (i = 0; i < max_msgs && !status; i++) { -- status = add_new_msg(hmsg_mgr->msg_free_list); -+ status = add_new_msg(&hmsg_mgr->msg_free_list); - if (!status) { - num_allocated++; -- status = add_new_msg(msg_q->msg_free_list); -+ status = add_new_msg(&msg_q->msg_free_list); - } - } - if (status) { -@@ -215,11 +195,11 @@ int bridge_msg_create_queue(struct msg_mgr *hmsg_mgr, - * of the newly allocated message frames. */ - delete_msg_queue(msg_q, num_allocated); - } else { -- lst_put_tail(hmsg_mgr->queue_list, -- (struct list_head *)msg_q); -+ list_add_tail(&msg_q->list_elem, -+ &hmsg_mgr->queue_list); - *msgq = msg_q; - /* Signal that free frames are now available */ -- if (!LST_IS_EMPTY(hmsg_mgr->msg_free_list)) -+ if (!list_empty(&hmsg_mgr->msg_free_list)) - sync_set_event(hmsg_mgr->sync_event); - - } -@@ -267,15 +247,12 @@ void bridge_msg_delete_queue(struct msg_queue *msg_queue_obj) - } - /* Remove message queue from hmsg_mgr->queue_list */ - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); -- lst_remove_elem(hmsg_mgr->queue_list, -- (struct list_head *)msg_queue_obj); -+ list_del(&msg_queue_obj->list_elem); - /* Free the message queue object */ - delete_msg_queue(msg_queue_obj, msg_queue_obj->max_msgs); -- if (!hmsg_mgr->msg_free_list) -- goto func_cont; -- if (LST_IS_EMPTY(hmsg_mgr->msg_free_list)) -+ if (list_empty(&hmsg_mgr->msg_free_list)) - sync_reset_event(hmsg_mgr->sync_event); --func_cont: -+ - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - func_end: - return; -@@ -301,26 +278,21 @@ int bridge_msg_get(struct msg_queue *msg_queue_obj, - } - - hmsg_mgr = msg_queue_obj->hmsg_mgr; -- if (!msg_queue_obj->msg_used_list) { -- status = -EFAULT; -- goto func_end; -- } - - /* Enter critical section */ - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); - /* If a message is already there, get it */ -- if (!LST_IS_EMPTY(msg_queue_obj->msg_used_list)) { -- msg_frame_obj = (struct msg_frame *) -- lst_get_head(msg_queue_obj->msg_used_list); -- if (msg_frame_obj != NULL) { -- *pmsg = msg_frame_obj->msg_data.msg; -- lst_put_tail(msg_queue_obj->msg_free_list, -- (struct list_head *)msg_frame_obj); -- if (LST_IS_EMPTY(msg_queue_obj->msg_used_list)) -- sync_reset_event(msg_queue_obj->sync_event); -- -- got_msg = true; -- } -+ if (!list_empty(&msg_queue_obj->msg_used_list)) { -+ msg_frame_obj = list_first_entry(&msg_queue_obj->msg_used_list, -+ struct msg_frame, list_elem); -+ list_del(&msg_frame_obj->list_elem); -+ *pmsg = msg_frame_obj->msg_data.msg; -+ list_add_tail(&msg_frame_obj->list_elem, -+ &msg_queue_obj->msg_free_list); -+ if (list_empty(&msg_queue_obj->msg_used_list)) -+ sync_reset_event(msg_queue_obj->sync_event); -+ -+ got_msg = true; - } else { - if (msg_queue_obj->done) - status = -EPERM; -@@ -349,25 +321,22 @@ int bridge_msg_get(struct msg_queue *msg_queue_obj, - (void)sync_set_event(msg_queue_obj->sync_done_ack); - status = -EPERM; - } else { -- if (!status) { -- DBC_ASSERT(!LST_IS_EMPTY -- (msg_queue_obj->msg_used_list)); -+ if (!status && !list_empty(&msg_queue_obj-> -+ msg_used_list)) { - /* Get msg from used list */ -- msg_frame_obj = (struct msg_frame *) -- lst_get_head(msg_queue_obj->msg_used_list); -+ msg_frame_obj = list_first_entry( -+ &msg_queue_obj->msg_used_list, -+ struct msg_frame, list_elem); -+ list_del(&msg_frame_obj->list_elem); - /* Copy message into pmsg and put frame on the - * free list */ -- if (msg_frame_obj != NULL) { -- *pmsg = msg_frame_obj->msg_data.msg; -- lst_put_tail -- (msg_queue_obj->msg_free_list, -- (struct list_head *) -- msg_frame_obj); -- } -+ *pmsg = msg_frame_obj->msg_data.msg; -+ list_add_tail(&msg_frame_obj->list_elem, -+ &msg_queue_obj->msg_free_list); - } - msg_queue_obj->io_msg_pend--; - /* Reset the event if there are still queued messages */ -- if (!LST_IS_EMPTY(msg_queue_obj->msg_used_list)) -+ if (!list_empty(&msg_queue_obj->msg_used_list)) - sync_set_event(msg_queue_obj->sync_event); - - /* Exit critical section */ -@@ -397,27 +366,22 @@ int bridge_msg_put(struct msg_queue *msg_queue_obj, - goto func_end; - } - hmsg_mgr = msg_queue_obj->hmsg_mgr; -- if (!hmsg_mgr->msg_free_list) { -- status = -EFAULT; -- goto func_end; -- } - - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); - - /* If a message frame is available, use it */ -- if (!LST_IS_EMPTY(hmsg_mgr->msg_free_list)) { -- msg_frame_obj = -- (struct msg_frame *)lst_get_head(hmsg_mgr->msg_free_list); -- if (msg_frame_obj != NULL) { -- msg_frame_obj->msg_data.msg = *pmsg; -- msg_frame_obj->msg_data.msgq_id = -- msg_queue_obj->msgq_id; -- lst_put_tail(hmsg_mgr->msg_used_list, -- (struct list_head *)msg_frame_obj); -- hmsg_mgr->msgs_pending++; -- put_msg = true; -- } -- if (LST_IS_EMPTY(hmsg_mgr->msg_free_list)) -+ if (!list_empty(&hmsg_mgr->msg_free_list)) { -+ msg_frame_obj = list_first_entry(&hmsg_mgr->msg_free_list, -+ struct msg_frame, list_elem); -+ list_del(&msg_frame_obj->list_elem); -+ msg_frame_obj->msg_data.msg = *pmsg; -+ msg_frame_obj->msg_data.msgq_id = -+ msg_queue_obj->msgq_id; -+ list_add_tail(&msg_frame_obj->list_elem, -+ &hmsg_mgr->msg_used_list); -+ hmsg_mgr->msgs_pending++; -+ put_msg = true; -+ if (list_empty(&hmsg_mgr->msg_free_list)) - sync_reset_event(hmsg_mgr->sync_event); - - /* Release critical section before scheduling DPC */ -@@ -452,34 +416,34 @@ int bridge_msg_put(struct msg_queue *msg_queue_obj, - (void)sync_set_event(msg_queue_obj->sync_done_ack); - status = -EPERM; - } else { -- if (LST_IS_EMPTY(hmsg_mgr->msg_free_list)) { -+ if (list_empty(&hmsg_mgr->msg_free_list)) { - status = -EFAULT; - goto func_cont; - } - /* Get msg from free list */ -- msg_frame_obj = (struct msg_frame *) -- lst_get_head(hmsg_mgr->msg_free_list); -+ msg_frame_obj = list_first_entry( -+ &hmsg_mgr->msg_free_list, -+ struct msg_frame, list_elem); -+ list_del(&msg_frame_obj->list_elem); - /* - * Copy message into pmsg and put frame on the - * used list. - */ -- if (msg_frame_obj) { -- msg_frame_obj->msg_data.msg = *pmsg; -- msg_frame_obj->msg_data.msgq_id = -- msg_queue_obj->msgq_id; -- lst_put_tail(hmsg_mgr->msg_used_list, -- (struct list_head *)msg_frame_obj); -- hmsg_mgr->msgs_pending++; -- /* -- * Schedule a DPC, to do the actual -- * data transfer. -- */ -- iosm_schedule(hmsg_mgr->hio_mgr); -- } -+ msg_frame_obj->msg_data.msg = *pmsg; -+ msg_frame_obj->msg_data.msgq_id = -+ msg_queue_obj->msgq_id; -+ list_add_tail(&msg_frame_obj->list_elem, -+ &hmsg_mgr->msg_used_list); -+ hmsg_mgr->msgs_pending++; -+ /* -+ * Schedule a DPC, to do the actual -+ * data transfer. -+ */ -+ iosm_schedule(hmsg_mgr->hio_mgr); - - msg_queue_obj->io_msg_pend--; - /* Reset event if there are still frames available */ -- if (!LST_IS_EMPTY(hmsg_mgr->msg_free_list)) -+ if (!list_empty(&hmsg_mgr->msg_free_list)) - sync_set_event(hmsg_mgr->sync_event); - func_cont: - /* Exit critical section */ -@@ -551,15 +515,14 @@ void bridge_msg_set_queue_id(struct msg_queue *msg_queue_obj, u32 msgq_id) - * ======== add_new_msg ======== - * Must be called in message manager critical section. - */ --static int add_new_msg(struct lst_list *msg_list) -+static int add_new_msg(struct list_head *msg_list) - { - struct msg_frame *pmsg; - int status = 0; - - pmsg = kzalloc(sizeof(struct msg_frame), GFP_ATOMIC); - if (pmsg != NULL) { -- lst_init_elem((struct list_head *)pmsg); -- lst_put_tail(msg_list, (struct list_head *)pmsg); -+ list_add_tail(&pmsg->list_elem, msg_list); - } else { - status = -ENOMEM; - } -@@ -575,22 +538,9 @@ static void delete_msg_mgr(struct msg_mgr *hmsg_mgr) - if (!hmsg_mgr) - goto func_end; - -- if (hmsg_mgr->queue_list) { -- if (LST_IS_EMPTY(hmsg_mgr->queue_list)) { -- kfree(hmsg_mgr->queue_list); -- hmsg_mgr->queue_list = NULL; -- } -- } -- -- if (hmsg_mgr->msg_free_list) { -- free_msg_list(hmsg_mgr->msg_free_list); -- hmsg_mgr->msg_free_list = NULL; -- } -- -- if (hmsg_mgr->msg_used_list) { -- free_msg_list(hmsg_mgr->msg_used_list); -- hmsg_mgr->msg_used_list = NULL; -- } -+ /* FIXME: free elements from queue_list? */ -+ free_msg_list(&hmsg_mgr->msg_free_list); -+ free_msg_list(&hmsg_mgr->msg_used_list); - - kfree(hmsg_mgr->sync_event); - -@@ -605,37 +555,26 @@ func_end: - static void delete_msg_queue(struct msg_queue *msg_queue_obj, u32 num_to_dsp) - { - struct msg_mgr *hmsg_mgr; -- struct msg_frame *pmsg; -+ struct msg_frame *pmsg, *tmp; - u32 i; - -- if (!msg_queue_obj || -- !msg_queue_obj->hmsg_mgr || !msg_queue_obj->hmsg_mgr->msg_free_list) -+ if (!msg_queue_obj || !msg_queue_obj->hmsg_mgr) - goto func_end; - - hmsg_mgr = msg_queue_obj->hmsg_mgr; - - /* Pull off num_to_dsp message frames from Msg manager and free */ -- for (i = 0; i < num_to_dsp; i++) { -- -- if (!LST_IS_EMPTY(hmsg_mgr->msg_free_list)) { -- pmsg = (struct msg_frame *) -- lst_get_head(hmsg_mgr->msg_free_list); -- kfree(pmsg); -- } else { -- /* Cannot free all of the message frames */ -+ i = 0; -+ list_for_each_entry_safe(pmsg, tmp, &hmsg_mgr->msg_free_list, -+ list_elem) { -+ list_del(&pmsg->list_elem); -+ kfree(pmsg); -+ if (i++ >= num_to_dsp) - break; -- } - } - -- if (msg_queue_obj->msg_free_list) { -- free_msg_list(msg_queue_obj->msg_free_list); -- msg_queue_obj->msg_free_list = NULL; -- } -- -- if (msg_queue_obj->msg_used_list) { -- free_msg_list(msg_queue_obj->msg_used_list); -- msg_queue_obj->msg_used_list = NULL; -- } -+ free_msg_list(&msg_queue_obj->msg_free_list); -+ free_msg_list(&msg_queue_obj->msg_used_list); - - if (msg_queue_obj->ntfy_obj) { - ntfy_delete(msg_queue_obj->ntfy_obj); -@@ -655,19 +594,18 @@ func_end: - /* - * ======== free_msg_list ======== - */ --static void free_msg_list(struct lst_list *msg_list) -+static void free_msg_list(struct list_head *msg_list) - { -- struct msg_frame *pmsg; -+ struct msg_frame *pmsg, *tmp; - - if (!msg_list) - goto func_end; - -- while ((pmsg = (struct msg_frame *)lst_get_head(msg_list)) != NULL) -+ list_for_each_entry_safe(pmsg, tmp, msg_list, list_elem) { -+ list_del(&pmsg->list_elem); - kfree(pmsg); -+ } - -- DBC_ASSERT(LST_IS_EMPTY(msg_list)); -- -- kfree(msg_list); - func_end: - return; - } -diff --git a/drivers/staging/tidspbridge/include/dspbridge/_chnl_sm.h b/drivers/staging/tidspbridge/include/dspbridge/_chnl_sm.h -index 8efd1fb..8a22317 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/_chnl_sm.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/_chnl_sm.h -@@ -26,7 +26,7 @@ - #include <dspbridge/dspapi.h> - #include <dspbridge/dspdefs.h> - --#include <dspbridge/list.h> -+#include <linux/list.h> - #include <dspbridge/ntfy.h> - - /* -@@ -148,13 +148,13 @@ struct chnl_object { - struct sync_object *sync_event; - u32 process; /* Process which created this channel */ - u32 pcb_arg; /* Argument to use with callback */ -- struct lst_list *pio_requests; /* List of IOR's to driver */ -+ struct list_head pio_requests; /* List of IOR's to driver */ - s32 cio_cs; /* Number of IOC's in queue */ - s32 cio_reqs; /* Number of IORequests in queue */ - s32 chnl_packets; /* Initial number of free Irps */ - /* List of IOC's from driver */ -- struct lst_list *pio_completions; -- struct lst_list *free_packets_list; /* List of free Irps */ -+ struct list_head pio_completions; -+ struct list_head free_packets_list; /* List of free Irps */ - struct ntfy_object *ntfy_obj; - u32 bytes_moved; /* Total number of bytes transfered */ - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/cmmdefs.h b/drivers/staging/tidspbridge/include/dspbridge/cmmdefs.h -index fbff372..e748ba8 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/cmmdefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/cmmdefs.h -@@ -19,7 +19,6 @@ - #ifndef CMMDEFS_ - #define CMMDEFS_ - --#include <dspbridge/list.h> - - /* Cmm attributes used in cmm_create() */ - struct cmm_mgrattrs { -diff --git a/drivers/staging/tidspbridge/include/dspbridge/sync.h b/drivers/staging/tidspbridge/include/dspbridge/sync.h -index df05b8f..b1e75eb 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/sync.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/sync.h -@@ -20,6 +20,7 @@ - #define _SYNC_H - - #include <dspbridge/dbdefs.h> -+#include <dspbridge/host_os.h> - - - /* Special timeout value indicating an infinite wait: */ --- -1.7.1 - diff --git a/patches/dspbridge/0012-staging-tidspbridge-convert-pmgr-to-list_head.patch b/patches/dspbridge/0012-staging-tidspbridge-convert-pmgr-to-list_head.patch deleted file mode 100644 index b4caa05402d4183f1a3ab098c4e1dc1f0cd8459f..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0012-staging-tidspbridge-convert-pmgr-to-list_head.patch +++ /dev/null @@ -1,596 +0,0 @@ -From 0b72abb2bb29e50f8eacaa8aa740f4418c4a4250 Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Sun, 21 Nov 2010 10:46:25 +0000 -Subject: [PATCH 12/25] staging: tidspbridge: convert pmgr to list_head - -Convert the pmgr module of the tidspbridge driver -to use struct list_head instead of struct lst_list. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/pmgr/cmm.c | 237 ++++++++++---------------------- - drivers/staging/tidspbridge/pmgr/dev.c | 61 ++++----- - 2 files changed, 100 insertions(+), 198 deletions(-) - -diff --git a/drivers/staging/tidspbridge/pmgr/cmm.c b/drivers/staging/tidspbridge/pmgr/cmm.c -index 8dbdd20..d7ca2a4 100644 ---- a/drivers/staging/tidspbridge/pmgr/cmm.c -+++ b/drivers/staging/tidspbridge/pmgr/cmm.c -@@ -12,7 +12,7 @@ - * describes a block of physically contiguous shared memory used for - * future allocations by CMM. - * -- * Memory is coelesced back to the appropriate heap when a buffer is -+ * Memory is coalesced back to the appropriate heap when a buffer is - * freed. - * - * Notes: -@@ -30,6 +30,7 @@ - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - #include <linux/types.h> -+#include <linux/list.h> - - /* ----------------------------------- DSP/BIOS Bridge */ - #include <dspbridge/dbdefs.h> -@@ -38,7 +39,6 @@ - #include <dspbridge/dbc.h> - - /* ----------------------------------- OS Adaptation Layer */ --#include <dspbridge/list.h> - #include <dspbridge/sync.h> - - /* ----------------------------------- Platform Manager */ -@@ -73,9 +73,9 @@ struct cmm_allocator { /* sma */ - u32 ul_dsp_size; /* DSP seg size in bytes */ - struct cmm_object *hcmm_mgr; /* back ref to parent mgr */ - /* node list of available memory */ -- struct lst_list *free_list_head; -+ struct list_head free_list; - /* node list of memory in use */ -- struct lst_list *in_use_list_head; -+ struct list_head in_use_list; - }; - - struct cmm_xlator { /* Pa<->Va translator object */ -@@ -97,7 +97,7 @@ struct cmm_object { - * Cmm Lock is used to serialize access mem manager for multi-threads. - */ - struct mutex cmm_lock; /* Lock to access cmm mgr */ -- struct lst_list *node_free_list_head; /* Free list of memory nodes */ -+ struct list_head node_free_list; /* Free list of memory nodes */ - u32 ul_min_block_size; /* Min SM block; default 16 bytes */ - u32 dw_page_size; /* Memory Page size (1k/4k) */ - /* GPP SM segment ptrs */ -@@ -215,8 +215,7 @@ void *cmm_calloc_buf(struct cmm_object *hcmm_mgr, u32 usize, - pnode->client_proc = current->tgid; - - /* put our node on InUse list */ -- lst_put_tail(allocator->in_use_list_head, -- (struct list_head *)pnode); -+ list_add_tail(&pnode->link, &allocator->in_use_list); - buf_pa = (void *)pnode->dw_pa; /* physical address */ - /* clear mem */ - pbyte = (u8 *) pnode->dw_va; -@@ -265,18 +264,9 @@ int cmm_create(struct cmm_object **ph_cmm_mgr, - * MEM_ALLOC_OBJECT */ - - /* create node free list */ -- cmm_obj->node_free_list_head = -- kzalloc(sizeof(struct lst_list), -- GFP_KERNEL); -- if (cmm_obj->node_free_list_head == NULL) { -- status = -ENOMEM; -- cmm_destroy(cmm_obj, true); -- } else { -- INIT_LIST_HEAD(&cmm_obj-> -- node_free_list_head->head); -- mutex_init(&cmm_obj->cmm_lock); -- *ph_cmm_mgr = cmm_obj; -- } -+ INIT_LIST_HEAD(&cmm_obj->node_free_list); -+ mutex_init(&cmm_obj->cmm_lock); -+ *ph_cmm_mgr = cmm_obj; - } else { - status = -ENOMEM; - } -@@ -294,7 +284,7 @@ int cmm_destroy(struct cmm_object *hcmm_mgr, bool force) - struct cmm_info temp_info; - int status = 0; - s32 slot_seg; -- struct cmm_mnode *pnode; -+ struct cmm_mnode *node, *tmp; - - DBC_REQUIRE(refs > 0); - if (!hcmm_mgr) { -@@ -324,15 +314,10 @@ int cmm_destroy(struct cmm_object *hcmm_mgr, bool force) - } - } - } -- if (cmm_mgr_obj->node_free_list_head != NULL) { -- /* Free the free nodes */ -- while (!LST_IS_EMPTY(cmm_mgr_obj->node_free_list_head)) { -- pnode = (struct cmm_mnode *) -- lst_get_head(cmm_mgr_obj->node_free_list_head); -- kfree(pnode); -- } -- /* delete NodeFreeList list */ -- kfree(cmm_mgr_obj->node_free_list_head); -+ list_for_each_entry_safe(node, tmp, &cmm_mgr_obj->node_free_list, -+ link) { -+ list_del(&node->link); -+ kfree(node); - } - mutex_unlock(&cmm_mgr_obj->cmm_lock); - if (!status) { -@@ -366,7 +351,7 @@ int cmm_free_buf(struct cmm_object *hcmm_mgr, void *buf_pa, - { - struct cmm_object *cmm_mgr_obj = (struct cmm_object *)hcmm_mgr; - int status = -EFAULT; -- struct cmm_mnode *mnode_obj = NULL; -+ struct cmm_mnode *curr, *tmp; - struct cmm_allocator *allocator = NULL; - struct cmm_attrs *pattrs; - -@@ -385,22 +370,14 @@ int cmm_free_buf(struct cmm_object *hcmm_mgr, void *buf_pa, - allocator = get_allocator(cmm_mgr_obj, ul_seg_id); - if (allocator != NULL) { - mutex_lock(&cmm_mgr_obj->cmm_lock); -- mnode_obj = -- (struct cmm_mnode *)lst_first(allocator->in_use_list_head); -- while (mnode_obj) { -- if ((u32) buf_pa == mnode_obj->dw_pa) { -- /* Found it */ -- lst_remove_elem(allocator->in_use_list_head, -- (struct list_head *)mnode_obj); -- /* back to freelist */ -- add_to_free_list(allocator, mnode_obj); -- status = 0; /* all right! */ -+ list_for_each_entry_safe(curr, tmp, &allocator->in_use_list, -+ link) { -+ if (curr->dw_pa == (u32) buf_pa) { -+ list_del(&curr->link); -+ add_to_free_list(allocator, curr); -+ status = 0; - break; - } -- /* next node. */ -- mnode_obj = (struct cmm_mnode *) -- lst_next(allocator->in_use_list_head, -- (struct list_head *)mnode_obj); - } - mutex_unlock(&cmm_mgr_obj->cmm_lock); - } -@@ -443,7 +420,7 @@ int cmm_get_info(struct cmm_object *hcmm_mgr, - u32 ul_seg; - int status = 0; - struct cmm_allocator *altr; -- struct cmm_mnode *mnode_obj = NULL; -+ struct cmm_mnode *curr; - - DBC_REQUIRE(cmm_info_obj != NULL); - -@@ -478,17 +455,11 @@ int cmm_get_info(struct cmm_object *hcmm_mgr, - cmm_info_obj->seg_info[ul_seg - 1].dw_seg_base_va = - altr->dw_vm_base - altr->ul_dsp_size; - cmm_info_obj->seg_info[ul_seg - 1].ul_in_use_cnt = 0; -- mnode_obj = (struct cmm_mnode *) -- lst_first(altr->in_use_list_head); - /* Count inUse blocks */ -- while (mnode_obj) { -+ list_for_each_entry(curr, &altr->in_use_list, link) { - cmm_info_obj->ul_total_in_use_cnt++; - cmm_info_obj->seg_info[ul_seg - - 1].ul_in_use_cnt++; -- /* next node. */ -- mnode_obj = (struct cmm_mnode *) -- lst_next(altr->in_use_list_head, -- (struct list_head *)mnode_obj); - } - } - } /* end for */ -@@ -578,30 +549,17 @@ int cmm_register_gppsm_seg(struct cmm_object *hcmm_mgr, - /* return the actual segment identifier */ - *sgmt_id = (u32) slot_seg + 1; - /* create memory free list */ -- psma->free_list_head = kzalloc(sizeof(struct lst_list), -- GFP_KERNEL); -- if (psma->free_list_head == NULL) { -- status = -ENOMEM; -- goto func_end; -- } -- INIT_LIST_HEAD(&psma->free_list_head->head); -+ INIT_LIST_HEAD(&psma->free_list); - - /* create memory in-use list */ -- psma->in_use_list_head = kzalloc(sizeof(struct -- lst_list), GFP_KERNEL); -- if (psma->in_use_list_head == NULL) { -- status = -ENOMEM; -- goto func_end; -- } -- INIT_LIST_HEAD(&psma->in_use_list_head->head); -+ INIT_LIST_HEAD(&psma->in_use_list); - - /* Get a mem node for this hunk-o-memory */ - new_node = get_node(cmm_mgr_obj, dw_gpp_base_pa, - psma->dw_vm_base, ul_size); - /* Place node on the SM allocator's free list */ - if (new_node) { -- lst_put_tail(psma->free_list_head, -- (struct list_head *)new_node); -+ list_add_tail(&new_node->link, &psma->free_list); - } else { - status = -ENOMEM; - goto func_end; -@@ -680,41 +638,22 @@ int cmm_un_register_gppsm_seg(struct cmm_object *hcmm_mgr, - */ - static void un_register_gppsm_seg(struct cmm_allocator *psma) - { -- struct cmm_mnode *mnode_obj = NULL; -- struct cmm_mnode *next_node = NULL; -+ struct cmm_mnode *curr, *tmp; - - DBC_REQUIRE(psma != NULL); -- if (psma->free_list_head != NULL) { -- /* free nodes on free list */ -- mnode_obj = (struct cmm_mnode *)lst_first(psma->free_list_head); -- while (mnode_obj) { -- next_node = -- (struct cmm_mnode *)lst_next(psma->free_list_head, -- (struct list_head *) -- mnode_obj); -- lst_remove_elem(psma->free_list_head, -- (struct list_head *)mnode_obj); -- kfree((void *)mnode_obj); -- /* next node. */ -- mnode_obj = next_node; -- } -- kfree(psma->free_list_head); /* delete freelist */ -- /* free nodes on InUse list */ -- mnode_obj = -- (struct cmm_mnode *)lst_first(psma->in_use_list_head); -- while (mnode_obj) { -- next_node = -- (struct cmm_mnode *)lst_next(psma->in_use_list_head, -- (struct list_head *) -- mnode_obj); -- lst_remove_elem(psma->in_use_list_head, -- (struct list_head *)mnode_obj); -- kfree((void *)mnode_obj); -- /* next node. */ -- mnode_obj = next_node; -- } -- kfree(psma->in_use_list_head); /* delete InUse list */ -+ -+ /* free nodes on free list */ -+ list_for_each_entry_safe(curr, tmp, &psma->free_list, link) { -+ list_del(&curr->link); -+ kfree(curr); - } -+ -+ /* free nodes on InUse list */ -+ list_for_each_entry_safe(curr, tmp, &psma->in_use_list, link) { -+ list_del(&curr->link); -+ kfree(curr); -+ } -+ - if ((void *)psma->dw_vm_base != NULL) - MEM_UNMAP_LINEAR_ADDRESS((void *)psma->dw_vm_base); - -@@ -758,15 +697,15 @@ static struct cmm_mnode *get_node(struct cmm_object *cmm_mgr_obj, u32 dw_pa, - DBC_REQUIRE(dw_va != 0); - DBC_REQUIRE(ul_size != 0); - /* Check cmm mgr's node freelist */ -- if (LST_IS_EMPTY(cmm_mgr_obj->node_free_list_head)) { -+ if (list_empty(&cmm_mgr_obj->node_free_list)) { - pnode = kzalloc(sizeof(struct cmm_mnode), GFP_KERNEL); - } else { - /* surely a valid element */ -- pnode = (struct cmm_mnode *) -- lst_get_head(cmm_mgr_obj->node_free_list_head); -+ pnode = list_first_entry(&cmm_mgr_obj->node_free_list, -+ struct cmm_mnode, link); -+ list_del(&pnode->link); - } - if (pnode) { -- lst_init_elem((struct list_head *)pnode); /* set self */ - pnode->dw_pa = dw_pa; /* Physical addr of start of block */ - pnode->dw_va = dw_va; /* Virtual " " */ - pnode->ul_size = ul_size; /* Size of block */ -@@ -783,9 +722,7 @@ static struct cmm_mnode *get_node(struct cmm_object *cmm_mgr_obj, u32 dw_pa, - static void delete_node(struct cmm_object *cmm_mgr_obj, struct cmm_mnode *pnode) - { - DBC_REQUIRE(pnode != NULL); -- lst_init_elem((struct list_head *)pnode); /* init .self ptr */ -- lst_put_tail(cmm_mgr_obj->node_free_list_head, -- (struct list_head *)pnode); -+ list_add_tail(&pnode->link, &cmm_mgr_obj->node_free_list); - } - - /* -@@ -797,28 +734,26 @@ static void delete_node(struct cmm_object *cmm_mgr_obj, struct cmm_mnode *pnode) - static struct cmm_mnode *get_free_block(struct cmm_allocator *allocator, - u32 usize) - { -- if (allocator) { -- struct cmm_mnode *mnode_obj = (struct cmm_mnode *) -- lst_first(allocator->free_list_head); -- while (mnode_obj) { -- if (usize <= (u32) mnode_obj->ul_size) { -- lst_remove_elem(allocator->free_list_head, -- (struct list_head *)mnode_obj); -- return mnode_obj; -- } -- /* next node. */ -- mnode_obj = (struct cmm_mnode *) -- lst_next(allocator->free_list_head, -- (struct list_head *)mnode_obj); -+ struct cmm_mnode *node, *tmp; -+ -+ if (!allocator) -+ return NULL; -+ -+ list_for_each_entry_safe(node, tmp, &allocator->free_list, link) { -+ if (usize <= (u32) node->ul_size) { -+ list_del(&node->link); -+ return node; - } -+ - } -+ - return NULL; - } - - /* - * ======== add_to_free_list ======== - * Purpose: -- * Coelesce node into the freelist in ascending size order. -+ * Coalesce node into the freelist in ascending size order. - */ - static void add_to_free_list(struct cmm_allocator *allocator, - struct cmm_mnode *pnode) -@@ -829,71 +764,51 @@ static void add_to_free_list(struct cmm_allocator *allocator, - u32 dw_this_pa; - u32 dw_next_pa; - -- DBC_REQUIRE(pnode != NULL); -- DBC_REQUIRE(allocator != NULL); -+ if (!pnode) { -+ pr_err("%s: failed - pnode is NULL\n", __func__); -+ return; -+ } -+ - dw_this_pa = pnode->dw_pa; - dw_next_pa = NEXT_PA(pnode); -- mnode_obj = (struct cmm_mnode *)lst_first(allocator->free_list_head); -- while (mnode_obj) { -+ list_for_each_entry(mnode_obj, &allocator->free_list, link) { - if (dw_this_pa == NEXT_PA(mnode_obj)) { - /* found the block ahead of this one */ - node_prev = mnode_obj; - } else if (dw_next_pa == mnode_obj->dw_pa) { - node_next = mnode_obj; - } -- if ((node_prev == NULL) || (node_next == NULL)) { -- /* next node. */ -- mnode_obj = (struct cmm_mnode *) -- lst_next(allocator->free_list_head, -- (struct list_head *)mnode_obj); -- } else { -- /* got 'em */ -+ if ((node_prev != NULL) && (node_next != NULL)) - break; -- } -- } /* while */ -+ } - if (node_prev != NULL) { - /* combine with previous block */ -- lst_remove_elem(allocator->free_list_head, -- (struct list_head *)node_prev); -+ list_del(&node_prev->link); - /* grow node to hold both */ - pnode->ul_size += node_prev->ul_size; - pnode->dw_pa = node_prev->dw_pa; - pnode->dw_va = node_prev->dw_va; - /* place node on mgr nodeFreeList */ -- delete_node((struct cmm_object *)allocator->hcmm_mgr, -- node_prev); -+ delete_node(allocator->hcmm_mgr, node_prev); - } - if (node_next != NULL) { - /* combine with next block */ -- lst_remove_elem(allocator->free_list_head, -- (struct list_head *)node_next); -+ list_del(&node_next->link); - /* grow da node */ - pnode->ul_size += node_next->ul_size; - /* place node on mgr nodeFreeList */ -- delete_node((struct cmm_object *)allocator->hcmm_mgr, -- node_next); -+ delete_node(allocator->hcmm_mgr, node_next); - } - /* Now, let's add to freelist in increasing size order */ -- mnode_obj = (struct cmm_mnode *)lst_first(allocator->free_list_head); -- while (mnode_obj) { -- if (pnode->ul_size <= mnode_obj->ul_size) -- break; -- -- /* next node. */ -- mnode_obj = -- (struct cmm_mnode *)lst_next(allocator->free_list_head, -- (struct list_head *)mnode_obj); -- } -- /* if mnode_obj is NULL then add our pnode to the end of the freelist */ -- if (mnode_obj == NULL) { -- lst_put_tail(allocator->free_list_head, -- (struct list_head *)pnode); -- } else { -- /* insert our node before the current traversed node */ -- lst_insert_before(allocator->free_list_head, -- (struct list_head *)pnode, -- (struct list_head *)mnode_obj); -+ list_for_each_entry(mnode_obj, &allocator->free_list, link) { -+ if (pnode->ul_size <= mnode_obj->ul_size) { -+ /* insert our node before the current traversed node */ -+ list_add_tail(&pnode->link, &mnode_obj->link); -+ return; -+ } - } -+ /* add our pnode to the end of the freelist */ -+ list_add_tail(&pnode->link, &allocator->free_list); - } - - /* -diff --git a/drivers/staging/tidspbridge/pmgr/dev.c b/drivers/staging/tidspbridge/pmgr/dev.c -index 132e960..6ce3493 100644 ---- a/drivers/staging/tidspbridge/pmgr/dev.c -+++ b/drivers/staging/tidspbridge/pmgr/dev.c -@@ -16,6 +16,7 @@ - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - #include <linux/types.h> -+#include <linux/list.h> - - /* ----------------------------------- Host OS */ - #include <dspbridge/host_os.h> -@@ -28,7 +29,6 @@ - - /* ----------------------------------- OS Adaptation Layer */ - #include <dspbridge/ldr.h> --#include <dspbridge/list.h> - - /* ----------------------------------- Platform Manager */ - #include <dspbridge/cod.h> -@@ -60,7 +60,6 @@ - - /* The Bridge device object: */ - struct dev_object { -- /* LST requires "link" to be first field! */ - struct list_head link; /* Link to next dev_object. */ - u8 dev_type; /* Device Type */ - struct cfg_devnode *dev_node_obj; /* Platform specific dev id */ -@@ -79,7 +78,7 @@ struct dev_object { - struct ldr_module *module_obj; /* Bridge Module handle. */ - u32 word_size; /* DSP word size: quick access. */ - struct drv_object *hdrv_obj; /* Driver Object */ -- struct lst_list *proc_list; /* List of Proceeosr attached to -+ struct list_head proc_list; /* List of Processor attached to - * this device */ - struct node_mgr *hnode_mgr; - }; -@@ -255,19 +254,12 @@ int dev_create_device(struct dev_object **device_obj, - (struct dev_object *)dev_obj, NULL); - } - /* Add the new DEV_Object to the global list: */ -- if (!status) { -- lst_init_elem(&dev_obj->link); -+ if (!status) - status = drv_insert_dev_object(hdrv_obj, dev_obj); -- } -+ - /* Create the Processor List */ -- if (!status) { -- dev_obj->proc_list = kzalloc(sizeof(struct lst_list), -- GFP_KERNEL); -- if (!(dev_obj->proc_list)) -- status = -EPERM; -- else -- INIT_LIST_HEAD(&dev_obj->proc_list->head); -- } -+ if (!status) -+ INIT_LIST_HEAD(&dev_obj->proc_list); - leave: - /* If all went well, return a handle to the dev object; - * else, cleanup and return NULL in the OUT parameter. */ -@@ -275,7 +267,6 @@ leave: - *device_obj = dev_obj; - } else { - if (dev_obj) { -- kfree(dev_obj->proc_list); - if (dev_obj->cod_mgr) - cod_delete(dev_obj->cod_mgr); - if (dev_obj->dmm_mgr) -@@ -403,9 +394,6 @@ int dev_destroy_device(struct dev_object *hdev_obj) - } else - status = -EPERM; - if (!status) { -- kfree(dev_obj->proc_list); -- dev_obj->proc_list = NULL; -- - /* Remove this DEV_Object from the global list: */ - drv_remove_dev_object(dev_obj->hdrv_obj, dev_obj); - /* Free The library * LDR_FreeModule -@@ -801,18 +789,17 @@ bool dev_init(void) - */ - int dev_notify_clients(struct dev_object *hdev_obj, u32 ret) - { -- int status = 0; -- - struct dev_object *dev_obj = hdev_obj; -- void *proc_obj; -+ struct list_head *curr; - -- for (proc_obj = (void *)lst_first(dev_obj->proc_list); -- proc_obj != NULL; -- proc_obj = (void *)lst_next(dev_obj->proc_list, -- (struct list_head *)proc_obj)) -- proc_notify_clients(proc_obj, (u32) ret); -+ /* -+ * FIXME: this code needs struct proc_object to have a list_head -+ * at the begining. If not, this can go horribly wrong. -+ */ -+ list_for_each(curr, &dev_obj->proc_list) -+ proc_notify_clients((void *)curr, (u32) ret); - -- return status; -+ return 0; - } - - /* -@@ -1000,15 +987,18 @@ int dev_insert_proc_object(struct dev_object *hdev_obj, - DBC_REQUIRE(refs > 0); - DBC_REQUIRE(dev_obj); - DBC_REQUIRE(proc_obj != 0); -- DBC_REQUIRE(dev_obj->proc_list != NULL); - DBC_REQUIRE(already_attached != NULL); -- if (!LST_IS_EMPTY(dev_obj->proc_list)) -+ if (!list_empty(&dev_obj->proc_list)) - *already_attached = true; - - /* Add DevObject to tail. */ -- lst_put_tail(dev_obj->proc_list, (struct list_head *)proc_obj); -+ /* -+ * FIXME: this code needs struct proc_object to have a list_head -+ * at the begining. If not, this can go horribly wrong. -+ */ -+ list_add_tail((struct list_head *)proc_obj, &dev_obj->proc_list); - -- DBC_ENSURE(!status && !LST_IS_EMPTY(dev_obj->proc_list)); -+ DBC_ENSURE(!status && !list_empty(&dev_obj->proc_list)); - - return status; - } -@@ -1039,15 +1029,12 @@ int dev_remove_proc_object(struct dev_object *hdev_obj, u32 proc_obj) - - DBC_REQUIRE(dev_obj); - DBC_REQUIRE(proc_obj != 0); -- DBC_REQUIRE(dev_obj->proc_list != NULL); -- DBC_REQUIRE(!LST_IS_EMPTY(dev_obj->proc_list)); -+ DBC_REQUIRE(!list_empty(&dev_obj->proc_list)); - - /* Search list for dev_obj: */ -- for (cur_elem = lst_first(dev_obj->proc_list); cur_elem != NULL; -- cur_elem = lst_next(dev_obj->proc_list, cur_elem)) { -- /* If found, remove it. */ -+ list_for_each(cur_elem, &dev_obj->proc_list) { - if ((u32) cur_elem == proc_obj) { -- lst_remove_elem(dev_obj->proc_list, cur_elem); -+ list_del(cur_elem); - status = 0; - break; - } --- -1.7.1 - diff --git a/patches/dspbridge/0013-staging-tidspbridge-convert-rmgr-to-list_head.patch b/patches/dspbridge/0013-staging-tidspbridge-convert-rmgr-to-list_head.patch deleted file mode 100644 index cfe2dc4097fd5aebc7ae6bfad93bd3624a9c5eb5..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0013-staging-tidspbridge-convert-rmgr-to-list_head.patch +++ /dev/null @@ -1,625 +0,0 @@ -From 822ec7bac3c8720ea903ba0c9ff7a90f7c4250c3 Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@mindbit.ro> -Date: Sun, 21 Nov 2010 10:46:26 +0000 -Subject: [PATCH 13/25] staging: tidspbridge: convert rmgr to list_head - -Convert the rmgr module of the tidspbridge driver -to use struct list_head instead of struct lst_list. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/rmgr/drv.c | 115 ++++++++---------------------- - drivers/staging/tidspbridge/rmgr/node.c | 50 ++++--------- - drivers/staging/tidspbridge/rmgr/proc.c | 2 - - drivers/staging/tidspbridge/rmgr/rmm.c | 75 +++++++------------- - 4 files changed, 72 insertions(+), 170 deletions(-) - -diff --git a/drivers/staging/tidspbridge/rmgr/drv.c b/drivers/staging/tidspbridge/rmgr/drv.c -index c50579c..e0fc895 100644 ---- a/drivers/staging/tidspbridge/rmgr/drv.c -+++ b/drivers/staging/tidspbridge/rmgr/drv.c -@@ -16,6 +16,7 @@ - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - #include <linux/types.h> -+#include <linux/list.h> - - /* ----------------------------------- Host OS */ - #include <dspbridge/host_os.h> -@@ -26,9 +27,6 @@ - /* ----------------------------------- Trace & Debug */ - #include <dspbridge/dbc.h> - --/* ----------------------------------- OS Adaptation Layer */ --#include <dspbridge/list.h> -- - /* ----------------------------------- This */ - #include <dspbridge/drv.h> - #include <dspbridge/dev.h> -@@ -42,8 +40,8 @@ - - /* ----------------------------------- Defines, Data Structures, Typedefs */ - struct drv_object { -- struct lst_list *dev_list; -- struct lst_list *dev_node_string; -+ struct list_head dev_list; -+ struct list_head dev_node_string; - }; - - /* -@@ -316,22 +314,8 @@ int drv_create(struct drv_object **drv_obj) - pdrv_object = kzalloc(sizeof(struct drv_object), GFP_KERNEL); - if (pdrv_object) { - /* Create and Initialize List of device objects */ -- pdrv_object->dev_list = kzalloc(sizeof(struct lst_list), -- GFP_KERNEL); -- if (pdrv_object->dev_list) { -- /* Create and Initialize List of device Extension */ -- pdrv_object->dev_node_string = -- kzalloc(sizeof(struct lst_list), GFP_KERNEL); -- if (!(pdrv_object->dev_node_string)) { -- status = -EPERM; -- } else { -- INIT_LIST_HEAD(&pdrv_object-> -- dev_node_string->head); -- INIT_LIST_HEAD(&pdrv_object->dev_list->head); -- } -- } else { -- status = -ENOMEM; -- } -+ INIT_LIST_HEAD(&pdrv_object->dev_list); -+ INIT_LIST_HEAD(&pdrv_object->dev_node_string); - } else { - status = -ENOMEM; - } -@@ -348,8 +332,6 @@ int drv_create(struct drv_object **drv_obj) - if (!status) { - *drv_obj = pdrv_object; - } else { -- kfree(pdrv_object->dev_list); -- kfree(pdrv_object->dev_node_string); - /* Free the DRV Object */ - kfree(pdrv_object); - } -@@ -386,13 +368,6 @@ int drv_destroy(struct drv_object *driver_obj) - DBC_REQUIRE(refs > 0); - DBC_REQUIRE(pdrv_object); - -- /* -- * Delete the List if it exists.Should not come here -- * as the drv_remove_dev_object and the Last drv_request_resources -- * removes the list if the lists are empty. -- */ -- kfree(pdrv_object->dev_list); -- kfree(pdrv_object->dev_node_string); - kfree(pdrv_object); - /* Update the DRV Object in the driver data */ - if (drv_datap) { -@@ -424,7 +399,7 @@ int drv_get_dev_object(u32 index, struct drv_object *hdrv_obj, - DBC_REQUIRE(device_obj != NULL); - DBC_REQUIRE(index >= 0); - DBC_REQUIRE(refs > 0); -- DBC_ASSERT(!(LST_IS_EMPTY(pdrv_obj->dev_list))); -+ DBC_ASSERT(!(list_empty(&pdrv_obj->dev_list))); - - dev_obj = (struct dev_object *)drv_get_first_dev_object(); - for (i = 0; i < index; i++) { -@@ -455,9 +430,8 @@ u32 drv_get_first_dev_object(void) - - if (drv_datap && drv_datap->drv_object) { - pdrv_obj = drv_datap->drv_object; -- if ((pdrv_obj->dev_list != NULL) && -- !LST_IS_EMPTY(pdrv_obj->dev_list)) -- dw_dev_object = (u32) lst_first(pdrv_obj->dev_list); -+ if (!list_empty(&pdrv_obj->dev_list)) -+ dw_dev_object = (u32) pdrv_obj->dev_list.next; - } else { - pr_err("%s: Failed to retrieve the object handle\n", __func__); - } -@@ -479,10 +453,9 @@ u32 drv_get_first_dev_extension(void) - - if (drv_datap && drv_datap->drv_object) { - pdrv_obj = drv_datap->drv_object; -- if ((pdrv_obj->dev_node_string != NULL) && -- !LST_IS_EMPTY(pdrv_obj->dev_node_string)) { -+ if (!list_empty(&pdrv_obj->dev_node_string)) { - dw_dev_extension = -- (u32) lst_first(pdrv_obj->dev_node_string); -+ (u32) pdrv_obj->dev_node_string.next; - } - } else { - pr_err("%s: Failed to retrieve the object handle\n", __func__); -@@ -503,16 +476,15 @@ u32 drv_get_next_dev_object(u32 hdev_obj) - u32 dw_next_dev_object = 0; - struct drv_object *pdrv_obj; - struct drv_data *drv_datap = dev_get_drvdata(bridge); -- -- DBC_REQUIRE(hdev_obj != 0); -+ struct list_head *curr; - - if (drv_datap && drv_datap->drv_object) { - pdrv_obj = drv_datap->drv_object; -- if ((pdrv_obj->dev_list != NULL) && -- !LST_IS_EMPTY(pdrv_obj->dev_list)) { -- dw_next_dev_object = (u32) lst_next(pdrv_obj->dev_list, -- (struct list_head *) -- hdev_obj); -+ if (!list_empty(&pdrv_obj->dev_list)) { -+ curr = (struct list_head *)hdev_obj; -+ if (list_is_last(curr, &pdrv_obj->dev_list)) -+ return 0; -+ dw_next_dev_object = (u32) curr->next; - } - } else { - pr_err("%s: Failed to retrieve the object handle\n", __func__); -@@ -534,16 +506,15 @@ u32 drv_get_next_dev_extension(u32 dev_extension) - u32 dw_dev_extension = 0; - struct drv_object *pdrv_obj; - struct drv_data *drv_datap = dev_get_drvdata(bridge); -- -- DBC_REQUIRE(dev_extension != 0); -+ struct list_head *curr; - - if (drv_datap && drv_datap->drv_object) { - pdrv_obj = drv_datap->drv_object; -- if ((pdrv_obj->dev_node_string != NULL) && -- !LST_IS_EMPTY(pdrv_obj->dev_node_string)) { -- dw_dev_extension = -- (u32) lst_next(pdrv_obj->dev_node_string, -- (struct list_head *)dev_extension); -+ if (!list_empty(&pdrv_obj->dev_node_string)) { -+ curr = (struct list_head *)dev_extension; -+ if (list_is_last(curr, &pdrv_obj->dev_node_string)) -+ return 0; -+ dw_dev_extension = (u32) curr->next; - } - } else { - pr_err("%s: Failed to retrieve the object handle\n", __func__); -@@ -584,11 +555,8 @@ int drv_insert_dev_object(struct drv_object *driver_obj, - DBC_REQUIRE(refs > 0); - DBC_REQUIRE(hdev_obj != NULL); - DBC_REQUIRE(pdrv_object); -- DBC_ASSERT(pdrv_object->dev_list); -- -- lst_put_tail(pdrv_object->dev_list, (struct list_head *)hdev_obj); - -- DBC_ENSURE(!LST_IS_EMPTY(pdrv_object->dev_list)); -+ list_add_tail((struct list_head *)hdev_obj, &pdrv_object->dev_list); - - return 0; - } -@@ -610,26 +578,17 @@ int drv_remove_dev_object(struct drv_object *driver_obj, - DBC_REQUIRE(pdrv_object); - DBC_REQUIRE(hdev_obj != NULL); - -- DBC_REQUIRE(pdrv_object->dev_list != NULL); -- DBC_REQUIRE(!LST_IS_EMPTY(pdrv_object->dev_list)); -+ DBC_REQUIRE(!list_empty(&pdrv_object->dev_list)); - - /* Search list for p_proc_object: */ -- for (cur_elem = lst_first(pdrv_object->dev_list); cur_elem != NULL; -- cur_elem = lst_next(pdrv_object->dev_list, cur_elem)) { -+ list_for_each(cur_elem, &pdrv_object->dev_list) { - /* If found, remove it. */ - if ((struct dev_object *)cur_elem == hdev_obj) { -- lst_remove_elem(pdrv_object->dev_list, cur_elem); -+ list_del(cur_elem); - status = 0; - break; - } - } -- /* Remove list if empty. */ -- if (LST_IS_EMPTY(pdrv_object->dev_list)) { -- kfree(pdrv_object->dev_list); -- pdrv_object->dev_list = NULL; -- } -- DBC_ENSURE((pdrv_object->dev_list == NULL) || -- !LST_IS_EMPTY(pdrv_object->dev_list)); - - return status; - } -@@ -663,14 +622,13 @@ int drv_request_resources(u32 dw_context, u32 *dev_node_strg) - if (!status) { - pszdev_node = kzalloc(sizeof(struct drv_ext), GFP_KERNEL); - if (pszdev_node) { -- lst_init_elem(&pszdev_node->link); - strncpy(pszdev_node->sz_string, - (char *)dw_context, MAXREGPATHLENGTH - 1); - pszdev_node->sz_string[MAXREGPATHLENGTH - 1] = '\0'; - /* Update the Driver Object List */ - *dev_node_strg = (u32) pszdev_node->sz_string; -- lst_put_tail(pdrv_object->dev_node_string, -- (struct list_head *)pszdev_node); -+ list_add_tail(&pszdev_node->link, -+ &pdrv_object->dev_node_string); - } else { - status = -ENOMEM; - *dev_node_strg = 0; -@@ -682,7 +640,7 @@ int drv_request_resources(u32 dw_context, u32 *dev_node_strg) - } - - DBC_ENSURE((!status && dev_node_strg != NULL && -- !LST_IS_EMPTY(pdrv_object->dev_node_string)) || -+ !list_empty(&pdrv_object->dev_node_string)) || - (status && *dev_node_strg == 0)); - - return status; -@@ -696,7 +654,6 @@ int drv_request_resources(u32 dw_context, u32 *dev_node_strg) - int drv_release_resources(u32 dw_context, struct drv_object *hdrv_obj) - { - int status = 0; -- struct drv_object *pdrv_object = (struct drv_object *)hdrv_obj; - struct drv_ext *pszdev_node; - - /* -@@ -706,23 +663,13 @@ int drv_release_resources(u32 dw_context, struct drv_object *hdrv_obj) - for (pszdev_node = (struct drv_ext *)drv_get_first_dev_extension(); - pszdev_node != NULL; pszdev_node = (struct drv_ext *) - drv_get_next_dev_extension((u32) pszdev_node)) { -- if (!pdrv_object->dev_node_string) { -- /* When this could happen? */ -- continue; -- } - if ((u32) pszdev_node == dw_context) { - /* Found it */ - /* Delete from the Driver object list */ -- lst_remove_elem(pdrv_object->dev_node_string, -- (struct list_head *)pszdev_node); -- kfree((void *)pszdev_node); -+ list_del(&pszdev_node->link); -+ kfree(pszdev_node); - break; - } -- /* Delete the List if it is empty */ -- if (LST_IS_EMPTY(pdrv_object->dev_node_string)) { -- kfree(pdrv_object->dev_node_string); -- pdrv_object->dev_node_string = NULL; -- } - } - return status; - } -diff --git a/drivers/staging/tidspbridge/rmgr/node.c b/drivers/staging/tidspbridge/rmgr/node.c -index ab35806..62d5c31 100644 ---- a/drivers/staging/tidspbridge/rmgr/node.c -+++ b/drivers/staging/tidspbridge/rmgr/node.c -@@ -18,6 +18,8 @@ - - #include <linux/types.h> - #include <linux/bitmap.h> -+#include <linux/list.h> -+ - /* ----------------------------------- Host OS */ - #include <dspbridge/host_os.h> - -@@ -28,7 +30,6 @@ - #include <dspbridge/dbc.h> - - /* ----------------------------------- OS Adaptation Layer */ --#include <dspbridge/list.h> - #include <dspbridge/memdefs.h> - #include <dspbridge/proc.h> - #include <dspbridge/strm.h> -@@ -129,7 +130,7 @@ struct node_mgr { - struct bridge_drv_interface *intf_fxns; - struct dcd_manager *hdcd_mgr; /* Proc/Node data manager */ - struct disp_object *disp_obj; /* Node dispatcher */ -- struct lst_list *node_list; /* List of all allocated nodes */ -+ struct list_head node_list; /* List of all allocated nodes */ - u32 num_nodes; /* Number of nodes in node_list */ - u32 num_created; /* Number of nodes *created* on DSP */ - DECLARE_BITMAP(pipe_map, MAXPIPES); /* Pipe connection bitmap */ -@@ -640,13 +641,12 @@ func_cont: - if (!status) { - /* Add the node to the node manager's list of allocated - * nodes. */ -- lst_init_elem((struct list_head *)pnode); - NODE_SET_STATE(pnode, NODE_ALLOCATED); - - mutex_lock(&hnode_mgr->node_mgr_lock); - -- lst_put_tail(hnode_mgr->node_list, (struct list_head *) pnode); -- ++(hnode_mgr->num_nodes); -+ list_add_tail(&pnode->list_elem, &hnode_mgr->node_list); -+ ++(hnode_mgr->num_nodes); - - /* Exit critical section */ - mutex_unlock(&hnode_mgr->node_mgr_lock); -@@ -1338,9 +1338,7 @@ int node_create_mgr(struct node_mgr **node_man, - node_mgr_obj = kzalloc(sizeof(struct node_mgr), GFP_KERNEL); - if (node_mgr_obj) { - node_mgr_obj->hdev_obj = hdev_obj; -- node_mgr_obj->node_list = kzalloc(sizeof(struct lst_list), -- GFP_KERNEL); -- INIT_LIST_HEAD(&node_mgr_obj->node_list->head); -+ INIT_LIST_HEAD(&node_mgr_obj->node_list); - node_mgr_obj->ntfy_obj = kmalloc( - sizeof(struct ntfy_object), GFP_KERNEL); - if (node_mgr_obj->ntfy_obj) -@@ -1563,7 +1561,7 @@ func_cont1: - } - /* Free host side resources even if a failure occurred */ - /* Remove node from hnode_mgr->node_list */ -- lst_remove_elem(hnode_mgr->node_list, (struct list_head *)pnode); -+ list_del(&pnode->list_elem); - hnode_mgr->num_nodes--; - /* Decrement count of nodes created on DSP */ - if ((state != NODE_ALLOCATED) || ((state == NODE_ALLOCATED) && -@@ -1617,7 +1615,7 @@ int node_enum_nodes(struct node_mgr *hnode_mgr, void **node_tab, - u32 *pu_allocated) - { - struct node_object *hnode; -- u32 i; -+ u32 i = 0; - int status = 0; - DBC_REQUIRE(refs > 0); - DBC_REQUIRE(node_tab != NULL || node_tab_size == 0); -@@ -1636,15 +1634,8 @@ int node_enum_nodes(struct node_mgr *hnode_mgr, void **node_tab, - *pu_num_nodes = 0; - status = -EINVAL; - } else { -- hnode = (struct node_object *)lst_first(hnode_mgr-> -- node_list); -- for (i = 0; i < hnode_mgr->num_nodes; i++) { -- DBC_ASSERT(hnode); -- node_tab[i] = hnode; -- hnode = (struct node_object *)lst_next -- (hnode_mgr->node_list, -- (struct list_head *)hnode); -- } -+ list_for_each_entry(hnode, &hnode_mgr->node_list, list_elem) -+ node_tab[i++] = hnode; - *pu_allocated = *pu_num_nodes = hnode_mgr->num_nodes; - } - /* end of sync_enter_cs */ -@@ -2632,7 +2623,7 @@ func_end: - */ - static void delete_node_mgr(struct node_mgr *hnode_mgr) - { -- struct node_object *hnode; -+ struct node_object *hnode, *tmp; - - if (hnode_mgr) { - /* Free resources */ -@@ -2640,13 +2631,10 @@ static void delete_node_mgr(struct node_mgr *hnode_mgr) - dcd_destroy_manager(hnode_mgr->hdcd_mgr); - - /* Remove any elements remaining in lists */ -- if (hnode_mgr->node_list) { -- while ((hnode = (struct node_object *) -- lst_get_head(hnode_mgr->node_list))) -- delete_node(hnode, NULL); -- -- DBC_ASSERT(LST_IS_EMPTY(hnode_mgr->node_list)); -- kfree(hnode_mgr->node_list); -+ list_for_each_entry_safe(hnode, tmp, &hnode_mgr->node_list, -+ list_elem) { -+ list_del(&hnode->list_elem); -+ delete_node(hnode, NULL); - } - mutex_destroy(&hnode_mgr->node_mgr_lock); - if (hnode_mgr->ntfy_obj) { -@@ -3186,23 +3174,17 @@ int node_find_addr(struct node_mgr *node_mgr, u32 sym_addr, - { - struct node_object *node_obj; - int status = -ENOENT; -- u32 n; - - pr_debug("%s(0x%x, 0x%x, 0x%x, 0x%x, %s)\n", __func__, - (unsigned int) node_mgr, - sym_addr, offset_range, - (unsigned int) sym_addr_output, sym_name); - -- node_obj = (struct node_object *)(node_mgr->node_list->head.next); -- -- for (n = 0; n < node_mgr->num_nodes; n++) { -+ list_for_each_entry(node_obj, &node_mgr->node_list, list_elem) { - status = nldr_find_addr(node_obj->nldr_node_obj, sym_addr, - offset_range, sym_addr_output, sym_name); -- - if (!status) - break; -- -- node_obj = (struct node_object *) (node_obj->list_elem.next); - } - - return status; -diff --git a/drivers/staging/tidspbridge/rmgr/proc.c b/drivers/staging/tidspbridge/rmgr/proc.c -index b47d7aa..d5f6719 100644 ---- a/drivers/staging/tidspbridge/rmgr/proc.c -+++ b/drivers/staging/tidspbridge/rmgr/proc.c -@@ -29,7 +29,6 @@ - #include <dspbridge/dbc.h> - - /* ----------------------------------- OS Adaptation Layer */ --#include <dspbridge/list.h> - #include <dspbridge/ntfy.h> - #include <dspbridge/sync.h> - /* ----------------------------------- Bridge Driver */ -@@ -357,7 +356,6 @@ proc_attach(u32 processor_id, - * Return handle to this Processor Object: - * Find out if the Device is already attached to a - * Processor. If so, return AlreadyAttached status */ -- lst_init_elem(&p_proc_object->link); - status = dev_insert_proc_object(p_proc_object->hdev_obj, - (u32) p_proc_object, - &p_proc_object-> -diff --git a/drivers/staging/tidspbridge/rmgr/rmm.c b/drivers/staging/tidspbridge/rmgr/rmm.c -index 761e8f4..aae8657 100644 ---- a/drivers/staging/tidspbridge/rmgr/rmm.c -+++ b/drivers/staging/tidspbridge/rmgr/rmm.c -@@ -38,6 +38,10 @@ - */ - - #include <linux/types.h> -+#include <linux/list.h> -+ -+/* ----------------------------------- Host OS */ -+#include <dspbridge/host_os.h> - - /* ----------------------------------- DSP/BIOS Bridge */ - #include <dspbridge/dbdefs.h> -@@ -45,9 +49,6 @@ - /* ----------------------------------- Trace & Debug */ - #include <dspbridge/dbc.h> - --/* ----------------------------------- OS Adaptation Layer */ --#include <dspbridge/list.h> -- - /* ----------------------------------- This */ - #include <dspbridge/rmm.h> - -@@ -79,7 +80,7 @@ struct rmm_target_obj { - struct rmm_segment *seg_tab; - struct rmm_header **free_list; - u32 num_segs; -- struct lst_list *ovly_list; /* List of overlay memory in use */ -+ struct list_head ovly_list; /* List of overlay memory in use */ - }; - - static u32 refs; /* module reference count */ -@@ -95,8 +96,7 @@ static bool free_block(struct rmm_target_obj *target, u32 segid, u32 addr, - int rmm_alloc(struct rmm_target_obj *target, u32 segid, u32 size, - u32 align, u32 *dsp_address, bool reserve) - { -- struct rmm_ovly_sect *sect; -- struct rmm_ovly_sect *prev_sect = NULL; -+ struct rmm_ovly_sect *sect, *prev_sect = NULL; - struct rmm_ovly_sect *new_sect; - u32 addr; - int status = 0; -@@ -120,10 +120,9 @@ int rmm_alloc(struct rmm_target_obj *target, u32 segid, u32 size, - /* An overlay section - See if block is already in use. If not, - * insert into the list in ascending address size. */ - addr = *dsp_address; -- sect = (struct rmm_ovly_sect *)lst_first(target->ovly_list); - /* Find place to insert new list element. List is sorted from - * smallest to largest address. */ -- while (sect != NULL) { -+ list_for_each_entry(sect, &target->ovly_list, list_elem) { - if (addr <= sect->addr) { - /* Check for overlap with sect */ - if ((addr + size > sect->addr) || (prev_sect && -@@ -135,9 +134,6 @@ int rmm_alloc(struct rmm_target_obj *target, u32 segid, u32 size, - break; - } - prev_sect = sect; -- sect = (struct rmm_ovly_sect *)lst_next(target->ovly_list, -- (struct list_head *) -- sect); - } - if (!status) { - /* No overlap - allocate list element for new section. */ -@@ -145,20 +141,17 @@ int rmm_alloc(struct rmm_target_obj *target, u32 segid, u32 size, - if (new_sect == NULL) { - status = -ENOMEM; - } else { -- lst_init_elem((struct list_head *)new_sect); - new_sect->addr = addr; - new_sect->size = size; - new_sect->page = segid; -- if (sect == NULL) { -+ if (list_is_last(sect, &target->ovly_list)) - /* Put new section at the end of the list */ -- lst_put_tail(target->ovly_list, -- (struct list_head *)new_sect); -- } else { -+ list_add_tail(&new_sect->list_elem, -+ &target->ovly_list); -+ else - /* Put new section just before sect */ -- lst_insert_before(target->ovly_list, -- (struct list_head *)new_sect, -- (struct list_head *)sect); -- } -+ list_add_tail(&new_sect->list_elem, -+ §->list_elem); - } - } - func_end: -@@ -230,14 +223,8 @@ int rmm_create(struct rmm_target_obj **target_obj, - } - func_cont: - /* Initialize overlay memory list */ -- if (!status) { -- target->ovly_list = kzalloc(sizeof(struct lst_list), -- GFP_KERNEL); -- if (target->ovly_list == NULL) -- status = -ENOMEM; -- else -- INIT_LIST_HEAD(&target->ovly_list->head); -- } -+ if (!status) -+ INIT_LIST_HEAD(&target->ovly_list); - - if (!status) { - *target_obj = target; -@@ -259,7 +246,7 @@ func_cont: - */ - void rmm_delete(struct rmm_target_obj *target) - { -- struct rmm_ovly_sect *ovly_section; -+ struct rmm_ovly_sect *sect, *tmp; - struct rmm_header *hptr; - struct rmm_header *next; - u32 i; -@@ -268,13 +255,9 @@ void rmm_delete(struct rmm_target_obj *target) - - kfree(target->seg_tab); - -- if (target->ovly_list) { -- while ((ovly_section = (struct rmm_ovly_sect *)lst_get_head -- (target->ovly_list))) { -- kfree(ovly_section); -- } -- DBC_ASSERT(LST_IS_EMPTY(target->ovly_list)); -- kfree(target->ovly_list); -+ list_for_each_entry_safe(sect, tmp, &target->ovly_list, list_elem) { -+ list_del(§->list_elem); -+ kfree(sect); - } - - if (target->free_list != NULL) { -@@ -311,8 +294,8 @@ void rmm_exit(void) - bool rmm_free(struct rmm_target_obj *target, u32 segid, u32 dsp_addr, u32 size, - bool reserved) - { -- struct rmm_ovly_sect *sect; -- bool ret = true; -+ struct rmm_ovly_sect *sect, *tmp; -+ bool ret = false; - - DBC_REQUIRE(target); - -@@ -333,24 +316,16 @@ bool rmm_free(struct rmm_target_obj *target, u32 segid, u32 dsp_addr, u32 size, - - } else { - /* Unreserve memory */ -- sect = (struct rmm_ovly_sect *)lst_first(target->ovly_list); -- while (sect != NULL) { -+ list_for_each_entry_safe(sect, tmp, &target->ovly_list, -+ list_elem) { - if (dsp_addr == sect->addr) { - DBC_ASSERT(size == sect->size); - /* Remove from list */ -- lst_remove_elem(target->ovly_list, -- (struct list_head *)sect); -+ list_del(§->list_elem); - kfree(sect); -- break; -+ return true; - } -- sect = -- (struct rmm_ovly_sect *)lst_next(target->ovly_list, -- (struct list_head -- *)sect); - } -- if (sect == NULL) -- ret = false; -- - } - return ret; - } --- -1.7.1 - diff --git a/patches/dspbridge/0014-staging-tidspbridge-remove-custom-linked-list.patch b/patches/dspbridge/0014-staging-tidspbridge-remove-custom-linked-list.patch deleted file mode 100644 index 5a950feca97d67eb906afae11624d3b4e8220a89..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0014-staging-tidspbridge-remove-custom-linked-list.patch +++ /dev/null @@ -1,263 +0,0 @@ -From 16e734601f562d65fd5105c19b06369d33aeada9 Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Sun, 21 Nov 2010 10:46:27 +0000 -Subject: [PATCH 14/25] staging: tidspbridge: remove custom linked list - -Now that all users of lst_list have been converted to the -standard linux list_head API, we can remove the associated -header file. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/TODO | 1 - - .../staging/tidspbridge/include/dspbridge/list.h | 225 -------------------- - 2 files changed, 0 insertions(+), 226 deletions(-) - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/list.h - -diff --git a/drivers/staging/tidspbridge/TODO b/drivers/staging/tidspbridge/TODO -index 187363f..1c51e2d 100644 ---- a/drivers/staging/tidspbridge/TODO -+++ b/drivers/staging/tidspbridge/TODO -@@ -6,7 +6,6 @@ - * Eliminate general services and libraries - use or extend existing kernel - libraries instead (e.g. gcf/lcm in nldr.c, global helpers in gen/) - * Eliminate direct manipulation of OMAP_SYSC_BASE --* Eliminate list.h : seem like a redundant wrapper to existing kernel lists - * Eliminate DSP_SUCCEEDED macros and their imposed redundant indentations - (adopt the kernel way of checking for return values) - * Audit interfaces exposed to user space -diff --git a/drivers/staging/tidspbridge/include/dspbridge/list.h b/drivers/staging/tidspbridge/include/dspbridge/list.h -deleted file mode 100644 -index 6837b61..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/list.h -+++ /dev/null -@@ -1,225 +0,0 @@ --/* -- * list.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Declarations of list management control structures and definitions -- * of inline list management functions. -- * -- * Copyright (C) 2008 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef LIST_ --#define LIST_ -- --#include <dspbridge/host_os.h> --#include <linux/list.h> -- --#define LST_IS_EMPTY(l) list_empty(&(l)->head) -- --struct lst_list { -- struct list_head head; --}; -- --/* -- * ======== lst_first ======== -- * Purpose: -- * Returns a pointer to the first element of the list, or NULL if the list -- * is empty. -- * Parameters: -- * lst: Pointer to list control structure. -- * Returns: -- * Pointer to first list element, or NULL. -- * Requires: -- * - LST initialized. -- * - lst != NULL. -- * Ensures: -- */ --static inline struct list_head *lst_first(struct lst_list *lst) --{ -- if (lst && !list_empty(&lst->head)) -- return lst->head.next; -- return NULL; --} -- --/* -- * ======== lst_get_head ======== -- * Purpose: -- * Pops the head off the list and returns a pointer to it. -- * Details: -- * If the list is empty, returns NULL. -- * Else, removes the element at the head of the list, making the next -- * element the head of the list. -- * The head is removed by making the tail element of the list point its -- * "next" pointer at the next element after the head, and by making the -- * "prev" pointer of the next element after the head point at the tail -- * element. So the next element after the head becomes the new head of -- * the list. -- * Parameters: -- * lst: Pointer to list control structure of list whose head -- * element is to be removed -- * Returns: -- * Pointer to element that was at the head of the list (success) -- * NULL No elements in list -- * Requires: -- * - LST initialized. -- * - lst != NULL. -- * Ensures: -- * Notes: -- * Because the tail of the list points forward (its "next" pointer) to -- * the head of the list, and the head of the list points backward (its -- * "prev" pointer) to the tail of the list, this list is circular. -- */ --static inline struct list_head *lst_get_head(struct lst_list *lst) --{ -- struct list_head *elem_list; -- -- if (!lst || list_empty(&lst->head)) -- return NULL; -- -- elem_list = lst->head.next; -- lst->head.next = elem_list->next; -- elem_list->next->prev = &lst->head; -- -- return elem_list; --} -- --/* -- * ======== lst_init_elem ======== -- * Purpose: -- * Initializes a list element to default (cleared) values -- * Details: -- * Parameters: -- * elem_list: Pointer to list element to be reset -- * Returns: -- * Requires: -- * LST initialized. -- * Ensures: -- * Notes: -- * This function must not be called to "reset" an element in the middle -- * of a list chain -- that would break the chain. -- * -- */ --static inline void lst_init_elem(struct list_head *elem_list) --{ -- if (elem_list) { -- elem_list->next = NULL; -- elem_list->prev = NULL; -- } --} -- --/* -- * ======== lst_insert_before ======== -- * Purpose: -- * Insert the element before the existing element. -- * Parameters: -- * lst: Pointer to list control structure. -- * elem_list: Pointer to element in list to insert. -- * elem_existing: Pointer to existing list element. -- * Returns: -- * Requires: -- * - LST initialized. -- * - lst != NULL. -- * - elem_list != NULL. -- * - elem_existing != NULL. -- * Ensures: -- */ --static inline void lst_insert_before(struct lst_list *lst, -- struct list_head *elem_list, -- struct list_head *elem_existing) --{ -- if (lst && elem_list && elem_existing) -- list_add_tail(elem_list, elem_existing); --} -- --/* -- * ======== lst_next ======== -- * Purpose: -- * Returns a pointer to the next element of the list, or NULL if the next -- * element is the head of the list or the list is empty. -- * Parameters: -- * lst: Pointer to list control structure. -- * cur_elem: Pointer to element in list to remove. -- * Returns: -- * Pointer to list element, or NULL. -- * Requires: -- * - LST initialized. -- * - lst != NULL. -- * - cur_elem != NULL. -- * Ensures: -- */ --static inline struct list_head *lst_next(struct lst_list *lst, -- struct list_head *cur_elem) --{ -- if (lst && !list_empty(&lst->head) && cur_elem && -- (cur_elem->next != &lst->head)) -- return cur_elem->next; -- return NULL; --} -- --/* -- * ======== lst_put_tail ======== -- * Purpose: -- * Adds the specified element to the tail of the list -- * Details: -- * Sets new element's "prev" pointer to the address previously held by -- * the head element's prev pointer. This is the previous tail member of -- * the list. -- * Sets the new head's prev pointer to the address of the element. -- * Sets next pointer of the previous tail member of the list to point to -- * the new element (rather than the head, which it had been pointing at). -- * Sets new element's next pointer to the address of the head element. -- * Sets head's prev pointer to the address of the new element. -- * Parameters: -- * lst: Pointer to list control structure to which *elem_list will be -- * added -- * elem_list: Pointer to list element to be added -- * Returns: -- * Void -- * Requires: -- * *elem_list and *lst must both exist. -- * LST initialized. -- * Ensures: -- * Notes: -- * Because the tail is always "just before" the head of the list (the -- * tail's "next" pointer points at the head of the list, and the head's -- * "prev" pointer points at the tail of the list), the list is circular. -- */ --static inline void lst_put_tail(struct lst_list *lst, -- struct list_head *elem_list) --{ -- if (lst && elem_list) -- list_add_tail(elem_list, &lst->head); --} -- --/* -- * ======== lst_remove_elem ======== -- * Purpose: -- * Removes (unlinks) the given element from the list, if the list is not -- * empty. Does not free the list element. -- * Parameters: -- * lst: Pointer to list control structure. -- * cur_elem: Pointer to element in list to remove. -- * Returns: -- * Requires: -- * - LST initialized. -- * - lst != NULL. -- * - cur_elem != NULL. -- * Ensures: -- */ --static inline void lst_remove_elem(struct lst_list *lst, -- struct list_head *cur_elem) --{ -- if (lst && !list_empty(&lst->head) && cur_elem) -- list_del_init(cur_elem); --} -- --#endif /* LIST_ */ --- -1.7.1 - diff --git a/patches/dspbridge/0015-staging-tidspbridge-core-code-cleanup.patch b/patches/dspbridge/0015-staging-tidspbridge-core-code-cleanup.patch deleted file mode 100644 index 8444dd50cbf8695b9c048b0034dfacbd8a6d00a9..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0015-staging-tidspbridge-core-code-cleanup.patch +++ /dev/null @@ -1,1483 +0,0 @@ -From 2fa16e235088632cc48f2f69a1c57a7ebaff1ed0 Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Sun, 21 Nov 2010 10:46:28 +0000 -Subject: [PATCH 15/25] staging: tidspbridge: core code cleanup - -Reorganized some code in the core module to increase its -readability. Most of the changes reduce the code -indentation level and simplifiy the code. No functional -changes were done. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/core/chnl_sm.c | 445 +++++++++++++--------------- - drivers/staging/tidspbridge/core/io_sm.c | 192 ++++++------- - drivers/staging/tidspbridge/core/msg_sm.c | 453 +++++++++++++--------------- - 3 files changed, 499 insertions(+), 591 deletions(-) - -diff --git a/drivers/staging/tidspbridge/core/chnl_sm.c b/drivers/staging/tidspbridge/core/chnl_sm.c -index f955036..2d06bb0 100644 ---- a/drivers/staging/tidspbridge/core/chnl_sm.c -+++ b/drivers/staging/tidspbridge/core/chnl_sm.c -@@ -105,35 +105,31 @@ int bridge_chnl_add_io_req(struct chnl_object *chnl_obj, void *host_buf, - is_eos = (byte_size == 0); - - /* Validate args */ -- if (!host_buf || !pchnl) { -- status = -EFAULT; -- } else if (is_eos && CHNL_IS_INPUT(pchnl->chnl_mode)) { -- status = -EPERM; -- } else { -- /* -- * Check the channel state: only queue chirp if channel state -- * allows it. -- */ -- dw_state = pchnl->dw_state; -- if (dw_state != CHNL_STATEREADY) { -- if (dw_state & CHNL_STATECANCEL) -- status = -ECANCELED; -- else if ((dw_state & CHNL_STATEEOS) && -- CHNL_IS_OUTPUT(pchnl->chnl_mode)) -- status = -EPIPE; -- else -- /* No other possible states left */ -- DBC_ASSERT(0); -- } -+ if (!host_buf || !pchnl) -+ return -EFAULT; -+ -+ if (is_eos && CHNL_IS_INPUT(pchnl->chnl_mode)) -+ return -EPERM; -+ -+ /* -+ * Check the channel state: only queue chirp if channel state -+ * allows it. -+ */ -+ dw_state = pchnl->dw_state; -+ if (dw_state != CHNL_STATEREADY) { -+ if (dw_state & CHNL_STATECANCEL) -+ return -ECANCELED; -+ if ((dw_state & CHNL_STATEEOS) && -+ CHNL_IS_OUTPUT(pchnl->chnl_mode)) -+ return -EPIPE; -+ /* No other possible states left */ -+ DBC_ASSERT(0); - } - - dev_obj = dev_get_first(); - dev_get_bridge_context(dev_obj, &dev_ctxt); - if (!dev_ctxt) -- status = -EFAULT; -- -- if (status) -- goto func_end; -+ return -EFAULT; - - if (pchnl->chnl_type == CHNL_PCPY && pchnl->chnl_id > 1 && host_buf) { - if (!(host_buf < (void *)USERMODE_ADDR)) { -@@ -142,18 +138,16 @@ int bridge_chnl_add_io_req(struct chnl_object *chnl_obj, void *host_buf, - } - /* if addr in user mode, then copy to kernel space */ - host_sys_buf = kmalloc(buf_size, GFP_KERNEL); -- if (host_sys_buf == NULL) { -- status = -ENOMEM; -- goto func_end; -- } -+ if (host_sys_buf == NULL) -+ return -ENOMEM; -+ - if (CHNL_IS_OUTPUT(pchnl->chnl_mode)) { - status = copy_from_user(host_sys_buf, host_buf, -- buf_size); -+ buf_size); - if (status) { - kfree(host_sys_buf); - host_sys_buf = NULL; -- status = -EFAULT; -- goto func_end; -+ return -EFAULT; - } - } - } -@@ -167,66 +161,62 @@ func_cont: - omap_mbox_disable_irq(dev_ctxt->mbox, IRQ_RX); - if (pchnl->chnl_type == CHNL_PCPY) { - /* This is a processor-copy channel. */ -- if (!status && CHNL_IS_OUTPUT(pchnl->chnl_mode)) { -+ if (CHNL_IS_OUTPUT(pchnl->chnl_mode)) { - /* Check buffer size on output channels for fit. */ -- if (byte_size > -- io_buf_size(pchnl->chnl_mgr_obj->hio_mgr)) -+ if (byte_size > io_buf_size( -+ pchnl->chnl_mgr_obj->hio_mgr)) { - status = -EINVAL; -- -- } -- } -- if (!status) { -- /* Get a free chirp: */ -- if (!list_empty(&pchnl->free_packets_list)) { -- chnl_packet_obj = list_first_entry( -- &pchnl->free_packets_list, -- struct chnl_irp, link); -- list_del(&chnl_packet_obj->link); -- } else { -- status = -EIO; -+ goto out; -+ } - } -- - } -- if (!status) { -- /* Enqueue the chirp on the chnl's IORequest queue: */ -- chnl_packet_obj->host_user_buf = chnl_packet_obj->host_sys_buf = -- host_buf; -- if (pchnl->chnl_type == CHNL_PCPY && pchnl->chnl_id > 1) -- chnl_packet_obj->host_sys_buf = host_sys_buf; -- -- /* -- * Note: for dma chans dw_dsp_addr contains dsp address -- * of SM buffer. -- */ -- DBC_ASSERT(chnl_mgr_obj->word_size != 0); -- /* DSP address */ -- chnl_packet_obj->dsp_tx_addr = -- dw_dsp_addr / chnl_mgr_obj->word_size; -- chnl_packet_obj->byte_size = byte_size; -- chnl_packet_obj->buf_size = buf_size; -- /* Only valid for output channel */ -- chnl_packet_obj->dw_arg = dw_arg; -- chnl_packet_obj->status = (is_eos ? CHNL_IOCSTATEOS : -- CHNL_IOCSTATCOMPLETE); -- list_add_tail(&chnl_packet_obj->link, &pchnl->pio_requests); -- pchnl->cio_reqs++; -- DBC_ASSERT(pchnl->cio_reqs <= pchnl->chnl_packets); -- /* -- * If end of stream, update the channel state to prevent -- * more IOR's. -- */ -- if (is_eos) -- pchnl->dw_state |= CHNL_STATEEOS; - -- /* Legacy DSM Processor-Copy */ -- DBC_ASSERT(pchnl->chnl_type == CHNL_PCPY); -- /* Request IO from the DSP */ -- io_request_chnl(chnl_mgr_obj->hio_mgr, pchnl, -- (CHNL_IS_INPUT(pchnl->chnl_mode) ? IO_INPUT : -- IO_OUTPUT), &mb_val); -- sched_dpc = true; -- -- } -+ /* Get a free chirp: */ -+ if (list_empty(&pchnl->free_packets_list)) { -+ status = -EIO; -+ goto out; -+ } -+ chnl_packet_obj = list_first_entry(&pchnl->free_packets_list, -+ struct chnl_irp, link); -+ list_del(&chnl_packet_obj->link); -+ -+ /* Enqueue the chirp on the chnl's IORequest queue: */ -+ chnl_packet_obj->host_user_buf = chnl_packet_obj->host_sys_buf = -+ host_buf; -+ if (pchnl->chnl_type == CHNL_PCPY && pchnl->chnl_id > 1) -+ chnl_packet_obj->host_sys_buf = host_sys_buf; -+ -+ /* -+ * Note: for dma chans dw_dsp_addr contains dsp address -+ * of SM buffer. -+ */ -+ DBC_ASSERT(chnl_mgr_obj->word_size != 0); -+ /* DSP address */ -+ chnl_packet_obj->dsp_tx_addr = dw_dsp_addr / chnl_mgr_obj->word_size; -+ chnl_packet_obj->byte_size = byte_size; -+ chnl_packet_obj->buf_size = buf_size; -+ /* Only valid for output channel */ -+ chnl_packet_obj->dw_arg = dw_arg; -+ chnl_packet_obj->status = (is_eos ? CHNL_IOCSTATEOS : -+ CHNL_IOCSTATCOMPLETE); -+ list_add_tail(&chnl_packet_obj->link, &pchnl->pio_requests); -+ pchnl->cio_reqs++; -+ DBC_ASSERT(pchnl->cio_reqs <= pchnl->chnl_packets); -+ /* -+ * If end of stream, update the channel state to prevent -+ * more IOR's. -+ */ -+ if (is_eos) -+ pchnl->dw_state |= CHNL_STATEEOS; -+ -+ /* Legacy DSM Processor-Copy */ -+ DBC_ASSERT(pchnl->chnl_type == CHNL_PCPY); -+ /* Request IO from the DSP */ -+ io_request_chnl(chnl_mgr_obj->hio_mgr, pchnl, -+ (CHNL_IS_INPUT(pchnl->chnl_mode) ? IO_INPUT : -+ IO_OUTPUT), &mb_val); -+ sched_dpc = true; -+out: - omap_mbox_enable_irq(dev_ctxt->mbox, IRQ_RX); - spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock); - if (mb_val != 0) -@@ -236,7 +226,6 @@ func_cont: - if (sched_dpc) - iosm_schedule(chnl_mgr_obj->hio_mgr); - --func_end: - return status; - } - -@@ -251,7 +240,6 @@ func_end: - */ - int bridge_chnl_cancel_io(struct chnl_object *chnl_obj) - { -- int status = 0; - struct chnl_object *pchnl = (struct chnl_object *)chnl_obj; - u32 chnl_id = -1; - s8 chnl_mode; -@@ -259,22 +247,23 @@ int bridge_chnl_cancel_io(struct chnl_object *chnl_obj) - struct chnl_mgr *chnl_mgr_obj = NULL; - - /* Check args: */ -- if (pchnl && pchnl->chnl_mgr_obj) { -- chnl_id = pchnl->chnl_id; -- chnl_mode = pchnl->chnl_mode; -- chnl_mgr_obj = pchnl->chnl_mgr_obj; -- } else { -- status = -EFAULT; -- } -- if (status) -- goto func_end; -+ if (!pchnl || !pchnl->chnl_mgr_obj) -+ return -EFAULT; -+ -+ chnl_id = pchnl->chnl_id; -+ chnl_mode = pchnl->chnl_mode; -+ chnl_mgr_obj = pchnl->chnl_mgr_obj; - - /* Mark this channel as cancelled, to prevent further IORequests or - * IORequests or dispatching. */ - spin_lock_bh(&chnl_mgr_obj->chnl_mgr_lock); -+ - pchnl->dw_state |= CHNL_STATECANCEL; -- if (list_empty(&pchnl->pio_requests)) -- goto func_cont; -+ -+ if (list_empty(&pchnl->pio_requests)) { -+ spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock); -+ return 0; -+ } - - if (pchnl->chnl_type == CHNL_PCPY) { - /* Indicate we have no more buffers available for transfer: */ -@@ -296,10 +285,10 @@ int bridge_chnl_cancel_io(struct chnl_object *chnl_obj) - pchnl->cio_reqs--; - DBC_ASSERT(pchnl->cio_reqs >= 0); - } --func_cont: -+ - spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock); --func_end: -- return status; -+ -+ return 0; - } - - /* -@@ -316,53 +305,43 @@ int bridge_chnl_close(struct chnl_object *chnl_obj) - struct chnl_object *pchnl = (struct chnl_object *)chnl_obj; - - /* Check args: */ -- if (!pchnl) { -- status = -EFAULT; -- goto func_cont; -+ if (!pchnl) -+ return -EFAULT; -+ /* Cancel IO: this ensures no further IO requests or notifications */ -+ status = bridge_chnl_cancel_io(chnl_obj); -+ if (status) -+ return status; -+ /* Assert I/O on this channel is now cancelled: Protects from io_dpc */ -+ DBC_ASSERT((pchnl->dw_state & CHNL_STATECANCEL)); -+ /* Invalidate channel object: Protects from CHNL_GetIOCompletion() */ -+ /* Free the slot in the channel manager: */ -+ pchnl->chnl_mgr_obj->ap_channel[pchnl->chnl_id] = NULL; -+ spin_lock_bh(&pchnl->chnl_mgr_obj->chnl_mgr_lock); -+ pchnl->chnl_mgr_obj->open_channels -= 1; -+ spin_unlock_bh(&pchnl->chnl_mgr_obj->chnl_mgr_lock); -+ if (pchnl->ntfy_obj) { -+ ntfy_delete(pchnl->ntfy_obj); -+ kfree(pchnl->ntfy_obj); -+ pchnl->ntfy_obj = NULL; - } -- { -- /* Cancel IO: this ensures no further IO requests or -- * notifications. */ -- status = bridge_chnl_cancel_io(chnl_obj); -+ /* Reset channel event: (NOTE: user_event freed in user context) */ -+ if (pchnl->sync_event) { -+ sync_reset_event(pchnl->sync_event); -+ kfree(pchnl->sync_event); -+ pchnl->sync_event = NULL; - } --func_cont: -- if (!status) { -- /* Assert I/O on this channel is now cancelled: Protects -- * from io_dpc. */ -- DBC_ASSERT((pchnl->dw_state & CHNL_STATECANCEL)); -- /* Invalidate channel object: Protects from -- * CHNL_GetIOCompletion(). */ -- /* Free the slot in the channel manager: */ -- pchnl->chnl_mgr_obj->ap_channel[pchnl->chnl_id] = NULL; -- spin_lock_bh(&pchnl->chnl_mgr_obj->chnl_mgr_lock); -- pchnl->chnl_mgr_obj->open_channels -= 1; -- spin_unlock_bh(&pchnl->chnl_mgr_obj->chnl_mgr_lock); -- if (pchnl->ntfy_obj) { -- ntfy_delete(pchnl->ntfy_obj); -- kfree(pchnl->ntfy_obj); -- pchnl->ntfy_obj = NULL; -- } -- /* Reset channel event: (NOTE: user_event freed in user -- * context.). */ -- if (pchnl->sync_event) { -- sync_reset_event(pchnl->sync_event); -- kfree(pchnl->sync_event); -- pchnl->sync_event = NULL; -- } -- /* Free I/O request and I/O completion queues: */ -- free_chirp_list(&pchnl->pio_completions); -- pchnl->cio_cs = 0; -+ /* Free I/O request and I/O completion queues: */ -+ free_chirp_list(&pchnl->pio_completions); -+ pchnl->cio_cs = 0; - -- free_chirp_list(&pchnl->pio_requests); -- pchnl->cio_reqs = 0; -+ free_chirp_list(&pchnl->pio_requests); -+ pchnl->cio_reqs = 0; - -- free_chirp_list(&pchnl->free_packets_list); -+ free_chirp_list(&pchnl->free_packets_list); -+ -+ /* Release channel object. */ -+ kfree(pchnl); - -- /* Release channel object. */ -- kfree(pchnl); -- pchnl = NULL; -- } -- DBC_ENSURE(status || !pchnl); - return status; - } - -@@ -697,32 +676,22 @@ func_end: - int bridge_chnl_get_mgr_info(struct chnl_mgr *hchnl_mgr, u32 ch_id, - struct chnl_mgrinfo *mgr_info) - { -- int status = 0; - struct chnl_mgr *chnl_mgr_obj = (struct chnl_mgr *)hchnl_mgr; - -- if (mgr_info != NULL) { -- if (ch_id <= CHNL_MAXCHANNELS) { -- if (hchnl_mgr) { -- /* Return the requested information: */ -- mgr_info->chnl_obj = -- chnl_mgr_obj->ap_channel[ch_id]; -- mgr_info->open_channels = -- chnl_mgr_obj->open_channels; -- mgr_info->dw_type = chnl_mgr_obj->dw_type; -- /* total # of chnls */ -- mgr_info->max_channels = -- chnl_mgr_obj->max_channels; -- } else { -- status = -EFAULT; -- } -- } else { -- status = -ECHRNG; -- } -- } else { -- status = -EFAULT; -- } -+ if (!mgr_info || !hchnl_mgr) -+ return -EFAULT; - -- return status; -+ if (ch_id > CHNL_MAXCHANNELS) -+ return -ECHRNG; -+ -+ /* Return the requested information: */ -+ mgr_info->chnl_obj = chnl_mgr_obj->ap_channel[ch_id]; -+ mgr_info->open_channels = chnl_mgr_obj->open_channels; -+ mgr_info->dw_type = chnl_mgr_obj->dw_type; -+ /* total # of chnls */ -+ mgr_info->max_channels = chnl_mgr_obj->max_channels; -+ -+ return 0; - } - - /* -@@ -772,45 +741,41 @@ int bridge_chnl_open(struct chnl_object **chnl, - DBC_REQUIRE(pattrs != NULL); - DBC_REQUIRE(hchnl_mgr != NULL); - *chnl = NULL; -+ - /* Validate Args: */ -- if (pattrs->uio_reqs == 0) { -- status = -EINVAL; -+ if (!pattrs->uio_reqs) -+ return -EINVAL; -+ -+ if (!hchnl_mgr) -+ return -EFAULT; -+ -+ if (ch_id != CHNL_PICKFREE) { -+ if (ch_id >= chnl_mgr_obj->max_channels) -+ return -ECHRNG; -+ if (chnl_mgr_obj->ap_channel[ch_id] != NULL) -+ return -EALREADY; - } else { -- if (!hchnl_mgr) { -- status = -EFAULT; -- } else { -- if (ch_id != CHNL_PICKFREE) { -- if (ch_id >= chnl_mgr_obj->max_channels) -- status = -ECHRNG; -- else if (chnl_mgr_obj->ap_channel[ch_id] != -- NULL) -- status = -EALREADY; -- } else { -- /* Check for free channel */ -- status = -- search_free_channel(chnl_mgr_obj, &ch_id); -- } -- } -+ /* Check for free channel */ -+ status = search_free_channel(chnl_mgr_obj, &ch_id); -+ if (status) -+ return status; - } -- if (status) -- goto func_end; - - DBC_ASSERT(ch_id < chnl_mgr_obj->max_channels); -+ - /* Create channel object: */ - pchnl = kzalloc(sizeof(struct chnl_object), GFP_KERNEL); -- if (!pchnl) { -- status = -ENOMEM; -- goto func_end; -- } -+ if (!pchnl) -+ return -ENOMEM; -+ - /* Protect queues from io_dpc: */ - pchnl->dw_state = CHNL_STATECANCEL; -+ - /* Allocate initial IOR and IOC queues: */ - status = create_chirp_list(&pchnl->free_packets_list, - pattrs->uio_reqs); -- if (status) { -- kfree(pchnl); -- goto func_end; -- } -+ if (status) -+ goto out_err; - - INIT_LIST_HEAD(&pchnl->pio_requests); - INIT_LIST_HEAD(&pchnl->pio_completions); -@@ -818,63 +783,61 @@ int bridge_chnl_open(struct chnl_object **chnl, - pchnl->chnl_packets = pattrs->uio_reqs; - pchnl->cio_cs = 0; - pchnl->cio_reqs = 0; -+ - sync_event = kzalloc(sizeof(struct sync_object), GFP_KERNEL); -- if (sync_event) -- sync_init_event(sync_event); -- else -+ if (!sync_event) { - status = -ENOMEM; -- -- if (!status) { -- pchnl->ntfy_obj = kmalloc(sizeof(struct ntfy_object), -- GFP_KERNEL); -- if (pchnl->ntfy_obj) -- ntfy_init(pchnl->ntfy_obj); -- else -- status = -ENOMEM; -+ goto out_err; - } -+ sync_init_event(sync_event); - -- if (!status) { -- /* Initialize CHNL object fields: */ -- pchnl->chnl_mgr_obj = chnl_mgr_obj; -- pchnl->chnl_id = ch_id; -- pchnl->chnl_mode = chnl_mode; -- pchnl->user_event = sync_event; -- pchnl->sync_event = sync_event; -- /* Get the process handle */ -- pchnl->process = current->tgid; -- pchnl->pcb_arg = 0; -- pchnl->bytes_moved = 0; -- /* Default to proc-copy */ -- pchnl->chnl_type = CHNL_PCPY; -- } -+ pchnl->ntfy_obj = kmalloc(sizeof(struct ntfy_object), GFP_KERNEL); -+ if (!pchnl->ntfy_obj) { -+ status = -ENOMEM; -+ goto out_err; -+ } -+ ntfy_init(pchnl->ntfy_obj); -+ -+ /* Initialize CHNL object fields: */ -+ pchnl->chnl_mgr_obj = chnl_mgr_obj; -+ pchnl->chnl_id = ch_id; -+ pchnl->chnl_mode = chnl_mode; -+ pchnl->user_event = sync_event; -+ pchnl->sync_event = sync_event; -+ /* Get the process handle */ -+ pchnl->process = current->tgid; -+ pchnl->pcb_arg = 0; -+ pchnl->bytes_moved = 0; -+ /* Default to proc-copy */ -+ pchnl->chnl_type = CHNL_PCPY; -+ -+ /* Insert channel object in channel manager: */ -+ chnl_mgr_obj->ap_channel[pchnl->chnl_id] = pchnl; -+ spin_lock_bh(&chnl_mgr_obj->chnl_mgr_lock); -+ chnl_mgr_obj->open_channels++; -+ spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock); -+ /* Return result... */ -+ pchnl->dw_state = CHNL_STATEREADY; -+ *chnl = pchnl; - -- if (status) { -- /* Free memory */ -- free_chirp_list(&pchnl->pio_completions); -- pchnl->cio_cs = 0; -- free_chirp_list(&pchnl->pio_requests); -- free_chirp_list(&pchnl->free_packets_list); -+ return status; -+ -+out_err: -+ /* Free memory */ -+ free_chirp_list(&pchnl->pio_completions); -+ free_chirp_list(&pchnl->pio_requests); -+ free_chirp_list(&pchnl->free_packets_list); -+ -+ if (sync_event) - kfree(sync_event); -- sync_event = NULL; - -- if (pchnl->ntfy_obj) { -- ntfy_delete(pchnl->ntfy_obj); -- kfree(pchnl->ntfy_obj); -- pchnl->ntfy_obj = NULL; -- } -- kfree(pchnl); -- } else { -- /* Insert channel object in channel manager: */ -- chnl_mgr_obj->ap_channel[pchnl->chnl_id] = pchnl; -- spin_lock_bh(&chnl_mgr_obj->chnl_mgr_lock); -- chnl_mgr_obj->open_channels++; -- spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock); -- /* Return result... */ -- pchnl->dw_state = CHNL_STATEREADY; -- *chnl = pchnl; -+ if (pchnl->ntfy_obj) { -+ ntfy_delete(pchnl->ntfy_obj); -+ kfree(pchnl->ntfy_obj); -+ pchnl->ntfy_obj = NULL; - } --func_end: -- DBC_ENSURE((!status && pchnl) || (*chnl == NULL)); -+ kfree(pchnl); -+ - return status; - } - -diff --git a/drivers/staging/tidspbridge/core/io_sm.c b/drivers/staging/tidspbridge/core/io_sm.c -index d30cc7e..9289522 100644 ---- a/drivers/staging/tidspbridge/core/io_sm.c -+++ b/drivers/staging/tidspbridge/core/io_sm.c -@@ -1195,29 +1195,29 @@ static void input_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) - input_empty = msg_ctr_obj->buf_empty; - num_msgs = msg_ctr_obj->size; - if (input_empty) -- goto func_end; -+ return; - - msg_input = pio_mgr->msg_input; - for (i = 0; i < num_msgs; i++) { - /* Read the next message */ - addr = (u32) &(((struct msg_dspmsg *)msg_input)->msg.dw_cmd); - msg.msg.dw_cmd = -- read_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr); -+ read_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr); - addr = (u32) &(((struct msg_dspmsg *)msg_input)->msg.dw_arg1); - msg.msg.dw_arg1 = -- read_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr); -+ read_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr); - addr = (u32) &(((struct msg_dspmsg *)msg_input)->msg.dw_arg2); - msg.msg.dw_arg2 = -- read_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr); -+ read_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr); - addr = (u32) &(((struct msg_dspmsg *)msg_input)->msgq_id); - msg.msgq_id = -- read_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr); -+ read_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr); - msg_input += sizeof(struct msg_dspmsg); - - /* Determine which queue to put the message in */ - dev_dbg(bridge, "input msg: dw_cmd=0x%x dw_arg1=0x%x " -- "dw_arg2=0x%x msgq_id=0x%x\n", msg.msg.dw_cmd, -- msg.msg.dw_arg1, msg.msg.dw_arg2, msg.msgq_id); -+ "dw_arg2=0x%x msgq_id=0x%x\n", msg.msg.dw_cmd, -+ msg.msg.dw_arg1, msg.msg.dw_arg2, msg.msgq_id); - /* - * Interrupt may occur before shared memory and message - * input locations have been set up. If all nodes were -@@ -1225,48 +1225,43 @@ static void input_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) - */ - list_for_each_entry(msg_queue_obj, &hmsg_mgr->queue_list, - list_elem) { -- if (msg.msgq_id == msg_queue_obj->msgq_id) { -- /* Found it */ -- if (msg.msg.dw_cmd == RMS_EXITACK) { -- /* -- * Call the node exit notification. -- * The exit message does not get -- * queued. -- */ -- (*hmsg_mgr->on_exit) ((void *) -- msg_queue_obj->arg, -- msg.msg.dw_arg1); -- break; -- } -+ if (msg.msgq_id != msg_queue_obj->msgq_id) -+ continue; -+ /* Found it */ -+ if (msg.msg.dw_cmd == RMS_EXITACK) { - /* -- * Not an exit acknowledgement, queue -- * the message. -+ * Call the node exit notification. -+ * The exit message does not get -+ * queued. - */ -- if (!list_empty(&msg_queue_obj-> -- msg_free_list)) { -- pmsg = list_first_entry( -- &msg_queue_obj->msg_free_list, -- struct msg_frame, list_elem); -- list_del(&pmsg->list_elem); -- pmsg->msg_data = msg; -- list_add_tail(&pmsg->list_elem, -- &msg_queue_obj->msg_used_list); -- ntfy_notify -- (msg_queue_obj->ntfy_obj, -- DSP_NODEMESSAGEREADY); -- sync_set_event -- (msg_queue_obj->sync_event); -- } else { -- /* -- * No free frame to copy the -- * message into. -- */ -- pr_err("%s: no free msg frames," -- " discarding msg\n", -- __func__); -- } -+ (*hmsg_mgr->on_exit)(msg_queue_obj->arg, -+ msg.msg.dw_arg1); - break; - } -+ /* -+ * Not an exit acknowledgement, queue -+ * the message. -+ */ -+ if (list_empty(&msg_queue_obj->msg_free_list)) { -+ /* -+ * No free frame to copy the -+ * message into. -+ */ -+ pr_err("%s: no free msg frames," -+ " discarding msg\n", -+ __func__); -+ break; -+ } -+ -+ pmsg = list_first_entry(&msg_queue_obj->msg_free_list, -+ struct msg_frame, list_elem); -+ list_del(&pmsg->list_elem); -+ pmsg->msg_data = msg; -+ list_add_tail(&pmsg->list_elem, -+ &msg_queue_obj->msg_used_list); -+ ntfy_notify(msg_queue_obj->ntfy_obj, -+ DSP_NODEMESSAGEREADY); -+ sync_set_event(msg_queue_obj->sync_event); - } - } - /* Set the post SWI flag */ -@@ -1276,8 +1271,6 @@ static void input_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) - msg_ctr_obj->post_swi = true; - sm_interrupt_dsp(pio_mgr->hbridge_context, MBX_PCPY_CLASS); - } --func_end: -- return; - } - - /* -@@ -1408,73 +1401,68 @@ static void output_msg(struct io_mgr *pio_mgr, struct msg_mgr *hmsg_mgr) - { - u32 num_msgs = 0; - u32 i; -- u8 *msg_output; -+ struct msg_dspmsg *msg_output; - struct msg_frame *pmsg; - struct msg_ctrl *msg_ctr_obj; -- u32 output_empty; - u32 val; - u32 addr; - - msg_ctr_obj = pio_mgr->msg_output_ctrl; - - /* Check if output has been cleared */ -- output_empty = msg_ctr_obj->buf_empty; -- if (output_empty) { -- num_msgs = (hmsg_mgr->msgs_pending > hmsg_mgr->max_msgs) ? -- hmsg_mgr->max_msgs : hmsg_mgr->msgs_pending; -- msg_output = pio_mgr->msg_output; -- /* Copy num_msgs messages into shared memory */ -- for (i = 0; i < num_msgs; i++) { -- if (!list_empty(&hmsg_mgr->msg_used_list)) { -- pmsg = list_first_entry( -- &hmsg_mgr->msg_used_list, -- struct msg_frame, list_elem); -- list_del(&pmsg->list_elem); -- val = (pmsg->msg_data).msgq_id; -- addr = (u32) &(((struct msg_dspmsg *) -- msg_output)->msgq_id); -- write_ext32_bit_dsp_data( -- pio_mgr->hbridge_context, addr, val); -- val = (pmsg->msg_data).msg.dw_cmd; -- addr = (u32) &((((struct msg_dspmsg *) -- msg_output)->msg).dw_cmd); -- write_ext32_bit_dsp_data( -- pio_mgr->hbridge_context, addr, val); -- val = (pmsg->msg_data).msg.dw_arg1; -- addr = (u32) &((((struct msg_dspmsg *) -- msg_output)->msg).dw_arg1); -- write_ext32_bit_dsp_data( -- pio_mgr->hbridge_context, addr, val); -- val = (pmsg->msg_data).msg.dw_arg2; -- addr = (u32) &((((struct msg_dspmsg *) -- msg_output)->msg).dw_arg2); -- write_ext32_bit_dsp_data( -- pio_mgr->hbridge_context, addr, val); -- msg_output += sizeof(struct msg_dspmsg); -- list_add_tail(&pmsg->list_elem, -- &hmsg_mgr->msg_free_list); -- sync_set_event(hmsg_mgr->sync_event); -- } -- } -+ if (!msg_ctr_obj->buf_empty) -+ return; -+ -+ num_msgs = (hmsg_mgr->msgs_pending > hmsg_mgr->max_msgs) ? -+ hmsg_mgr->max_msgs : hmsg_mgr->msgs_pending; -+ msg_output = (struct msg_dspmsg *) pio_mgr->msg_output; -+ -+ /* Copy num_msgs messages into shared memory */ -+ for (i = 0; i < num_msgs; i++) { -+ if (list_empty(&hmsg_mgr->msg_used_list)) -+ continue; -+ -+ pmsg = list_first_entry(&hmsg_mgr->msg_used_list, -+ struct msg_frame, list_elem); -+ list_del(&pmsg->list_elem); -+ -+ val = (pmsg->msg_data).msgq_id; -+ addr = (u32) &msg_output->msgq_id; -+ write_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr, val); -+ -+ val = (pmsg->msg_data).msg.dw_cmd; -+ addr = (u32) &msg_output->msg.dw_cmd; -+ write_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr, val); -+ -+ val = (pmsg->msg_data).msg.dw_arg1; -+ addr = (u32) &msg_output->msg.dw_arg1; -+ write_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr, val); -+ -+ val = (pmsg->msg_data).msg.dw_arg2; -+ addr = (u32) &msg_output->msg.dw_arg2; -+ write_ext32_bit_dsp_data(pio_mgr->hbridge_context, addr, val); - -- if (num_msgs > 0) { -- hmsg_mgr->msgs_pending -= num_msgs; -+ msg_output++; -+ list_add_tail(&pmsg->list_elem, &hmsg_mgr->msg_free_list); -+ sync_set_event(hmsg_mgr->sync_event); -+ } -+ -+ if (num_msgs > 0) { -+ hmsg_mgr->msgs_pending -= num_msgs; - #if _CHNL_WORDSIZE == 2 -- /* -- * Access can be different SM access word size -- * (e.g. 16/32 bit words) -- */ -- msg_ctr_obj->size = (u16) num_msgs; -+ /* -+ * Access can be different SM access word size -+ * (e.g. 16/32 bit words) -+ */ -+ msg_ctr_obj->size = (u16) num_msgs; - #else -- msg_ctr_obj->size = num_msgs; -+ msg_ctr_obj->size = num_msgs; - #endif -- msg_ctr_obj->buf_empty = false; -- /* Set the post SWI flag */ -- msg_ctr_obj->post_swi = true; -- /* Tell the DSP we have written the output. */ -- sm_interrupt_dsp(pio_mgr->hbridge_context, -- MBX_PCPY_CLASS); -- } -+ msg_ctr_obj->buf_empty = false; -+ /* Set the post SWI flag */ -+ msg_ctr_obj->post_swi = true; -+ /* Tell the DSP we have written the output. */ -+ sm_interrupt_dsp(pio_mgr->hbridge_context, MBX_PCPY_CLASS); - } - } - -diff --git a/drivers/staging/tidspbridge/core/msg_sm.c b/drivers/staging/tidspbridge/core/msg_sm.c -index de2cb83..07103f2 100644 ---- a/drivers/staging/tidspbridge/core/msg_sm.c -+++ b/drivers/staging/tidspbridge/core/msg_sm.c -@@ -55,49 +55,46 @@ int bridge_msg_create(struct msg_mgr **msg_man, - struct io_mgr *hio_mgr; - int status = 0; - -- if (!msg_man || !msg_callback || !hdev_obj) { -- status = -EFAULT; -- goto func_end; -- } -+ if (!msg_man || !msg_callback || !hdev_obj) -+ return -EFAULT; -+ - dev_get_io_mgr(hdev_obj, &hio_mgr); -- if (!hio_mgr) { -- status = -EFAULT; -- goto func_end; -- } -+ if (!hio_mgr) -+ return -EFAULT; -+ - *msg_man = NULL; - /* Allocate msg_ctrl manager object */ - msg_mgr_obj = kzalloc(sizeof(struct msg_mgr), GFP_KERNEL); -+ if (!msg_mgr_obj) -+ return -ENOMEM; - -- if (msg_mgr_obj) { -- msg_mgr_obj->on_exit = msg_callback; -- msg_mgr_obj->hio_mgr = hio_mgr; -- /* List of MSG_QUEUEs */ -- INIT_LIST_HEAD(&msg_mgr_obj->queue_list); -- /* Queues of message frames for messages to the DSP. Message -- * frames will only be added to the free queue when a -- * msg_queue object is created. */ -- INIT_LIST_HEAD(&msg_mgr_obj->msg_free_list); -- INIT_LIST_HEAD(&msg_mgr_obj->msg_used_list); -- spin_lock_init(&msg_mgr_obj->msg_mgr_lock); -- -- /* Create an event to be used by bridge_msg_put() in waiting -- * for an available free frame from the message manager. */ -- msg_mgr_obj->sync_event = -- kzalloc(sizeof(struct sync_object), GFP_KERNEL); -- if (!msg_mgr_obj->sync_event) -- status = -ENOMEM; -- else -- sync_init_event(msg_mgr_obj->sync_event); -- -- if (!status) -- *msg_man = msg_mgr_obj; -- else -- delete_msg_mgr(msg_mgr_obj); -- -- } else { -- status = -ENOMEM; -+ msg_mgr_obj->on_exit = msg_callback; -+ msg_mgr_obj->hio_mgr = hio_mgr; -+ /* List of MSG_QUEUEs */ -+ INIT_LIST_HEAD(&msg_mgr_obj->queue_list); -+ /* -+ * Queues of message frames for messages to the DSP. Message -+ * frames will only be added to the free queue when a -+ * msg_queue object is created. -+ */ -+ INIT_LIST_HEAD(&msg_mgr_obj->msg_free_list); -+ INIT_LIST_HEAD(&msg_mgr_obj->msg_used_list); -+ spin_lock_init(&msg_mgr_obj->msg_mgr_lock); -+ -+ /* -+ * Create an event to be used by bridge_msg_put() in waiting -+ * for an available free frame from the message manager. -+ */ -+ msg_mgr_obj->sync_event = -+ kzalloc(sizeof(struct sync_object), GFP_KERNEL); -+ if (!msg_mgr_obj->sync_event) { -+ kfree(msg_mgr_obj); -+ return -ENOMEM; - } --func_end: -+ sync_init_event(msg_mgr_obj->sync_event); -+ -+ *msg_man = msg_mgr_obj; -+ - return status; - } - -@@ -106,8 +103,7 @@ func_end: - * Create a msg_queue for sending/receiving messages to/from a node - * on the DSP. - */ --int bridge_msg_create_queue(struct msg_mgr *hmsg_mgr, -- struct msg_queue **msgq, -+int bridge_msg_create_queue(struct msg_mgr *hmsg_mgr, struct msg_queue **msgq, - u32 msgq_id, u32 max_msgs, void *arg) - { - u32 i; -@@ -115,18 +111,15 @@ int bridge_msg_create_queue(struct msg_mgr *hmsg_mgr, - struct msg_queue *msg_q; - int status = 0; - -- if (!hmsg_mgr || msgq == NULL) { -- status = -EFAULT; -- goto func_end; -- } -+ if (!hmsg_mgr || msgq == NULL) -+ return -EFAULT; - - *msgq = NULL; - /* Allocate msg_queue object */ - msg_q = kzalloc(sizeof(struct msg_queue), GFP_KERNEL); -- if (!msg_q) { -- status = -ENOMEM; -- goto func_end; -- } -+ if (!msg_q) -+ return -ENOMEM; -+ - msg_q->max_msgs = max_msgs; - msg_q->hmsg_mgr = hmsg_mgr; - msg_q->arg = arg; /* Node handle */ -@@ -137,78 +130,68 @@ int bridge_msg_create_queue(struct msg_mgr *hmsg_mgr, - - /* Create event that will be signalled when a message from - * the DSP is available. */ -- if (!status) { -- msg_q->sync_event = kzalloc(sizeof(struct sync_object), -- GFP_KERNEL); -- if (msg_q->sync_event) -- sync_init_event(msg_q->sync_event); -- else -- status = -ENOMEM; -+ msg_q->sync_event = kzalloc(sizeof(struct sync_object), GFP_KERNEL); -+ if (!msg_q->sync_event) { -+ status = -ENOMEM; -+ goto out_err; -+ - } -+ sync_init_event(msg_q->sync_event); - - /* Create a notification list for message ready notification. */ -- if (!status) { -- msg_q->ntfy_obj = kmalloc(sizeof(struct ntfy_object), -- GFP_KERNEL); -- if (msg_q->ntfy_obj) -- ntfy_init(msg_q->ntfy_obj); -- else -- status = -ENOMEM; -+ msg_q->ntfy_obj = kmalloc(sizeof(struct ntfy_object), GFP_KERNEL); -+ if (!msg_q->ntfy_obj) { -+ status = -ENOMEM; -+ goto out_err; - } -+ ntfy_init(msg_q->ntfy_obj); - - /* Create events that will be used to synchronize cleanup - * when the object is deleted. sync_done will be set to - * unblock threads in MSG_Put() or MSG_Get(). sync_done_ack - * will be set by the unblocked thread to signal that it - * is unblocked and will no longer reference the object. */ -- if (!status) { -- msg_q->sync_done = kzalloc(sizeof(struct sync_object), -- GFP_KERNEL); -- if (msg_q->sync_done) -- sync_init_event(msg_q->sync_done); -- else -- status = -ENOMEM; -+ msg_q->sync_done = kzalloc(sizeof(struct sync_object), GFP_KERNEL); -+ if (!msg_q->sync_done) { -+ status = -ENOMEM; -+ goto out_err; - } -+ sync_init_event(msg_q->sync_done); - -- if (!status) { -- msg_q->sync_done_ack = kzalloc(sizeof(struct sync_object), -- GFP_KERNEL); -- if (msg_q->sync_done_ack) -- sync_init_event(msg_q->sync_done_ack); -- else -- status = -ENOMEM; -+ msg_q->sync_done_ack = kzalloc(sizeof(struct sync_object), GFP_KERNEL); -+ if (!msg_q->sync_done_ack) { -+ status = -ENOMEM; -+ goto out_err; - } -+ sync_init_event(msg_q->sync_done_ack); - -- if (!status) { -- /* Enter critical section */ -- spin_lock_bh(&hmsg_mgr->msg_mgr_lock); -- /* Initialize message frames and put in appropriate queues */ -- for (i = 0; i < max_msgs && !status; i++) { -- status = add_new_msg(&hmsg_mgr->msg_free_list); -- if (!status) { -- num_allocated++; -- status = add_new_msg(&msg_q->msg_free_list); -- } -- } -- if (status) { -- /* Stay inside CS to prevent others from taking any -- * of the newly allocated message frames. */ -- delete_msg_queue(msg_q, num_allocated); -- } else { -- list_add_tail(&msg_q->list_elem, -- &hmsg_mgr->queue_list); -- *msgq = msg_q; -- /* Signal that free frames are now available */ -- if (!list_empty(&hmsg_mgr->msg_free_list)) -- sync_set_event(hmsg_mgr->sync_event); -- -+ /* Enter critical section */ -+ spin_lock_bh(&hmsg_mgr->msg_mgr_lock); -+ /* Initialize message frames and put in appropriate queues */ -+ for (i = 0; i < max_msgs && !status; i++) { -+ status = add_new_msg(&hmsg_mgr->msg_free_list); -+ if (!status) { -+ num_allocated++; -+ status = add_new_msg(&msg_q->msg_free_list); - } -- /* Exit critical section */ -+ } -+ if (status) { - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -- } else { -- delete_msg_queue(msg_q, 0); -+ goto out_err; - } --func_end: -+ -+ list_add_tail(&msg_q->list_elem, &hmsg_mgr->queue_list); -+ *msgq = msg_q; -+ /* Signal that free frames are now available */ -+ if (!list_empty(&hmsg_mgr->msg_free_list)) -+ sync_set_event(hmsg_mgr->sync_event); -+ -+ /* Exit critical section */ -+ spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -+ -+ return 0; -+out_err: -+ delete_msg_queue(msg_q, num_allocated); - return status; - } - -@@ -232,7 +215,7 @@ void bridge_msg_delete_queue(struct msg_queue *msg_queue_obj) - u32 io_msg_pend; - - if (!msg_queue_obj || !msg_queue_obj->hmsg_mgr) -- goto func_end; -+ return; - - hmsg_mgr = msg_queue_obj->hmsg_mgr; - msg_queue_obj->done = true; -@@ -252,10 +235,7 @@ void bridge_msg_delete_queue(struct msg_queue *msg_queue_obj) - delete_msg_queue(msg_queue_obj, msg_queue_obj->max_msgs); - if (list_empty(&hmsg_mgr->msg_free_list)) - sync_reset_event(hmsg_mgr->sync_event); -- - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); --func_end: -- return; - } - - /* -@@ -267,19 +247,15 @@ int bridge_msg_get(struct msg_queue *msg_queue_obj, - { - struct msg_frame *msg_frame_obj; - struct msg_mgr *hmsg_mgr; -- bool got_msg = false; - struct sync_object *syncs[2]; - u32 index; - int status = 0; - -- if (!msg_queue_obj || pmsg == NULL) { -- status = -ENOMEM; -- goto func_end; -- } -+ if (!msg_queue_obj || pmsg == NULL) -+ return -ENOMEM; - - hmsg_mgr = msg_queue_obj->hmsg_mgr; - -- /* Enter critical section */ - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); - /* If a message is already there, get it */ - if (!list_empty(&msg_queue_obj->msg_used_list)) { -@@ -291,59 +267,54 @@ int bridge_msg_get(struct msg_queue *msg_queue_obj, - &msg_queue_obj->msg_free_list); - if (list_empty(&msg_queue_obj->msg_used_list)) - sync_reset_event(msg_queue_obj->sync_event); -+ spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -+ return 0; -+ } - -- got_msg = true; -- } else { -- if (msg_queue_obj->done) -- status = -EPERM; -- else -- msg_queue_obj->io_msg_pend++; -- -+ if (msg_queue_obj->done) { -+ spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -+ return -EPERM; - } -- /* Exit critical section */ -+ msg_queue_obj->io_msg_pend++; - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -- if (!status && !got_msg) { -- /* Wait til message is available, timeout, or done. We don't -- * have to schedule the DPC, since the DSP will send messages -- * when they are available. */ -- syncs[0] = msg_queue_obj->sync_event; -- syncs[1] = msg_queue_obj->sync_done; -- status = sync_wait_on_multiple_events(syncs, 2, utimeout, -- &index); -- /* Enter critical section */ -- spin_lock_bh(&hmsg_mgr->msg_mgr_lock); -- if (msg_queue_obj->done) { -- msg_queue_obj->io_msg_pend--; -- /* Exit critical section */ -- spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -- /* Signal that we're not going to access msg_queue_obj -- * anymore, so it can be deleted. */ -- (void)sync_set_event(msg_queue_obj->sync_done_ack); -- status = -EPERM; -- } else { -- if (!status && !list_empty(&msg_queue_obj-> -- msg_used_list)) { -- /* Get msg from used list */ -- msg_frame_obj = list_first_entry( -- &msg_queue_obj->msg_used_list, -- struct msg_frame, list_elem); -- list_del(&msg_frame_obj->list_elem); -- /* Copy message into pmsg and put frame on the -- * free list */ -- *pmsg = msg_frame_obj->msg_data.msg; -- list_add_tail(&msg_frame_obj->list_elem, -- &msg_queue_obj->msg_free_list); -- } -- msg_queue_obj->io_msg_pend--; -- /* Reset the event if there are still queued messages */ -- if (!list_empty(&msg_queue_obj->msg_used_list)) -- sync_set_event(msg_queue_obj->sync_event); -- -- /* Exit critical section */ -- spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -- } -+ -+ /* -+ * Wait til message is available, timeout, or done. We don't -+ * have to schedule the DPC, since the DSP will send messages -+ * when they are available. -+ */ -+ syncs[0] = msg_queue_obj->sync_event; -+ syncs[1] = msg_queue_obj->sync_done; -+ status = sync_wait_on_multiple_events(syncs, 2, utimeout, &index); -+ -+ spin_lock_bh(&hmsg_mgr->msg_mgr_lock); -+ if (msg_queue_obj->done) { -+ msg_queue_obj->io_msg_pend--; -+ spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -+ /* -+ * Signal that we're not going to access msg_queue_obj -+ * anymore, so it can be deleted. -+ */ -+ sync_set_event(msg_queue_obj->sync_done_ack); -+ return -EPERM; - } --func_end: -+ if (!status && !list_empty(&msg_queue_obj->msg_used_list)) { -+ /* Get msg from used list */ -+ msg_frame_obj = list_first_entry(&msg_queue_obj->msg_used_list, -+ struct msg_frame, list_elem); -+ list_del(&msg_frame_obj->list_elem); -+ /* Copy message into pmsg and put frame on the free list */ -+ *pmsg = msg_frame_obj->msg_data.msg; -+ list_add_tail(&msg_frame_obj->list_elem, -+ &msg_queue_obj->msg_free_list); -+ } -+ msg_queue_obj->io_msg_pend--; -+ /* Reset the event if there are still queued messages */ -+ if (!list_empty(&msg_queue_obj->msg_used_list)) -+ sync_set_event(msg_queue_obj->sync_event); -+ -+ spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -+ - return status; - } - -@@ -356,15 +327,13 @@ int bridge_msg_put(struct msg_queue *msg_queue_obj, - { - struct msg_frame *msg_frame_obj; - struct msg_mgr *hmsg_mgr; -- bool put_msg = false; - struct sync_object *syncs[2]; - u32 index; -- int status = 0; -+ int status; -+ -+ if (!msg_queue_obj || !pmsg || !msg_queue_obj->hmsg_mgr) -+ return -EFAULT; - -- if (!msg_queue_obj || !pmsg || !msg_queue_obj->hmsg_mgr) { -- status = -ENOMEM; -- goto func_end; -- } - hmsg_mgr = msg_queue_obj->hmsg_mgr; - - spin_lock_bh(&hmsg_mgr->msg_mgr_lock); -@@ -380,7 +349,7 @@ int bridge_msg_put(struct msg_queue *msg_queue_obj, - list_add_tail(&msg_frame_obj->list_elem, - &hmsg_mgr->msg_used_list); - hmsg_mgr->msgs_pending++; -- put_msg = true; -+ - if (list_empty(&hmsg_mgr->msg_free_list)) - sync_reset_event(hmsg_mgr->sync_event); - -@@ -388,70 +357,70 @@ int bridge_msg_put(struct msg_queue *msg_queue_obj, - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); - /* Schedule a DPC, to do the actual data transfer: */ - iosm_schedule(hmsg_mgr->hio_mgr); -- } else { -- if (msg_queue_obj->done) -- status = -EPERM; -- else -- msg_queue_obj->io_msg_pend++; -+ return 0; -+ } - -+ if (msg_queue_obj->done) { - spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -+ return -EPERM; - } -- if (!status && !put_msg) { -- /* Wait til a free message frame is available, timeout, -- * or done */ -- syncs[0] = hmsg_mgr->sync_event; -- syncs[1] = msg_queue_obj->sync_done; -- status = sync_wait_on_multiple_events(syncs, 2, utimeout, -- &index); -- if (status) -- goto func_end; -- /* Enter critical section */ -- spin_lock_bh(&hmsg_mgr->msg_mgr_lock); -- if (msg_queue_obj->done) { -- msg_queue_obj->io_msg_pend--; -- /* Exit critical section */ -- spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -- /* Signal that we're not going to access msg_queue_obj -- * anymore, so it can be deleted. */ -- (void)sync_set_event(msg_queue_obj->sync_done_ack); -- status = -EPERM; -- } else { -- if (list_empty(&hmsg_mgr->msg_free_list)) { -- status = -EFAULT; -- goto func_cont; -- } -- /* Get msg from free list */ -- msg_frame_obj = list_first_entry( -- &hmsg_mgr->msg_free_list, -- struct msg_frame, list_elem); -- list_del(&msg_frame_obj->list_elem); -- /* -- * Copy message into pmsg and put frame on the -- * used list. -- */ -- msg_frame_obj->msg_data.msg = *pmsg; -- msg_frame_obj->msg_data.msgq_id = -- msg_queue_obj->msgq_id; -- list_add_tail(&msg_frame_obj->list_elem, -- &hmsg_mgr->msg_used_list); -- hmsg_mgr->msgs_pending++; -- /* -- * Schedule a DPC, to do the actual -- * data transfer. -- */ -- iosm_schedule(hmsg_mgr->hio_mgr); -- -- msg_queue_obj->io_msg_pend--; -- /* Reset event if there are still frames available */ -- if (!list_empty(&hmsg_mgr->msg_free_list)) -- sync_set_event(hmsg_mgr->sync_event); --func_cont: -- /* Exit critical section */ -- spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -- } -+ msg_queue_obj->io_msg_pend++; -+ -+ spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -+ -+ /* Wait til a free message frame is available, timeout, or done */ -+ syncs[0] = hmsg_mgr->sync_event; -+ syncs[1] = msg_queue_obj->sync_done; -+ status = sync_wait_on_multiple_events(syncs, 2, utimeout, &index); -+ if (status) -+ return status; -+ -+ /* Enter critical section */ -+ spin_lock_bh(&hmsg_mgr->msg_mgr_lock); -+ if (msg_queue_obj->done) { -+ msg_queue_obj->io_msg_pend--; -+ /* Exit critical section */ -+ spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -+ /* -+ * Signal that we're not going to access msg_queue_obj -+ * anymore, so it can be deleted. -+ */ -+ sync_set_event(msg_queue_obj->sync_done_ack); -+ return -EPERM; - } --func_end: -- return status; -+ -+ if (list_empty(&hmsg_mgr->msg_free_list)) { -+ spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -+ return -EFAULT; -+ } -+ -+ /* Get msg from free list */ -+ msg_frame_obj = list_first_entry(&hmsg_mgr->msg_free_list, -+ struct msg_frame, list_elem); -+ /* -+ * Copy message into pmsg and put frame on the -+ * used list. -+ */ -+ list_del(&msg_frame_obj->list_elem); -+ msg_frame_obj->msg_data.msg = *pmsg; -+ msg_frame_obj->msg_data.msgq_id = msg_queue_obj->msgq_id; -+ list_add_tail(&msg_frame_obj->list_elem, &hmsg_mgr->msg_used_list); -+ hmsg_mgr->msgs_pending++; -+ /* -+ * Schedule a DPC, to do the actual -+ * data transfer. -+ */ -+ iosm_schedule(hmsg_mgr->hio_mgr); -+ -+ msg_queue_obj->io_msg_pend--; -+ /* Reset event if there are still frames available */ -+ if (!list_empty(&hmsg_mgr->msg_free_list)) -+ sync_set_event(hmsg_mgr->sync_event); -+ -+ /* Exit critical section */ -+ spin_unlock_bh(&hmsg_mgr->msg_mgr_lock); -+ -+ return 0; - } - - /* -@@ -518,16 +487,14 @@ void bridge_msg_set_queue_id(struct msg_queue *msg_queue_obj, u32 msgq_id) - static int add_new_msg(struct list_head *msg_list) - { - struct msg_frame *pmsg; -- int status = 0; - - pmsg = kzalloc(sizeof(struct msg_frame), GFP_ATOMIC); -- if (pmsg != NULL) { -- list_add_tail(&pmsg->list_elem, msg_list); -- } else { -- status = -ENOMEM; -- } -+ if (!pmsg) -+ return -ENOMEM; - -- return status; -+ list_add_tail(&pmsg->list_elem, msg_list); -+ -+ return 0; - } - - /* -@@ -536,17 +503,13 @@ static int add_new_msg(struct list_head *msg_list) - static void delete_msg_mgr(struct msg_mgr *hmsg_mgr) - { - if (!hmsg_mgr) -- goto func_end; -+ return; - - /* FIXME: free elements from queue_list? */ - free_msg_list(&hmsg_mgr->msg_free_list); - free_msg_list(&hmsg_mgr->msg_used_list); -- - kfree(hmsg_mgr->sync_event); -- - kfree(hmsg_mgr); --func_end: -- return; - } - - /* -@@ -559,7 +522,7 @@ static void delete_msg_queue(struct msg_queue *msg_queue_obj, u32 num_to_dsp) - u32 i; - - if (!msg_queue_obj || !msg_queue_obj->hmsg_mgr) -- goto func_end; -+ return; - - hmsg_mgr = msg_queue_obj->hmsg_mgr; - -@@ -586,9 +549,6 @@ static void delete_msg_queue(struct msg_queue *msg_queue_obj, u32 num_to_dsp) - kfree(msg_queue_obj->sync_done_ack); - - kfree(msg_queue_obj); --func_end: -- return; -- - } - - /* -@@ -599,13 +559,10 @@ static void free_msg_list(struct list_head *msg_list) - struct msg_frame *pmsg, *tmp; - - if (!msg_list) -- goto func_end; -+ return; - - list_for_each_entry_safe(pmsg, tmp, msg_list, list_elem) { - list_del(&pmsg->list_elem); - kfree(pmsg); - } -- --func_end: -- return; - } --- -1.7.1 - diff --git a/patches/dspbridge/0016-staging-tidspbridge-pmgr-code-cleanup.patch b/patches/dspbridge/0016-staging-tidspbridge-pmgr-code-cleanup.patch deleted file mode 100644 index 07bb4f94e51b7afcdc9d9516efe08cd9fa797bc2..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0016-staging-tidspbridge-pmgr-code-cleanup.patch +++ /dev/null @@ -1,580 +0,0 @@ -From 61196fba692ad04f36440be98964119dcfc82689 Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Sun, 21 Nov 2010 10:46:29 +0000 -Subject: [PATCH 16/25] staging: tidspbridge: pmgr code cleanup - -Reorganized some code in the pmgr module to increase -its readability. No functional changes were done. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/pmgr/cmm.c | 357 ++++++++++++++----------------- - drivers/staging/tidspbridge/pmgr/dev.c | 22 +-- - 2 files changed, 168 insertions(+), 211 deletions(-) - -diff --git a/drivers/staging/tidspbridge/pmgr/cmm.c b/drivers/staging/tidspbridge/pmgr/cmm.c -index d7ca2a4..babe66f 100644 ---- a/drivers/staging/tidspbridge/pmgr/cmm.c -+++ b/drivers/staging/tidspbridge/pmgr/cmm.c -@@ -250,26 +250,23 @@ int cmm_create(struct cmm_object **ph_cmm_mgr, - *ph_cmm_mgr = NULL; - /* create, zero, and tag a cmm mgr object */ - cmm_obj = kzalloc(sizeof(struct cmm_object), GFP_KERNEL); -- if (cmm_obj != NULL) { -- if (mgr_attrts == NULL) -- mgr_attrts = &cmm_dfltmgrattrs; /* set defaults */ -- -- /* 4 bytes minimum */ -- DBC_ASSERT(mgr_attrts->ul_min_block_size >= 4); -- /* save away smallest block allocation for this cmm mgr */ -- cmm_obj->ul_min_block_size = mgr_attrts->ul_min_block_size; -- cmm_obj->dw_page_size = PAGE_SIZE; -- -- /* Note: DSP SM seg table(aDSPSMSegTab[]) zero'd by -- * MEM_ALLOC_OBJECT */ -- -- /* create node free list */ -- INIT_LIST_HEAD(&cmm_obj->node_free_list); -- mutex_init(&cmm_obj->cmm_lock); -- *ph_cmm_mgr = cmm_obj; -- } else { -- status = -ENOMEM; -- } -+ if (!cmm_obj) -+ return -ENOMEM; -+ -+ if (mgr_attrts == NULL) -+ mgr_attrts = &cmm_dfltmgrattrs; /* set defaults */ -+ -+ /* 4 bytes minimum */ -+ DBC_ASSERT(mgr_attrts->ul_min_block_size >= 4); -+ /* save away smallest block allocation for this cmm mgr */ -+ cmm_obj->ul_min_block_size = mgr_attrts->ul_min_block_size; -+ cmm_obj->dw_page_size = PAGE_SIZE; -+ -+ /* create node free list */ -+ INIT_LIST_HEAD(&cmm_obj->node_free_list); -+ mutex_init(&cmm_obj->cmm_lock); -+ *ph_cmm_mgr = cmm_obj; -+ - return status; - } - -@@ -346,13 +343,12 @@ void cmm_exit(void) - * Purpose: - * Free the given buffer. - */ --int cmm_free_buf(struct cmm_object *hcmm_mgr, void *buf_pa, -- u32 ul_seg_id) -+int cmm_free_buf(struct cmm_object *hcmm_mgr, void *buf_pa, u32 ul_seg_id) - { - struct cmm_object *cmm_mgr_obj = (struct cmm_object *)hcmm_mgr; - int status = -EFAULT; - struct cmm_mnode *curr, *tmp; -- struct cmm_allocator *allocator = NULL; -+ struct cmm_allocator *allocator; - struct cmm_attrs *pattrs; - - DBC_REQUIRE(refs > 0); -@@ -366,21 +362,22 @@ int cmm_free_buf(struct cmm_object *hcmm_mgr, void *buf_pa, - status = -EFAULT; - return status; - } -- /* get the allocator for this segment id */ -+ - allocator = get_allocator(cmm_mgr_obj, ul_seg_id); -- if (allocator != NULL) { -- mutex_lock(&cmm_mgr_obj->cmm_lock); -- list_for_each_entry_safe(curr, tmp, &allocator->in_use_list, -- link) { -- if (curr->dw_pa == (u32) buf_pa) { -- list_del(&curr->link); -- add_to_free_list(allocator, curr); -- status = 0; -- break; -- } -+ if (!allocator) -+ return status; -+ -+ mutex_lock(&cmm_mgr_obj->cmm_lock); -+ list_for_each_entry_safe(curr, tmp, &allocator->in_use_list, link) { -+ if (curr->dw_pa == (u32) buf_pa) { -+ list_del(&curr->link); -+ add_to_free_list(allocator, curr); -+ status = 0; -+ break; - } -- mutex_unlock(&cmm_mgr_obj->cmm_lock); - } -+ mutex_unlock(&cmm_mgr_obj->cmm_lock); -+ - return status; - } - -@@ -438,31 +435,30 @@ int cmm_get_info(struct cmm_object *hcmm_mgr, - for (ul_seg = 1; ul_seg <= CMM_MAXGPPSEGS; ul_seg++) { - /* get the allocator object for this segment id */ - altr = get_allocator(cmm_mgr_obj, ul_seg); -- if (altr != NULL) { -- cmm_info_obj->ul_num_gppsm_segs++; -- cmm_info_obj->seg_info[ul_seg - 1].dw_seg_base_pa = -- altr->shm_base - altr->ul_dsp_size; -- cmm_info_obj->seg_info[ul_seg - 1].ul_total_seg_size = -- altr->ul_dsp_size + altr->ul_sm_size; -- cmm_info_obj->seg_info[ul_seg - 1].dw_gpp_base_pa = -- altr->shm_base; -- cmm_info_obj->seg_info[ul_seg - 1].ul_gpp_size = -- altr->ul_sm_size; -- cmm_info_obj->seg_info[ul_seg - 1].dw_dsp_base_va = -- altr->dw_dsp_base; -- cmm_info_obj->seg_info[ul_seg - 1].ul_dsp_size = -- altr->ul_dsp_size; -- cmm_info_obj->seg_info[ul_seg - 1].dw_seg_base_va = -- altr->dw_vm_base - altr->ul_dsp_size; -- cmm_info_obj->seg_info[ul_seg - 1].ul_in_use_cnt = 0; -- /* Count inUse blocks */ -- list_for_each_entry(curr, &altr->in_use_list, link) { -- cmm_info_obj->ul_total_in_use_cnt++; -- cmm_info_obj->seg_info[ul_seg - -- 1].ul_in_use_cnt++; -- } -+ if (!altr) -+ continue; -+ cmm_info_obj->ul_num_gppsm_segs++; -+ cmm_info_obj->seg_info[ul_seg - 1].dw_seg_base_pa = -+ altr->shm_base - altr->ul_dsp_size; -+ cmm_info_obj->seg_info[ul_seg - 1].ul_total_seg_size = -+ altr->ul_dsp_size + altr->ul_sm_size; -+ cmm_info_obj->seg_info[ul_seg - 1].dw_gpp_base_pa = -+ altr->shm_base; -+ cmm_info_obj->seg_info[ul_seg - 1].ul_gpp_size = -+ altr->ul_sm_size; -+ cmm_info_obj->seg_info[ul_seg - 1].dw_dsp_base_va = -+ altr->dw_dsp_base; -+ cmm_info_obj->seg_info[ul_seg - 1].ul_dsp_size = -+ altr->ul_dsp_size; -+ cmm_info_obj->seg_info[ul_seg - 1].dw_seg_base_va = -+ altr->dw_vm_base - altr->ul_dsp_size; -+ cmm_info_obj->seg_info[ul_seg - 1].ul_in_use_cnt = 0; -+ -+ list_for_each_entry(curr, &altr->in_use_list, link) { -+ cmm_info_obj->ul_total_in_use_cnt++; -+ cmm_info_obj->seg_info[ul_seg - 1].ul_in_use_cnt++; - } -- } /* end for */ -+ } - mutex_unlock(&cmm_mgr_obj->cmm_lock); - return status; - } -@@ -508,23 +504,25 @@ int cmm_register_gppsm_seg(struct cmm_object *hcmm_mgr, - DBC_REQUIRE(dw_gpp_base_pa != 0); - DBC_REQUIRE(gpp_base_va != 0); - DBC_REQUIRE((c_factor <= CMM_ADDTODSPPA) && -- (c_factor >= CMM_SUBFROMDSPPA)); -+ (c_factor >= CMM_SUBFROMDSPPA)); -+ - dev_dbg(bridge, "%s: dw_gpp_base_pa %x ul_size %x dsp_addr_offset %x " -- "dw_dsp_base %x ul_dsp_size %x gpp_base_va %x\n", __func__, -- dw_gpp_base_pa, ul_size, dsp_addr_offset, dw_dsp_base, -- ul_dsp_size, gpp_base_va); -- if (!hcmm_mgr) { -- status = -EFAULT; -- return status; -- } -+ "dw_dsp_base %x ul_dsp_size %x gpp_base_va %x\n", -+ __func__, dw_gpp_base_pa, ul_size, dsp_addr_offset, -+ dw_dsp_base, ul_dsp_size, gpp_base_va); -+ -+ if (!hcmm_mgr) -+ return -EFAULT; -+ - /* make sure we have room for another allocator */ - mutex_lock(&cmm_mgr_obj->cmm_lock); -+ - slot_seg = get_slot(cmm_mgr_obj); - if (slot_seg < 0) { -- /* get a slot number */ - status = -EPERM; - goto func_end; - } -+ - /* Check if input ul_size is big enough to alloc at least one block */ - if (ul_size < cmm_mgr_obj->ul_min_block_size) { - status = -EINVAL; -@@ -533,37 +531,35 @@ int cmm_register_gppsm_seg(struct cmm_object *hcmm_mgr, - - /* create, zero, and tag an SM allocator object */ - psma = kzalloc(sizeof(struct cmm_allocator), GFP_KERNEL); -- if (psma != NULL) { -- psma->hcmm_mgr = hcmm_mgr; /* ref to parent */ -- psma->shm_base = dw_gpp_base_pa; /* SM Base phys */ -- psma->ul_sm_size = ul_size; /* SM segment size in bytes */ -- psma->dw_vm_base = gpp_base_va; -- psma->dw_dsp_phys_addr_offset = dsp_addr_offset; -- psma->c_factor = c_factor; -- psma->dw_dsp_base = dw_dsp_base; -- psma->ul_dsp_size = ul_dsp_size; -- if (psma->dw_vm_base == 0) { -- status = -EPERM; -- goto func_end; -- } -- /* return the actual segment identifier */ -- *sgmt_id = (u32) slot_seg + 1; -- /* create memory free list */ -- INIT_LIST_HEAD(&psma->free_list); -- -- /* create memory in-use list */ -- INIT_LIST_HEAD(&psma->in_use_list); -- -- /* Get a mem node for this hunk-o-memory */ -- new_node = get_node(cmm_mgr_obj, dw_gpp_base_pa, -- psma->dw_vm_base, ul_size); -- /* Place node on the SM allocator's free list */ -- if (new_node) { -- list_add_tail(&new_node->link, &psma->free_list); -- } else { -- status = -ENOMEM; -- goto func_end; -- } -+ if (!psma) { -+ status = -ENOMEM; -+ goto func_end; -+ } -+ -+ psma->hcmm_mgr = hcmm_mgr; /* ref to parent */ -+ psma->shm_base = dw_gpp_base_pa; /* SM Base phys */ -+ psma->ul_sm_size = ul_size; /* SM segment size in bytes */ -+ psma->dw_vm_base = gpp_base_va; -+ psma->dw_dsp_phys_addr_offset = dsp_addr_offset; -+ psma->c_factor = c_factor; -+ psma->dw_dsp_base = dw_dsp_base; -+ psma->ul_dsp_size = ul_dsp_size; -+ if (psma->dw_vm_base == 0) { -+ status = -EPERM; -+ goto func_end; -+ } -+ /* return the actual segment identifier */ -+ *sgmt_id = (u32) slot_seg + 1; -+ -+ INIT_LIST_HEAD(&psma->free_list); -+ INIT_LIST_HEAD(&psma->in_use_list); -+ -+ /* Get a mem node for this hunk-o-memory */ -+ new_node = get_node(cmm_mgr_obj, dw_gpp_base_pa, -+ psma->dw_vm_base, ul_size); -+ /* Place node on the SM allocator's free list */ -+ if (new_node) { -+ list_add_tail(&new_node->link, &psma->free_list); - } else { - status = -ENOMEM; - goto func_end; -@@ -572,12 +568,11 @@ int cmm_register_gppsm_seg(struct cmm_object *hcmm_mgr, - cmm_mgr_obj->pa_gppsm_seg_tab[slot_seg] = psma; - - func_end: -- if (status && psma) { -- /* Cleanup allocator */ -+ /* Cleanup allocator */ -+ if (status && psma) - un_register_gppsm_seg(psma); -- } -- - mutex_unlock(&cmm_mgr_obj->cmm_lock); -+ - return status; - } - -@@ -595,36 +590,36 @@ int cmm_un_register_gppsm_seg(struct cmm_object *hcmm_mgr, - u32 ul_id = ul_seg_id; - - DBC_REQUIRE(ul_seg_id > 0); -- if (hcmm_mgr) { -- if (ul_seg_id == CMM_ALLSEGMENTS) -- ul_id = 1; -- -- if ((ul_id > 0) && (ul_id <= CMM_MAXGPPSEGS)) { -- while (ul_id <= CMM_MAXGPPSEGS) { -- mutex_lock(&cmm_mgr_obj->cmm_lock); -- /* slot = seg_id-1 */ -- psma = cmm_mgr_obj->pa_gppsm_seg_tab[ul_id - 1]; -- if (psma != NULL) { -- un_register_gppsm_seg(psma); -- /* Set alctr ptr to NULL for future -- * reuse */ -- cmm_mgr_obj->pa_gppsm_seg_tab[ul_id - -- 1] = NULL; -- } else if (ul_seg_id != CMM_ALLSEGMENTS) { -- status = -EPERM; -- } -- mutex_unlock(&cmm_mgr_obj->cmm_lock); -- if (ul_seg_id != CMM_ALLSEGMENTS) -- break; -- -- ul_id++; -- } /* end while */ -- } else { -- status = -EINVAL; -+ if (!hcmm_mgr) -+ return -EFAULT; -+ -+ if (ul_seg_id == CMM_ALLSEGMENTS) -+ ul_id = 1; -+ -+ if ((ul_id <= 0) || (ul_id > CMM_MAXGPPSEGS)) -+ return -EINVAL; -+ -+ /* -+ * FIXME: CMM_MAXGPPSEGS == 1. why use a while cycle? Seems to me like -+ * the ul_seg_id is not needed here. It must be always 1. -+ */ -+ while (ul_id <= CMM_MAXGPPSEGS) { -+ mutex_lock(&cmm_mgr_obj->cmm_lock); -+ /* slot = seg_id-1 */ -+ psma = cmm_mgr_obj->pa_gppsm_seg_tab[ul_id - 1]; -+ if (psma != NULL) { -+ un_register_gppsm_seg(psma); -+ /* Set alctr ptr to NULL for future reuse */ -+ cmm_mgr_obj->pa_gppsm_seg_tab[ul_id - 1] = NULL; -+ } else if (ul_seg_id != CMM_ALLSEGMENTS) { -+ status = -EPERM; - } -- } else { -- status = -EFAULT; -- } -+ mutex_unlock(&cmm_mgr_obj->cmm_lock); -+ if (ul_seg_id != CMM_ALLSEGMENTS) -+ break; -+ -+ ul_id++; -+ } /* end while */ - return status; - } - -@@ -690,26 +685,29 @@ static s32 get_slot(struct cmm_object *cmm_mgr_obj) - static struct cmm_mnode *get_node(struct cmm_object *cmm_mgr_obj, u32 dw_pa, - u32 dw_va, u32 ul_size) - { -- struct cmm_mnode *pnode = NULL; -+ struct cmm_mnode *pnode; - - DBC_REQUIRE(cmm_mgr_obj != NULL); - DBC_REQUIRE(dw_pa != 0); - DBC_REQUIRE(dw_va != 0); - DBC_REQUIRE(ul_size != 0); -+ - /* Check cmm mgr's node freelist */ - if (list_empty(&cmm_mgr_obj->node_free_list)) { - pnode = kzalloc(sizeof(struct cmm_mnode), GFP_KERNEL); -+ if (!pnode) -+ return NULL; - } else { - /* surely a valid element */ - pnode = list_first_entry(&cmm_mgr_obj->node_free_list, - struct cmm_mnode, link); -- list_del(&pnode->link); -- } -- if (pnode) { -- pnode->dw_pa = dw_pa; /* Physical addr of start of block */ -- pnode->dw_va = dw_va; /* Virtual " " */ -- pnode->ul_size = ul_size; /* Size of block */ -+ list_del_init(&pnode->link); - } -+ -+ pnode->dw_pa = dw_pa; -+ pnode->dw_va = dw_va; -+ pnode->ul_size = ul_size; -+ - return pnode; - } - -@@ -740,11 +738,10 @@ static struct cmm_mnode *get_free_block(struct cmm_allocator *allocator, - return NULL; - - list_for_each_entry_safe(node, tmp, &allocator->free_list, link) { -- if (usize <= (u32) node->ul_size) { -+ if (usize <= node->ul_size) { - list_del(&node->link); - return node; - } -- - } - - return NULL; -@@ -756,59 +753,36 @@ static struct cmm_mnode *get_free_block(struct cmm_allocator *allocator, - * Coalesce node into the freelist in ascending size order. - */ - static void add_to_free_list(struct cmm_allocator *allocator, -- struct cmm_mnode *pnode) -+ struct cmm_mnode *node) - { -- struct cmm_mnode *node_prev = NULL; -- struct cmm_mnode *node_next = NULL; -- struct cmm_mnode *mnode_obj; -- u32 dw_this_pa; -- u32 dw_next_pa; -- -- if (!pnode) { -- pr_err("%s: failed - pnode is NULL\n", __func__); -+ struct cmm_mnode *curr; -+ -+ if (!node) { -+ pr_err("%s: failed - node is NULL\n", __func__); - return; - } - -- dw_this_pa = pnode->dw_pa; -- dw_next_pa = NEXT_PA(pnode); -- list_for_each_entry(mnode_obj, &allocator->free_list, link) { -- if (dw_this_pa == NEXT_PA(mnode_obj)) { -- /* found the block ahead of this one */ -- node_prev = mnode_obj; -- } else if (dw_next_pa == mnode_obj->dw_pa) { -- node_next = mnode_obj; -+ list_for_each_entry(curr, &allocator->free_list, link) { -+ if (NEXT_PA(curr) == node->dw_pa) { -+ curr->ul_size += node->ul_size; -+ delete_node(allocator->hcmm_mgr, node); -+ return; -+ } -+ if (curr->dw_pa == NEXT_PA(node)) { -+ curr->dw_pa = node->dw_pa; -+ curr->dw_va = node->dw_va; -+ curr->ul_size += node->ul_size; -+ delete_node(allocator->hcmm_mgr, node); -+ return; - } -- if ((node_prev != NULL) && (node_next != NULL)) -- break; -- } -- if (node_prev != NULL) { -- /* combine with previous block */ -- list_del(&node_prev->link); -- /* grow node to hold both */ -- pnode->ul_size += node_prev->ul_size; -- pnode->dw_pa = node_prev->dw_pa; -- pnode->dw_va = node_prev->dw_va; -- /* place node on mgr nodeFreeList */ -- delete_node(allocator->hcmm_mgr, node_prev); -- } -- if (node_next != NULL) { -- /* combine with next block */ -- list_del(&node_next->link); -- /* grow da node */ -- pnode->ul_size += node_next->ul_size; -- /* place node on mgr nodeFreeList */ -- delete_node(allocator->hcmm_mgr, node_next); - } -- /* Now, let's add to freelist in increasing size order */ -- list_for_each_entry(mnode_obj, &allocator->free_list, link) { -- if (pnode->ul_size <= mnode_obj->ul_size) { -- /* insert our node before the current traversed node */ -- list_add_tail(&pnode->link, &mnode_obj->link); -+ list_for_each_entry(curr, &allocator->free_list, link) { -+ if (curr->ul_size >= node->ul_size) { -+ list_add_tail(&node->link, &curr->link); - return; - } - } -- /* add our pnode to the end of the freelist */ -- list_add_tail(&pnode->link, &allocator->free_list); -+ list_add_tail(&node->link, &allocator->free_list); - } - - /* -@@ -820,19 +794,10 @@ static void add_to_free_list(struct cmm_allocator *allocator, - static struct cmm_allocator *get_allocator(struct cmm_object *cmm_mgr_obj, - u32 ul_seg_id) - { -- struct cmm_allocator *allocator = NULL; -- - DBC_REQUIRE(cmm_mgr_obj != NULL); - DBC_REQUIRE((ul_seg_id > 0) && (ul_seg_id <= CMM_MAXGPPSEGS)); -- allocator = cmm_mgr_obj->pa_gppsm_seg_tab[ul_seg_id - 1]; -- if (allocator != NULL) { -- /* make sure it's for real */ -- if (!allocator) { -- allocator = NULL; -- DBC_ASSERT(false); -- } -- } -- return allocator; -+ -+ return cmm_mgr_obj->pa_gppsm_seg_tab[ul_seg_id - 1]; - } - - /* -diff --git a/drivers/staging/tidspbridge/pmgr/dev.c b/drivers/staging/tidspbridge/pmgr/dev.c -index 6ce3493..b160b00 100644 ---- a/drivers/staging/tidspbridge/pmgr/dev.c -+++ b/drivers/staging/tidspbridge/pmgr/dev.c -@@ -78,8 +78,8 @@ struct dev_object { - struct ldr_module *module_obj; /* Bridge Module handle. */ - u32 word_size; /* DSP word size: quick access. */ - struct drv_object *hdrv_obj; /* Driver Object */ -- struct list_head proc_list; /* List of Processor attached to -- * this device */ -+ /* List of Processors attached to this device */ -+ struct list_head proc_list; - struct node_mgr *hnode_mgr; - }; - -@@ -787,9 +787,8 @@ bool dev_init(void) - * Purpose: - * Notify all clients of this device of a change in device status. - */ --int dev_notify_clients(struct dev_object *hdev_obj, u32 ret) -+int dev_notify_clients(struct dev_object *dev_obj, u32 ret) - { -- struct dev_object *dev_obj = hdev_obj; - struct list_head *curr; - - /* -@@ -797,7 +796,7 @@ int dev_notify_clients(struct dev_object *hdev_obj, u32 ret) - * at the begining. If not, this can go horribly wrong. - */ - list_for_each(curr, &dev_obj->proc_list) -- proc_notify_clients((void *)curr, (u32) ret); -+ proc_notify_clients((void *)curr, ret); - - return 0; - } -@@ -981,7 +980,6 @@ static int init_cod_mgr(struct dev_object *dev_obj) - int dev_insert_proc_object(struct dev_object *hdev_obj, - u32 proc_obj, bool *already_attached) - { -- int status = 0; - struct dev_object *dev_obj = (struct dev_object *)hdev_obj; - - DBC_REQUIRE(refs > 0); -@@ -998,9 +996,7 @@ int dev_insert_proc_object(struct dev_object *hdev_obj, - */ - list_add_tail((struct list_head *)proc_obj, &dev_obj->proc_list); - -- DBC_ENSURE(!status && !list_empty(&dev_obj->proc_list)); -- -- return status; -+ return 0; - } - - /* -@@ -1043,14 +1039,10 @@ int dev_remove_proc_object(struct dev_object *hdev_obj, u32 proc_obj) - return status; - } - --int dev_get_dev_type(struct dev_object *device_obj, u8 *dev_type) -+int dev_get_dev_type(struct dev_object *dev_obj, u8 *dev_type) - { -- int status = 0; -- struct dev_object *dev_obj = (struct dev_object *)device_obj; -- - *dev_type = dev_obj->dev_type; -- -- return status; -+ return 0; - } - - /* --- -1.7.1 - diff --git a/patches/dspbridge/0017-staging-tidspbridge-use-the-right-type-for-list_is_l.patch b/patches/dspbridge/0017-staging-tidspbridge-use-the-right-type-for-list_is_l.patch deleted file mode 100644 index 4ef3c4054ec4ad1c1a62053092c8d69f8d536fc1..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0017-staging-tidspbridge-use-the-right-type-for-list_is_l.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 1ca6a88c11ada8e7e8a66640f19b7655a21d31bd Mon Sep 17 00:00:00 2001 -From: Omar Ramirez Luna <omar.ramirez@ti.com> -Date: Wed, 8 Dec 2010 22:20:23 +0000 -Subject: [PATCH 17/25] staging: tidspbridge: use the right type for list_is_last - -Removes the following warning: - - CC [M] drivers/staging/tidspbridge/rmgr/rmm.o -drivers/staging/tidspbridge/rmgr/rmm.c: In function 'rmm_alloc': -drivers/staging/tidspbridge/rmgr/rmm.c:147: warning: passing - argument 1 of 'list_is_last' from incompatible pointer type -include/linux/list.h:170: note: expected 'const struct list_head *' - but argument is of type 'struct rmm_ovly_sect *' - -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> -Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> -Acked-by: Ionut Nicu <ionut.nicu@mindbit.ro> ---- - drivers/staging/tidspbridge/rmgr/rmm.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/drivers/staging/tidspbridge/rmgr/rmm.c b/drivers/staging/tidspbridge/rmgr/rmm.c -index aae8657..5a3f09c 100644 ---- a/drivers/staging/tidspbridge/rmgr/rmm.c -+++ b/drivers/staging/tidspbridge/rmgr/rmm.c -@@ -144,7 +144,7 @@ int rmm_alloc(struct rmm_target_obj *target, u32 segid, u32 size, - new_sect->addr = addr; - new_sect->size = size; - new_sect->page = segid; -- if (list_is_last(sect, &target->ovly_list)) -+ if (list_is_last(§->list_elem, &target->ovly_list)) - /* Put new section at the end of the list */ - list_add_tail(&new_sect->list_elem, - &target->ovly_list); --- -1.7.1 - diff --git a/patches/dspbridge/0018-staging-tidspbridge-rmgr-node.c-code-cleanup.patch b/patches/dspbridge/0018-staging-tidspbridge-rmgr-node.c-code-cleanup.patch deleted file mode 100644 index af50e5f1523acd737c1e2f0154d59764fac02dc6..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0018-staging-tidspbridge-rmgr-node.c-code-cleanup.patch +++ /dev/null @@ -1,778 +0,0 @@ -From af739aebde1578e39329089e1f6e3a9efbff3dfc Mon Sep 17 00:00:00 2001 -From: Ionut Nicu <ionut.nicu@gmail.com> -Date: Thu, 9 Dec 2010 21:47:37 +0000 -Subject: [PATCH 18/25] staging: tidspbridge: rmgr/node.c code cleanup - -Reorganized some code in rmgr/node.c to increase its -readability. Most of the changes reduce the code -indentation level and simplifiy the code. No functional -changes were done. - -Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/rmgr/node.c | 607 ++++++++++++++---------------- - 1 files changed, 283 insertions(+), 324 deletions(-) - -diff --git a/drivers/staging/tidspbridge/rmgr/node.c b/drivers/staging/tidspbridge/rmgr/node.c -index 62d5c31..b196a7a 100644 ---- a/drivers/staging/tidspbridge/rmgr/node.c -+++ b/drivers/staging/tidspbridge/rmgr/node.c -@@ -236,9 +236,9 @@ struct node_object { - - /* Default buffer attributes */ - static struct dsp_bufferattr node_dfltbufattrs = { -- 0, /* cb_struct */ -- 1, /* segment_id */ -- 0, /* buf_alignment */ -+ .cb_struct = 0, -+ .segment_id = 1, -+ .buf_alignment = 0, - }; - - static void delete_node(struct node_object *hnode, -@@ -284,8 +284,7 @@ enum node_state node_get_state(void *hnode) - struct node_object *pnode = (struct node_object *)hnode; - if (!pnode) - return -1; -- else -- return pnode->node_state; -+ return pnode->node_state; - } - - /* -@@ -844,6 +843,7 @@ int node_connect(struct node_object *node1, u32 stream1, - char *pstr_dev_name = NULL; - enum node_type node1_type = NODE_TASK; - enum node_type node2_type = NODE_TASK; -+ enum dsp_strmmode strm_mode; - struct node_strmdef *pstrm_def; - struct node_strmdef *input = NULL; - struct node_strmdef *output = NULL; -@@ -857,60 +857,49 @@ int node_connect(struct node_object *node1, u32 stream1, - int status = 0; - DBC_REQUIRE(refs > 0); - -- if ((node1 != (struct node_object *)DSP_HGPPNODE && !node1) || -- (node2 != (struct node_object *)DSP_HGPPNODE && !node2)) -- status = -EFAULT; -+ if (!node1 || !node2) -+ return -EFAULT; - -- if (!status) { -- /* The two nodes must be on the same processor */ -- if (node1 != (struct node_object *)DSP_HGPPNODE && -- node2 != (struct node_object *)DSP_HGPPNODE && -- node1->hnode_mgr != node2->hnode_mgr) -- status = -EPERM; -- /* Cannot connect a node to itself */ -- if (node1 == node2) -- status = -EPERM; -+ /* The two nodes must be on the same processor */ -+ if (node1 != (struct node_object *)DSP_HGPPNODE && -+ node2 != (struct node_object *)DSP_HGPPNODE && -+ node1->hnode_mgr != node2->hnode_mgr) -+ return -EPERM; - -- } -- if (!status) { -- /* node_get_type() will return NODE_GPP if hnode = -- * DSP_HGPPNODE. */ -- node1_type = node_get_type(node1); -- node2_type = node_get_type(node2); -- /* Check stream indices ranges */ -- if ((node1_type != NODE_GPP && node1_type != NODE_DEVICE && -- stream1 >= MAX_OUTPUTS(node1)) || (node2_type != NODE_GPP -- && node2_type != -- NODE_DEVICE -- && stream2 >= -- MAX_INPUTS(node2))) -- status = -EINVAL; -- } -- if (!status) { -- /* -- * Only the following types of connections are allowed: -- * task/dais socket < == > task/dais socket -- * task/dais socket < == > device -- * task/dais socket < == > GPP -- * -- * ie, no message nodes, and at least one task or dais -- * socket node. -- */ -- if (node1_type == NODE_MESSAGE || node2_type == NODE_MESSAGE || -- (node1_type != NODE_TASK && node1_type != NODE_DAISSOCKET && -- node2_type != NODE_TASK && node2_type != NODE_DAISSOCKET)) -- status = -EPERM; -- } -+ /* Cannot connect a node to itself */ -+ if (node1 == node2) -+ return -EPERM; -+ -+ /* node_get_type() will return NODE_GPP if hnode = DSP_HGPPNODE. */ -+ node1_type = node_get_type(node1); -+ node2_type = node_get_type(node2); -+ /* Check stream indices ranges */ -+ if ((node1_type != NODE_GPP && node1_type != NODE_DEVICE && -+ stream1 >= MAX_OUTPUTS(node1)) || -+ (node2_type != NODE_GPP && node2_type != NODE_DEVICE && -+ stream2 >= MAX_INPUTS(node2))) -+ return -EINVAL; -+ -+ /* -+ * Only the following types of connections are allowed: -+ * task/dais socket < == > task/dais socket -+ * task/dais socket < == > device -+ * task/dais socket < == > GPP -+ * -+ * ie, no message nodes, and at least one task or dais -+ * socket node. -+ */ -+ if (node1_type == NODE_MESSAGE || node2_type == NODE_MESSAGE || -+ (node1_type != NODE_TASK && -+ node1_type != NODE_DAISSOCKET && -+ node2_type != NODE_TASK && -+ node2_type != NODE_DAISSOCKET)) -+ return -EPERM; - /* - * Check stream mode. Default is STRMMODE_PROCCOPY. - */ -- if (!status && pattrs) { -- if (pattrs->strm_mode != STRMMODE_PROCCOPY) -- status = -EPERM; /* illegal stream mode */ -- -- } -- if (status) -- goto func_end; -+ if (pattrs && pattrs->strm_mode != STRMMODE_PROCCOPY) -+ return -EPERM; /* illegal stream mode */ - - if (node1_type != NODE_GPP) { - hnode_mgr = node1->hnode_mgr; -@@ -918,170 +907,145 @@ int node_connect(struct node_object *node1, u32 stream1, - DBC_ASSERT(node2 != (struct node_object *)DSP_HGPPNODE); - hnode_mgr = node2->hnode_mgr; - } -+ - /* Enter critical section */ - mutex_lock(&hnode_mgr->node_mgr_lock); - - /* Nodes must be in the allocated state */ -- if (node1_type != NODE_GPP && node_get_state(node1) != NODE_ALLOCATED) -+ if (node1_type != NODE_GPP && -+ node_get_state(node1) != NODE_ALLOCATED) { - status = -EBADR; -+ goto out_unlock; -+ } - -- if (node2_type != NODE_GPP && node_get_state(node2) != NODE_ALLOCATED) -+ if (node2_type != NODE_GPP && -+ node_get_state(node2) != NODE_ALLOCATED) { - status = -EBADR; -+ goto out_unlock; -+ } - -- if (!status) { -- /* Check that stream indices for task and dais socket nodes -- * are not already be used. (Device nodes checked later) */ -- if (node1_type == NODE_TASK || node1_type == NODE_DAISSOCKET) { -- output = -- &(node1->create_args.asa. -- task_arg_obj.strm_out_def[stream1]); -- if (output->sz_device != NULL) -- status = -EISCONN; -- -+ /* -+ * Check that stream indices for task and dais socket nodes -+ * are not already be used. (Device nodes checked later) -+ */ -+ if (node1_type == NODE_TASK || node1_type == NODE_DAISSOCKET) { -+ output = &(node1->create_args.asa. -+ task_arg_obj.strm_out_def[stream1]); -+ if (output->sz_device) { -+ status = -EISCONN; -+ goto out_unlock; - } -- if (node2_type == NODE_TASK || node2_type == NODE_DAISSOCKET) { -- input = -- &(node2->create_args.asa. -- task_arg_obj.strm_in_def[stream2]); -- if (input->sz_device != NULL) -- status = -EISCONN; - -+ } -+ if (node2_type == NODE_TASK || node2_type == NODE_DAISSOCKET) { -+ input = &(node2->create_args.asa. -+ task_arg_obj.strm_in_def[stream2]); -+ if (input->sz_device) { -+ status = -EISCONN; -+ goto out_unlock; - } -+ - } - /* Connecting two task nodes? */ -- if (!status && ((node1_type == NODE_TASK || -- node1_type == NODE_DAISSOCKET) -- && (node2_type == NODE_TASK -- || node2_type == NODE_DAISSOCKET))) { -+ if ((node1_type == NODE_TASK || node1_type == NODE_DAISSOCKET) && -+ (node2_type == NODE_TASK || -+ node2_type == NODE_DAISSOCKET)) { - /* Find available pipe */ - pipe_id = find_first_zero_bit(hnode_mgr->pipe_map, MAXPIPES); - if (pipe_id == MAXPIPES) { - status = -ECONNREFUSED; -- } else { -- set_bit(pipe_id, hnode_mgr->pipe_map); -- node1->outputs[stream1].type = NODECONNECT; -- node2->inputs[stream2].type = NODECONNECT; -- node1->outputs[stream1].dev_id = pipe_id; -- node2->inputs[stream2].dev_id = pipe_id; -- output->sz_device = kzalloc(PIPENAMELEN + 1, -- GFP_KERNEL); -- input->sz_device = kzalloc(PIPENAMELEN + 1, GFP_KERNEL); -- if (output->sz_device == NULL || -- input->sz_device == NULL) { -- /* Undo the connection */ -- kfree(output->sz_device); -- -- kfree(input->sz_device); -- -- output->sz_device = NULL; -- input->sz_device = NULL; -- clear_bit(pipe_id, hnode_mgr->pipe_map); -- status = -ENOMEM; -- } else { -- /* Copy "/dbpipe<pipId>" name to device names */ -- sprintf(output->sz_device, "%s%d", -- PIPEPREFIX, pipe_id); -- strcpy(input->sz_device, output->sz_device); -- } -+ goto out_unlock; - } -+ set_bit(pipe_id, hnode_mgr->pipe_map); -+ node1->outputs[stream1].type = NODECONNECT; -+ node2->inputs[stream2].type = NODECONNECT; -+ node1->outputs[stream1].dev_id = pipe_id; -+ node2->inputs[stream2].dev_id = pipe_id; -+ output->sz_device = kzalloc(PIPENAMELEN + 1, GFP_KERNEL); -+ input->sz_device = kzalloc(PIPENAMELEN + 1, GFP_KERNEL); -+ if (!output->sz_device || !input->sz_device) { -+ /* Undo the connection */ -+ kfree(output->sz_device); -+ kfree(input->sz_device); -+ clear_bit(pipe_id, hnode_mgr->pipe_map); -+ status = -ENOMEM; -+ goto out_unlock; -+ } -+ /* Copy "/dbpipe<pipId>" name to device names */ -+ sprintf(output->sz_device, "%s%d", PIPEPREFIX, pipe_id); -+ strcpy(input->sz_device, output->sz_device); - } - /* Connecting task node to host? */ -- if (!status && (node1_type == NODE_GPP || -- node2_type == NODE_GPP)) { -- if (node1_type == NODE_GPP) { -- chnl_mode = CHNL_MODETODSP; -- } else { -- DBC_ASSERT(node2_type == NODE_GPP); -- chnl_mode = CHNL_MODEFROMDSP; -+ if (node1_type == NODE_GPP || node2_type == NODE_GPP) { -+ pstr_dev_name = kzalloc(HOSTNAMELEN + 1, GFP_KERNEL); -+ if (!pstr_dev_name) { -+ status = -ENOMEM; -+ goto out_unlock; - } -- /* Reserve a channel id. We need to put the name "/host<id>" -+ -+ DBC_ASSERT((node1_type == NODE_GPP) || -+ (node2_type == NODE_GPP)); -+ -+ chnl_mode = (node1_type == NODE_GPP) ? -+ CHNL_MODETODSP : CHNL_MODEFROMDSP; -+ -+ /* -+ * Reserve a channel id. We need to put the name "/host<id>" - * in the node's create_args, but the host - * side channel will not be opened until DSPStream_Open is -- * called for this node. */ -- if (pattrs) { -- if (pattrs->strm_mode == STRMMODE_RDMA) { -- chnl_id = find_first_zero_bit( -- hnode_mgr->dma_chnl_map, -- CHNL_MAXCHANNELS); -+ * called for this node. -+ */ -+ strm_mode = pattrs ? pattrs->strm_mode : STRMMODE_PROCCOPY; -+ switch (strm_mode) { -+ case STRMMODE_RDMA: -+ chnl_id = find_first_zero_bit(hnode_mgr->dma_chnl_map, -+ CHNL_MAXCHANNELS); -+ if (chnl_id < CHNL_MAXCHANNELS) { -+ set_bit(chnl_id, hnode_mgr->dma_chnl_map); - /* dma chans are 2nd transport chnl set - * ids(e.g. 16-31) */ -- if (chnl_id != CHNL_MAXCHANNELS) { -- set_bit(chnl_id, -- hnode_mgr->dma_chnl_map); -- chnl_id = chnl_id + -- hnode_mgr->ul_num_chnls; -- } -- } else if (pattrs->strm_mode == STRMMODE_ZEROCOPY) { -- chnl_id = find_first_zero_bit( -- hnode_mgr->zc_chnl_map, -- CHNL_MAXCHANNELS); -+ chnl_id = chnl_id + hnode_mgr->ul_num_chnls; -+ } -+ break; -+ case STRMMODE_ZEROCOPY: -+ chnl_id = find_first_zero_bit(hnode_mgr->zc_chnl_map, -+ CHNL_MAXCHANNELS); -+ if (chnl_id < CHNL_MAXCHANNELS) { -+ set_bit(chnl_id, hnode_mgr->zc_chnl_map); - /* zero-copy chans are 3nd transport set - * (e.g. 32-47) */ -- if (chnl_id != CHNL_MAXCHANNELS) { -- set_bit(chnl_id, -- hnode_mgr->zc_chnl_map); -- chnl_id = chnl_id + -- (2 * hnode_mgr->ul_num_chnls); -- } -- } else { /* must be PROCCOPY */ -- DBC_ASSERT(pattrs->strm_mode == -- STRMMODE_PROCCOPY); -- chnl_id = find_first_zero_bit( -- hnode_mgr->chnl_map, -- CHNL_MAXCHANNELS); -- /* e.g. 0-15 */ -- if (chnl_id != CHNL_MAXCHANNELS) -- set_bit(chnl_id, hnode_mgr->chnl_map); -+ chnl_id = chnl_id + -+ (2 * hnode_mgr->ul_num_chnls); - } -- } else { -- /* default to PROCCOPY */ -+ break; -+ case STRMMODE_PROCCOPY: - chnl_id = find_first_zero_bit(hnode_mgr->chnl_map, - CHNL_MAXCHANNELS); -- if (chnl_id != CHNL_MAXCHANNELS) -+ if (chnl_id < CHNL_MAXCHANNELS) - set_bit(chnl_id, hnode_mgr->chnl_map); -+ break; -+ default: -+ status = -EINVAL; -+ goto out_unlock; - } - if (chnl_id == CHNL_MAXCHANNELS) { - status = -ECONNREFUSED; -- goto func_cont2; -+ goto out_unlock; - } -- pstr_dev_name = kzalloc(HOSTNAMELEN + 1, GFP_KERNEL); -- if (pstr_dev_name != NULL) -- goto func_cont2; -- -- if (pattrs) { -- if (pattrs->strm_mode == STRMMODE_RDMA) { -- clear_bit(chnl_id - hnode_mgr->ul_num_chnls, -- hnode_mgr->dma_chnl_map); -- } else if (pattrs->strm_mode == STRMMODE_ZEROCOPY) { -- clear_bit(chnl_id - -- (2 * hnode_mgr->ul_num_chnls), -- hnode_mgr->zc_chnl_map); -- } else { -- DBC_ASSERT(pattrs->strm_mode == -- STRMMODE_PROCCOPY); -- clear_bit(chnl_id, hnode_mgr->chnl_map); -- } -+ -+ if (node1 == (struct node_object *)DSP_HGPPNODE) { -+ node2->inputs[stream2].type = HOSTCONNECT; -+ node2->inputs[stream2].dev_id = chnl_id; -+ input->sz_device = pstr_dev_name; - } else { -- clear_bit(chnl_id, hnode_mgr->chnl_map); -- } -- status = -ENOMEM; --func_cont2: -- if (!status) { -- if (node1 == (struct node_object *)DSP_HGPPNODE) { -- node2->inputs[stream2].type = HOSTCONNECT; -- node2->inputs[stream2].dev_id = chnl_id; -- input->sz_device = pstr_dev_name; -- } else { -- node1->outputs[stream1].type = HOSTCONNECT; -- node1->outputs[stream1].dev_id = chnl_id; -- output->sz_device = pstr_dev_name; -- } -- sprintf(pstr_dev_name, "%s%d", HOSTPREFIX, chnl_id); -+ node1->outputs[stream1].type = HOSTCONNECT; -+ node1->outputs[stream1].dev_id = chnl_id; -+ output->sz_device = pstr_dev_name; - } -+ sprintf(pstr_dev_name, "%s%d", HOSTPREFIX, chnl_id); - } - /* Connecting task node to device node? */ -- if (!status && ((node1_type == NODE_DEVICE) || -- (node2_type == NODE_DEVICE))) { -+ if ((node1_type == NODE_DEVICE) || (node2_type == NODE_DEVICE)) { - if (node2_type == NODE_DEVICE) { - /* node1 == > device */ - dev_node_obj = node2; -@@ -1098,60 +1062,58 @@ func_cont2: - /* Set up create args */ - pstream->type = DEVICECONNECT; - dw_length = strlen(dev_node_obj->pstr_dev_name); -- if (conn_param != NULL) { -+ if (conn_param) - pstrm_def->sz_device = kzalloc(dw_length + 1 + -- conn_param->cb_data, -- GFP_KERNEL); -- } else { -+ conn_param->cb_data, -+ GFP_KERNEL); -+ else - pstrm_def->sz_device = kzalloc(dw_length + 1, -- GFP_KERNEL); -- } -- if (pstrm_def->sz_device == NULL) { -+ GFP_KERNEL); -+ if (!pstrm_def->sz_device) { - status = -ENOMEM; -- } else { -- /* Copy device name */ -- strncpy(pstrm_def->sz_device, -+ goto out_unlock; -+ } -+ /* Copy device name */ -+ strncpy(pstrm_def->sz_device, - dev_node_obj->pstr_dev_name, dw_length); -- if (conn_param != NULL) { -- strncat(pstrm_def->sz_device, -+ if (conn_param) -+ strncat(pstrm_def->sz_device, - (char *)conn_param->node_data, - (u32) conn_param->cb_data); -- } -- dev_node_obj->device_owner = hnode; -- } -+ dev_node_obj->device_owner = hnode; - } -- if (!status) { -- /* Fill in create args */ -- if (node1_type == NODE_TASK || node1_type == NODE_DAISSOCKET) { -- node1->create_args.asa.task_arg_obj.num_outputs++; -- fill_stream_def(node1, output, pattrs); -- } -- if (node2_type == NODE_TASK || node2_type == NODE_DAISSOCKET) { -- node2->create_args.asa.task_arg_obj.num_inputs++; -- fill_stream_def(node2, input, pattrs); -- } -- /* Update node1 and node2 stream_connect */ -- if (node1_type != NODE_GPP && node1_type != NODE_DEVICE) { -- node1->num_outputs++; -- if (stream1 > node1->max_output_index) -- node1->max_output_index = stream1; -+ /* Fill in create args */ -+ if (node1_type == NODE_TASK || node1_type == NODE_DAISSOCKET) { -+ node1->create_args.asa.task_arg_obj.num_outputs++; -+ fill_stream_def(node1, output, pattrs); -+ } -+ if (node2_type == NODE_TASK || node2_type == NODE_DAISSOCKET) { -+ node2->create_args.asa.task_arg_obj.num_inputs++; -+ fill_stream_def(node2, input, pattrs); -+ } -+ /* Update node1 and node2 stream_connect */ -+ if (node1_type != NODE_GPP && node1_type != NODE_DEVICE) { -+ node1->num_outputs++; -+ if (stream1 > node1->max_output_index) -+ node1->max_output_index = stream1; - -- } -- if (node2_type != NODE_GPP && node2_type != NODE_DEVICE) { -- node2->num_inputs++; -- if (stream2 > node2->max_input_index) -- node2->max_input_index = stream2; -+ } -+ if (node2_type != NODE_GPP && node2_type != NODE_DEVICE) { -+ node2->num_inputs++; -+ if (stream2 > node2->max_input_index) -+ node2->max_input_index = stream2; - -- } -- fill_stream_connect(node1, node2, stream1, stream2); - } -+ fill_stream_connect(node1, node2, stream1, stream2); - /* end of sync_enter_cs */ - /* Exit critical section */ -+out_unlock: -+ if (status && pstr_dev_name) -+ kfree(pstr_dev_name); - mutex_unlock(&hnode_mgr->node_mgr_lock); --func_end: - dev_dbg(bridge, "%s: node1: %p stream1: %d node2: %p stream2: %d" -- "pattrs: %p status: 0x%x\n", __func__, node1, -- stream1, node2, stream2, pattrs, status); -+ "pattrs: %p status: 0x%x\n", __func__, node1, -+ stream1, node2, stream2, pattrs, status); - return status; - } - -@@ -1329,6 +1291,7 @@ int node_create_mgr(struct node_mgr **node_man, - struct nldr_attrs nldr_attrs_obj; - int status = 0; - u8 dev_type; -+ - DBC_REQUIRE(refs > 0); - DBC_REQUIRE(node_man != NULL); - DBC_REQUIRE(hdev_obj != NULL); -@@ -1336,90 +1299,89 @@ int node_create_mgr(struct node_mgr **node_man, - *node_man = NULL; - /* Allocate Node manager object */ - node_mgr_obj = kzalloc(sizeof(struct node_mgr), GFP_KERNEL); -- if (node_mgr_obj) { -- node_mgr_obj->hdev_obj = hdev_obj; -- INIT_LIST_HEAD(&node_mgr_obj->node_list); -- node_mgr_obj->ntfy_obj = kmalloc( -- sizeof(struct ntfy_object), GFP_KERNEL); -- if (node_mgr_obj->ntfy_obj) -- ntfy_init(node_mgr_obj->ntfy_obj); -- else -- status = -ENOMEM; -- node_mgr_obj->num_created = 0; -- } else { -+ if (!node_mgr_obj) -+ return -ENOMEM; -+ -+ node_mgr_obj->hdev_obj = hdev_obj; -+ -+ node_mgr_obj->ntfy_obj = kmalloc(sizeof(struct ntfy_object), -+ GFP_KERNEL); -+ if (!node_mgr_obj->ntfy_obj) { - status = -ENOMEM; -+ goto out_err; - } -- /* get devNodeType */ -- if (!status) -- status = dev_get_dev_type(hdev_obj, &dev_type); -+ ntfy_init(node_mgr_obj->ntfy_obj); - -- /* Create the DCD Manager */ -- if (!status) { -- status = -- dcd_create_manager(sz_zl_file, &node_mgr_obj->hdcd_mgr); -- if (!status) -- status = get_proc_props(node_mgr_obj, hdev_obj); -+ INIT_LIST_HEAD(&node_mgr_obj->node_list); -+ -+ dev_get_dev_type(hdev_obj, &dev_type); -+ -+ status = dcd_create_manager(sz_zl_file, &node_mgr_obj->hdcd_mgr); -+ if (status) -+ goto out_err; -+ -+ status = get_proc_props(node_mgr_obj, hdev_obj); -+ if (status) -+ goto out_err; - -- } - /* Create NODE Dispatcher */ -- if (!status) { -- disp_attr_obj.ul_chnl_offset = node_mgr_obj->ul_chnl_offset; -- disp_attr_obj.ul_chnl_buf_size = node_mgr_obj->ul_chnl_buf_size; -- disp_attr_obj.proc_family = node_mgr_obj->proc_family; -- disp_attr_obj.proc_type = node_mgr_obj->proc_type; -- status = -- disp_create(&node_mgr_obj->disp_obj, hdev_obj, -- &disp_attr_obj); -- } -+ disp_attr_obj.ul_chnl_offset = node_mgr_obj->ul_chnl_offset; -+ disp_attr_obj.ul_chnl_buf_size = node_mgr_obj->ul_chnl_buf_size; -+ disp_attr_obj.proc_family = node_mgr_obj->proc_family; -+ disp_attr_obj.proc_type = node_mgr_obj->proc_type; -+ -+ status = disp_create(&node_mgr_obj->disp_obj, hdev_obj, &disp_attr_obj); -+ if (status) -+ goto out_err; -+ - /* Create a STRM Manager */ -- if (!status) -- status = strm_create(&node_mgr_obj->strm_mgr_obj, hdev_obj); -+ status = strm_create(&node_mgr_obj->strm_mgr_obj, hdev_obj); -+ if (status) -+ goto out_err; - -- if (!status) { -- dev_get_intf_fxns(hdev_obj, &node_mgr_obj->intf_fxns); -- /* Get msg_ctrl queue manager */ -- dev_get_msg_mgr(hdev_obj, &node_mgr_obj->msg_mgr_obj); -- mutex_init(&node_mgr_obj->node_mgr_lock); -- /* Block out reserved channels */ -- for (i = 0; i < node_mgr_obj->ul_chnl_offset; i++) -- set_bit(i, node_mgr_obj->chnl_map); -- -- /* Block out channels reserved for RMS */ -- set_bit(node_mgr_obj->ul_chnl_offset, node_mgr_obj->chnl_map); -- set_bit(node_mgr_obj->ul_chnl_offset + 1, -- node_mgr_obj->chnl_map); -- } -- if (!status) { -- /* NO RM Server on the IVA */ -- if (dev_type != IVA_UNIT) { -- /* Get addresses of any RMS functions loaded */ -- status = get_rms_fxns(node_mgr_obj); -- } -+ dev_get_intf_fxns(hdev_obj, &node_mgr_obj->intf_fxns); -+ /* Get msg_ctrl queue manager */ -+ dev_get_msg_mgr(hdev_obj, &node_mgr_obj->msg_mgr_obj); -+ mutex_init(&node_mgr_obj->node_mgr_lock); -+ -+ /* Block out reserved channels */ -+ for (i = 0; i < node_mgr_obj->ul_chnl_offset; i++) -+ set_bit(i, node_mgr_obj->chnl_map); -+ -+ /* Block out channels reserved for RMS */ -+ set_bit(node_mgr_obj->ul_chnl_offset, node_mgr_obj->chnl_map); -+ set_bit(node_mgr_obj->ul_chnl_offset + 1, node_mgr_obj->chnl_map); -+ -+ /* NO RM Server on the IVA */ -+ if (dev_type != IVA_UNIT) { -+ /* Get addresses of any RMS functions loaded */ -+ status = get_rms_fxns(node_mgr_obj); -+ if (status) -+ goto out_err; - } - - /* Get loader functions and create loader */ -- if (!status) -- node_mgr_obj->nldr_fxns = nldr_fxns; /* Dyn loader funcs */ -+ node_mgr_obj->nldr_fxns = nldr_fxns; /* Dyn loader funcs */ -+ -+ nldr_attrs_obj.pfn_ovly = ovly; -+ nldr_attrs_obj.pfn_write = mem_write; -+ nldr_attrs_obj.us_dsp_word_size = node_mgr_obj->udsp_word_size; -+ nldr_attrs_obj.us_dsp_mau_size = node_mgr_obj->udsp_mau_size; -+ node_mgr_obj->loader_init = node_mgr_obj->nldr_fxns.pfn_init(); -+ status = node_mgr_obj->nldr_fxns.pfn_create(&node_mgr_obj->nldr_obj, -+ hdev_obj, -+ &nldr_attrs_obj); -+ if (status) -+ goto out_err; - -- if (!status) { -- nldr_attrs_obj.pfn_ovly = ovly; -- nldr_attrs_obj.pfn_write = mem_write; -- nldr_attrs_obj.us_dsp_word_size = node_mgr_obj->udsp_word_size; -- nldr_attrs_obj.us_dsp_mau_size = node_mgr_obj->udsp_mau_size; -- node_mgr_obj->loader_init = node_mgr_obj->nldr_fxns.pfn_init(); -- status = -- node_mgr_obj->nldr_fxns.pfn_create(&node_mgr_obj->nldr_obj, -- hdev_obj, -- &nldr_attrs_obj); -- } -- if (!status) -- *node_man = node_mgr_obj; -- else -- delete_node_mgr(node_mgr_obj); -+ *node_man = node_mgr_obj; - - DBC_ENSURE((status && *node_man == NULL) || (!status && *node_man)); - - return status; -+out_err: -+ delete_node_mgr(node_mgr_obj); -+ return status; - } - - /* -@@ -1593,16 +1555,14 @@ func_end: - */ - int node_delete_mgr(struct node_mgr *hnode_mgr) - { -- int status = 0; -- - DBC_REQUIRE(refs > 0); - -- if (hnode_mgr) -- delete_node_mgr(hnode_mgr); -- else -- status = -EFAULT; -+ if (!hnode_mgr) -+ return -EFAULT; - -- return status; -+ delete_node_mgr(hnode_mgr); -+ -+ return 0; - } - - /* -@@ -1710,38 +1670,37 @@ int node_get_attr(struct node_object *hnode, - struct dsp_nodeattr *pattr, u32 attr_size) - { - struct node_mgr *hnode_mgr; -- int status = 0; - DBC_REQUIRE(refs > 0); - DBC_REQUIRE(pattr != NULL); - DBC_REQUIRE(attr_size >= sizeof(struct dsp_nodeattr)); - -- if (!hnode) { -- status = -EFAULT; -- } else { -- hnode_mgr = hnode->hnode_mgr; -- /* Enter hnode_mgr critical section (since we're accessing -- * data that could be changed by node_change_priority() and -- * node_connect(). */ -- mutex_lock(&hnode_mgr->node_mgr_lock); -- pattr->cb_struct = sizeof(struct dsp_nodeattr); -- /* dsp_nodeattrin */ -- pattr->in_node_attr_in.cb_struct = -- sizeof(struct dsp_nodeattrin); -- pattr->in_node_attr_in.prio = hnode->prio; -- pattr->in_node_attr_in.utimeout = hnode->utimeout; -- pattr->in_node_attr_in.heap_size = -- hnode->create_args.asa.task_arg_obj.heap_size; -- pattr->in_node_attr_in.pgpp_virt_addr = (void *) -- hnode->create_args.asa.task_arg_obj.ugpp_heap_addr; -- pattr->node_attr_inputs = hnode->num_gpp_inputs; -- pattr->node_attr_outputs = hnode->num_gpp_outputs; -- /* dsp_nodeinfo */ -- get_node_info(hnode, &(pattr->node_info)); -- /* end of sync_enter_cs */ -- /* Exit critical section */ -- mutex_unlock(&hnode_mgr->node_mgr_lock); -- } -- return status; -+ if (!hnode) -+ return -EFAULT; -+ -+ hnode_mgr = hnode->hnode_mgr; -+ /* Enter hnode_mgr critical section (since we're accessing -+ * data that could be changed by node_change_priority() and -+ * node_connect(). */ -+ mutex_lock(&hnode_mgr->node_mgr_lock); -+ pattr->cb_struct = sizeof(struct dsp_nodeattr); -+ /* dsp_nodeattrin */ -+ pattr->in_node_attr_in.cb_struct = -+ sizeof(struct dsp_nodeattrin); -+ pattr->in_node_attr_in.prio = hnode->prio; -+ pattr->in_node_attr_in.utimeout = hnode->utimeout; -+ pattr->in_node_attr_in.heap_size = -+ hnode->create_args.asa.task_arg_obj.heap_size; -+ pattr->in_node_attr_in.pgpp_virt_addr = (void *) -+ hnode->create_args.asa.task_arg_obj.ugpp_heap_addr; -+ pattr->node_attr_inputs = hnode->num_gpp_inputs; -+ pattr->node_attr_outputs = hnode->num_gpp_outputs; -+ /* dsp_nodeinfo */ -+ get_node_info(hnode, &(pattr->node_info)); -+ /* end of sync_enter_cs */ -+ /* Exit critical section */ -+ mutex_unlock(&hnode_mgr->node_mgr_lock); -+ -+ return 0; - } - - /* --- -1.7.1 - diff --git a/patches/dspbridge/0019-staging-tidspbridge-Fix-atoi-to-support-hexadecimal-.patch b/patches/dspbridge/0019-staging-tidspbridge-Fix-atoi-to-support-hexadecimal-.patch deleted file mode 100644 index 43bae2c43dab43774c71cef2e23742922a45b5c3..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0019-staging-tidspbridge-Fix-atoi-to-support-hexadecimal-.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 4bd6f769210d915f0298e92a2e661aef231e8f96 Mon Sep 17 00:00:00 2001 -From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> -Date: Sun, 12 Dec 2010 13:39:37 +0000 -Subject: [PATCH 19/25] staging: tidspbridge: Fix atoi to support hexadecimal numbers correctly - -For some strange reason, the DSP base image node/object properties -description string stores hexadecimal numbers with a 'h' or 'H' suffix -instead of a '0x' prefix. This causes parsing issue because the -dspbridge atoi() implementation relies on strict_strtoul(), which will -return an error because of the trailing 'h' character. - -As the atoi() return value is never checked for an error anyway, replace -strict_strtoul() with simple_strtoul() to ignore the suffix. - -This fix gets rid of the following assertion failed messages that were -printed when running the dsp-dummy test application. - -drivers/staging/tidspbridge/rmgr/nldr.c, line 1691: -Assertion (segid == MEMINTERNALID || segid == MEMEXTERNALID) failed. - -Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/rmgr/dbdcd.c | 6 +----- - 1 files changed, 1 insertions(+), 5 deletions(-) - -diff --git a/drivers/staging/tidspbridge/rmgr/dbdcd.c b/drivers/staging/tidspbridge/rmgr/dbdcd.c -index 3581a55..b76f26c 100644 ---- a/drivers/staging/tidspbridge/rmgr/dbdcd.c -+++ b/drivers/staging/tidspbridge/rmgr/dbdcd.c -@@ -1020,8 +1020,6 @@ static s32 atoi(char *psz_buf) - { - char *pch = psz_buf; - s32 base = 0; -- unsigned long res; -- int ret_val; - - while (isspace(*pch)) - pch++; -@@ -1033,9 +1031,7 @@ static s32 atoi(char *psz_buf) - base = 16; - } - -- ret_val = strict_strtoul(pch, base, &res); -- -- return ret_val ? : res; -+ return simple_strtoul(pch, NULL, base); - } - - /* --- -1.7.1 - diff --git a/patches/dspbridge/0020-staging-tidspbridge-Remove-unused-defined-constants.patch b/patches/dspbridge/0020-staging-tidspbridge-Remove-unused-defined-constants.patch deleted file mode 100644 index ce20789018ea6364c05bf662ec0560812e2d12a6..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0020-staging-tidspbridge-Remove-unused-defined-constants.patch +++ /dev/null @@ -1,519 +0,0 @@ -From 1167b7417468a42dd082de49ef48195593a4847d Mon Sep 17 00:00:00 2001 -From: Armando Uribe <x0095078@ti.com> -Date: Fri, 17 Dec 2010 01:18:29 -0600 -Subject: [PATCH 20/25] staging: tidspbridge - Remove unused defined constants - -Remove defined constants not being used. - -Signed-off-by: Armando Uribe <x0095078@ti.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - .../tidspbridge/include/dspbridge/brddefs.h | 2 - - .../tidspbridge/include/dspbridge/cfgdefs.h | 13 ------ - .../tidspbridge/include/dspbridge/chnldefs.h | 3 - - .../tidspbridge/include/dspbridge/chnlpriv.h | 13 ------ - .../staging/tidspbridge/include/dspbridge/cod.h | 3 - - .../staging/tidspbridge/include/dspbridge/dbdefs.h | 26 ------------- - .../tidspbridge/include/dspbridge/dbldefs.h | 11 ----- - .../tidspbridge/include/dspbridge/dehdefs.h | 1 - - .../staging/tidspbridge/include/dspbridge/drv.h | 15 ------- - .../tidspbridge/include/dspbridge/dspdefs.h | 6 --- - .../staging/tidspbridge/include/dspbridge/dspdrv.h | 2 - - .../tidspbridge/include/dspbridge/dspioctl.h | 5 -- - .../tidspbridge/include/dspbridge/dynamic_loader.h | 2 - - .../staging/tidspbridge/include/dspbridge/io_sm.h | 1 - - .../staging/tidspbridge/include/dspbridge/iodefs.h | 2 - - .../staging/tidspbridge/include/dspbridge/mbx_sh.h | 40 -------------------- - .../staging/tidspbridge/include/dspbridge/pwr_sh.h | 4 -- - .../staging/tidspbridge/include/dspbridge/rms_sh.h | 9 ---- - .../tidspbridge/include/dspbridge/strmdefs.h | 2 - - drivers/staging/tidspbridge/pmgr/dev.c | 2 +- - 20 files changed, 1 insertions(+), 161 deletions(-) - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/brddefs.h b/drivers/staging/tidspbridge/include/dspbridge/brddefs.h -index f80d9a5..725d7b3 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/brddefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/brddefs.h -@@ -24,9 +24,7 @@ - #define BRD_IDLE 0x1 /* Monitor Loaded, but suspended. */ - #define BRD_RUNNING 0x2 /* Monitor loaded, and executing. */ - #define BRD_UNKNOWN 0x3 /* Board state is indeterminate. */ --#define BRD_SYNCINIT 0x4 - #define BRD_LOADED 0x5 --#define BRD_LASTSTATE BRD_LOADED /* Set to highest legal board state. */ - #define BRD_SLEEP_TRANSITION 0x6 /* Sleep transition in progress */ - #define BRD_HIBERNATION 0x7 /* MPU initiated hibernation */ - #define BRD_RETENTION 0x8 /* Retention mode */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h b/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h -index f403c01..c3f04f8 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h -@@ -19,25 +19,12 @@ - #ifndef CFGDEFS_ - #define CFGDEFS_ - --/* Maximum length of module search path. */ --#define CFG_MAXSEARCHPATHLEN 255 -- --/* Maximum length of general paths. */ --#define CFG_MAXPATH 255 -- - /* Host Resources: */ - #define CFG_MAXMEMREGISTERS 9 --#define CFG_MAXIOPORTS 20 --#define CFG_MAXIRQS 7 --#define CFG_MAXDMACHANNELS 7 - - /* IRQ flag */ - #define CFG_IRQSHARED 0x01 /* IRQ can be shared */ - --/* DSP Resources: */ --#define CFG_DSPMAXMEMTYPES 10 --#define CFG_DEFAULT_NUM_WINDOWS 1 /* We support only one window. */ -- - /* A platform-related device handle: */ - struct cfg_devnode; - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/chnldefs.h b/drivers/staging/tidspbridge/include/dspbridge/chnldefs.h -index 5bf5f6b..8f8f9ec 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/chnldefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/chnldefs.h -@@ -22,9 +22,6 @@ - /* Channel id option. */ - #define CHNL_PICKFREE (~0UL) /* Let manager pick a free channel. */ - --/* Channel manager limits: */ --#define CHNL_INITIOREQS 4 /* Default # of I/O requests. */ -- - /* Channel modes */ - #define CHNL_MODETODSP 0 /* Data streaming to the DSP. */ - #define CHNL_MODEFROMDSP 1 /* Data streaming from the DSP. */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/chnlpriv.h b/drivers/staging/tidspbridge/include/dspbridge/chnlpriv.h -index 9292100..1785c3e 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/chnlpriv.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/chnlpriv.h -@@ -39,12 +39,6 @@ - */ - #define CHNL_PCPY 0 /* Proc-copy transport 0 */ - --#define CHNL_MAXIRQ 0xff /* Arbitrarily large number. */ -- --/* The following modes are private: */ --#define CHNL_MODEUSEREVENT 0x1000 /* User provided the channel event. */ --#define CHNL_MODEMASK 0x1001 -- - /* Higher level channel states: */ - #define CHNL_STATEREADY 0 /* Channel ready for I/O. */ - #define CHNL_STATECANCEL 1 /* I/O was cancelled. */ -@@ -56,13 +50,6 @@ - - /* Types of channel class libraries: */ - #define CHNL_TYPESM 1 /* Shared memory driver. */ --#define CHNL_TYPEBM 2 /* Bus Mastering driver. */ -- --/* Max string length of channel I/O completion event name - change if needed */ --#define CHNL_MAXEVTNAMELEN 32 -- --/* Max memory pages lockable in CHNL_PrepareBuffer() - change if needed */ --#define CHNL_MAXLOCKPAGES 64 - - /* Channel info. */ - struct chnl_info { -diff --git a/drivers/staging/tidspbridge/include/dspbridge/cod.h b/drivers/staging/tidspbridge/include/dspbridge/cod.h -index 42bce2e..5efea91 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/cod.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/cod.h -@@ -27,9 +27,6 @@ - #define COD_TRACEBEG "SYS_PUTCBEG" - #define COD_TRACEEND "SYS_PUTCEND" - #define COD_TRACECURPOS "BRIDGE_SYS_PUTC_current" --#define COD_TRACESECT "trace" --#define COD_TRACEBEGOLD "PUTCBEG" --#define COD_TRACEENDOLD "PUTCEND" - - #define COD_NOLOAD DBLL_NOLOAD - #define COD_SYMB DBLL_SYMB -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dbdefs.h b/drivers/staging/tidspbridge/include/dspbridge/dbdefs.h -index 5af075d..38fffeb 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dbdefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dbdefs.h -@@ -31,9 +31,6 @@ - /* API return value and calling convention */ - #define DBAPI int - --/* Infinite time value for the utimeout parameter to DSPStream_Select() */ --#define DSP_FOREVER (-1) -- - /* Maximum length of node name, used in dsp_ndbprops */ - #define DSP_MAXNAMELEN 32 - -@@ -74,16 +71,9 @@ - #define DSP_NODE_MIN_PRIORITY 1 - #define DSP_NODE_MAX_PRIORITY 15 - --/* Pre-Defined Message Command Codes available to user: */ --#define DSP_RMSUSERCODESTART RMS_USER /* Start of RMS user cmd codes */ --/* end of user codes */ --#define DSP_RMSUSERCODEEND (RMS_USER + RMS_MAXUSERCODES); - /* msg_ctrl contains SM buffer description */ - #define DSP_RMSBUFDESC RMS_BUFDESC - --/* Shared memory identifier for MEM segment named "SHMSEG0" */ --#define DSP_SHMSEG0 (u32)(-1) -- - /* Processor ID numbers */ - #define DSP_UNIT 0 - #define IVA_UNIT 1 -@@ -91,15 +81,6 @@ - #define DSPWORD unsigned char - #define DSPWORDSIZE sizeof(DSPWORD) - --/* Power control enumerations */ --#define PROC_PWRCONTROL 0x8070 -- --#define PROC_PWRMGT_ENABLE (PROC_PWRCONTROL + 0x3) --#define PROC_PWRMGT_DISABLE (PROC_PWRCONTROL + 0x4) -- --/* Bridge Code Version */ --#define BRIDGE_VERSION_CODE 333 -- - #define MAX_PROFILES 16 - - /* DSP chip type */ -@@ -501,13 +482,6 @@ bit 15 - Output (writeable) buffer - #define DSPPROCTYPE_C64 6410 - #define IVAPROCTYPE_ARM7 470 - --#define REG_MGR_OBJECT 1 --#define REG_DRV_OBJECT 2 -- --/* registry */ --#define DRVOBJECT "DrvObject" --#define MGROBJECT "MgrObject" -- - /* Max registry path length. Also the max registry value length. */ - #define MAXREGPATHLENGTH 255 - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h b/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h -index bf4fb99..9973098 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h -@@ -17,17 +17,6 @@ - #ifndef DBLDEFS_ - #define DBLDEFS_ - --/* -- * Bit masks for dbl_flags. -- */ --#define DBL_NOLOAD 0x0 /* Don't load symbols, code, or data */ --#define DBL_SYMB 0x1 /* load symbols */ --#define DBL_CODE 0x2 /* load code */ --#define DBL_DATA 0x4 /* load data */ --#define DBL_DYNAMIC 0x8 /* dynamic load */ --#define DBL_BSS 0x20 /* Unitialized section */ -- --#define DBL_MAXPATHLENGTH 255 - - /* - * ======== dbl_flags ======== -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dehdefs.h b/drivers/staging/tidspbridge/include/dspbridge/dehdefs.h -index 09f8bf8..5341471 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dehdefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dehdefs.h -@@ -26,7 +26,6 @@ struct deh_mgr; - - /* Magic code used to determine if DSP signaled exception. */ - #define DEH_BASE MBX_DEH_BASE --#define DEH_USERS_BASE MBX_DEH_USERS_BASE - #define DEH_LIMIT MBX_DEH_LIMIT - - #endif /* _DEHDEFS_H */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/drv.h b/drivers/staging/tidspbridge/include/dspbridge/drv.h -index 37f5a45..adb28ec 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/drv.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/drv.h -@@ -26,9 +26,6 @@ - #include <dspbridge/drvdefs.h> - #include <linux/idr.h> - --#define DRV_ASSIGN 1 --#define DRV_RELEASE 0 -- - /* Provide the DSP Internal memory windows that can be accessed from L3 address - * space */ - -@@ -38,23 +35,14 @@ - /* MEM1 is L2 RAM + L2 Cache space */ - #define OMAP_DSP_MEM1_BASE 0x5C7F8000 - #define OMAP_DSP_MEM1_SIZE 0x18000 --#define OMAP_DSP_GEM1_BASE 0x107F8000 - - /* MEM2 is L1P RAM/CACHE space */ - #define OMAP_DSP_MEM2_BASE 0x5CE00000 - #define OMAP_DSP_MEM2_SIZE 0x8000 --#define OMAP_DSP_GEM2_BASE 0x10E00000 - - /* MEM3 is L1D RAM/CACHE space */ - #define OMAP_DSP_MEM3_BASE 0x5CF04000 - #define OMAP_DSP_MEM3_SIZE 0x14000 --#define OMAP_DSP_GEM3_BASE 0x10F04000 -- --#define OMAP_IVA2_PRM_BASE 0x48306000 --#define OMAP_IVA2_PRM_SIZE 0x1000 -- --#define OMAP_IVA2_CM_BASE 0x48004000 --#define OMAP_IVA2_CM_SIZE 0x1000 - - #define OMAP_PER_CM_BASE 0x48005000 - #define OMAP_PER_CM_SIZE 0x1000 -@@ -68,9 +56,6 @@ - #define OMAP_DMMU_BASE 0x5D000000 - #define OMAP_DMMU_SIZE 0x1000 - --#define OMAP_PRCM_VDD1_DOMAIN 1 --#define OMAP_PRCM_VDD2_DOMAIN 2 -- - /* GPP PROCESS CLEANUP Data structures */ - - /* New structure (member of process context) abstracts NODE resource info */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h b/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h -index 0ae7d16..2acbbb3 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h -@@ -37,12 +37,6 @@ - #include <dspbridge/iodefs.h> - #include <dspbridge/msgdefs.h> - --/* -- * Any IOCTLS at or above this value are reserved for standard Bridge driver -- * interfaces. -- */ --#define BRD_RESERVEDIOCTLBASE 0x8000 -- - /* Handle to Bridge driver's private device context. */ - struct bridge_dev_context; - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspdrv.h b/drivers/staging/tidspbridge/include/dspbridge/dspdrv.h -index 0bb250f..7adf1e7 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dspdrv.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dspdrv.h -@@ -20,8 +20,6 @@ - #if !defined _DSPDRV_H_ - #define _DSPDRV_H_ - --#define MAX_DEV 10 /* Max support of 10 devices */ -- - /* - * ======== dsp_deinit ======== - * Purpose: -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspioctl.h b/drivers/staging/tidspbridge/include/dspbridge/dspioctl.h -index 41e0594..54552a7 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dspioctl.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dspioctl.h -@@ -31,9 +31,6 @@ - - #define BRDIOCTL_CHNLREAD (BRDIOCTL_RESERVEDBASE + 0x10) - #define BRDIOCTL_CHNLWRITE (BRDIOCTL_RESERVEDBASE + 0x20) --#define BRDIOCTL_GETINTRCOUNT (BRDIOCTL_RESERVEDBASE + 0x30) --#define BRDIOCTL_RESETINTRCOUNT (BRDIOCTL_RESERVEDBASE + 0x40) --#define BRDIOCTL_INTERRUPTDSP (BRDIOCTL_RESERVEDBASE + 0x50) - /* DMMU */ - #define BRDIOCTL_SETMMUCONFIG (BRDIOCTL_RESERVEDBASE + 0x60) - /* PWR */ -@@ -47,8 +44,6 @@ - #define BRDIOCTL_DEEPSLEEP (BRDIOCTL_PWRCONTROL + 0x0) - #define BRDIOCTL_EMERGENCYSLEEP (BRDIOCTL_PWRCONTROL + 0x1) - #define BRDIOCTL_WAKEUP (BRDIOCTL_PWRCONTROL + 0x2) --#define BRDIOCTL_PWRENABLE (BRDIOCTL_PWRCONTROL + 0x3) --#define BRDIOCTL_PWRDISABLE (BRDIOCTL_PWRCONTROL + 0x4) - #define BRDIOCTL_CLK_CTRL (BRDIOCTL_PWRCONTROL + 0x7) - /* DSP Initiated Hibernate */ - #define BRDIOCTL_PWR_HIBERNATE (BRDIOCTL_PWRCONTROL + 0x8) -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dynamic_loader.h b/drivers/staging/tidspbridge/include/dspbridge/dynamic_loader.h -index 4b109d1..052d27e 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dynamic_loader.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dynamic_loader.h -@@ -46,8 +46,6 @@ struct dynamic_loader_initialize; - * Option flags to modify the behavior of module loading - */ - #define DLOAD_INITBSS 0x1 /* initialize BSS sections to zero */ --#define DLOAD_BIGEND 0x2 /* require big-endian load module */ --#define DLOAD_LITTLE 0x4 /* require little-endian load module */ - - /***************************************************************************** - * Procedure dynamic_load_module -diff --git a/drivers/staging/tidspbridge/include/dspbridge/io_sm.h b/drivers/staging/tidspbridge/include/dspbridge/io_sm.h -index 18aec55..bcde1d9 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/io_sm.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/io_sm.h -@@ -28,7 +28,6 @@ - #define IO_INPUT 0 - #define IO_OUTPUT 1 - #define IO_SERVICE 2 --#define IO_MAXSERVICE IO_SERVICE - - #ifdef CONFIG_TIDSPBRIDGE_DVFS - /* The maximum number of OPPs that are supported */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/iodefs.h b/drivers/staging/tidspbridge/include/dspbridge/iodefs.h -index 8bd10a0..31cbc9a 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/iodefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/iodefs.h -@@ -19,8 +19,6 @@ - #ifndef IODEFS_ - #define IODEFS_ - --#define IO_MAXIRQ 0xff /* Arbitrarily large number. */ -- - /* IO Objects: */ - struct io_mgr; - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/mbx_sh.h b/drivers/staging/tidspbridge/include/dspbridge/mbx_sh.h -index 5d165cd..7424c88 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/mbx_sh.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/mbx_sh.h -@@ -110,13 +110,7 @@ - #ifndef _MBX_SH_H - #define _MBX_SH_H - --#define MBX_CLASS_MSK 0xFC00 /* Class bits are 10 thru 15 */ --#define MBX_VALUE_MSK 0x03FF /* Value is 0 thru 9 */ -- --#define MBX_DEH_CLASS 0x0000 /* DEH owns Mbx INTR */ --#define MBX_DDMA_CLASS 0x0400 /* DSP-DMA link drvr chnls owns INTR */ - #define MBX_PCPY_CLASS 0x0800 /* PROC-COPY " */ --#define MBX_ZCPY_CLASS 0x1000 /* ZERO-COPY " */ - #define MBX_PM_CLASS 0x2000 /* Power Management */ - #define MBX_DBG_CLASS 0x4000 /* For debugging purpose */ - -@@ -128,55 +122,21 @@ - #define MBX_DEH_USERS_BASE 0x100 /* 256 */ - #define MBX_DEH_LIMIT 0x3FF /* 1023 */ - #define MBX_DEH_RESET 0x101 /* DSP RESET (DEH) */ --#define MBX_DEH_EMMU 0X103 /*DSP MMU FAULT RECOVERY */ - - /* - * Link driver command/status codes. - */ --/* DSP-DMA */ --#define MBX_DDMA_NUMCHNLBITS 5 /* # chnl Id: # bits available */ --#define MBX_DDMA_CHNLSHIFT 0 /* # of bits to shift */ --#define MBX_DDMA_CHNLMSK 0x01F /* bits 0 thru 4 */ -- --#define MBX_DDMA_NUMBUFBITS 5 /* buffer index: # of bits avail */ --#define MBX_DDMA_BUFSHIFT (MBX_DDMA_NUMCHNLBITS + MBX_DDMA_CHNLSHIFT) --#define MBX_DDMA_BUFMSK 0x3E0 /* bits 5 thru 9 */ -- --/* Zero-Copy */ --#define MBX_ZCPY_NUMCHNLBITS 5 /* # chnl Id: # bits available */ --#define MBX_ZCPY_CHNLSHIFT 0 /* # of bits to shift */ --#define MBX_ZCPY_CHNLMSK 0x01F /* bits 0 thru 4 */ - - /* Power Management Commands */ - #define MBX_PM_DSPIDLE (MBX_PM_CLASS + 0x0) - #define MBX_PM_DSPWAKEUP (MBX_PM_CLASS + 0x1) - #define MBX_PM_EMERGENCYSLEEP (MBX_PM_CLASS + 0x2) --#define MBX_PM_SLEEPUNTILRESTART (MBX_PM_CLASS + 0x3) --#define MBX_PM_DSPGLOBALIDLE_OFF (MBX_PM_CLASS + 0x4) --#define MBX_PM_DSPGLOBALIDLE_ON (MBX_PM_CLASS + 0x5) - #define MBX_PM_SETPOINT_PRENOTIFY (MBX_PM_CLASS + 0x6) - #define MBX_PM_SETPOINT_POSTNOTIFY (MBX_PM_CLASS + 0x7) --#define MBX_PM_DSPRETN (MBX_PM_CLASS + 0x8) - #define MBX_PM_DSPRETENTION (MBX_PM_CLASS + 0x8) - #define MBX_PM_DSPHIBERNATE (MBX_PM_CLASS + 0x9) - #define MBX_PM_HIBERNATE_EN (MBX_PM_CLASS + 0xA) - #define MBX_PM_OPP_REQ (MBX_PM_CLASS + 0xB) --#define MBX_PM_OPP_CHG (MBX_PM_CLASS + 0xC) -- --#define MBX_PM_TYPE_MASK 0x0300 --#define MBX_PM_TYPE_PWR_CHNG 0x0100 --#define MBX_PM_TYPE_OPP_PRECHNG 0x0200 --#define MBX_PM_TYPE_OPP_POSTCHNG 0x0300 --#define MBX_PM_TYPE_OPP_MASK 0x0300 --#define MBX_PM_OPP_PRECHNG (MBX_PM_CLASS | MBX_PM_TYPE_OPP_PRECHNG) --/* DSP to MPU */ --#define MBX_PM_OPP_CHNG(OPP) (MBX_PM_CLASS | MBX_PM_TYPE_OPP_PRECHNG | (OPP)) --#define MBX_PM_RET (MBX_PM_CLASS | MBX_PM_TYPE_PWR_CHNG | 0x0006) --#define MBX_PM_HIB (MBX_PM_CLASS | MBX_PM_TYPE_PWR_CHNG | 0x0002) --#define MBX_PM_OPP1 0 --#define MBX_PM_OPP2 1 --#define MBX_PM_OPP3 2 --#define MBX_PM_OPP4 3 - - /* Bridge Debug Commands */ - #define MBX_DBG_SYSPRINTF (MBX_DBG_CLASS + 0x0) -diff --git a/drivers/staging/tidspbridge/include/dspbridge/pwr_sh.h b/drivers/staging/tidspbridge/include/dspbridge/pwr_sh.h -index 1b4a090..c78a1b1 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/pwr_sh.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/pwr_sh.h -@@ -24,10 +24,6 @@ - /* valid sleep command codes that can be sent by GPP via mailbox: */ - #define PWR_DEEPSLEEP MBX_PM_DSPIDLE - #define PWR_EMERGENCYDEEPSLEEP MBX_PM_EMERGENCYSLEEP --#define PWR_SLEEPUNTILRESTART MBX_PM_SLEEPUNTILRESTART - #define PWR_WAKEUP MBX_PM_DSPWAKEUP --#define PWR_AUTOENABLE MBX_PM_PWRENABLE --#define PWR_AUTODISABLE MBX_PM_PWRDISABLE --#define PWR_RETENTION MBX_PM_DSPRETN - - #endif /* PWR_SH_ */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/rms_sh.h b/drivers/staging/tidspbridge/include/dspbridge/rms_sh.h -index 7bc5574..ba7f478 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/rms_sh.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/rms_sh.h -@@ -22,27 +22,18 @@ - - #include <dspbridge/rmstypes.h> - --/* Node Types: */ --#define RMS_TASK 1 /* Task node */ --#define RMS_DAIS 2 /* xDAIS socket node */ --#define RMS_MSG 3 /* Message node */ -- - /* Memory Types: */ - #define RMS_CODE 0 /* Program space */ - #define RMS_DATA 1 /* Data space */ --#define RMS_IO 2 /* I/O space */ - - /* RM Server Command and Response Buffer Sizes: */ - #define RMS_COMMANDBUFSIZE 256 /* Size of command buffer */ --#define RMS_RESPONSEBUFSIZE 16 /* Size of response buffer */ - - /* Pre-Defined Command/Response Codes: */ - #define RMS_EXIT 0x80000000 /* GPP->Node: shutdown */ - #define RMS_EXITACK 0x40000000 /* Node->GPP: ack shutdown */ - #define RMS_BUFDESC 0x20000000 /* Arg1 SM buf, Arg2 SM size */ - #define RMS_KILLTASK 0x10000000 /* GPP->Node: Kill Task */ --#define RMS_USER 0x0 /* Start of user-defined msg codes */ --#define RMS_MAXUSERCODES 0xfff /* Maximum user defined C/R Codes */ - - /* RM Server RPC Command Structure: */ - struct rms_command { -diff --git a/drivers/staging/tidspbridge/include/dspbridge/strmdefs.h b/drivers/staging/tidspbridge/include/dspbridge/strmdefs.h -index b363f79..c6abbf3 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/strmdefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/strmdefs.h -@@ -19,8 +19,6 @@ - #ifndef STRMDEFS_ - #define STRMDEFS_ - --#define STRM_MAXEVTNAMELEN 32 -- - struct strm_mgr; - - struct strm_object; -diff --git a/drivers/staging/tidspbridge/pmgr/dev.c b/drivers/staging/tidspbridge/pmgr/dev.c -index b160b00..b95cd20 100644 ---- a/drivers/staging/tidspbridge/pmgr/dev.c -+++ b/drivers/staging/tidspbridge/pmgr/dev.c -@@ -880,7 +880,7 @@ int dev_start_device(struct cfg_devnode *dev_node_obj) - { - struct dev_object *hdev_obj = NULL; /* handle to 'Bridge Device */ - /* Bridge driver filename */ -- char bridge_file_name[CFG_MAXSEARCHPATHLEN] = "UMA"; -+ char *bridge_file_name = "UMA"; - int status; - struct mgr_object *hmgr_obj = NULL; - struct drv_data *drv_datap = dev_get_drvdata(bridge); --- -1.7.1 - diff --git a/patches/dspbridge/0021-staging-tidspbridge-Remove-unused-functions.patch b/patches/dspbridge/0021-staging-tidspbridge-Remove-unused-functions.patch deleted file mode 100644 index 250890ac0e3f4ae78e45fabcfd43bdc187bffeca..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0021-staging-tidspbridge-Remove-unused-functions.patch +++ /dev/null @@ -1,655 +0,0 @@ -From 86b83173d61872057d4c3757364cc4bbeed24b80 Mon Sep 17 00:00:00 2001 -From: Armando Uribe <x0095078@ti.com> -Date: Fri, 17 Dec 2010 01:18:30 -0600 -Subject: [PATCH 21/25] staging: tidspbridge - Remove unused functions - -Remove functions that are not used at all, also remove the dependencies -of this functions like struct members, comments and calls. - -Signed-off-by: Armando Uribe <x0095078@ti.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/core/io_sm.c | 4 - - drivers/staging/tidspbridge/core/tiomap3430.c | 2 - - .../staging/tidspbridge/include/dspbridge/chnl.h | 21 --- - .../staging/tidspbridge/include/dspbridge/dbll.h | 6 - - .../tidspbridge/include/dspbridge/dblldefs.h | 3 - - .../staging/tidspbridge/include/dspbridge/dev.h | 55 -------- - .../staging/tidspbridge/include/dspbridge/dspio.h | 1 - - .../tidspbridge/include/dspbridge/host_os.h | 9 -- - drivers/staging/tidspbridge/include/dspbridge/io.h | 16 --- - .../staging/tidspbridge/include/dspbridge/io_sm.h | 135 -------------------- - .../staging/tidspbridge/include/dspbridge/node.h | 18 --- - .../include/dspbridge/resourcecleanup.h | 11 -- - .../staging/tidspbridge/include/dspbridge/strm.h | 62 --------- - drivers/staging/tidspbridge/pmgr/cod.c | 3 - - drivers/staging/tidspbridge/pmgr/dbll.c | 41 ------ - drivers/staging/tidspbridge/rmgr/nldr.c | 3 - - 16 files changed, 0 insertions(+), 390 deletions(-) - -diff --git a/drivers/staging/tidspbridge/core/io_sm.c b/drivers/staging/tidspbridge/core/io_sm.c -index 9289522..90e89ee 100644 ---- a/drivers/staging/tidspbridge/core/io_sm.c -+++ b/drivers/staging/tidspbridge/core/io_sm.c -@@ -1682,10 +1682,6 @@ int bridge_io_get_proc_load(struct io_mgr *hio_mgr, - return 0; - } - --void io_sm_init(void) --{ -- /* Do nothing */ --} - - #if defined(CONFIG_TIDSPBRIDGE_BACKTRACE) || defined(CONFIG_TIDSPBRIDGE_DEBUG) - void print_dsp_debug_trace(struct io_mgr *hio_mgr) -diff --git a/drivers/staging/tidspbridge/core/tiomap3430.c b/drivers/staging/tidspbridge/core/tiomap3430.c -index cb45e93..cacd30e 100644 ---- a/drivers/staging/tidspbridge/core/tiomap3430.c -+++ b/drivers/staging/tidspbridge/core/tiomap3430.c -@@ -255,8 +255,6 @@ void bridge_drv_entry(struct bridge_drv_interface **drv_intf, - - DBC_REQUIRE(driver_file_name != NULL); - -- io_sm_init(); /* Initialization of io_sm module */ -- - if (strcmp(driver_file_name, "UMA") == 0) - *drv_intf = &drv_interface_fxns; - else -diff --git a/drivers/staging/tidspbridge/include/dspbridge/chnl.h b/drivers/staging/tidspbridge/include/dspbridge/chnl.h -index 8733b3b..92f6a13 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/chnl.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/chnl.h -@@ -25,27 +25,6 @@ - #include <dspbridge/chnlpriv.h> - - /* -- * ======== chnl_close ======== -- * Purpose: -- * Ensures all pending I/O on this channel is cancelled, discards all -- * queued I/O completion notifications, then frees the resources allocated -- * for this channel, and makes the corresponding logical channel id -- * available for subsequent use. -- * Parameters: -- * chnl_obj: Channel object handle. -- * Returns: -- * 0: Success; -- * -EFAULT: Invalid chnl_obj. -- * Requires: -- * chnl_init(void) called. -- * No thread must be blocked on this channel's I/O completion event. -- * Ensures: -- * 0: The I/O completion event for this channel is freed. -- * chnl_obj is no longer valid. -- */ --extern int chnl_close(struct chnl_object *chnl_obj); -- --/* - * ======== chnl_create ======== - * Purpose: - * Create a channel manager object, responsible for opening new channels -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dbll.h b/drivers/staging/tidspbridge/include/dspbridge/dbll.h -index b018676..46a9e00 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dbll.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dbll.h -@@ -42,18 +42,12 @@ extern bool dbll_init(void); - extern int dbll_load(struct dbll_library_obj *lib, - dbll_flags flags, - struct dbll_attrs *attrs, u32 * entry); --extern int dbll_load_sect(struct dbll_library_obj *zl_lib, -- char *sec_name, struct dbll_attrs *attrs); - extern int dbll_open(struct dbll_tar_obj *target, char *file, - dbll_flags flags, - struct dbll_library_obj **lib_obj); - extern int dbll_read_sect(struct dbll_library_obj *lib, - char *name, char *buf, u32 size); --extern void dbll_set_attrs(struct dbll_tar_obj *target, -- struct dbll_attrs *pattrs); - extern void dbll_unload(struct dbll_library_obj *lib, struct dbll_attrs *attrs); --extern int dbll_unload_sect(struct dbll_library_obj *lib, -- char *sect_name, struct dbll_attrs *attrs); - #ifdef CONFIG_TIDSPBRIDGE_BACKTRACE - bool dbll_find_dsp_symbol(struct dbll_library_obj *zl_lib, u32 address, - u32 offset_range, u32 *sym_addr_output, char *name_output); -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h b/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h -index d2b4fda..81821e5 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h -@@ -485,12 +485,9 @@ struct dbll_fxns { - dbll_get_sect_fxn get_sect_fxn; - dbll_init_fxn init_fxn; - dbll_load_fxn load_fxn; -- dbll_load_sect_fxn load_sect_fxn; - dbll_open_fxn open_fxn; - dbll_read_sect_fxn read_sect_fxn; -- dbll_set_attrs_fxn set_attrs_fxn; - dbll_unload_fxn unload_fxn; -- dbll_unload_sect_fxn unload_sect_fxn; - }; - - #endif /* DBLDEFS_ */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dev.h b/drivers/staging/tidspbridge/include/dspbridge/dev.h -index 357458f..4d4196b 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dev.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dev.h -@@ -95,43 +95,6 @@ extern int dev_create_device(struct dev_object - struct cfg_devnode *dev_node_obj); - - /* -- * ======== dev_create_iva_device ======== -- * Purpose: -- * Called by the operating system to load the Bridge Driver for IVA. -- * Parameters: -- * device_obj: Ptr to location to receive the device object handle. -- * driver_file_name: Name of Bridge driver PE DLL file to load. If the -- * absolute path is not provided, the file is loaded -- * through 'Bridge's module search path. -- * host_config: Host configuration information, to be passed down -- * to the Bridge driver when bridge_dev_create() is called. -- * pDspConfig: DSP resources, to be passed down to the Bridge driver -- * when bridge_dev_create() is called. -- * dev_node_obj: Platform specific device node. -- * Returns: -- * 0: Module is loaded, device object has been created -- * -ENOMEM: Insufficient memory to create needed resources. -- * -EPERM: Unable to find Bridge driver entry point function. -- * -ESPIPE: Unable to load ZL DLL. -- * Requires: -- * DEV Initialized. -- * device_obj != NULL. -- * driver_file_name != NULL. -- * host_config != NULL. -- * pDspConfig != NULL. -- * Ensures: -- * 0: *device_obj will contain handle to the new device object. -- * Otherwise, does not create the device object, ensures the Bridge driver -- * module is unloaded, and sets *device_obj to NULL. -- */ --extern int dev_create_iva_device(struct dev_object -- **device_obj, -- const char *driver_file_name, -- const struct cfg_hostres -- *host_config, -- struct cfg_devnode *dev_node_obj); -- --/* - * ======== dev_create2 ======== - * Purpose: - * After successful loading of the image from api_init_complete2 -@@ -542,24 +505,6 @@ extern void dev_exit(void); - extern bool dev_init(void); - - /* -- * ======== dev_is_locked ======== -- * Purpose: -- * Predicate function to determine if the device has been -- * locked by a client for exclusive access. -- * Parameters: -- * hdev_obj: Handle to device object created with -- * dev_create_device(). -- * Returns: -- * 0: TRUE: device has been locked. -- * 0: FALSE: device not locked. -- * -EFAULT: hdev_obj was invalid. -- * Requires: -- * DEV Initialized. -- * Ensures: -- */ --extern int dev_is_locked(struct dev_object *hdev_obj); -- --/* - * ======== dev_insert_proc_object ======== - * Purpose: - * Inserts the Processor Object into the List of PROC Objects -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspio.h b/drivers/staging/tidspbridge/include/dspbridge/dspio.h -index 88f5f90..5c666b8 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dspio.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dspio.h -@@ -34,7 +34,6 @@ extern int bridge_io_destroy(struct io_mgr *hio_mgr); - - extern int bridge_io_on_loaded(struct io_mgr *hio_mgr); - --extern int iva_io_on_loaded(struct io_mgr *hio_mgr); - extern int bridge_io_get_proc_load(struct io_mgr *hio_mgr, - struct dsp_procloadstat *proc_lstat); - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/host_os.h b/drivers/staging/tidspbridge/include/dspbridge/host_os.h -index 6549898..b1b8acb 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/host_os.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/host_os.h -@@ -57,13 +57,4 @@ - extern struct platform_device *omap_dspbridge_dev; - extern struct device *bridge; - --#if defined(CONFIG_TIDSPBRIDGE) || defined(CONFIG_TIDSPBRIDGE_MODULE) --extern void dspbridge_reserve_sdram(void); --#else --static inline void dspbridge_reserve_sdram(void) --{ --} --#endif -- --extern unsigned long dspbridge_get_mempool_base(void); - #endif -diff --git a/drivers/staging/tidspbridge/include/dspbridge/io.h b/drivers/staging/tidspbridge/include/dspbridge/io.h -index bc346f9..da4683c 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/io.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/io.h -@@ -95,20 +95,4 @@ extern void io_exit(void); - */ - extern bool io_init(void); - --/* -- * ======== io_on_loaded ======== -- * Purpose: -- * Called when a program is loaded so IO manager can update its -- * internal state. -- * Parameters: -- * hio_mgr: IOmanager object. -- * Returns: -- * 0: Success. -- * -EFAULT: hio_mgr was invalid. -- * Requires: -- * io_init(void) called. -- * Ensures: -- */ --extern int io_on_loaded(struct io_mgr *hio_mgr); -- - #endif /* CHNL_ */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/io_sm.h b/drivers/staging/tidspbridge/include/dspbridge/io_sm.h -index bcde1d9..8778ab4 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/io_sm.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/io_sm.h -@@ -120,122 +120,6 @@ extern void io_request_chnl(struct io_mgr *io_manager, - extern void iosm_schedule(struct io_mgr *io_manager); - - /* -- * DSP-DMA IO functions -- */ -- --/* -- * ======== io_ddma_init_chnl_desc ======== -- * Purpose: -- * Initialize DSP DMA channel descriptor. -- * Parameters: -- * hio_mgr: Handle to a I/O manager. -- * ddma_chnl_id: DDMA channel identifier. -- * num_desc: Number of buffer descriptors(equals # of IOReqs & -- * Chirps) -- * dsp: Dsp address; -- * Returns: -- * Requires: -- * ddma_chnl_id < DDMA_MAXDDMACHNLS -- * num_desc > 0 -- * pVa != NULL -- * pDspPa != NULL -- * -- * Ensures: -- */ --extern void io_ddma_init_chnl_desc(struct io_mgr *hio_mgr, u32 ddma_chnl_id, -- u32 num_desc, void *dsp); -- --/* -- * ======== io_ddma_clear_chnl_desc ======== -- * Purpose: -- * Clear DSP DMA channel descriptor. -- * Parameters: -- * hio_mgr: Handle to a I/O manager. -- * ddma_chnl_id: DDMA channel identifier. -- * Returns: -- * Requires: -- * ddma_chnl_id < DDMA_MAXDDMACHNLS -- * Ensures: -- */ --extern void io_ddma_clear_chnl_desc(struct io_mgr *hio_mgr, u32 ddma_chnl_id); -- --/* -- * ======== io_ddma_request_chnl ======== -- * Purpose: -- * Request channel DSP-DMA from the DSP. Sets up SM descriptors and -- * control fields in shared memory. -- * Parameters: -- * hio_mgr: Handle to a I/O manager. -- * pchnl: Ptr to channel object -- * chnl_packet_obj: Ptr to channel i/o request packet. -- * Returns: -- * Requires: -- * pchnl != NULL -- * pchnl->cio_reqs > 0 -- * chnl_packet_obj != NULL -- * Ensures: -- */ --extern void io_ddma_request_chnl(struct io_mgr *hio_mgr, -- struct chnl_object *pchnl, -- struct chnl_irp *chnl_packet_obj, -- u16 *mbx_val); -- --/* -- * Zero-copy IO functions -- */ -- --/* -- * ======== io_ddzc_init_chnl_desc ======== -- * Purpose: -- * Initialize ZCPY channel descriptor. -- * Parameters: -- * hio_mgr: Handle to a I/O manager. -- * zid: zero-copy channel identifier. -- * Returns: -- * Requires: -- * ddma_chnl_id < DDMA_MAXZCPYCHNLS -- * hio_mgr != Null -- * Ensures: -- */ --extern void io_ddzc_init_chnl_desc(struct io_mgr *hio_mgr, u32 zid); -- --/* -- * ======== io_ddzc_clear_chnl_desc ======== -- * Purpose: -- * Clear DSP ZC channel descriptor. -- * Parameters: -- * hio_mgr: Handle to a I/O manager. -- * ch_id: ZC channel identifier. -- * Returns: -- * Requires: -- * hio_mgr is valid -- * ch_id < DDMA_MAXZCPYCHNLS -- * Ensures: -- */ --extern void io_ddzc_clear_chnl_desc(struct io_mgr *hio_mgr, u32 ch_id); -- --/* -- * ======== io_ddzc_request_chnl ======== -- * Purpose: -- * Request zero-copy channel transfer. Sets up SM descriptors and -- * control fields in shared memory. -- * Parameters: -- * hio_mgr: Handle to a I/O manager. -- * pchnl: Ptr to channel object -- * chnl_packet_obj: Ptr to channel i/o request packet. -- * Returns: -- * Requires: -- * pchnl != NULL -- * pchnl->cio_reqs > 0 -- * chnl_packet_obj != NULL -- * Ensures: -- */ --extern void io_ddzc_request_chnl(struct io_mgr *hio_mgr, -- struct chnl_object *pchnl, -- struct chnl_irp *chnl_packet_obj, -- u16 *mbx_val); -- --/* - * ======== io_sh_msetting ======== - * Purpose: - * Sets the shared memory setting -@@ -258,25 +142,6 @@ extern int io_sh_msetting(struct io_mgr *hio_mgr, u8 desc, void *pargs); - /* Maximum channel bufsize that can be used. */ - extern u32 io_buf_size(struct io_mgr *hio_mgr); - --extern u32 io_read_value(struct bridge_dev_context *dev_ctxt, u32 dsp_addr); -- --extern void io_write_value(struct bridge_dev_context *dev_ctxt, -- u32 dsp_addr, u32 value); -- --extern u32 io_read_value_long(struct bridge_dev_context *dev_ctxt, -- u32 dsp_addr); -- --extern void io_write_value_long(struct bridge_dev_context *dev_ctxt, -- u32 dsp_addr, u32 value); -- --extern void io_or_set_value(struct bridge_dev_context *dev_ctxt, -- u32 dsp_addr, u32 value); -- --extern void io_and_set_value(struct bridge_dev_context *dev_ctxt, -- u32 dsp_addr, u32 value); -- --extern void io_sm_init(void); -- - #ifdef CONFIG_TIDSPBRIDGE_BACKTRACE - /* - * ========print_dsp_trace_buffer ======== -diff --git a/drivers/staging/tidspbridge/include/dspbridge/node.h b/drivers/staging/tidspbridge/include/dspbridge/node.h -index 49ed5c1..4c5558c 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/node.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/node.h -@@ -113,24 +113,6 @@ extern int node_alloc_msg_buf(struct node_object *hnode, - extern int node_change_priority(struct node_object *hnode, s32 prio); - - /* -- * ======== node_close_orphans ======== -- * Purpose: -- * Delete all nodes whose owning processor is being destroyed. -- * Parameters: -- * hnode_mgr: Node manager object. -- * proc: Handle to processor object being destroyed. -- * Returns: -- * 0: Success. -- * -EPERM: Unable to delete all nodes belonging to proc. -- * Requires: -- * Valid hnode_mgr. -- * proc != NULL. -- * Ensures: -- */ --extern int node_close_orphans(struct node_mgr *hnode_mgr, -- struct proc_object *proc); -- --/* - * ======== node_connect ======== - * Purpose: - * Connect two nodes on the DSP, or a node on the DSP to the GPP. In the -diff --git a/drivers/staging/tidspbridge/include/dspbridge/resourcecleanup.h b/drivers/staging/tidspbridge/include/dspbridge/resourcecleanup.h -index dfaf0c6..8c9c902 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/resourcecleanup.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/resourcecleanup.h -@@ -17,23 +17,12 @@ - #include <dspbridge/nodepriv.h> - #include <dspbridge/drv.h> - --extern int drv_get_proc_ctxt_list(struct process_context **pctxt, -- struct drv_object *hdrv_obj); -- --extern int drv_insert_proc_context(struct drv_object *driver_obj, -- void *process_ctxt); -- - extern int drv_remove_all_dmm_res_elements(void *process_ctxt); - - extern int drv_remove_all_node_res_elements(void *process_ctxt); - --extern int drv_proc_set_pid(void *ctxt, s32 process); -- - extern int drv_remove_all_resources(void *process_ctxt); - --extern int drv_remove_proc_context(struct drv_object *driver_obj, -- void *pr_ctxt); -- - extern int drv_insert_node_res_element(void *hnode, void *node_resource, - void *process_ctxt); - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/strm.h b/drivers/staging/tidspbridge/include/dspbridge/strm.h -index 3e4671e..613fe53 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/strm.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/strm.h -@@ -142,25 +142,6 @@ extern int strm_free_buffer(struct strm_res_object *strmres, - struct process_context *pr_ctxt); - - /* -- * ======== strm_get_event_handle ======== -- * Purpose: -- * Get stream's user event handle. This function is used when closing -- * a stream, so the event can be closed. -- * Parameter: -- * stream_obj: Stream handle returned from strm_open(). -- * ph_event: Location to store event handle on output. -- * Returns: -- * 0: Success. -- * -EFAULT: Invalid stream_obj. -- * Requires: -- * strm_init(void) called. -- * ph_event != NULL. -- * Ensures: -- */ --extern int strm_get_event_handle(struct strm_object *stream_obj, -- void **ph_event); -- --/* - * ======== strm_get_info ======== - * Purpose: - * Get information about a stream. User's dsp_streaminfo is contained -@@ -276,27 +257,6 @@ extern int strm_open(struct node_object *hnode, u32 dir, - struct process_context *pr_ctxt); - - /* -- * ======== strm_prepare_buffer ======== -- * Purpose: -- * Prepare a data buffer not allocated by DSPStream_AllocateBuffers() -- * for use with a stream. -- * Parameter: -- * stream_obj: Stream handle returned from strm_open(). -- * usize: Size (GPP bytes) of the buffer. -- * pbuffer: Buffer address. -- * Returns: -- * 0: Success. -- * -EFAULT: Invalid stream_obj. -- * -EPERM: Failure occurred, unable to prepare buffer. -- * Requires: -- * strm_init(void) called. -- * pbuffer != NULL. -- * Ensures: -- */ --extern int strm_prepare_buffer(struct strm_object *stream_obj, -- u32 usize, u8 *pbuffer); -- --/* - * ======== strm_reclaim ======== - * Purpose: - * Request a buffer back from a stream. -@@ -379,26 +339,4 @@ extern int strm_register_notify(struct strm_object *stream_obj, - extern int strm_select(struct strm_object **strm_tab, - u32 strms, u32 *pmask, u32 utimeout); - --/* -- * ======== strm_unprepare_buffer ======== -- * Purpose: -- * Unprepare a data buffer that was previously prepared for a stream -- * with DSPStream_PrepareBuffer(), and that will no longer be used with -- * the stream. -- * Parameter: -- * stream_obj: Stream handle returned from strm_open(). -- * usize: Size (GPP bytes) of the buffer. -- * pbuffer: Buffer address. -- * Returns: -- * 0: Success. -- * -EFAULT: Invalid stream_obj. -- * -EPERM: Failure occurred, unable to unprepare buffer. -- * Requires: -- * strm_init(void) called. -- * pbuffer != NULL. -- * Ensures: -- */ --extern int strm_unprepare_buffer(struct strm_object *stream_obj, -- u32 usize, u8 *pbuffer); -- - #endif /* STRM_ */ -diff --git a/drivers/staging/tidspbridge/pmgr/cod.c b/drivers/staging/tidspbridge/pmgr/cod.c -index 52989ab..db29a19 100644 ---- a/drivers/staging/tidspbridge/pmgr/cod.c -+++ b/drivers/staging/tidspbridge/pmgr/cod.c -@@ -78,12 +78,9 @@ static struct dbll_fxns ldr_fxns = { - (dbll_get_sect_fxn) dbll_get_sect, - (dbll_init_fxn) dbll_init, - (dbll_load_fxn) dbll_load, -- (dbll_load_sect_fxn) dbll_load_sect, - (dbll_open_fxn) dbll_open, - (dbll_read_sect_fxn) dbll_read_sect, -- (dbll_set_attrs_fxn) dbll_set_attrs, - (dbll_unload_fxn) dbll_unload, -- (dbll_unload_sect_fxn) dbll_unload_sect, - }; - - static bool no_op(void); -diff --git a/drivers/staging/tidspbridge/pmgr/dbll.c b/drivers/staging/tidspbridge/pmgr/dbll.c -index 878aa50..2f46b06 100644 ---- a/drivers/staging/tidspbridge/pmgr/dbll.c -+++ b/drivers/staging/tidspbridge/pmgr/dbll.c -@@ -568,18 +568,6 @@ int dbll_load(struct dbll_library_obj *lib, dbll_flags flags, - } - - /* -- * ======== dbll_load_sect ======== -- * Not supported for COFF. -- */ --int dbll_load_sect(struct dbll_library_obj *zl_lib, char *sec_name, -- struct dbll_attrs *attrs) --{ -- DBC_REQUIRE(zl_lib); -- -- return -ENOSYS; --} -- --/* - * ======== dbll_open ======== - */ - int dbll_open(struct dbll_tar_obj *target, char *file, dbll_flags flags, -@@ -794,22 +782,6 @@ func_cont: - } - - /* -- * ======== dbll_set_attrs ======== -- * Set the attributes of the target. -- */ --void dbll_set_attrs(struct dbll_tar_obj *target, struct dbll_attrs *pattrs) --{ -- struct dbll_tar_obj *zl_target = (struct dbll_tar_obj *)target; -- DBC_REQUIRE(refs > 0); -- DBC_REQUIRE(zl_target); -- DBC_REQUIRE(pattrs != NULL); -- -- if ((pattrs != NULL) && (zl_target != NULL)) -- zl_target->attrs = *pattrs; -- --} -- --/* - * ======== dbll_unload ======== - */ - void dbll_unload(struct dbll_library_obj *lib, struct dbll_attrs *attrs) -@@ -848,19 +820,6 @@ func_end: - } - - /* -- * ======== dbll_unload_sect ======== -- * Not supported for COFF. -- */ --int dbll_unload_sect(struct dbll_library_obj *lib, char *sec_name, -- struct dbll_attrs *attrs) --{ -- DBC_REQUIRE(refs > 0); -- DBC_REQUIRE(sec_name != NULL); -- -- return -ENOSYS; --} -- --/* - * ======== dof_close ======== - */ - static void dof_close(struct dbll_library_obj *zl_lib) -diff --git a/drivers/staging/tidspbridge/rmgr/nldr.c b/drivers/staging/tidspbridge/rmgr/nldr.c -index a6ae007..26cfb32 100644 ---- a/drivers/staging/tidspbridge/rmgr/nldr.c -+++ b/drivers/staging/tidspbridge/rmgr/nldr.c -@@ -260,12 +260,9 @@ static struct dbll_fxns ldr_fxns = { - (dbll_get_sect_fxn) dbll_get_sect, - (dbll_init_fxn) dbll_init, - (dbll_load_fxn) dbll_load, -- (dbll_load_sect_fxn) dbll_load_sect, - (dbll_open_fxn) dbll_open, - (dbll_read_sect_fxn) dbll_read_sect, -- (dbll_set_attrs_fxn) dbll_set_attrs, - (dbll_unload_fxn) dbll_unload, -- (dbll_unload_sect_fxn) dbll_unload_sect, - }; - - static u32 refs; /* module reference count */ --- -1.7.1 - diff --git a/patches/dspbridge/0022-staging-tidspbridge-Remove-unused-structs.patch b/patches/dspbridge/0022-staging-tidspbridge-Remove-unused-structs.patch deleted file mode 100644 index 88ac7aa2e08678c25175d44005aaeee1997ba48c..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0022-staging-tidspbridge-Remove-unused-structs.patch +++ /dev/null @@ -1,337 +0,0 @@ -From c6e21b12fab9d5083bc90e7dd3f091d0a15513ff Mon Sep 17 00:00:00 2001 -From: Armando Uribe <x0095078@ti.com> -Date: Fri, 17 Dec 2010 01:18:31 -0600 -Subject: [PATCH 22/25] staging: tidspbridge - Remove unused structs - -Remove unused structs and its dependencies, like references -in other structs or as arguments of certain functions. - -Signed-off-by: Armando Uribe <x0095078@ti.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - .../tidspbridge/include/dspbridge/cfgdefs.h | 6 -- - .../staging/tidspbridge/include/dspbridge/cod.h | 10 +---- - .../tidspbridge/include/dspbridge/dbldefs.h | 49 -------------------- - .../staging/tidspbridge/include/dspbridge/drv.h | 14 ------ - .../tidspbridge/include/dspbridge/dspapi-ioctl.h | 8 --- - .../staging/tidspbridge/include/dspbridge/ldr.h | 29 ------------ - drivers/staging/tidspbridge/pmgr/cod.c | 11 +---- - drivers/staging/tidspbridge/pmgr/dev.c | 8 +--- - drivers/staging/tidspbridge/rmgr/dbdcd.c | 2 +- - 9 files changed, 4 insertions(+), 133 deletions(-) - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/ldr.h - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h b/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h -index c3f04f8..0589a0a 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/cfgdefs.h -@@ -58,10 +58,4 @@ struct cfg_hostres { - void __iomem *dw_dmmu_base; - }; - --struct cfg_dspmemdesc { -- u32 mem_type; /* Type of memory. */ -- u32 ul_min; /* Minimum amount of memory of this type. */ -- u32 ul_max; /* Maximum amount of memory of this type. */ --}; -- - #endif /* CFGDEFS_ */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/cod.h b/drivers/staging/tidspbridge/include/dspbridge/cod.h -index 5efea91..53bd4bb 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/cod.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/cod.h -@@ -37,11 +37,6 @@ struct cod_manager; - /* COD library handle */ - struct cod_libraryobj; - --/* COD attributes */ --struct cod_attrs { -- u32 ul_reserved; --}; -- - /* - * Function prototypes for writing memory to a DSP system, allocating - * and freeing DSP memory. -@@ -76,8 +71,6 @@ extern void cod_close(struct cod_libraryobj *lib); - * Parameters: - * manager: created manager object - * str_zl_file: ZL DLL filename, of length < COD_MAXPATHLENGTH. -- * attrs: attributes to be used by this object. A NULL value -- * will cause default attrs to be used. - * Returns: - * 0: Success. - * -ESPIPE: ZL_Create failed. -@@ -89,8 +82,7 @@ extern void cod_close(struct cod_libraryobj *lib); - * Ensures: - */ - extern int cod_create(struct cod_manager **mgr, -- char *str_zl_file, -- const struct cod_attrs *attrs); -+ char *str_zl_file); - - /* - * ======== cod_delete ======== -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h b/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h -index 9973098..5cf9dad 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h -@@ -25,26 +25,6 @@ - typedef s32 dbl_flags; - - /* -- * ======== dbl_sect_info ======== -- * For collecting info on overlay sections -- */ --struct dbl_sect_info { -- const char *name; /* name of section */ -- u32 sect_run_addr; /* run address of section */ -- u32 sect_load_addr; /* load address of section */ -- u32 size; /* size of section (target MAUs) */ -- dbl_flags type; /* Code, data, or BSS */ --}; -- --/* -- * ======== dbl_symbol ======== -- * (Needed for dynamic load library) -- */ --struct dbl_symbol { -- u32 value; --}; -- --/* - * ======== dbl_alloc_fxn ======== - * Allocate memory function. Allocate or reserve (if reserved == TRUE) - * "size" bytes of memory from segment "space" and return the address in -@@ -98,33 +78,4 @@ typedef bool(*dbl_sym_lookup) (void *handle, void *parg, void *rmm_handle, - typedef s32(*dbl_write_fxn) (void *hdl, u32 dsp_address, void *buf, - u32 n, s32 mtype); - --/* -- * ======== dbl_attrs ======== -- */ --struct dbl_attrs { -- dbl_alloc_fxn alloc; -- dbl_free_fxn free; -- void *rmm_handle; /* Handle to pass to alloc, free functions */ -- dbl_write_fxn write; -- void *input_params; /* Handle to pass to write, cinit function */ -- -- dbl_log_write_fxn log_write; -- void *log_write_handle; -- -- /* Symbol matching function and handle to pass to it */ -- dbl_sym_lookup sym_lookup; -- void *sym_handle; -- void *sym_arg; -- -- /* -- * These file manipulation functions should be compatible with the -- * "C" run time library functions of the same name. -- */ -- s32(*fread) (void *, size_t, size_t, void *); -- s32(*fseek) (void *, long, int); -- s32(*ftell) (void *); -- s32(*fclose) (void *); -- void *(*fopen) (const char *, const char *); --}; -- - #endif /* DBLDEFS_ */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/drv.h b/drivers/staging/tidspbridge/include/dspbridge/drv.h -index adb28ec..26972ad 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/drv.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/drv.h -@@ -96,17 +96,6 @@ struct dmm_rsv_object { - u32 dsp_reserved_addr; - }; - --/* New structure (member of process context) abstracts DMM resource info */ --struct dspheap_res_object { -- s32 heap_allocated; /* DMM status */ -- u32 ul_mpu_addr; -- u32 ul_dsp_addr; -- u32 ul_dsp_res_addr; -- u32 heap_size; -- void *hprocessor; -- struct dspheap_res_object *next; --}; -- - /* New structure (member of process context) abstracts stream resource info */ - struct strm_res_object { - s32 stream_allocated; /* Stream status */ -@@ -151,9 +140,6 @@ struct process_context { - struct list_head dmm_rsv_list; - spinlock_t dmm_rsv_lock; - -- /* DSP Heap resources */ -- struct dspheap_res_object *pdspheap_list; -- - /* Stream resources */ - struct idr *stream_id; - }; -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspapi-ioctl.h b/drivers/staging/tidspbridge/include/dspbridge/dspapi-ioctl.h -index 8da5bd8..8ad9ace 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dspapi-ioctl.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dspapi-ioctl.h -@@ -120,10 +120,6 @@ union trapped_args { - - struct { - void *hprocessor; -- } args_proc_start; -- -- struct { -- void *hprocessor; - u32 ul_size; - void *__user *pp_rsv_addr; - } args_proc_rsvmem; -@@ -165,10 +161,6 @@ union trapped_args { - - struct { - void *hprocessor; -- } args_proc_stop; -- -- struct { -- void *hprocessor; - void *pmpu_addr; - u32 ul_size; - } args_proc_invalidatememory; -diff --git a/drivers/staging/tidspbridge/include/dspbridge/ldr.h b/drivers/staging/tidspbridge/include/dspbridge/ldr.h -deleted file mode 100644 -index 6a0269c..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/ldr.h -+++ /dev/null -@@ -1,29 +0,0 @@ --/* -- * ldr.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Provide module loading services and symbol export services. -- * -- * Notes: -- * This service is meant to be used by modules of the DSP/BIOS Bridge -- * driver. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef LDR_ --#define LDR_ -- --/* Loader objects: */ --struct ldr_module; -- --#endif /* LDR_ */ -diff --git a/drivers/staging/tidspbridge/pmgr/cod.c b/drivers/staging/tidspbridge/pmgr/cod.c -index db29a19..17ea57d 100644 ---- a/drivers/staging/tidspbridge/pmgr/cod.c -+++ b/drivers/staging/tidspbridge/pmgr/cod.c -@@ -33,9 +33,6 @@ - /* ----------------------------------- Trace & Debug */ - #include <dspbridge/dbc.h> - --/* ----------------------------------- OS Adaptation Layer */ --#include <dspbridge/ldr.h> -- - /* ----------------------------------- Platform Manager */ - /* Include appropriate loader header file */ - #include <dspbridge/dbll.h> -@@ -51,7 +48,6 @@ struct cod_manager { - struct dbll_library_obj *base_lib; - bool loaded; /* Base library loaded? */ - u32 ul_entry; -- struct ldr_module *dll_obj; - struct dbll_fxns fxns; - struct dbll_attrs attrs; - char sz_zl_file[COD_MAXPATHLENGTH]; -@@ -206,8 +202,7 @@ void cod_close(struct cod_libraryobj *lib) - * dynamically loaded object files. - * - */ --int cod_create(struct cod_manager **mgr, char *str_zl_file, -- const struct cod_attrs *attrs) -+int cod_create(struct cod_manager **mgr, char *str_zl_file) - { - struct cod_manager *mgr_new; - struct dbll_attrs zl_attrs; -@@ -219,10 +214,6 @@ int cod_create(struct cod_manager **mgr, char *str_zl_file, - /* assume failure */ - *mgr = NULL; - -- /* we don't support non-default attrs yet */ -- if (attrs != NULL) -- return -ENOSYS; -- - mgr_new = kzalloc(sizeof(struct cod_manager), GFP_KERNEL); - if (mgr_new == NULL) - return -ENOMEM; -diff --git a/drivers/staging/tidspbridge/pmgr/dev.c b/drivers/staging/tidspbridge/pmgr/dev.c -index b95cd20..0f10a50 100644 ---- a/drivers/staging/tidspbridge/pmgr/dev.c -+++ b/drivers/staging/tidspbridge/pmgr/dev.c -@@ -27,9 +27,6 @@ - /* ----------------------------------- Trace & Debug */ - #include <dspbridge/dbc.h> - --/* ----------------------------------- OS Adaptation Layer */ --#include <dspbridge/ldr.h> -- - /* ----------------------------------- Platform Manager */ - #include <dspbridge/cod.h> - #include <dspbridge/drv.h> -@@ -75,7 +72,6 @@ struct dev_object { - struct io_mgr *hio_mgr; /* IO manager (CHNL, msg_ctrl) */ - struct cmm_object *hcmm_mgr; /* SM memory manager. */ - struct dmm_object *dmm_mgr; /* Dynamic memory manager. */ -- struct ldr_module *module_obj; /* Bridge Module handle. */ - u32 word_size; /* DSP word size: quick access. */ - struct drv_object *hdrv_obj; /* Driver Object */ - /* List of Processors attached to this device */ -@@ -139,7 +135,6 @@ int dev_create_device(struct dev_object **device_obj, - struct cfg_devnode *dev_node_obj) - { - struct cfg_hostres *host_res; -- struct ldr_module *module_obj = NULL; - struct bridge_drv_interface *drv_fxns = NULL; - struct dev_object *dev_obj = NULL; - struct chnl_mgrattrs mgr_attrs; -@@ -179,7 +174,6 @@ int dev_create_device(struct dev_object **device_obj, - if (dev_obj) { - /* Fill out the rest of the Dev Object structure: */ - dev_obj->dev_node_obj = dev_node_obj; -- dev_obj->module_obj = module_obj; - dev_obj->cod_mgr = NULL; - dev_obj->hchnl_mgr = NULL; - dev_obj->hdeh_mgr = NULL; -@@ -953,7 +947,7 @@ static int init_cod_mgr(struct dev_object *dev_obj) - DBC_REQUIRE(refs > 0); - DBC_REQUIRE(!dev_obj || (dev_obj->cod_mgr == NULL)); - -- status = cod_create(&dev_obj->cod_mgr, sz_dummy_file, NULL); -+ status = cod_create(&dev_obj->cod_mgr, sz_dummy_file); - - return status; - } -diff --git a/drivers/staging/tidspbridge/rmgr/dbdcd.c b/drivers/staging/tidspbridge/rmgr/dbdcd.c -index b76f26c..9e12a2c 100644 ---- a/drivers/staging/tidspbridge/rmgr/dbdcd.c -+++ b/drivers/staging/tidspbridge/rmgr/dbdcd.c -@@ -134,7 +134,7 @@ int dcd_create_manager(char *sz_zl_dll_name, - DBC_REQUIRE(refs >= 0); - DBC_REQUIRE(dcd_mgr); - -- status = cod_create(&cod_mgr, sz_zl_dll_name, NULL); -+ status = cod_create(&cod_mgr, sz_zl_dll_name); - if (status) - goto func_end; - --- -1.7.1 - diff --git a/patches/dspbridge/0023-staging-tidspbridge-Remove-unused-typedefs.patch b/patches/dspbridge/0023-staging-tidspbridge-Remove-unused-typedefs.patch deleted file mode 100644 index ad4518bf81278529ebc03fcf8e7578fbf87d619e..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0023-staging-tidspbridge-Remove-unused-typedefs.patch +++ /dev/null @@ -1,193 +0,0 @@ -From f64e0d037d0a6671debacde9d3bec5fa5ec6ef30 Mon Sep 17 00:00:00 2001 -From: Armando Uribe <x0095078@ti.com> -Date: Fri, 17 Dec 2010 01:18:32 -0600 -Subject: [PATCH 23/25] staging: tidspbridge - Remove unused typedefs - -Unsed typedefs are removed, because of there are not -used or because previous clean ups. - -Signed-off-by: Armando Uribe <x0095078@ti.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - .../tidspbridge/include/dspbridge/dbldefs.h | 81 -------------------- - .../tidspbridge/include/dspbridge/dblldefs.h | 62 --------------- - 2 files changed, 0 insertions(+), 143 deletions(-) - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dbldefs.h - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h b/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h -deleted file mode 100644 -index 5cf9dad..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/dbldefs.h -+++ /dev/null -@@ -1,81 +0,0 @@ --/* -- * dbldefs.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef DBLDEFS_ --#define DBLDEFS_ -- -- --/* -- * ======== dbl_flags ======== -- * Specifies whether to load code, data, or symbols -- */ --typedef s32 dbl_flags; -- --/* -- * ======== dbl_alloc_fxn ======== -- * Allocate memory function. Allocate or reserve (if reserved == TRUE) -- * "size" bytes of memory from segment "space" and return the address in -- * *dsp_address (or starting at *dsp_address if reserve == TRUE). Returns 0 on -- * success, or an error code on failure. -- */ --typedef s32(*dbl_alloc_fxn) (void *hdl, s32 space, u32 size, u32 align, -- u32 *dsp_address, s32 seg_id, s32 req, -- bool reserved); -- --/* -- * ======== dbl_free_fxn ======== -- * Free memory function. Free, or unreserve (if reserved == TRUE) "size" -- * bytes of memory from segment "space" -- */ --typedef bool(*dbl_free_fxn) (void *hdl, u32 addr, s32 space, u32 size, -- bool reserved); -- --/* -- * ======== dbl_log_write_fxn ======== -- * Function to call when writing data from a section, to log the info. -- * Can be NULL if no logging is required. -- */ --typedef int(*dbl_log_write_fxn) (void *handle, -- struct dbl_sect_info *sect, u32 addr, -- u32 bytes); -- --/* -- * ======== dbl_sym_lookup ======== -- * Symbol lookup function - Find the symbol name and return its value. -- * -- * Parameters: -- * handle - Opaque handle -- * parg - Opaque argument. -- * name - Name of symbol to lookup. -- * sym - Location to store address of symbol structure. -- * -- * Returns: -- * TRUE: Success (symbol was found). -- * FALSE: Failed to find symbol. -- */ --typedef bool(*dbl_sym_lookup) (void *handle, void *parg, void *rmm_handle, -- const char *name, struct dbl_symbol ** sym); -- --/* -- * ======== dbl_write_fxn ======== -- * Write memory function. Write "n" HOST bytes of memory to segment "mtype" -- * starting at address "dsp_address" from the buffer "buf". The buffer is -- * formatted as an array of words appropriate for the DSP. -- */ --typedef s32(*dbl_write_fxn) (void *hdl, u32 dsp_address, void *buf, -- u32 n, s32 mtype); -- --#endif /* DBLDEFS_ */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h b/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h -index 81821e5..30e0aa0 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dblldefs.h -@@ -348,29 +348,6 @@ typedef bool(*dbll_init_fxn) (void); - typedef int(*dbll_load_fxn) (struct dbll_library_obj *lib, - dbll_flags flags, - struct dbll_attrs *attrs, u32 *entry); -- --/* -- * ======== dbll_load_sect ======== -- * Load a named section from an library (for overlay support). -- * Parameters: -- * lib - Handle returned from dbll_open(). -- * sec_name - Name of section to load. -- * attrs - Contains write function and handle to pass to it. -- * Returns: -- * 0: Success. -- * -ENXIO: Section not found. -- * -ENOSYS: Function not implemented. -- * Requires: -- * Valid lib. -- * sec_name != NULL. -- * attrs != NULL. -- * attrs->write != NULL. -- * Ensures: -- */ --typedef int(*dbll_load_sect_fxn) (struct dbll_library_obj *lib, -- char *sz_sect_name, -- struct dbll_attrs *attrs); -- - /* - * ======== dbll_open ======== - * dbll_open() returns a library handle that can be used to load/unload -@@ -421,23 +398,6 @@ typedef int(*dbll_open_fxn) (struct dbll_tar_obj *target, char *file, - typedef int(*dbll_read_sect_fxn) (struct dbll_library_obj *lib, - char *name, char *content, - u32 cont_size); -- --/* -- * ======== dbll_set_attrs ======== -- * Set the attributes of the target. -- * Parameters: -- * target - Handle returned from dbll_create(). -- * pattrs - New attributes. -- * Returns: -- * Requires: -- * DBL initialized. -- * Valid target. -- * pattrs != NULL. -- * Ensures: -- */ --typedef void (*dbll_set_attrs_fxn) (struct dbll_tar_obj *target, -- struct dbll_attrs *attrs); -- - /* - * ======== dbll_unload ======== - * Unload library loaded with dbll_load(). -@@ -452,28 +412,6 @@ typedef void (*dbll_set_attrs_fxn) (struct dbll_tar_obj *target, - */ - typedef void (*dbll_unload_fxn) (struct dbll_library_obj *library, - struct dbll_attrs *attrs); -- --/* -- * ======== dbll_unload_sect ======== -- * Unload a named section from an library (for overlay support). -- * Parameters: -- * lib - Handle returned from dbll_open(). -- * sec_name - Name of section to load. -- * attrs - Contains free() function and handle to pass to it. -- * Returns: -- * 0: Success. -- * -ENXIO: Named section not found. -- * -ENOSYS -- * Requires: -- * DBL initialized. -- * Valid lib. -- * sec_name != NULL. -- * Ensures: -- */ --typedef int(*dbll_unload_sect_fxn) (struct dbll_library_obj *lib, -- char *sz_sect_name, -- struct dbll_attrs *attrs); -- - struct dbll_fxns { - dbll_close_fxn close_fxn; - dbll_create_fxn create_fxn; --- -1.7.1 - diff --git a/patches/dspbridge/0024-staging-tidspbridge-Remove-trivial-header-files.patch b/patches/dspbridge/0024-staging-tidspbridge-Remove-trivial-header-files.patch deleted file mode 100644 index d230ba9a3d9e3373ee9817cbfc7cc0b2d990ceb5..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0024-staging-tidspbridge-Remove-trivial-header-files.patch +++ /dev/null @@ -1,442 +0,0 @@ -From 7cffa2c6f40f993bc4405c5b4a29e1a0ee77826c Mon Sep 17 00:00:00 2001 -From: Armando Uribe <x0095078@ti.com> -Date: Fri, 17 Dec 2010 01:18:33 -0600 -Subject: [PATCH 24/25] staging: tidspbridge - Remove trivial header files - -Remove the header files that contains few declarations -and can be merged onto more generic headers. - -Signed-off-by: Armando Uribe <x0095078@ti.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/core/tiomap3430_pwr.c | 4 +- - .../tidspbridge/include/dspbridge/dehdefs.h | 31 ----------------- - .../staging/tidspbridge/include/dspbridge/dev.h | 4 +- - .../staging/tidspbridge/include/dspbridge/disp.h | 15 ++++++++- - .../tidspbridge/include/dspbridge/dispdefs.h | 35 -------------------- - .../staging/tidspbridge/include/dspbridge/drv.h | 4 ++- - .../tidspbridge/include/dspbridge/drvdefs.h | 25 -------------- - .../tidspbridge/include/dspbridge/dspdefs.h | 4 +- - .../staging/tidspbridge/include/dspbridge/dspio.h | 3 +- - drivers/staging/tidspbridge/include/dspbridge/io.h | 13 +++++++- - .../staging/tidspbridge/include/dspbridge/io_sm.h | 7 +++- - .../staging/tidspbridge/include/dspbridge/iodefs.h | 34 ------------------- - .../staging/tidspbridge/include/dspbridge/node.h | 2 +- - .../staging/tidspbridge/include/dspbridge/pwr.h | 8 ++++- - .../staging/tidspbridge/include/dspbridge/pwr_sh.h | 29 ---------------- - drivers/staging/tidspbridge/pmgr/io.c | 1 - - drivers/staging/tidspbridge/rmgr/drv_interface.c | 1 - - drivers/staging/tidspbridge/rmgr/node.c | 1 - - 18 files changed, 51 insertions(+), 170 deletions(-) - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dehdefs.h - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/dispdefs.h - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/drvdefs.h - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/iodefs.h - delete mode 100644 drivers/staging/tidspbridge/include/dspbridge/pwr_sh.h - -diff --git a/drivers/staging/tidspbridge/core/tiomap3430_pwr.c b/drivers/staging/tidspbridge/core/tiomap3430_pwr.c -index fb9026e..8e2b50f 100644 ---- a/drivers/staging/tidspbridge/core/tiomap3430_pwr.c -+++ b/drivers/staging/tidspbridge/core/tiomap3430_pwr.c -@@ -29,13 +29,13 @@ - /* ----------------------------------- Platform Manager */ - #include <dspbridge/brddefs.h> - #include <dspbridge/dev.h> --#include <dspbridge/iodefs.h> -+#include <dspbridge/io.h> - - /* ------------------------------------ Hardware Abstraction Layer */ - #include <hw_defs.h> - #include <hw_mmu.h> - --#include <dspbridge/pwr_sh.h> -+#include <dspbridge/pwr.h> - - /* ----------------------------------- Bridge Driver */ - #include <dspbridge/dspdeh.h> -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dehdefs.h b/drivers/staging/tidspbridge/include/dspbridge/dehdefs.h -deleted file mode 100644 -index 5341471..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/dehdefs.h -+++ /dev/null -@@ -1,31 +0,0 @@ --/* -- * dehdefs.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Definition for Bridge driver module DEH. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef DEHDEFS_ --#define DEHDEFS_ -- --#include <dspbridge/mbx_sh.h> /* shared mailbox codes */ -- --/* DEH object manager */ --struct deh_mgr; -- --/* Magic code used to determine if DSP signaled exception. */ --#define DEH_BASE MBX_DEH_BASE --#define DEH_LIMIT MBX_DEH_LIMIT -- --#endif /* _DEHDEFS_H */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dev.h b/drivers/staging/tidspbridge/include/dspbridge/dev.h -index 4d4196b..37d1fff 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dev.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dev.h -@@ -23,9 +23,9 @@ - #include <dspbridge/chnldefs.h> - #include <dspbridge/cmm.h> - #include <dspbridge/cod.h> --#include <dspbridge/dehdefs.h> -+#include <dspbridge/dspdeh.h> - #include <dspbridge/nodedefs.h> --#include <dspbridge/dispdefs.h> -+#include <dspbridge/disp.h> - #include <dspbridge/dspdefs.h> - #include <dspbridge/dmm.h> - #include <dspbridge/host_os.h> -diff --git a/drivers/staging/tidspbridge/include/dspbridge/disp.h b/drivers/staging/tidspbridge/include/dspbridge/disp.h -index 82bf721..41738c5 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/disp.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/disp.h -@@ -22,7 +22,20 @@ - #include <dspbridge/dbdefs.h> - #include <dspbridge/nodedefs.h> - #include <dspbridge/nodepriv.h> --#include <dspbridge/dispdefs.h> -+ -+struct disp_object; -+ -+/* Node Dispatcher attributes */ -+struct disp_attr { -+ u32 ul_chnl_offset; /* Offset of channel ids reserved for RMS */ -+ /* Size of buffer for sending data to RMS */ -+ u32 ul_chnl_buf_size; -+ int proc_family; /* eg, 5000 */ -+ int proc_type; /* eg, 5510 */ -+ void *reserved1; /* Reserved for future use. */ -+ u32 reserved2; /* Reserved for future use. */ -+}; -+ - - /* - * ======== disp_create ======== -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dispdefs.h b/drivers/staging/tidspbridge/include/dspbridge/dispdefs.h -deleted file mode 100644 -index 946551a..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/dispdefs.h -+++ /dev/null -@@ -1,35 +0,0 @@ --/* -- * dispdefs.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Global DISP constants and types, shared by PROCESSOR, NODE, and DISP. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef DISPDEFS_ --#define DISPDEFS_ -- --struct disp_object; -- --/* Node Dispatcher attributes */ --struct disp_attr { -- u32 ul_chnl_offset; /* Offset of channel ids reserved for RMS */ -- /* Size of buffer for sending data to RMS */ -- u32 ul_chnl_buf_size; -- int proc_family; /* eg, 5000 */ -- int proc_type; /* eg, 5510 */ -- void *reserved1; /* Reserved for future use. */ -- u32 reserved2; /* Reserved for future use. */ --}; -- --#endif /* DISPDEFS_ */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/drv.h b/drivers/staging/tidspbridge/include/dspbridge/drv.h -index 26972ad..bcb2817 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/drv.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/drv.h -@@ -23,9 +23,11 @@ - - #include <dspbridge/devdefs.h> - --#include <dspbridge/drvdefs.h> - #include <linux/idr.h> - -+/* Bridge Driver Object */ -+struct drv_object; -+ - /* Provide the DSP Internal memory windows that can be accessed from L3 address - * space */ - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/drvdefs.h b/drivers/staging/tidspbridge/include/dspbridge/drvdefs.h -deleted file mode 100644 -index 2920917..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/drvdefs.h -+++ /dev/null -@@ -1,25 +0,0 @@ --/* -- * drvdefs.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Definition of common struct between dspdefs.h and drv.h. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef DRVDEFS_ --#define DRVDEFS_ -- --/* Bridge Driver Object */ --struct drv_object; -- --#endif /* DRVDEFS_ */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h b/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h -index 2acbbb3..4eaeb21 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dspdefs.h -@@ -32,9 +32,9 @@ - #include <dspbridge/brddefs.h> - #include <dspbridge/cfgdefs.h> - #include <dspbridge/chnlpriv.h> --#include <dspbridge/dehdefs.h> -+#include <dspbridge/dspdeh.h> - #include <dspbridge/devdefs.h> --#include <dspbridge/iodefs.h> -+#include <dspbridge/io.h> - #include <dspbridge/msgdefs.h> - - /* Handle to Bridge driver's private device context. */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/dspio.h b/drivers/staging/tidspbridge/include/dspbridge/dspio.h -index 5c666b8..66b64fa 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/dspio.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/dspio.h -@@ -24,7 +24,8 @@ - #define DSPIO_ - - #include <dspbridge/devdefs.h> --#include <dspbridge/iodefs.h> -+#include <dspbridge/io.h> -+ - - extern int bridge_io_create(struct io_mgr **io_man, - struct dev_object *hdev_obj, -diff --git a/drivers/staging/tidspbridge/include/dspbridge/io.h b/drivers/staging/tidspbridge/include/dspbridge/io.h -index da4683c..9615980 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/io.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/io.h -@@ -22,7 +22,18 @@ - #include <dspbridge/cfgdefs.h> - #include <dspbridge/devdefs.h> - --#include <dspbridge/iodefs.h> -+/* IO Objects: */ -+struct io_mgr; -+ -+/* IO manager attributes: */ -+struct io_attrs { -+ u8 birq; /* Channel's I/O IRQ number. */ -+ bool irq_shared; /* TRUE if the IRQ is shareable. */ -+ u32 word_size; /* DSP Word size. */ -+ u32 shm_base; /* Physical base address of shared memory. */ -+ u32 usm_length; /* Size (in bytes) of shared memory. */ -+}; -+ - - /* - * ======== io_create ======== -diff --git a/drivers/staging/tidspbridge/include/dspbridge/io_sm.h b/drivers/staging/tidspbridge/include/dspbridge/io_sm.h -index 8778ab4..6d26472 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/io_sm.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/io_sm.h -@@ -23,7 +23,12 @@ - #include <dspbridge/_chnl_sm.h> - #include <dspbridge/host_os.h> - --#include <dspbridge/iodefs.h> -+#include <dspbridge/io.h> -+#include <dspbridge/mbx_sh.h> /* shared mailbox codes */ -+ -+/* Magic code used to determine if DSP signaled exception. */ -+#define DEH_BASE MBX_DEH_BASE -+#define DEH_LIMIT MBX_DEH_LIMIT - - #define IO_INPUT 0 - #define IO_OUTPUT 1 -diff --git a/drivers/staging/tidspbridge/include/dspbridge/iodefs.h b/drivers/staging/tidspbridge/include/dspbridge/iodefs.h -deleted file mode 100644 -index 31cbc9a..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/iodefs.h -+++ /dev/null -@@ -1,34 +0,0 @@ --/* -- * iodefs.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * System-wide channel objects and constants. -- * -- * Copyright (C) 2005-2006 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef IODEFS_ --#define IODEFS_ -- --/* IO Objects: */ --struct io_mgr; -- --/* IO manager attributes: */ --struct io_attrs { -- u8 birq; /* Channel's I/O IRQ number. */ -- bool irq_shared; /* TRUE if the IRQ is shareable. */ -- u32 word_size; /* DSP Word size. */ -- u32 shm_base; /* Physical base address of shared memory. */ -- u32 usm_length; /* Size (in bytes) of shared memory. */ --}; -- --#endif /* IODEFS_ */ -diff --git a/drivers/staging/tidspbridge/include/dspbridge/node.h b/drivers/staging/tidspbridge/include/dspbridge/node.h -index 4c5558c..63739c8 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/node.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/node.h -@@ -22,7 +22,7 @@ - #include <dspbridge/procpriv.h> - - #include <dspbridge/nodedefs.h> --#include <dspbridge/dispdefs.h> -+#include <dspbridge/disp.h> - #include <dspbridge/nldrdefs.h> - #include <dspbridge/drv.h> - -diff --git a/drivers/staging/tidspbridge/include/dspbridge/pwr.h b/drivers/staging/tidspbridge/include/dspbridge/pwr.h -index a6dc783..5e3ab21 100644 ---- a/drivers/staging/tidspbridge/include/dspbridge/pwr.h -+++ b/drivers/staging/tidspbridge/include/dspbridge/pwr.h -@@ -18,7 +18,13 @@ - #define PWR_ - - #include <dspbridge/dbdefs.h> --#include <dspbridge/pwr_sh.h> -+#include <dspbridge/mbx_sh.h> -+ -+/* valid sleep command codes that can be sent by GPP via mailbox: */ -+#define PWR_DEEPSLEEP MBX_PM_DSPIDLE -+#define PWR_EMERGENCYDEEPSLEEP MBX_PM_EMERGENCYSLEEP -+#define PWR_WAKEUP MBX_PM_DSPWAKEUP -+ - - /* - * ======== pwr_sleep_dsp ======== -diff --git a/drivers/staging/tidspbridge/include/dspbridge/pwr_sh.h b/drivers/staging/tidspbridge/include/dspbridge/pwr_sh.h -deleted file mode 100644 -index c78a1b1..0000000 ---- a/drivers/staging/tidspbridge/include/dspbridge/pwr_sh.h -+++ /dev/null -@@ -1,29 +0,0 @@ --/* -- * pwr_sh.h -- * -- * DSP-BIOS Bridge driver support functions for TI OMAP processors. -- * -- * Power Manager shared definitions (used on both GPP and DSP sides). -- * -- * Copyright (C) 2008 Texas Instruments, Inc. -- * -- * This package is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -- */ -- --#ifndef PWR_SH_ --#define PWR_SH_ -- --#include <dspbridge/mbx_sh.h> -- --/* valid sleep command codes that can be sent by GPP via mailbox: */ --#define PWR_DEEPSLEEP MBX_PM_DSPIDLE --#define PWR_EMERGENCYDEEPSLEEP MBX_PM_EMERGENCYSLEEP --#define PWR_WAKEUP MBX_PM_DSPWAKEUP -- --#endif /* PWR_SH_ */ -diff --git a/drivers/staging/tidspbridge/pmgr/io.c b/drivers/staging/tidspbridge/pmgr/io.c -index 20cbb9f..0e8843f 100644 ---- a/drivers/staging/tidspbridge/pmgr/io.c -+++ b/drivers/staging/tidspbridge/pmgr/io.c -@@ -31,7 +31,6 @@ - - /* ----------------------------------- This */ - #include <ioobj.h> --#include <dspbridge/iodefs.h> - #include <dspbridge/io.h> - - /* ----------------------------------- Globals */ -diff --git a/drivers/staging/tidspbridge/rmgr/drv_interface.c b/drivers/staging/tidspbridge/rmgr/drv_interface.c -index 324fcdf..c43c7e3 100644 ---- a/drivers/staging/tidspbridge/rmgr/drv_interface.c -+++ b/drivers/staging/tidspbridge/rmgr/drv_interface.c -@@ -59,7 +59,6 @@ - #include <dspbridge/chnl.h> - #include <dspbridge/proc.h> - #include <dspbridge/dev.h> --#include <dspbridge/drvdefs.h> - #include <dspbridge/drv.h> - - #ifdef CONFIG_TIDSPBRIDGE_DVFS -diff --git a/drivers/staging/tidspbridge/rmgr/node.c b/drivers/staging/tidspbridge/rmgr/node.c -index b196a7a..27af99d 100644 ---- a/drivers/staging/tidspbridge/rmgr/node.c -+++ b/drivers/staging/tidspbridge/rmgr/node.c -@@ -64,7 +64,6 @@ - #include <dspbridge/nldr.h> - - #include <dspbridge/drv.h> --#include <dspbridge/drvdefs.h> - #include <dspbridge/resourcecleanup.h> - #include <_tiomap.h> - --- -1.7.1 - diff --git a/patches/dspbridge/0025-staging-tidspbridge-remove-code-referred-by-OPT_ZERO.patch b/patches/dspbridge/0025-staging-tidspbridge-remove-code-referred-by-OPT_ZERO.patch deleted file mode 100644 index a56d2913ed9c4d60b131c67033859202fa025036..0000000000000000000000000000000000000000 --- a/patches/dspbridge/0025-staging-tidspbridge-remove-code-referred-by-OPT_ZERO.patch +++ /dev/null @@ -1,103 +0,0 @@ -From ed98b576aaebed67265a72057bd949444dab8d80 Mon Sep 17 00:00:00 2001 -From: Ramos Falcon, Ernesto <ernesto@ti.com> -Date: Mon, 20 Dec 2010 21:23:08 +0000 -Subject: [PATCH 25/25] staging: tidspbridge: remove code referred by OPT_ZERO_COPY_LOADER - -Remove code referred by OPT_ZERO_COPY_LOADER since it is -not used. - -Signed-off-by: Ernesto Ramos <ernesto@ti.com> -Signed-off-by: Omar Ramirez Luna <omar.ramirez@ti.com> ---- - drivers/staging/tidspbridge/dynload/cload.c | 60 +++++++++------------------ - 1 files changed, 20 insertions(+), 40 deletions(-) - -diff --git a/drivers/staging/tidspbridge/dynload/cload.c b/drivers/staging/tidspbridge/dynload/cload.c -index c85a5e8..d0cd445 100644 ---- a/drivers/staging/tidspbridge/dynload/cload.c -+++ b/drivers/staging/tidspbridge/dynload/cload.c -@@ -1131,9 +1131,6 @@ static void dload_data(struct dload_state *dlthis) - u16 curr_sect; - struct doff_scnhdr_t *sptr = dlthis->sect_hdrs; - struct ldr_section_info *lptr = dlthis->ldr_sections; --#ifdef OPT_ZERO_COPY_LOADER -- bool zero_copy = false; --#endif - u8 *dest; - - struct { -@@ -1192,17 +1189,6 @@ static void dload_data(struct dload_state *dlthis) - return; - } - dest = ibuf.bufr; --#ifdef OPT_ZERO_COPY_LOADER -- zero_copy = false; -- if (!dload_check_type(sptr, DLOAD_CINIT) { -- dlthis->myio->writemem(dlthis->myio, -- &dest, -- lptr->load_addr + -- image_offset, -- lptr, 0); -- zero_copy = (dest != ibuf.bufr); -- } --#endif - /* End of determination */ - - if (dlthis->strm->read_buffer(dlthis->strm, -@@ -1266,33 +1252,27 @@ static void dload_data(struct dload_state *dlthis) - &ibuf.ipacket); - cinit_processed = true; - } else { --#ifdef OPT_ZERO_COPY_LOADER -- if (!zero_copy) { --#endif -- /* FIXME */ -- if (!dlthis->myio-> -- writemem(dlthis-> -- myio, -- ibuf.bufr, -- lptr-> -- load_addr + -- image_offset, -- lptr, -- BYTE_TO_HOST -- (ibuf. -- ipacket. -- packet_size))) { -- DL_ERROR -- ("Write to " -- FMT_UI32 -- " failed", -- lptr-> -- load_addr + -- image_offset); -- } --#ifdef OPT_ZERO_COPY_LOADER -+ /* FIXME */ -+ if (!dlthis->myio-> -+ writemem(dlthis-> -+ myio, -+ ibuf.bufr, -+ lptr-> -+ load_addr + -+ image_offset, -+ lptr, -+ BYTE_TO_HOST -+ (ibuf. -+ ipacket. -+ packet_size))) { -+ DL_ERROR -+ ("Write to " -+ FMT_UI32 -+ " failed", -+ lptr-> -+ load_addr + -+ image_offset); - } --#endif - } - } - image_offset += --- -1.7.1 - diff --git a/patches/no_devtmps-defconfig b/patches/no_devtmps-defconfig index 97e6af5fdabf51587ee451a6be255c0bf2c36c39..f6f2fe5aa70f578b37e233534fb2e662eb1c03fc 100644 --- a/patches/no_devtmps-defconfig +++ b/patches/no_devtmps-defconfig @@ -3222,7 +3222,15 @@ CONFIG_ZRAM=m # CONFIG_LIRC_STAGING is not set # CONFIG_SMB_FS is not set # CONFIG_EASYCAP is not set -# CONFIG_TIDSPBRIDGE is not set +CONFIG_TIDSPBRIDGE=m +CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE=0x600000 +# CONFIG_TIDSPBRIDGE_DEBUG is not set +CONFIG_TIDSPBRIDGE_RECOVERY=y +# CONFIG_TIDSPBRIDGE_CACHE_LINE_CHECK is not set +CONFIG_TIDSPBRIDGE_WDT3=y +CONFIG_TIDSPBRIDGE_WDT_TIMEOUT=5 +# CONFIG_TIDSPBRIDGE_NTFY_PWRERR is not set +# CONFIG_TIDSPBRIDGE_BACKTRACE is not set # CONFIG_WESTBRIDGE is not set CONFIG_WESTBRIDGE_HAL_SELECTED=y CONFIG_MACH_OMAP3_WESTBRIDGE_AST_PNAND_HAL=y diff --git a/version.sh b/version.sh index be3389b8d817312d458ceeed89e9df1d0a54cf55..0ddb3996a12e8c04d83dace8ca10d3d782e3b863 100644 --- a/version.sh +++ b/version.sh @@ -7,7 +7,7 @@ KERNEL_REL=2.6.37 #PRE_RC=2.6.37-git18 RC_KERNEL=2.6.38 RC_PATCH=-rc2 -ABI=1.1 +ABI=1.2 if [ "${NO_DEVTMPS}" ] ; then BUILD=dold${ABI}