|  | @@ -225,7 +225,6 @@ static void process_Command()
 | 
											
												
													
														|  |  {
 |  |  {
 | 
											
												
													
														|  |  	int group;
 |  |  	int group;
 | 
											
												
													
														|  |  	uint8 command;
 |  |  	uint8 command;
 | 
											
												
													
														|  | -	uint8 lun;
 |  | 
 | 
											
												
													
														|  |  	uint8 control;
 |  |  	uint8 control;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	scsiEnterPhase(COMMAND);
 |  |  	scsiEnterPhase(COMMAND);
 | 
											
										
											
												
													
														|  | @@ -239,7 +238,13 @@ static void process_Command()
 | 
											
												
													
														|  |  	scsiRead(scsiDev.cdb + 1, scsiDev.cdbLen - 1);
 |  |  	scsiRead(scsiDev.cdb + 1, scsiDev.cdbLen - 1);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	command = scsiDev.cdb[0];
 |  |  	command = scsiDev.cdb[0];
 | 
											
												
													
														|  | -	lun = scsiDev.cdb[1] >> 5;
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	// Prefer LUN's set by IDENTIFY messages for newer hosts.
 | 
											
												
													
														|  | 
 |  | +	if (scsiDev.lun < 0)
 | 
											
												
													
														|  | 
 |  | +	{
 | 
											
												
													
														|  | 
 |  | +		scsiDev.lun = scsiDev.cdb[1] >> 5;
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  	control = scsiDev.cdb[scsiDev.cdbLen - 1];
 |  |  	control = scsiDev.cdb[scsiDev.cdbLen - 1];
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	scsiDev.cmdCount++;
 |  |  	scsiDev.cmdCount++;
 | 
											
										
											
												
													
														|  | @@ -313,7 +318,7 @@ static void process_Command()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  		enter_Status(CHECK_CONDITION);
 |  |  		enter_Status(CHECK_CONDITION);
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  | -	else if (lun)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	else if (scsiDev.lun)
 | 
											
												
													
														|  |  	{
 |  |  	{
 | 
											
												
													
														|  |  		scsiDev.sense.code = ILLEGAL_REQUEST;
 |  |  		scsiDev.sense.code = ILLEGAL_REQUEST;
 | 
											
												
													
														|  |  		scsiDev.sense.asc = LOGICAL_UNIT_NOT_SUPPORTED;
 |  |  		scsiDev.sense.asc = LOGICAL_UNIT_NOT_SUPPORTED;
 | 
											
										
											
												
													
														|  | @@ -424,6 +429,7 @@ static void scsiReset()
 | 
											
												
													
														|  |  	scsiDev.phase = BUS_FREE;
 |  |  	scsiDev.phase = BUS_FREE;
 | 
											
												
													
														|  |  	scsiDev.atnFlag = 0;
 |  |  	scsiDev.atnFlag = 0;
 | 
											
												
													
														|  |  	scsiDev.resetFlag = 0;
 |  |  	scsiDev.resetFlag = 0;
 | 
											
												
													
														|  | 
 |  | +	scsiDev.lun = -1;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	if (scsiDev.unitAttention != POWER_ON_RESET)
 |  |  	if (scsiDev.unitAttention != POWER_ON_RESET)
 | 
											
												
													
														|  |  	{
 |  |  	{
 | 
											
										
											
												
													
														|  | @@ -458,6 +464,7 @@ static void enter_SelectionPhase()
 | 
											
												
													
														|  |  	scsiDev.dataLen = 0;
 |  |  	scsiDev.dataLen = 0;
 | 
											
												
													
														|  |  	scsiDev.status = GOOD;
 |  |  	scsiDev.status = GOOD;
 | 
											
												
													
														|  |  	scsiDev.phase = SELECTION;
 |  |  	scsiDev.phase = SELECTION;
 | 
											
												
													
														|  | 
 |  | +	scsiDev.lun = -1;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	transfer.blocks = 0;
 |  |  	transfer.blocks = 0;
 | 
											
												
													
														|  |  	transfer.currentBlock = 0;
 |  |  	transfer.currentBlock = 0;
 | 
											
										
											
												
													
														|  | @@ -626,15 +633,12 @@ static void process_MessageOut()
 | 
											
												
													
														|  |  		// IDENTIFY
 |  |  		// IDENTIFY
 | 
											
												
													
														|  |  		// We don't disconnect, so ignore disconnect privilege.
 |  |  		// We don't disconnect, so ignore disconnect privilege.
 | 
											
												
													
														|  |  		if ((scsiDev.msgOut & 0x18) || // Reserved bits set.
 |  |  		if ((scsiDev.msgOut & 0x18) || // Reserved bits set.
 | 
											
												
													
														|  | -			(scsiDev.msgOut & 0x20)  || // We don't have any target routines!
 |  | 
 | 
											
												
													
														|  | -			(scsiDev.msgOut & 0x7) // We only support LUN 0!
 |  | 
 | 
											
												
													
														|  | -			)
 |  | 
 | 
											
												
													
														|  | 
 |  | +			(scsiDev.msgOut & 0x20))  // We don't have any target routines!
 | 
											
												
													
														|  |  		{
 |  |  		{
 | 
											
												
													
														|  | -			//scsiDev.sense.code = ILLEGAL_REQUEST;
 |  | 
 | 
											
												
													
														|  | -			//scsiDev.sense.asc = INVALID_BITS_IN_IDENTIFY_MESSAGE;
 |  | 
 | 
											
												
													
														|  | -			//enter_Status(CHECK_CONDITION);
 |  | 
 | 
											
												
													
														|  |  			messageReject();
 |  |  			messageReject();
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +		scsiDev.lun = scsiDev.msgOut & 0x7;
 | 
											
												
													
														|  |  		//scsiDev.allowDisconnect = scsiDev.msgOut & 0x40;
 |  |  		//scsiDev.allowDisconnect = scsiDev.msgOut & 0x40;
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  	else if (scsiDev.msgOut >= 0x20 && scsiDev.msgOut <= 0x2F)
 |  |  	else if (scsiDev.msgOut >= 0x20 && scsiDev.msgOut <= 0x2F)
 |