Commit Graph

59779 Commits

Author SHA1 Message Date
François Revol
46308e28e5 AutoRaise: Just add itself to Deskbar on run
It's simpler, nobody runs things in Terminal, right?
2019-03-11 03:16:39 +01:00
PulkoMandy
f42cda29e8 sparc: get libroot to build
Add various stubs to fix undefined references. No implementation for
anything yet.

Change-Id: I2d398bc2369d099e3a35f0713058d6a5edc6801d
Reviewed-on: https://review.haiku-os.org/c/1138
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-10 20:57:18 +00:00
PulkoMandy
803a4704e8 sparc: soft-float support library
No sparc implementation actually has "long double" implemented in
hardware. The instructions are defined in the spec, but they are caught
and emulated by traps.

gcc even bypasses the traps and calls the support functions directly.

Import the required functions from FreeBSD (they implement the
operations as specified in the sparc ABI) and link them into the kernel,
for now (they will also need to be in libroot).

Change-Id: Ifc21faa29fffa4bf5d3941468b62d81229a44971
Reviewed-on: https://review.haiku-os.org/c/1137
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-10 20:57:18 +00:00
PulkoMandy
1c297254e5 sparc: cleanup netresolv
It's trying to set a field that doesn't exist.

Change-Id: Ic45b966585486d5da07ee8dace35160dac9355ed
Reviewed-on: https://review.haiku-os.org/c/1106
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-10 20:57:18 +00:00
PulkoMandy
df19aba5e9 debug_commands: align user_data to 64bits
It is cast to a struct with 64bit fields, so it should be aligned
properly.

Change-Id: I513cfba4d8fc4f4286b13edabc47fbbda3227bf6
Reviewed-on: https://review.haiku-os.org/c/1089
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-10 20:57:18 +00:00
PulkoMandy
14ffc38e44 kernel list: use BytePointer
Change-Id: I259cc33ad71cfbabc7f85278287a64a31dcb5e44
Reviewed-on: https://review.haiku-os.org/c/1101
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-10 20:57:18 +00:00
Adrien Destugues
810071751d BytePointer: address Axel's post-merge comments
These changes had been on review on Gerrit for a few weeks, why do the
comment come only after they were merged?

Change-Id: I54064973e08b8b4dc0624f4c09c7cafb7f04e437
Reviewed-on: https://review.haiku-os.org/c/1185
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-10 20:41:03 +00:00
Adrien Destugues
fb7498fe2e system profiler: revert use of BytePointer.
This went through review way too fast once again. I did warn that these
changes were completely untested, and indeed this one was broken. Be
very careful when pressing the submit button, please!

Change-Id: I6e0230efe94830033f5427451f67fe6ce29a28e6
Reviewed-on: https://review.haiku-os.org/c/1184
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-10 20:41:03 +00:00
François Revol
6ff7e25bd0 mime_db: consider recipe files as text/x-source-code
Opening them in StyledEdit isn't handy.

Change-Id: Icbdcbdbace0432cd7c808eb0011186a4310aed79
2019-03-10 18:19:57 +01:00
François Revol
46113563a3 mime_db: Add some more text/x-source-code extensions
Change-Id: Ia0799e2614ebfeb1e1dd86e0cd60dfc2c3cb391a
2019-03-10 18:18:38 +01:00
Augustin Cavalier
7356f1de4b XHCI: Properly handle partially-failed transfers. 2019-03-09 17:53:31 -05:00
Augustin Cavalier
c5c392585c usb_audio: Fixes for SMAP. 2019-03-09 17:50:25 -05:00
Augustin Cavalier
965d4047bb usb_audio: Trim trailing spaces; change device basename to "hmulti/usb". 2019-03-09 16:10:07 -05:00
Augustin Cavalier
e6a55c69fe XHCI: Miscellaneous tweaks and cleanups.
* Check "endpoint == NULL" instead of the ID for this pipe; as
   _InsertEndpointForPipe will have already done the check for us.
 * Store the endpoint's ID (our internal ID) in the structure, and
   then move the doorbell-ring into _LinkDescriptorForPipe. Now all
   variables named "id" are actually that, and not the endpoint number
   (which is "id + 1".)
 * Return actual statuses in NotifyPipeChange, among other tweaks.
 * All things which set the usb_request_data structure also set data,
   so we can just use ReadDescriptor to do copies like normal, simplifying
   the finish-transfers code.

