@@ -746,10 +746,12 @@ static void SAGASD_IOTask(struct Library *SysBase)
746746    ULONG  sigset ;
747747    struct  Message  status ;
748748    BOOL  present ;
749-     BOOL  sdpin  =  FALSE;
750-     ULONG  detectcounter  =  0 ;
751749
752-     if  (sdu -> sdu_SDCmd .unitnumber  >  0 ) sdpin  =  TRUE;           //hardware pin enable for SD-Cards Slots #1 and higher 
750+     BOOL  sdpin  =  TRUE;
751+ 
752+     //sdpin = apolloreadbios(APOLLO_SDHWPIN); 
753+ 
754+     ULONG  detectcounter  =  0 ;
753755
754756    debug ("Starting SAGASD_IOTask" );
755757
@@ -778,24 +780,30 @@ static void SAGASD_IOTask(struct Library *SysBase)
778780    sdu -> sdu_MsgPort  =  status .mn_ReplyPort ;
779781
780782    /* Update status for the boot node */ 
781-  
782-     present  =  sdcmd_sw_detect_full (& sdu -> sdu_SDCmd );
783+     if  (sdpin )
784+     {
785+         present  =  sdcmd_hw_detect (& sdu -> sdu_SDCmd );                    
786+     } else  {
787+         Forbid ();
788+         present  =  sdcmd_sw_detect_full (& sdu -> sdu_SDCmd );        // In sdu_Present == FALSE mode we need a full software detect 
789+         Permit ();
790+     }
783791    sdu -> sdu_ChangeNum ++ ;
784792    if  (present )
785793    {
786-         //Forbid(); 
794+         if  (sdpin ) present  =  sdcmd_sw_detect_full (& sdu -> sdu_SDCmd );
795+         Forbid ();
787796        sdu -> sdu_Present  =  TRUE;
788-         
789797        sdu -> sdu_Valid  =  present ;
790-         debug ("\t sdu_Valid: %s" , sdu -> sdu_Valid  ? "TRUE"  : "FALSE" );
791-         debug ("\t Blocks: %ld" , sdu -> sdu_SDCmd .info .blocks );
792-         //Permit(); 
798+         Permit ();
793799    } else  {
794-         // Forbid();
800+         Forbid ();
795801        sdu -> sdu_Present  =  FALSE;
796802        sdu -> sdu_Valid  =  FALSE;
797-         // Permit();
803+         Permit ();
798804    }
805+     debug ("\t sdu_Valid: %s" , sdu -> sdu_Valid  ? "TRUE"  : "FALSE" );
806+     debug ("\t Blocks: %ld" , sdu -> sdu_SDCmd .info .blocks );
799807
800808    /* Send the 'I'm Ready' message */ 
801809    //debug("sdu_MsgPort=%p", sdu->sdu_MsgPort); 
@@ -807,21 +815,17 @@ static void SAGASD_IOTask(struct Library *SysBase)
807815        WaitPort (status .mn_ReplyPort );
808816        GetMsg (status .mn_ReplyPort );
809817    }
810-     //debug(""); 
811818
812819    if  (status .mn_Length )
813820    {
814-         /* There was an error... */ 
815821        DeleteMsgPort (mport );
816- 		//debug(""); 
817822        return ;
818823    }
819824
820-     //debug(""); 
821825    mport  =  sdu -> sdu_MsgPort ;
822-        
823826    sigset  =  (1  << tport -> mp_SigBit ) | (1  << mport -> mp_SigBit );
824827
828+     // SAGA-SD LOOP ============================================================================================================= 
825829    for  (;;)
826830    {
827831        struct  IORequest  * io ;
@@ -852,64 +856,60 @@ static void SAGASD_IOTask(struct Library *SysBase)
852856                io  =  NULL ;
853857
854858               if (detectcounter ++  ==  10 )
855-                 { 
859+                {     
856860                    if  (!sdu -> sdu_Present )
857861                    {
858-                         present  =  sdcmd_hw_detect (& sdu -> sdu_SDCmd );                     // First we try hw detect 
859-                         if (present )                                 
862+                         if  (sdpin )
860863                        {
861-                             sdpin  =  TRUE;                                               // If hw detect reports TRUE, so we know now that SD pin works    
862-                             debug ("SD-Card Quick HW Detection: unit = %d | sdu_Present = %s | detect = %s" ,
863-                             sdu -> sdu_SDCmd .unitnumber , sdu -> sdu_Present  ? "TRUE" :"FALSE" , present  ? "TRUE" :"FALSE" );
864-                             present  =  sdcmd_sw_detect_full (& sdu -> sdu_SDCmd );                                          
864+                             present  =  sdcmd_hw_detect (& sdu -> sdu_SDCmd );                    
865865                        } else  {
866-                             if  (!sdpin )
867-                             {
868-                                 present  =  sdcmd_sw_detect_full (& sdu -> sdu_SDCmd );            // If hw detect reports FALSE we have to do a second sw detect for V4 without SD pin 
869-                                 debug ("SD-Card Full  SW Detection: unit = %d | sdu_Present = %s | detect = %s" ,
870-                                 sdu -> sdu_SDCmd .unitnumber , sdu -> sdu_Present  ? "TRUE" :"FALSE" , present  ? "TRUE" :"FALSE" );
871-                             }
866+                             Forbid ();
867+                             present  =  sdcmd_sw_detect_full (& sdu -> sdu_SDCmd );        // In sdu_Present == FALSE mode we need a full software detect 
868+                             Permit ();
872869                        }
873870
874-                         if  (present )                                        // SD-Card is Inserted 
871+                         debug ("SD-Card Change Detection: unit = %d | Detect Mode = %s | sdu_Present = %s | detect = %s" ,
872+                         sdu -> sdu_SDCmd .unitnumber , sdpin  ? "HW" :"SW" , sdu -> sdu_Present  ? "TRUE" :"FALSE" , present  ? "TRUE" :"FALSE" );
873+ 
874+                         if  (present )                                 
875875                        {
876-                             //Forbid(); 
876+                             // SD-Card is Inserted 
877+                             present  =  sdcmd_sw_detect_full (& sdu -> sdu_SDCmd );
878+                             Forbid ();
877879                            sdu -> sdu_Present  =  TRUE;
878880                            sdu -> sdu_ChangeNum ++ ;
879881                            sdu -> sdu_Valid  =  TRUE;
880-                             // debug("\t sdu_Valid: %s", sdu->sdu_Valid ? "TRUE" : "FALSE");
881-                             // debug("\t Blocks: %ld", sdu->sdu_SDCmd.info.blocks);
882+                             debug ("\t sdu_Valid: %s" , sdu -> sdu_Valid  ? "TRUE"  : "FALSE" );
883+                             debug ("\t Blocks: %ld" , sdu -> sdu_SDCmd .info .blocks );
882884
883885                            for  (int  i = sdu -> sdu_AddChangeListItems ; i > 0 ; i -- )
884886                            {
885887                                if  (sdu -> sdu_AddChangeList [i ])
886888                                {
887889                                    io_int  =  (struct  Interrupt * )sdu -> sdu_AddChangeList [i ];
888-                                     
889-                                     debug ("SD-Card INSERT = Calling sdu->sdu_AddChangeList[%d] (%x) from %s for %s" , i ,
890-                                         sdu -> sdu_AddChangeList [i ], (char * )io_int -> is_Node .ln_Name , sdu -> sdu_Name );
891-                                     
890+                                     debug ("SD-Card INSERT = Calling sdu->sdu_AddChangeList[%d] (%x) from %s for %s" , i , sdu -> sdu_AddChangeList [i ], (char * )io_int -> is_Node .ln_Name , sdu -> sdu_Name );
892891                                    Cause ((struct  Interrupt  * )(sdu -> sdu_AddChangeList [i ]));
893- 
894892                                }
895893                            }
896-                             // Permit();
894+                             Permit ();
897895                        }
898896                    } else  {
899897                        if  (sdpin )
900898                        {
901-                             present  =  sdcmd_hw_detect (& sdu -> sdu_SDCmd );
902-                             debug ("SD-Card Quick HW Detection: unit = %d | sdu_Present = %s | detect = %s" ,
903-                             sdu -> sdu_SDCmd .unitnumber , sdu -> sdu_Present  ? "TRUE" :"FALSE" , present  ? "TRUE" :"FALSE" );
899+                             present  =  sdcmd_hw_detect (& sdu -> sdu_SDCmd );                    
904900                        } else  {
905-                             present   =   sdcmd_sw_detect_quick ( & sdu -> sdu_SDCmd );            // We can do a "light" detect when in sdu_Present mode 
906-                             debug ( "SD-Card Quick SW Detection: unit = %d |  sdu_Present = %s | detect = %s" , 
907-                             sdu -> sdu_SDCmd . unitnumber ,  sdu -> sdu_Present  ?  "TRUE" : "FALSE" ,  present  ?  "TRUE" : "FALSE" );
901+                             Forbid (); 
902+                             present   =   sdcmd_sw_detect_quick ( & sdu -> sdu_SDCmd );         // In  sdu_Present == TRUE mode we can do a quick software detect 
903+                             Permit ( );
908904                        }
909-                         
910-                         if  (!present )                                       // SD-Card is Removed 
905+ 
906+                         debug ("SD-Card Change Detection: unit = %d | Detect Mode = %s | sdu_Present = %s | detect = %s" ,
907+                         sdu -> sdu_SDCmd .unitnumber , sdpin  ? "HW" :"SW" , sdu -> sdu_Present  ? "TRUE" :"FALSE" , present  ? "TRUE" :"FALSE" );
908+ 
909+                         if  (!present )                                       
911910                        {
912-                             //Forbid(); 
911+                             // SD-Card is Removed 
912+                             Forbid ();
913913                            sdu -> sdu_Present  =  FALSE;
914914                            sdu -> sdu_Valid  =  FALSE;
915915
@@ -919,8 +919,7 @@ static void SAGASD_IOTask(struct Library *SysBase)
919919                                {
920920                                    io_int  =  (struct  Interrupt * )sdu -> sdu_AddChangeList [i ];
921921
922-                                     debug ("SD-Card EJECT = Calling sdu->sdu_AddChangeList[%d] (%x) from %s for %s" , i ,
923-                                         sdu -> sdu_AddChangeList [i ], (char * )io_int -> is_Node .ln_Name , sdu -> sdu_Name );
922+                                     debug ("SD-Card EJECT = Calling sdu->sdu_AddChangeList[%d] (%x) from %s for %s" , i , sdu -> sdu_AddChangeList [i ], (char * )io_int -> is_Node .ln_Name , sdu -> sdu_Name );
924923
925924                                    Cause ((struct  Interrupt  * )(sdu -> sdu_AddChangeList [i ]));
926925
@@ -932,10 +931,9 @@ static void SAGASD_IOTask(struct Library *SysBase)
932931                                    } 
933932                                }
934933                            }
935-                             // Permit(); 
934+                             Permit (); 
936935                        }
937936                    }
938- 
939937                    detectcounter  =  0 ;
940938                }
941939            }
0 commit comments