- do not start a port before the BSY and DRQ flags have been cleared;
as such, poll on device status rather than signature availability.
- change "ahci_sig_timeout" to "ahci_device_timeout" variable setting
accordingly; this variable determines the polling duration before a
newly attached device is given up on, and uses 30 seconds as default;
- use port connect changes (PCS/X/DET->1h) to kick off polling for an
attached device; detachment is still detected by means of PhyRdy
status changes (PRCS/N/DET<->3h).
- the "ahci_sig_timeout" variable now denotes the entire checking
period, and the delay between checks has been hardcoded; what was
previously "ahci_sig_checks" is now computed from those two;
- timeout values are no longer used for both millisecond and clock
tick values, and better typed;
- the computation of timeouts is no longer off by half a second.
Ben Gras [Mon, 11 Feb 2013 01:02:08 +0000 (02:02 +0100)]
__aeabi_ldivmod: fix sign logic
. signed 64-bit divide incorrectly tested for sign compensation
bits in the NEG (R5) register, causing the signedness of the
quotient and modulus to be wrong for negative numerators.
Ben Gras [Fri, 8 Feb 2013 18:11:42 +0000 (19:11 +0100)]
impove memory accounting
. the total amount of memory in the system didn't include the memory
used by the boot-time modules and some dynamic allocation by the
kernel at boot time (to map in VM). especially apparent on our
ARM board with 'only' 512MB of memory and a huge ramdisk.
. also: *add* the VM loaded module to the freelist after it has
been allocated for & mapped in instead of cutting it *out* of the
freelist! so we get a few more MB free..
Ben Gras [Sun, 10 Feb 2013 18:37:12 +0000 (19:37 +0100)]
VM: slight pagedir mapping generalization
. allow any number of pde's used for pagedir mapping
. allows >1024 NR_PROCS on x86, >64 on ARM
. allows NR_PROCS to be the same in both cases
. also cleanup: allocating spare PDE's is not necessary
throw that function out
Ben Gras [Sat, 9 Feb 2013 19:38:45 +0000 (20:38 +0100)]
ARM divsi3.S: raise(SIGFPE) when called for
. raise(SIGFPE) for modulo-0/divide-0 operations in
internal int division functions
. gcc: do not link with -lgcc anywhere so these internal
functions are always used from libc instead of (sometimes)
masked by -lgcc
. together fixes test53 on ARM
Ben Gras [Fri, 8 Feb 2013 12:12:45 +0000 (13:12 +0100)]
ldivmod, uldivmod: fix qdivrem calls
. ldivmod, uldivmod were passing the modulo argument pointer
in R4, which is bogus, as qdivrem expects it on the stack as
per the EABI, causing essentially 'random' memory to be trampled
by qdivrem. fix by pushing R4 before the call.
. also add these functions to -minc so -lminc clients can be
linked without -lgcc
Ben Gras [Mon, 4 Feb 2013 00:49:48 +0000 (01:49 +0100)]
libexec: detect short files
if an exec() fails partway through reading in the sections, the target
process is already gone and a defunct process remains. sanity checking
the binary beforehand helps that.
test10 mutilates binaries and exec()s them on purpose; making an exec()
fail cleanly in such cases seems like acceptable behaviour.
Ben Gras [Fri, 1 Feb 2013 16:48:40 +0000 (17:48 +0100)]
vm: fix sanity checks on arm
The 'polarity' of the RW bit is inversed on ARM, causing one
of the sanity check compensations to fail. ARM now runs basic
stuff with sanity checks passing.
Lionel Sambuc [Wed, 30 Jan 2013 14:36:51 +0000 (15:36 +0100)]
Fix command line history in ash
Also did some cleanup in ash sources, to make minix modifications
more obvious, as well as some simplifications (by removing code which
is never compiled)
Removed EDITLINE support, use libedit, which does the termcap/terminfo
handling.
Thomas Veerman [Tue, 29 Jan 2013 19:58:00 +0000 (20:58 +0100)]
ARM: provide free running clock to replace ccnt
The Cycle CouNTer on ARM cannot be used reliably as it wraps around
rather quickly and can be altered by user space (on Minix). Furthermore,
it's buggy when wrapping and is not implemented at all on the Linaro
Beagleboard emulator.
This patch programs GPTIMER10 as a free running clock at 1.625 MHz (it
doesn't generate interrupts). It's memory mapped into every process,
which enables libsys to provide micro_delay().
Ben Gras [Wed, 30 Jan 2013 02:13:24 +0000 (03:13 +0100)]
arm: make signal handlers work
A few kernel and calling convention adjustments to make sigsend and
sigreturn work for arm.
. provide a arch_proc_setcontext for earm in kernel
. set LR in context of signal handler to provide a proper
return address (to __sigreturn)
. change __sigreturn to retrieve the sigcontext pointer
from the sigframe struct and pass it to _sigreturn() in r0
Ben Gras [Tue, 29 Jan 2013 17:52:08 +0000 (17:52 +0000)]
vm: fix kernel-requested mappings for arm
. make vm tell kernel virtual locations of mappings
. makes _minix_kerninfo feature work
. fix for mappings being larger than what 1 pde can address
(e.g. devices memory requested on arm)
. still requires a special case for devices memory for the
kernel, which has to switch to virtual addressing
Antoine Leca [Mon, 21 Jan 2013 14:30:17 +0000 (14:30 +0000)]
GNU tools: improvements to fetching process
- Do not run the fetch.sh script every time
- Do not run the configure script with MKUPDATE=yes (build.sh -u)
- The fetched GNU source are hidden from `git status`
- With CLEANFETCHED=yes, `nbmake -C tools cleandir` will remove the
fetched GNU source and return the MINIX tree to its pristine state.
- Avoid (harmless) message when building in parallel, about find
running against an inexistant path
Notice that the GNU tools are "installed" on every run, even with
MKUPDATE=yes; this is a feature of the NetBSD build system, because
in case of changes in dependencies it is impossible to know them.
See commit 1.27 2004-06-12 of tools/Makefile.gnuhost in NetBSD's src/
The downloaded tarballs are not removed with CLEANFETCHED:
they are supposed to be unmodified, and the exact name is not known
to the Makefile's, since it is engraved in each fetch.sh script (and
we do not want to have the same information in several places.)
Thomas Veerman [Wed, 23 Jan 2013 14:07:04 +0000 (15:07 +0100)]
ARM: disable __minix_init for now
On ARM we can't yet globally map pages into every process. So now that
we correctly receive the pointer to the globally mapped kern_info
struct, we have to ignore it on ARM because attempting to dereference
the pointer yields a segfault.
Lionel Sambuc [Sun, 13 Jan 2013 16:20:11 +0000 (17:20 +0100)]
ARM updates
Due to the ABI we are using we have to use the earm architecture
moniker for the build system to behave correctly. This involves
then some headers to move around.
There is also a few related Makefile updates as well as minor
source code corrections.
Lionel Sambuc [Sun, 13 Jan 2013 19:06:31 +0000 (20:06 +0100)]
Reverting back to default value of MKARZERO
The value was changed to no for cross-building as the old binutils
could not handle the required flag. As this is now possible, the
default is restored.
This flags make sure that AR zeroes out some timestamps and uid/gid
fields in libraries, which would change for every build of the
library otherwise, preventing comparison between to builds.
Lionel Sambuc [Tue, 11 Dec 2012 17:42:21 +0000 (18:42 +0100)]
Fix warnings trivial warnings.
Fix warnings about:
. Unused variables
. format mismatch in printf/scanf format string and arguments
. Missing parenthesis around assignment as truth values
. Clang warnings anout unknown GCC pragma
Lionel Sambuc [Tue, 11 Dec 2012 17:03:26 +0000 (18:03 +0100)]
Changing field utmp.ut_time from int to time_t
This makes sure the types are coherent, and right now, time_t is
defined as an long, through _BSD_TIME_T_. It previously was
hardcoded as an int, so the structure's size does not change.