Commit Graph
100 Commits
Author SHA1 Message Date
Michael Lotz b7f73c6e2a Update and enable the debugging device selection check. Might shed some light on
the problem in #4308.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32616 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-22 16:41:17 +00:00
Michael Lotz 7f5799140f Enlarge the timeout for data transfers. It was 2 seconds before and under a bit
of load, when using large enough block sizes or when simply having a slow device
this is by far not enough. It is now at 15 seconds, which should reduce timeout
problems to those cases where the device actually get's stuck (because of us
doing something wrong).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32615 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-22 16:12:36 +00:00
Michael Lotz f1a7a3752f * Use the locked version of inherit_parent_user_and_group() by moving the call
into the scope of the lock. Saves an InterruptsSpinLocker.
* Use an InterruptsSpinLocker() as in other places.
* When creating/forking a team fails because the kernel thread cannot be spawned
  balance the already sent TEAM_ADDED notification by sending a TEAM_REMOVED one.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32595 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-22 03:07:11 +00:00
Michael Lotz b5172954bb Better watch your bools in C code. In C99, the bool type of the argument to
send_bit() causes a type conversion from the value handed in to 0 or 1. This
clashed with the usage in send_byte(), that hands over a shifted byte. The
argument was converted to true when it had any value other than 0, whereas
before (where a bool simply was an int) it would have just handed over the value
directly. Therefore the logic in send_bit() that simply masked off the lowest
bit of the value would now not work anymore.
This fixes EDID failing on GCC4 and therefore fixes #2275, the last issue of
#4084 and may also affect #2780.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32593 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-22 01:03:10 +00:00
Michael Lotz c9c3b32d3b Rework incoming report handling. We need to notify all reports when one comes in
because all reports schedule transfers on the same endpoint and therefore need
to possibly reschedule. Previously if we got a report that we didn't listen on
all further reports would stop, because noone would schedule a new transfer.
This fixes extra keys not working on my natural keyboard.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32580 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 18:46:24 +00:00
Michael Lotz 29bd9bfd7d Remove SMP_MSG_RESCHEDULE_IF_IDLE as it is not used anymore.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32574 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 16:14:18 +00:00
Michael Lotz 861b223cf2 * Strip down scheduler_simple. Anything related to multiple CPU handling has
been removed. That includes CPU disabling and thread pinning, as that becomes
  pointless with only one CPU.
* Return a proper reschedule hint on enqueing a thread, based on the priority
  of the current thread vs. the enqueued one.
* Enable dynamic scheduler selection. With one CPU the simple scheduler will
  be used, otherwise affine is selected.
