1. 07 Nov, 2015 1 commit
    • ROOL's avatar
      Add support for double buffered NoInitIRQ type DMA controllers · f683cb12
      ROOL authored
        Preprogram the current and next transfers before kicking off the first. Note that it is no longer possible to infer from the status call whether it's a double or single buffered controller, so a new HAL device flag is added to signal this. The new flag is only required for NoInitIRQ type DMA controllers, but other double buffered controllers may set it for information purposes.
        Submission from Elesar. Tested on Titanium HAL.
      Version 0.23. Tagged as 'DMA-0_23'
  2. 16 Aug, 2015 1 commit
    • Jeffrey Lee's avatar
      Documentation update · 4dae20b0
      Jeffrey Lee authored
        Doc/HAL_DMAAPI - Document the requirements of HAL devices and DMAManager clients with respect to memory barriers
        Documentation change, not tagged
      Version 0.22. Not tagged
  3. 02 Jun, 2015 1 commit
    • Robert Sprowson's avatar
      Fix to argument mixup · d4994499
      Robert Sprowson authored
      When reprogramming a buffer due to early overrun, R2 should be the length not the physical address.
      Version 0.22. Tagged as 'DMA-0_22'
  4. 16 Jan, 2015 1 commit
    • Jeffrey Lee's avatar
      Escape some dollars · 3e31339e
      Jeffrey Lee authored
        s/ModHead - Escape some dollars contained in strings to avoid warnings from objasm
        Resulting binary unchanged
      Version 0.21. Retagged as 'DMA-0_21'
  5. 18 Oct, 2014 1 commit
    • Jeffrey Lee's avatar
      Fix sync callbacks for list-type DMA channels. Improve handling of Service_PreReset. · 178579b8
      Jeffrey Lee authored
        s/DMA - Fixed sync callback logic of list-type channels to match that used by buffer-type channels. Old logic would result in too many sync callbacks being made at the start of a transfer, followed by dmar_Gap becoming negative and (potentially) no sync callbacks being made for the remainder of the transfer.
        s/Front, s/ModHead, s/SWI - Make SWI handler refuse to service any SWI following Service_PreReset. This helps avoid bad things happening should a client try to access DMA channels/transfers after we've reset everything during PreReset (although really it's our own fault for not telling the clients about the controller reset)
        Resources/UK/Messages, s/Errors - Define the error that we return when called following Service_PreReset.
        Tested on Raspberry Pi
      Version 0.21. Tagged as 'DMA-0_21'
  6. 27 Jan, 2013 1 commit
  7. 20 Jan, 2013 1 commit
    • Robert Sprowson's avatar
      API enhancements and fixes · 506018dd
      Robert Sprowson authored
      ModHead.s: Allow list type channels to specify NoInitIRQ. Respect the flag when deciding whether or not to unmask the IRQ at the HAL level
      DMA.s: Use the cached device flags rather than incurring a function call, refactor the call to DMASetListTransfer to use the CallHAL macro
      SWI.s: The transfer unit size check was against the wrong register
      hdr/DMADevice: Comment updated to reflect wider flag use
      Tested with IOMD HAL, no longer aborts on module init because the channel interrupt fires before any lists have been prepared (it does have an initial IRQ), with various transfer sizes.
      Version 0.20. Tagged as 'DMA-0_20'
  8. 07 Jul, 2012 1 commit
    • Jeffrey Lee's avatar
      Fix support for list-based channel devices · 13c0a11e
      Jeffrey Lee authored
        s/DMA - In DMActivate, the DMASetOptionsFlag_Circular flag was being set to the inverse of the required value.
        s/DMA - Fixed stack imbalance in DMAInterruptList; the 'finished' routines which are shared with DMAInterruptCommon expect r12 to be on the stack, but DMAInterruptList was failing to place it there.
        Tested in BCM2835 ROM
      Version 0.19. Tagged as 'DMA-0_19'
  9. 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'
  10. 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
  11. 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
  12. 04 Feb, 2003 1 commit
  13. 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'
  14. 13 Dec, 2002 1 commit
  15. 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'
  16. 16 Mar, 2001 1 commit
  17. 12 Nov, 1999 2 commits
  18. 21 Jan, 1997 1 commit
  19. 21 Nov, 1996 1 commit
  20. 06 Nov, 1996 2 commits
  21. 05 Nov, 1996 1 commit