mlelstv@ tracking down the real issue.
sp_tlb_flush() makes various assumptions about the ABI and what GCC
will do with the rest of this function. the inputs were not referenced
by name but only as "%o0" etc inside the asm. the result was that GCC
was not filling in the function parameters before calling it because
they were not used in the function. so, sp_tlb_flush() was getting
random data for it's inputs. oops.
for now, convert 2 asm() calls to pure C, and mark the inputs for
the sta calls. this makes GCC generate the right code, but it still
isn't entirely optimal.
ideally a pure C version would exist, but that adds non-trivial
overhead (15 instructions vs 23 or so.)
one more enhancement to make here would be to assign the %o3, %o4 and
%o5 usage into explicit temp variables, instead of assuming that they
are going to be free to use.
If a pin can pulse in hardware, that will be used, else it will
be pulsed in software. There is no way yet to set the pulse frequency
for pins that pulse in hardware. While here, make the code mpsafe and
allow more than one thread in the driver (access to ioctl is serialized).
of the memory & I/O space reserved by the PCI BIOS for PCI devices
(including bridges) and recording that information for later use.
The code takes between 13k and 50k (depends on the architecture and,
bizarrely, the kernel configuration) so I am going to move it from
pci_machdep.c into its own module on Monday.
Print debugging information using aprint_debug(9) not aprint_verbose(9)
and be consistent about that. Get rid of the pciaddrverbose switch for
debugging printfs.
Make 'static' several functions that are private to this module.
Don't test truth of arbitrary integers but compare with 0. Change
'return (x)' to 'return x'.
of code per routine, makes it more explicit what's going on, and avoids
recursion, though the compiler probably optimized the tail recursion in
the old code.
These capture all the interesting data - useful for debugging.
In such cases there is no need to replicate commands in the build log.
Rather than run the entire build .SILENT, allow meta mode to set that flag
per target iff a .meta file is created.
Normal behavior is retained for targets where no .meta file is created,
ensuring that no build data is lost.