GitHub - jflitton/daynaport-scsilink-linux-driver: Linux kernel drivers for the DaynaPORT SCSI/Link network adaper · GitHub
/" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
jflitton
daynaport-scsilink-linux-driver
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>11 Commits<br>11 Commits
lib
lib
linux-2.0
linux-2.0
linux-2.4
linux-2.4
linux-7.0
linux-7.0
reference
reference
.gitignore
.gitignore
COPYING
COPYING
README.md
README.md
make-release.sh
make-release.sh
View all files
Repository files navigation
daynaport-scsilink-linux-driver
A loadable Ethernet driver for the DaynaPORT SCSI/Link SCSI-to-Ethernet<br>adapter, as emulated by ZuluSCSI, BlueSCSI V2,<br>and PiSCSI.
It binds to the SCSI processor device the adapter presents and exposes it as a<br>standard Ethernet interface (e.g. eth0). Each<br>driver builds out-of-tree as a loadable module against its kernel's source.
The Linux SCSI and networking subsystems were rewritten many times across the<br>2.0 → 7.x span, so a single source file can't span them. Instead the repo holds<br>one self-contained driver per kernel era , each in its own directory, sharing<br>only what is genuinely version-independent (the DaynaPORT protocol logic).
How it works
The adapter presents on the SCSI bus as a processor device. The driver binds to<br>it and moves Ethernet frames over ordinary SCSI commands — WRITE(6) to send,<br>READ(6) to receive — exposing a normal eth0-style interface to the network<br>stack. A handful of device traits shape every version of the driver:
No receive interrupt. Nothing on the bus signals an inbound frame, so<br>receive has to poll with READ(6) commands. Transmit never polls — the stack<br>hands the driver a frame only when there is one to send.
One command at a time. The adapter has a single command slot and cannot<br>transmit and receive at once, and its RX FIFO is small — so the driver must<br>arbitrate the bus between sending and polling. Lean too hard either way and the<br>other side stalls (upload throughput vs. draining inbound before the FIFO<br>overflows).
Productive reads run back-to-back. A READ that returns frames is followed<br>immediately by the next, so a live download runs at the speed of the SCSI<br>round-trip; only empty polling — probing when nothing is waiting — needs<br>pacing. The receive ceiling is set by the per-READ round-trip and the adapter,<br>not by how fast the host polls.
Two-frame batch cap on SCSI2SD targets. ZuluSCSI and BlueSCSI are both based<br>on SCSI2SD, whose firmware caps a batch at 2 frames; requesting more per READ<br>gains nothing on those targets.
How each driver tunes this — poll-cadence knobs, the TX/RX arbitration limit, and<br>whether parameters are writable at runtime — lives in the per-kernel README, since<br>it depends on what each era's kernel allows.
Supported kernels
Kernel target<br>Directory
Linux 2.0.x<br>linux-2.0/
Linux 2.4.x<br>linux-2.4/
Linux 7.x<br>linux-7.0/
Repository layout
├── README.md # this file<br>├── COPYING # GPLv2 — shared, vendored into each release tarball<br>├── lib/ # shared, version-independent C<br>│ └── daynaport.h # protocol constants + callback-based RX frame parser<br>├── reference/ # protocol documentation (version-independent)<br>│ ├── daynaport.md # DaynaPORT opcode / framing reference<br>│ └── SLINKCMD.TXT # Dayna's original SCSI/Link command set<br>├── make-release.sh # package one target into a self-contained tarball<br>├── linux-2.0/ # the Linux 2.0.x driver<br>│ ├── scsilink.c<br>│ ├── Makefile<br>│ ├── install.sh<br>│ ├── README.md<br>│ └── CHANGES<br>├── linux-2.4/ # the Linux 2.4.x driver<br>│ ├── scsilink.c<br>│ ├── Makefile<br>│ ├── install.sh<br>│ ├── README.md<br>│ └── CHANGES<br>└── linux-7.0/ # the Linux 7.x driver<br>├── scsilink.c<br>├── Makefile<br>├── install.sh<br>├── README.md<br>└── CHANGES
The protocol logic — opcode/framing constants and the RX record parser —<br>lives once in lib/daynaport.h. It is kernel-API-free and<br>C89-clean, so the same header compiles under gcc 2.7.x for the 2.0 driver and a<br>modern toolchain for later ports; each driver supplies its own...