Commit Graph

199 Commits

Author SHA1 Message Date
Poul-Henning Kamp
2447bec829 Simplify cdevsw registration.
The cdevsw_add() function now finds the major number(s) in the
struct cdevsw passed to it.  cdevsw_add_generic() is no longer
needed, cdevsw_add() does the same thing.

cdevsw_add() will print an message if the d_maj field looks bogus.

Remove nblkdev and nchrdev variables.  Most places they were used
bogusly.  Instead check a dev_t for validity by seeing if devsw()
or bdevsw() returns NULL.

Move bdevsw() and devsw() functions to kern/kern_conf.c

Bump __FreeBSD_version to 400006

This commit removes:
        72 bogus makedev() calls
        26 bogus SYSINIT functions

if_xe.c bogusly accessed cdevsw[], author/maintainer please fix.

I4b and vinum not changed.  Patches emailed to authors.  LINT
probably broken until they catch up.
1999-05-31 11:29:30 +00:00
Poul-Henning Kamp
4e2f199e0c This commit should be a extensive NO-OP:
Reformat and initialize correctly all "struct cdevsw".

        Initialize the d_maj and d_bmaj fields.

        The d_reset field was not removed, although it is never used.

I used a program to do most of this, so all the files now use the
same consistent format.  Please keep it that way.

Vinum and i4b not modified, patches emailed to respective authors.
1999-05-30 16:53:49 +00:00
Peter Wemm
4fdff1649a GC unused #define id_physid id_scsiid 1999-05-08 18:13:15 +00:00
Poul-Henning Kamp
c48d17750f Introduce two functions: physread() and physwrite() and use these directly
in *devsw[] rather than the 46 local copies of the same functions.

(grog will do the same for vinum when he has time)
1999-05-07 07:03:47 +00:00
Dmitrij Tejblum
604359cf9b s/static foo_devsw_installed = 0;/static int foo_devsw_installed;/.
(Edited automatically)
1999-04-28 10:54:24 +00:00
Peter Wemm
6182fdbda8 Bring the 'new-bus' to the i386. This extensively changes the way the
i386 platform boots, it is no longer ISA-centric, and is fully dynamic.
Most old drivers compile and run without modification via 'compatability
shims' to enable a smoother transition.  eisa, isapnp and pccard* are
not yet using the new resource manager.  Once fully converted, all drivers
will be loadable, including PCI and ISA.

(Some other changes appear to have snuck in, including a port of Soren's
 ATA driver to the Alpha.  Soren, back this out if you need to.)

This is a checkpoint of work-in-progress, but is quite functional.

The bulk of the work was done over the last few years by Doug Rabson and
Garrett Wollman.

Approved by:	core
1999-04-16 21:22:55 +00:00
Peter Wemm
b9da114482 Build the functionality of the wdc_p hack into the ide_pci.c code.
All it did was match a specific device ID and turn on a quirk for
the wdc driver.

Incidently, at line 1462 there is a return that prevents the generic
ide_pci code from trying to look at the device.  I'd be interested
to know if we can take out the return and let the generic code "see" it.
I've left the return in because that's the way it worked before.

