Add mode pages for the Yamaha drive.
This commit is contained in:
@@ -163,21 +163,22 @@
|
||||
#define GPCMD_PLAY_AUDIO_TRACK_RELATIVE_12_MATSUSHITA 0xe9 /* Matsushita Vendor Unique command */
|
||||
|
||||
/* Mode page codes for mode sense/set */
|
||||
#define GPMODE_UNIT_ATN_PAGE 0x00
|
||||
#define GPMODE_R_W_ERROR_PAGE 0x01
|
||||
#define GPMODE_DISCONNECT_PAGE 0x02 /* Disconnect/reconnect page */
|
||||
#define GPMODE_FORMAT_DEVICE_PAGE 0x03
|
||||
#define GPMODE_RIGID_DISK_PAGE 0x04 /* Rigid disk geometry page */
|
||||
#define GPMODE_FLEXIBLE_DISK_PAGE 0x05
|
||||
#define GPMODE_CACHING_PAGE 0x08
|
||||
#define GPMODE_CDROM_PAGE_SONY 0x08
|
||||
#define GPMODE_CDROM_AUDIO_PAGE_SONY 0x09
|
||||
#define GPMODE_CDROM_PAGE 0x0d
|
||||
#define GPMODE_CDROM_AUDIO_PAGE 0x0e
|
||||
#define GPMODE_CAPABILITIES_PAGE 0x2a
|
||||
#define GPMODE_IOMEGA_PAGE 0x2f
|
||||
#define GPMODE_UNK_VENDOR_PAGE 0x30
|
||||
#define GPMODE_ALL_PAGES 0x3f
|
||||
#define GPMODE_UNIT_ATN_PAGE 0x00
|
||||
#define GPMODE_R_W_ERROR_PAGE 0x01
|
||||
#define GPMODE_DISCONNECT_PAGE 0x02 /* Disconnect/reconnect page */
|
||||
#define GPMODE_FORMAT_DEVICE_PAGE 0x03
|
||||
#define GPMODE_RIGID_DISK_PAGE 0x04 /* Rigid disk geometry page */
|
||||
#define GPMODE_FLEXIBLE_DISK_PAGE 0x05
|
||||
#define GPMODE_CDROM_WRITE_PARAMETERS_PAGE 0x05
|
||||
#define GPMODE_CACHING_PAGE 0x08
|
||||
#define GPMODE_CDROM_PAGE_SONY 0x08
|
||||
#define GPMODE_CDROM_AUDIO_PAGE_SONY 0x09
|
||||
#define GPMODE_CDROM_PAGE 0x0d
|
||||
#define GPMODE_CDROM_AUDIO_PAGE 0x0e
|
||||
#define GPMODE_CAPABILITIES_PAGE 0x2a
|
||||
#define GPMODE_IOMEGA_PAGE 0x2f
|
||||
#define GPMODE_UNK_VENDOR_PAGE 0x30
|
||||
#define GPMODE_ALL_PAGES 0x3f
|
||||
|
||||
/* Mode page codes for presence */
|
||||
#define GPMODEP_UNIT_ATN_PAGE 0x0000000000000001LL
|
||||
|
||||
@@ -131,6 +131,12 @@ static uint64_t scsi_cdrom_ms_page_flags_sony_scsi = (GPMODEP_R_W_ERROR_PAGE | G
|
||||
(1ULL << 0x0fULL) | GPMODEP_CAPABILITIES_PAGE |
|
||||
GPMODEP_ALL_PAGES);
|
||||
|
||||
static uint64_t scsi_cdrom_ms_page_flags_yamaha = (GPMODEP_R_W_ERROR_PAGE | GPMODEP_DISCONNECT_PAGE |
|
||||
GPMODEP_FLEXIBLE_DISK_PAGE | GPMODEP_CACHING_PAGE |
|
||||
GPMODEP_CDROM_PAGE_SONY | GPMODEP_CDROM_AUDIO_PAGE_SONY |
|
||||
GPMODEP_CAPABILITIES_PAGE | GPMODEP_ALL_PAGES);
|
||||
|
||||
|
||||
static uint64_t scsi_cdrom_drive_status_page_flags = ((1ULL << 0x01ULL) | (1ULL << 0x02ULL) |
|
||||
(1ULL << 0x0fULL) | GPMODEP_ALL_PAGES);
|
||||
|
||||
@@ -241,6 +247,56 @@ static const mode_sense_pages_t scsi_cdrom_ms_pages_changeable_sony_scsi = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00 } }
|
||||
};
|
||||
|
||||
static const mode_sense_pages_t scsi_cdrom_ms_pages_default_yamaha = {
|
||||
{ [0x01] = { GPMODE_R_W_ERROR_PAGE, 0x06, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00 },
|
||||
[0x02] = { GPMODE_DISCONNECT_PAGE, 0x0e, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00 },
|
||||
[0x05] = { GPMODE_CDROM_WRITE_PARAMETERS_PAGE, 0x36, 0x00, 0xc7, 0x0a, 0x00, 0x00, 0x00,
|
||||
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x96, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
0x20, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20,
|
||||
0x20, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30,
|
||||
0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
[0x08] = { GPMODE_CACHING_PAGE, 0x0a, 0x04, 0x00, 0xff, 0xff, 0x00, 0x00,
|
||||
0xff, 0xff, 0xff, 0xff },
|
||||
[0x0d] = { GPMODE_CDROM_PAGE, 0x06, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x4b },
|
||||
[0x0e] = { GPMODE_CDROM_AUDIO_PAGE, 0x0e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x4b,
|
||||
0x01, 0xff, 0x02, 0xff, 0x00, 0x00, 0x00,
|
||||
0x00 },
|
||||
[0x2a] = { GPMODE_CAPABILITIES_PAGE, 0x14, 0x07, 0x07, 0x71, 0x6f, 0x29, 0x03,
|
||||
0x0b, 0x06, 0x01, 0x00, 0x10, 0x00, 0x10,
|
||||
0x8a, 0x00, 0x00, 0x05, 0x83, 0x05, 0x83 } }
|
||||
};
|
||||
|
||||
// Not true values, need to check real hardware
|
||||
static const mode_sense_pages_t scsi_cdrom_ms_pages_changeable_yamaha = {
|
||||
{
|
||||
[0x01] = { GPMODE_R_W_ERROR_PAGE, 0x06, 0x85, 0xff, 0x00, 0x00, 0x00, 0x00 },
|
||||
[0x02] = { GPMODE_DISCONNECT_PAGE, 0x0e, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
|
||||
0x00 },
|
||||
[0x05] = { GPMODE_CDROM_WRITE_PARAMETERS_PAGE, 0x36, 0x5f, 0xff, 0x0f, 0x00, 0x00, 0x3f,
|
||||
0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0x00, 0x00, 0x00, 0x00 },
|
||||
[0x08] = { GPMODE_CACHING_PAGE, 0x0a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00 },
|
||||
[0x0d] = { GPMODE_CDROM_PAGE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||
[0x0e] = { GPMODE_CDROM_AUDIO_PAGE, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x0f, 0xff, 0x0f, 0xff, 0x00, 0x00, 0x00,
|
||||
0x00 },
|
||||
[0x2a] = { GPMODE_CAPABILITIES_PAGE, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
static gesn_cdb_t *gesn_cdb;
|
||||
@@ -3973,6 +4029,10 @@ scsi_cdrom_drive_reset(const int c)
|
||||
dev->ven_cmd_is_data[0xc6] = 1;
|
||||
dev->ven_cmd_is_data[0xc7] = 1;
|
||||
dev->use_cdb_9 = 1;
|
||||
} else if (dev->drv->is_yamaha) {
|
||||
dev->ms_page_flags = scsi_cdrom_ms_page_flags_yamaha;
|
||||
dev->ms_pages_default = scsi_cdrom_ms_pages_default_yamaha;
|
||||
dev->ms_pages_changeable = scsi_cdrom_ms_pages_changeable_yamaha;
|
||||
}
|
||||
|
||||
if (dev->tf == NULL)
|
||||
@@ -4025,6 +4085,12 @@ scsi_cdrom_drive_reset(const int c)
|
||||
id->write = NULL;
|
||||
id->interrupt_drq = dev->drv->is_early;
|
||||
|
||||
if (dev->drv->is_yamaha) {
|
||||
dev->ms_page_flags = scsi_cdrom_ms_page_flags_yamaha;
|
||||
dev->ms_pages_default = scsi_cdrom_ms_pages_default_yamaha;
|
||||
dev->ms_pages_changeable = scsi_cdrom_ms_pages_changeable_yamaha;
|
||||
}
|
||||
|
||||
valid = 1;
|
||||
|
||||
ide_atapi_attach(id);
|
||||
|
||||
Reference in New Issue
Block a user