| 
					
				 | 
			
			
				@@ -58,9 +58,9 @@ bool scsiHostPhySelect(int target_id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     SCSI_OUT(BSY, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // Wait for target to respond 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (int wait = 0; wait < 250; wait++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (int wait = 0; wait < 2500; wait++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        delayMicroseconds(1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        delayMicroseconds(100); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (SCSI_IN(BSY)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             break; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -75,6 +75,7 @@ bool scsiHostPhySelect(int target_id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // We need to assert OUT_BSY to enable IO buffer U105 to read status signals. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SCSI_RELEASE_DATA_REQ(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     SCSI_OUT(BSY, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     SCSI_OUT(SEL, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return true; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -85,7 +86,15 @@ int scsiHostPhyGetPhase() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     static absolute_time_t last_online_time; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (g_scsiHostPhyReset) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Reset request from watchdog timer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        scsiHostPhyRelease(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return BUS_FREE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     int phase = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    bool req_in = SCSI_IN(REQ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (SCSI_IN(CD)) phase |= __scsiphase_cd; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (SCSI_IN(IO)) phase |= __scsiphase_io; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (SCSI_IN(MSG)) phase |= __scsiphase_msg; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -102,13 +111,23 @@ int scsiHostPhyGetPhase() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return BUS_FREE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // Still online, re-enable OUT_BSY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Still online, re-enable OUT_BSY to enable IO buffers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         SCSI_OUT(BSY, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     last_online_time = get_absolute_time(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    scsiLogInitiatorPhaseChange(phase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return phase; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!req_in) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Don't act on phase changes until target asserts request signal. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // This filters out any spurious changes on control signals. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return BUS_BUSY; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        scsiLogInitiatorPhaseChange(phase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return phase; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 bool scsiHostRequestWaiting() 
			 |