Commit Graph

19 Commits

Author SHA1 Message Date
fvdl
d88cf589cb A few ISA sound drivers like to share dma channels, and hence deferred
isa_dmamap_create() calls to their open/close entrypoints. This worked
with some luck, but broke on i386 when _bus_dmamap_create started
to allocate bounce buffers upfront, since memory below 16M may well
not be available when the sound devices is opened for the Nth time.

To fix this, create a new simple interface, isa_drq_alloc/isa_drq_free,
wrappers around already existing bitmask macros. These are expected
to be used before an isa_dmamap_create call, and after an
isa_dmamap_destroy call, respectively. For the sb and ad1848 drivers,
they're deferred until open/close.

All isa_dmamap_create calls can now use BUS_DMA_ALLOCNOW and be done
at attach time.
2003-05-09 23:51:25 +00:00
thorpej
b193480908 Add extensible malloc types, adapted from FreeBSD. This turns
malloc types into a structure, a pointer to which is passed around,
instead of an int constant.  Allow the limit to be adjusted when the
malloc type is defined, or with a function call, as suggested by
Jonathan Stone.
2003-02-01 06:23:35 +00:00
simonb
889c658b5b Change the kernel mmap interface so that the offset to map is an
"off_t" and the return value is a "paddr_t" to allow mappings
at offsets past 2^31 bytes.  Somewhat inspired by FreeBSD, which
only changed the offset to a "vm_offset_t".

Includes updates for the i386, pc532 and sh3 mmmmap from Jason Thorpe.
2000-06-26 04:55:19 +00:00
thorpej
52a2804a5c Add a new function call to the ISA DMA API: isa_dmamaxsize(), which returns
the maximum transfer size for the specified DMA channel.  Make all clients
of ISA DMA use this call to determine their maximum transfer size.
2000-02-07 22:07:27 +00:00
mycroft
bd575a4ff6 Add support for demand mode with auto-init. 1999-02-22 02:32:43 +00:00
thorpej
ad3073beaf Add an additional ISA DMA mode: LOOPDEMAND. This is for devices, such
as the Shark's CS8900 Ethernet, which want to use the DMA controller in
this mode (as opposed to single mode).

[Editor's note: committed from a Shark using a new bus_dma back-end
 and a CS8900 driver converted to use the MI code :-]
1998-06-28 06:59:35 +00:00
thorpej
ab5b45577b Don't panic if a DRQ is already allocated. Instead, just return EAGAIN
to indicate that the resource is unavailable.
1998-06-25 19:18:05 +00:00
thorpej
680a3d77f4 Add isa_dma{freeze,thaw}(), used to temporarily stop and then restart
all ISA DMA.  Needed by e.g. the SmartCard reader for Sharks.
1998-06-09 01:04:17 +00:00
thorpej
ff76b8e96b Change the ISA DMA API to take an isa_chipset_tag_t rather than
a struct device * corresponding to the ISA bus device.  The ISA DMA
controller driver functions have been renamed and now take a struct
isa_dma_state *, and are called indirectly by machine-dependent code
which provides the DMA state.

These changes allow e.g. `ofisa' (the OpenFirmware configuration
mechanism for the ISA bus, used by e.g. Sharks) to use the MI ISA
DMA controller code.
1998-06-09 00:00:21 +00:00
augustss
3bcc377a4c Implement a function to test if a drq is taken and use it
in two drivers.  There are still many drivers left to fix...
1997-08-04 22:13:32 +00:00
augustss
a63034762b Audio: Remove the machine dependant code I put in audio.c by mistake.
This adds another method to audio_hw_if.  Also remove a field from
audio_hw_if that was not read-only.
1997-07-28 20:56:05 +00:00
augustss
9745684ebe Changes to the sudio system:
- It is now possible to handle devices that want "looping" DMA,
    e.g. the SoundBlaster correctly.  The WSS and SB drivers use this.
    To do this several new methods were introduced in audio_hw_if.
  - Different silence handling (forced by previous change).
  - The audio driver can now be mmap()-ed, but due to problems in
    the VM system only for writing for now.
  - The OSS (Linux) audio emulation takes advantage of some of the
    new features.
1997-07-27 01:16:32 +00:00
thorpej
11e78a6b0d Pull thorpej-bus-dma branch into mainline. 1997-06-06 23:43:45 +00:00
mycroft
188dec4d19 Clean up a bit, and export isa_dmamask() and isa_dmaunmask() interfaces. 1997-03-21 02:17:11 +00:00
mycroft
3523bc35d5 Add an isa_dmacount() function, to get the current residual count on a channel. 1997-03-21 00:00:21 +00:00
mycroft
546ad9e88b Add support to the ISA DMA framework for auto-initialize mode.
Add experimental SB16 code, disabled for now.
1996-03-01 04:08:13 +00:00
mycroft
4d6412e7bf Move the terminal count check into a separate function. 1996-02-20 04:17:05 +00:00
cgd
022ee8f7fe new RCS ID format. 1994-10-27 04:14:23 +00:00
mycroft
221b25fd9d Separate DMA functions. 1994-04-22 22:58:50 +00:00