---
name: "superio"
section: "9"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/superio/9"
---

# superio(9)

Super I/O bus interface

## NAME

**superio**, **superio\_devid**, **superio\_dev\_disable**, **superio\_dev\_enable**, **superio\_dev\_enabled**, **superio\_find\_dev**, **superio\_get\_dma**, **superio\_get\_iobase**, **superio\_get\_irq**, **superio\_get\_ldn**, **superio\_get\_type**, **superio\_read**, **superio\_revid**, **superio\_vendor**, **superio\_write** – Super I/O bus interface

## SYNOPSIS

**#include \<sys/bus.h\>**

**#include \<dev/superio/superio.h\>**

*uint16\_t*\

**superio\_devid**(*device\_t dev*);

*void*\

**superio\_dev\_disable**(*device\_t dev*, *uint8\_t mask*);

*void*\

**superio\_dev\_enable**(*device\_t dev*, *uint8\_t mask*);

*bool*\

**superio\_dev\_enabled**(*device\_t dev*, *uint8\_t mask*);

*device\_t*\

**superio\_find\_dev**(*device\_t dev*, *superio\_dev\_type\_t type*, *int ldn*);

*uint8\_t*\

**superio\_get\_dma**(*device\_t dev*);

*uint16\_t*\

**superio\_get\_iobase**(*device\_t dev*);

*uint8\_t*\

**superio\_get\_irq**(*device\_t dev*);

*uint8\_t*\

**superio\_get\_ldn**(*device\_t dev*);

*superio\_dev\_type\_t*\

**superio\_get\_type**(*device\_t dev*);

*uint8\_t*\

**superio\_read**(*device\_t dev*, *uint8\_t reg*);

*uint8\_t*\

**superio\_revid**(*device\_t dev*);

*superio\_vendor\_t*\

**superio\_vendor**(*device\_t dev*);

*void*\

**superio\_write**(*device\_t dev*, *uint8\_t reg*, *uint8\_t val*);

## DESCRIPTION

The **superio** set of functions are used for managing Super I/O devices. The functions provide support for raw configuration access, locating devices, device information, and device configuration.

### The controller interface

The **superio\_vendor**() function is used to get a vendor of the Super I/O controller *dev*. Possible return values are SUPERIO\_VENDOR\_ITE and SUPERIO\_VENDOR\_NUVOTON.

The **superio\_devid**() function is used to get a device ID of the Super I/O controller *dev*.

The **superio\_revid**() function is used to get a revision ID of the Super I/O controller *dev*.

The **superio\_find\_dev**() function is used to find a device on the [superio(4)](/superio/4.md) bus, specified by *dev*, that has the requested type and logical device number. Either of those, but not both, can be a wildcard. Supported types are SUPERIO\_DEV\_GPIO, SUPERIO\_DEV\_HWM, and SUPERIO\_DEV\_WDT. The wildcard value for *type* is SUPERIO\_DEV\_NONE. The wildcard value for *ldn* is -1.

### The device interface

The **superio\_read**() function is used to read data from the Super I/O configuration register of the device *dev*.

The **superio\_write**() function is used to write data to the Super I/O configuration register of the device *dev*.

The **superio\_dev\_enable**(), **superio\_dev\_disable**(), and **superio\_dev\_enabled**() functions are used to enable, disable, or check status of the device *dev*. The *mask* parameter selects sub-functions of a device that supports them. For devices that do not have sub-functions, *mask* should be set to 1.

### The accessor interface

The **superio\_get\_dma**() is used to get a DMA channel number configured for the device *dev*.

The **superio\_get\_iobase**() is used to get a base I/O port configured for the device *dev*. The device may expose additional or alternative configuration access via the I/O ports.

The **superio\_get\_irq**() is used to get an interrupt number configured for the device *dev*.

The **superio\_get\_ldn**() is used to get a Logical Device Number of the device *dev*.

The **superio\_get\_type**() is used to get a type of the device *dev*.

## SEE ALSO

[superio(4)](/superio/4.md), [device(9)](/device/9.md), [driver(9)](/driver/9.md)

## AUTHORS

This manual page was written by Andriy Gapon *avg@FreeBSD.org*
