1. 28 Nov, 2009 1 commit
    • Jeffrey Lee's avatar
      DMAManager fixes & improvements · 2851f2e3
      Jeffrey Lee authored
        DMA.s, in DMAForceActivate: Support for the NoInitIRQ flag for interrupt-driven buffer-type channels (API 1+)
        DMA.s, 'testloop': Fix handling of interrupt-driven buffer-type channels so DMAManager doesn't immediately crash or malfunction
        DMA.s, 'overrun', 'earlyoverrun', 'nooverrun': Fix handling of interrupt-driven buffer-type channels so IRQ state is cleared before the next stage of the transfer is programmed (to avoid missing IRQs)
        DMA.s, 'finished': Fix handling of interrupt-driven buffer-type channels so R8 is loaded with the logical channel block ptr, as expected by subsequent function calls.
        Front.s: Make dmaq_Trampoline larger to allow it to contain the HAL device ptr
        GetAll.s: Add Hdr:HALEntries to GET list, as required by 'ClaimVectors' fix in ModHead.s
        ModHead.s: Update controller handling code to cope with API versions 0.1 (TestIRQ2) & 1 ('Deallocate' passed channel device ptr)
        ModHead.s: Fix 'ClaimVectors' to call HAL_IRQEnable to enable IRQs for the detected channels/controllers.
        ModHead.s: Fix IRQ handler trampolines so that they call HALDevice_TestIRQ on the channel instead of branching to a random address in memory
        SWI.s: Support for controller API 1 (pass channel device ptr to 'Deallocate' in R2)
        hdr/DMADevice: Extra flags & entries for new DMA controller & buffer API versions
        Tested on rev C2 beagleboard with the incoming HAL DMA driver. API revisions are documented in more detail on the ROOL wiki.
      Version 0.18. Tagged as 'DMA-0_18'
  2. 11 Jun, 2009 1 commit
    • Ben Avison's avatar
      GET file pathnames changed · f5a3895b
      Ben Avison authored
        Uses suffixed file extensions for compatiblity with both objasm and asasm.
        Supplied by Peter Naulls, tested at ROOL
      Version 0.17. Not tagged
  3. 07 Feb, 2003 1 commit
    • Ben Avison's avatar
      Three bugfixes (as it happens, all were introduced with the support for multiple DMA controllers). · a5af3704
      Ben Avison authored
        * Service_PagesSafe handler would abort if the restarting transfer had
          more than one entry in its scatter list
        * Logical channels remained linked into the chain during mass
          deregistration in module finalisation, allowing new transfers to be
        * Logical channel (RMA) block wasn't freed in DMA_DeregisterChannel
        Tested on Tungsten with UDMA ADFS, pscramble and the Task Manager.
      Version 0.17. Not tagged
  4. 04 Feb, 2003 1 commit
  5. 30 Jan, 2003 1 commit
    • Ben Avison's avatar
      A few weeks' dedicated work, mainly to support UDMA hard discs. · a3581879
      Ben Avison authored
        * Supports physical channels using a new type of HAL device (&303) where
          the hardware takes a pointer to a scatter list up front to effect the
          entire transfer, and which may report hardware errors at any time.
          For full details, see Doc.HAL_DMAAPI.
        * Page tables are no longer generated when using a bounce-buffer, since
          they aren't actually any use except in determining if unsafe pages
          intersect with the transfer. Instead, bounce-buffer transfers are halted
          whenever any page becomes unsafe, and no new bounce-buffer transfers can
          be started while any pages are unsafe.
        * For both bounce-buffer and list-type devices, the Activate entry is
          now called after the transfer is programmed (with SetCurrentTransfer
          or SetListTransfer), since this is likely to be more useful for these
          types of devices. Note that for interrupt-driven buffer devices, it
          is still assumed that the default state of the device is to be in an
          underrun interrupt state, so the transfer is not programmed until the
          first time the interrupt routine is entered.
        * Now ensures that scatter list start addresses and lengths are all
          multiples of the transfer unit size (this check is done during page
          table construction, so will be returned via the Completed callback,
          rather than directly from DMA_QueueTransfer like the total length check).
        * When there is no interrupt associated with a physical channel (both for
          buffer- or list-type devices), if the polling of the hardware within SWI
          DMA_ExamineTransfer detects that the transfer has completed, then
          the transfer is shut down in the same was as though an interrupt had
          happened (ie the Completed callback is called without an error).
        * Added SWI DMA_AllocateLogicalChannels to act as a centralised allocator
          for session-unique logical DMA channels. Primarily a service to
          third-party authors of "HAL" devices.
        * Now handles Service_MessageFileClosed to allow safe MessageTrans lookups
          in the background.
        * If a controller device was removed before its constituent channel
          devices, removing the channel device would abort.
        * Interrupt trampoline construction was wrong, the address of the
          interrupt handler code wasn't relocated. Also, non-vectored interrupts
          weren't correctly handled.
        * Transfers suspended by Service_PagesUnsafe weren't blocking the logical
          channel, so you could queue another transfer on the same channel and it
          would start immediately (although transfers already queued before the
          service call wouldn't have been started).
        * Transfers which had completed within Service_PagesUnsafe handler weren't
          being delinked from the queue.
        * Service_PagesSafe wasn't handled properly, meaning that none of the
          transfers that were halted by Service_PagesUnsafe were restarted! This
          was due to the use of routines in common with DMA_SuspendTransfer and
          DMA_ResumeTransfer which started with the first HALised version - these
          suspend a logical channel, unlike the original IOMD code which
          effectively suspends a physical channel. Thus the code to search for
          transfers to restart needs to be quite different, since the physical
          channel may be idle, or occupied with another logical channel, and
          each physical channel may have multiple associated logical channels
          that were on unsafe transfers!
        * When you deregistered a logical channel (including during module death)
          the Completed callback was called for all queued transfers, incorrectly
          including those that had not yet had the matching Start callback called.
        * There was a stack imbalance in the buffer device interrupt handler
          because the retained part of the old code assumed Hdr:Proc stack
          management, which the new code doesn't use (it's entered with the return
          address on the stack).
        Tested with UDMA test harnesses on Tungsten (ADFS not yet complete).
      Version 0.17. Tagged as 'DMA-0_17'
  6. 13 Dec, 2002 1 commit
  7. 11 Apr, 2001 1 commit
    • Ben Avison's avatar
      Main change is 32-bit compatibility. · 99697a06
      Ben Avison authored
        * added Ursula service call table (not even the Phoebe version had one!)
        * fixed a bug: the Service_PagesUnsafe handler was returning with IRQs
          still disabled
        Not tested.
      Version 0.15. Tagged as 'DMA-0_15'
  8. 16 Mar, 2001 1 commit
  9. 12 Nov, 1999 2 commits
  10. 21 Jan, 1997 1 commit
  11. 21 Nov, 1996 1 commit
  12. 06 Nov, 1996 2 commits
  13. 05 Nov, 1996 1 commit