* Removed the scheduler type define as we now always auto-select it.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32573 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 16:10:27 +00:00
Michael Lotz 38516368ea Switching to the ATA stack for the @alpha targets. We need more widespread
testing to determine where we are at sooner than later now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32569 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 14:34:16 +00:00
Michael Lotz 2e7672a2a0 Adding a simple wake on LAN command line utility. It will broadcast a magic
packet that targets the MAC address supplied by argument.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32555 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 05:52:36 +00:00
Michael Lotz 9dbe55ebcc Fix typo.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32552 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 02:07:11 +00:00
Michael Lotz c265fd23cd We cannot use the condition codes to determine if a transfer descriptor is
processed. The controller may initialize it to any value when starting to
process the descriptor. If a controller did that it was possible that we thought
a transfer was already done even if it actually just started. Transfers would
then return that weren't processed, returning uninitialized buffers.
Instead of relying on the condition codes we now check that the head and tail
pointers are the same. This guarantees that all transfer descriptors of the
endpoint at hand are completed.
Reverted r32534 again as this one fixes the problem for real. The same things
that were mentioned there could happen here essentially, so in the worst case
the device or controller could stall because of freeing in-use structures.
Fixes #4067.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32551 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-21 00:14:50 +00:00
Michael Lotz 840cdc9efc When adding a transfer, the current tail descriptor of the endpoint will be
reused and overwritten by the first descriptor of the new transfer and the first
descriptor will become the new tail. We anticipate this situation in
_AddPendingTransfer() and set the first_descriptor of the transfer data to the
tail already. Since the tail was pretty much cleared to zero, this introduced
a race condition. After adding the pending transfer it can already be found
in the finisher thread. If this happened before actually switching the tail
and first descriptor it would find a descriptor with a condition of 0, meaning
"No Error" and would process the transfer incorrectly. Depending on the count
of descriptors and the timing of the switch taking place this could have
resulted in aborted transfers with actual length 0 or with the correct actual
length but invalid data. In the very worst case it could have freed things still
in use by the controller, resulting in all sorts of device errors. Sadly it
doesn't fix #4067.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32534 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-20 07:24:49 +00:00
Michael Lotz 5f92e39f7b That's actually not how it works. OHCI does the dirty work of splitting up the
transfer descriptors into individual packets. The descriptors are more a
logical thing. As such we do not generate one descriptor per packet but one
for each block of two pages at max. Therefore we only set the initial toggle bit
to the one we stored on the first descriptor and let OHCI use the carry bit for
subsequet descriptors. That error would only be visible on transfers above two
pages in size though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32532 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-20 04:45:13 +00:00
Michael Lotz b0a2e9e7aa Even though the specs say the toggle carry field contains the value of the last
retired descriptor, it actually contains the value that is to be used next.
Confirmed that by cross-referencing FreeBSD.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32531 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-20 02:43:40 +00:00
Michael Lotz abe8e8a2c2 A try at actual data toggle handling. Since we do not properly ensure that the
toggle carry stays valid, we better make sure we set it correctly. Additionally
even if the toggle carry wasn't clobbered, there are conditions the toggle is
reset without the controller being able to notice (as in clearing a halt state).
Since I don't have any OHCI hardware this is untested, but should fix bug #4067
if correct.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32510 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-19 04:45:02 +00:00
Michael Lotz 152132f08a mmlr+anevilyak:
* Keep track of the currently running threads.
* Make use of that info to decide if a thread that becomes ready should preempt
  the running thread.
* If we should preempt we send the target CPU a reschedule message.
* This preemption strategy makes keeping track of idle CPUs by means of a bitmap
  superflous and it is therefore removed.
* Right now only other CPUs are preempted though, not the current one.
* Add missing initialization of the quantum tracking code.
* Do not extend the quantum of the idle thread based quantum tracking as we want
  it to not run longer than necessary. Once the preemption works completely
  adding a quantum timer for the idle thread will become unnecessary though.
* Fix thread stealing code, it did missed the last thread in the run queue.
* When stealing, try to steal the highest priority thread that is currently
  waiting by taking priorities into account when finding the target run queue.
* Simplify stealing code a bit as well.
* Minor cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32503 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-19 03:19:17 +00:00
Michael Lotz 100487755f We explicitly remove the thread from the (priority sorted) run queue to
re-insert it at a new place, but by only setting the priority and not the
next_priority field, the thread would actually be enqueued at the same priority
level as before. Didn't cause any real damage, guess it was just an oversight.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32494 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-18 13:19:12 +00:00
Michael Lotz 65411f56b7 We can return directly as we use handy locker objects. Adjusted and added
comments.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32483 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-17 22:51:01 +00:00
Michael Lotz 40b708f776 Do not base the device number on the device count. Fixes bug #4267.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32474 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-17 17:51:26 +00:00
Michael Lotz 73c035dc11 * Set freed memory to 0xdeadbeef before returning it to page. This allows us to
not hold the bin lock while setting and only protect the actual freeing. May
  reduce bin lock contention a little bit.
* Tiny optimization for force-clearing 0xdeadbeef. Do it after setting to 0xcc,
  so that it's less likely we have to do it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32473 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-17 17:25:24 +00:00
