[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH RFC 03/11] ide: necessary checks corrected to tr
From: |
Hannes Reinecke |
Subject: |
Re: [Qemu-devel] [PATCH RFC 03/11] ide: necessary checks corrected to treat ATAPI-SCSI bridge as CDROM |
Date: |
Tue, 18 Aug 2015 08:09:31 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 |
On 08/18/2015 01:42 AM, Alexander Bezzubikov wrote:
> Signed-off-by: Alexander Bezzubikov <address@hidden>
> ---
> hw/ide/core.c | 24 ++++++++++++++----------
> hw/ide/qdev.c | 2 +-
> 2 files changed, 15 insertions(+), 11 deletions(-)
>
> diff --git a/hw/ide/core.c b/hw/ide/core.c
> index 50449ca..d017d4e 100644
> --- a/hw/ide/core.c
> +++ b/hw/ide/core.c
> @@ -348,7 +348,7 @@ static void ide_set_signature(IDEState *s)
> /* put signature */
> s->nsector = 1;
> s->sector = 1;
> - if (s->drive_kind == IDE_CD) {
> + if (s->drive_kind == IDE_CD || s->drive_kind == IDE_BRIDGE) {
> s->lcyl = 0x14;
> s->hcyl = 0xeb;
> } else if (s->blk) {
> @@ -1144,7 +1144,7 @@ static bool cmd_data_set_management(IDEState *s,
> uint8_t cmd)
>
> static bool cmd_identify(IDEState *s, uint8_t cmd)
> {
> - if (s->blk && s->drive_kind != IDE_CD) {
> + if (s->blk && s->drive_kind != IDE_CD && s->drive_kind != IDE_BRIDGE) {
> if (s->drive_kind != IDE_CFATA) {
> ide_identify(s);
> } else {
> @@ -1155,7 +1155,7 @@ static bool cmd_identify(IDEState *s, uint8_t cmd)
> ide_set_irq(s->bus);
> return false;
> } else {
> - if (s->drive_kind == IDE_CD) {
> + if (s->drive_kind == IDE_CD || s->drive_kind == IDE_BRIDGE) {
> ide_set_signature(s);
> }
> ide_abort_command(s);
> @@ -1232,7 +1232,7 @@ static bool cmd_read_pio(IDEState *s, uint8_t cmd)
> {
> bool lba48 = (cmd == WIN_READ_EXT);
>
> - if (s->drive_kind == IDE_CD) {
> + if (s->drive_kind == IDE_CD || s->drive_kind == IDE_BRIDGE) {
> ide_set_signature(s); /* odd, but ATA4 8.27.5.2 requires it */
> ide_abort_command(s);
> return true;
> @@ -1426,7 +1426,7 @@ static bool cmd_exec_dev_diagnostic(IDEState *s,
> uint8_t cmd)
> {
> ide_set_signature(s);
>
> - if (s->drive_kind == IDE_CD) {
> + if (s->drive_kind == IDE_CD || s->drive_kind == IDE_BRIDGE) {
> s->status = 0; /* ATAPI spec (v6) section 9.10 defines packet
> * devices to return a clear status register
> * with READY_STAT *not* set. */
> @@ -1731,7 +1731,7 @@ abort_cmd:
> }
>
> #define HD_OK (1u << IDE_HD)
> -#define CD_OK (1u << IDE_CD)
> +#define CD_OK ((1u << IDE_CD) | (1u << IDE_BRIDGE))
> #define CFA_OK (1u << IDE_CFATA)
> #define HD_CFA_OK (HD_OK | CFA_OK)
> #define ALL_OK (HD_OK | CD_OK | CFA_OK)
> @@ -1978,10 +1978,11 @@ void ide_cmd_write(void *opaque, uint32_t addr,
> uint32_t val)
> /* high to low */
> for(i = 0;i < 2; i++) {
> s = &bus->ifs[i];
> - if (s->drive_kind == IDE_CD)
> + if (s->drive_kind == IDE_CD || s->drive_kind == IDE_BRIDGE) {
> s->status = 0x00; /* NOTE: READY is _not_ set */
> - else
> + } else {
> s->status = READY_STAT | SEEK_STAT;
> + }
> ide_set_signature(s);
> }
> }
> @@ -2234,7 +2235,7 @@ static void ide_resize_cb(void *opaque)
> ide_cfata_identify_size(s);
> } else {
> /* IDE_CD uses a different set of callbacks entirely. */
> - assert(s->drive_kind != IDE_CD);
> + assert(s->drive_kind != IDE_CD && s->drive_kind != IDE_BRIDGE);
> ide_identify_size(s);
> }
> }
> @@ -2274,7 +2275,7 @@ int ide_init_drive(IDEState *s, BlockBackend *blk,
> IDEDriveKind kind,
> s->smart_autosave = 1;
> s->smart_errors = 0;
> s->smart_selftest_count = 0;
> - if (kind == IDE_CD) {
> + if (kind == IDE_CD || kind == IDE_BRIDGE) {
> blk_set_dev_ops(blk, &ide_cd_block_ops, s);
> blk_set_guest_block_size(blk, 2048);
> } else {
> @@ -2304,6 +2305,9 @@ int ide_init_drive(IDEState *s, BlockBackend *blk,
> IDEDriveKind kind,
> case IDE_CFATA:
> strcpy(s->drive_model_str, "QEMU MICRODRIVE");
> break;
> + case IDE_BRIDGE:
> + strcpy(s->drive_model_str, "QEMU VIRTUAL ATAPI-SCSI BRIDGE");
> + break;
> default:
> strcpy(s->drive_model_str, "QEMU HARDDISK");
> break;
> diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
> index e96a6e9..63090cc 100644
> --- a/hw/ide/qdev.c
> +++ b/hw/ide/qdev.c
> @@ -182,7 +182,7 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind
> kind)
> }
>
> blkconf_serial(&dev->conf, &dev->serial);
> - if (kind != IDE_CD) {
> + if (kind != IDE_CD && kind != IDE_BRIDGE) {
> blkconf_geometry(&dev->conf, &dev->chs_trans, 65536, 16, 255, &err);
> if (err) {
> error_report_err(err);
>
Looks okay.
Acked-by: Hannes Reinecke <address@hidden>
Cheers,
Hannes
--
Dr. Hannes Reinecke zSeries & Storage
address@hidden +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
- [Qemu-devel] [PATCH RFC 11/11] ide: bridge functions assigned to SCSIBusInfo, bridge is OK now, (continued)
- [Qemu-devel] [PATCH RFC 11/11] ide: bridge functions assigned to SCSIBusInfo, bridge is OK now, Alexander Bezzubikov, 2015/08/18
- Re: [Qemu-devel] [PATCH RFC 00/11] QEMU ATAPI-SCSI bridge GSoC project, Hannes Reinecke, 2015/08/18
- [Qemu-devel] [PATCH RFC 02/11] ide: necessary fields for ATAPI-SCSI bridge added, Alexander Bezzubikov, 2015/08/18
- [Qemu-devel] [PATCH RFC 04/11] scsi: Added function to enable ATAPI-SCSI bridge send SCSI requests, Alexander Bezzubikov, 2015/08/18
- [Qemu-devel] [PATCH RFC 03/11] ide: necessary checks corrected to treat ATAPI-SCSI bridge as CDROM, Alexander Bezzubikov, 2015/08/18
- Re: [Qemu-devel] [PATCH RFC 03/11] ide: necessary checks corrected to treat ATAPI-SCSI bridge as CDROM,
Hannes Reinecke <=
- [Qemu-devel] [PATCH RFC 09/11] ide: ide_bridge_do_transfer is treated as PIO transfer, Alexander Bezzubikov, 2015/08/18