History log of /freebsd-9.3-release/sys/dev/mlx/mlx_disk.c
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
# 267654 19-Jun-2014 gjb

Copy stable/9 to releng/9.3 as part of the 9.3-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation

# 225736 22-Sep-2011 kensmith

Copy head to stable/9 as part of 9.0-RELEASE release cycle.

Approved by: re (implicit)


# 138090 25-Nov-2004 scottl

Don't use PAGE_SIZE to calculate controller-specific attributes.

PR: kern/21220
Submitted by: Dennis Lindroos
MFC After: 1 week


# 129879 30-May-2004 phk

Add missing <sys/module.h> includes


# 125975 18-Feb-2004 phk

Change the disk(9) API in order to make device removal more robust.

Previously the "struct disk" were owned by the device driver and this
gave us problems when the device disappared and the users of that device
were not immediately disappearing.

Now the struct disk is allocate with a new call, disk_alloc() and owned
by geom_disk and just abandonned by the device driver when disk_create()
is called.

Unfortunately, this results in a ton of "s/\./->/" changes to device
drivers.

Since I'm doing the sweep anyway, a couple of other API improvements
have been carried out at the same time:

The Giant awareness flag has been flipped from DISKFLAG_NOGIANT to
DISKFLAG_NEEDSGIANT

A version number have been added to disk_create() so that we can detect,
report and ignore binary drivers with old ABI in the future.

Manual page update to follow shortly.


# 119418 24-Aug-2003 obrien

Use __FBSDID().
Also some minor style cleanups.


# 112946 01-Apr-2003 phk

Use bioq_flush() to drain a bio queue with a specific error code.
Retain the mistake of not updating the devstat API for now.

Spell bioq_disksort() consistently with the remaining bioq_*().

#include <geom/geom_disk.h> where this is more appropriate.


# 111979 08-Mar-2003 phk

Centralize the devstat handling for all GEOM disk device drivers
in geom_disk.c.

As a side effect this makes a lot of #include <sys/devicestat.h>
lines not needed and some biofinish() calls can be reduced to
biodone() again.


# 111509 25-Feb-2003 jhb

Chase the musical variable names.

Pointy hat to: jhb
Reported by: des


# 111499 25-Feb-2003 jhb

Limit the maximum I/O size to 8 pages for version 2 controllers. This
fixes problems with some mlx(4) cards in Alpha machines.

Reviewed by: msmith (ages ago)


# 111497 25-Feb-2003 jhb

Fix a small fat-finger: s/mlxd/mxld/.

Reported by: Bob Willcox <bob@immure.com>


# 111469 25-Feb-2003 phk

NO_GEOM cleanup:

Move to "struct disk*" centric API.
Retire major #131 (mlxd)


# 111216 21-Feb-2003 phk

NO_GEOM cleanup:

Change the argument to disk_destroy() to be the same struct disk * as
disk_create() takes.

This enables drivers to ignore the (now) bogus dev_t which disk_create()
returns.


# 103714 20-Sep-2002 phk

(This commit touches about 15 disk device drivers in a very consistent
and predictable way, and I apologize if I have gotten it wrong anywhere,
getting prior review on a patch like this is not feasible, considering
the number of people involved and hardware availability etc.)

If struct disklabel is the messenger: kill the messenger.

Inside struct disk we had a struct disklabel which disk drivers used to
communicate certain metrics to the disklayer above (GEOM or the disk
mini-layer). This commit changes this communication to use four
explicit fields instead.

Amongst the benefits is that the fields do not get overwritten by
wrong or bogus on-disk disklabels.

Once that is clear, <sys/disk.h> which is included in the drivers
no longer need to pull <sys/disklabel.h> and <sys/diskslice.h> in,
the few places that needs them, have gotten explicit #includes for
them.

The disklabel inside struct disk is now only for internal use in
the disk mini-layer, so instead of embedding it, we malloc it as
we need it.

This concludes (modulus any mistakes) the series of disklabel related
commits.

I belive it all amounts to a NOP for all the rest of you :-)

Sponsored by: DARPA & NAI Labs.


# 83366 12-Sep-2001 julian