(Be sure to rerun config after cvsup or you'll get undefined files!)
1999-04-13 20:22:34 +00:00
Peter Wemm
3e3e4375c8 Shoot the LKM support in the old wd/wdc/atapi driver set in the head and
perform a cleanup/unifdef sweep over it to tidy things up.  The atapi
code is permanently attached to the wd driver and is always probed.

I will add an extra option bit in the flags to disable an atapi probe on
either the master or slave if needed, if people want this.

Remember, this driver is destined to die some time.  It's possible that
it will loose all atapi support down the track and only be used for
dumb non-ATA disks and all ata/atapi devices will be handled by the new
ata system.

ATAPI, ATAPI_STATIC and CMD640 are no longer options, all are implicit.

Previously discussed with:  sos
1999-04-13 19:38:12 +00:00
Poul-Henning Kamp
2def3dba56 We don't need to splbio() around biodone(). 1999-04-02 13:58:24 +00:00
Bruce Evans
3aacd339f0 Fixed a couple of missing drive selects in wdreset(). This mainly
affects cases where there is a slave but no master.  These bugs
were usually recovered from provided ATAPI was configured, but only
after lengthy delays.  Configuring ATAPI still fixes some bugs for
non-atapi drives.

Don't wait for seek complete in wdreset().  If necessary for pre-ata
drives, it can be waited for later (we got it wrong by only looking
at it for drive 0 anyway).  It is set as part of a historical
signature for ata drives but doesn't say anything useful about the
reset state.  It is cleared as part of a non-historical signature
for atapi drives so that drivers which don't understand atapi drives
seem to see no drive.  Waiting for it caused lengthy delays and
broke the status returned by wdreset() in cases where the master
was not an ata drive.  Then the whole wdprobe() failed in some
cases where the recovery code didn't work.

Don't wait for drive ready in wdreset().  The considerations are
the same as for seek complete, except drive ready does say something
useful about the reset state of ata drives, and waiting for it
later is required anyway for such drives.

Lengthy delays can now be avoided by not configuring nonexistent
(ata) drives.  Unfortunately, this breaks detection of atapi drives
in some configurations.
1999-03-23 10:22:19 +00:00
Dmitrij Tejblum
965c76c471 Fix an operator precedence bug.
Found by:	-Wall
1999-02-20 22:16:13 +00:00
Kenneth D. Merry
2a888f938e Add a prioritization field to the devstat_add_entry() call so that
peripheral drivers can determine where in the devstat(9) list they are
inserted.

This requires recompilation of libdevstat, systat, vmstat, rpc.rstatd, and
any ports that depend on the devstat code, since the size of the devstat
structure has changed.  The devstat version number has been incremented as
well to reflect the change.

This sorts devices in the devstat list in "more interesting" to "less
interesting" order.  So, for instance, da devices are now more important
than floppy drives, and so will appear before floppy drives in the default
output from systat, iostat, vmstat, etc.

The order of devices is, for now, kept in a central table in devicestat.h.
If individual drivers were able to make a meaningful decision on what
priority they should be at attach time, we could consider splitting the
priority information out into the various drivers.  For now, though, they
have no way of knowing that, so it's easier to put them in an easy to find
table.

Also, move the checkversion() call in vmstat(8) to a more logical place.

Thanks to Bruce and David O'Brien for suggestions, for reviewing this, and
for putting up with the long time it has taken me to commit it.  Bruce did
object somewhat to the central priority table (he would rather the
priorities be distributed in each driver), so his objection is duly noted
here.

Reviewed by:	bde, obrien
1999-02-10 00:04:13 +00:00
Julian Elischer
0a702d0a28 Patch from Soeren to remove inapropriate interrupt messages
also a bit of a BDE patch in there I beleive. Backs out a fix I needed for Cyrix support
early on but it turns out that a later fix in the cyrix support made it un-needed.
1999-01-27 19:32:34 +00:00
Bruce Evans
555421cf40 Pass the unit number to the DMA cookie lookup routine and use it
to look up cookies properly, at least for standard controllers.
Cookies are used so that we don't have to pass around lots of args.
All of the dmainit functions use the unit number so it is essential
that we pass them a cookie with the correct unit number.

This may break working configurations if there are bugs in the
dmainit functions like the ones I just fixed for VIA chipsets.

Broken in:	rev 1.4 of ide_pci.c and rev.1.139 of wd.c.
1999-01-17 05:46:25 +00:00
Bruce Evans
86485cc940 Don't let bugs in ide_pci.c break wdprobe(), at least for standard
IDE hardare.  The attempted fix in rev.1.182 was a no-op except for
adding dozens of style bugs.  The undocumented options ALI_V and
DISABLE_PCI_IDE go away as a side effect.  ALI_V was a no-op because
rev.1.182 was a no-op.  DISABLE_PCI_IDE didn't actually disable
PCI IDE.  It disabled the buggy code in wdprobe() at a cost of
completely breaking support for Promise controllers.

Broken in:	rev.1.139
1999-01-16 01:06:23 +00:00
Eivind Eklund
a0359a7c84 Silence warnings by cleaning up xxxintr types 1999-01-12 01:04:38 +00:00
Julian Elischer
8cc777e336 Add support for the Cyrix Cx5530 PCI/ISA bridge which also includes
a PCI UDMA IDE controller.
1999-01-11 22:14:23 +00:00
Foxfair Hu
87fcd9d279 Correct the wrong PCI-IDE probing on AcerLabs Aladdin-V chipset. It won't
change the original code but add an extra option "ALI_V" to check the
precise IDE port.(especially, secondary) Use the same option "ALI_V" on
the kernel config file to prevent generic DMA check causes wrong result.
(It seems buggy even on PIIX4 chipset, and I don't know when this bug start)

Should I add the option "ALI_V" into /sys/i386/conf/LINT ?
1998-12-24 06:30:21 +00:00
Bruce Evans
c03ddf2074 Fixed misformatted error messages. wderror() was broken way back
in rev.1.30 (just before FreeBSD-1.1R) to almost match corresponding
breakage in FreeBSD-1.x's diskerr().  FreeBSD-2.x's diskerr() never
had the breakage.
1998-12-15 09:16:57 +00:00
Eivind Eklund
340fe9ae67 Make it possible to adjust the IDE probe delay from kernel config files. 1998-11-15 20:08:50 +00:00
Bruce Evans
4cfe0f4600 Fixed the bug that caused negative busycounts in devstat. The
devstart_start_transaction() call is misplaced - it is after the
wdustart() call that queues the transaction on the controller queue.
Normally this doesn't matter because we're running at splbio() so
nothing will look at the controller queue.  However, obsolescent
code for syncing labels sometimes slept after the transaction was
started, so the transaction sometimes completed before it was
[recorded as] started.  This code was misplaced even for syncing
labels.  Move it to the right place.  It should go away, but
something may depend on its side effects.
1998-11-15 13:54:31 +00:00
Bruce Evans
fe310de802 Initialize isa_devtab entries for interrupt handlers in individual
device drivers, not in ioconf.c.  Use a different hack in isa_device.h
so that a new config(8) is not required yet.

pc98 parts approved by: kato
1998-10-22 05:58:45 +00:00
David Greenman
6cde7a165f Fixed two potentially serious classes of bugs:
1) The vnode pager wasn't properly tracking the file size due to
   "size" being page rounded in some cases and not in others.
   This sometimes resulted in corrupted files. First noticed by
   Terry Lambert.
   Fixed by changing the "size" pager_alloc parameter to be a 64bit
   byte value (as opposed to a 32bit page index) and changing the
   pagers and their callers to deal with this properly.
2) Fixed a bogus type cast in round_page() and trunc_page() that
   caused some 64bit offsets and sizes to be scrambled. Removing
   the cast required adding casts at a few dozen callers.
   There may be problems with other bogus casts in close-by
   macros. A quick check seemed to indicate that those were okay,
   however.
