Commit Graph

3302 Commits

Author SHA1 Message Date
Hans Petter Selasky
2110950be8 - Disable hardware checksumming until it is properly tested.
- Don't discard frames if the dropped or error flag is set.
- Don't remove the last 4-bytes of every packet.
- Add extra range check for data position offset when receiving data.

MFC after:	1 day
PR:		191432
2014-07-03 10:49:46 +00:00
Hans Petter Selasky
d9b6ab3a76 Fix order of USB serial layer uninit. Currently module dependency
rules prevent the USB serial module to be unloaded before any client
modules. This patch ensures that the "ucom_mtx" mutex is destroyed
last when doing a system uninit in a monotolith build aswell.

MFC after:	3 days
2014-07-01 07:30:29 +00:00
Hans Petter Selasky
31136808a4 Fix for use after free.
MFC after:	3 days
2014-07-01 07:13:41 +00:00
Hans Petter Selasky
af3b2549c4 Pull in r267961 and r267973 again. Fix for issues reported will follow. 2014-06-28 03:56:17 +00:00
Glen Barber
37a107a407 Revert r267961, r267973:
These changes prevent sysctl(8) from returning proper output,
such as:

 1) no output from sysctl(8)
 2) erroneously returning ENOMEM with tools like truss(1)
    or uname(1)
 truss: can not get etype: Cannot allocate memory
2014-06-27 22:05:21 +00:00
Hans Petter Selasky
3da1cf1e88 Extend the meaning of the CTLFLAG_TUN flag to automatically check if
there is an environment variable which shall initialize the SYSCTL
during early boot. This works for all SYSCTL types both statically and
dynamically created ones, except for the SYSCTL NODE type and SYSCTLs
which belong to VNETs. A new flag, CTLFLAG_NOFETCH, has been added to
be used in the case a tunable sysctl has a custom initialisation
function allowing the sysctl to still be marked as a tunable. The
kernel SYSCTL API is mostly the same, with a few exceptions for some
special operations like iterating childrens of a static/extern SYSCTL
node. This operation should probably be made into a factored out
common macro, hence some device drivers use this. The reason for
changing the SYSCTL API was the need for a SYSCTL parent OID pointer
and not only the SYSCTL parent OID list pointer in order to quickly
generate the sysctl path. The motivation behind this patch is to avoid
parameter loading cludges inside the OFED driver subsystem. Instead of
adding special code to the OFED driver subsystem to post-load tunables
into dynamically created sysctls, we generalize this in the kernel.

Other changes:
- Corrected a possibly incorrect sysctl name from "hw.cbb.intr_mask"
to "hw.pcic.intr_mask".
- Removed redundant TUNABLE statements throughout the kernel.
- Some minor code rewrites in connection to removing not needed
TUNABLE statements.
- Added a missing SYSCTL_DECL().
- Wrapped two very long lines.
- Avoid malloc()/free() inside sysctl string handling, in case it is
called to initialize a sysctl from a tunable, hence malloc()/free() is
not ready when sysctls from the sysctl dataset are registered.
- Bumped FreeBSD version to indicate SYSCTL API change.

MFC after:	2 weeks
Sponsored by:	Mellanox Technologies
2014-06-27 16:33:43 +00:00
Hans Petter Selasky
561227da30 Add proper rangechecks in "axge_rx_frame()" function and
fix receive loop header parsing.

MFC after:	3 days
PR:		191432
2014-06-27 10:24:36 +00:00
Marius Strobl
cabe79d9d8 Avoid the USB device disconnected and controller shutdown clutter on system
shutdown by putting the former under !rebooting and turning the latter into
debug messages.

Reviewed by:	hps
MFC after:	1 week
Sponsored by:	Bally Wulff Games & Entertainment GmbH
2014-06-10 08:20:00 +00:00
Hans Petter Selasky
d64e9217c4 Resolve a deadlock setting the USB configuration index from userspace
on USB HUBs by moving the code into the USB explore threads. The
deadlock happens because child devices of the USB HUB don't have the
expected reference count when called from outside the explore
thread. Only the HUB device itself, which the IOCTL interface locks,
gets the correct reference count.