KSE Milestone 2
Note ALL MODULES MUST BE RECOMPILED
make the kernel aware that there are smaller units of scheduling than the
process. (but only allow one thread per process at this time).
This is functionally equivalent to teh previousl -current except
that there is a thread associated with each process.

Sorry john! (your next MFC will be a doosie!)

Reviewed by: peter@freebsd.org, dillon@freebsd.org

X-MFC after: ha ha ha ha


# 78752 25-Jun-2001 msmith

Driver modifications consistent with my other drivers to facilitate
the use of a single set of sources across 4.x and 5.x branches.

No significant code changes.


# 78234 14-Jun-2001 peter

Fix warning: 193: warning: label `done' defined but not used


# 76324 06-May-2001 phk

Make the disk mini-layer check for and handle zero-length transfers
instead of the underlying drivers.


# 76322 06-May-2001 phk

Actually biofinish(struct bio *, struct devstat *, int error) is more general
than the bioerror().

Most of this patch is generated by scripts.


# 74810 26-Mar-2001 phk

Send the remains (such as I have located) of "block major numbers" to
the bit-bucket.


# 67164 15-Oct-2000 phk

Remove unneeded #include <machine/clock.h>


# 60074 06-May-2000 msmith

Change the way that scatter/gather list tables are allocated so that we
can use all of the s/g entries available on smaller cards. This is
necessary if we want to be able to handle a non-page-aligned 64k transfer
on 2.x and 3.x firmware.

Fix a missing splx() that may have left us at splbio() for longer than
desired.

Reduce shadowing of controller-supplied parameters a little.


# 60041 05-May-2000 phk

Separate the struct bio related stuff out of <sys/buf.h> into
<sys/bio.h>.

<sys/bio.h> is now a prerequisite for <sys/buf.h> but it shall
not be made a nested include according to bdes teachings on the
subject of nested includes.

Diskdrivers and similar stuff below specfs::strategy() should no
longer need to include <sys/buf.> unless they need caching of data.

Still a few bogus uses of struct buf to track down.

Repocopy by: peter


# 59391 19-Apr-2000 phk

Remove ~25 unneeded #include <sys/conf.h>
Remove ~60 unneeded #include <sys/malloc.h>


# 59249 15-Apr-2000 phk

Complete the bio/buf divorce for all code below devfs::strategy

Exceptions:
Vinum untouched. This means that it cannot be compiled.
Greg Lehey is on the case.

CCD not converted yet, casts to struct buf (still safe)

atapi-cd casts to struct buf to examine B_PHYS


# 59136 11-Apr-2000 msmith

Add features required for basic userland management utility:

- implement user-initiated background drive rebuild
- implement user-initiated background consistency check
- log controller-initiated background rebuild/check operations

Try to fix the elusive "invalid log operation" bug, and panic if we do
hit this one in the hopes of getting better information.

Tidy up diagnostic messages.

Try to use disk_create/disk_destroy correctly. This isn't working
properly yet, but it's not clear whose fault that is.


# 58934 02-Apr-2000 phk

Move B_ERROR flag to b_ioflags and call it BIO_ERROR.

(Much of this done by script)

Move B_ORDERED flag to b_ioflags and call it BIO_ORDERED.

Move b_pblkno and b_iodone_chain to struct bio while we transition, they
will be obsoleted once bio structs chain/stack.

Add bio_queue field for struct bio aware disksort.

Address a lot of stylistic issues brought up by bde.


# 58188 18-Mar-2000 msmith

Update to the latest development version of the Mylex driver. Changes in
this version include:

- Support for version 2.x firmware (2.42 or later recommended). This
means we are the only open-source driver supporting these adapters.
This code has only been tested on a Digital KZPCA adapter in an Alpha
system, but is believed to be correct. NOTE: EISA adapters are not
yet supported.

- Support the BIOS/Firmware initialisation handshake protocol. This
allows the driver to bring the card up to operational state even if
the BIOS can't be run (eg. if it's an x86 BIOS in an Alpha system).

- A working command pasthrough interface. This allows a user-space
configuration tool (under development) to issue arbitrary commands
to the controller or to devices in the system.


# 54979 21-Dec-1999 msmith

Updates resulting from new documentation from Mylex and some cleaning:

- Don't keep private copies of some of the data fields from the
ENQUIRY and ENQUIRY2 commands. Instead, standardise on the ENQUIRY2
command for initial adapter information, and keep a copy of the entire
structure. Refer to it where appropriate.

- Move all of the controller description functionality into a new
function. Print lots more controller data if bootverbose is set.
Add knowledge of the DAC960 PR, PT, PTL0 and PRL controllers, rename
the 960PTL -> PTL0 and 1100P -> 1100PVX.

- Correctly terminate an error message.

The controller interface procedures have been reviewed against the
Mylex-supplied documentation; no changes appear necessary at this
time.


# 54419 10-Dec-1999 msmith

Major update to the Mylex DAC960 driver adding new hardware support
and fixing some major bugs.

- Add support for the v5 firmware interface, used by the DAC1164P
(tested) and AcceleRAID 352 (untested but should work). We now cover
all of the Mylex family's protocols except for v2 (used by EISA and
Alpha-compatible cards).

- Fix an accounting bug which resulted in endless 'poll still busy'
messages. In situations of high controller load the count of poll
commands could be incremented without actually successfully launching
a command. This totally removes the accounting for status poll
commnads; it was its own worst enemy.

- Add some simple reentry prevention locks to processing of the waiting
and completed command queues to prevent races which could result in
I/O being done or completed twice (both are fatal). This highlights
a need for simple locking primitives in both the UP and SMP kernels.

- Streamline the handling of command completion to reduce the amount of
redundant work being done. Remove the code which tests for commands
that have gone missing in action; nobody has ever seen one of these
and it wouldn't have worked properly anyhow.

- Handle disconnection of drives from the controller in the detach,
not shutdown method. This avoids problems flushing the cache in
a panic when a drive is mounted.

- Don't call bus_generic_detach when disconnecting drives; it doesn't
actually do anything useful.

- Increment the log message index regardless of whether we actually
retrieved one or not. If we run into a message that we can't fetch,
we don't want to spin endlessly complaining about the fact.

- Don't assume that interrupts will work when we're flushing the
controller. We may think they are enabled, but in eg. a panic
situation the controller may not be able to deliver an interrupt.


# 54279 08-Dec-1999 ken

Revamp the devstat priority system. All disks now have the same priority.
The same goes for CD drivers and tape drivers. In systems with mixed IDE
and SCSI, devices in the same priority class will be sorted in attach
order.

Also, the 'CCD' priority is now the 'ARRAY' priority, and a number of
drivers have been modified to use that priority.

This includes the necessary changes to all drivers, except the ATA drivers.
Soren will modify those separately.

This does not include and does not require any change in the devstat
version number, since no known userland applications use the priority
enumerations.

Reviewed by: msmith, sos, phk, jlemon, mjacob, bde


# 52785 02-Nov-1999 msmith

Correctly compute the block count. In reality, it seems that the
controller will never return the command if it's not exactly a multiple
of a block in size.

Cosmetic formatting for RAID level output.


# 52544 26-Oct-1999 msmith

Move some hardware-related items to the hardware-related header.

Shift to using the same queueing strategy that the amr driver uses.
Some simple tests indicate that we use about 2% of the CPU at around
500tps with the controller completely saturated with I/O.


# 52273 15-Oct-1999 msmith

Save the drive device_t correctly so we can print it later.

The drive number is 5 bits, not 4, in the read/write command.


# 52225 14-Oct-1999 msmith

Add support for the version 4 firmware interface and the DAC960 PG and
PJ cards. This will probably also support the AcceleRAID and
eXtremeRAID cards, but nobody has volunteered one for testing, so I
haven't enabled their PCI device IDs.

Slightly clean up communication between the disk devices and the
controller device as per new practice, and move some more register-
related items int mlxreg.h from mlxvar.h.

Remove some unnecessary read-modify-write operations to the card
control registers; they don't behave like that.

Increase the status polling interval to 10 seconds. It's still possible
to load the card up to the point where a status poll will find the
previous poll still running, but this will reduce the incidence of
complaints.


# 51973 07-Oct-1999 msmith

This is a driver for the Mylex DAC960 family of integrated RAID
controllers. It currently supports the P, PL, PD and PU variants,
with more to be supported shortly.