Michael Lotz 699bf40942 Add scheduling notifications to scheduler_affine.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32463 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-17 14:51:07 +00:00
Michael Lotz 68b6dce107 We already panic to indicate that something's wrong, no real need to crash
afterwards instead of returning gracefully.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32293 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-13 02:00:49 +00:00
Michael Lotz 60a5ced394 Adding a disabled debug helper.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32217 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-09 19:54:41 +00:00
Michael Lotz 50d22f83ef The reference of the currently active translation map shouldn't be released
until the data it protects isn't in active use anymore. Previously it would
release the translation map and therefore the page directory reference while
the page dir was still set on the CPU, as only the actual call to
i386_context_switch() will replace the page directory in the control register.
This didn't cause any harm though, as during the context switch interrupts are
disabled and therefore the page directory would only be deferred_delete()ed and
not directly freed/overwritten. Still this is logically more correct.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32216 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-09 17:39:05 +00:00
Michael Lotz 685a77f905 Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32187 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-07 14:39:15 +00:00
Michael Lotz ee280b59e9 Prevent the user TLB invalidation function from being preempted by turning off
interrupts when invoking it. The user TLB invalidation function essentially only
reads and writes back control register 3 (cr3) which holds the physical address
of the current page directory. Still a preemption between the read and the write
can cause problems when the last thread of a team dies and therefore the team
is deleted. The context switch on preemption would decrement the refcount of the
object that holds the page directory. Then the team address space is deleted
causing the context switch returning to that thread to not re-acquire a
reference to the object. At that point the page directory as set in cr3 is the
one of the previously run thread (which is fine, as all share the kernel space
mappings we need). Now when the preempted thread continues though, it would
overwrite cr3 with the physical page directory address from before the context
switch still stored in eax, therefore setting the page directory to the one of
the dying thread that now doesn't have the corresponding reference. Further
progressing the thread would release the last reference causing the deletion
of the object and freeing of the, now active again, page directory. The memory
getting overwritten (by deadbeef) now completely corrupts the page directory
causing basically any memory access to fault, in the end resulting in a
triplefault. This should fix bug #3399.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32118 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-04 23:15:05 +00:00
Michael Lotz 255c9104e5 * Rework the heap locking strategy. Use a read-write lock for the area lock to
allow for more parallelism. Also introduce seperate locks for the bins and
  for page allocation. This greatly reduces lock contention and reduces the
  duration the locks are held due to them overall protecting less code. Now only
  allocations of the same size hitting the same allocator or allocating larger
  chunks of memory should block. Previously, basically any allocation and also
  free would be mutually exclusive, making it scale pretty badely.
* Added memalign_nogrow(). As it uses heap_memalign() anyway, there's no real
  reason not to allow for an alignment.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32074 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-03 13:59:45 +00:00
Michael Lotz d7a16b238f * Fully switch to the Haiku message format so that it is also used for on-disk
storage.
* Remove reduntant information from the header (field_count vs. fields_size).
* Remove checksums previously used to validate the message passing by area
  mechanism.
* Move variables that are purely used by the instance out of the header and into
  the BMessage object.
* Use more sensible types for the different message fields.
* Reduce some field sizes to realistic values.
* Make size_t values into uint32 values so the message format will not change
  when later moving to 64 bits.
* Pack the structures used for flat message storage so it doesn't change
  because of padding.
* Fix message passing by area. It never worked because the created area was
  never actually filled with any data!
* Some more allocation checks with graceful fallbacks (should be all now).
* Some more checks for negative index values (should also be all now).
* Make printing more inline with how the rest of the class works and make some
  of the output more consistent.
* Also add the new unsigned types to PrintToStream() output.
* Fix printing of unknown types and invalid BMessages, it would always have
  printed only the first entry respectively the same error.
* Added some clarifying comments.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32039 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-31 22:19:36 +00:00
Michael Lotz 0fa107fd5d Don't spam for expected error returns. We do repeat key handling through
timeouts, so B_TIMED_OUT is expected at this point.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31974 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-30 15:18:45 +00:00
Michael Lotz d280260742 Add export to our default profile to ignore duplicate history entries.
Fixes enhancement #4156.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31953 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 23:49:16 +00:00
Michael Lotz 3b1e4fd549 Fix pointer access. Thanks to Blub for spotting, I would've certainly spent a
lot of time finding this one!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31940 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 20:36:54 +00:00
Michael Lotz 48a7b12ad8 Clear the padding to 0 when flattening to the R5 message format. Besides being
cleaner it allows for binary comparison of flattened messages.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31908 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 13:22:00 +00:00
Michael Lotz 1aab2b2717 If the font style isn't found, try to scan for fonts as well. The same is done
for families. This fixes the bug that when a font family was already loaded, but
some of its styles haven't been loaded yet, the app_server would fail to set
the system fonts to those styles. Fixes bug #4148.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31904 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 13:04:08 +00:00
Michael Lotz 75251adc37 Small cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31902 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 11:21:59 +00:00
Michael Lotz 337b8534e0 Don't crash the app_server if the font couldn't be found. Fixes bug #4149,
though it still has to be investigated why the font style isn't found.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31901 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 11:17:25 +00:00
Michael Lotz 473a578ad8 Add a simple utility to dump flattened BMessages. Added it to the image as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31897 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-29 10:13:20 +00:00
Michael Lotz ebc89d1766 Remove extra newline in debug command description which caused empty lines in
the KDL help to be printed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31866 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-28 21:35:16 +00:00
Michael Lotz ab5421283b Accommodate for the two lines of clearing ahead when in KDL. This avoids over-
writing lines that are printed below the previously cleared lines when paging.
Fixes bug #4145.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31865 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-28 21:31:27 +00:00
Michael Lotz 49f0ed06ee * A more scalable way of initializing the LED items to NULL.
* Tiny coding style cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31861 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-28 21:04:01 +00:00
Michael Lotz 92781ad394 Actually the index values cannot be larger than 16 bits as otherwise they would
cross usage page boundaries.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31839 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-28 01:14:55 +00:00
Michael Lotz ab1a1f9423 * Allow key-like items from the consumer page to be recognized as well.
* Make the key arrays take the full range of possible index values (32-bits).
* Forward all unmapped keys with their HID usage as keycode.
* Remove some superflous debug output.

With this many of the extra keys on keyboards should be forwarded as unmapped
keys. An application could now watch for them (B_UNMAPPED_KEY{UP|DOWN} messages)
and interpret them based on their keycode which matches the HID usage.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31838 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-28 01:05:15 +00:00
Michael Lotz 8ce0e36827 Remove a huge chunk of unused GDB sources. This removes about 3000 files and
should bring down checkout times quite a bit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31833 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-27 21:53:06 +00:00
Michael Lotz fec23a53d7 Add another paging mode to onscreen debug output. Activated by pressing "t" it
will show the next page after a timeout of 3 seconds instead of waiting for a key
to be pressed. This allows you to enjoy onscreen debug output even when you only
have a USB keyboard. Should be enough time to take a quick look or take a photo.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31814 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-27 15:51:02 +00:00
Michael Lotz 5efec82035 * Fix KDL output to use kprintf instead of dprintf.
* Make the allocations command available even without leak checking. The sizes
  that are dumped aren't as accurate without leak checking info, but having the
  address and max size is already helpful.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31811 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-27 14:47:04 +00:00
Michael Lotz e5a19b2505 Add a small utility to set a USB device configuration from userland.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31794 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-27 01:32:32 +00:00
Michael Lotz 55ae61312c Add disabled debug-helper to dump all reports of a device.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31793 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-27 01:29:10 +00:00
Michael Lotz 6522cd6090 Remove unused variable.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31792 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-27 01:28:35 +00:00
Michael Lotz 8e1857f795 * Completely rework the USB HID driver to make use of the HID framework
introduced earlier.
* Reworked the previous device classes to make them ProtocolHandlers handling
  their respective input_server <-> driver protocol.
* Implement setting report item data and building/sending reports based on that.
* Remove the old HID parsing code.

This enables us to use all HID devices as we now parse and use the HID
descriptors/reports. Non-boot-porotocol devices should therefore work.

