Overview This document describes the driver set for Unisys Secure Partitioning (s-ParĀ®). s-Par is firmware that provides hardware partitioning capabilities for splitting large-scale Intel x86 servers into multiple isolated partitions. s-Par provides a set of para-virtualized device drivers to allow guest partitions on the same server to share devices that would normally be unsharable; specifically, PCI network interfaces and host bus adapters that do not support shared access via SR-IOV. The shared device is owned and managed by a small, single-purpose service partition, which communicates with each guest partition sharing that device through an area of shared memory called a channel. Additional drivers provide support interfaces for communicating with s-Par services, logging and diagnostics, and accessing the Linux console from the s-Par user interface. The driver stack consists of a set of support modules, a set of bus modules, and a set of device driver modules. The support modules handle a number of common functions across each of the other drivers. The bus modules provide organization for the device driver modules, which provide the shared device functionality. These drivers are for the Unisys virtual PCI hardware model where the hypervisor need not intervene (other than normal interrupt handling) in the interactions between the client drivers and the virtual adapter firmware in the adapter service partition. Driver Descriptions Device Modules The modules in this section handle shared devices and the virtual buses required to support them. These modules use functions in and depend on the modules described in the support modules section. visorchipset The visorchipset module receives device creation and destruction events from the Command service partition of s-Par, as well as controlling registration of shared device drivers with the s-Par driver core. The events received are used to populate other s-Par modules with their assigned shared devices. Visorchipset is required for shared device drivers to function properly. Visorchipset also stores information for handling dump disk device creation during kdump. In operation, the visorchipset module processes device creation and destruction messages sent by s-Par's Command service partition through a channel. These messages result in creation (or destruction) of each virtual bus and virtual device. Each bus and device is also associated with a communication channel, which is used to communicate with one or more IO service partitions to perform device IO on behalf of the guest. virthba The virthba module provides access to a shared SCSI host bus adapter and one or more disk devices, by proxying SCSI commands between the guest and the service partition that owns the shared SCSI adapter, using a channel between the guest and the service partition. The disks that appear on the shared bus are defined by the s-Par configuration and enforced by the service partition, while the guest driver handles sending commands and handling responses. Each disk is shared as a whole to a guest. Sharing the bus adapter in this way provides resiliency; should the device encounter an error, only the service partition is rebooted, and the device is reinitialized. This allows guests to continue running and to recover from the error. virtnic The virtnic module provides a paravirtualized network interface to a guest by proxying buffer information between the guest and the service partition that owns the shared network interface, using a channel between the guest and the service partition. The connectivity of this interface with the shared interface and possibly other guest partitions is defined by the s-Par configuration and enforced by the service partition; the guest driver handles communication and link status. visorserial The visorserial module allows the console of the linux guest to be accessed via the s-Par console serial channel. It creates devices in /dev/visorserialclientX which behave like a serial terminal and are connected to the diagnostics system in s-Par. By assigning a getty to the terminal in the guest, a user could log into and access the guest from the s-Par diagnostics SWITCH RUN terminal. visorbus The visorbus module handles the bus functions for most functional drivers except visorserial, visordiag, virthba, and virtnic. It maintains the sysfs subtree /sys/devices/visorbus*/. It is responsible for device creation and destruction of the devices on its bus. visorclientbus The visorclientbus module forwards the bus functions for virthba, and virtnic to the virtpci driver. virtpci The virtpci module handles the bus functions for virthba, and virtnic. s-Par Integration Modules The modules in this section provide integration with s-Par guest partition services like diagnostics and remote desktop. These modules depend on functions in the modules described in the support modules section. visorvideoclient The visorvideoclient module provides functionality for video support for the Unisys s-Par Partition Desktop application. The guest OS must also have the UEFI GOP protocol enabled for the partition desktop to function. visorconinclient The visorconinclient module provides keyboard and mouse support for the Unisys s-Par Partition Desktop application. sparstop The sparstop module handles requests from the Unisys s-Par platform to shutdown the linux guest. It allows a program on the guest to perform clean-up functions on the guest before the guest is shut down or rebooted using ACPI. visordiag This driver provides the ability for the guest to write information into the s-Par diagnostics subsystem. It creates a set of devices named /dev/visordiag.X which can be written to by the guest to add text to the s-Par system log. Support Modules The modules described in this section provide functions and abstractions to support the modules described in the previous sections, to avoid having duplicated functionality. visornoop The visornoop module is a placeholder that responds to device create/destroy messages that are currently not in use by linux guests. visoruislib The visoruislib module is a support library, used to handle requests from virtpci. visorchannelstub The visorchannelstub module provides support routines for storing and retrieving data from a channel. visorchannel The visorchannel module is a support library that abstracts reading and writing a channel in memory. visorutil The visorutil module is a support library required by all other s-Par driver modules. Among its features it abstracts reading, writing, and manipulating a block of memory. Minimum Required Driver Set The drivers required to boot a Linux guest are visorchipset, visorbus, visorvideoclient, visorconinclient, visoruislib, visorchannelstub, visorchannel, and visorutil. The other drivers are required by the product configurations that are currently being marketed.