icE1usb fw: Expose error conditions from E1 driver

This will allow the USB interface code to report the errors to the
host PC.

Related: OS#4674
Change-Id: Iba3e00a2b28a2fef6dbd986bfc706c1619c3a3ed
diff --git a/firmware/ice40-riscv/icE1usb/usb_desc_app.c b/firmware/ice40-riscv/icE1usb/usb_desc_app.c
index 9fe3968..153d70e 100644
--- a/firmware/ice40-riscv/icE1usb/usb_desc_app.c
+++ b/firmware/ice40-riscv/icE1usb/usb_desc_app.c
@@ -28,12 +28,14 @@
 			struct usb_ep_desc ep_data_in;
 			struct usb_ep_desc ep_data_out;
 			struct usb_ep_desc ep_fb;
+			struct usb_ep_desc ep_interrupt;
 		} __attribute__ ((packed)) off;
 		struct {
 			struct usb_intf_desc intf;
 			struct usb_ep_desc ep_data_in;
 			struct usb_ep_desc ep_data_out;
 			struct usb_ep_desc ep_fb;
+			struct usb_ep_desc ep_interrupt;
 		} __attribute__ ((packed)) on;
 	} __attribute__ ((packed)) e1;
 
@@ -79,7 +81,7 @@
 				.bDescriptorType	= USB_DT_INTF,
 				.bInterfaceNumber	= 0,
 				.bAlternateSetting	= 0,
-				.bNumEndpoints		= 3,
+				.bNumEndpoints		= 4,
 				.bInterfaceClass	= 0xff,
 				.bInterfaceSubClass	= 0xe1,
 				.bInterfaceProtocol	= 0x00,
@@ -109,6 +111,14 @@
 				.wMaxPacketSize		= 0,
 				.bInterval		= 3,
 			},
+			.ep_interrupt = {
+				.bLength		= sizeof(struct usb_ep_desc),
+				.bDescriptorType	= USB_DT_EP,
+				.bEndpointAddress	= 0x83,
+				.bmAttributes		= 0x03,
+				.wMaxPacketSize		= 10,
+				.bInterval		= 3,
+			},
 		},
 		.on = {
 			.intf = {
@@ -116,7 +126,7 @@
 				.bDescriptorType	= USB_DT_INTF,
 				.bInterfaceNumber	= 0,
 				.bAlternateSetting	= 1,
-				.bNumEndpoints		= 3,
+				.bNumEndpoints		= 4,
 				.bInterfaceClass	= 0xff,
 				.bInterfaceSubClass	= 0xe1,
 				.bInterfaceProtocol	= 0x00,
@@ -146,6 +156,14 @@
 				.wMaxPacketSize		= 8,
 				.bInterval		= 3,
 			},
+			.ep_interrupt = {
+				.bLength		= sizeof(struct usb_ep_desc),
+				.bDescriptorType	= USB_DT_EP,
+				.bEndpointAddress	= 0x83,
+				.bmAttributes		= 0x03,
+				.wMaxPacketSize		= 10,
+				.bInterval		= 3,
+			},
 		},
 	},
 #if 0