Commit 13c0a11e authored by Jeffrey Lee's avatar Jeffrey Lee
Browse files

Fix support for list-based channel devices

Detail:
  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.
Admin:
  Tested in BCM2835 ROM


Version 0.19. Tagged as 'DMA-0_19'
parent 2851f2e3
......@@ -11,13 +11,13 @@
GBLS Module_HelpVersion
GBLS Module_ComponentName
GBLS Module_ComponentPath
Module_MajorVersion SETS "0.18"
Module_Version SETA 18
Module_MajorVersion SETS "0.19"
Module_Version SETA 19
Module_MinorVersion SETS ""
Module_Date SETS "28 Nov 2009"
Module_ApplicationDate SETS "28-Nov-09"
Module_Date SETS "07 Jul 2012"
Module_ApplicationDate SETS "07-Jul-12"
Module_ComponentName SETS "DMA"
Module_ComponentPath SETS "castle/RiscOS/Sources/HWSupport/DMA"
Module_FullVersion SETS "0.18"
Module_HelpVersion SETS "0.18 (28 Nov 2009)"
Module_FullVersion SETS "0.19"
Module_HelpVersion SETS "0.19 (07 Jul 2012)"
END
/* (0.18)
/* (0.19)
*
* This file is automatically maintained by srccommit, do not edit manually.
* Last processed by srccommit version: 1.1.
*
*/
#define Module_MajorVersion_CMHG 0.18
#define Module_MajorVersion_CMHG 0.19
#define Module_MinorVersion_CMHG
#define Module_Date_CMHG 28 Nov 2009
#define Module_Date_CMHG 07 Jul 2012
#define Module_MajorVersion "0.18"
#define Module_Version 18
#define Module_MajorVersion "0.19"
#define Module_Version 19
#define Module_MinorVersion ""
#define Module_Date "28 Nov 2009"
#define Module_Date "07 Jul 2012"
#define Module_ApplicationDate "28-Nov-09"
#define Module_ApplicationDate "07-Jul-12"
#define Module_ComponentName "DMA"
#define Module_ComponentPath "castle/RiscOS/Sources/HWSupport/DMA"
#define Module_FullVersion "0.18"
#define Module_HelpVersion "0.18 (28 Nov 2009)"
#define Module_LibraryVersionInfo "0:18"
#define Module_FullVersion "0.19"
#define Module_HelpVersion "0.19 (07 Jul 2012)"
#define Module_LibraryVersionInfo "0:19"
......@@ -1045,7 +1045,7 @@ DMAForceActivate
LDREQ r2, [r8, #lcb_PeripheralRead]
LDRNE r2, [r8, #lcb_PeripheralWrite]
TST lr, #dmarf_Circular
ORREQ r1, r1, #DMASetOptionsFlag_Circular
ORRNE r1, r1, #DMASetOptionsFlag_Circular
ORR r1, r1, r3, LSL #1 ; note lcbf_Registered is shifted off end, and lcbf_Blocked will be clear
MOV r0, r5
CallHAL DMASetOptions
......@@ -2527,6 +2527,7 @@ DMAInterruptList
TST r8, #dmarf_Infinite ; If a finite transfer
LDREQ lr, [r10, #dmar_Length]
TEQEQ lr, #0 ; which has finished
Push "r12", EQ
BEQ finished_altentry ; then move on to next queued transfer.
Pull "r4-r11,pc"
......@@ -2538,6 +2539,7 @@ DMAInterruptList
BL MsgTrans_ErrorLookup
]
MOV r4, r0
Push "r12"
B finished_witherror
MakeErrorBlock DMA_MemoryError
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment