scsi: update list of commands
Add more commands and their names, and remove SEEK(6) which is obsolete. Instead, use SET_CAPACITY which is still in SSC. Tested-by: Thomas Schmitt <scdbackup@gmx.net> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									2c20ae11ad
								
							
						
					
					
						commit
						00a01ad47a
					
				@ -681,7 +681,7 @@ static int scsi_req_length(SCSICommand *cmd, SCSIDevice *dev, uint8_t *buf)
 | 
				
			|||||||
    case TEST_UNIT_READY:
 | 
					    case TEST_UNIT_READY:
 | 
				
			||||||
    case REWIND:
 | 
					    case REWIND:
 | 
				
			||||||
    case START_STOP:
 | 
					    case START_STOP:
 | 
				
			||||||
    case SEEK_6:
 | 
					    case SET_CAPACITY:
 | 
				
			||||||
    case WRITE_FILEMARKS:
 | 
					    case WRITE_FILEMARKS:
 | 
				
			||||||
    case SPACE:
 | 
					    case SPACE:
 | 
				
			||||||
    case RESERVE:
 | 
					    case RESERVE:
 | 
				
			||||||
@ -1036,7 +1036,7 @@ static const char *scsi_command_name(uint8_t cmd)
 | 
				
			|||||||
        [ REASSIGN_BLOCKS          ] = "REASSIGN_BLOCKS",
 | 
					        [ REASSIGN_BLOCKS          ] = "REASSIGN_BLOCKS",
 | 
				
			||||||
        [ READ_6                   ] = "READ_6",
 | 
					        [ READ_6                   ] = "READ_6",
 | 
				
			||||||
        [ WRITE_6                  ] = "WRITE_6",
 | 
					        [ WRITE_6                  ] = "WRITE_6",
 | 
				
			||||||
        [ SEEK_6                   ] = "SEEK_6",
 | 
					        [ SET_CAPACITY             ] = "SET_CAPACITY",
 | 
				
			||||||
        [ READ_REVERSE             ] = "READ_REVERSE",
 | 
					        [ READ_REVERSE             ] = "READ_REVERSE",
 | 
				
			||||||
        [ WRITE_FILEMARKS          ] = "WRITE_FILEMARKS",
 | 
					        [ WRITE_FILEMARKS          ] = "WRITE_FILEMARKS",
 | 
				
			||||||
        [ SPACE                    ] = "SPACE",
 | 
					        [ SPACE                    ] = "SPACE",
 | 
				
			||||||
@ -1064,7 +1064,7 @@ static const char *scsi_command_name(uint8_t cmd)
 | 
				
			|||||||
        [ SEARCH_EQUAL             ] = "SEARCH_EQUAL",
 | 
					        [ SEARCH_EQUAL             ] = "SEARCH_EQUAL",
 | 
				
			||||||
        [ SEARCH_LOW               ] = "SEARCH_LOW",
 | 
					        [ SEARCH_LOW               ] = "SEARCH_LOW",
 | 
				
			||||||
        [ SET_LIMITS               ] = "SET_LIMITS",
 | 
					        [ SET_LIMITS               ] = "SET_LIMITS",
 | 
				
			||||||
        [ PRE_FETCH                ] = "PRE_FETCH",
 | 
					        [ PRE_FETCH                ] = "PRE_FETCH/READ_POSITION",
 | 
				
			||||||
        /* READ_POSITION and PRE_FETCH use the same operation code */
 | 
					        /* READ_POSITION and PRE_FETCH use the same operation code */
 | 
				
			||||||
        [ SYNCHRONIZE_CACHE        ] = "SYNCHRONIZE_CACHE",
 | 
					        [ SYNCHRONIZE_CACHE        ] = "SYNCHRONIZE_CACHE",
 | 
				
			||||||
        [ LOCK_UNLOCK_CACHE        ] = "LOCK_UNLOCK_CACHE",
 | 
					        [ LOCK_UNLOCK_CACHE        ] = "LOCK_UNLOCK_CACHE",
 | 
				
			||||||
@ -1101,9 +1101,11 @@ static const char *scsi_command_name(uint8_t cmd)
 | 
				
			|||||||
        [ WRITE_16                 ] = "WRITE_16",
 | 
					        [ WRITE_16                 ] = "WRITE_16",
 | 
				
			||||||
        [ WRITE_VERIFY_16          ] = "WRITE_VERIFY_16",
 | 
					        [ WRITE_VERIFY_16          ] = "WRITE_VERIFY_16",
 | 
				
			||||||
        [ VERIFY_16                ] = "VERIFY_16",
 | 
					        [ VERIFY_16                ] = "VERIFY_16",
 | 
				
			||||||
        [ SYNCHRONIZE_CACHE_16     ] = "SYNCHRONIZE_CACHE_16",
 | 
					        [ PRE_FETCH_16             ] = "PRE_FETCH_16",
 | 
				
			||||||
 | 
					        [ SYNCHRONIZE_CACHE_16     ] = "SPACE_16/SYNCHRONIZE_CACHE_16",
 | 
				
			||||||
 | 
					        /* SPACE_16 and SYNCHRONIZE_CACHE_16 use the same operation code */
 | 
				
			||||||
        [ LOCATE_16                ] = "LOCATE_16",
 | 
					        [ LOCATE_16                ] = "LOCATE_16",
 | 
				
			||||||
        [ WRITE_SAME_16            ] = "WRITE_SAME_16",
 | 
					        [ WRITE_SAME_16            ] = "ERASE_16/WRITE_SAME_16",
 | 
				
			||||||
        /* ERASE_16 and WRITE_SAME_16 use the same operation code */
 | 
					        /* ERASE_16 and WRITE_SAME_16 use the same operation code */
 | 
				
			||||||
        [ SERVICE_ACTION_IN_16     ] = "SERVICE_ACTION_IN_16",
 | 
					        [ SERVICE_ACTION_IN_16     ] = "SERVICE_ACTION_IN_16",
 | 
				
			||||||
        [ WRITE_LONG_16            ] = "WRITE_LONG_16",
 | 
					        [ WRITE_LONG_16            ] = "WRITE_LONG_16",
 | 
				
			||||||
@ -1113,6 +1115,8 @@ static const char *scsi_command_name(uint8_t cmd)
 | 
				
			|||||||
        [ LOAD_UNLOAD              ] = "LOAD_UNLOAD",
 | 
					        [ LOAD_UNLOAD              ] = "LOAD_UNLOAD",
 | 
				
			||||||
        [ READ_12                  ] = "READ_12",
 | 
					        [ READ_12                  ] = "READ_12",
 | 
				
			||||||
        [ WRITE_12                 ] = "WRITE_12",
 | 
					        [ WRITE_12                 ] = "WRITE_12",
 | 
				
			||||||
 | 
					        [ ERASE_12                 ] = "ERASE_12/GET_PERFORMANCE",
 | 
				
			||||||
 | 
					        /* ERASE_12 and GET_PERFORMANCE use the same operation code */
 | 
				
			||||||
        [ SERVICE_ACTION_IN_12     ] = "SERVICE_ACTION_IN_12",
 | 
					        [ SERVICE_ACTION_IN_12     ] = "SERVICE_ACTION_IN_12",
 | 
				
			||||||
        [ WRITE_VERIFY_12          ] = "WRITE_VERIFY_12",
 | 
					        [ WRITE_VERIFY_12          ] = "WRITE_VERIFY_12",
 | 
				
			||||||
        [ VERIFY_12                ] = "VERIFY_12",
 | 
					        [ VERIFY_12                ] = "VERIFY_12",
 | 
				
			||||||