The next step will be to implement a generic input/output framework in userland
that can communicate with a generic protocol handler in usb_hid. This will then
enable applications to make use of all the non-mapped HID stuff directly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31790 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-27 00:35:21 +00:00
Michael Lotz 07ff9929e5 Add missing newline in debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31754 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-25 20:03:21 +00:00
Michael Lotz 0aea5c18d4 Make that queue_request() call into a clear_feature() call, as that's how it was
probably meant to be. The call as it was made no sense at all, as it hardcoded
the endpoint number and tried to supply data to a non-data request. It also
wasn't using a synchronous call, possibly triggering the callback function with
an incompletely set-up device structure, depending on how quickly the request
would return. This caused bug #4107.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31666 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-21 02:00:46 +00:00
Michael Lotz ef6d576ca7 That slipped in with the last commit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31601 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-16 02:46:25 +00:00
Michael Lotz 63d557f06f Fixing random GCC4 warnings. Mostly missing consts, some parentheses, some braces... Should all be harmless and not change anything.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31600 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-16 02:42:03 +00:00
Michael Lotz b78c74fdc4 Fix GCC4 build. Duplicate parameter names generate a warning there.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31599 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 23:38:15 +00:00
Michael Lotz ca1def886d * Big cleanup, remove dead code, some renaming, line lengths, spacing,
use B_* error codes, print most numbers as normal decimals or at least prefix
  them with 0x where appropriate.
* When counting free clusters for FAT32 correctly ignore the uppermost 4 bits
  when checking for free entries. Shouldn't matter, as those should always be
  0 anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31306 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-28 23:41:48 +00:00
Michael Lotz b5aac499d5 * Cleanup.
* The active fat field is valid if fats aren't mirrored, not the other way
  around.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31257 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-26 15:55:04 +00:00
Michael Lotz cfc8e38ece Implement most of the logic for write support in the GPT partitioning system.
Actual writing is not implemented though and some key functions aren't either.
Completely untested so far.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31032 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-13 15:51:19 +00:00
Michael Lotz 45041904b4 Do not notify about auto-read messages. For example when setting spam to be
marked as read automatically I don't really want to get the notification alert.
This has been laying around on my drive for a long time now...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31028 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-13 13:00:48 +00:00
Michael Lotz f835a75f31 Make two runs of MTRR setting when setting memory ranges to write-back. At the
first run only set up uncacheable MTRRs and in the second run set the write-back
ones up. If this order is not followed, we could set too large ranges to
cacheable first and then limit it back to uncacheable later. On systems with
enough physical memory this would lead to a temporary situation in which areas
become cacheable that must not be, resulting in system hangs or other unexpected
behaviour. Fixes last part of #4018.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31027 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-13 11:40:05 +00:00
Michael Lotz 96b24aef3f When clearing the MTRRs also set the default type to uncacheable. Otherwise on
systems where the default is set to a cachable type and MTRRs are used to define
the uncacheable areas, everything would become cacheable after clearing them.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31026 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-13 11:35:57 +00:00
Michael Lotz bcc2ed0722 Fix the length calculated in generic_get_mtrr(). The +1 would usually be added
to the mask and then shifted, but as we don't do the shifting at all, we need
to add a page size instead of just 1.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31024 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-13 02:35:19 +00:00
Michael Lotz 62232fd053 * Add more details to debug output.
* Change the TRACE macro to use varargs and add a prefix for easier grepping.
* Some line length cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31023 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-13 02:32:25 +00:00
Michael Lotz 740f46ad41 Update to use UsePrivateKernelHeaders so things like safemode.h can be properly
included.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31022 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-13 00:08:04 +00:00
Michael Lotz e10fbc44fb Not really sure why the inquiry command was special cased on ATAPI, but it
prevents tools that try to read other inquiry pages (like cdrecord) from getting
the required infos. This way the inquiry command is sent to the ATAPI device,
which seems to work fine (at least for the drive I have here).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31019 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-12 20:41:07 +00:00
Michael Lotz 1d4c4d3a5b * Call PostReset() at the end of ResetPort() as it's always used in that way.
* Reset the port directly after executing a command failed instead of letting
  the next call do the reset first. This is arbitrary but looks cleaner to me.
