The serial optical link (SOL) device handler is a component of the communication I/O subsystem. The device handler can support one to four serial optical ports. An optical port consists of two separate pieces. The serial link adapter is on the system planar and is packaged with two to four adapters in a single chip. The serial optical channel converter plugs into a slot on the system planar and provides two separate optical ports.
There are two separate interfaces to the serial optical link device handler. The special file /dev/ops0 provides access to the optical port subsystem. An application that opens this special file has access to all the ports, but it does not need to be aware of the number of ports available. Each write operation includes a destination processor ID. The device handler sends the data out the correct port to reach that processor. In case of a link failure, the device handler uses any link that is available.
The /dev/op0, /dev/op1, ..., /dev/opn special files provide a diagnostic interface to the serial link adapters and the serial optical channel converters. Each special file corresponds to a single optical port that can only be opened in Diagnostic mode. A diagnostic open allows the diagnostic ioctls to be used, but normal reads and writes are not allowed. A port that is open in this manner cannot be opened with the /dev/ops0 special file. In addition, if the port has already been opened with the /dev/ops0 special file, attempting to open a /dev/opx special file will fail unless a forced diagnostic open is used.
The SOL device handler interface consists of the following entry points:
sol_close | Resets the device to a known state and frees system resources. |
sol_config | Provides functions to initialize and terminate the device handler, and query the vital product data (VPD). |
sol_fastwrt | Provides the means for kernel-mode users to transmit data to the SOL device driver. |
sol_ioctl | Provides various functions for controlling the device. The valid sol_ioctl operations are:
|
sol_mpx | Provides allocation and deallocation of a channel. |
sol_open | Initializes the device handler and allocates the required system resources. |
sol_read | Provides the means for receiving data. |
sol_select | Determines if a specified event has occurred on the device. |
sol_write | Provides the means for transmitting data. |