1998-10-13 08:24:45 +00:00
Justin T. Gibbs
b2dfb1f906 Update system to new device statistics code.
Submitted by:	"Kenneth D. Merry" <ken@plutotech.com>
		mike@smith.net.au (Mike Smith)
1998-09-15 08:15:30 +00:00
Søren Schmidt
d024c95599 Remove the SLICE code.
This clearly needs alot more thought, and we dont need this to hunt
us down in 3.0-RELEASE.
1998-09-14 19:56:42 +00:00
Poul-Henning Kamp
be18fc123b remove bdevsw arg from dsopen();
Forgotten by:	julian
Reviewed by:	bde
1998-08-23 20:16:35 +00:00
Bruce Evans
34e9dea435 Added a flags arg to dsopen() and updated drivers. The DSO_ONESLICE
and DSO_NOLABELS flags prevent searching for slices and labels
respectively.  Current drivers don't set these flags.  When
DSO_NOLABELS is set, the in-core label for the whole disk is cloned
to create an in-core label for each slice.  This gives the correct
result (a good in-core label for the compatibility slice) if
DSO_ONESLICE is set or only one slice is found, but usually gives
broken labels otherwise, so DSO_ONESLICE should be set if DSO_NOLABELS
is set.
1998-07-30 15:16:06 +00:00
Julian Elischer
ad27f8d9a5 SLICE probing becomes asynchronous. It can now be triggered by
interupt level events. This needs a lot of cleanup, but has been working
here for a month or two.. originally needed for CAM integration
but that hasn't happenned yet. The probing  state machines for each
handler should be replaced by a more generic state-service. It's
still quite messy in there..
1998-07-13 08:23:05 +00:00
Bruce Evans
ac1e407b32 Fixed printf format errors. 1998-07-11 07:46:16 +00:00
Julian Elischer
f7ea2f55d1 There is no such thing any more as "struct bdevsw".
There is only cdevsw (which should be renamed in a later edit to deventry
or something). cdevsw contains the union of what were in both bdevsw an
cdevsw entries.  The bdevsw[] table stiff exists and is a second pointer
to the cdevsw entry of the device. it's major is in d_bmaj rather than
d_maj. some cleanup still to happen (e.g. dsopen now gets two pointers
to the same cdevsw struct instead of one to a bdevsw and one to a cdevsw).

