Obtained from:
sio.c and sioreg.c changed to allow autodetecting the RB_SERIAL flag
passed by the boot blocks so that the kernel can switch to 'serial
console' mode automagically. 'options COMCONSOLE' can still be specified
to force the kernel to always use the serial port as a console.
CONUNIT and CONADDR can also be specified in the kernel config file
if the user wants to shift the console to a different port.
Put in the much shorter and cleaner version for the calibrate_cycle_counter
for the Pentium that Bruce suggested. Tested here on my Pentium and
it works okay.
properly from the beginning:
1) The `kern_devconf' struct should be a part of the driver's
`softc' structure (now it is).
2) The `description' should say what the device actually is,
rather than just giving a model number (now it does).
3) The device should be registered even if the probe fails, so
that it can be reconfigured later.
4) For netifs, the device state should follow the IFF_UP flag.
Other network interfaces should follow this example. (Please?) Eventually
there should be a rundown routine doing the equivalent of setting IFF_UP
off, and perhaps more if warranted.
protected drive at open() time has been *totally bogus*! The guy who
submitted it didn't understand all the implications of calling
set_motor(), and the `who' who included the patch into the tree did it
blindly... Pleeeeze, don't commit code to this driver unless you are
really going to understand what it does! This one caused me to pull
out even more hears, and those who know me do know that i ain't got
too many o'them. :-)
No kernel config options anymore besides keyboard language layout.
Virtual consoles are now dynamically allocated, no NCONS anymore.
Software cursor blinking/nonblinking.
Visual bell for laptops (don't beep at meetings :-).
Cursor/bell default type setable via config "flags" instead of as defines.
Cursor/bell type setable via ioctl's.
New video modes 80x30 80x60 for some laptops, and those with multisync monitors.
Scroll-lock history (length currently fixed at 100 lines).
Lots of cleanups, some only commented out for now (will goaway soon).
Support for new features in vidcontrol/kbdcontrol.
Updated manpages.
now marked busy as long as it's being in non-reset state, and the
drives are busy as long as at least one instance is open.
Also reformat everything to fit into 80 columns again.
Changed my mind wrt. error reporting for a write-protected drive and
an open() with write intent; ENXIO has been too weird, now return EIO.
Some portions of the code need to be rewritten to use tprintf()
instead of simple printf()'s, so the messages will also appear on the
session terminal, however.
Wangtek PC-02 QIC-02 controller with Cipher 150MB tape drive
Any attemp to open /dev/rwt0 hangs.
The following patch to /sys/i386/isa/wt.c is derived from Mikael
Hybsch's wt driver.
Submitted by: Terry Lee <terry@uivlsi.csl.uiuc.edu>
shifting. Also correct the original code as Garrett noticed it in mail.
Leave the mishandled code in to use it later if future versions of gcc
are correct. The code was part of the calibrate_cyclecounter routine to
get the speed of the pentium chip.
floppy driver (or in the hardware?). It turned out to be caused by
spurious interrupts, right after an FDC reset.
Also major cleanup in the low-level structure, there are now functions
performing error-checks for the FDC I/O.
Submitted by: (mostly) Peter Dufault <dufault@FreeBSD.org>
no more DOS boots to start it up.
Simply did a localized nuke of the OUTB macro in this file. This is
a kludge, since it seems it may actually be necessary in other GUS
files (tbd).
Thanks to: Amancio Hasty & Ken Hornstein
correct console number for the VT_WAITACTIVE ioctl. Invalid console numbers
caused waiting on an invalid pointer.
Use bcopyw() instead of move_up() and move_down(). bcopyw() handles
overlapped copies and should be faster. Actually use bcopy(). bcopy()
is slightly faster if video memory is 16-bit and about twice as fast if
it is 32-bit. bcopy() is said to fail on someGA's, but syscons already
depends on it working for other accesses to video memory.
Remove bogus input operands for fnsave(), fnstcw() and fnstsw().
Change all fwait's to fnop's. This might help avoid hardware bugs.
Wait after fninit with an fnop. This should be safer now.
Fix some spelling and formatting errors.
Use natural sizes for control and status words (u_short, promotes to int).
Don't clobber the SWI_CLOCK_MASK bits in npx0_imask when using IRQ13.
Set the devconf state correctly (always busy, if configured). Improve
code for npx_registerdev() a little (gcc can't keep id->id_unit in a
register for some reason). Don't register a nonexistent npx device.
Print a useful message in npxattach() again (delete references to errors
and not the whole message). Don't print "387 emulator" if there is no
emulator in the kernel.
Use %p for pointers in error messages.
Don't clobber the FPU state when there is an FPU exception. Just clear
the exception flags (after saving the flags as before). This allows
debuggers and SIGFPE handlers to look at the full exception state.
SIGFPE handlers should normally return via longjmp(), which restores a
good FPU state (as before). Returning from a SIGFPE handler may leave
the FPU in the wrong state (as before).
Clear the busy latch _after_ clearing the exception flags so that there
is less chance of getting a bogus h/w interrupt for a control operation.
Clear the saved exception status word when the next FPU instruction is
excuted so that it doesn't stick around until the next exception.
Clear the busy latch after fnsave() in npxsave() in case it was set when
npxsave() was called.
values for syncronous negotiation. The 284x series adaptors can now be
supported without the Bios being enabled. If you disable the Bios on the
274x series adaptors, all configuration parameters revert to the default
since there is no way to retrieve them.
- /sys/i386/isa/if_ed.c doesn't quite know how to deal with SMC EtherEZ
ethernet cards. The EtherEZ looks just like the Elite Ultra, except it
has only 8K of shared memory. The only way to have it properly detected
is to zero and test a few bytes of memory just about the first 8K region.
If it clears properly, it's an Elite Ultra, otherwise it's an EtherEZ.
I've also got an EtherEZ patch for netboot (Makefile, ether.c and ether.h).
- /sys/i386/isa/syscons.c wraps at the next to the last column rather than
the last column, like it should. You don't really notice this unless you
use certain programs that write all the way out to, say, the 80th column,
like VMSmail. Along with a one-line fix for this are some changes to
implement a non-blinking cursor. Put 'options "NOBLINK_CURSOR"' in your
config file and give it a try. :)
Submitted by: wpaul
Would you please commit this two-line patch to /sys/i386/isa/b004.c
(the Transputer driver) so that it at least compiles under 2.x
Haven't tried if the driver is working properly, but a kernel with
compiled-in driver has been running for two days now with no apparent
problems.
Submitted by: luigi
This is new version of Seagate ST01/02, Future Domain TMC-885, TMC-950
SCSI driver for FreeBSD. I started from the 2.0R version and mostly
rewrote it. New features are:
1) New probe algorithm. Old driver read the BIOS region of the adapter
memory and find the copyright string. The problem was in the BIOS itself:
it conflicted with IDE disks. The solution was to unplug it and
make the probe algorithm to work without it.
2) Proper timeout handling in numerous places where the driver
polls waiting for some event.
3) Assembler flagments added in critical places, mostly for data transfer
to of from the target. It was possible to make it faster,
but at the price of decreasing reliability.
4) Target-dependent delays when waiting for REQ deassert event.
Some devices seem to be slower (CD-ROMS, some tape drives),
and some seem to be too fast (disks). The driver tests the REQ
deassert timeout for each target and then uses it for polling.
5) Device flags added for SCSI parity control and sense request
priority control.
6) Generic cleanup, after which the driver became much more readable
(at least by me:).
7) Target data parity error logging is limited to avoid log file overflow.
8) Manual page added.
Submitted by: serge
Move definition of `stat_imask' to clock.c.
clock.c:
Rename `rtcmask' to `stat_imask' and export it. Rename `clkmask' to
`clk_imask' for consistency.
Only calculate TIMER_DIV(hz) once.
Merge debugging and "garbage" code to produce debugging code and format the
output better.
Make writertc() static inline and use it everywhere. Now all accesses to
the clock registers go through rtcin() and writertc().
Move rtc initialization to cpu_initclocks().
Merge enablertclock() with cpu_initclocks() and remove enablertclock().
The extra entry point was just a leftover from 1.1.5.
for wd (they both count the number of sectors). The wpms stat is still
moderately bogus for all drivers. Even the count stat could be handled
better (partial blocks should be counted as full blocks; should errors
and retries be counted?).
Voxware hackers should feel free to work on this some more, it's by no means
a perfect product.
(I have patches for GUS users running 2.x to run their GUS with bidirectional
DMA (talk while listening. All other soundboards must use push-to-talk until
people learn to build real hardware).
Submitted by: amancio hasty & paul traina
<string.h> isn't supposed to be used by the kernel.
cronix.h is <machine/cronix.h>, not "cronyx.h" (ambiguous) or
<sys/cronyx.h> (nonexistent; caused compile to fail).
cxreg.h is <i386/isa/cxreg.h>, not "cxreg.h".
<i386/isa/cpufunc.h> shouldn't be included directly; it is always
included by <sys/systm.h>.
<i386/include/*.h> is <machine/*.h>
<systm.h> is <sys/systm.h>.
<kernel.h> is <sys/kernel.h>.
<bpfilter.h> is "bpfilter.h". It really is in the current directory.
>Description:
If a process attempts to open a floppy tape device when the
device has been configured in the kernel, but did not probe and attach
on bootup, then a panic will occur.
[Review: The current ft situation is a crock, and this only bandaids
an earlier wound inflicted by making the attach conditional. This urgently
requires a review]
Submitted by: gene
Keep track of interrupt nesting level. It is normally 0
for syscalls and traps, but is fudged to 1 for their exit
processing in case they metamorphose into an interrupt
handler.
i386/genassym.c;
Remove support for the obsolete pcb_iml and pcb_cmap2.
Add support for pcb_inl.
i386/swtch.s:
Fudge the interrupt nesting level across context switches and in
the idle loop so that the work for preemptive context switches
gets counted as interrupt time, the work for voluntary context
switches gets counted mostly as system time (the part when
curproc == 0 gets counted as interrupt time), and only truly idle
time gets counted as idle time.
Remove obsolete support (commented out and otherwise) for pcb_iml.
Load curpcb just before curproc instead of just after so that
curpcb is always valid if curproc is. A few more changes like
this may fix tracing through context switches.
Remove obsolete function swtch_to_inactive().
include/cpu.h:
Use the new interrupt nesting level variable to implement a
non-fake CLF_INTR() so that accounting for the interrupt state
works.
You can use top, iostat or (best) an up to date systat to see
interrupt overheads. I see the expected huge interrupt overheads
for ISA devices (on a 486DX/33, about 55% for an IDE drive
transferring 1250K/sec and the same for a WD8013EBT network card
transferring 1100K/sec). The huge interrupt overheads for serial
devices are unfortunately normally invisible.
include/pcb.h:
Remove the obsolete pcb_iml and pcb_cmap2. Replace them by
padding to preserve binary compatibility.
Use part of the new padding for pcb_inl.
isa/icu.s:
isa/vector.s:
Keep track of interrupt nesting level.
Now floppy tape support is *disabled* unless you specifically
request otherwise. Poul wanted it this way, and I guess I'm not going to argue
though it may seem counter-intuitive. We can always change it back, later.
flags & 0x1. Somebody should build a kernel with this and see if
the floppy-tape damaged people can turn it off properly with userconfig.
I can't reproduce the original problem here.
and into ether_input(). It was silly to have bpf want this one way and
ether_input want it another way. Ripped out trailer support from the few
remaining drivers that still had it.
That was the good news. The bad news is that bad144 is a proper mess,
and I don't have time to fix it now, so you will probably not be able to
use it anyway.
Sorry guys, go out and buy a 100Mb IDE drive and a paddleboard :-(
If somebody wants to pick up on this: bad144 needs to learn how to
stay inside our slice of the disk. That's the trick.
Somehow, I don't think this stuff was tested at all! :-(
I really hope that it actually works, though my hopes are steadily diminishing.
Anyone with 27xx/28xx boards in -current is *strongly encouraged* to give this
stuff a shot! Otherwise, I suspect that we'll be punting this out of
2.0. I haven't found a single part of Justin's commit that wasn't broken
in some way.
Remove bogus declaration of Debugger(). Call Debugger() even if DDB is
not defined, but still call panic() after Debugger() returns, although
most other SCSI drivers just call Debugger().
with the current default exception (un)mask. There should be no such
processes unless you change the mask. Someday the mask should be
changed to the IEEE default of everything masked. The npx state
gets saved so that it can be checked and this may have the side effect
of fixing a bug that was reported for 1.1.5. (npx exceptions may
sometimes leak across exits and clobber another process. I can't see
how this can happen.)
Get some missing/wrong declarations from headers now that the headers
have them.
of the 1.1.5 driver, a recent version of the NetBSD driver, Andres'
transmission start threshold code, and all other relavent changes to the driver
since it was brought into 2.0. The multicast support from NetBSD has not be
folded in yet. I've tested it under high loads for two weeks and it is now
robust enough to be included in the GENERIC kernel.
Reviewed by: gibbs
Submitted by: vega@sophia.inria.fr (Andres Vega Garcia)
cosmetique) because we already have right things there or his changes
are incorrect.
Fix mcd_subchan to return position, inspired by idea from
bugress@s069.infonet.net, but different implementation.
Here is the improved probe for the mse (Bus Mouse) device driver. I
have been running with this under 1.1.5.1 as well as 2.0 without a hitch for
quite a while.
Submitted by: lars
tsleep()). Try `dd if=/dev/zero of=/dev/pcaudio bs=640k count=1'. The
write takes a few hundred seconds to drain, and if it is killed by a
signal, it still takes a few hundred seconds to drain and all of those
seconds are spent busy-waiting.
Clean up includes and declarations. Remove bogus casts of args to
timeout functions.
doesn't have to calculate it every call.
Rename `timer0_prescale' to `timer0_prescaler_count' and maintain it
correctly. Previously we lost a few 8253 cycles for every "prescaled"
clock interrupt, and the lossage grows rapidly at 16 KHz. Now we
only lose a few cycles for every standard clock interrupt.
Rename `*_divisor' to `*_max_count'.
Do the calculation of TIMER_DIV(rate) only once instead of 3 times each
time the rate is changed.
Don't allow preposterously large interrupt rates. Bug fixes elsewhere
should allow the system to survive rates that saturate the system, however.
Clean up declarations.
Include <machine/clock.h> to check our own declarations.
floppies now. I'm not sure why, but things hang when it gets to the
`changing root to fd0c' part. Without your latest commit, everything works
fine. Maybe you can figure out what you broke after ALPHA! :)
errors at a lower ipl. clist starvation problems can cause hundreds of
tty buffer overflows per second and logging them all amplified the
problems. This problem was less serious in 1.1.5.
Avoid a race in the check for starting a new block of output. com_events
was sometimes messed up and siopoll() looped endlessly. This bug was
introduced in 2.0.
Clean up previous 2 commits. Rename sio_registerdev() to sioregisterdev()
to match the (bad) surrounding naming conventions. There should be a
generic_registerdev().
. avoid resetting the FDC every time the last motor is going off;
instead, give it a 60-second period for possible later reactivation.
This prevents us from needing to recalibrate the FDC too often,
but still allows for an ``automagic error recovery', just in case the
controller is absolutely stuck. (Simply wait for 60 seconds, and
try it again.)
. made the floppy head settle time after a seek a constant
that might be overridden by a config option. (Well, actually the
divisor of the settle time). Pepople often reported problems with
their floppies, so i need a simply mechanism that allows them
to play with that value. (I personally cannot find any problem
on *my* drives.)
. implement the FD_DEBUG ioctl command, in case the driver
is compiled with DEBUG turned on.
. removed a bogus parameter from a printf; the remaining warnings
from gcc -Wall seem to be warnings about the %b format gcc cannot
understand
. rearrange Garett's code to fit better in the existing structure
of #define/type/function ordering.
. make everything fit into 79 columns again.
in the far pointers are multiples of 4K (as is normal when the video
BIOS is at seg 0xc000). Disallow mode switching if the pointer is bad.
Use a new pa_to_va() macro for all BIOS and video addresses in syscons.
Changed the fifth parameter to register_intr() from u_int mask into
u_int *maskptr in preparation for new features (shared interrupts and
removable devices, eg. for PCMCIA).
Changed the fifth parameter to register_intr() from u_int mask into
u_int *maskptr in preparation for new features (shared interrupts and
removable devices, eg. for PCMCIA).
and all SCSI devices (except that it's not done quite the way I want). New
information added includes:
- A text description of the device
- A ``state''---unknown, unconfigured, idle, or busy
- A generic parent device (with support in the m.i. code)
- An interrupt mask type field (which will hopefully go away) so that
. ``doconfig'' can be written
This requires a new version of the `lsdev' program as well (next commit).
One of the alpha testers (ETO, Toshihisa <eto@osl.fujitsu.co.jp>)
of my APM driver sent me a very small patch to if_ze.c for using IBM
PCMCIA Ethernet card II. There are only a few difference between
Ethernet card I and II. So we can use them both with this patch. It
also includes a patch for PCIC of ThinkPad 230Cs (As long as I
remember, this model is available in Japan only. But it is very
popular subnote in Japan).
Submitted by: hosokawa
so i hope i've finally removed all the occasions where the driver
got stuck when there's no floppy in the drive.
Also attemmpting to omit the error mesage for ``recalib failed''
for the first time, since people tend to be confused about this.
drivers have a chance to change their IRQ before it is checked.
This was implemented in revision 1.21 and broken in revision 1.26.
Drivers that can change their IRQ should probably be configured
with "irq ?".
else has been probed. This feature could go away again, if we can curb the
problem another way.
if_ed.c, syscons.c: Set the above flag. ed# because it needs it, syscons
because it looks stupid to "detect" the display you have already filled up
with text :-)
bt742a.c: Check bt_cmd() return-val during probe, thus failing on adaptec's.
Also silenced various printf's during the probe.
isa.c: Probe devices with the above flag set before the rest. Reduce the
number of "conflict" messages per device to one.
***
Please test the GENERIC-kernel now, if nobody can make it fail, GENERICAH
and GENERICBT has a finite and short life-expectancy...
***
of mb_offset given the right sequence of 1 and 0 byte mbufs. This bug
was discovered by John Hood who also provided this fix - which is a
rewrite of the routine (and is easier to understand than the code I wrote).
Submitted by: John Hood <cgull@smoke.marlboro.vt.us>
Fix endless loop in siopoll() for an event on a tty with no tty struct.
Don't generate unwanted interrupts in the serial console driver. These
bugs probably don't matter unless the tty struct is dynamically allocated.
Support polled mode. To use it, leave out the irq and the vector in
the config file. It only causes extra overhead for open polled ports.
The maximum usable speed is approximately 1000 bps for a 16450 and
15000 bps for a 16550.
Other cosmetic changes.
the first place was so that BPF could grok trailer packets. I've since
decided that this is a job for tcpdump to decipher (if at all). Also
fixed up checks for received packet length to better cope with ancient
starlan boards.
Submitted by: Thomas David Rivers <rivers%ponds@ncren.net>
WARNING: might hide some bug below! I commit this to improve the stability
of 2.0.
Thomas wrote:
-------------
I have been running a kernel with this change since October 4th; barring
unrelated network router troubles, the pitiful little machine has
completed several builds without any interaction from me, and continues
to chug along.
I re-read wd.c, and added appropriate printfs() to look for references
to dk_badsect[]. My changes should have printed something when dk_badsect[]
was referenced.
I got no output :-(
Thus, I'm forced to concluded that something else is examining some
spurious memory... which happened to be in dk_badsect[] of the disk structure
in wd.c. I can find no other explanation of why this unnecessary
initialization causes things to operate correctly.
On the premise that such an initialization isn't going to hurt anything,
I'm going to suggest it go into 2.0.
I'd like to thank everyone for there assistance, particularly David,
John and Bruce.
be merged at some point)
New AMD family ethernet driver. Should support BICC,NE2100, TNIC,
AT1500 and anything else that uses a Lance/PCnet type chip. Only been
tested with the BICC so far though.
Still work to do on performance and MULTICAST support needs to be added
but it's basically working and I want the revision history from this
point on
AT1500 and anything else that uses a Lance/PCnet type chip. Only been
tested with the BICC so far though.
Still work to do on performance and MULTICAST support needs to be added
but it's basically working and I want the revision history from this
point on
improvements from 1.1.5.1. I tried to compile a kernel without BOUNCE_BUFFERS
with the previous version for my Bt946c and it puked and died. Bringing
these enhancements back in allows the faster controllers to DTRT while
still not messing up the older ISA/broken VLB controllers, since
bounce-buffering is still the default. In theory, anyway. Bt445S and Bt545S
folks should start testing this ASAP! (actually, Bt445C and Bt545C folks
even more so!).
This is needed for having the fdformat program no longer searching
non-public include paths.
Protect the definitions in fdreg.h against double inclusion.
more work required to grab all fonts
2)Make standard VGA font as default, make HARDFONTS an option
(load iso8859 fonts instead)
3)Check fonts_loaded for all restore (copy_font...palette)
sequences.
have got the following:
Back out the changes in the previous revision. Function-like macros
were replaced by compound statements that work in less contexts.
Unoformize idempotency #ifdef.
Restore the simple leap year calculation as a macro and document it so
that it doesn't become complicated again. The simple version works
for all leap years covered by 32-bit time_t's. The complicated version
doesn't work for all leap years covered by 64-bit time_t's since among
other reasons, the solar system is not stable for long enough.
Fix declarations.
Nuke spinwait().
This code is mostly taken from the 1.1 port (which was in turn taken from
Dave Mills's kern.tar.Z example). A few significant differences:
1) ntp_gettime() is now a MIB variable rather than a system call. A few
fiddles are done in libc to make it behave the same.
2) mono_time does not participate in the PLL adjustments.
3) A new interface has been defined (in <machine/clock.h>) for doing
possibly machine-dependent things around the time of the clock update.
This is used in Pentium kernels to disable interrupts, set `time', and
reset the CPU cycle counter as quickly as possible to avoid jitter in
microtime(). Measurements show an apparent resolution of a bit more than
8.14usec, which is reasonable given system-call overhead.
when the drive had been left on a cylinder > 67 after kernel boot. The
most common case for this is booting a kernel that is located on
the inner cylinders of a floppy.
Also removed all occurences of spinwait(), replaced by DELAY.
Nuked a return line saying nothing, this might make Bruce happy 8^)
Submitted by: partially by Bruce Evans
date: 1994/05/22 12:35:38; author: joerg; state: Exp; lines: +6 -6
First round of floppy changes. Try making `fd' more robust.
New features:
. ioctl command for setting the drive type (density etc.); restricted
to the super-user
. ioctl for getting/seting `drive options'; currently only option
is FDOPT_NORETRY: inhibit the usual retries; used when verifying
a newly formatted track
Fixes:
. function prototypes
. made all internal functions `static'
. cleaned up & corrected .h files
. restructured, to make the chaotic function sequence more rational
. compiled with -Wall, and cleared all warnings
. introduced a mirror for the (write-only) `digital output register',
to avoid the current kludge
. device probing completed by seeking/recalibrating, and looking
for track 0 being found
. holding the controller down in reset state while it is idle (and
thus saving allot of headaches)
. make requests fail that are not a multiple of the (physical)
sector size
. removed the fixed physical sector size (512 bytes), allowing for any
size the controller could handle (128/256/512/1024 bytes)
. replaced some silly messages
. fixed the TRACE* macro usage, debugging reports should be complete
now again (debugging output is HUGE! though)
. removed fd_timeout for SEEK command; seeks are always reported by
the controller to succeed, since the `success' only refers to the
controller's idea of success - there is no hardware line to tell about
the seek end (other than the `track 0' line)
. catch SENSEI's that report about a `terminated due to READY changed'
status - could happen after a controller reset
. converted ``hz / <something>'' divide operations to divisors that are
powers of two, so gcc can optimize them into shifts
. write/format operations are checked against a write-protected medium
now *prior* starting the operation
. error reports of `invalid command' and `wrong cylinder' will cause
shortcuts in the retrier() now
. fixed a bug in the retrier() causing bogus block numbers to be reported
. fdformat() does care for errors now
Known Bugs:
. no attempts have been made (yet) to improve the performance
. sometimes, bogus ``seek/recalib failed'' messages are logged; this
is still a bug in the driver, but it's not harmful since it's
usually caught by the retrier()
Reviewed by:
Submitted by:
Obtained from:
320x200 256col VGA. This is nessesary for the iBCS stuff to work right.
(And we get the benefit of more video modes). Uses the videocard BIOS
to optain mode tables.
Added a "green" saver, switches off the syncs for "green" monitors.
Reviewed by:
Submitted by:
Obtained from:
don't hard-code netisr values in icu.s, but rather, use an array of
function pointers and set them all up in machdep.c for statically-linked
protocol families. (This will eventually be done differently.)
you download the microcode to the DSP everytime you power on your system.
They provide a dos-program to do so, but no other support. This commit adds
code to the sio-driver, which implement an ioctl, which will down-load the
micro-code.
To get this functionality, you must define DSI_SOFT_MODEM.
The program to actually employ the ioctl is not included, but the entire
source looks like this:
#include <sys/ioctl.h>
#include <stdio.h>
main()
{
unsigned char buffer[100000];
int i;
read(0,buffer,100000);
if((i = ioctl(1,TIOCDSIMICROCODE,buffer)) < 0)
perror("ioctl");
return i;
}
And you use it like this:
smload < data144b.dsi > /dev/ttyid3
You need to copy the *.DSI files from the dos-media provide with your modem.
You can see what is downloaded by issuing the ATI3 command to the modem.
DSI's scheme for what code you can run on your modem isn't violated by this.
Poul-Henning Kamp
phk@freefall.cdrom.com
This puppy is in good shape now.
It is a fully blown SCSI-driver, but it isn't a high performance one. It is
implemented entirely with polled I/O, and is intended to drive CD-ROM's, not
disks and tapes. It will run disks and tapes if asked to, but it isn't a
very good idea to do so. Transfer-rates max out at 600-700 kbyte/sec.
There is one problem: when write-requests get over 8192 bytes, the pseudo-DMA
stalls. This is only a problem if you dd(1) to a raw-device of some kind,
for mounting a disk it is ok. I have circumvented this by disabling the
pseudo-DMA in those cases.
It's very unlikely that I will spend more time on improving the performance
of this driver, it can do what I want it to now: install from a CD-ROM, and I
don't see any benefit in actually adding interrupts to the driver, considering
that performance never will be better than 700 kbyte/sec anyway.
You can install it under 1.1.5 too, by adding the lines to files.i386, your
config-file and copying pas.c and ic/ncr_5380.h over.
I will fix any bugs I can get a handle on.
Poul-Henning
with 1.1.5:
revision 1.40
date: 1994/06/17 16:57:03; author: pst; state: Exp; lines: +4 -2
From: Gill Kloepfer Jr. <gil@limbic.ssdl.com>
Verified by: pst
> The DIOCSBAD ioctl sets a bad block table (is almost suredly called by
> the bad144 utility) and changes the memory-resident bad block table. The
> problem is that bad144intern() is not called after the "disk" structure has
> been changed, so that the internal bad144 table will become out-of-sync with
> the one in the disk structure.
----------------------------
revision 1.39
date: 1994/06/07 01:36:39; author: phk; state: Exp; lines: +3 -2
another place option !defined(DISKLABEL_UNPROTECTED) was needed.