mirror of
https://github.com/captain-amygdala/pistorm.git
synced 2026-01-28 20:41:08 +00:00
Fix PiSCSI bug that somehow only triggered with -lstdc++
This commit is contained in:
Binary file not shown.
@@ -224,7 +224,7 @@ uint8_t piscsi_rw(struct piscsi_unit *u, struct IORequest *io) {
|
||||
data = iotd->iotd_Req.io_Data;
|
||||
len = iotd->iotd_Req.io_Length;
|
||||
|
||||
WRITESHORT(PISCSI_CMD_DRVNUM, u->unit_num);
|
||||
WRITESHORT(PISCSI_CMD_DRVNUMX, u->unit_num);
|
||||
READLONG(PISCSI_CMD_BLOCKSIZE, block_size);
|
||||
|
||||
if (data == 0) {
|
||||
@@ -308,7 +308,7 @@ uint8_t piscsi_scsi(struct piscsi_unit *u, struct IORequest *io)
|
||||
uint8_t write = 0;
|
||||
uint32_t block_size = 512;
|
||||
|
||||
WRITESHORT(PISCSI_CMD_DRVNUM, u->unit_num);
|
||||
WRITESHORT(PISCSI_CMD_DRVNUMX, u->unit_num);
|
||||
READLONG(PISCSI_CMD_BLOCKSIZE, block_size);
|
||||
|
||||
debugval(PISCSI_DBG_VAL1, iostd->io_Length);
|
||||
|
||||
@@ -48,6 +48,7 @@ enum piscsi_cmds {
|
||||
PISCSI_CMD_BLOCKSIZE = 0x74,
|
||||
PISCSI_CMD_READBYTES = 0x78,
|
||||
PISCSI_CMD_WRITEBYTES = 0x7C,
|
||||
PISCSI_CMD_DRVNUMX = 0x80,
|
||||
PISCSI_DBG_MSG = 0x1000,
|
||||
PISCSI_DBG_VAL1 = 0x1010,
|
||||
PISCSI_DBG_VAL2 = 0x1014,
|
||||
|
||||
@@ -651,18 +651,22 @@ void handle_piscsi_write(uint32_t addr, uint32_t val, uint8_t type) {
|
||||
break;
|
||||
}
|
||||
case PISCSI_CMD_DRVNUM:
|
||||
//printf("%d ", val);
|
||||
if (val % 10 != 0)
|
||||
if (val % 10 != 0) {
|
||||
piscsi_cur_drive = 255;
|
||||
}
|
||||
else
|
||||
piscsi_cur_drive = val / 10;
|
||||
if (piscsi_cur_drive > NUM_UNITS)
|
||||
if (piscsi_cur_drive > NUM_UNITS) {
|
||||
piscsi_cur_drive = 255;
|
||||
|
||||
}
|
||||
if (piscsi_cur_drive != 255) {
|
||||
DEBUG("[PISCSI] (%s) Drive number set to %d (%d)\n", op_type_names[type], piscsi_cur_drive, val);
|
||||
}
|
||||
break;
|
||||
case PISCSI_CMD_DRVNUMX:
|
||||
piscsi_cur_drive = val;
|
||||
DEBUG("[PISCSI] DRVNUMX: %d.\n", val);
|
||||
break;
|
||||
case PISCSI_CMD_DEBUGME:
|
||||
piscsi_debugme(val);
|
||||
break;
|
||||
|
||||
@@ -90,6 +90,7 @@ struct piscsi_fs {
|
||||
// .long 0 /* device file name */
|
||||
// .long 0 /* unit */
|
||||
// .long 0 /* flags */
|
||||
#pragma pack(4)
|
||||
struct DosEnvec {
|
||||
uint32_t de_TableSize; /* Size of Environment vector */
|
||||
uint32_t de_SizeBlock; /* in longwords: standard value is 128 */
|
||||
@@ -116,6 +117,7 @@ struct DosEnvec {
|
||||
|
||||
};
|
||||
|
||||
#pragma pack(4)
|
||||
struct pihd_dosnode_data {
|
||||
uint32_t name_ptr;
|
||||
uint32_t dev_name_ptr;
|
||||
@@ -140,6 +142,7 @@ struct pihd_dosnode_data {
|
||||
uint32_t dostype;
|
||||
};
|
||||
|
||||
#pragma pack(4)
|
||||
struct RigidDiskBlock {
|
||||
uint32_t rdb_ID;
|
||||
uint32_t rdb_SummedLongs;
|
||||
@@ -183,6 +186,7 @@ struct RigidDiskBlock {
|
||||
char rdb_DriveInitName[40];
|
||||
};
|
||||
|
||||
#pragma pack(4)
|
||||
struct DeviceNode {
|
||||
uint32_t dn_Next;
|
||||
uint32_t dn_Type;
|
||||
@@ -197,6 +201,7 @@ struct DeviceNode {
|
||||
uint8_t *dn_Name;
|
||||
};
|
||||
|
||||
#pragma pack(4)
|
||||
struct PartitionBlock {
|
||||
uint32_t pb_ID;
|
||||
uint32_t pb_SummedLongs;
|
||||
@@ -212,6 +217,7 @@ struct PartitionBlock {
|
||||
uint32_t pb_EReserved[12];
|
||||
};
|
||||
|
||||
#pragma pack(4)
|
||||
struct SCSICmd_ModeSense6 {
|
||||
uint8_t opcode;
|
||||
uint8_t reserved_dbd;
|
||||
@@ -221,6 +227,7 @@ struct SCSICmd_ModeSense6 {
|
||||
uint8_t control;
|
||||
};
|
||||
|
||||
#pragma pack(4)
|
||||
struct SCSICmd_RW10 {
|
||||
uint8_t opcode;
|
||||
uint8_t rdprotect_flags;
|
||||
@@ -230,6 +237,7 @@ struct SCSICmd_RW10 {
|
||||
uint8_t control;
|
||||
};
|
||||
|
||||
#pragma pack(4)
|
||||
struct FileSysHeaderBlock {
|
||||
uint32_t fhb_ID;
|
||||
uint32_t fhb_SummedLongs;
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user