* Provide a way to check if a given sata_request is a SCSI_OP_TEST_UNIT_READY
  over ATAPI and use this info to calm down all error output. This avoids
  spamming the syslog with error output on each media status poll when no disk
  is present in a ATAPI device.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31014 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-12 16:31:14 +00:00
Michael Lotz 46d4d11ff6 Need to stop the roster before deleting it. Should fix bug #4017.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31013 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-12 15:19:43 +00:00
Michael Lotz acf58ffdab Cleanup. Line length, white space.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30981 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-07 14:54:11 +00:00
Michael Lotz 93aba444aa Removed just a bit too much in r30927.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30932 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-30 20:10:12 +00:00
Michael Lotz c89b0ea4c2 We need to update the name and parent directory when renaming/moving.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30930 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-30 19:25:43 +00:00
Michael Lotz 331f147bae * When removing entries properly call remove_vnode().
* Move notifications around so they are sent at the right time.
* Use notify_entry_moved() instead of generating a removal and creation
  notification.
* Allow replacing entries.
* Added a TODO regarding non-empty directories.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30929 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-30 18:31:33 +00:00
Michael Lotz f06f5d708c Make reading the write_overlay more efficient. Instead of always reading the
original file and then overwriting it with what we have in memory, just linearly
fill the buffer, closing gaps between our buffers with original file content as
needed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30927 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-30 17:21:10 +00:00
Michael Lotz 5ab2eaabaa Only use read_pages() when we need to. Otherwise we bypass the cache of the
upper layer, degrading performance qutie a bit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30925 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-30 14:39:14 +00:00
Michael Lotz 3ecc528774 On Darwin/Mac OS X use diskutil to determine if the volume we configure on is a
case-sensitive one. If not, print out a message and a link to the guide that
describes how to set one up.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30913 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-30 00:38:43 +00:00
Michael Lotz 57a5e69604 * Implement read/write_pages using Read()/Write(), io will follow later.
* Create a file cache for created overlay nodes. It is unused and disabled, but
  causes a vnode cache to be created. This is required for mapping a file, which
  in turn is required for executables to be loaded. With that copied or newly
  created executables should work on top of write_overlay. Will think about and
  implement a more direct way of getting that cache later today.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30910 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-29 02:52:11 +00:00