No (major) functional change intended.
2019-03-09 15:21:04 -05:00
Augustin Cavalier
e4487e3e45 screen_savers/Shelf: Fix build in DEBUG mode. 2019-03-09 14:08:27 -05:00
Augustin Cavalier
6aae8d5abb XHCI: Improve tracing in CreateDescriptor. 2019-03-09 13:27:00 -05:00
PulkoMandy
d581bcba52 slab: use BytePointer
Change-Id: I786f720ccd0c1469287a70906d05633218c25ceb
Reviewed-on: https://review.haiku-os.org/c/1100
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-09 17:09:11 +00:00
PulkoMandy
995aabb04e MessagingService: use BytePointer
Change-Id: If7890e215180206010a374b8afa9f4cd47325afc
Reviewed-on: https://review.haiku-os.org/c/1099
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-09 17:09:11 +00:00
PulkoMandy
5bf19df235 system profiler: use BytePointer
Change-Id: I297edd8aa5f2d8d35af660d557a2c78d68afab97
Reviewed-on: https://review.haiku-os.org/c/1092
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-09 17:09:11 +00:00
PulkoMandy
401f42f794 kernel/fs/fd: use BytePointer
Change-Id: I0fcb549d313fe7193d8e1c2b6b0a44ae4b2fcb95
Reviewed-on: https://review.haiku-os.org/c/1090
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-09 17:09:11 +00:00
PulkoMandy
1b312d7f0a kernel/elf: use BytePointer
Change-Id: I3a40921854540d78dec025b2a349e3a153f91d55
Reviewed-on: https://review.haiku-os.org/c/1083
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2019-03-09 17:09:11 +00:00
PulkoMandy
eea7ceb31d Add BytePointer to help with pointer conversions
This behaves mostly like a pointer, but pointer maths works in bytes,
not the native object size.

It avoids casting to char* and back when doing byte-based pointer math,
making the code easier to read.

Change-Id: I6a8681a398345f0c7d419a2cfe7244d972ffa62f
Reviewed-on: https://review.haiku-os.org/c/1086
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-09 17:09:11 +00:00
Augustin Cavalier
c32137f3fd kernel: Tweak some mutex functions.
* Remove code duplication.
 * Make _mutex_trylock work in non-KDEBUG kernels. This should fix
   spurious failures to lock in drivers compiled for KDEBUG kernels
   running under non-KDEBUG kernels.
2019-03-09 12:02:00 -05:00
Jérôme Duval
10baa577a9 hda: wait between set and unset of the GLOBAL_CONTROL_RESET bit.
* the spec requires 521us, 1000us is generally used.
* also only uninit streams, corb and rirb when a codec reset is in progress (seen in zircon).
linux instead clears HDAC_STATE_STATUS.
2019-03-09 16:04:43 +01:00
Augustin Cavalier
3131c13005 XHCI: Implement the debug transfer hooks.
This requires a bit of massaging around the locking code. Probably
we shouldn't be able to do this, and there should be a "mutex_unlock_etc"
for use in interrupt contexts, but at present there is not.

This makes it possible to use XHCI-attached keyboards from within KDL!
2019-03-08 22:06:34 -05:00
Augustin Cavalier
9bdd88ebe3 XHCI: Granularize locking.
This is not so important now (though it is a mild performance improvement
when running transfers during commands), but it will be when the debug
transfer hooks are implemented, as we will need to use these to determine
if it is safe to queue and poll for transfers or not.
2019-03-08 20:40:12 -05:00
Augustin Cavalier
187a2c6ce7 XHCI: Completely overhaul endpoint configuration logic.
The code as it was before was very hard to follow and incorrect in
a number of corner cases, as well as not being very clear about what
the TODOs were.

It now follows the spec much more closely (especially in interval
computation) and contains more details on where it is still lacking.

This probably does not fix much (if anything) as is, but it paves the
way for future isochronous support.
2019-03-08 20:40:12 -05:00
Jérôme Duval
9ba45ef924 Update libroot stubs. 2019-03-08 23:12:05 +01:00
Jérôme Duval
ba56d0a513 pthread: add pthread_getattr_np.
non standard extension, but widely available to obtain attributes for a thread.
also provides an alias for pthread_getattr_np which is the bsd equivalent.

Change-Id: I26ef8245ed2537186f48c8b8bdf3e42b03e70892
Reviewed-on: https://review.haiku-os.org/c/1172
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2019-03-08 19:50:45 +00:00
Jérôme Duval
901c3d44b0 pthread: implement pthread_attr_[get|set]stack.
remove pthread_attr_[get|set]stackaddr from unimplemented functions.

Change-Id: I58807e86c75a189a576639ae1b2e4505a63700a5
Reviewed-on: https://review.haiku-os.org/c/1152
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-07 16:55:14 +00:00
Jérôme Duval
29ec639a6d ltrace: implement x86_64 arch specifics.
fix trace build on x86_64

