Commit a5af3704 authored by Ben Avison's avatar Ben Avison
Browse files

Three bugfixes (as it happens, all were introduced with the support for multiple DMA controllers).

Detail:
  * 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
    queued
  * Logical channel (RMA) block wasn't freed in DMA_DeregisterChannel
Admin:
  Tested on Tungsten with UDMA ADFS, pscramble and the Task Manager.

Version 0.17. Not tagged
parent 82bd522a
......@@ -14,10 +14,10 @@
Module_MajorVersion SETS "0.17"
Module_Version SETA 17
Module_MinorVersion SETS ""
Module_Date SETS "04 Feb 2003"
Module_ApplicationDate SETS "04-Feb-03"
Module_Date SETS "07 Feb 2003"
Module_ApplicationDate SETS "07-Feb-03"
Module_ComponentName SETS "DMA"
Module_ComponentPath SETS "RiscOS/Sources/HWSupport/DMA"
Module_FullVersion SETS "0.17"
Module_HelpVersion SETS "0.17 (04 Feb 2003)"
Module_HelpVersion SETS "0.17 (07 Feb 2003)"
END
......@@ -6,18 +6,18 @@
*/
#define Module_MajorVersion_CMHG 0.17
#define Module_MinorVersion_CMHG
#define Module_Date_CMHG 04 Feb 2003
#define Module_Date_CMHG 07 Feb 2003
#define Module_MajorVersion "0.17"
#define Module_Version 17
#define Module_MinorVersion ""
#define Module_Date "04 Feb 2003"
#define Module_Date "07 Feb 2003"
#define Module_ApplicationDate "04-Feb-03"
#define Module_ApplicationDate "07-Feb-03"
#define Module_ComponentName "DMA"
#define Module_ComponentPath "RiscOS/Sources/HWSupport/DMA"
#define Module_FullVersion "0.17"
#define Module_HelpVersion "0.17 (04 Feb 2003)"
#define Module_HelpVersion "0.17 (07 Feb 2003)"
#define Module_LibraryVersionInfo "0:17"
......@@ -1958,7 +1958,12 @@ DMAPagesSafe
ADDNE r4, r4, #PTABSize ; move on new table pointer
BNE %BT30 ; and try next address in callers table.
[ HAL
ASSERT Proc_RegOffset = 4
LDMIB sp, {r2-r4} ; Restore pointers to callers tables and callers page count.
|
LDMIA sp, {r2-r4} ; Restore pointers to callers tables and callers page count.
]
B %BT20 ; Try next page in our table.
;-----------------------------------------------------------------------------
......
......@@ -830,8 +830,9 @@ DeregisterChannels
MOV r7, #-1 ; On DMAPurge calls do not start new transfers.
[ HAL
LDR r8, ChannelList
MOV lr, #0
STR lr, ChannelList ; Don't allow any new transfers to be queued.
10 TEQ r8, #0
STREQ r8, ChannelList
EXIT EQ
BL DMAPurge ; Purge the queue of requests for this channel.
......
......@@ -460,6 +460,9 @@ SWIDeregisterChannel
STRNE r1, [r9, #dmaq_DescBlockPhysical]
SWINE PCI_RAMFree
80
MOV r0, #ModHandReason_Free
MOV r2, r8
SWI XOS_Module
CLRV
|
TEQ r0, #4
......
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