Parallel SCSI and vpo(4) driver

I am running 14.1-RELEASE-p5 (amd64) and seeking to retrieve some unique data from a old device (Iomega ZIP 100) with a parallel SCSI interface that would previously have been grabbed by the vpo(4) driver, which was (for very understandable reasons) deprecated in 13.0. (commit)

What would be the best way to accomplish this? Are there likely to have been changes to the codebase that would make it impossible or difficult to compile a custom kernel with the relevant source files re-included? Or, since the plan is to use a PCIe express card anyway, would it perhaps be feasible just to pass the PCI device through to a Bhyve VM with an older FreeBSD or Linux?

Any suggestions would be appreciated for how to deal with this admittedly quite obscure problem!
 
Radical suggestion: Find an old version of FreeBSD that had a working vpo driver, put it onto an install CD (or USB stick or DVD or whatever install media you enjoy). Find a blank boot disk. Disconnect your system from the internet, install the old version, copy the data (onto USB sticks if necessary), remove the temporarily blank boot disk, go back to normality.

I have no idea where old installs of FreeBSD are archived, but that should be easy to find.
 
Get an older SCSI card, Adaptec (ahc(4)) for example? Instead of the parallel to SCSI adapter? They're probably ISA or PCI though, modern systems don't have those any more.
 
I think we are talking about a device that talks SCSI over parallel port. A SCSI controller won't do.

You can't expect that you can compile the old driver in newer releases.

Just downgrade a 14.1 to 13.0 with `make world`.
 
if you have an ufs system you can boot a 12.4 install image, drop to shell and you can dd the discs to a file on the existing ufs
12.x may not be able to write on 14.x unless you use openzfs from ports but this kinda complicates the stuff

or you can drop to shell and configure network manually and scp them somewhere
or save to an external drive, etc
 
Thanks for all the great ideas and constructive input.
if you have an ufs system you can boot a 12.4 install image, drop to shell and you can dd the discs to a file on the existing ufs
12.x may not be able to write on 14.x unless you use openzfs from ports but this kinda complicates the stuff
The 14.1 system is UFS so this might be a rather ingenious solution, though a custom built kernel would seemingly still be required [?].
I think we are talking about a device that talks SCSI over parallel port. A SCSI controller won't do.
Yes, it's the ZIP 100 with a 25-pin parallel port and an integrated Parallel-to-SCSI controller. Unfortunately, an ADAPTEC SCSI card or similar wouldn't be the right thing.
The USB models are a bit harder to come by (and more expensive), whereas I already have access to a parallel-port one. Still, the USB could be a plan C (?).
 
I am running 14.1-RELEASE-p5 (amd64) and seeking to retrieve some unique data from a old device (Iomega ZIP 100)
compile a custom kernel with the relevant source files re-included? Or, since the plan is to use a PCIe express card anyway, would it perhaps be feasible just to pass the PCI device through to a Bhyve VM with an older FreeBSD or Linux?
If the case is to retrieve some date from the ZIP drive (not to use permanently) why complicating the procedure? Grab a 12.4 installation media [1], boot, drop to "Live CD", mount ZIP drive, mount 14.1, copy files.

[1] https://archive.freebsd.org/old-releases/ISO-IMAGES/
 
there is a vpo.ko module which you can kldload
even if the module is missing from the install disk it should still has to be in the kernel distribution kernel.txz or maybe base.txz (cant recall) so you can extract it and load it after
 
Quite right. That would definitely be the easiest way to do it. Some things are just too obvious…

However, the question remains of whether the driver would be present by default on the install medium. Seemingly it's commented out in the GENERIC config for 12.4:
Code:
# Parallel port
device        ppc
device        ppbus        # Parallel port bus (required)
device        lpt        # Printer
device        plip        # TCP/IP over parallel
device        ppi        # Parallel port interface device
#device        vpo        # Requires scbus and da
 
there is a vpo.ko module which you can kldload
even if the module is missing from the install disk it should still has to be in the kernel distribution kernel.txz or maybe base.txz (cant recall) so you can extract it and load it after
OK, thanks – that answers my last question then. Guess the only way is to try and see how I get on.
 
it does not have to be in generic
just load the binary module
it has to be on the boot disk either in /boot/kernel or in kernel.txz
 
Easiest option: buy a USB ZIP on ebay. It's $50 +/-. It works. It's what I did to archive data from some ZIP disks a friend found while cleaning out her desk upon retirement.

Otherwise, I'd boot a USB stick with a FreeBSD 4.12 image (if that's possible). That's the last time I've seen this driver work. Maybe it works with newer versions of the kernel, maybe not. I'd bet a nickel against it ever working on amd64. I'd also try FreeBSD 7 or 8 if that's too old for the system that you have. If you already have the 12.4 image then go for it, but if that fails, I'd jump back to FreeBSD 7 or 8 next.
 
I think for bhyve you'll need to do some hacking to allow it to access the real parallel port. Right now I don't think there's any parallel port support, emulated or passthrough, in Bhyve. Otherwise, that might be an option. I think the timings for the parallel port are fat and sloppy enough that the emulation layer wouldn't mess it up. But doing this would be programming project, since at the very least you'd likely need to intercept the inb/outb operations and do them to the real hardware directly. And it looks like you'd have to emulate the pci variant by passing access to it through to the real hardware. And I'm not sure if there's interrupts to cope with. It would be a fun project...
 
I'd also wager that the vpo sources will still build on -current, which would be easier than bhyve hacking. It's likely to produce identical results to 12.4.
% mkdir head/sys/modules/vpo
% cp stable-12/sys/modules/vpo/Makefile head/sys/modules/vpo
% cp stable-12/sys/dev/ppbus/immio.c head/sys/dev/ppbus
% cp stable-12/sys/dev/ppbus/vpo* head/sys/dev/ppbus
Is almost enough to build it. I needed to apply the following diff to get it building. I suspect the same will work in 14.1. I have no ability to test this. Good luck. I have a strong suspicion that it's busted in 12.4, but if not then maybe with the following diff you can get it building.
diff -ur ../stable-12/sys/dev/ppbus/vpo.c sys/dev/ppbus/
--- ../stable-12/sys/dev/ppbus/vpo.c 2021-09-07 10:07:37.950521000 -0600
+++ sys/dev/ppbus/vpo.c 2024-10-11 09:39:51.169815000 -0600
@@ -419,8 +419,6 @@

/* The ZIP is actually always polled throw vpo_action(). */
}
-
-static devclass_t vpo_devclass;

static device_method_t vpo_methods[] = {
/* device interface */
@@ -436,6 +434,6 @@
vpo_methods,
sizeof(struct vpo_data),
};
-DRIVER_MODULE(vpo, ppbus, vpo_driver, vpo_devclass, 0, 0);
+DRIVER_MODULE(vpo, ppbus, vpo_driver, 0, 0);
MODULE_DEPEND(vpo, ppbus, 1, 1, 1);
MODULE_DEPEND(vpo, cam, 1, 1, 1);
 
Not directly related but are there any scsi-2 pcie cards supported under FreeBSD-14 or later? Any recommendations? Thanks!
 
Brief update on this: many attempts with Linux and all the BSDs, both on bare metal and in VMs with PCIe passthrough, did not yield any results. The closest I got was (surprisingly) with an Ubuntu Live CD, but there is every indication that the disk was corrupt (though the drive itself was fine). Oh well. Thanks to everyone for the help; it was a great learning experience.
 
Back
Top