Skip to content

Commit

Permalink
Re-enable logging again
Browse files Browse the repository at this point in the history
XP recognizes the disk now but reports 0 capacity. Windows 2000 SP4 is fine.
  • Loading branch information
Cacodemon345 committed Dec 18, 2024
1 parent af0a6f5 commit 140edbc
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 25 deletions.
16 changes: 2 additions & 14 deletions src/scsi/scsi_disk.c
Original file line number Diff line number Diff line change
Expand Up @@ -1297,17 +1297,14 @@ scsi_disk_command(scsi_common_t *sc, uint8_t *cdb)
dev->packet_status = PHASE_COMPLETE;
dev->callback = 20.0 * SCSI_TIME;
break;
} else if (max_len < 12) {
scsi_disk_data_phase_error(dev);
return;
}

scsi_disk_buf_alloc(dev, 256);

max_len = hdd_image_get_last_sector(dev->id) + 1;
memset(dev->temp_buffer, 0, 20);

dev->temp_buffer[3] = 16;
dev->temp_buffer[3] = 8;

dev->temp_buffer[4] = (max_len >> 24) & 0xff;
dev->temp_buffer[5] = (max_len >> 16) & 0xff;
Expand All @@ -1318,16 +1315,7 @@ scsi_disk_command(scsi_common_t *sc, uint8_t *cdb)
dev->temp_buffer[10] = 2;
dev->temp_buffer[11] = 0;

dev->temp_buffer[12] = (max_len >> 24) & 0xff;
dev->temp_buffer[13] = (max_len >> 16) & 0xff;
dev->temp_buffer[14] = (max_len >> 8) & 0xff;
dev->temp_buffer[15] = max_len & 0xff;
dev->temp_buffer[16] = 0;
dev->temp_buffer[17] = 0;
dev->temp_buffer[18] = 2;
dev->temp_buffer[19] = 0;

len = 20;
len = 12;

scsi_disk_set_buf_len(dev, BufLen, &len);

Expand Down
22 changes: 11 additions & 11 deletions src/usb/usb_msd.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ typedef struct usb_device_msd
uint32_t force_stall;
} usb_device_msd;

#define ENABLE_USB_MSD_LOG 1
#ifdef ENABLE_USB_MSD_LOG
int usb_msd_do_log = ENABLE_USB_MSD_LOG;

Expand Down Expand Up @@ -361,8 +362,14 @@ usb_device_msd_handle_data(usb_device_c *device, USBPacket *p)
scsi_device_command_phase1(&scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun]);
usb_msd->current_csw.bCSWStatus = (scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].phase == SCSI_PHASE_STATUS) ? (scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].status == SCSI_STATUS_CHECK_CONDITION) : 2;
} else {
if (usb_msd->current_cbw.dCBWDataTransferLength >= scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].buffer_length)
if (usb_msd->current_cbw.dCBWDataTransferLength >= scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].buffer_length) {
usb_msd->current_csw.dCSWDataResidue = usb_msd->current_cbw.dCBWDataTransferLength - scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].buffer_length;
if (usb_msd->phase == USB_MSDM_DATAIN) {
scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].sc->temp_buffer = realloc(scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].sc->temp_buffer, usb_msd->current_cbw.dCBWDataTransferLength);
usb_msd->data_in_len = usb_msd->current_cbw.dCBWDataTransferLength;
scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].buffer_length = usb_msd->data_in_len;
}
}
}
break;
}
Expand Down Expand Up @@ -404,7 +411,6 @@ usb_device_msd_handle_data(usb_device_c *device, USBPacket *p)
usb_msd->phase = USB_MSDM_CSW;
usb_msd->current_csw.bCSWStatus = (scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].status == SCSI_STATUS_CHECK_CONDITION);
usb_msd->current_csw.dCSWDataResidue = residue;
usb_msd->force_stall = 1;
}
ret = p->len;
break;
Expand Down Expand Up @@ -477,17 +483,11 @@ usb_device_msd_handle_data(usb_device_c *device, USBPacket *p)
if (usb_msd->data_in_len == 0)
{
usb_msd_log("Transfer finished (data in)\n");
usb_msd->current_csw.dCSWDataResidue = usb_msd->current_cbw.dCBWDataTransferLength - scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].buffer_length;
scsi_device_command_phase1(&scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun]);
if (usb_msd->current_cbw.dCBWDataTransferLength < scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].buffer_length)
{
usb_msd->current_csw.bCSWStatus = 0x02;
usb_msd->current_csw.dCSWDataResidue = 0;
} else {
usb_msd->current_csw.bCSWStatus = (scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].status == SCSI_STATUS_CHECK_CONDITION);
}
usb_msd->current_csw.bCSWStatus = (scsi_devices[usb_msd->scsi_bus][usb_msd->current_lun].status == SCSI_STATUS_CHECK_CONDITION);
usb_msd->phase = USB_MSDM_CSW;
usb_msd->force_stall = 1;
// if (usb_msd->current_csw.dCSWDataResidue)
// usb_msd->force_stall = 1;
}
break;
}
Expand Down

0 comments on commit 140edbc

Please sign in to comment.