MFC after:	3 days
2014-06-08 20:10:29 +00:00
Hans Petter Selasky
4a4da38fcf Make WITNESS happy by giving USB mutexes different names.
Reported by:	trociny @
MFC after:	3 days
2014-06-07 15:51:29 +00:00
Hans Petter Selasky
2c9288df89 Fix for USB specification compliance. We need to accept both DATA0 and
DATA1 for INTERRUPT endpoints.

MFC after:	3 days
2014-06-07 10:13:45 +00:00
Hans Petter Selasky
dea9afcfae Some further DWC OTG improvements for full speed and low speed devices:
- Revert r265427. It appears we are halting the DWC OTG host
controller schedule if we process events only at every SOF. When doing
split transactions we rely on that events are processed quickly and
waiting too long might cause data loss.
- We are not always able to meet the timing requirements of interrupt
endpoint split transactions. Switch from INTERRUPT to CONTROL endpoint
type for interrupt endpoint events until further, hence CONTROL
endpoint events are more relaxed, reducing the chance of data
loss. See comment in code for more in-depth explanation.
- Simplify TT scheduling.

MFC after:	3 days
2014-06-07 07:23:17 +00:00
Hans Petter Selasky
408b9d7cfb - Verify that we don't load more data into a FIFO than it is
configured to handle.
- Add code to handle suspend and resume.

MFC after:	3 days
2014-06-05 18:23:51 +00:00
Hans Petter Selasky
1b1df1a91f Need to check the transfer cache field in the device done function
to be sure all allocated channels are freed and not the transfer first
one.
2014-06-05 18:19:48 +00:00
Hans Petter Selasky
08aa4c94b8 Try to fix DWC OTG regression issues with full and low speed devices:
- Remove double buffering interrupt and isochronous traffic via the
transaction translator. It can be avoided because the DWC OTG will
always delay the start split transactions for interrupt and
isochronous traffic, but will not delay the complete split
transactions, if we set the odd frame bit correctly.
- Need to check the transfer cache field in the device done function
to be sure all allocated channels are freed and not the transfer first
one. This seems to resolve the control endpoint transfer type quirk
which is now removed.
- Make sure any received data upon TX is dumped else RX path will
stop.
- Transmit isochronous data before receiving isochronous data as a
means to optimise the TT schedule.
- Implement a simple TT bandwidth scheduler.
- Cleanup use of old "td->error" variable.
- On interrupt IN traffic via the transaction translator we simply
ignore missed transfer opportunities and silently retry the
transaction upon next available time slot.

MFC after:	3 days
2014-06-05 18:17:40 +00:00
Kevin Lo
a080f71521 Remove D-Link DWA140 rev D1 by accident.
Pointed out by Anders Larsson in private email.
2014-06-05 01:55:23 +00:00
Hans Petter Selasky
bb03cd6fa1 More RSU fixes:
- Properly align temporary buffer to 32-bit.
- Add an extra parenthesis to make expression clear.
- Range check the association ID received from hardware.

MFC after:	1 week
2014-06-04 16:58:35 +00:00
Hans Petter Selasky
a31f80290e The external USB HUB in the RPI-B rejects control endpoint traffic
using the BULK endpoint type, while other USB HUBs do not. Disable
endpoint type workaround for TT traffic.

MFC after:	3 days
2014-06-04 10:29:01 +00:00
Hans Petter Selasky
910593b55c Fixes for the RSU driver:
- The R92S_TCR register is an 8-bit register. Don't access it like a
16-bit register.
- Disable parsing the delete station event, due to many false events.
- Ensure that there is only one transfer queue for each endpoint, so
that packets transmitted don't get out of order.

MFC after:	1 week
2014-06-04 09:18:13 +00:00
Hans Petter Selasky
b2fa7d8104 Change type of the DMA address so that on PAE platforms we get can
64-bit DMA addresses even though the USB stack currently only uses
32-bit DMA.

Suggested by:	Kohji Okuno <okuno.kohji@jp.panasonic.com>
2014-06-02 07:08:34 +00:00
Hans Petter Selasky
dd5a01badc Add basic support for isochronous transfers in host mode to the
ISP/SAF1761 driver.

