PPC(4)

πŸ’– PPC(4) β€” the parallel port chipset driver, bestie edition πŸ’–

okay so this is the ppc page from the Kernel Interfaces Manual (section 4, kernel interfaces, iykyk) β€” and yeah it's from the Debian distro of this manpage, dated March 5, 1998, we'll get to that at the end πŸŽ€


✨ NAME ✨

ppc β€” the Parallel Port Chipset driver πŸ–¨οΈβœ¨


🌸 SYNOPSIS 🌸

device ppc

In /boot/device.hints:

hint.ppc.0.at="isa"
hint.ppc.0.irq="7"

For one or more PPBUS busses:

device ppbus

πŸ¦‹ DESCRIPTION πŸ¦‹

So the ppc driver is the low-level support girlie for a whole bunch of parallel port chipsets, working underneath the ppbus(4) system. She's down there in the trenches fr fr πŸ’…

During the probe phase, ppc goes around detecting parallel port chipsets and initializing private data according to their operating mode: COMPATIBLE, NIBBLE, PS/2, EPP, ECP and other mixed modes. And if a mode gets provided at startup through the flags variable of the boot interface, then the operating mode of the chipset is forced according to flags and whatever modes the hardware actually supports. no cap πŸ‘‘

During the attach phase, ppc allocates a ppbus structure, initializes it, and calls the ppbus attach function. it's giving main character energy tbh 🌟

⭐ Supported flags ⭐

  • bits 0-3: chipset forced mode(s) πŸ‘‡
PPB_COMPATIBLE  0x0     /* Centronics compatible mode */
PPB_NIBBLE      0x1     /* reverse 4 bit mode */
PPB_PS2         0x2     /* PS/2 byte mode */
PPB_EPP         0x4     /* EPP mode, 32 bit */
PPB_ECP         0x8     /* ECP mode */
  • And any mixed values, bestie β€” mix and match, she's flexible πŸ’–
  • bit 4: EPP protocol (0 EPP 1.9, 1 EPP 1.7)
  • bit 5: activate IRQ (1 IRQ disabled, 0 IRQ enabled) β€” yes the polarity is like that, don't come for me 😭
  • bit 6: disable chipset specific detection
  • bit 7: disable FIFO detection

🌈 Supported chipsets 🌈

Some parallel port chipsets are explicitly supported, meaning detection and initialisation code was written according to their datasheets. obsessed with the diligence honestly 🫢

  • SMC FDC37C665GT and FDC37C666GT chipsets
  • Natsemi PC873xx-family (PC87332 and PC87306)
  • Winbond W83877xx-family (W83877F and W83877AF)
  • SMC-like chipsets with mixed modes (see ppbus(4))

🧚 Adding support to a new chipset 🧚

You may want to add support for the newest chipset your motherboard was sold with β€” like, she deserves to be seen too πŸ’œ

For the ISA bus, just retrieve the specs of the chipset and write the corresponding ppc_mychipset_detect() function. Then add an entry to the general purpose ppc_detect() function. that's it, that's the whole vibe ✨

Your ppc_mychipset_detect() function should ensure that if the mode field of the flags boot variable is not null, then:

  • the operating mode is forced to the given mode, and
  • no other mode is available, and
  • the ppb->ppb_avm field contains the available modes of the chipset.

periodt πŸ’…


πŸ‘€ SEE ALSO πŸ‘€

ppbus(4), ppi(4), device.hints(5)


πŸŽ€ HISTORY πŸŽ€

The ppc manual page first appeared in FreeBSD 3.0. a true icon, an OG, we stan a legend πŸ‘‘


🫢 AUTHORS 🫢

This manual page was written by Nicolas Souchu. thank you for your service, king πŸ«‘πŸ’–


πŸ’€ BUGS πŸ’€

The chipset detection process may corrupt your chipset configuration. 😭

Not me warning you about this β€” you may disable chipset specific detection by using the above flags (bit 6, bestie, go look πŸ‘†). Protect your chipset, protect your peace 🌸


and that's the whole page, fr fr πŸ¦‹ this one came from Debian, with a date of March 5, 1998 β€” vintage, iconic, timeless. mwah πŸ’‹βœ¨

πŸ“¦ where this page comes from