rawread()/rawwrite() went away as part of this though it's not strictly
the same  patch, just that it involves all the same lines in the drivers.

cdroms no longer have write() entries (they did have rawwrite (?)).
tapes no longer have support for bdev operations.

Reviewed by: Eivind Eklund and Mike Smith
	Changes suggested by eivind.
1998-07-04 22:30:26 +00:00
Doug Rabson
498b291e26 Fix some more ioctls which I missed becausese they were hidden by options
which were not in LINT.
1998-06-07 19:40:41 +00:00
Doug Rabson
ecbb00a262 This commit fixes various 64bit portability problems required for
FreeBSD/alpha.  The most significant item is to change the command
argument to ioctl functions from int to u_long.  This change brings us
inline with various other BSD versions.  Driver writers may like to
use (__FreeBSD_version == 300003) to detect this change.

The prototype FreeBSD/alpha machdep will follow in a couple of days
time.
1998-06-07 17:13:14 +00:00
Søren Schmidt
e855c8bedc Oops, only apply the CHS size from lbasize thing when disk reports
"too big for CHS" ie 16383 cyls..
1998-05-11 15:30:43 +00:00
Julian Elischer
d210b3552c cleanup:
take out duplicated dump code
1998-05-07 01:15:23 +00:00
Julian Elischer
7f2f1b784e Add dump support to the DEVFS/slice code.
now we can actually catch our crashes :-)

