Debug: Add traceCommand

Prints IO Command return status if enabled
This commit is contained in:
Matt Harlum 2023-11-12 21:18:32 +00:00
parent 3dc11d92bc
commit 07931d2822
6 changed files with 264 additions and 5 deletions

View File

@ -39,7 +39,8 @@ OBJ = driver.o \
atapi.o \
scsi.o \
idetask.o \
mounter.o
mounter.o \
debug.o
ASMOBJ = endskip.o

238
debug.c Normal file
View File

@ -0,0 +1,238 @@
#include <exec/io.h>
#include <exec/errors.h>
#include <devices/trackdisk.h>
#include <devices/scsidisk.h>
#include "device.h"
#include "debug.h"
#include "newstyle.h"
#if DEBUG & DBG_CMD
void traceCommand(struct IOStdReq *req) {
char *commandName;
char *err;
switch (req->io_Command) {
case CMD_CLEAR:
commandName = "CMD_CLEAR";
break;
case CMD_UPDATE:
commandName = "CMD_UPDATE";
break;
case CMD_READ:
commandName = "CMD_READ";
break;
case CMD_WRITE:
commandName = "CMD_WRITE";
break;
case TD_REMCHANGEINT:
commandName = "TD_REMCHANGEINT";
break;
case TD_PROTSTATUS:
commandName = "TD_PROTSTATUS";
break;
case TD_CHANGENUM:
commandName = "TD_CHANGENUM";
break;
case TD_CHANGESTATE:
commandName = "TD_CHANGESTATE";
break;
case TD_EJECT:
commandName = "TD_EJECT";
break;
case TD_GETDRIVETYPE:
commandName = "TD_GETDRIVETYPE";
break;
case TD_GETGEOMETRY:
commandName = "TD_GETGEOMETRY";
break;
case TD_MOTOR:
commandName = "TD_MOTOR";
break;
case TD_READ64:
commandName = "TD_READ64";
break;
case TD_WRITE64:
commandName = "TD_WRITE64";
break;
case TD_FORMAT64:
commandName = "TD_FORMAT64";
break;
case NSCMD_DEVICEQUERY:
commandName = "NSCMD_DEVICEQUERY";
break;
case NSCMD_TD_READ64:
commandName = "NSCMD_TD_READ64";
break;
case NSCMD_TD_WRITE64:
commandName = "NSCMD_TD_WRITE64";
break;
case NSCMD_TD_FORMAT64:
commandName = "NSCMD_TD_FORMAT64";
break;
case HD_SCSICMD:
commandName = "HD_SCSICMD";
break;
default:
commandName = "UNKNOWN";
break;
}
switch (req->io_Error) {
case 0:
err = "OK";
break;
case IOERR_OPENFAIL:
err = "IOERR_OPENFAIL";
break;
case IOERR_ABORTED:
err = "IOERR_ABORTED";
break;
case IOERR_NOCMD:
err = "IOERR_NOCMD";
break;
case IOERR_BADLENGTH:
err = "IOERR_BADLENGTH";
break;
case IOERR_BADADDRESS:
err = "IOERR_BADADDRESS";
break;
case IOERR_UNITBUSY:
err = "IOERR_UNITBUSY";
break;
case IOERR_SELFTEST:
err = "IOERR_SELFTEST";
break;
case HFERR_SelfUnit:
err = "HFERR_SelfUnit";
break;
case HFERR_DMA:
err = "HFERR_DMA";
break;
case HFERR_Phase:
err = "HFERR_Phase";
break;
case HFERR_Parity:
err = "HFERR_Parity";
break;
case HFERR_SelTimeout:
err = "HFERR_SelTimeout";
break;
case HFERR_BadStatus:
err = "HFERR_BadStatus";
break;
case HFERR_NoBoard:
err = "HFERR_NoBoard";
break;
case TDERR_NotSpecified:
err = "TDERR_NotSpecified";
break;
case TDERR_NoSecHdr:
err = "TDERR_NoSecHdr";
break;
case TDERR_BadSecPreamble:
err = "TDERR_BadSecPreamble";
break;
case TDERR_BadSecID:
err = "TDERR_BadSecID";
break;
case TDERR_BadHdrSum:
err = "TDERR_BadHdrSum";
break;
case TDERR_BadSecSum:
err = "TDERR_BadSecSum";
break;
case TDERR_TooFewSecs:
err = "TDERR_TooFewSecs";
break;
case TDERR_BadSecHdr:
err = "TDERR_BadSecHdr";
break;
case TDERR_WriteProt:
err = "TDERR_WriteProt";
break;
case TDERR_DiskChanged:
err = "TDERR_DiskChanged";
break;
case TDERR_SeekError:
err = "TDERR_SeekError";
break;
case TDERR_NoMem:
err = "TDERR_NoMem";
break;
case TDERR_BadUnitNum:
err = "TDERR_BadUnitNum";
break;
case TDERR_BadDriveType:
err = "TDERR_BadDriveType";
break;
case TDERR_DriveInUse:
err = "TDERR_DriveInUse";
break;
case TDERR_PostReset:
err = "TDERR_PostReset";
break;
default:
err = "UNKNOWN";
}
struct IDEUnit *unit = (struct IDEUnit *)req->io_Unit;
LONG unitNum = unit->unitNum;
KPrintF("Unit: %ld - %s : Error: %s Actual: %ld\n", unitNum, commandName, err, req->io_Actual);
}
#endif

16
debug.h
View File

@ -4,23 +4,33 @@
*/
#define DBG_INFO 1
#define DBG_WARN 2
#define DBG_TRACE 3
#define DBG_TRACE 4
#define DBG_CMD 8
#if DEBUG
#include <clib/debug_protos.h>
#endif
#if DEBUG & DBG_INFO
#define Info KPrintF
#else
#define Info
#endif
#if DEBUG >= DBG_WARN
#if DEBUG & DBG_WARN
#define Warn KPrintF
#else
#define Warn
#endif
#if DEBUG >= DBG_TRACE
#if DEBUG & DBG_TRACE
#define Trace KPrintF
#else
#define Trace
#endif
#if DEBUG & DBG_CMD
void traceCommand(struct IOStdReq *req);
#else
#define traceCommand
#endif

View File

@ -4,7 +4,8 @@
*/
#ifndef _DEVICE_H
#define _DEVICE_H
#include <dos/filehandler.h>
#include <stdbool.h>
#define OAHR_MANUF_ID 5194
#define BSC_MANUF_ID 2092

View File

@ -621,6 +621,11 @@ static void __attribute__((used, saveds)) begin_io(struct DeviceBase *dev asm("a
Warn("Unknown command %d\n", ioreq->io_Command);
ioreq->io_Error = IOERR_NOCMD;
}
#if DEBUG & DBG_CMD
traceCommand(ioreq);
#endif
if (ioreq && !(ioreq->io_Flags & IOF_QUICK)) {
ReplyMsg(&ioreq->io_Message);
}

View File

@ -564,6 +564,10 @@ void __attribute__((noreturn)) ide_task () {
break;
}
#if DEBUG & DBG_CMD
traceCommand(ioreq);
#endif
ReplyMsg(&ioreq->io_Message);
}
}