DaynaPORT SCSI/Link Linux Driver

davewongillies1 pts0 comments

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...

linux driver daynaport scsi kernel readme

Related Articles