usb: use USBDescriptor for endpoint descriptors.
Add endpoint descriptor substruct to USBDescriptor, use it in the descriptor generator code. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
		
							parent
							
								
									feafd797ee
								
							
						
					
					
						commit
						e36a20d329
					
				| 
						 | 
				
			
			@ -200,21 +200,23 @@ int usb_desc_endpoint(const USBDescEndpoint *ep, uint8_t *dest, size_t len)
 | 
			
		|||
{
 | 
			
		||||
    uint8_t bLength = ep->is_audio ? 0x09 : 0x07;
 | 
			
		||||
    uint8_t extralen = ep->extra ? ep->extra[0] : 0;
 | 
			
		||||
    USBDescriptor *d = (void *)dest;
 | 
			
		||||
 | 
			
		||||
    if (len < bLength + extralen) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dest[0x00] = bLength;
 | 
			
		||||
    dest[0x01] = USB_DT_ENDPOINT;
 | 
			
		||||
    dest[0x02] = ep->bEndpointAddress;
 | 
			
		||||
    dest[0x03] = ep->bmAttributes;
 | 
			
		||||
    dest[0x04] = usb_lo(ep->wMaxPacketSize);
 | 
			
		||||
    dest[0x05] = usb_hi(ep->wMaxPacketSize);
 | 
			
		||||
    dest[0x06] = ep->bInterval;
 | 
			
		||||
    d->bLength                      = bLength;
 | 
			
		||||
    d->bDescriptorType              = USB_DT_ENDPOINT;
 | 
			
		||||
 | 
			
		||||
    d->u.endpoint.bEndpointAddress  = ep->bEndpointAddress;
 | 
			
		||||
    d->u.endpoint.bmAttributes      = ep->bmAttributes;
 | 
			
		||||
    d->u.endpoint.wMaxPacketSize_lo = usb_lo(ep->wMaxPacketSize);
 | 
			
		||||
    d->u.endpoint.wMaxPacketSize_hi = usb_hi(ep->wMaxPacketSize);
 | 
			
		||||
    d->u.endpoint.bInterval         = ep->bInterval;
 | 
			
		||||
    if (ep->is_audio) {
 | 
			
		||||
        dest[0x07] = ep->bRefresh;
 | 
			
		||||
        dest[0x08] = ep->bSynchAddress;
 | 
			
		||||
        d->u.endpoint.bRefresh      = ep->bRefresh;
 | 
			
		||||
        d->u.endpoint.bSynchAddress = ep->bSynchAddress;
 | 
			
		||||
    }
 | 
			
		||||
    if (ep->extra) {
 | 
			
		||||
        memcpy(dest + bLength, ep->extra, extralen);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,6 +54,15 @@ typedef struct USBDescriptor {
 | 
			
		|||
            uint8_t           bInterfaceProtocol;
 | 
			
		||||
            uint8_t           iInterface;
 | 
			
		||||
        } interface;
 | 
			
		||||
        struct {
 | 
			
		||||
            uint8_t           bEndpointAddress;
 | 
			
		||||
            uint8_t           bmAttributes;
 | 
			
		||||
            uint8_t           wMaxPacketSize_lo;
 | 
			
		||||
            uint8_t           wMaxPacketSize_hi;
 | 
			
		||||
            uint8_t           bInterval;
 | 
			
		||||
            uint8_t           bRefresh;        /* only audio ep */
 | 
			
		||||
            uint8_t           bSynchAddress;   /* only audio ep */
 | 
			
		||||
        } endpoint;
 | 
			
		||||
    } u;
 | 
			
		||||
} QEMU_PACKED USBDescriptor;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue