Merge remote-tracking branch 'bonzini/scsi-next' into staging
* bonzini/scsi-next: iscsi: Set number of blocks to 0 for blank CDROM devices scsi: more fixes to properties for passthrough devices esp: support 24-bit DMA megasas: Add 'hba_serial' property
This commit is contained in:
commit
1e2778d59d
|
@ -721,7 +721,12 @@ iscsi_readcapacity10_cb(struct iscsi_context *iscsi, int status,
|
|||
}
|
||||
|
||||
itask->iscsilun->block_size = rc10->block_size;
|
||||
itask->iscsilun->num_blocks = rc10->lba + 1;
|
||||
if (rc10->lba == 0) {
|
||||
/* blank disk loaded */
|
||||
itask->iscsilun->num_blocks = 0;
|
||||
} else {
|
||||
itask->iscsilun->num_blocks = rc10->lba + 1;
|
||||
}
|
||||
itask->bs->total_sectors = itask->iscsilun->num_blocks *
|
||||
itask->iscsilun->block_size / BDRV_SECTOR_SIZE ;
|
||||
|
||||
|
|
16
hw/esp.c
16
hw/esp.c
|
@ -87,7 +87,9 @@ static uint32_t get_cmd(ESPState *s, uint8_t *buf)
|
|||
|
||||
target = s->wregs[ESP_WBUSID] & BUSID_DID;
|
||||
if (s->dma) {
|
||||
dmalen = s->rregs[ESP_TCLO] | (s->rregs[ESP_TCMID] << 8);
|
||||
dmalen = s->rregs[ESP_TCLO];
|
||||
dmalen |= s->rregs[ESP_TCMID] << 8;
|
||||
dmalen |= s->rregs[ESP_TCHI] << 16;
|
||||
s->dma_memory_read(s->dma_opaque, buf, dmalen);
|
||||
} else {
|
||||
dmalen = s->ti_size;
|
||||
|
@ -226,6 +228,7 @@ static void esp_dma_done(ESPState *s)
|
|||
s->rregs[ESP_RFLAGS] = 0;
|
||||
s->rregs[ESP_TCLO] = 0;
|
||||
s->rregs[ESP_TCMID] = 0;
|
||||
s->rregs[ESP_TCHI] = 0;
|
||||
esp_raise_irq(s);
|
||||
}
|
||||
|
||||
|
@ -328,7 +331,9 @@ static void handle_ti(ESPState *s)
|
|||
return;
|
||||
}
|
||||
|
||||
dmalen = s->rregs[ESP_TCLO] | (s->rregs[ESP_TCMID] << 8);
|
||||
dmalen = s->rregs[ESP_TCLO];
|
||||
dmalen |= s->rregs[ESP_TCMID] << 8;
|
||||
dmalen |= s->rregs[ESP_TCHI] << 16;
|
||||
if (dmalen==0) {
|
||||
dmalen=0x10000;
|
||||
}
|
||||
|
@ -429,6 +434,7 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_t val)
|
|||
switch (saddr) {
|
||||
case ESP_TCLO:
|
||||
case ESP_TCMID:
|
||||
case ESP_TCHI:
|
||||
s->rregs[ESP_RSTAT] &= ~STAT_TC;
|
||||
break;
|
||||
case ESP_FIFO:
|
||||
|
@ -448,6 +454,7 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_t val)
|
|||
/* Reload DMA counter. */
|
||||
s->rregs[ESP_TCLO] = s->wregs[ESP_TCLO];
|
||||
s->rregs[ESP_TCMID] = s->wregs[ESP_TCMID];
|
||||
s->rregs[ESP_TCHI] = s->wregs[ESP_TCHI];
|
||||
} else {
|
||||
s->dma = 0;
|
||||
}
|
||||
|
@ -530,13 +537,12 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_t val)
|
|||
case ESP_WBUSID ... ESP_WSYNO:
|
||||
break;
|
||||
case ESP_CFG1:
|
||||
case ESP_CFG2: case ESP_CFG3:
|
||||
case ESP_RES3: case ESP_RES4:
|
||||
s->rregs[saddr] = val;
|
||||
break;
|
||||
case ESP_WCCF ... ESP_WTEST:
|
||||
break;
|
||||
case ESP_CFG2 ... ESP_RES4:
|
||||
s->rregs[saddr] = val;
|
||||
break;
|
||||
default:
|
||||
trace_esp_error_invalid_write(val, saddr);
|
||||
return;
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#define MEGASAS_MAX_SECTORS 0xFFFF /* No real limit */
|
||||
#define MEGASAS_MAX_ARRAYS 128
|
||||
|
||||
#define MEGASAS_HBA_SERIAL "QEMU123456"
|
||||
#define NAA_LOCALLY_ASSIGNED_ID 0x3ULL
|
||||
#define IEEE_COMPANY_LOCALLY_ASSIGNED 0x525400
|
||||
|
||||
|
@ -93,6 +94,7 @@ typedef struct MegasasState {
|
|||
int boot_event;
|
||||
|
||||
uint64_t sas_addr;
|
||||
char *hba_serial;
|
||||
|
||||
uint64_t reply_queue_pa;
|
||||
void *reply_queue;
|
||||
|
@ -698,8 +700,7 @@ static int megasas_ctrl_get_info(MegasasState *s, MegasasCmd *cmd)
|
|||
}
|
||||
|
||||
memcpy(info.product_name, "MegaRAID SAS 8708EM2", 20);
|
||||
snprintf(info.serial_number, 32, "QEMU%08lx",
|
||||
(unsigned long)s & 0xFFFFFFFF);
|
||||
snprintf(info.serial_number, 32, "%s", s->hba_serial);
|
||||
snprintf(info.package_version, 0x60, "%s-QEMU", QEMU_VERSION);
|
||||
memcpy(info.image_component[0].name, "APP", 3);
|
||||
memcpy(info.image_component[0].version, MEGASAS_VERSION "-QEMU", 9);
|
||||
|
@ -2132,6 +2133,9 @@ static int megasas_scsi_init(PCIDevice *dev)
|
|||
s->sas_addr |= (PCI_SLOT(dev->devfn) << 8);
|
||||
s->sas_addr |= PCI_FUNC(dev->devfn);
|
||||
}
|
||||
if (!s->hba_serial) {
|
||||
s->hba_serial = g_strdup(MEGASAS_HBA_SERIAL);
|
||||
}
|
||||
if (s->fw_sge >= MEGASAS_MAX_SGE - MFI_PASS_FRAME_SIZE) {
|
||||
s->fw_sge = MEGASAS_MAX_SGE - MFI_PASS_FRAME_SIZE;
|
||||
} else if (s->fw_sge >= 128 - MFI_PASS_FRAME_SIZE) {
|
||||
|
@ -2166,6 +2170,7 @@ static Property megasas_properties[] = {
|
|||
MEGASAS_DEFAULT_SGE),
|
||||
DEFINE_PROP_UINT32("max_cmds", MegasasState, fw_cmds,
|
||||
MEGASAS_DEFAULT_FRAMES),
|
||||
DEFINE_PROP_STRING("hba_serial", MegasasState, hba_serial),
|
||||
DEFINE_PROP_HEX64("sas_address", MegasasState, sas_addr, 0),
|
||||
#ifdef USE_MSIX
|
||||
DEFINE_PROP_BIT("use_msix", MegasasState, flags,
|
||||
|
|
|
@ -2421,6 +2421,7 @@ static TypeInfo scsi_cd_info = {
|
|||
#ifdef __linux__
|
||||
static Property scsi_block_properties[] = {
|
||||
DEFINE_PROP_DRIVE("drive", SCSIDiskState, qdev.conf.bs),
|
||||
DEFINE_PROP_INT32("bootindex", SCSIDiskState, qdev.conf.bootindex, -1),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
|
|
|
@ -479,7 +479,8 @@ static SCSIRequest *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun,
|
|||
}
|
||||
|
||||
static Property scsi_generic_properties[] = {
|
||||
DEFINE_BLOCK_PROPERTIES(SCSIDevice, conf),
|
||||
DEFINE_PROP_DRIVE("drive", SCSIDevice, conf.bs),
|
||||
DEFINE_PROP_INT32("bootindex", SCSIDevice, conf.bootindex, -1),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue