Commit Graph

243 Commits

Author SHA1 Message Date
mjacob
a14da6673f Replicate change that Matt Thomas made in isp_pci- if we get ENOMEM/EAGAIN
in bus_dmamap_load, return CMD_EAGAIN rather than just make the command dead.
2002-05-17 19:06:24 +00:00
pk
082991d03a cs4231_sbus_regdump(): add missing ')' 2002-03-27 16:03:52 +00:00
darrenr
9074b14439 Merge in the patch (PR kern/15963) to provide unaccelerated 24bit support
for the S24.
2002-03-27 10:14:17 +00:00
martin
642b1a7163 Remove dummy_splraise() - it is not needed according to Paul Kranenburg.
We may revisit this once a general interrupt queuing mechanism is
available and we can avoid calling the pcmcia cards interrupt handler at
an exsessive IPL.
2002-03-25 09:02:54 +00:00
eeh
85c03d9775 Properly bus_space_*=ify this so it uses accessors. 2002-03-21 00:25:41 +00:00
eeh
943373dde4 Use bus_space_vaddr(). 2002-03-21 00:18:36 +00:00
eeh
86ff330657 Fixup attachment code to use sbus_promaddr_to_handle() and not specify
BUS_SPACE_MAP_LINEAR.
2002-03-21 00:16:15 +00:00
eeh
87eac0acc3 Use bus_space_vaddr(). 2002-03-20 20:41:35 +00:00
eeh
686c857e16 Get rid of unnecessary BUS_SPACE_MAP_LINEAR. 2002-03-20 20:39:15 +00:00
eeh
fbce8217dd Oops. Missing semicolon. 2002-03-20 19:32:42 +00:00
eeh
8ccad96d54 Add sbus_promaddr_to_handle() to convert a prom address to a bus_space_handle_t. 2002-03-20 18:39:44 +00:00
eeh
8ea2c88ec2 Clean up bus space a bit. XXX is sc_buffer ever actually used after it's
mapped in?
2002-03-20 17:59:16 +00:00
eeh
ddbdd7fa41 Don't use BUS_SPACE_MAP_LINEAR if you don't need to. 2002-03-20 17:57:33 +00:00
eeh
ef4ff79f61 Use bus_space_vaddr() correctly. (XXX do we really need this?) 2002-03-20 17:52:41 +00:00
eeh
e0866470d8 Use bus_space_vaddr() correctly. Ugh. 2002-03-20 17:34:23 +00:00
atatat
31144d9976 Convert ioctl code to use EPASSTHROUGH instead of -1 or ENOTTY for
indicating an unhandled "command".  ERESTART is -1, which can lead to
confusion.  ERESTART has been moved to -3 and EPASSTHROUGH has been
placed at -4.  No ioctl code should now return -1 anywhere.  The
ioctl() system call is now properly restartable.
2002-03-17 19:40:26 +00:00
eeh
5f84db4b34 Get rid of bus_type_t. 2002-03-15 07:00:34 +00:00
uwe
a05702eaac Rework the driver to add EBus DMA support and improve APC DMA support.
Audio-related stuff is left almost intact.

* support audiocs at ebus playback and capture
    tested on krups and u5 (thanks, martin)
* make first attempt at supporting audiocs at sbus capture
* nb: full-duplex is not tested
* while here, fix CSAUDIO_MONITOR_MUTE to be of CSAUDIO_MONITOR_CLASS
    i.e. outputs.monitor.mute -> monitor.monitor.mute

Ok by pk, eeh.
2002-03-12 04:48:28 +00:00
pk
f61bdee8e7 Get rid of `bus_type_t' and use BUS_ADDR() (in sbus_bus_map()) to construct
a `bus_addr_t' to pass on to bus_space_map().

Drop `va' argument from sbus_bus_map(); it should not be used by MI Sbus
drivers.
2002-03-11 16:00:55 +00:00
martin
e41836739f Remove another old debug message.
Return the real mapping size in *_mem_map and *_io_map.
Minor cleanup.
2002-03-10 16:18:44 +00:00
martin
dfbd0bc7b8 Shuffle around some initialization code a bit.
Configure power supply on VPP1 at 5V when powering up a socket.
Get rid of stray interrupts.
Make the driver quiet for normal operation when not in debugging mode.

This makes ray0 at nell0 actually work when compiled with RAY_USE_AMEM=1.
2002-03-08 21:33:43 +00:00
frueauf
089f361f5b Make this work after it got broken a year ago in r1.15 (pasto?):
In qeattach() sc->sc_rb.rb_dmabase needs to be set after the buffer got
loaded via bus_dmamem_map(), not before.

Fixes my own pr kern/15817.
2002-03-06 19:10:58 +00:00
simonb
64c7743a05 Don't "extern int cold;" - this is in <sys/kernel.h>. 2002-03-04 02:19:07 +00:00
martin
42172d9f1c Try to configure timing correctly.
Get rid of some ad hoc debuging printfs.
2002-03-03 22:47:28 +00:00
martin
ba6fe47ae9 Simplify the way the hardware windows are mapped and adapt the pcmcia
chipset functions acordingly. Initialize timing registers (for now to
the slowest possible setting).

Add some debug output. XXX - clean this up.

This is not ready for prime time, but I can attach ray0 and wi0 now in my
LX.
2002-03-01 10:02:38 +00:00
mjacob
91f80cf3fc Implement F/W crashdumps for 2200 && 2300 cards (kernel compile option).
Distinguish between 2312 and 2300 cards (they *are* different). Enable
RIO (Reduced Interrupt Operation) for the LVD cards (hey- I've seen
batched completions of the 30 commands at a time with this,....)...

If we get a Port Logout on local loop topologies, we have to force the
f/w to log back in. The easiest way (for us) to do this is to force
a LIP. This also will wake up the disk that probably just had a f/w crash.

Implement mailbox 'continuations'- this allows interrupts to re-drive
a mailbox command if it's one that just essentially repeats the previous
mailbox command (e.g., f/w download). This saves a boatload of sleep/wakeup
twitches.

If we're not a 2300 and we're about to return with a 'bogus interrupt'- check
the semaphore register to be non-zero at all and outgoing mailbox 0- this
seems to be where some of the lost ISP1080 commands came from.
2002-02-21 22:32:40 +00:00
darrenr
1ff5e232ba add missing #include for SUN4 options 2002-02-03 05:53:28 +00:00
pk
6c51c2d3f4 Support for the ` Magma 2+1HS Sp' (from mouse on port-sparc):
- add sbus node name field to board info structure
2002-01-22 17:00:47 +00:00
pk
d29b3f6d0c Support for the ` Magma 2+1HS Sp' (from mouse on port-sparc):
- allow for sbus node name matching
	- get clock frequency from prom property.
2002-01-22 16:59:30 +00:00
tsutsui
bcba62925f Call malloc(9) with M_ZERO flag instead of bzero() after malloc(). 2002-01-14 13:32:44 +00:00
soren
875bff0962 To make dev/pcmcia work on platforms with 64-bit bus_addr_t and
32-bit bus_size_t (sparc), change the pcmcia_mem_map(9) offsetp
argument to bus_size_t as it is used as a bus_space offset.
2001-12-15 13:23:20 +00:00
mjacob
219d22404b Major restructuring for swizzling to the request queue and unswizzling from
the response queue. Instead of the ad hoc ISP_SWIZZLE_REQUEST, we now have
a complete set of inline functions in isp_inline.h. Each platform is
responsible for providing just one of a set of ISP_IOX_{GET,PUT}{8,16,32}
macros.

The reason this needs to be done is that we need to have a single set of
functions that will work correctly on multiple architectures for both little
and big endian machines. It also needs to work correctly in the case that
we have the request or response queues in memory that has to be treated
specially (e.g., have ddi_dma_sync called on it for Solaris after we update
it or before we read from it).

One thing that falls out of this is that we no longer build requests in the
request queue itself. Instead, we build the request locally (e.g., on the
stack) and then as part of the swizzling operation, copy it to the request
queue entry we've allocated. I thought long and hard about whether this was
too expensive a change to make as it in a lot of cases requires an extra
copy. On balance, the flexbility is worth it. With any luck, the entry that
we build locally stays in a processor writeback cache (after all, it's only
64 bytes) so that the cost of actually flushing it to the memory area that is
the shared queue with the PCI device is not all that expensive. We may examine
this again and try to get clever in the future to try and avoid copies.

Another change that falls out of this is that MEMORYBARRIER should be taken
a lot more seriously. The macro ISP_ADD_REQUEST does a MEMORYBARRIER on the
entry being added. But there had been many other places this had been missing.
It's now very important that it be done.

For NetBSD, it does a ddi_dmamap_sync as appropriate. This gets us out of
the explicit ddi_dmamap_sync on the whole response queue that we did for SBus
cards at each interrupt.

Set things up so that platforms that cannot have an SBus don't get a lot of
the SBus code checks (dead coded out).

Additional changes:

Fix a longstanding buglet of sorts. When we get an entry via isp_getrqentry,
the iptr value that gets returned is the value we intend to eventually plug
into the ISP registers as the entry *one past* the last one we've written-
*not* the current entry we're updating. All along we've been calling sync
functions on the wrong index value. Argh. The 'fix' here is to rename all
'iptr' variables as 'nxti' to remember that this is the 'next' pointer-
not the current pointer.

Devote a single bit to mboxbsy- and set aside bits for output mbox registers
that we need to pick up- we can have at least one command which does not
have any defined output registers (MBOX_EXECUTE_FIRMWARE).

Explicitly decode GetAllNext SNS Response back *as* a GetAllNext response.
Otherwise, we won't unswizzle it correctly.

Nuke some additional __P macros.
2001-12-14 00:13:44 +00:00
cyber
d6671330e0 The prom doesn't setup the fb if its not set to console.
We shouldn't try to configure it in that case.
This will make serial console work.  completes fix to PR#14213
(Private email determined PR author was using serial console.)
2001-12-08 19:42:45 +00:00
soren
a5812755ac Pass sbus addresses to sbus_bus_map(), not sbus_bus_addr()'d ones. 2001-12-08 05:36:31 +00:00
wiz
b4371d47f5 Replace some misuses of "then" with "than". 2001-12-04 17:56:30 +00:00
lukem
2565646230 don't need <sys/types.h> when including <sys/param.h> 2001-11-15 09:47:59 +00:00
lukem
7ba10b3532 add RCSIDs 2001-11-13 06:54:32 +00:00
thorpej
0d4d2293bb Minor tidying up of the HME driver attach:
- Print nicer-looking message.
- Use bus_space_subregion() when appropriate, rather than arithmetic
  on a bus_space_handle_t.
2001-10-05 17:49:43 +00:00
pooka
8d2fa0f7b6 add cast to u_long before cast to caddr_t make these compile on sparc64 2001-10-05 14:25:15 +00:00
mrg
0cfedcb2eb frontend driver for the 16 port serial card by aurora technologies. this
doesn't quite work yet -- interrupt acknowledgement is hosed (and thus the
device keeps interrupting).  uses the newly commited cd18xx backend.
2001-10-03 04:28:41 +00:00
eeh
98ecb5b215 getprop* -> PROM_getprop* 2001-09-26 20:53:05 +00:00
eeh
766a9b8c9c Change bus_space_mmap() signature to the official one. 2001-09-24 23:49:31 +00:00
eeh
0d30ddb30a Properly initialize sc->sc_bustag and sc->sc_dmatag; 2001-09-12 20:09:53 +00:00
eeh
317da99cfe Properly initialize sc->sc_bustag. 2001-09-12 19:35:35 +00:00
pk
88dc67b3e1 The `ESC' DMA chip must be reset before we can access the esp registers. 2001-09-11 10:50:52 +00:00
mjacob
6bb9f4a949 Add support for 2 Gigabit cards (2300/2312). This necessitated a change
in how interrupts are down- the 23XX has not only a different place to check
for an interrupt, but unlike all other QLogic cards, you have to read the
status as a 32 bit word- not 16 bit words. Rather than have device specific
functions as called from the core module (in isp_intr), it makes more sense
to have the platform/bus modules do the gruntwork of splitting out the
isr, semaphore register and the first outgoing mailbox register (if needed)
*prior* to calling isp_intr (if calling isp_intr is necessary at all).
2001-09-01 07:12:23 +00:00
mjacob
48e09f672e twiddle isp_xflist calculation to match more closes isp_pci.c 2001-07-06 16:09:38 +00:00
mrg
c13e3a6693 use _KERNEL_OPT 2001-05-30 11:40:35 +00:00
scw
2963ff5c58 Add l_poll' to struct linesw' and provide an xxxpoll() entry point
in each tty driver to indirect through it.