Michael Lotz 5740b42f36 Write can be called without cookie (in the CreateSymlink() case for example).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30907 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 21:58:42 +00:00
Michael Lotz 0807998b5d * Implement O_APPEND.
* Also make set_flags available for setting it. O_NONBLOCK is ignored as in BFS.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30903 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 21:19:13 +00:00
Michael Lotz 5f447d9b4c Apply r30890, adding a missing put_vnode() on error, to write_overlay as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30899 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 17:31:18 +00:00
Michael Lotz 940e8add93 Apply r30895 and r30897 to the attribute_overlay as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30898 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 17:26:13 +00:00
Michael Lotz 3d94685b25 Move the B_UNSUPPORTED return into the macro. No functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30897 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 16:18:11 +00:00
Michael Lotz f54023cf37 Propagate error codes in FIONREAD. Fixes bug #3973.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30896 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 16:03:50 +00:00
Michael Lotz 607254f510 We don't want to use the OVERLAY_CALL macro for can_page() as it returns a bool
and not a status_t. In case of virtual files it would have wrongly returned
B_UNSUPPORTED, resulting in true instead of false.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30895 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 15:32:42 +00:00
Michael Lotz 2cdc24e4ad Fix two instances of handing wrong vnodes to the next layer in attribute_overlay.
The target vnode in link and the toDir vnode in rename were passed directly,
meaning that an attribute_overlay vnode was handed to the next layer causing
crashes when moving/renaming a file on ISO-only CDs for example. Fixes #3885.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30893 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 12:34:03 +00:00
Michael Lotz 588b9abc12 Fix leaking the old entry name when renaming actually succeeds.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30891 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 02:39:25 +00:00
Michael Lotz 2fc5fcd1ad Add missing put_vnode() in error case.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30890 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 02:16:07 +00:00
Michael Lotz 4251f05625 When writing an attribute store file the parent directory might have been
invalidated since the creation of the object. If this is the case we have to
look it up again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30889 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 02:15:14 +00:00
Michael Lotz 0635976606 Invalidate our cached inode numbers when removing the attribute file. Basically
we want to ensure that we re-enumerate our environment when eventually writing
a new one as it has most probably changed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30888 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 02:05:23 +00:00
Michael Lotz dfada88840 Add functionality for removing a attribute file. In case a file is (re-)moved
we will later remove the attribute backing file using this.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30887 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 01:55:43 +00:00
Michael Lotz 56b2febaad Add actual support for relocated directories. In case we hit a placeholder file
pointing to a relocated directory, we now re-initialize the node we are
initializing with the first entry of the pointed at directory. This ought to be
the "." entry containing the proper flags, start block number and data length.
As per the specs we do only keep the file id or alternate name of the
placeholder and take everything else from the relocated directory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30886 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-28 00:39:33 +00:00
Michael Lotz e349faeba8 In case we run a CD in safemode, we need to stop the CD bootscript after
launching the console. Otherwise it will simply drop through to ejecting the CD
and rebooting as if the installer completed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30885 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-27 23:55:35 +00:00
Michael Lotz f593b93a09 Fix GCC4 build of the HVIFTranslator.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30884 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-27 22:57:31 +00:00
Michael Lotz 43276e5bd1 If we encounter an unsupported entry (like a relocated directory) we now just
skip it instead of returning the error and therefore aborting the directory
enumeration.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30876 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-27 01:30:29 +00:00
Michael Lotz c26b324e20 Should fix GCC4 build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30853 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-25 21:26:54 +00:00
Michael Lotz f2d4d6f676 Invalidate the elfHeader variable when the image struct is deleted on error, as
they share the same pointer. Should fix bug #3955.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30848 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-24 23:10:55 +00:00
Michael Lotz cc636a35cb Simplify dirty region handling when copying regions. Basically the full region
is considered dirty and only what we are really able to copy (which excludes all
possible dirty regions) is removed from that again. This is simpler and less
error prone than to remove more than we may copy and then add the old dirty
regions back. Fixes a few region copy related redraw issues most visible in case
of scrolling like non-updated parts when scrolling in Tracker or Terminal as in
bug #3803.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30840 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-24 14:38:09 +00:00
Michael Lotz 5ba33c51f2 * Integrate reports/items some more.
* Reorganize how items are added to collections.
* Make collections useful for enumeration through that.
* Added printing out of collections, reports and report items for easier
  verification of report parsing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30821 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-21 15:53:52 +00:00
Michael Lotz 9d3da74dea Add a slider to the settings view to allow adjusting the rendering output size.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30799 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-18 21:25:34 +00:00
Michael Lotz c6f2665631 Fix loading mechanism of settings in the shared BaseTranslator. Previously it
would always overwrite existing settings with the defaults when a message not
containing settings arrived. But we only want to revert to defaults when there
have not been any settings yet. This should fix most translators forgetting
their settings.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30798 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-18 21:23:29 +00:00
Michael Lotz 3793b581f4 Complete move of shared files from Icon-O-Matic sources to icon library.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30795 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-18 20:23:22 +00:00
Michael Lotz 8b8d44bfcc Enable just enough of the message based format used in Icon-O-Matic to allow
BIconUtils to understand and render it. This makes it possible to use the
HVIFTranslator to also read Icon-O-Matic files out of the box. Will cleanup
now duplicated files next.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30794 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-18 20:15:04 +00:00
Michael Lotz dca631302d Fix GCC2 build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30793 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-18 19:13:39 +00:00
Michael Lotz 0994c50f8a Adding a BIconUtils based HVIFTranslator. It's not very efficient as it does
the full work twice in the worst case. Also since it only supports actual HVIF
format and not the Icon-O-Matic one directly it is not as useful as one might
think. Still it's a start. You could translate from a HVIF file to a PNG using
the command line translate tool with it (translate infile outfile 'PNG ').


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30792 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-18 17:37:15 +00:00