I do the following to send the packet:
- I construct the USB setup packet in memory, using the structure in the USB 1.1 specs.
- I stop the UHCI if it is running.
- I construct a transfer descriptor on a 32 byte-aligned address with max. length 7 (size of setup packet - 1) and type 0x2D (setup packet.)
- If the data length in the setup packet is not zero, I construct another transfer descriptor for that data.
- I construct the frame list with one valid entry pointing to the first TD and one invalid entry. (The first TD pointers to the second TD.)
- I set the frame number register to zero, to start from the beginning of the frame list.
- I start the host controller.
Code: Select all
00023253606i[UHCI ] port #1: speed = low
00023642803i[UHCI ] port #1: speed = low
00023642815i[UHCI ] port #1: speed = low
00023642815i[UHCI ] Port1: Reset
00024042827i[UHCI ] Port2: Reset
00024476000e[UHCI ] invalid max. length value 0x06c6
00028572000e[UHCI ] invalid max. length value 0x06c6
00032668000e[UHCI ] invalid max. length value 0x06c6
00036764000e[UHCI ] invalid max. length value 0x06c6
00040860000e[UHCI ] invalid max. length value 0x06c6
00044956000e[UHCI ] invalid max. length value 0x06c6
00049052000e[UHCI ] invalid max. length value 0x06c6
The first TD contains:
Code: Select all
0000d800 04000000 00e0002d 0000cce0
Code: Select all
00000001 04000000 02200069 0000cacd