Commit Graph

93 Commits

Author SHA1 Message Date
Daniel Markstedt
1919eb34bb Bump software copyright year to 2024 2024-04-23 08:00:58 +09:00
Daniel Markstedt
a6a8cadf21
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-04-13 03:40:53 -07:00
Klaus Kämpf
dd9a3296d4
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-02-27 11:20:22 +09:00
Uwe Seimet
24372ba939 Fix wrong warning about CD-ROM image file size 2024-02-27 11:18:01 +09:00
Uwe Seimet
4ae03e2ec7 Properly close file to be printed (#1428) 2024-02-03 07:51:44 +09:00
Daniel Markstedt
274b93fe27 Update unit tests 2024-01-27 07:22:19 +09:00
Daniel Markstedt
12d43f370d Update unit tests 2024-01-27 07:22:19 +09:00
Daniel Markstedt
040e5532a8 Recognize .cdr and .toast as CD-ROM image file endings 2024-01-27 07:22:19 +09:00
Klaus Kämpf
1121b8d9d6
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-01-18 16:55:38 -08:00
Klaus Kämpf
7cc8df271c DiskCache needs a size
otherwise its constructor assertion (block > 0) will fail.

Fixes #1418

Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>
2024-01-18 13:44:33 +09:00
Uwe Seimet
7a986c84aa Fix remote interface communication issue (broken pipe) (#1415) 2024-01-16 10:56:25 +09:00
Klaus Kämpf
b7f65d33e2
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-01-10 06:36:24 +09:00
Klaus Kämpf
ad5eae93e7
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-01-07 15:06:35 +09:00
Daniel Markstedt
28959aaf97 Revert "scsictl: Create files with binary/JSON or text format protobuf data (#1369)"
This reverts commit abc5c4b9ac.
2023-11-27 09:11:43 +09:00
Uwe Seimet
4d1a10cb6b
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
2023-11-26 13:25:54 +09:00
Uwe Seimet
abc5c4b9ac
scsictl: Create files with binary/JSON or text format protobuf data (#1369) 2023-11-20 07:40:53 +01:00
Uwe Seimet
a7c71e4fbb
Replace system timer by C++ standard time for timeout of 3 s (#1361) 2023-11-16 12:40:10 +01:00
Uwe Seimet
bb602040e2
Improve BSD compile-time compatibility (#1342) 2023-11-16 12:37:50 +01:00
Uwe Seimet
70bcb78d24
Use a standard timer for the DaynaPort delay work-around (#1357)
* Do not use the proprietary system timer for the DaynaPort delay work-around
2023-11-15 07:51:21 +01:00
Uwe Seimet
ec9f83f9df
Improve performance when reading sectors (#1344) 2023-11-15 07:44:46 +01:00
Uwe Seimet
28abbb5034
Temporary fix for compiler issue (#1359)
* Fix bookworm compiler issue

* fix to Docker for workaround

---------

Co-authored-by: Benjamin Krein <superbenk@gmail.com>
2023-11-15 07:36:07 +01:00
Uwe Seimet
98f9292690
NetBSD compatibility: Increase daynaport minimum packet size to 128 bytes (#1334) (#1335)
* NetBSD compatibility: Increase daynaport minimum packet size to 128 bytes
2023-11-14 16:13:14 +01:00
Uwe Seimet
baf89dcf86
Use standard C++ timer for long timeouts (#1327), remove unused code (#1328)
* Replace timer in WaitSignal()

' Remove unused code

* Remove unused file
2023-11-14 16:03:25 +01:00
Uwe Seimet
7fa9abe5a3
Remove fullspec/standard sub-folder (#1324)
* Remove fullspec/standard sub-folder
2023-11-14 15:51:36 +01:00
Uwe Seimet
71780449ff
Move sector sizes lists from DeviceFactory to the respective devices (#1323) 2023-11-14 15:32:46 +01:00
Uwe Seimet
f6d00a0e96
Fix error count calculation (#1356) 2023-11-14 15:16:23 +01:00
Uwe Seimet
f7bc77d978
Add initial IDE setup (#1326) 2023-11-14 15:13:45 +01:00
Uwe Seimet
23e5286267
Fix BSY pin handling in initiator mode (#1312)
* In initiator mode configure BSY as an output pin when BSY is set
2023-11-13 08:40:03 +01:00
Daniel Markstedt
c59a300a97 Update version for next development version 2023-11-11 23:17:47 +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
Uwe Seimet
41bdcd4aed
Issues 1179 and 1182 (#1232)
* Update logging

* Remove duplicate code

* Update unit tests

* Clean up includes

* Merge ProtobufSerializer into protobuf_util namespace

* Precompile regex

* Add const

* Add Split() convenience method, update log level/ID parsing

* Move log.h to legacy folder

* Elimininate gotos

* Fixes for gcc 13

* Update compiler flags

* Update default folder handling

* Use references instead of pointers

* Move code for better encapsulation

* Move code

* Remove unused method argument

* Move device logger

* Remove redundant to_string

* Rename for consistency

* Update handling of protobuf pointers

* Simplify protobuf usage

* Memory handling update

* Add hasher
2023-10-15 08:38:15 +02:00