Submitted by: Luoqi Chen <luoqi@chen.ml.org> (the man who's everywhere)
1998-05-06 22:14:48 +00:00
Søren Schmidt
eb011aea8d Fix the 4-8G LBA geometry it was wrong.
Support >8G drives in CHS mode. This is done by guesstimating the
cylinder count from the LBA size reported. It works on my shiny
new Maxtor 11.5G drive, YMMV.

Reports from users of other big drives (read Quantum bigfoot's)
are welcome...
1998-05-05 14:27:26 +00:00
Julian Elischer
1667f2b3e5 slice_device.c: permissions changes for SLICE devices
vn.c:		change time of SYSINIT scheduling.
wd.c		don't revert to fully closed state. ( may require more)
all in SLICE mode only.
1998-04-24 07:54:00 +00:00
Julian Elischer
1077fa97b3 When calling the open function, specify either FREAD and/or FWRITE
as leaving them both 0 has the same effect as not openning the device at all.
1998-04-23 22:09:55 +00:00
Julian Elischer
afcdc872dc Bad144 support for the slice system (!)
Submitted by: luoqi@watermarkgroup.com (Luoqi Chen)

I'm amazed by this. Slice has only been checked in for 2 days..
1998-04-22 19:27:54 +00:00
Julian Elischer
26d3bf5f1b close() is no longer a SLICE method.
Close is simply an open with no-read and no-write once internal to SLICE
(it still exports a close to the rest of the kernel)
1998-04-22 10:25:27 +00:00
Julian Elischer
3e425b968d Add changes and code to implement a functional DEVFS.
This code will be turned on with the TWO options
DEVFS and SLICE. (see LINT)
Two labels PRE_DEVFS_SLICE and POST_DEVFS_SLICE will deliniate these changes.

/dev will be automatically mounted by init (thanks phk)
on bootup. See /sys/dev/slice/slice.4 for more info.
All code should act the same without these options enabled.

Mike Smith, Poul Henning Kamp, Soeren, and a few dozen others

This code does not support the following:
bad144 handling.
Persistance. (My head is still hurting from the last time we discussed this)
ATAPI flopies are not handled by the SLICE code yet.

When this code is running, all major numbers are arbitrary and COULD
be dynamically assigned. (this is not done, for POLA only)
Minor numbers for disk slices ARE arbitray and dynamically assigned.
1998-04-19 23:32:49 +00:00
Peter Wemm
823833f19d Back out previous commit, obrien doesn't seem to be watching. The problem
is that the previous commit spammed a hacked 2.2-stable onto -current,
deleting the DMA support etc.  (I guess that's one way of minimizing diffs
between -current and -stable.. :-] )
1998-04-19 03:26:05 +00:00
David E. O'Brien
cab9e31601 MFC (reduce diff w/-CUR, with hopes of getting DMA support into -STABLE)
1.128   (FUNCTIONAL: better sleep handling)
1.131   (STYLE: labels w/o stmt)
1.132   (STYLE: remove unused #includes)
1.141   (FUNCTIONAL: devfs bug, 2nd controler not showing)
1.144   (STYLE: dont shadow other vars)
1.150   (FUNCTIONAL: fix search bug)
1998-04-18 13:25:49 +00:00
John Dyson
17d925335f Minor typo in the wd driver. The manifestation of this bug
is a tremendous perf decrease due to the disabling of advanced
features such as DMA, Ultra DMA, and 32bit mode.  This patch
might have been reported by someone else (I seem to remember
it.)
1998-04-11 20:09:39 +00:00
Søren Schmidt
eea22fdf01 Do not clobber "heads" by &= in wdcommand use only &.
Spotted by: bde
1998-04-10 08:00:24 +00:00
Søren Schmidt
44779c5a1c Try to use the "right" CHS translations of a LBA device.
Drives bigger than 8.4G is still in question until I get a drive
to test on...
1998-04-09 17:46:45 +00:00
Søren Schmidt
2a42fd0952 Add LBA mode support for large drives.
Use config flags 0x1000 to enable LBA mode. It should be enabled in
the BIOS too to avoid geometry confusion.

One catch though, I'm not sure all BIOS's uses the 64head/63secs
translation, all mine does but....
1998-04-08 20:04:39 +00:00
Eivind Eklund
512f816a5d Shut up GCC. 1998-04-02 02:10:47 +00:00
Eivind Eklund
d94f38ace2 Add HW_WDOG to LINT, and turn it into a new-style option. 1998-02-16 23:57:49 +00:00
Bruce Evans
b163ce2f65 Fixed the search for free wd drives. The search was terminated
prematurely when there was a hole (for a cdrom or an unused
interface) in the sequence of wd drives.  This caused non-free
wd units to be probed as atapi drives.  There was no problem
provided the atapi probe failed correctly.
1998-02-01 19:10:04 +00:00