From b2abbe60d92d90b83f31eca3878fffd0f51754a3 Mon Sep 17 00:00:00 2001 From: beeanyew Date: Thu, 1 Jul 2021 04:05:43 +0200 Subject: [PATCH] Add TD_GETGEOMETRY support to PiSCSI driver This lets for instance giggledisk properly grab the geometry for drives with no valid RDB, allowing for easier mounting of non-Amiga friendly disks. --- .../piscsi/device_driver_amiga/build2.sh | 2 +- .../piscsi/device_driver_amiga/pi-scsi.device | Bin 2856 -> 2932 bytes .../device_driver_amiga/piscsi-amiga-2.c | 23 ++++++++++++++++-- platforms/amiga/piscsi/piscsi.c | 2 +- platforms/amiga/piscsi/piscsi.rom | Bin 16384 -> 16384 bytes 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/platforms/amiga/piscsi/device_driver_amiga/build2.sh b/platforms/amiga/piscsi/device_driver_amiga/build2.sh index 831fc11..e099aae 100644 --- a/platforms/amiga/piscsi/device_driver_amiga/build2.sh +++ b/platforms/amiga/piscsi/device_driver_amiga/build2.sh @@ -1 +1 @@ -m68k-amigaos-gcc piscsi-amiga-2.c -m68020 -O2 -o pi-scsi.device -m68000 -Wall -Wextra -Wno-unused-parameter -fomit-frame-pointer -nostdlib -nostartfiles +m68k-amigaos-gcc piscsi-amiga-2.c -m68020 -O2 -o pi-scsi.device -Wall -Wextra -Wno-unused-parameter -fomit-frame-pointer -nostdlib -nostartfiles diff --git a/platforms/amiga/piscsi/device_driver_amiga/pi-scsi.device b/platforms/amiga/piscsi/device_driver_amiga/pi-scsi.device index eaac293cec0986949460b8489bbc4337bf78224e..6d511225dc36b6889eadca3f63d78c77b496d06c 100644 GIT binary patch literal 2932 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 Ntg@SLl?B;{UjX^eh5!Hn diff --git a/platforms/amiga/piscsi/device_driver_amiga/piscsi-amiga-2.c b/platforms/amiga/piscsi/device_driver_amiga/piscsi-amiga-2.c index a325acb..5a4e545 100644 --- a/platforms/amiga/piscsi/device_driver_amiga/piscsi-amiga-2.c +++ b/platforms/amiga/piscsi/device_driver_amiga/piscsi-amiga-2.c @@ -93,6 +93,9 @@ uint8_t piscsi_perform_io(struct piscsi_unit *u, struct IORequest *io); uint8_t piscsi_rw(struct piscsi_unit *u, struct IORequest *io); uint8_t piscsi_scsi(struct piscsi_unit *u, struct IORequest *io); +//#define uint32_t unsigned int +//#define uint16_t unsigned short + #define debug(...) #define debugval(...) //#define debug(c, v) WRITESHORT(c, v) @@ -559,6 +562,7 @@ uint16_t ns_support[] = { }; #define DUMMYCMD iostd->io_Actual = 0; break; + uint8_t piscsi_perform_io(struct piscsi_unit *u, struct IORequest *io) { struct IOStdReq *iostd = (struct IOStdReq *)io; struct IOExtTD *iotd = (struct IOExtTD *)io; @@ -566,7 +570,6 @@ uint8_t piscsi_perform_io(struct piscsi_unit *u, struct IORequest *io) { //uint8_t *data; //uint32_t len; //uint32_t offset; - //struct DriveGeometry *geom; uint8_t err = 0; if (!u->enabled) { @@ -589,7 +592,7 @@ uint8_t piscsi_perform_io(struct piscsi_unit *u, struct IORequest *io) { case NSCMD_DEVICEQUERY: { struct NSDeviceQueryResult *res = (struct NSDeviceQueryResult *)iotd->iotd_Req.io_Data; res->DevQueryFormat = 0; - res->SizeAvailable = 16;; + res->SizeAvailable = 16; res->DeviceType = NSDEVTYPE_TRACKDISK; res->DeviceSubType = 0; res->SupportedCommands = ns_support; @@ -620,6 +623,22 @@ uint8_t piscsi_perform_io(struct piscsi_unit *u, struct IORequest *io) { iostd->io_Actual = u->motor; u->motor = iostd->io_Length ? 1 : 0; break; + case TD_GETGEOMETRY: { + struct DriveGeometry *res = (struct DriveGeometry *)iostd->io_Data; + WRITESHORT(PISCSI_CMD_DRVNUMX, u->unit_num); + READLONG(PISCSI_CMD_BLOCKSIZE, res->dg_SectorSize); + READLONG(PISCSI_CMD_BLOCKS, res->dg_TotalSectors); + res->dg_Cylinders = u->c; + res->dg_CylSectors = u->s * u->h; + res->dg_Heads = u->h; + res->dg_TrackSectors = u->s; + res->dg_BufMemType = MEMF_PUBLIC; + res->dg_DeviceType = 0; + res->dg_Flags = 0; + + return 0; + break; + } case TD_FORMAT: case TD_FORMAT64: diff --git a/platforms/amiga/piscsi/piscsi.c b/platforms/amiga/piscsi/piscsi.c index 263fb93..a2ce601 100644 --- a/platforms/amiga/piscsi/piscsi.c +++ b/platforms/amiga/piscsi/piscsi.c @@ -953,7 +953,7 @@ uint32_t handle_piscsi_read(uint32_t addr, uint8_t type) { uint32_t val = piscsi_u32[1]; int32_t r = get_mapped_item_by_address(cfg, val); if (r != -1) { -#ifdef DEBUG_PISCSI +#ifdef PISCSI_DEBUG uint32_t addr = val - cfg->map_offset[r]; char *dosID = (char *)&rom_partition_dostype[rom_cur_partition]; DEBUG("[PISCSI-GET-FS-INFO] Partition DOSType is %c%c%c/%d\n", dosID[0], dosID[1], dosID[2], dosID[3]); diff --git a/platforms/amiga/piscsi/piscsi.rom b/platforms/amiga/piscsi/piscsi.rom index f6cef1ac1475df4d04f8f8d0a575aa267dbddba9..23f014e4675487569a92612415a401609e59f7fc 100644 GIT binary patch delta 2014 zcma)7Z)j6j6#w0qKYdN#>NAOLT8n*6vXG`-6RYc-E0Vsd)2w7AZlW@lkl4HybbYId zR#wbQ7_u@!;lW^Ij4}41j3H$cQ7Mv^A)6mW{IE}B;-^_RMmL6_{ga)Sv@Y%TVJY{V zbI+gOIrrRmZZ(Z*8k=qucXO-OX8JngT;s+fpm)z&$p8~ zw=He!H0tA{msier#*bW#X4RGHcC;!#1#5$R@F0Zf4a+-&7u};UKMUKY+)mshV4GtC zD`-_$C~BF`Z3=SIC`9rVynguIet6}u*pA?iq6TQbmx*T7#YjQ1UCpNic`64)HZe`v>Xh9?UFpv@dh12IXW!UH?S@Jw+J@mZ>PVop zpK!LOQQEaJM%U~v=GOZhyDeu}5-weHH0Qeg5Y;8250<2L;JzS4v%X;n>Y}esS&*l| z3l4;n;4aCU=m@=Hvql%eF`g?_|FQG5L$!u0u*>WBSQqik_ENwQnMm~QXUYw(8`F_L zug9DrS13fs5Wopx6BMu|A#6q(?1ui8bLU|y*dEi`!r*084kmMQzPkh5gGsV=z+BKC zOcJ+f`Le!d$2>yRSF;bkv&8uy^H)Dif*pwD30(Hsi1zByEp54;9*z2Ku0|#t#?kX2 z=j~X<=T`Ae2ELv0B?^%#mGobP|Se9g(6b1J)=k4;XK{y5!O#(YH^0_M8QjTSky zK%~_GTgLB3;%-JGdOMflhn(`A z;Hz7fVgJ#xgH=6CU}ai;!T3-rJysVDIq_#aFLS3oSMx(CMVy&BBr=Haw>IdBtCYAc3@YCSk`pv&{%qO>|}go)Ua8<*QKToc0nI# f@~~sN+Vt+0n-tMSrW=Nx$`1Wzr&FB9HC%oz) delta 1926 zcmb7FZ)_7~7=P}1>u%jyO4~s@mhHCI(sgwme7Cdjxw%D5xKxD;mGxv3yuf}{@j$~Xz2Dv*7pLN)8U z$dMpjYTiq(b#Ifju7{l6=gDh_9r#=KjCS*KjdoeK?YfbF&Al4C6gNl0HaO6jY>b9i#h$0(uJ z$EcN;50V5Au_a7lIZQ!C@wQTI!xdJ)8Qct>O%(KfQ)aJ2IgcFYf=%l1#xONV3iT0Gd{-6W58Jh?0lm8RD-Ek=t{# zu>Mt_U7dCDoR6P=_RCFTb@EvYbY%lk?r-mHhJInW)UmGXqozdS% z*IKXDx$~Wy%;o_k^&|y_2O!6D7+Z323svw7fl*C4u#g_fa{o8QG|j6x*&5880#TaE3R7l( zUyyztS^rrW<8X?nRpbP@$&n4GZ)VN(Pgy>FUE$L|WVt2f?XH~C^Yu|_+<1x2+v346 zJ^e5nm@4#7dpGz9)#S=Ij28Qsrc%-Ra#d%va;|B5{D(1D-u8t-?37`-g%?0zFF^T) z5t7Bzt6TQNCbD+}qu+oAt6*?ri}_g{Ewc{C17t#