Sponsored by:	DARPA, AFRL
2014-06-01 10:22:18 +00:00
Hans Petter Selasky
4be86ee126 It appears the ISP/SAF1761 sometimes is busy when reading the status
word of the PTD and simply returns a value of zero. Retry a few times
before giving up.

Sponsored by:	DARPA, AFRL
2014-05-30 16:44:03 +00:00
Hans Petter Selasky
ce19294c0e Make driver detach code in USB mass storage test optional.
Sponsored by:	DARPA, AFRL
2014-05-30 13:45:20 +00:00
Hans Petter Selasky
74c1f36628 Add ISP/SAF1761 bootloader bus interface file.
Sponsored by:	DARPA, AFRL
2014-05-30 13:42:11 +00:00
Hans Petter Selasky
e045de0740 Add support for basic read, write and read capacity disk operations to
the USB mass storage test utility file.

Sponsored by:	DARPA, AFRL
2014-05-30 07:30:24 +00:00
Hans Petter Selasky
2994bac4ba Add some more spinlocks to protect the state of the USB transfer
queue. Rename some functions to indicate locking requirements.

MFC after:	1 week
2014-05-29 11:11:19 +00:00
Hans Petter Selasky
0b4dc07df8 Hook the ISP/SAF1761 driver into MIPS kernel builds.
- Update FDT file for BERI DE4 boards.
- Add needed kernel configuration keywords.
- Rename module to saf1761otg so that the device unit number does not
interfere with the hardware ID in dmesg.

Sponsored by:	DARPA, AFRL
2014-05-29 10:46:09 +00:00
Hans Petter Selasky
580bc2220a Optimise the ISP/SAF1761 driver:
- Use an interrupt filter for handling the data path interrupts. This
increases the throughput significantly.
- Implement support for USB suspend and resume in USB host mode.

Sponsored by:	DARPA, AFRL
2014-05-29 10:06:18 +00:00
Hans Petter Selasky
4272b84663 Fixes for ISP/SAF1761 host mode:
- Make the USB hardware skip PTDs which are not allocated.
- Peek host memory twice. Sometimes the PTD status is incorrectly
returned as zero.
- Ensure the host channel is always freed when software TD
is completing.
- Add correct configuration of interrupt polarity and type.
- Set CERR to 2 for asynchronous traffic to avoid having to
reactivate the PTD when a NAK token is received.
- Fix detection of STALL PID.

Sponsored by:	DARPA, AFRL
2014-05-28 16:28:22 +00:00
Hans Petter Selasky
6df8a79713 - Correct bus space resource type for register access.
- Add configuration of interrupt type and polarity via FDT.

Sponsored by:	DARPA, AFRL
2014-05-27 10:12:16 +00:00
Hans Petter Selasky
21c85d9d3b Multiple fixes and improvements:
- Put "_LE_" into the register access macros to indicate little endian
byte order is expected by the hardware.
- Avoid using the bounce buffer when not strictly needed. Try to move
data directly using bus-space functions first.
- Ensure we preserve the reserved bits in the power down mode
register. Else the hardware goes into a non-recoverable state.
- Always use 32-bit access when writing or reading registers or FIFOs,
because the hardware is 32-bit oriented and don't really understand 8-
and 16-bit access.
- Correct writes to the memory address register. There is no need to
shift the register offset.
- Correct interval for interrupt endpoints.
- Optimise 90ns internal memory buffer read delay.
- Rename PDT into PTD, which is how the datasheet writes it.
- Add missing programming for activating host controller PTDs.