@ -1120,9 +1124,18 @@ static const char *scsi_command_name(uint8_t cmd)
 | 
				
			|||||||
        [ SEARCH_EQUAL_12          ] = "SEARCH_EQUAL_12",
 | 
					        [ SEARCH_EQUAL_12          ] = "SEARCH_EQUAL_12",
 | 
				
			||||||
        [ SEARCH_LOW_12            ] = "SEARCH_LOW_12",
 | 
					        [ SEARCH_LOW_12            ] = "SEARCH_LOW_12",
 | 
				
			||||||
        [ READ_ELEMENT_STATUS      ] = "READ_ELEMENT_STATUS",
 | 
					        [ READ_ELEMENT_STATUS      ] = "READ_ELEMENT_STATUS",
 | 
				
			||||||
        [ SEND_VOLUME_TAG          ] = "SEND_VOLUME_TAG",
 | 
					        [ SEND_VOLUME_TAG          ] = "SEND_VOLUME_TAG/SET_STREAMING",
 | 
				
			||||||
 | 
					        /* SEND_VOLUME_TAG and SET_STREAMING use the same operation code */
 | 
				
			||||||
 | 
					        [ READ_CD                  ] = "READ_CD",
 | 
				
			||||||
        [ READ_DEFECT_DATA_12      ] = "READ_DEFECT_DATA_12",
 | 
					        [ READ_DEFECT_DATA_12      ] = "READ_DEFECT_DATA_12",
 | 
				
			||||||
 | 
					        [ READ_DVD_STRUCTURE       ] = "READ_DVD_STRUCTURE",
 | 
				
			||||||
 | 
					        [ RESERVE_TRACK            ] = "RESERVE_TRACK",
 | 
				
			||||||
 | 
					        [ SEND_CUE_SHEET           ] = "SEND_CUE_SHEET",
 | 
				
			||||||
 | 
					        [ SEND_DVD_STRUCTURE       ] = "SEND_DVD_STRUCTURE",
 | 
				
			||||||
        [ SET_CD_SPEED             ] = "SET_CD_SPEED",
 | 
					        [ SET_CD_SPEED             ] = "SET_CD_SPEED",
 | 
				
			||||||
 | 
					        [ SET_READ_AHEAD           ] = "SET_READ_AHEAD",
 | 
				
			||||||
 | 
					        [ ALLOW_OVERWRITE          ] = "ALLOW_OVERWRITE",
 | 
				
			||||||
 | 
					        [ MECHANISM_STATUS         ] = "MECHANISM_STATUS",
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (cmd >= ARRAY_SIZE(names) || names[cmd] == NULL)
 | 
					    if (cmd >= ARRAY_SIZE(names) || names[cmd] == NULL)
 | 
				
			||||||
 | 
				
			|||||||
@ -32,7 +32,7 @@
 | 
				
			|||||||
#define REASSIGN_BLOCKS       0x07
 | 
					#define REASSIGN_BLOCKS       0x07
 | 
				
			||||||
#define READ_6                0x08
 | 
					#define READ_6                0x08
 | 
				
			||||||
#define WRITE_6               0x0a
 | 
					#define WRITE_6               0x0a
 | 
				
			||||||
#define SEEK_6                0x0b
 | 
					#define SET_CAPACITY          0x0b
 | 
				
			||||||
#define READ_REVERSE          0x0f
 | 
					#define READ_REVERSE          0x0f
 | 
				
			||||||
#define WRITE_FILEMARKS       0x10
 | 
					#define WRITE_FILEMARKS       0x10
 | 
				
			||||||
#define SPACE                 0x11
 | 
					#define SPACE                 0x11
 | 
				
			||||||
@ -81,14 +81,17 @@
 | 
				
			|||||||
#define GET_EVENT_STATUS_NOTIFICATION 0x4a
 | 
					#define GET_EVENT_STATUS_NOTIFICATION 0x4a
 | 
				
			||||||
#define LOG_SELECT            0x4c
 | 
					#define LOG_SELECT            0x4c
 | 
				
			||||||
#define LOG_SENSE             0x4d
 | 
					#define LOG_SENSE             0x4d
 | 
				
			||||||
 | 
					#define RESERVE_TRACK         0x53
 | 
				
			||||||
#define MODE_SELECT_10        0x55
 | 
					#define MODE_SELECT_10        0x55
 | 
				
			||||||
#define RESERVE_10            0x56
 | 
					#define RESERVE_10            0x56
 | 
				
			||||||
#define RELEASE_10            0x57
 | 
					#define RELEASE_10            0x57
 | 
				
			||||||
#define MODE_SENSE_10         0x5a
 | 
					#define MODE_SENSE_10         0x5a
 | 
				
			||||||
 | 
					#define SEND_CUE_SHEET        0x5d
 | 
				
			||||||
#define PERSISTENT_RESERVE_IN 0x5e
 | 
					#define PERSISTENT_RESERVE_IN 0x5e
 | 
				
			||||||
#define PERSISTENT_RESERVE_OUT 0x5f
 | 
					#define PERSISTENT_RESERVE_OUT 0x5f
 | 
				
			||||||
#define VARLENGTH_CDB         0x7f
 | 
					#define VARLENGTH_CDB         0x7f
 | 
				
			||||||
#define WRITE_FILEMARKS_16    0x80
 | 
					#define WRITE_FILEMARKS_16    0x80
 | 
				
			||||||
 | 
					#define ALLOW_OVERWRITE       0x82
 | 
				
			||||||