Change-Id: I205bd9eee03efea9e298c2877cc0a6440770caf0
Reviewed-on: https://review.haiku-os.org/c/1148
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2019-03-07 02:51:50 +00:00
François Revol
f82b4294d8 urlwrapper: add support for binary plist webloc files
Quite hardcoded but it works.

We only support URLs shorter than 256 bytes as it's the only samples I have.
2019-03-06 04:54:56 +01:00
François Revol
ee55f593fd mime_db: Add text/x-webloc
Also try to match the binary plist for the examples I have here.
2019-03-06 04:19:52 +01:00
Murai Takashi
5f48948f7f Roster: Fix PVS 460
Replace do...while(false) loop with while(true)... loop,
so that 'continue' at line 1968 can continue loop.

Change-Id: I4d64ff2699ad0837f29d49c63b683b134c4ccc1e
Reviewed-on: https://review.haiku-os.org/c/1149
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
Reviewed-by: Barrett17 <b.vitruvio@gmail.com>
2019-03-05 22:39:24 +00:00
Jérôme Duval
9e1ce8ed92 kernel: tweak USER_SIZE.
Change-Id: Id0a4ad785bbd195e425dd32ca891dc4525bb3e18
Reviewed-on: https://review.haiku-os.org/c/1151
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2019-03-05 22:38:49 +00:00
Augustin Cavalier
57608a81c5 XHCI: Fix a race condition in request submission.
See inline comments. At least in brief testing I couldn't cause the
USB-HID stalls anymore, but they were very intermittent for me anyway.
But it was doubtless the case that the logic as it was before was
very much incorrect.
2019-03-05 13:08:03 -05:00
Augustin Cavalier
2df3446676 XHCI: Allocate one physical chunk for all buffers if possible.
Besides calling the allocator fewer times, this also helps break up
the size classes we are allocating chunks from, reducing memory pressure.

As most transfers are smaller than 128KB, this is a major performance
optimization for them.
2019-03-05 12:24:37 -05:00
Augustin Cavalier
ee0d30cff9 XHCI: Fix fencepost logic error in _LinkDescriptorForPipe.
See inline comment. This is very subtle stuff...

I didn't manage to trigger this in my brief testing, and the USB-HID
stall during USB Disk access is still not very difficult to reproduce.
So, this doesn't seem to have been the issue.
2019-03-05 01:14:33 -05:00
Augustin Cavalier
bae7f6d5dd XHCI: Completely rewrite Transfer Descriptor and related logic.
This is essentially a complete rewrite of the way TDs work, and a
significant change to how "normal" requests are submitted. In summation:
 * There is now no such thing as a "descriptor chain". This was a concept
   mostly carried over from EHCI and previous controllers that does not
   really map to XHCI properly, as one "transfer descriptor" can contain
   as many TRBs as are necessary to complete the transfer.

   What we were really doing before was setting up multiple TRB sequences
   owned by our xhci_td structure, and then linking them together with the
   CHAIN bit set on each TRB, which in XHCI terms is *one* descriptor,
   not multiple ones as we had it, and we were allocating the same amount
   of memory anyway, so we might as well do it all in one structure.

   So now xhci_td does not have a fixed size of TRBs, but rather a dynamic
   one, and thus also a dynamic number of buffers. As part of this refactor,
   xhci_td is now a data structure for our own use only, and so it is allocated
   from the normal heap instead of as physical memory, and TRBs separately.
 * Removing the distinction between "descriptor" and "descriptor chain" greatly
   simplifies quite a lot of logic related to transfer handling, especially
   in WriteDescriptor and ReadDescriptor, which no longer need to handle
   writing to buffers across xhci_td boundaries.
 * There is now a proper split between "trb_count" and "trb_used". The former
   is the actual number of TRBs allocated in the data structure; the latter
   is the number presently used in said data structure. This clarifies
   quite a lot of code.

As part of this refactor, a number of other related issues were also cleaned up:
 * TRB buffer sizes are now hard-coded to be 4x the Max Packet Size for the
   given pipe. Previously they were 64KB, which is much larger than the spec
   suggests. As we now size them exactly this way, we can set the endpoint's
   Average TRB Length to this value also, which allows the controller to
   better schedule transfers for us. This logic can probably be cleaned up
   further in the future, even.
 * We now write the "TD Size" field of Normal transfers (i.e. packet count,
   not TRB count) properly, as it is now much easier to compute based on
   our new TRB sizing logic.
 * We now record the Max Packet Size for the endpoint in the endpoint
   structure. (This will probably be more useful when we are dealing
   with isochronous transfers later on.)
 * Write the last cycle bit in _LinkDescriptorForPipe after everything else
   has been written. This probably does not affect anything too seriously,
   but it is technically more correct.
 * Added section & page references to the specification in various comments.
 * Added more error checking where applicable.

