coreboot-kgpe-d16/payloads/libpayload/include
Julius Werner d13e2c4ab7 libpayload: usb: Refactor USB enumeration to fix SuperSpeed devices
This patch represents a major overhaul of the USB enumeration code in
order to make it cleaner and much more robust to weird or malicious
devices. The main improvement is that it correctly parses the USB
descriptors even if there are unknown descriptors interspersed within,
which is perfectly legal and in particular present on all SuperSpeed
devices (due to the SuperSpeed Endpoint Companion Descriptor).

In addition, it gets rid of the really whacky and special cased
get_descriptor() function, which would read every descriptor twice
whether it made sense or not. The new code makes the callers allocate
descriptor memory and only read stuff twice when it's really necessary
(i.e. the device and configuration descriptors).

Finally, it also moves some more responsibilities into the
controller-specific set_address() function in order to make sure things
are initialized at the same stage for all controllers. In the new model
it initializes the device entry (which zeroes the endpoint array), sets
up endpoint 0 (including MPS), sets the device address and finally
returns the whole usbdev_t structure with that address correctly set.

Note that this should make SuperSpeed devices work, but SuperSpeed hubs
are a wholly different story and would require a custom hub driver
(since the hub descriptor and port status formats are different for USB
3.0 ports, and the whole issue about the same hub showing up as two
different devices on two different ports might present additional
challenges). The stack currently just issues a warning and refuses to
initialize this part of the hub, which means that 3.0 devices connected
through a 3.0 hub may not work correctly.

Change-Id: Ie0b82dca23b7a750658ccc1a85f9daae5fbc20e1
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/170666
Reviewed-by: Kees Cook <keescook@chromium.org>
(cherry picked from commit ecec80e062f7efe32a9a17479dcf8cb678a4a98b)
Signed-off-by: Isaac Christensen <isaac.christensen@se-eng.com>
Reviewed-on: http://review.coreboot.org/6780
Tested-by: build bot (Jenkins)
2014-09-04 01:59:15 +02:00
..
armv7/arch arm: libpayload: Make cache invalidation take pointers instead of integers 2014-08-29 06:41:42 +02:00
arpa Refactor the endianness conversion functions and header files. 2012-11-08 19:49:51 +01:00
pci libpayload: Add a few more PCI constants 2013-08-26 00:24:53 +02:00
storage libpayload: Change CONFIG_* to CONFIG_LP_* in the kconfig. 2014-08-05 18:44:08 +02:00
sys libpayload: Start using only internal and compiler headers. 2013-03-13 22:04:44 +01:00
usb libpayload: usb: Refactor USB enumeration to fix SuperSpeed devices 2014-09-04 01:59:15 +02:00
x86/arch libpayload: Make EHCI driver cache-aware 2014-08-14 23:40:25 +02:00
assert.h libpayload: Fix the format string of the assert macro. 2012-11-07 18:36:05 +01:00
cbfs.h libpayload: New CBFS to support multiple firmware media sources. 2013-02-12 11:34:20 +01:00
cbfs_core.h libpayload: Change CONFIG_* to CONFIG_LP_* in the kconfig. 2014-08-05 18:44:08 +02:00
cbfs_ram.h libpayload: expose cbfs ram functions 2013-12-12 22:22:12 +01:00
coreboot_tables.h arm: libpayload: Add cache coherent DMA memory definition and management 2014-08-13 00:04:14 +02:00
ctype.h Attached patch moves functions out of the huge libpayload.h into headers 2010-06-24 11:16:10 +00:00
endian.h libpayload: Change CONFIG_* to CONFIG_LP_* in the kconfig. 2014-08-05 18:44:08 +02:00
errno.h Attached patch moves functions out of the huge libpayload.h into headers 2010-06-24 11:16:10 +00:00
getopt.h Since some people disapprove of white space cleanups mixed in regular commits 2010-04-27 06:56:47 +00:00
inttypes.h libpayload: Start using only internal and compiler headers. 2013-03-13 22:04:44 +01:00
ipchksum.h Move the definition of ipchksum into its own header file. 2012-11-07 18:30:21 +01:00
kconfig.h libpayload: Change CONFIG_* to CONFIG_LP_* in the kconfig. 2014-08-05 18:44:08 +02:00
keycodes.h libpayload: Make keycode constants available outside of curses.h. 2013-03-18 20:45:48 +01:00
lar.h
libpayload.h libpayload: hexdump.c: Change type of length argument to size_t 2014-08-10 08:30:07 +02:00
limits.h libpayload: Improve compatibility 2011-07-16 11:09:28 +02:00
lzma.h LZMA: Add a version of ulzma which takes the input and output buffer sizes. 2014-08-10 22:29:51 +02:00
malloc.h libpayload: Provide atol(), malloc.h 2011-07-07 22:29:53 +02:00
multiboot_tables.h [PATCH] libpayload: Add multiboot support 2008-10-20 16:51:43 +00:00
panel.h libpayload: Add PDCurses and ncurses' libform/libmenu 2011-08-04 08:10:41 +02:00
pci.h libpayload: Add definitions for more config space registers. 2012-11-07 18:36:27 +01:00
stdarg.h libpayload: Don't sneak in compiler includes 2013-04-18 02:50:28 +02:00
stddef.h Make ssize_t an actual ssize_t 2013-11-25 23:13:50 +01:00
stdint.h libpayload: Add more integer limits 2013-06-27 14:48:08 +02:00
stdio.h libpayload: Add the format attribute to functions in stdio.h. 2012-11-07 18:36:14 +01:00
stdlib.h libpayload: dma_malloc: Prevent warm reboot problems and add debugging 2014-08-14 23:41:44 +02:00
string.h libpayload: Add strerror 2013-06-28 10:39:57 +02:00
strings.h libpayload: Implement ffs() 2011-03-01 07:23:49 +00:00
sysinfo.h libpayload: Change CONFIG_* to CONFIG_LP_* in the kconfig. 2014-08-05 18:44:08 +02:00
term.h libpayload: remove trailing whitespace and run dos2unix 2011-11-01 19:08:23 +01:00
unistd.h libpayload: Don't sneak in compiler includes 2013-04-18 02:50:28 +02:00
video_console.h Add coreboot framebuffer support to libpayload 2010-03-25 18:56:26 +00:00