From: Drew Eckhardt (drew@hamlet.cs.colorado.edu)
Date: 06/19/92


From: drew@hamlet.cs.colorado.edu (Drew Eckhardt)
Subject: Re: anyone using 20 MB RAM?
Date: 19 Jun 1992 23:43:37 GMT

In article <1992Jun19.202056.14687@nic.umass.edu> S3679988@deimos.ucc.umass.edu (S3679988) writes:
>> >The 16MB DMA-limit is imposed by the AT-Bus. It has only 24 address lines,
>> >as a 286 has. 16MB is what you can do with these. So what we'll need in
>> >the long run is a way to do swapping into the lower 16MB and do a memory to
>> >memory copy then. It'll still be faster than programmed IO on a 16-bit bus.
>> >I think this might be a service of the higher level SCSI driver.
>> >(Drew, do you hear me knocking? :-))
>>
>
>One observation: my system is an AT bus machine, however, like most modern
>(?!) AT bus machines, the memory isn't located on the AT but. My memory
>limitation is 64MB, not the 16MB imposed by the AT but, but by
>my chiipset not being able to deal with more than 4MB simms, and only
>haveing 16simm sockets.
>

That doesn't matter. It's a bus or DMA problem, which affects perhipherials
on the ISA bus (ie, a disk controller) that transfer data via DMA.

Basically, there are two types of DMA :

1. Where the motherboard DMA chip acts as a "slave" to a perhipherial
        board, and it handles the actual transfer. In this
        case, you are restricted by the functionality of the
        "standard" AT DMA controllers - ie, transfers are restricted
        to a 24 bit address space, and you can't cross a 64 (byte
        wide) or 128 (16 bit wide DMA)K boundary in a singe transfer.

        Does anyone know if EISA machines have a 32 bit DMA controller,
        and how to program it?

                
        Anyways, in this case, you can *probably* get around the limit
        by making the device driver aware of the limit, and having
        it use the CPU to transfer > 16M.

2. Bussmastering, where the perhiperial steals bus cycles, and writes
        directly to memory. In this case, all it sees is the 24 address lines
        on the ISA bus. This is the case with things like the Adaptec 154x
        series.

        You can get around this by double buffering, ie using DMA to
        an area in low memory, and then copying that to high
        memory.
        

2.