Some things still to be done that I noticed while working on this change:
 * When we use a single large buffer and manually segment it rather than
   calling AllocateChunk() for each one, there is a massive performance
   gain (I saw 50MB/s -> 95MB/s in testing on some USB devices.) However,
   we can't do this unconditionally, as the stack doesn't allocate physical
   chunks larger than 32 * B_PAGE_SIZE, which is a problem for some filesystems
   which can read/write in chunks of 1MB. I'll implement this in a later commit.
 * Setting the IOC bit on the last TRB in a transfer is acceptable to find
   out when the transfer is finished, but it isn't enough to get a proper
   tally of how much data was transfered. This is what Event Status TRBs
   are for; we should implement them.
 * _LinkDescriptorForPipe has an overflow condition. I'll fix that in the
   next commit.

Tested on a ThinkPad E550 (Intel Broadwell) with usb_disk and usb_hid.
2019-03-05 00:35:51 -05:00
Augustin Cavalier
dc9a81f0d4 XHCI: Partially fix TD size computation.
Previously we were sending the hardware completely garbage values,
as CreateDescriptorChain clobbered the trbCount value it had set
by using it to determine how many more TRBs it needed to allocate,
and so it usually returned with the value set to 0.

Then SubmitNormalRequest() would immediately subtract 1, causing it
to become negative, and the loop would continue doing this, which also
violated the spec's notice that the field should be 31 if its "true
value" was >= 31, and of course 0 for the last TRB in the transfer.

The spec also says this should be the number of packets remaining, not
the number of TRBs remaining, which we also do not obey; but that
will be a problem for another time, so just add a TODO.
2019-03-04 17:37:01 -05:00
Augustin Cavalier
10230c7ab1 XHCI: Reorder some functions and tweak class definition.
No functional change intended (some methods are now private,
but nothing outside this class used them, so no change.)
2019-03-04 16:47:53 -05:00
Augustin Cavalier
a40a4c0d39 XHCI: Don't try to submit transfers to non-existent endpoints.
Fixes #12929. The underlying issue that caused it still remains, though.
2019-03-04 15:37:38 -05:00
Augustin Cavalier
6b4d0adcd0 XHCI: Clear the device struct after tearing down its state.
This clears out the area_ids, the pointers to them, and a variety
of other state information that will be invalid following the
deletion of the device.

Turns #12929 from a use-after-free into a NULL dereference panic.
2019-03-04 14:54:08 -05:00
Augustin Cavalier
1533bd88b1 XHCI: Style cleanup and dead code removal.
No functional change (besides some tweaked tracing) intended.
2019-03-04 14:42:12 -05:00
Augustin Cavalier
3fe76c19f5 Terminal: Enable bold text by default.
It was removed before because bold text rendering was partially
broken. Now that Terminal uses fractional widths for character
sizes, we can restore it by default.

This matches the behavior of virtually all Linux terminal emulators
(they also appear to make bold text brighter.)
2019-03-04 14:19:11 -05:00
Augustin Cavalier
251892c136 BuildSetup: Remove unused big-endian host detection.
Nothing references it anywhere. Also add "arm64" to 64-bit
detection (which is used.)
2019-03-04 13:37:56 -05:00
Augustin Cavalier
bef99ce584 freebsd_network: Fix debug build. 2019-03-04 12:49:26 -05:00
Augustin Cavalier
8aa8345a68 boot/bios_ia32: Remove the unused flat_buffer field.
Suggested by korli in #11019. We pass this struct directly to the
BIOS, so pack it while we are here.

Checked against GRUB (it also does not have this field.)

Change-Id: I9a2708c44ff48fd702175053f2889443d6f7a003
Reviewed-on: https://review.haiku-os.org/c/1145
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2019-03-04 16:38:49 +00:00
Augustin Cavalier
dedf24f757 kernel: Don't load modules from non-packaged under "disable user add-ons".
This matches the behavior of the "new-style" module system.
Part of #14361.
2019-03-03 17:20:53 -05:00
Augustin Cavalier
ee735d1b33 PackageKit: Fix BPackageInfoAttributeValue::Clear for GCC2.
These are simple structs, so hopefully GCC8 will be OK with us
memsetting them. We can't use the standard = {} route because
GCC2 does not support that.
2019-03-03 17:04:22 -05:00