pvlists if they were entered by the fault routine. in this case
we had better call pmap_remove to clear out the pventry structures.
appears to fix some pvlist releated panics people have seen with pmap.new.
Replace all DS5000_* and DS3100 ifdefs with ifdefs on DEC_ options.
* Use MI declarations, not pmax-specific, in model-specific init
that uses baseboard (ioasic) registers.
* Further cleanup of machdep.c. Clock-tick still needs more thought.
* Use 'ibus' names for 3100 baseboard devices in MI code.
* add "Platform" support inpmax/pmax/sysconf.c and pmax/include/sysconf.h
(based on Alpha cpuconf.[ch], with a namechange to avoid clashes with
support for models of MIPS cpus. They differ more than Alphas).
* For each supported model of DECstation, create a separate file
with the support for that model. Use model codenames, since
support is really baseboard-specific and CPU daugherboards can change.
Move code from machdep.c and pmax_trap.c,
Add sysconf (nee "cpuconf") support.
* Rename model-specific functions to match sysconf names.
* Clean up autoconf.c. Use platform callbacks.
* Retire pmax_trap.c.
Leaves I/O bus configuration and console configuration untouched.
the kernel on most platforms, including all of the entry-level platforms.
2. Kill the comments and options for load address selection.
3. Kill the default -g.
be invalidated if the pmap is not active. A rare thing (in fact, I'm
having trouble thinking of a scenario where it would happen), but it was
incorrect, nonetheless.
as pmax/dev/findcons.c:
* Follow the same logic: look for the device the PROM is using.
* If it's a framebuffer and we don't have a driver for it, try other
* framebuffers in PROM search order.
* If no match found, warn user and fall over to serial console.
* if no serial console found, go back to PROM.
Rework tc/scc.c attach routine to give cleaner initialization semantics.
Prune out old 'braindamage' code.
enough to use as a console on my DEC 3000/400 (connected to a VT-520
terminal).
XXX The MI SCC driver needs serious changes to handle platforms which
have muliple SCC attachments (e.g. the Alpha port, which has an ioasic
attachment for TurboChannel systems and a gbus attachment for TurboLaser
systems).
XXX The MI SCC driver also needs changes to deal with the wacky (to put
it mildly) way the chips are wired up on the ioasic (on both TC Alphas
and DECstations). These are going to come along later.
* Do rcons output properly, using cn_tab->cn_dev which points
at rcons cdevsw entrypoints.
* The pmadx console code was using keyboard (serial) device
(major,minor) for raster consoles with special code in the keyboard
drivers to catch output intended for consoles, pull it off the device
queue, and print them via cnputc().
Ifdef out RCONS_BRAINDAMAGE.
* Other minor cleanup to pmax scc driver.
version has 2GB direct map starting at 2GB, and either 256MB or 1GB
S/G starting at 1MB. I've done *some* testing on this, but I'm not
quite happy with it yet.
out how much s/g ram is available. Can't really use the 128K entry S/G
ram yet- but I'll fix that later. More importantly, add in a dwlpx_iointr
handler that will try and figure out what the DWLPX error is and at
least print out what is happening- I actually found it useful in S/G
entry debugging as it could tell me that I had some bad S/G entries.
certain 17" monitors. Change from Michael R. Zucca, PR 4988.
XXX - This can cause problems on system with the DAFB chip which currently
use only a NuBus-based video adapter. In particular, grf devices may not be
attached properly in this case. This unfortunate situation is less annoying
than not having a reasonable console, however. A reasonable, reliable
monitor sense algorithm for the DAFB would resolve the problem.
This should allow to use old X servers which depend on the old mouse
interface to work in the future.
XXX There can be only one attachment - either to an old console driver
or to the new pckbc driver - be configured.
-rename the "pckbd" internal attribute to pckbcport, it conflicts with the
real pckbd device in dev/pckbc
-add attachments of pccons and pms to the new mi keyboard controller
driver (more or less for testing)
-include the new "files.wscons" and "files.pckbc"
-add declarations for VGA - must be done here for now to avoid conflicts
with alpha's private VGA driver
-allow to bus_space_map() for the memory hole in early startup
-add calls to the new XXX_cnattach() functions to consinit()
-add a "pckbc_machdep_cnattach()" dispatch function to allow the
combination of old console driver - new keyboard controller driver
* Add more #ifdef pmax/#endif, #ifdef alpha/#endif where appropriate.
Config and heade files need more work (or replacement)
change TK_NOTYET to HAVE_RCONS
change commented-out /* && cn_tab.cn_screen */ to && raster_console()
* Add DDB hooks.
* Note where Alpha console ignores carrier on consoles.
* Add pmax-derived console tty-size code inside HAVE_RCONS
* Fold in gross pmax rcons-input hooks, inside HAVE_RCONS
Untested, but whitespace/ifdef only, cross-compiles OK,
preprocessing shows no significat differences (famous last words)
the TLB and I-cache in the SWITCH_CONTEXT macro.
- Right after switching to proc0's newly-created context at startup time,
flush the TLB and I-cache; this is the only place where it's not done
automatically.
- Fix a nasty bug in a critical section of cpu_switch(); change the
pmap_activate -> SWITCH_CONTEXT -> pmap_deactivate sequence to
pmap_deactivate -> pmap_activate -> SWITCH_CONTEXT. This prevents
erroneously marking a pmap inactive if switching to a process that
shares it's address space (and thus its pmap) with the oldproc! Noticed
by Chris Demetriou.
of TLB and I-cache flushes, significantly speeding up context switches.
Once again, many thanks to Chris Demetriou and Ross Harvey for code
review and debugging assistance!
- device attachment arguments contain bus-specific
address and interrupt levels.
- devices must call back on bus map functions to get their
addresses and interrupt levels translated properly.
- sun4m's obio bus is treated like an Sbus slot.
- the sun4-style obio bus has its own attach arguments
and map functions.
we were in ledcontrol(), the heartbeat twinkler would just punt on
updating the LED even though it had already updated the status. (This
was broken in v1.73 of locore.s).
Rather than resurrect the old code, simplify ledcontrol() and don't
bother with mutual exclusion. As mentioned by the comments describing
this function, we really don't need to be that precise. We do, however,
want to guarantee instructions that modify the status variable directly,
so the function is now primarily inline assembly.
null, the frstor would fault on a PPro. I'm pretty sure this is not
how the chip is supposed to behave, but it's easy enough to do a fninit
to throw away the exception state.
Also, some other minor changes to the documentation.
invalidation algorithm:
if (old mapping had PG_ASM set || pmap is active) {
TIBS(va);
if (also sync I-stream)
imb();
}
The check for "old mapping had PG_ASM" will get all kernel mappings (since
kernel mappings always have PG_ASM set).
This allows us to remove the bogus check for the kernel pmap in
active_pmap() - do so.
Use the new TLB invalidation macro whenever such action is needed.
as well, until some other changes are made). Nuke active_user_pmap(),
and change the places that used it to use active_pmap() instead (as well
as make some DIAGNOSTIC consistency checks).
the PTE was previously invalid, no TLB invalidation is necessary because:
(1) when a PTE is invalidated, its entry is flushed from the
TLB
(2) the PALcode won't install an invalid PTE into the TLB.
structure. We will continue to run on this context (which is the
global Lev1map at this point) right up until we switch to proc0's
context in switch_exit().
- Maintain two copies of the number and size of physical memory segments.
One copy, mem_clusters[], contains _all_ of physical RAM, for crash dumps.
The other copy, phys_seg_list[], starts out with all of physical RAM (and
is used to initialize mem_clusters[]), but is adjusted to be the memory
actually managed by the VM system.
- Fix computation of physmem; when support for MACHINE_NEW_NONCONTIG was
added, physmem was accidentally changed to not take into account the memory
located before the kernel, or the memory taken up by the kernel itself.
- Make initialization of the message buffer a little less magic-looking.
- Maintain two copies of the number and size of physical memory segments.
One copy, mem_clusters[], contains _all_ of physical RAM, for crash dumps.
The other copy, phys_seg_list[], starts out with all of physical RAM (and
is used to initialize mem_clusters[]), but is adjusted to be the memory
actually managed by the VM system.
- Fix crash dumps with regard to multiple memory segments.
Major change is that page table page management has been completely
rewritten. Page tables are now accessed via K0SEG (no more KVA space
wasted on user page tables), and a much larger user address space is
supported.
Many thanks to Chris Demetriou and Ross Harvey for helpful insight and
debugging assistance.