to be in line with what other systems do as well. Also fixes bug #3476.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29296 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Added debugger commands to resolve usb_ids to pipes.
* Adjusted the physical memory allocator to be usable in a slimmed down mode
when running inside the kernel debugger.
* Implemented USB keyboard support for KDL through a kernel debugger add-on.
* Added kgetc() and made use of it where previously individual methods were used
to ensure that reading characters always goes through the kernel debugger
add-ons and the other methods.
This has some preconditions to meet though:
1) The keyboard must be in the boot protocol (currently the case but needs to
be revisited once we have a full usb_hid).
2) The keyboard must be attached to a UHCI root port (i.e. not use EHCI or OHCI,
also not through hubs unless those are USB 1.1).
3) the usb_hid driver has to be opened for this to work. This means that for the
time between initializing USB and when usb_hid is opened by the input_server
there is no keyboard support.
Also note that this has no way of detecting hot-plug, meaning that you can't
re-attach your USB keyboard from the hub to the root port once in KDL.
On the bright side of things, since this is a non-destructive mechanism it is
possible to enter and leave KDL without loosing the USB state.
Tested OK in QEMU, not tested on real hardware yet, will see in a few minutes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29291 a95241bf-73f2-0310-859d-f6bbb57e9c96
write_overlay and add the necessary infrastructure for it.
* Fix setting permissions through write stat.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29268 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Add attribute_overlay and write_overlay to the image/floppy instead.
* Mount a iso9660 boot volume with both write and attribute overlay for now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29261 a95241bf-73f2-0310-859d-f6bbb57e9c96
attribute writes to not be visible.
* Don't read past the current node size when emulating write support.
* Fix writing calculations so that writing actually works as intended.
* Actually follow the linked list when joining write_buffers instead of using
the same pointer that becomes invalid after the first iteration.
* Small optimizations.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29251 a95241bf-73f2-0310-859d-f6bbb57e9c96
needed at all when used as intended. Thanks Ingo for the explanation on how this
is intended to work. Adjusted the overlay fs accordingly and updated/reverted
the changes to the other filesystems.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29250 a95241bf-73f2-0310-859d-f6bbb57e9c96
fs is read-only. Not yet fully working, also directory operations like file
creation/removal are yet missing.
* Add notifications for stat and attribute changes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29249 a95241bf-73f2-0310-859d-f6bbb57e9c96
been mounted. This is to allow layered filesystems to setup internal data that
requires all the sub/super volumes to be available.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29248 a95241bf-73f2-0310-859d-f6bbb57e9c96
for now. This is a workaround and should be removed once we have proper
interrupt return values from FreeBSD drivers. Should work around interrupt
storms for shared interrupts with some network cards that use a FreeBSD driver.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29242 a95241bf-73f2-0310-859d-f6bbb57e9c96
It causes the interrupt handler to be inserted at the very end of the list
instead of at the top. It is intended to be used as a workaround when a
interrupt handler cannot know if it actually handled the interrupt. This
should never be used by native drivers. Also if we know that the result is
not valid because of this flag we won't disable the vector in case we count
many unhandled interrupts as those numbers are then unreliable.
* Moved B_NO_LOCK_VECTOR to be a private flag as well.
* Made the interrupt handler list a simple manually maintaned singly linked list
instead of the doubly linked one used with insque and remque as it greatly
simplifies things for such an easy use case and is more compact.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29241 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Implemented writing attributes back to attribute files. Not tested or enabled.
* Fix reading attribute dirs, they need a separate cookie that links attribute
files to the dir index as multiple read-dirs could happen at the same time.
* Fix some obvious bugs in size calculations.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29239 a95241bf-73f2-0310-859d-f6bbb57e9c96
It's supposed to be filled with the entry name of the directory and not as in
all the other cases used as a leaf name to be appended to the dir. This would
lead to some errors with operations based on directory fds in the build libroot
and build libbe and in the end make generate_attribute_stores fail on platforms
that don't have an 0 initialized stack (since the supplied name buffer would
contain garbage later attached to the directory path).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29227 a95241bf-73f2-0310-859d-f6bbb57e9c96
Therefore we switch to building a 2.88 floppy image in that case so it's at
least usable to build a bootable CD.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29211 a95241bf-73f2-0310-859d-f6bbb57e9c96
what we want.
* Remove some more temporary files/directories after the build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29209 a95241bf-73f2-0310-859d-f6bbb57e9c96
clean yet. Provides a haiku-cd target and creates a bootable image using mkisofs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29203 a95241bf-73f2-0310-859d-f6bbb57e9c96
* When booting from an iso, mount the boot volume with the overlay layer.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29202 a95241bf-73f2-0310-859d-f6bbb57e9c96
additional layer by supplying "-t <actualFileSystem>:overlay" to a mount command.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29201 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Remove the previous method of applying the overlay by flags. In the future the
overlay can just be mounted as a filesystem layer. This is probably how layers
were intended to work in the first place.
* Move the filesystem module info and filesystem name from the fs_mount to the
fs_volume structure. Filesystem layering is done by having multiple layered
volumes and we want to be able to have a different fs per layer.
* Adapt VFS code to this move.
* Implement mounting layered filesystems. Specifying multiple filesystems
separated by a colon on mount will cause the layers to be set up and the
corresponding filesystems to be mounted at that layer.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29199 a95241bf-73f2-0310-859d-f6bbb57e9c96
generate attribute stores for attribute overlay. This can be used to generate
ISO only Haiku CDs with attribute support in the future. Note that while they
are mostly bootable they aren't really usable yet because of the missing query
support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29194 a95241bf-73f2-0310-859d-f6bbb57e9c96
class as it's so little code.
* No need to allocate the roster on the heap.
* Add /dev/bus/usb to the device location to make it more clear.
* Add the device location to the non-verbose output as well.
* Put the manufacturer and product strings into quotes to make it clearer that
those are just strings. Avoids just blank output when a device doesn't provide
those strings.
* Remove trailing whitespace.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29187 a95241bf-73f2-0310-859d-f6bbb57e9c96
node. That is needed for a layered filesystem to be able to construct a full
fs_vnode out of a volume/inode pair.
* Adapt places where get_vnode is used. Sadly this is a C API and we can't just
use a default NULL for that argument.
* Introduce a flag B_VNODE_WANTS_OVERLAY_SUB_NODE that can be returned in the
flags field of a fs get_vnode call. A filesystem can use this flag to indicate
that it doesn't support the full set of fs features (attributes, write support)
and it'd like to have unsupported calls emulated by an overlay sub node.
* Add a perliminary overlay filesystem that emulates file attributes using files
on a filesystem where attributes aren't supported. It does currently only
support reading attributes/attribute directories though. All other calls are
just passed through to the super filesystem.
* Adjust places where a HAS_FS_CALL() is taken as a guarantee that the operation
is supported. For the overlay filesystem we may later return a B_UNSUPPORTED,
so make sure that in that case proper fallback options are taken.
* Make the iso9660 filesystem request overlay sub nodes. This can be fine tuned
later to only trigger where there are features on a CD that need emulation
at all.
If you happened to know the attribute file format and location you could build
an iso with read-only attribute support now. Note that this won't be enough to
get a bootable iso-only image as the query and index support is yet missing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29177 a95241bf-73f2-0310-859d-f6bbb57e9c96
generated). When not using build profiles this allows for separate configuration
per output directory. When using build profiles you could for example have a
different profile per output directory with the same name (so an @disk with
different settings per output dir for example).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29161 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Also don't install the GCC2 package on a GCC4 based hybrid, as it's again not
usable without proper manual setup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29160 a95241bf-73f2-0310-859d-f6bbb57e9c96
These all work on pure GCC4 images as well because they do not use any of our
C++ APIs.
* Remove the GCC4 package from hybrid installs though, as it's not usable
without proper setup. Also the trick with rewriting the symlink obviously
doesn't work because symlinks are done way earlier than unzipping the optional
packages when building the image.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29158 a95241bf-73f2-0310-859d-f6bbb57e9c96
information and we must not overwrite the last valid buffer. Otherwise we
generate spurious key ups when entering and spurious key downs when leaving
the phantom state.
* Implement getting/setting of keyboard repeat delay and rate so they become
settable by the keyboard preferences.
* Rework repeat handling a bit. With a large enough repeat delay (i.e. bigger
than the report interval of the device) we would never get the timeout case
and therefore never start repeating.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29154 a95241bf-73f2-0310-859d-f6bbb57e9c96
add the const in any case. As Axel points out these are C functions and we do
not affect binary compatibility by changing their signature.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29124 a95241bf-73f2-0310-859d-f6bbb57e9c96
sight. The comparison operator takes precedence over the binary ones.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29121 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Enable -Werror on GCC4 builds as well (limited to the same selected targets).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29118 a95241bf-73f2-0310-859d-f6bbb57e9c96
* Replaced the use of offsetof() for structs that aren't PODs. Add a
offset_of_member() macro to util/khash.h because that's what it's used for
in our cases.
* Change the signature of add_debugger_command()/remove_debugger_command() on
GCC > 2 to avoid the depricated conversion from string constants to char *.
* Adding some "suggested" parenthesis. I know that not everyone likes that, but
it pointed out at least one bug that is fixed here as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29113 a95241bf-73f2-0310-859d-f6bbb57e9c96
be keyboards that leave gaps. It's not really specified in the docs, they only
say that the ordering of keys is indetermined. So I guess intermixing empty
slots is equally valid.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29106 a95241bf-73f2-0310-859d-f6bbb57e9c96
and also comes with proper default includes.
* If installing GCC4 as part of a GCC2 based hybrid build, re-setup the gnupro
link that is overwritten by the GCC4 package.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29085 a95241bf-73f2-0310-859d-f6bbb57e9c96
different directory layouts and this way we can still use a native compiler
as a cross compiler since we don't make the decision based on whether we are
cross compiling or not.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29082 a95241bf-73f2-0310-859d-f6bbb57e9c96
installed either when building with GCC4 or when making a hybrid. Can be
installed separatly as well. Have fun :-)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29046 a95241bf-73f2-0310-859d-f6bbb57e9c96
the bitmap instead of the masks. Spotted by Mika Lindqvist (after 100 reboots),
thanks for tracking down such hard to spot errors!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29029 a95241bf-73f2-0310-859d-f6bbb57e9c96
get multiple definitions of them when building with GCC4 on a GCC4 host.
With that we can now build completely on a GCC4 host with native GCC 4.3.3.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29020 a95241bf-73f2-0310-859d-f6bbb57e9c96
GCC2) and produces multiple definitions with GCC4. Please yell if this breaks
cross-compiling.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29004 a95241bf-73f2-0310-859d-f6bbb57e9c96
use. It will now print out the usb_ids of the objects that generate the trace
messages. These IDs are unique compared to the device address used previously,
because device addresses are per bus while usb_ids are global. This makes
trace output from devices across multiple controllers distinguishable.
* Some cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29002 a95241bf-73f2-0310-859d-f6bbb57e9c96
include_next work properly with newer headers. GCC 4.3.2 has a <cstddef> in its
C++ headers for example that does an include_next of <stddef.h>. The latter is
located in the C headers. For this to work, the include directory for the C
headers needs to be specified later than the one of the C++ headers.
With that Haiku is now completely buildable with GCC 4.3.2.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28995 a95241bf-73f2-0310-859d-f6bbb57e9c96
but I don't see why. If someone still knows why this was put there, please check.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28994 a95241bf-73f2-0310-859d-f6bbb57e9c96
build. I sure hope that this doesn't break the build for anyone else.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28992 a95241bf-73f2-0310-859d-f6bbb57e9c96
to sAPMBiosEntry generates undefined symbols and I'm not in a condition to fix
this right now. Added a TODO.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28986 a95241bf-73f2-0310-859d-f6bbb57e9c96
the main() signature are not applied and do not generate errors when violated.
Our bootloader has a non-standard main() signature for example, which is of
course fine.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28983 a95241bf-73f2-0310-859d-f6bbb57e9c96
won't be implemented, the second currently isn't and the third is. This gets
rid of the frequent "unhandled ioctl" messages when using USB drives and also
adds the nice pendrive icon to the mount list when using USB storage devices.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28948 a95241bf-73f2-0310-859d-f6bbb57e9c96
register. Therefore "cc" should be added to the clobber list. Adding that here
as it's part of a patch attached to the freetype bugtracker.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28945 a95241bf-73f2-0310-859d-f6bbb57e9c96
constraint, so I replaced it with a "d" input and "=d" output constraint
instead, which should be equivalent. Please yell if my logic is flawed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28944 a95241bf-73f2-0310-859d-f6bbb57e9c96
unlocking the device again, causing deadlocks after unmounting a USB mass
storage device.
* Synchronize on close again, but this time with proper locking of the device.
* Restructured usb_disk_synchronize() a bit and updated comments.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28934 a95241bf-73f2-0310-859d-f6bbb57e9c96
could have messed up the state of other transfers currently running on that
device. Since devices are regularly opened/closed for enumeration/scanning
from different threads, this could've easily lead to bad situations. I've
removed the sync completely as it's not our task to issue it and because
a close doesn't always correspond with an unmount at all.
* Retry receiving the command status wrapper also when another error than a
stall is returned. The specs aren't too specific, but the graphic suggests
this is a general recovery path.
* Do a reset in case there is an error during data transfer to start the next
command from a clean state.
* Make sure we never acknowledge more data than we actually transfered. This
is to make sure devices that return broken residue values do not mess up our
transfers.
* Detect a few more cases of invalid and non-meaningful command status wrappers.
* If the device explicitly tells us that the sync command isn't supported don't
try it a few more times. Only retry at most five times if an unspecific error
is returned that could also come from another (temporary) error case.
* Add a bit more trace output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28930 a95241bf-73f2-0310-859d-f6bbb57e9c96
Pipe::ClearFeature() and Pipe::GetStatus(). These requests take the endpoint
address in the logical form, including the direction bit. This caused all those
requests to fail for all input pipes, most prominently visible in mass storage
where a mass storage reset could never be done completely and would cause many
devices to be unable to recover from errors.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28929 a95241bf-73f2-0310-859d-f6bbb57e9c96