Commit Graph

83 Commits

Author SHA1 Message Date
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
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
Tony Kuker
68e0c29d83
Disable the Timer Test #1227 (#1228)
The Timer test isn't reliable on all variants of the Raspberry Pi. This will temporarily comment it out.

When the RPi5 support is being added, this test should be made optional and only triggered when a CLI option is present.
2023-10-09 20:10:46 -05:00
Uwe Seimet
bd9b776c47
Fix block size evaluation (#1212) (#1213)
* Fix block size evaluation (#1212)
2023-10-01 23:50:30 +02:00
Daniel Markstedt
ee658c359d
Clarify docs and error strings for scsimon (#1175)
* Better usage hints in scsimon man page

* In error message, clarify that piscsi needs to be shut down
2023-06-24 13:20:15 -07:00
Tony Kuker
9c5296a65b Update version for next development version 2023-04-22 19:46:26 -05:00
Tony Kuker
ba1d867ad5 Update revision number for release 2023-04-22 19:42:55 -05:00
Daniel Markstedt
3cceb515cd
For HD Product name, use GiB unit from 10,000 Mib and higher. (#1147)
* For HD Product name, use GiB unit from 10,000 Mib and higher.

* Update unit test
2023-04-20 08:38:31 -05:00
Uwe Seimet
07e953fa77
Fixed a potential issue with the unit test order (reserved file cleanup was missing) (#1137)
* Fixed a potential issue with the unit test order

* Updated error handling
2023-03-28 10:21:36 +02:00
Uwe Seimet
2092b35c89
Added optional LDFLAGS in order to control linking, e.g. for faster linking (#1128) 2023-03-24 08:54:05 +01:00
Uwe Seimet
ef6cd97656
Improve OpenVMS/VAX compatibility (issue #1117) (#1123)
* Set TB, PER and DTE bits in read/write error recovery page

* Fixed typo

* Added unit test

* Comment update
2023-03-15 22:38:44 +01:00
nsafran1217
bf97201580
Add support for SCSI-1 CD Drives, .is1 extension (#1109)
* Add SCSI-1 option for scsicd with file extension is1

Update tests

Update documentation with is1 file extension

* Fix tests
2023-02-26 20:52:19 -06:00