line discipline interrupt handlers more or less expect to be called at
spltty() == splimp(), although they have internal splimp()s that are
bogus if this expectation is satisfied. They are called at splsoftty()
from many tty drivers, so they were not protected from being reentered
from their own netisrs. They certainly don't expect that but are
apparently remarkably robust if it occurs. The problem in PR 798 seems
to be caused by pppstart() being reentered and finishing off the output
in progress by following the (stale) sc->sc_outm pointer. Then the
original pppstart() finds garbage in m2 after MFREE(m, m2). slstart()
doesn't have internal state like sc_outm so reentry of it probably only
causes out of order and dropped packets.
modularization of the wd/wcd/atapi driver is ugly.
Include cons.h from a less bogus place.
Removed an ARGSUSED. Unused args are normal for devswitch functions
and lint was informed about them for about 5 functions out of 1000.
Lint should be informed about them, if at all, in some other way.
Remove confusing backwards compatibility code that allowed driver to be
used in pre-4.4 releases. The 3COM card's use -link2 to switch tranceivers.
(no functional changes here)
This code will only be included in your kernel if you have
'options DEVRANDOM', but that will fall away in a couple of days.
Obtained from: Theodore Ts'o, Linux
the new seeprom format and negotiate up to 20MHz sync if set in SCSI-Select.
Reduce the complexity of the timeout code by running it at splhigh(). Fix
a bug that caused rescheduled timeouts at 0 clock ticks in the future causing
an infinite loop.
Obtained from: Timeout bug noticed by David Greenman and wcarchive.
Submitted by: Mike Mitchell, supervisor@alb.asctmd.com
This is a bulk mport of Mike's IPX/SPX protocol stacks and all the
related gunf that goes with it..
it is not guaranteed to work 100% correctly at this time
but as we had several people trying to work on it
I figured it would be better to get it checked in so
they could all get teh same thing to work on..
Mikes been using it for a year or so
but on 2.0
more changes and stuff will be merged in from other developers now that this is in.
Mike Mitchell, Network Engineer
AMTECH Systems Corporation, Technology and Manufacturing
8600 Jefferson Street, Albuquerque, New Mexico 87113 (505) 856-8000
supervisor@alb.asctmd.com
Fix the tests for being a console by reverting to the ones that
were used before the the RB_SERIAL changes. RB_SERIAL only needs
to be tested in one place. The initialization of comconsole was
wrong before the RB_SERIAL changes for the COMCONSOLE case. This
may have been the cause of the unnecessary changes.
Start eliminating #includes of <i386/i386/cons.h>. This header is
supposed to be included from <machine> although it should be
completely machine-independent and included from <sys>.
Remove a wrong XXX comment. `comconsole' is used to test for being
a console and even the tests for deciding the default termios state
are necessary (the semi-reentrant i/o routines don't handle ordinary
device i/o).
cy.c:
Sync with sio.c. The console tests are present but always fail.
handler (remove SA_NODEFER).
On the other hand, signal() case should set sa_flags to SA_NODEFER as
in previous change.
In addition, added #ifdef'd code for signal() to or in SA_RESETHAND
flag for when that compatability is implemented.
accesses after the BIOS bus scan. The previous revision made the assumption,
that every PCI motherboard did ...
Change the test on the initial value of the CONF1_ADDR_PORT register in a way
that makes the probe succeed on triton based motherboards, without breaking
the EISA motherboard that has some non-PCI register at the same address.
This is truly a hack. The idea is taken from the Linux ibcs2 emulator.
To use this feature, you must use the option,
options SPX_HACK
in your config.
Also, in /compat/ibcs2/dev, you must do:
lrwxr-xr-x 1 root wheel 9 Oct 15 22:20 X0R@ -> /dev/null
lrwxr-xr-x 1 root wheel 7 Oct 15 22:20 nfsd@ -> socksys
lrwxr-xr-x 1 root wheel 9 Oct 15 22:20 socksys@ -> /dev/null
crw-rw-rw- 1 root wheel 41, 1 Oct 15 22:14 spx
Do NOT use old socksys driver as that has been removed.
This hack needs /compat/ibcs2/dev/spx to be any device that does NOT
exist/configured (so the now non-existant spx major/minor works fine).
When an open() is called, the error ENXIO is checked and then the
path is checked. If spx open detected, then a unix socket is opened
to the hardcoded path "/tmp/.X11-unix/X0".
As the Linux hacker author mentioned, the real way would be to detect
the getmsg/putmsg through /dev/X0R and /dev/spx. Until this true
solution is implemented (if ever), I think this hack is important
enough to be put into the tree, even though I don't like it dirtying
up my clean code (which is what #ifdef SPX_HACK is for).
Currently, the emulator defaults to returning "FreeBSD" as the system
name, release "3.2", and version "2.0". Some programs want to make
sure they are on a SYSV 3.2 system and check for 3.X release number.
Use the following defines to override the defaults:
IBCS2_UNAME_SYSNAME
IBCS2_UNAME_RELEASE
IBCS2_UNAME_VERSION
(should be string)
for system name, release, and version, respectively. This allows
someone to compile the emulator into the kernel so it can pretend
to be a specific system if needed.
Require the state of the configuration enable bits to be OFF assuming
that the BIOS left them that way, as it should anyway to avoid bad things
to happen.
The tests themselves are copied from the previous release, with the
exception of CONF1_ENABLE_MSK1 having the LSB set. This bit should be
read back as '0', since only DWORD addresses are legal.
I tried to solve the problem of IDE probing compatibility in this version.
When compiled without an ATAPI option, the wd driver is
fully backward compatible with 2.0.5. With ATAPI option,
the wdprobe becomes strictly weaker. That is, if wdprobe works
without ATAPI option, it will always work with it too.
Another problem was with the CD-ROM drive attached as a slave
in the IDE bus, where there is no master. All IDE CD-ROM
drives are shipped in slave configuration, and most users
just plug them in, never thinking about jumpers.
It works fine with ms-dos and ms-windows, and this
version of the driver supports it as well.
The eject op can now load disks. Just repeat it twice,
and the disk will be ejected and then loaded back.
The disc cannot be ejected if it is mounted.
Submitted by: Serge Vakulenko, <vak@cronyx.ru>
nxmmap() returned a bogus value as well as having a bogus type. Some
drivers use nxmmap() for configured devices (`nx' functions should
only be used for unconfigured devices). These drivers allowed mmapping
physical page 6, which may have interesting contents. vm has kludges
to avoid the same bug with nullop() returning page 0 and enodev()
returning page 19 (ENODEV), but didn't handle enxio() returning page 6.
vm is the wrong place to handle these bugs.
free-run and doing a subtract in microtime() rather than resetting the
counter to zero at every clock tick. In combination with the changes to
kern_clock.c, this should eliminate all the immediately obvious sources
of systematic jitter in timekeeping on Pentium machines.
in line with linux alt space of /compat/linux.
This was pointed out by Stefan Esser.
In cheching alt space for libraries in imgact_coff.c, use const
ibcs2_emul_path instead of its own local string. Also do a proper
malloc of temp name according to MAXPATHLEN.
Add new files created for emulator.
Modify NetBSD import to work with FreeBSD and add new features and
code. The complete emulator is essentially a combination of work/code
implemented by Sean Eric Fagan, Soren Schmidt, Scott Bartram, and myself,
Steven Wallace.
Features of this new emulator system include:
o "clean" code, including strict prototyping.
o Auto-generation of ibcs2 system calls, xenix system calls, isc system
calls. Generation includes system tables, structure definitions,
and prototyping of function calls.
o ibcs2 emulator does not rely on any COMPAT_43 system calls.
o embedded socksys support
o ibcs2 msgsys, semsys, shmsys calls supported if supported in kernel
o alternate /emul/ibcs2 namespace searched first for files in ibcs2
system. Usefull to keep sysv libraries, binaries in /emul/ibcs2.
o many other finer details and functions fixed or implemented.
which is used as a basis for a more complete and cleaner ibcs2 emulator.
(snapshot about May 1995 with a few files from September 1995)
Some files and code from old emulator still remains.
New files, features, and changes have been implemented by myself,
which will be shown in following commits.
Extend test coverage:
Add and enable undocumented options TCPDEBUG, COMPAT_LINUX and IBCS2.
Add but disable (broken) pseudo device tb.
Add and enable pseudo devices su, ssc.
Add but disable (broken) devices sscape0, trix0.
Add and enable device bqu0.
option DDB_NO_LCALLS to stop ddb getting control and broke all ddb
tracing. Now there is no option and no way for ddb to trace at
address _Xsyscall or to _Xsyscall, but tracing everywhere else
works. The previous fix did unnecessary things for Linux syscalls.
Don't bother checking that syscall frames are for user mode.
Make debugger traps inside the kernel (except at addresses _Xsyscall
and _Xsyscall+1) fatal if ddb is not configured. They "can't happen".
Add prototypes.
Remove stupid comments, e.g., /*ARGSUSED*/ for args that are used.
match the board setting.
2) Fixed the warning message to properly print the irq mismatch (as opposed
to the bit encoded value).
3) Add irq autodetection if the kernel has "?" or no irq specified.
4) Add missing splimp protection in ixioctl().
Obtained from: other people on the net ?
1. stepping over syscalls (gdb ni) sends you to DDB, and returned
to the wrong address afterwards, with or without DDB. patch in
i386/i386/trap.c below.
2. the linux emulator (modload'ed) still causes panics with DIAGNOSTIC,
re-applied a patch posted to one of the lists...
This is really just a token gesture at this point. We can't really turn
on swapping here anymore because (I think) we need to do a namei() lookup
in order to get a vnode which we can pass to swaponvp(). But to do a
namei(), we need a properly initialized proc structure, and we don't
have one. (I was hopping to toss it proc0, but that isn't initialized
until later.) We could conceiveably fabricate a dummy proc structure
to make namei() happy, but that's too much work for too little payoff.
For now, swapgeneric's only remaining saving grace is that it lets
you set the root device with -a.
1542 revs work by assuming the next few sequential ID codes are
new Adaptec boards and enabling them after printing a warning.
Conditionalize the informational boot messages with "if (bootverbose)".
were making and were no-brainers. However, the xcdplayer
eject button didn't work because xcdplayer gave up and didn't bother
to try the EJECT ioctl anyway when CDIOCALLOW was not available.
This all works now.
o A change so that xcdplayer gets TOC entry data for the lead-out area
on the disc. Xcdplayer can now play the last track on a CD, which
it would not do in earlier versions (but no one reported).
Cdplayer gets the TOC data differently and it works in old and new
versions.
o Eliminated a race condition that caused the driver to sleep forever
on very slow and heavily loaded systems on rare occasions when
the system was doing lots of audio-related ioctls to the drive.
o Fixed a problem where a locked drive could be unlocked by accessing
one of the non-locking devs. Door locking now follows the documented
rules.
o Made all wait channel strings unique to matcd.
Submitted by: Frank Durda IV <uhclem%nemesis@fw.ast.com>
scheduled for demolition. This is a first step: get rid of if_zereg.h,
by adding the five extra definitions to if_edreg.h.
Also add some definitions which will become needed when if_ze.c gets
replaced entirely by pccard and if_ed.c. (this is a 2.1.0 candidate)
with the driver's stability now. I've not had a single problem with it for
weeks.. All that remains is a bit of performance tuning, and finishing
the manpages.
Now comes up in the old line-oriented interface by default for serial
and pcvt folk with a `visual' command for going to the visual interface.
Best of both worlds, no?
Submitted by: Michael Smith <msmith@atrad.adelaide.edu.au>
Changes relative to 1.12:
- Put extra instruction between outl()/inl() sequence to prevent the
old value being read back because of the bus capacitance.
- Additional check for existence of register at CONF2_ENABLE_PORT.
setting the control register. Make the read and write operations two
completely separate steps.
While we're at it, pull in the whole set of Cyrix cache control options
from NetBSD-current, since a few motherboards do the right thing with
the Cyrix chip.
There is no option to disable the internal cache completely (yet).
Reviewed by: pst
Obtained from: NetBSD
ignore and set it to 18 sectors/track. This allows FreeBSD to boot with
2.88MB floppies which are used in older ThinkPads.
Submitted by: Random Net person whose name I lost
EFAULT if it is not resident. This prevents the system from manufacturing
a zero-fill page for unused but allocated areas of the kernel's VM. This
should fix the "CMAP busy" panic that some people saw during system
startup.
there is a PCI bus at all) ...
- Do not expect the chip sets to follow even very clearly expressed
requirements of the PCI 2.0 spec.
- Do not read back the value just written to an I/O port without making
sure that some other data have crossed the bus in between ...
2) Killed i386pagesperpage as it is not used by anything.
3) Fixed benign miscalculations in pmap_bootstrap().
4) Moved allocation of ISA DMA memory to machdep.c.
5) Removed bogus vm_map_find()'s in pmap_init() - the entire range was
already allocated kmem_init().
6) Added some comments.
virual_avail is still miscalculated NKPT*NBPG too large, but in order to
fix this properly requires moving the variable initialization into locore.s.
Some other day.
used and went a long way toward confusing the code.
2) Fix proc0's initial stack to not be 48 bytes smaller than it needs to
be.
3) Correct comment about 'first' arg to init386().
Add prototypes. Use static for function definitions to match existing
prototypes. Otherwise leave functions that should be static as extern.
TODO: declare everthing except sidriver and siintr as static. I use
some new cdevs registration functions to do this for syscons and pcvt.
Fix siintr() to match its prototype in ioconf.c (don't return anything).
This may break the eisa support, but Julian says that eisa interrupts
never worked anyway.
(EISA support was never tested anyway - Peter)
Submitted by: bde
the first one in the config has priority. They can be switched using
userconfig().
i386/i386/conf.c:
Initialize the shared syscons/pcvt cdevsw entry to `nx'.
Add cdevsw registration functions.
Use devsw functions of the correct type if they exist.
i386/i386/cons.c:
Add renamed syscons entry points to constab.
i386/i386/cons.h:
Declare the renamed syscons entry points.
i386/i386/machdep.c:
Repeat console initialization after userconfig() in case the current
console has become wrong. This depends on cn functions not wiring down
anything important.
sys/conf.h:
Declare new functions.
i386/isa/isa.[ch]:
Add a function to decide which display driver has priority. Should be
done better.
i386/isa/syscons.c:
Rename pccn* -> sccn*.
Initialize CRTC start address in case the previous driver has moved it.
i386/isa/syscons.c, i386/isa/pcvt/*
Initialize the bogusly shared variable Crtat dynamically in case the
stored value was changed by the previous driver.
Initialize cdevsw table from a template.
Don't grab the console if another display driver has priority.
i386/isa/syscons.h, i386/isa/pcvt/pcvt_hdr.h:
Don't externally declare now-static cdevsw functions.
i386/isa/pcvt/pcvt_hdr.h:
Set the sensitive hardware flag so that pcvt doesn't always have lower
priority than syscons. This also fixes the "stupid" detection of the
display after filling the display with text.
i386/isa/pcvt/pcvt_out.c:
Don't be confused the off-screen cursor offset 0xffff set by syscons.
kern/subr_xxx.c:
Add enough nxio/nodev/null devsw functions of the correct type for syscons
and pcvt.
Split off cdevsw initialization in cninit() into a new function
cninit_finish() that isn't called until all hardware device drivers
have been attached. The bdevsw entry of the driver for the physical
console needs to be hooked after the physical driver has been
attached in case the attachment modified the entry.
Rearrange cninit() to avoid changing cn_tab until the driver for the
physical console has been initialized, so that the previous driver
(if any) can be used for debugging.
Start removing half-baked lint support. bdevsw functions usually have
unused args but /*ARGSUSED*/ was used for only about 5% of them.
cons.h:
Declare cn_init_finish().
autoconf.c:
Call cn_init_finish().
Start adding prototypes. Functions with bogus linkage (extern where
static is probably should be static) are explicitly declared as extern
so that the can be found easily (extern in a non-header is usually
wrong).
All:
Continue cleaning up init stuff: init functions shall be static;
INITs should be at the start of files...
by me...
Original message:
This patch upgrades the ATAPI CD-ROM driver to version 1.3.
It has three bugs fixed:
1) The `controller not ready' message at startup and later.
It was caused by staled media change bit.
2) Incorrect shuffling of model string for some drives (NEC, Mitsumi).
3) Handling of drives which report itself as been of direct-access type,
instead of CD-ROM type.
There is one known bug which is not fixed yet -- probing
in absense of IDE disks. A work-around exists though (thanks Steve!).
If you have no IDE disks attached, then remove them from the kernel
config file to make the CD-ROM attach correctly.
Unfortunately, there is no way to disable them from the kernel
interactive config mode.
Reviewed by: sos (Soren Schmidt)
Submitted by: vak@gw.cronyx.msk.su (Serge V.Vakulenko)
2) Output K bytes instead of pages as this means something to more people.
3) Moved printf of avail memory to after vm_bounce_init() call so that
bounce buffers are included in the figure.
4) Killed initcpu(); it's an unused vestige from the VAX.
1) Make the driver "quiet" by sticking most boot messages behind
bootverbose conditionals. This means that you won't see the
sync and wide negotiation, but you will find out if they fail.
2) Add support to the 93cx6 serial eeprom code to read at an abitrary
offset. This is needed so that we can access the second half
of the eeprom on 3940 cards where the second channel's config
is stored.
3) Add flags argument to ahcprobe(). This is used by the pci probe code
to tell the generic driver that an adapter should be treated
as a channel B device as well as notify it of the presence of
external SCB SRAM. These are needed for some motherboard
implementations of the aic7870 and for the 3940 controllers.
4) Print "Channel A"/"Channel B" instead of "Single Channel" for the
two busses of the 3940. I received many reports of confusion
about how the 3940 was probed since most people belived that
only one ahc entry was needed. This will hopefully make it
clearer.
5) Walk the SCBs to determine just how many their are if external SCB
ram is detected.
6) Hard code that external SCB ram is present for the 3940 since it doesn't
use the documented reporting facility for reporting the SRAM. :(
255 commands per channel are supported on the 3940.
7) Read the seeprom starting at addres 32 for the second channel of the
3940 so we get the right info for that channel.
8) Clean up printing of the "Disabling tagged queuing message".
9) Queue timeouts if they occur while we are handling a timeout. The code
was totally unprotected in this scenario.
Reviewed by: Timeout code reviewed by David Greenman <davidg>
/*
+ * Code for MTERASE added by John Lind (john@starfire.mn.org) 95/09/02.
+ * This was very easy due to the excellent structure and clear coding
+ * of the original driver.
+ */
changes to allow devices that don't probe (e.g. /dev/mem)
to create devfs entries
this required giving 'configure' its own SYSINIT entry
so we could duck in just before it with a DEVFS init
and some device inits..
my devfs now looks like:
./misc
./misc/speaker
./misc/mem
./misc/kmem
./misc/null
./misc/zero
./misc/io
./misc/console
./misc/pcaudio
./misc/pcaudioctl
./disks
./disks/rfloppy
./disks/rfloppy/fd0.1440
./disks/rfloppy/fd1.1200
./disks/floppy
./disks/floppy/fd0.1440
./disks/floppy/fd1.1200
also some sligt cleanups.. DEVFS needs a lot of work
but I'm getting back to it..