Sponsored by:	DARPA, AFRL
2014-05-27 10:01:19 +00:00
Kevin Lo
d32048bb6d - Improve performance by fixing incorrect Rx/Tx handling
- Rename definition of AXGE_* to reflect reality
- Add new USB IDs
2014-05-27 08:14:54 +00:00
Kevin Lo
26c79a7652 Remove r264317 by accident.
Spotted by:	Kuan-Chung Chiu
2014-05-27 01:47:23 +00:00
Hans Petter Selasky
3bee4e7bdb Make SAF1761 driver endian safe.
Sponsored by:	DARPA, AFRL
2014-05-25 06:42:43 +00:00
Hans Petter Selasky
1593e8754e - Give firmware loading more time.
MFC after:	3 days
2014-05-22 12:01:43 +00:00
Hans Petter Selasky
c73bbf989d - Fix a bug where the TLBPC value was forced to being odd for IN
direction isochronous transfers.
- Remove setting of fields which does not belong to the respective
TRBs. These fields are currently set as zero and this is more a
cosmetic change.

MFC after:	3 days
Submitted by:	Horse Ma <HMa@wyse.com>
2014-05-22 11:58:15 +00:00
Hans Petter Selasky
885476cb9a - Stop transfers when RSU init fails.
- Make sure TX/RX lists don't leak and are only allocated once.
- Fix off-by one transfer index computation.
- Give firmware loading more time.

MFC after:	3 days
2014-05-22 06:28:09 +00:00
Hans Petter Selasky
8e14e4a03a Implement interrupt endpoint methods for host mode transfers.
Sponsored by:	DARPA, AFRL
2014-05-21 17:22:41 +00:00
Hans Petter Selasky
400b4e53bd - Split transmit queue into one for each type. Apparently there will
be a race when using a single active queue for all transmit types.
- Last argument of usb_pause_mtx() is ticks and not milliseconds.
- Remove unused watchdog.
- Remove some unused fields from the RSU softc structure.
- Workaround usbd_transfer_start() recursion from inside of completion
callback.

MFC after:	3 days
2014-05-21 16:52:55 +00:00
Hans Petter Selasky
c13c64fa63 - Replace some constants with macros.
- Need to set the pre-fetch memory address when reading the host memory.
- We currently assume that no endianness conversion is needed.

Sponsored by:	DARPA, AFRL
2014-05-21 09:26:02 +00:00
Kevin Lo
61c067adc3 - Configure Rx bulk
- Announce flow control capability to PHY drivers
2014-05-21 08:09:44 +00:00
Hans Petter Selasky
302a703b5b Avoid starting a USB transfer inside the callback function, right
after its been submitted.

MFC after:	3 days
2014-05-21 06:23:52 +00:00
Hans Petter Selasky
aff6e94558 - The DELAY() should not be used in USB drivers.
- The usb_pause_mtx() function takes ticks and not milliseconds as last argument.

MFC after:	3 days
2014-05-20 15:53:17 +00:00
Hans Petter Selasky
b41381aea9 - The DELAY() should not be used in USB drivers.
- The usb_pause_mtx() function takes ticks and not milliseconds as last argument.

MFC after:	3 days
2014-05-20 15:47:37 +00:00
Hans Petter Selasky
6804df87a9 Correct some programming details. The layout of the PDTs were
different from what was initially thought. Fix re-programming of
hardware mode register after reset.

Sponsored by:	DARPA, AFRL
2014-05-20 14:15:03 +00:00
Hans Petter Selasky
7243077c9d Make sure detach code is executed in all cases. This fixes a panic
when debugging is enabled.

Reported by:	Idwer Vollering <vidwer@gmail.com>
MFC after:	3 days
2014-05-20 12:22:53 +00:00
Hans Petter Selasky
e85f0d3141 - Remove no longer used file. FDT is used to attach device drivers. 2014-05-18 09:19:13 +00:00
Hans Petter Selasky
2fe7ad87e9 - Add softc pointer argument to FIFO functions as an optimisation.
- Implement support for interrupt filters in the DWC OTG driver, to
reduce the amount of CPU task switching when only feeding the FIFOs.
- Add common spinlock to the USB bus structure.

MFC after:	2 weeks
2014-05-18 09:13:29 +00:00
Christian Brueffer
73aa8b9a75 Remove some unused variables.
Found with:	Clang Static Analyzer
MFC after:	2 weeks
2014-05-16 21:19:17 +00:00
Hans Petter Selasky
dfe11c1395 Enable host controller interrupts.
Sponsored by:	DARPA, AFRL
2014-05-16 16:36:07 +00:00