On Sun, Mar 15, 2015 at 12:32:04PM +0330, Navid Movahedi wrote:
Hi I have a usb 1 HID device with 2 endpoints, 1 in, 1 out, and i want to enumerate this usb device with seabios at boot time, so i hacked seabios hid source code and add needed codes for this device. now device is full functional with uhci driver in vmware and i have no problem with read and write to device . the problem is for machines with ehci controllers that don't have companion uhci controller and uses rate matching hub to connect to this usb 1 device. The currewnt status for this kind of controller is that the device is detected and configured and 2 endpoints and corresponding 2 interrupt pipes are allocated and initialized but when i use usb_send_pipe function to write to device , error occurs . error is Timeout in ehci_wait_td function in this section of code:
for (i=0, td=tds; i<STACKQTDS; i++, td++) { ret = ehci_wait_td(pipe, td, end); if (ret) return -1; }
timeout occurs for second td. i called usb_send_pipe function in this way:
usb_send_pipe(out_pipe, USB_DIR_OUT , NULL , data, 64);
is it correct?
How can i solve this problem?
We'd need to see the full seabios log in order to help. When the EHCI controller complains, it should also print out some ehci registers which give further information on what the controller was doing at the time of the error.
Was this second ehci setup also on vmware or on some other emulator/real hardware?
-Kevin
Hi Is there a mechanism to save log messages at boot time? I tested again and found that ehci_wait_td function timeouts in all execution of for loop including first. which registers you want to know? i got these information from log messages:
pipe->qh.current = 0x1eff8d80 pipe->qh.token = 0x00400141 pipe->qh.qtd_next = 0x1efff140 td->token = 0x00400c80 pipe->qh.info1 = 0x00400202 pipe->qh.info2 = 0x00400202
for uhci i used vmware workstation and it works perfectly and i can send and receive data from hid device, but my real hardware does not have uhci controller , instead it has 2 EHCI controller with rate matching hub, so i should use ehci driver for this kind of controller.
On Sun, Mar 15, 2015 at 7:03 PM, Kevin O'Connor kevin@koconnor.net wrote:
On Sun, Mar 15, 2015 at 12:32:04PM +0330, Navid Movahedi wrote:
Hi I have a usb 1 HID device with 2 endpoints, 1 in, 1 out, and i want to enumerate this usb device with seabios at boot time, so i hacked seabios hid source code and add needed codes for this device. now device is full functional with uhci driver in vmware and i have no problem with read and write to device . the problem is for machines with ehci controllers that don't have companion uhci controller and uses rate matching hub to connect to this usb 1 device. The currewnt status for this kind of controller is that the device is detected and configured and 2 endpoints and corresponding 2 interrupt pipes are allocated and initialized but when i use usb_send_pipe function to write to device , error occurs . error is Timeout in ehci_wait_td function in this section of code:
for (i=0, td=tds; i<STACKQTDS; i++, td++) { ret = ehci_wait_td(pipe, td, end); if (ret) return -1; }
timeout occurs for second td. i called usb_send_pipe function in this
way:
usb_send_pipe(out_pipe, USB_DIR_OUT , NULL , data, 64);
is it correct?
How can i solve this problem?
We'd need to see the full seabios log in order to help. When the EHCI controller complains, it should also print out some ehci registers which give further information on what the controller was doing at the time of the error.
Was this second ehci setup also on vmware or on some other emulator/real hardware?
-Kevin