#define EXTENDED_COPY         0x83
 | 
					#define EXTENDED_COPY         0x83
 | 
				
			||||||
#define ATA_PASSTHROUGH       0x85
 | 
					#define ATA_PASSTHROUGH       0x85
 | 
				
			||||||
#define ACCESS_CONTROL_IN     0x86
 | 
					#define ACCESS_CONTROL_IN     0x86
 | 
				
			||||||
@ -98,6 +101,8 @@
 | 
				
			|||||||
#define WRITE_16              0x8a
 | 
					#define WRITE_16              0x8a
 | 
				
			||||||
#define WRITE_VERIFY_16       0x8e
 | 
					#define WRITE_VERIFY_16       0x8e
 | 
				
			||||||
#define VERIFY_16             0x8f
 | 
					#define VERIFY_16             0x8f
 | 
				
			||||||
 | 
					#define PRE_FETCH_16          0x90
 | 
				
			||||||
 | 
					#define SPACE_16              0x91
 | 
				
			||||||
#define SYNCHRONIZE_CACHE_16  0x91
 | 
					#define SYNCHRONIZE_CACHE_16  0x91
 | 
				
			||||||
#define LOCATE_16             0x92
 | 
					#define LOCATE_16             0x92
 | 
				
			||||||
#define WRITE_SAME_16         0x93
 | 
					#define WRITE_SAME_16         0x93
 | 
				
			||||||
@ -110,9 +115,11 @@
 | 
				
			|||||||
#define MAINTENANCE_OUT       0xa4
 | 
					#define MAINTENANCE_OUT       0xa4
 | 
				
			||||||
#define MOVE_MEDIUM           0xa5
 | 
					#define MOVE_MEDIUM           0xa5
 | 
				
			||||||
#define LOAD_UNLOAD           0xa6
 | 
					#define LOAD_UNLOAD           0xa6
 | 
				
			||||||
 | 
					#define SET_READ_AHEAD        0xa7
 | 
				
			||||||
#define READ_12               0xa8
 | 
					#define READ_12               0xa8
 | 
				
			||||||
#define WRITE_12              0xaa
 | 
					#define WRITE_12              0xaa
 | 
				
			||||||
#define SERVICE_ACTION_IN_12  0xab
 | 
					#define SERVICE_ACTION_IN_12  0xab
 | 
				
			||||||
 | 
					#define ERASE_12              0xac
 | 
				
			||||||
#define READ_DVD_STRUCTURE    0xad
 | 
					#define READ_DVD_STRUCTURE    0xad
 | 
				
			||||||
#define WRITE_VERIFY_12       0xae
 | 
					#define WRITE_VERIFY_12       0xae
 | 
				
			||||||
#define VERIFY_12             0xaf
 | 
					#define VERIFY_12             0xaf
 | 
				
			||||||
@ -125,6 +132,7 @@
 | 
				
			|||||||
#define SET_CD_SPEED          0xbb
 | 
					#define SET_CD_SPEED          0xbb
 | 
				
			||||||
#define MECHANISM_STATUS      0xbd
 | 
					#define MECHANISM_STATUS      0xbd
 | 
				
			||||||
#define READ_CD               0xbe
 | 
					#define READ_CD               0xbe
 | 
				
			||||||
 | 
					#define SEND_DVD_STRUCTURE    0xbf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * SERVICE ACTION IN subcodes
 | 
					 * SERVICE ACTION IN subcodes
 | 
				
			||||||
 | 
				
			|||||||
@ -1374,10 +1374,8 @@ static int32_t scsi_send_command(SCSIRequest *req, uint8_t *buf)
 | 
				
			|||||||
            goto fail;
 | 
					            goto fail;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case SEEK_6:
 | 
					 | 
				
			||||||
    case SEEK_10:
 | 
					    case SEEK_10:
 | 
				
			||||||
        DPRINTF("Seek(%d) (sector %" PRId64 ")\n", command == SEEK_6 ? 6 : 10,
 | 
					        DPRINTF("Seek(10) (sector %" PRId64 ")\n", r->req.cmd.lba);
 | 
				
			||||||
                r->req.cmd.lba);
 | 
					 | 
				
			||||||
        if (r->req.cmd.lba > s->qdev.max_lba) {
 | 
					        if (r->req.cmd.lba > s->qdev.max_lba) {
 | 
				
			||||||
            goto illegal_lba;
 | 
					            goto illegal_lba;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user