Hi, I used the USB-serial driver option.c to communicate with the GSM modem device through usb, the used host controller is EHCI. The problem is that nothing appear on the screen when type characters after using "microcom -s 115200 /dev/ttyUSB3" command to access the ttyUSB3 device node. In normal case, typing characters is eqaul to request the EHCI to do a write transaction to transmit the typed characters to the device, after that a read trasaction should be followed to read the typed characters received by the device. But in this case, the read trasaction is not executed after the write transaction is done. The evidence is that the "Active status" bit and "Total Bytes to Transfer" bits of hw_token member in ehci_qtd structure are not modified by the EHCI for a completion of the read transaction. Parts of successfull and failed case logs for ehci-hcd.c are listed below with different flags passed to open_or_warn() at microcom.c: ----------------------------------------------- Failed case: type a character 'a', the write transaction completed but the read transaction malfunctioned flags of open_or_warn() at microcom.c: O_RDWR | O_NOCTTY | O_NONBLOCK [ 693.508000] usb_hcd_submit_urb: enqueue!!!! [ 693.512000] ehci_urb_enqueue: PIPE_BULK, urb->complete: 86e0d3cc [ 693.516000] In qh_urb_transaction, USB_DIR_OUT at line 720, PID: 0, hw_token = 18c80, qtd_dma = 6e08180 [ 693.524000] ath-ehci ath-ehci.0: submit_async 1 urb 86e510c0 ep4out len 1, qtd a6e08180 [qh (null)] [ 693.524000] In qh_make: assign qh to qh_make_out_debug = a6e09300 [ 693.524000] In qh_make: qh address a6e09300 [ 693.524000] In qh_append_tds: qtd_list is not empty! [ 693.524000] In qh_append_tds: qh->qtd_list is not empty [ 693.524000] In qh_append_tds: Urb bulk out [ 693.524000] submit_async: at line 1086 [ 693.524000] In qh_link_async: ehci->regs->command = 10025 [ 693.676000] In ehci_irq: interrupt occurs [ 693.676000] ath-ehci ath-ehci.0: irq status ca089 Async Recl FLR INT [ 693.676000] At line 1372, In scan_async: qh->qtd_list is not empty [ 693.676000] At line 382(write), In qh_completions: qtd->hw_token = 80008c01, qtd->hw_alt_next = 1 [ 693.676000] In qh_completions: qh->hw_alt_next = 7, qh->hw_token = 80008c01, qh->hw_info1 = 42002402, qh->hw_info2 = 40000000 [ 693.676000] In qh_completions: at line 410 [ 693.676000] In ehci_urb_done [ 693.676000] ath-ehci ath-ehci.0: ehci_urb_done 1 urb 86e510c0 ep4out status 0 len 1/1 [ 693.676000] In usb_hcd_giveback_urb: urb->transfer_buffer = a [before unmap_urb_for_dma()] [ 693.676000] call complete function: 86e0d3cc [ 693.676000] In option_outdat_callback [ 693.676000] At line 1383, In scan_async: After qh_completions(), temp = 1, qh_make_debug = a6e09280 [ 693.676000] At line 1409, In scan_async: process the next qh, qh address: a6e09280 [ 693.676000] At line 1372, In scan_async: qh->qtd_list is not empty [ 693.676000] At line 372(read), In qh_completions: qtd->hw_token = 10008d80, qtd->hw_alt_next = 1 [ 693.676000] In qh_completions: qh->hw_alt_next = 1, qh->hw_token = 10008d80, qh->hw_info1 = 42002502, qh->hw_info2 = 40000000 [ 693.676000] In qh_completions: at line 440 [ 693.676000] At line 1383, In scan_async: After qh_completions(), temp = 0, qh_make_debug = a6e09280 [ 693.676000] At line 1409, In scan_async: process the next qh, qh address: 0 [ 694.020000] At line 1409, In scan_async: process the next qh, qh address: a6e09280 [ 694.020000] At line 1372, In scan_async: qh->qtd_list is not empty [ 694.020000] In qh_completions: at line 440 [ 694.020000] At line 1383, In scan_async: After qh_completions(), temp = 0, qh_make_debug = a6e09280 [ 694.020000] At line 1409, In scan_async: process the next qh, qh address: 0 [ 694.056000] In ehci_irq: interrupt occurs [ 694.056000] ath-ehci ath-ehci.0: irq status c80a8 Async IAA FLR [ 694.056000] At line 330, In qh_completions: qh->qth_list is empty [ 694.120000] At line 1372, In scan_async: qh->qtd_list is not empty [ 694.120000] In qh_completions: at line 440 ----------------------------------------------- successfull case: type a character 'a', the write transaction completed followed by a completion of read transaction flags of open_or_warn() at microcom.c: O_RDWR | O_NOCTTY [ 466.868000] usb_hcd_submit_urb: enqueue!!!! [ 466.872000] ehci_urb_enqueue: PIPE_BULK, urb->complete: 86e193cc [ 466.876000] In qh_urb_transaction, USB_DIR_OUT at line 720, PID: 0, hw_token = 18c80, qtd_dma = 6e0e4e0 [ 466.884000] ath-ehci ath-ehci.0: submit_async 1 urb 86e080c0 ep4out len 1, qtd a6e0e4e0 [qh (null)] [ 466.884000] In qh_make: assign qh to qh_make_out_debug = a6e0f300 [ 466.884000] In qh_make: qh address a6e0f300 [ 466.884000] In qh_append_tds: qtd_list is not empty! [ 466.884000] In qh_append_tds: qh->qtd_list is not empty [ 466.884000] In qh_append_tds: Urb bulk out [ 466.884000] submit_async: at line 1086 [ 466.884000] In qh_link_async: ehci->regs->command = 10025 [ 467.036000] In ehci_irq: interrupt occurs [ 467.036000] ath-ehci ath-ehci.0: irq status c8089 Async FLR INT [ 467.036000] At line 1372, In scan_async: qh->qtd_list is not empty [ 467.036000] At line 382(write), In qh_completions: qtd->hw_token = 80008c01, qtd->hw_alt_next = 1 [ 467.036000] In qh_completions: qh->hw_alt_next = 7, qh->hw_token = 80008c01, qh->hw_info1 = 42002402, qh->hw_info2 = 40000000 [ 467.036000] In qh_completions: at line 410 [ 467.036000] In ehci_urb_done [ 467.036000] ath-ehci ath-ehci.0: ehci_urb_done 1 urb 86e080c0 ep4out status 0 len 1/1 [ 467.036000] In usb_hcd_giveback_urb: urb->transfer_buffer = a [before unmap_urb_for_dma()] [ 467.036000] call complete function: 86e193cc [ 467.036000] In option_outdat_callback [ 467.036000] At line 1383, In scan_async: After qh_completions(), temp = 1, qh_make_debug = a6e0f280 [ 467.036000] At line 1409, In scan_async: process the next qh, qh address: a6e0f280 [ 467.036000] At line 1372, In scan_async: qh->qtd_list is not empty [ 467.036000] At line 372(read), In qh_completions: qtd->hw_token = 8fff8d00, qtd->hw_alt_next = 1 [ 467.036000] In qh_completions: qh->hw_alt_next = 1, qh->hw_token = 90008d80, qh->hw_info1 = 42002502, qh->hw_info2 = 40000000 [ 467.036000] In qh_completions: at line 406 [ 467.036000] In ehci_urb_done [ 467.036000] ath-ehci ath-ehci.0: ehci_urb_done 1 urb 86e082c0 ep5in status 0 len 1/4096 [ 467.036000] In usb_hcd_giveback_urb: urb->transfer_buffer = a [before unmap_urb_for_dma()] [ 467.036000] call complete function: 86e194d0 [ 467.036000] In option_indat_callback ----------------------------------------------- Obviously, the read transaction works when open a device node in blocking mode with "microcom", but fails when open a device node in non-blocking mode with "microcom". I don't know how the user space program "microcom" affect the ehci-hcd driver running at kernel space. Finally, aditional information is provided here: ----------------------------------------------- 1. Kernel version: 2.6.31 2. # ls /sys/bus/usb/devices/ /sys/bus/usb/devices/1-0:1.0/ /sys/bus/usb/devices/1-1:1.3/ /sys/bus/usb/devices/1-1/ /sys/bus/usb/devices/1-1:1.4/ /sys/bus/usb/devices/1-1:1.0/ /sys/bus/usb/devices/1-1:1.5/ /sys/bus/usb/devices/1-1:1.1/ /sys/bus/usb/devices/usb1/ /sys/bus/usb/devices/1-1:1.2/ ----------------------------------------------- Any suggestion about how to fix the bug would be appreciated sincerely loki -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html