summaryrefslogtreecommitdiff
path: root/tests/test/support/ehci_controller.c
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-03-10 17:51:53 +0700
committerhathach <[email protected]>2013-03-10 17:51:53 +0700
commitc1848b8114c178bd2b80257118c9cb5789b8e810 (patch)
tree3dc199402e7c57ec40bd12f4693e70f8bce13bdf /tests/test/support/ehci_controller.c
parent889f267e12f1f2d218d2d7e1124eefc2cf899774 (diff)
add code for ehci interrupt handler
- interrupt source identifying - for async list process refractor control_xfer to use insert_qtd_to_qhd - add test for control xfer interrupt processing - add code for faking ehci controller async list scheduling & processing - add prototype for void usbh_isr(pipe_handle_t pipe_hdl, uint8_t class_code);
Diffstat (limited to 'tests/test/support/ehci_controller.c')
-rw-r--r--tests/test/support/ehci_controller.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/test/support/ehci_controller.c b/tests/test/support/ehci_controller.c
new file mode 100644
index 000000000..fed3c730e
--- /dev/null
+++ b/tests/test/support/ehci_controller.c
@@ -0,0 +1,78 @@
+/*
+ * ehci_controller.c
+ *
+ * Created on: Mar 9, 2013
+ * Author: hathach
+ */
+
+/*
+ * Software License Agreement (BSD License)
+ * Copyright (c) 2012, hathach (tinyusb.net)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the tiny usb stack.
+ */
+
+//--------------------------------------------------------------------+
+// INCLUDE
+//--------------------------------------------------------------------+
+#include "unity.h"
+#include "tusb_option.h"
+#include "errors.h"
+#include "binary.h"
+#include "hal.h"
+#include "ehci.h"
+
+//--------------------------------------------------------------------+
+// MACRO CONSTANT TYPEDEF
+//--------------------------------------------------------------------+
+extern ehci_data_t ehci_data;
+
+//--------------------------------------------------------------------+
+// IMPLEMENTATION
+//--------------------------------------------------------------------+
+void ehci_controller_run(uint8_t hostid)
+{
+ //------------- Async List -------------//
+ ehci_registers_t* const regs = get_operational_register(hostid);
+
+ ehci_qhd_t *p_qhd = (ehci_qhd_t*) regs->async_list_base;
+ do
+ {
+ if ( !p_qhd->qtd_overlay.halted )
+ {
+ while(!p_qhd->qtd_overlay.next.terminate)
+ {
+ ehci_qtd_t* p_qtd = (ehci_qtd_t*) align32(p_qhd->qtd_overlay.next.address);
+ p_qtd->active = 0;
+ p_qhd->qtd_overlay = *p_qtd;
+ }
+ }
+ p_qhd = (ehci_qhd_t*) align32(p_qhd->next.address);
+ }while(p_qhd != get_async_head(hostid)); // stop if loop around
+ //------------- Period List -------------//
+
+ regs->usb_sts = EHCI_INT_MASK_NXP_ASYNC;
+}