Commit Graph

94 Commits

Author SHA1 Message Date
Daniel Markstedt aec3d8d00a Update version number for release 2024-05-01 16:15:58 +09:00
Daniel Markstedt 09a12a82fe Bump software copyright year to 2024 2024-05-01 16:15:44 +09:00
Daniel Markstedt e3cdd105d2 Revert fixes for DEC vendor specific pages and CD-ROM block size changing (#1451)
* Revert "Don't ResizeCache on sector change if no filename is defined (#1438)"

This reverts commit dd9a3296d4.

* Revert "Add ModeSense page 0x25 (DEC special function control page) (#1412)"

This reverts commit 1121b8d9d6.

* Revert "DiskCache needs a size"

This reverts commit 7cc8df271c.

* Revert "Honor sector size change via ModeSelect6 in scsicd (#1406)"

This reverts commit b7f65d33e2.

* Revert "Multiple fixes for ModeSelect (#1405)"

This reverts commit ad5eae93e7.
2024-05-01 16:15:44 +09:00
Klaus Kämpf f0640afaac Don't ResizeCache on sector change if no filename is defined (#1438)
* Add tests for issue#1426

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

* add test without medium

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

* Don't resize DiskCache without a file

DiskCache computes its size from a file.
Skip ResizeCache Without file (i.e. 'empty' CD)

Fixes #1426

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>
2024-05-01 16:15:43 +09:00
Uwe Seimet a2487302db Fix wrong warning about CD-ROM image file size 2024-05-01 16:15:43 +09:00
Uwe Seimet a8dc184845 Properly close file to be printed (#1428) 2024-05-01 16:15:43 +09:00
Daniel Markstedt 31b793a9cb Update unit tests 2024-05-01 16:15:43 +09:00
Daniel Markstedt 4d1eb9ac2a Update unit tests 2024-05-01 16:15:43 +09:00
Daniel Markstedt 888cbd085e Recognize .cdr and .toast as CD-ROM image file endings 2024-05-01 16:15:43 +09:00
Klaus Kämpf 28c1741736 Add ModeSense page 0x25 (DEC special function control page) (#1412)
* Add ModeSense page 0x25 (DECSpecialFunctionControlPage)

VAXServer 3100 (CPU KA41-E) console firmware issues ModeSense(6)
page 0x25 when probing for disks. A disk won't be recognized if
this returns an error.

The DEC SCSI specification[1], section 8.5 documents this page.

[1] https://manx-docs.org/collections/antonio/dec/dec-scsi.pdf

Fixes #1410

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>
2024-05-01 16:15:43 +09:00
Klaus Kämpf 70dfadeb1b DiskCache needs a size
otherwise its constructor assertion (block > 0) will fail.

Fixes #1418

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>
2024-05-01 16:15:43 +09:00
Uwe Seimet e27d7af4b9 Fix remote interface communication issue (broken pipe) (#1415) 2024-05-01 16:15:43 +09:00
Klaus Kämpf 28a43b3390 Honor sector size change via ModeSelect6 in scsicd (#1406)
* Make ModeSelect() non-const

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

* Implement ModeSelect for scsicd

and honor sector size setting.

DEC's VMS can't handle 2k sector sizes and uses ModeSelect6 to set the
sector size to 512 bytes.

Fixes #1397

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

* Test sector size setting via ModeSelect in SCSICD

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

* Re-calculate total blocks when sector size changes

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

* Reset CD data tracks after sector size change

The track calculation is based on sector size and must be reset after
change of sector size.

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

* resize cache after change of sector size

The disk cache is based on sector size and must be resized when the
sector size changes.

Disk::ResizeCache needs a `raw` parameter, make this value accessible
from the current cache.

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

* Make GetRawMode const

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

---------

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>
2024-05-01 16:15:43 +09:00
Klaus Kämpf ef99c7bf6b Multiple fixes for ModeSelect (#1405)
* Allow 'empty' ModeSelect6

tl;dr

Treat a computed length of 0 as `has_valid_page_code`.

Details:

The SRM console (aka 'BIOS') of DEC Alpha sends an empty
ModeSelect6 with the following data:
~~~
ModeSelect6, CDB $151000000c00
~~~

That makes 12 byte(s) as follows
~~~
  0  1  2  3   4   5  6  7   8   9 10 11
 00 00 00 08  00  00 00 00  00  00 02 00
~~~

decoding it (accoring to [1], Section 8.3.3, Table 94) gives us

Mode Data Length 0
Medium Type      0
Device-specific  0
Block desc len   8

Density Code     0
Number of blks   0
Reserved         0
Block length     512

`scsi_command_util::ModeSelect` computes
~~~
offset = 4 + buf[3];
~~~

giving 12 and

~~~
length -= offset;
~~~

giving 0.

Thus it never enters the `while` loop and `has_valid_page_code` stays
`false`, raising an error.

[1] [Small Computer System Interface - 2 rev 10L.pdf](https://dn790004.ca.archive.org/0/items/SCSISpecificationDocumentsSCSIDocuments/Small%20Computer%20System%20Interface%20-%202%20rev%2010L.pdf)

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

* Allow ModeSelect with page code 1

OpenVMS Alpha (the operating system, not the SRM BIOS) uses
ModeSelect6 with a page code of 1.

The semantics are unknown, just accepting it works for me.

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>

* Fix page length computation in ModeSelect

tl;dr

The 'skip to next ModeSelect page' computation was off-by-one, either not
taking the page code itself into account or missing the fact that the
page length is given as `n - 1`.

Fix:

Add 1 to the computed length.

Details:

OpenVMS Alpha sends a ModeSelect6 as follows
~~~
command:

ModeSelect6, CDB $151000001900

payload:

 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
00 00 00 08 00 00 00 00 00 00 02 00 01 0a 24 00 00 00 00 00 00 00 00 00 00
~~~

This translates to (accoring to [1], Section 8.3.3)

~~~
Mode Data Length 0
Medium Type      0
Device-specific  0
Block desc len   8
~~~

with the following offset / length computation _before_ the `while` loop
~~~
offset = 12
length = 13
~~~

The first payload section is
~~~
 4  5  6  7  8  9 10 11
00 00 00 00 00 00 02 00
~~~

translating to

~~~
Density Code     0
Number of blks   0
Reserved         0
Block length   0x200 512
~~~

Then follows a pagecode 1 as
~~~
12 13 14 15 16 17 18 19 20 21 22 23 24
01 0a 24 00 00 00 00 00 00 00 00 00 00
~~~

translating to
~~~~
Page code        1
Page length -1  10
Mode parameters 24 00 00 00 00 00 00 00 00 00 00
~~~

computing (inside the `while` loop, as `// Advance to the next page`)

~~~
size =  10 + 2 = 12
~~~

followed by new `offset` and `length` values

~~~
offset = 25
length = 1
~~~

So it stays in the `while` loop (and has a larger-than-buffer `offset`
value)

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>
2024-05-01 16:15:43 +09:00
Daniel Markstedt 5f0aea451e Revert "scsictl: Create files with binary/JSON or text format protobuf data (#1369)"
This reverts commit abc5c4b9ac.
2024-05-01 16:15:43 +09:00
Uwe Seimet 432a0fd491 Fix missing logging for a LUN when the LUN is explicitly specified (#1379)
* Fix missing logging for a LUN when the LUN is explicitly specified

* Do not suppress controller messages when LUN is specified

* Fix misleading logging for DaynaPort
2024-05-01 16:15:43 +09:00
Uwe Seimet 4e3df76fa8 scsictl: Create files with binary/JSON or text format protobuf data (#1369) 2024-05-01 16:15:43 +09:00
Uwe Seimet 67a3bf2227 Replace system timer by C++ standard time for timeout of 3 s (#1361) 2024-05-01 16:15:42 +09:00
Uwe Seimet 5f24e80a9c Improve BSD compile-time compatibility (#1342) 2024-05-01 16:15:42 +09:00
Uwe Seimet 7372996cf8 Use a standard timer for the DaynaPort delay work-around (#1357)
* Do not use the proprietary system timer for the DaynaPort delay work-around
2024-05-01 16:15:42 +09:00
Uwe Seimet d1166ce13e Improve performance when reading sectors (#1344) 2024-05-01 16:15:42 +09:00
Uwe Seimet 208b459849 Temporary fix for compiler issue (#1359)
* Fix bookworm compiler issue

* fix to Docker for workaround

---------

Co-authored-by: Benjamin Krein <superbenk@gmail.com>
2024-05-01 16:15:42 +09:00
Uwe Seimet d1936e9f53 NetBSD compatibility: Increase daynaport minimum packet size to 128 bytes (#1334) (#1335)
* NetBSD compatibility: Increase daynaport minimum packet size to 128 bytes
2024-05-01 16:15:42 +09:00
Uwe Seimet 31be1b3e8f Use standard C++ timer for long timeouts (#1327), remove unused code (#1328)
* Replace timer in WaitSignal()

' Remove unused code

* Remove unused file
2024-05-01 16:15:42 +09:00
Uwe Seimet 6a1e0f8669 Remove fullspec/standard sub-folder (#1324)
* Remove fullspec/standard sub-folder
2024-05-01 16:15:42 +09:00
Uwe Seimet a516544d98 Move sector sizes lists from DeviceFactory to the respective devices (#1323) 2024-05-01 16:15:42 +09:00
Uwe Seimet 41fb8db6dd Fix error count calculation (#1356) 2024-05-01 16:15:42 +09:00
Uwe Seimet 89528b436c Add initial IDE setup (#1326) 2024-05-01 16:15:42 +09:00
Uwe Seimet a7f062a0ad Fix BSY pin handling in initiator mode (#1312)
* In initiator mode configure BSY as an output pin when BSY is set
2024-05-01 16:15:42 +09:00
Daniel Markstedt cd4d630544 Update revision number for release 20231101 2023-11-11 23:14:39 +09:00
Uwe Seimet bd30073cb0
Fix daynaport statistics read count calculation (#1336) 2023-11-11 09:56:52 +01:00
Uwe Seimet a164340179
Reduce logging in controller (#1332) 2023-11-10 15:47:43 +01:00
Kamel Makhloufi 9ce1bce592 Updated french translation 2023-11-10 23:40:22 +09:00
Uwe Seimet 979d25ae76
Add missing time unit (#1329) 2023-11-10 11:45:40 +01:00
Uwe Seimet f90f8eaf4e
Fix daynaport emulation regression (#1306) (#1318) 2023-11-09 00:39:00 +01:00
Uwe Seimet 5542fa9e7c
Re-add CONNECT_TYPE_CONNECT_TYPE_AIBOM and CONNECT_TYPE_GAMERNIUM (#1315) (#1317)
* Re-add CONNECT_TYPE_CONNECT_TYPE_AIBOM and CONNECT_TYPE_GAMERNIUM
2023-11-08 13:27:49 +01:00
Uwe Seimet 0ab2f20a00
Fix MESSAGE OUT handling for initiator mode (#1283) (#1284)
* Fix MESSAGE OUT handling

* Update logging

* Add assertion
2023-11-08 11:25:35 +01:00
Uwe Seimet 616e11ebe2
Only build scsidump when building for the FULLSPEC board (#1285) (#1286)
* Only build scsidump when building for the FULLSPEC board

* Only install scsidump manpage when building for the FULLSPEC board

* Only install scsidump binary when building for the FULLSPEC board

* Revert debug optimization back to -O0, -Og omits some information
2023-11-08 00:26:07 +01:00
Uwe Seimet 39dd1d38a2
Fix assertion when creating a removable media drive without filename (#1308) 2023-11-05 09:11:53 +01:00
Uwe Seimet 8cb4105409
Fix SonarQube issues (#1276)
* Fix SonarQube issues

* Fix error handling when target ID for INQUIRY is missing
2023-11-01 12:53:05 +01:00
Uwe Seimet 7bbcf59c76
scsictl shall accept generic key/value pairs for options that take parameters (#1240) (#1274)
* scsictl accepts generic key/value pairs for options that take parameters
2023-10-31 09:02:28 +01:00
Uwe Seimet 8bd06ea5cd
Improve how commands are internally executed (#1247)
* Improve how commands are internally executed
* Use const CommandContext for execution
* Update error handling
* Fix SonarQube issues
* Remove duplicate code
* Use mutex instead of atomic_bool
* Add hasher
* Add param_map
* Do not log unknown operations as an error for backward/foward compatibility
2023-10-30 13:57:46 +01:00
Uwe Seimet b7cb23e391
Add statistics and make scsictl accept generic key/value parameters (#1237/#1238) (#1262)
* Add statistics and make scsictl accept generic key/value parameters
2023-10-30 13:32:45 +01:00
Uwe Seimet 8f45e4f491
Add options to only run INQUIRY and to scan the bus to scsidump (#1092) (#1261)
* Add options to only run INQUIRY and to scan the bus to scsidump
2023-10-30 11:34:07 +01:00
Uwe Seimet c78ba80088
Move default device parameters from DeviceFactory to the respective devices #1257 (#1259)
* Move default parameter handling
2023-10-30 11:24:18 +01:00
Uwe Seimet d6116bf5c2
Remove unused duplicate code dealing with MODE SELECT (#1268) (#1269)
* Remove unused code
2023-10-29 13:01:12 +01:00
Uwe Seimet 43088ab3bc
Remove non-working Banana Pi code (#1252)
* Remove non-working Banana Pi code

* Remove SonarQube suppressions which can be resolved by a code update

* Update device detection
2023-10-22 17:29:26 +02:00
Uwe Seimet 2acb742043
Fix output formatting (#1254) 2023-10-22 16:19:40 +02:00
Uwe Seimet 02d18b3359
Do not write data when executing VERIFY10/VERIFY16 (#1250) 2023-10-22 16:18:33 +02:00
Uwe Seimet aa927cb504
Move top-level .cpp files into their respective folders (#1249)
* Update Makefile, move top-level .cpp files

* Move top-level .cpp files into their respective folders
2023-10-16 18:27:18 +02:00