atom feed22 messages in org.freebsd.freebsd-usblibusb usb_interrupt_read hangs under...
FromSent OnAttachments
Xiaofan ChenApr 3, 2007 11:54 am 
Hans Petter SelaskyApr 3, 2007 12:26 pm 
Xiaofan ChenApr 3, 2007 1:34 pm 
Hans Petter SelaskyApr 3, 2007 2:42 pm 
Xiaofan ChenApr 3, 2007 11:55 pm 
Hans Petter SelaskyApr 4, 2007 7:37 am 
Xiaofan ChenApr 4, 2007 11:34 am 
Xiaofan ChenJul 4, 2007 5:32 pm 
Hans Petter SelaskyJul 5, 2007 3:24 pm 
Xiaofan ChenJul 8, 2007 12:25 am 
M. Warner LoshJul 8, 2007 5:11 am 
Xiaofan ChenJul 8, 2007 1:16 pm 
Xiaofan ChenJul 8, 2007 4:31 pm 
M. Warner LoshJul 8, 2007 8:00 pm 
Hans Petter SelaskyJul 9, 2007 4:35 pm 
Xiaofan ChenJul 10, 2007 1:27 am 
Xiaofan ChenJul 13, 2007 10:32 pm 
Hans Petter SelaskyJul 15, 2007 9:18 am 
Xiaofan ChenJul 16, 2007 3:44 pm 
Hans Petter SelaskyJul 17, 2007 5:55 am 
Xiaofan ChenAug 11, 2007 4:45 am 
Xiaofan ChenSep 22, 2007 3:47 am 
Subject:libusb usb_interrupt_read hangs under FreeBSD
From:Xiaofan Chen (xiao@gmail.com)
Date:Jul 8, 2007 12:25:01 am
List:org.freebsd.freebsd-usb

On 7/5/07, Hans Petter Selasky <hsel@c2i.net> wrote:

The chip does not handle a clear-stall request on the control pipe to clear-stall on the interrupt pipe. The result is that the interrupt pipe stops, or at least all buffers are cleared.

The following is part of the usb firmware from Micrcohip.

Somehow it masks EP0 in the handler to SET & CLEAR FEATURES requesrs. Is this the problem?

if((SetupPkt.bFeature == ENDPOINT_HALT)&& (SetupPkt.Recipient == RCPT_EP)&& (SetupPkt.EPNum != 0))

/****************************************************************************** * Function: void USBStdFeatureReqHandler(void) * * PreCondition: None * * Input: None * * Output: None * * Side Effects: None * * Overview: This routine handles the standard SET & CLEAR FEATURES * requests * * Note: None *****************************************************************************/ void USBStdFeatureReqHandler(void) { if((SetupPkt.bFeature == DEVICE_REMOTE_WAKEUP)&& (SetupPkt.Recipient == RCPT_DEV)) { ctrl_trf_session_owner = MUID_USB9; if(SetupPkt.bRequest == SET_FEATURE) usb_stat.RemoteWakeup = 1; else usb_stat.RemoteWakeup = 0; }//end if

if((SetupPkt.bFeature == ENDPOINT_HALT)&& (SetupPkt.Recipient == RCPT_EP)&& (SetupPkt.EPNum != 0)) { ctrl_trf_session_owner = MUID_USB9; /* Must do address calculation here */ pDst.bRam = (byte*)&ep0Bo+(SetupPkt.EPNum*8)+(SetupPkt.EPDir*4);

if(SetupPkt.bRequest == SET_FEATURE) *pDst.bRam = _USIE|_BSTALL; else { if(SetupPkt.EPDir == 1) // IN *pDst.bRam = _UCPU; else *pDst.bRam = _USIE|_DAT0|_DTSEN; }//end if }//end if }//end USBStdFeatureReqHandler

Regards, Xiaofan