separated "nfswrapper.c"/"nfs.c".
This nfs.c differs from the stand/lib/libsa one in that it does not
have a separate mount() function - the mount is done in open().
* support chip clocks != COM_FREQ, by introducing sc_frequency (for the
mainline code) and adding a frequency parameter right after the rate
parameter to comcnattach() and com_kgdb_attach().
- Make com_isa and com_multi initialize sc_frequency to COM_FREQ.
- Make i386/machdep.c and alpha/dec_xxx.c call com*attach() with the freq.
parameter.
* supio_attach_args get two more fields: a sc_ipl and a sc_arg, both ints.
- com_supio uses the first for interupt establishment (all childs will, as
soon as they exist) and the 2nd for sc_frequency.
- drsupio passes sc_ipl alway as 5, and for the "com"s, sc_arg as 16*115200
- hyper will pass sc_ipl as 6, and sc_arg as 16 * 460800
(currently only CD-ROM drives on i386). The sys/dev/scsipi system provides 2
busses to which devices can attach (scsibus and atapibus). This needed to
change some include files and structure names in the low level scsi drivers.
two DMA channels to do e.g. full-duplex. This allows
a way of specifying the second channel in a sane way.
THIS IS TEMPORARY. The drq2 locator will go away when
the locator system has been changed to allow multiple
values per locator.
device memory mapping cacheable/non-cacheable:
- PG_N doesn't exist on the 386.
- pmap_changebit() only deals with managed pages.
Basically, calling it is unnecessary, and never did anything. Pointed
out by Chuck Cranor, and further discussed with Frank van der Linden.
Also, add a comment about why we don't mark pages non-cacheable in
_bus_dmamem_map().
Delay setting of cn_tab->cn_dev until autoconfiguration attach
to get the minor number right. (not really needed, but for
consistency with pccons and serial consoles)
Comment out unused pccnprobe() and pccninit().
XXX I didn't use "#if PCVT_NETBSD > ???" anymore, nor separated from
FreeBSD. The driver is not centrally maintained anyway.
* make map and alloc take 'flags' rather than 'cacheable,' for
more flexibility.
* rename BUS_BARRIER_* to BUS_SPACE_BARRIER_*, for consistency.
* rename bus_space_copy_* to bus_space_copy_region_* and make their
defns match the updated spec.
Backward compatibility is provided by defining __BUS_SPACE_COMPAT_OLDDEFS,
which is currently defined by default.
anymore). This makes the code cleaner (no more bus tag guessing in the
serial console driver) and it allows to share code with KGDB port
initialization.
The console device is now given as string ("pc", "com0".."com3").
Modelled after alpha port.
keys on a pccons console keyboard.
submitted in PR 899 by Alistair G. Crooks
Note that I only did this for the US type keyboard maps.
This and all other such options should be documented, and perhaps
rennamed with consistant PCCONS_ prefixes.
o option DISPLAY_ISO8859 enables the display of iso-latin1
character set (instead of the IBM page code 437)
o option FRENCH_KBD, GERMAN_KBD or NORVEGIAN_KBD implement
support for national keyboards (implies DISPLAY_ISO8859).
Originally supplied in PR #1529
2) Add option PCCONS_REAL_BS which (for US keyboards only) forces
backspace to really be backspace and not delete. Intended to close
PR #2264 submitted by Greg Woods. He wanted it changed for everyone
-- I thought adding a kernel compile option was friendlier.
Note: Both of these sets of options really should be documented in an
i386 specific version of options(4).
get APM debugging code compiled in. also, redo the way APM debugging
printfs are invoked, making sure they're always compiled in if debugging
is enabled, but printing them only if the appropriate bits in the
'apmdebug' global variable are set.
* clean up function prototypes (alphabetize in each category, get rid
of 'STATIC' and make them always static since kernels shouldn't have
static symbols stripped anyway, and debugging kernels definitely don't),
group global variables together and note that they're used as globals).
* Export the following as option-settable and patchable global variables:
apmdebug flags word that controls which APM debugging
printfs are printed, set with APMDEBUG_VALUE.
apm_enabled boolean that indicates whether or not APM should
ever be configured on the machine. true by
default, false if APM_DISABLE defined when
compiling. this option exists so that users
whose systems crash when APM is enabled can
disable it with a patchable kernel variable, and
therefore don't necessarily have to compile
a custom kernel as often. With this option set,
a check is still done to see if the APM BIOS
exists; this variable should be used to prevent
the kernel from ever attaching to the APM BIOS.
apm_force_64k_segments
boolean that tells segment setup code to always
use segments with 64k length. false by default,
true if APM_FORCE_64K_SEGMENTS defined when
compiling. used to just be a compile-time option.
apm_do_idle boolean that controls whether or not the APM code
will try to signal the BIOS that the system is
idle when in the idle loop. true by default,
false if APM_NO_IDLE defined when compiling.
apm_do_standby boolean that controls whether or not standby
requests are ever attempted. true by default,
false if APM_NO_STANDBY defined when compiling.
used to just be a compile-time option.
apm_v11_enabled boolean that controls whether or not the driver
attempts to use APM spec v1.1 features. If true,
the driver does (it implements v1.1 of the spec),
and if false the driver only uses v1.0 features.
true by default, false if APM_V10_ONLY is defined
when compiling. Really, the driver should be
updated to do APM v1.2 and this option should
either be updated or go the way of the dodo.
used to just be a compile-time option.
apm_bogus_bios (patchable only) controls a few of the APM segment
setup features. (probably should just be a global
and not patchable.)
* make apm_perror print out the full contents of %ax rather than
just the error code, in addition to printing out the string corresponding
to the error code.
* print estimated remaining battery life time as "[<hours>h ]<minutes>m",
which is actually easily understood, rather than as "<hours>:<minutes>
minutes", which is not.
* restructure match and attach so that they work as they should, remove
redundancy, support attaching the APM device but not actually enabling it
so that APM is attached on systems which have it but on which it's broken
in some fatal way.
* add more debugging printfs in the apm control device entry points.
* return EOPNOTSUPP when trying to do a standby ioctl if standbys have
been disabled, rather than returning the less-intuitive ENOTTY.
* rename a few functions for consistency: apmprobe -> apmmatch,
apm_err_translate -> apm_strerror.
* mark a few serious or annoying bogons XXX so people might look at
them later.
* KNF (lots of changes!)
Despite this substantial amount of work, this driver still needs a _lot_ of
work. In particular, the user-land device interface needs to be gutted, and
better support for APM-aware applications and device drivers (i.e. call-backs)
needs to be added (e.g. callback interfaces somewhat like those suggested
by the APM spec).
There are still outstanding known problems with some machines. The true
source of those problems is not currently known, and could be either the APM
BIOSes of the machines in question or this APM driver. However, even if the
problems are caused by APM BIOS bugs, they could be more gracefully worked
around in this driver.
failure. The latter usually would end up being the (nonzero) opcode
placed in %ax before the call, but could conceivably be modified by the
call to be zero. In any case, 0/1 is much nicer than 0/random-nonzero,
as well as being safer.
a global variable (yech, but i'm not out to save the world) which had
the same meaning and ended up being stealthily set in pretty much
the same place.
doing 'if (tag == ...) else if (tag == ...) else panic' rather than
by doing a switch. This makes life easier for people who need
the i386 bus_space_* functions to access spaces other than the normal
memory and I/O spaces, because it allows them to define an i386
bus_space_tag_t as a pointer to a function table, rather than just
an int. (They could define it as an int and cast it to a funtion
table pointer, but I think that's bad karma, and this change doesn't
hurt.)
mark all of 0 -> IOM_BEGIN as used, even though there are some regions
which are left for use by the BIOS (namely, the first 4k page and the
area after biosbasemem*1024 but before IOM_BEGIN). Drivers wishing to
manipulate these areas should map them specially, with _i386_memio_map()
rather than bus_space_map() or i386_memio_map().
disabled even if it's attached. If disabled, ENXIO on open.
(2) in the case where the code32 segment len overflows the I/O hole,
instead of giving up truncate it. (In other words, revert
change (2) in rev 1.21 which i suggested mistakenly.)
(3) map bios data space in the 0->640k range with _i386_memio_map()
rather than with bus_space_map(), so that no accounting checks
are done. The checks which are done to make sure that allocation
in this range is safe are sufficient.
(4) check the return value from _i386_memio_map(), and if it indicates
an error disconnect from the APM BIOS, print an error message,
and return without having marked the device 'enabled'.
functions (which only work on memory and i/o space) to i386_memio_*,
and make bus_space_* in bus.h be #defines which invoke them. This makes
life easier for people who need to define the all of the bus_space functions
so that they work on spaces other than memory and I/O space. Also, add
an _i386_memio_map function which is like i386_memio_map but doesn't do
the extent map checking or allocation. _i386_memio_map and i386_memio_*
are for use only by machine-dependent code.
code for this was in my private tree at one time, and I must have
forgotten to g/c the constant from trap.h). Reported by
enami tsugutomo <enami@but-b.or.jp>, PR #3845.
("filename" must be processed by parsebootfile() first).
Being here:
- remove the special "#ifdef MATTHIAS" mainloop
- make some "booting..." output match reality
- print '\n' and '\b' more controlled
the 'a' partition. Sanity checked by thorpej.
This, incidently, may have been causing user errors in initializing
new disks, as described in (now closed) pr-2729 from Scott Reynolds,
because users typically don't try to edit their c partitions to be
"correct".
now be installed on any partition.
Allow PRIM_LOADSZ to be set in the Makefile.
This together allows to make bootable 720k floppys.
closes PR port-i386/3751
bounce buffer, which breaks installs on 4Meg machines using the new
ramdisk install system. We'll bus_dma the driver and then it should be
fine to put back in to the normal INSTALL kernel.
XMS is recognized and used as temporary buffer for the kernel image.
The processor must still be in real mode at program start, so EMM386
or QEMM are not allowed. W*95 is OK.
Written by Martin Husemann (pr port-i386/3336).
Completely separated from other bootloaders for sanity.
disconnect from the BIOS
2) when text segment as claimed by BIOS is out of sensible range, punt
completely rather than trying to shrink it to fit the ISA hole. Some
BIOSes would crash with the previous behavior. Some won't have a
working APM with the new behavior, but their BIOSes are broken.
Suggested by Chris Demetriou, with very minor tweaks by me.
for user input, or until the driver is ready to handle them itself.
Also, try to turn on power management if the BIOS says it's disabled at
connect time.
- allow whitespace before a command, and if there is only whitespace,
don't print the help message (seeing a help message after just
tapping return can be a shade annoying).
breaks zero-extension of the 16-bit memory size return from the BIOS.
on at least one system, the trash left in the upper half of %eax
causes the kernel to crash during VM system initialization when it
thinks it has on the order of 2**31 bytes of memory to play with.
We now *say* mov %eax,%ebx, but *mean* mov %ax,%bx..
Some of the stuff (e.g., rarpd, bootpd, dhcpd etc., libsa) still will
only support Ethernet. Tcpdump itself should be ok, but libpcap needs
lot of work.
For the detailed change history, look at the commit log entries for
the is-newarp branch.
little hacking by me. This isn't strictly identical to his 920312
release -- I've hacked it a bit -- but since we are taking over change
control it doesn't matter much.
little hacking by me. This isn't strictly identical to his 920312
release -- I've hacked it a bit -- but since we are taking over change
control it doesn't matter much.
* Make it a strict hierarchy. (It was close anyway).
* Add `serial' and rename `softtty' to `softserial'.
* Make soft interrupts a bit less special-case.
* Add table-driven assembly-coded microtime().
* add boot-time computation of the interpolation table,
allowing the hand-coded microtime() to work with locally-tuned
nonstandard values of HZ or TIMER_FREQ.
* delete old C version of microtime().
Eliminate obsolete global kernel variable "struct timezone tz"
Add RTC_OFFSET option
Add global kernel variable rtc_offset, which is initialized by
RTC_OFFSET at kernel compile time.
on i386, x68k, mac68k, pc532 and arm32, RTC_OFFSET indicates how many
minutes west (east) of GMT the hardware RTC runs. Defaults to 0.
Places where tz variable was used to indicate this in the past have
been replaced with rtc_offset.
Add sysctl interface to rtc_offset.
Kill obsolete DST_* macros in sys/time.h
gettimeofday now always returns zeroed timezone if zone is requested.
settimeofday now ignores and logs attempts to set non-existant kernel
timezone.
on indirect-config busses a (permanent) softc that they could share
between 'match' and 'attach' routines:
Define __BROKEN_INDIRECT_CONFIG so that old autoconfiguration
interfaces are used, until drivers are converted to use the new
interfaces (actually, converted back to use the _older_ interfaces)
which prohibit indirect configuration devices from receiving a softc
in their match routine that they can share with their attach routine.
Lets users over-ride with makeoptions COPTS="..." in kernel config files.
Leave `mandatory' flags (like -msoft-float which on m68k enforces no
FP in kernel) in CFLAGS.
primarily to nicely print version information about your PCI chipset
(try with "options PCIVERBOSE"). Eventually, it may be used to
enable/disable features/bugs of a given PCI chipset. In addition, this
driver uses the PCI-ISA bridge callback mechanism to logically attach the
ISA bus to the PCI-ISA bridge.
driver is a place-holder, which will nicely print version information
about your PCI chipset (try with "options PCIVERBOSE"). Eventually,
this can be used to enable/disable features/bugs of individual PCI
chipsets.
been attached to the system. If, by the time mainbus wants to attach
an ISA an ISA has not yet been attached to the system, attempt to attach
an ISA to mainbus.
as a "timeout", yet there's no specific delay in each iteration. Add
a small delay (10 usec... pretty arbitrary) in each iteration. This
fixes the "fdcresult: timeout" problems I've been having on my 200MHz P6.
Interrupts for irqs with handlers are counted as normal, even if none of
the handlers claim the interrupt.
Should all be redone with hierarchical event counters. that count
hardware events and invocations of each handler separately.
* Increment cnt.v_intr for normal interrupts (bugfix).
- New variables: biosextmem, biosbasemem, nkpde
- Above can be set by using the options BIOSEXTMEM, BIOSBASEMEM,
and NKPDE respectively (EXTMEM_SIZE is now called BIOSEXTMEM).
When preset this way, they won't be filled in / calculated.
- Readable by sysctl using machdep.nkpde, machdep.biosbasemem
and machdep.biosextmem.
- nkpde is calculated as:
min(NKPDE_MAX, NKPDE_BASE + (biosextmem >> 10) * NKPDE_SCALE)
Where NKPDE_MAX is 31, NKPDE_BASE is 4, NKPDE_SCALE = 1.
- The boundary argument to bus_space_alloc() should be a bus_size_t, not
a bus_addr_t.
- The buffer arguments in the "multiple write" methods should have
const qualifiers.
And one from me:
- Make bus_space_barrier() eat up the arguments passed to it so that
the compiler doesn't needlessly whine.
the wrong thing with standby mode (as some older ThinkPAD 701c BIOSes do, for
example.) Rename APM_NOIDLE to APM_NO_IDLE for consistency and "niceness,"
and error out (with a useful error message) if APM_NOIDLE is defined.
comment to note that this printf still isn't quite right (possibly
because this is now a pseudodevice), and the autoconf printout when
mounting root on a ramdisk isn't right, either. This should both be
fixed.
- No more distinction between i/o-mapped and memory-mapped
devices. It's all "bus space" now, and space tags
differentiate the space with finer grain than the
bus chipset tag.
- Add memory barrier methods.
- Implement space alloc/free methods.
- Implement region read/write methods (like memcpy to/from
bus space).
This interface provides a better abstraction for dealing with
machine-independent chipset drivers.
macros to use to remove #ifdefs from the machine ID case check.
Eventually, these headers will contain other information, e.g.
machine-dependent relocation information, etc.
/*
* void bioscall(int function, struct apmregs *regs):
* call the BIOS interrupt "function" from real mode with
* registers as specified in "regs"
* (for the flags, though, only these flags are passed to the BIOS;
* the remainder come from the flags register at the time of the call:
* (PSL_C|PSL_PF|PSL_AF|PSL_Z|PSL_N|PSL_D|PSL_V)
*
* Fills in *regs with registers as returned by BIOS.
*/
Thanks to Charles Hannum for complaining and inspiring me to hack this
together.
calling interface (via a grapple in locore.s) is:
/*
* void bioscall(int function, struct apmregs *regs):
* call the BIOS interrupt "function" from real mode with
* registers as specified in "regs"
* (for the flags, though, only these flags are passed to the BIOS;
* the remainder come from the flags register at the time of the call:
* (PSL_C|PSL_PF|PSL_AF|PSL_Z|PSL_N|PSL_D|PSL_V)
*
* Fills in *regs with registers as returned by BIOS.
*/
still some generalization to do (moving this to a better named location,
cleaning up #if tests from NAPM > 0 to something else to allow easy
sharing by other drivers)
Thanks to Charles Hannum for complaining about the previous BIOS grapple
and inspiring me to hack this one together.
a char *, because that's what was really intended, and because
if the print function modifies the string, various things could become
unhappy (so the string should _not_ be modified).
* Make S expand to an absolute path at compile time.
* Use `-S' rather than `-x' to remove debugging symbols.
* Garbage collect unused variables.
* Reverse a handful of port-specific changes that do not correspond to
the common build model and are not needed.
a boot string for firmware that can do this, such as the SPARC and
the sun3 models. It is currently silently ignored on all other
hardware now, however. The MD function "boot()" has been changed to
also take a char *.
- Use an extent map to manage the ISA memory "hole", much like
how i/o port space is manged with an extent map. Do the actual
accounting in bus_mem_{,un}map().
- When creating the ioport and iomem extent maps, pass the
EX_NOBLOB flag, which tells the extent map code to disallow
fragmenting of regions. This will make it easier to catch
simple i/o and memory mapping bugs (like the if_ed.c bug I just
fixed) in the future.
- In bus_mem_map(), a chunk of code was indented using spaces.
Make the indentation use tabs.
- In bus_io_unmap(), fix the format passed to printf().
- A fixed extent map (statically allocated descriptor storage) is
created in init386(), just before the call to consinit(). The
fixed descriptor storage has enough room for 8 region entires,
which is plenty for early initialization, but doesn't chew up
that much memory.
This extent map (ioport_ex) manages the i386 i/o port
space (0x0 - 0xffff).
- Just before the call to configure() in cpu_startup(), a
flag is set which notifies the bus_io functions that it is
safe to use malloc() to allocate descriptor storage, in the
event that more than 8 regions are needed.
- bus_io_map() attempts to allocate the specified region from
ioport_ex. If the allocation succeeds, the io handle is
filled in. If the allocation fails, it is implied that
something else is already using that io space, and an
error condition is returned.
- bus_io_unmap() frees a region previously allocated from
ioport_ex in bus_io_map(). If the free fails, a warning
is printed on the conole.
These changes implement "port accounting". This is required for
proper autoconfiguration on the i386 port, and makes dealing with,
among other things, PCMCIA io mappings _much_ easier.
kmem_map (the VA space is allocated from kernel_map).
In both bus_mem_map() and bus_mem_unmap(), adjust some arithmetic to
avoid wasting a page of VA space per call to bus_mem_map().
Changing types from unsigned {long,short} to u_int{32,16}_t causes problems
in a lot of userlevel code because those types aren't defined when machine/
endian.h is included. And IMO including sys/types.h in machine/endian.h
is clearly wrong.
XPG4.2 defines new types in_addr_t and in_port_t for the {h,n}to{n,h}{l,s}
functions. But we don't have time to figure out the implementation issues
given the current release schedule.