This allows tty line-disciplines to handle poll(2) system calls.
2001-05-02 10:32:08 +00:00
bouyer
937a7a3ed9 Pull up the thorpej_scsipi branch to main branch.
This is a completely rewritten scsipi_xfer execution engine, and the
associated changes to HBA drivers. Overview of changes & features:
- All xfers are queued in the mid-layer, rather than doing so in an
  ad-hoc fashion in individual adapter drivers.
- Adapter/channel resource management in the mid-layer, avoids even trying
  to start running an xfer if the adapter/channel doesn't have the resources.
- Better communication between the mid-layer and the adapters.
- Asynchronous event notification mechanism from adapter to mid-layer and
  peripherals.
- Better peripheral queue management: freeze/thaw, sorted requeueing during
  recovery, etc.
- Clean separation of peripherals, adapters, and adapter channels (no more
  scsipi_link).
- Kernel thread for each scsipi_channel makes error recovery much easier
  (no more dealing with interrupt context when recovering from an error).
- Mid-layer support for tagged queueing: commands can have the tag type
  set explicitly, tag IDs are allocated in the mid-layer (thus eliminating
  the need to use buggy tag ID allocation schemes in many adapter drivers).
- support for QUEUE FULL and CHECK CONDITION status in mid-layer; the command
  will be requeued, or a REQUEST SENSE will be sent as appropriate.

Just before the merge syssrc has been tagged with thorpej_scsipi_beforemerge
2001-04-25 17:53:04 +00:00