summaryrefslogtreecommitdiff
path: root/firmware/src/os/usb_benchmark.c
diff options
context:
space:
mode:
authorlaforge <laforge@6dc7ffe9-61d6-0310-9af1-9938baff3ed1>2006-09-22 21:41:22 +0000
committerlaforge <laforge@6dc7ffe9-61d6-0310-9af1-9938baff3ed1>2006-09-22 21:41:22 +0000
commit706ffa9f3b986eff193377142459fbfde2362036 (patch)
treefbdb2d853265bf783db3a9eceebdded08efd297e /firmware/src/os/usb_benchmark.c
parent1c2b1d22016957bebe0a49c9069b85815f7cf936 (diff)
- move large rctx definitions to req_ctx.h
- add more fine-grained debugging macros in pcd_enumarate.c - resolve race conditions between main-loop ep_refill and irq-triggered ep_refill by adding one irq-[b]locking variant - consolidate endpoint reset code into reset_ep() - add code to handle correct transmission and reception of usb transfers larger than endpoint size - use new jump address (0x104000) in DFU Cstartup.S - move main_usb to pcd subdirectory - fix include/compile.h make dependencies - make usb benchmark code use new large req_ctx git-svn-id: https://svn.openpcd.org:2342/trunk@219 6dc7ffe9-61d6-0310-9af1-9938baff3ed1
Diffstat (limited to 'firmware/src/os/usb_benchmark.c')
-rw-r--r--firmware/src/os/usb_benchmark.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/firmware/src/os/usb_benchmark.c b/firmware/src/os/usb_benchmark.c
index bfc6b37..967efbb 100644
--- a/firmware/src/os/usb_benchmark.c
+++ b/firmware/src/os/usb_benchmark.c
@@ -21,6 +21,7 @@
#include <string.h>
#include <lib_AT91SAM7.h>
#include <os/led.h>
+#include <os/dbgu.h>
#include <os/pcd_enumerate.h>
#include <os/usb_handler.h>
#include <os/req_ctx.h>
@@ -49,18 +50,30 @@ static void usbtest_tx_transfer(unsigned int num_pkts)
static int usbtest_rx(struct req_ctx *rctx)
{
struct openpcd_hdr *poh = (struct openpcd_hdr *) rctx->data;
+ struct req_ctx *rctx_new;
int i;
switch (poh->cmd) {
case OPENPCD_CMD_USBTEST_IN:
+ DEBUGP("USBTEST_IN ");
/* test bulk in pipe */
- for (i = 0; i < poh->reg; i++) {
- usbtest_tx_transfer(poh->val);
- led_toggle(2);
+ if (poh->val > RCTX_SIZE_LARGE/AT91C_EP_OUT_SIZE)
+ poh->val = RCTX_SIZE_LARGE/AT91C_EP_OUT_SIZE;
+ rctx_new = req_ctx_find_get(1, RCTX_STATE_FREE,
+ RCTX_STATE_MAIN_PROCESSING);
+ if (!rctx_new) {
+ DEBUGP("NO RCTX ");
+ return USB_ERR(0);
}
+
+ rctx_new->tot_len = poh->val * AT91C_EP_OUT_SIZE;
+ req_ctx_set_state(rctx_new, RCTX_STATE_UDP_EP2_PENDING);
+ led_toggle(2);
break;
case OPENPCD_CMD_USBTEST_OUT:
+ DEBUGP("USBTEST_IN ");
/* test bulk out pipe */
+ return USB_ERR(USB_ERR_CMD_NOT_IMPL);
break;
}
personal git repositories of Harald Welte. Your mileage may vary