RP(4)

πŸ’– RP(4) β€” the rp driver πŸ’–

okay bestie, gather round, because this is the Kernel Interfaces Manual entry for rp(4), aka the driver that gives your machine a whole lil army of serial ports and does it with main character energy. no cap. πŸ¦‹


✨ NAME ✨

rp β€” driver for Comtrol RocketPort Intelligent Serial Port Cards πŸš€


🌸 SYNOPSIS 🌸

device rp

and for ISA cards, you must specify the port address in /boot/device.hints:

hint.rp.0.at="isa"
hint.rp.0.port="0x100"

like yes you literally have to, it's not optional, it's giving mandatory πŸ’…


πŸŽ€ DESCRIPTION πŸŽ€

so this driver is a kernel device driver for the RocketPort and RocketPort RA serial boards. these boards hand you 8, 16, or 32 high-speed serial ports, and the way they do it?? they only need 68 bytes of I/O space for all 8, 16, or 32 of those ports. and they do not require an interrupt channel. obsessed, honestly. 😌

this driver supports up to four RocketPort or RocketPort RA boards in one machine at the same time. and if you're running four 32-port RocketPort boards, you can put as many as 128 intelligent serial ports on your system. 128!! that's so many bestie 🫢

the rp driver supports these speeds, in this exact order:

50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 7200, 14400, 57600, 76800, 115200, and 230400.

heads up: you must use termios(4), not the old style ioctl interface, if you wanna use the non-traditional speeds. the old way just won't do it, periodt.

and one more thing β€” an open on the rp driver will block until carrier is present, unless O_NONBLOCK or CLOCAL is set. so if you're just sitting there waiting, that's why. it's not ghosting you, it's the carrier. 😭


πŸ”§ HARDWARE CONFIGURATION πŸ”§

the first RocketPort or RocketPort RA card needs a 68-byte contiguous block of I/O addresses, starting at one of these:

0x100h, 0x140h, 0x180h, 0x200h, 0x240h, 0x280h, 0x300h, 0x340h, 0x380h

the second, third, and fourth RocketPort cards only need a 64-byte contiguous block of I/O addresses, starting at one of those same address ranges. (slay, they're low maintenance πŸ’…)

the I/O address range used by any of the RocketPort cards must not conflict with any other cards in the system β€” and yes, that includes other RocketPort cards. the starting range of the I/O ports used by each card has to match the I/O address specified in /boot/device.hints.

so here's the part that bites people: since the first RocketPort uses 68 I/O addresses, if the first card is set to use an I/O block starting at 0x100, it will occupy the I/O ports between 0x100 and 0x143. which means the second, third, or fourth RocketPort board may not use the block of addresses starting at 0x140, because the first three I/O addresses of that range are already used by the first board. 🚨 this is an important point to keep in mind. like genuinely. write it on your hand.

if you have two ISA cards, one installed at 0x100 and the second installed at 0x180, then you should add the following to /boot/device.hints:

hint.rp.0.at="isa"
hint.rp.0.port="0x100"
hint.rp.1.at="isa"
hint.rp.1.port="0x180"

🧚 the DIP switches 🧚

the configuration of the RocketPort cards is done via the set of 8 DIP switches, labeled SW1 on the RocketPort card:

+-------------------------------+
| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
+-------+-------+---------------+
| Unused| Card  | I/O Port Block|
+-------------------------------+

DIP switches 7 and 8 are unused, and must be left on. do not touch them. they're just vibing.

DIP switches 6 and 5 identify the card number of each RocketPort card. the first card installed in the system must have its DIP switches set as card number one; the second card installed in the system must have its DIP switches set as card number two; and so on. as shipped from the factory, DIP switches 6 and 5 are both on by default, indicating that this is the first card installed on the system:

DIP Switches
6    5
===================
On   On   First Card
On   Off  Second Card
Off  On   Third Card
Off  Off  Fourth Card

DIP switches 4, 3, 2, and 1 indicate the I/O address range used by the first RocketPort card. if there are more than one RocketPort cards installed in a system, the second, third and fourth RocketPort cards must also be set to the I/O address range used by the first RocketPort card β€” all cards must have these DIP switches set identically for proper operation. as shipped from the factory, DIP switch 4 is on, and switches 3, 2, and 1 are off by default, indicating an I/O address range used by the first card which starts at 0x180 and extends to 0x1C3.

DIP Switches         I/O Address Range
4    3    2    1     Used by the First Card
=====================================
On   Off  On   Off   100-143
On   Off  Off  On    140-183
On   Off  Off  Off   180-1C3
Off  On   On   Off   200-243
Off  On   Off  On    240-283
Off  On   Off  Off   280-2C3
Off  Off  On   Off   300-343
Off  Off  Off  On    340-383
Off  Off  Off  Off   380-3C3

πŸ“ FILES πŸ“

  • /dev/ttyR[0-4][0-9a-f] β€” your devices, your babies πŸ“

πŸ‘‘ AUTHORS πŸ‘‘

Theodore Ts'o <tytso@mit.edu> β€” icon, legend, wrote the thing πŸ’œ

this driver was written under contract for Comtrol Corporation. for dealer, distributor and other information regarding Comtrol RocketPort, contact Comtrol Corporation at (800) 926-6876 or send email to info@comtrol.com. to report bugs for this driver, please send email to bug-bsdi-rocketport@comtrol.com.


πŸ’€ BUGS πŸ’€

okay so here's the one thing that's not slaying: if incoming software flow control is enabled on a 486 or Pentium machine, and the flow control is very heavily exercised, on rare occasions a character will get dropped. 😭 this problem does not occur on a 386, and it is not currently known whether the bug is in the rp driver or in the BSD/OS tty layer. so like… it's a mystery, bestie. a 486-era mystery. πŸ”


and that's the whole page, fr fr. this one shipped from Debian, dated November 15, 1995, and it lives at RP(4) in the manual. go forth and configure your serial ports responsibly πŸŽ€βœ¨πŸ’–

πŸ“¦ where this page comes from