[comp.sys.amiga.tech] MEMF_ PUBLIC? DMA?

kodiak@amiga.UUCP (Robert R. Burns) (09/04/88)

Software developers of driver code for DMA devices (e.g. me) need a way to
differentiate between memory that is DMA-able vs. not.  Specifically, a DMA
SCSI controller can only read/write memory on the bus, but not, for example,
CSA 32-bit memory.  There are several ways I could think of to ensure the
memory is DMA-able:
1.  For each buffer handed to the driver
    a.  if a disk write, cache the value at the head of the buffer
    b.  write a known value to the buffer
    c.  read that value w/ the DMA circuitry and verify it
    d.  write another known value to the buffer
    e.  read that value w/ the DMA circuitry and verify it
    f.  if a disk write, restore the value at the head of the buffer
    You now know of the (head of) the buffer is DMA-able.  You can assume
    that DMA and non-DMA memory spaces are not coalesced so the entire
    buffer shares that attribute.
2.  Check if the address is in the range $000000-$ffffff
3.  Use a MEMF flag in the BUFMEM field of the environment vector (and thus
    the MountList) to specify DMA-able memory.  Note that this must be a
    *set* bit (only set bits restrict the allocation), and that bit must be
    set by exec/expansion for those spaces that it finds.  The only bit that
    meets this requirement is MEMF_PUBLIC.

1. is too slow and cumbersome, and of 2. and 3., I chose 3.

CSA has made their non-bus memory not public, so it works there.  (If you
know of non-DMA memory that is added to the system as MEMF_PUBLIC, please
let me know.)  I think making MEMF_PUBLIC mean exactly MEMF_DMA is both a
defensable position (it's cleaner than the address range check and provides
a better growth path) and a historical necessity (there are no other "reserved"
MEMF_ bits set to one, and MEMF_PUBLIC means all things to all people and
thus means nothing to anybody).  Note that I am not necessarily representing
Commodore policy here, just making y'all aware of an evolved usage.

- Kodiak
-- 
| / _  _|' _ |/    Bob Burns                   .  .    . . .---.  .
|/ (_)(_)|(_\|\    {pyramid|oliveb|cbmvax]!   / \ |\  /| | | __  / \
|\   Kodiak    \   amiga!kodiak       _______/ A \| \/ |_|_|___|/ A \
| \ Software                        "dedicated to the science of fun"\_________