DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 
TOC PREV NEXT INDEX

Introductory Material

1

1.1 Introduction

The Uniform Driver Interface (UDI) specifications define a complete runtime environment for device drivers. This includes the complete set of services and other interfaces needed by a device driver to control its device or pseudo-device, and to interact properly with the rest of the system in which it operates. This runtime environment in which a UDI driver operates is referred to as the UDI environment.

The UDI interfaces allow UDI drivers to be completely portable from one OS or platform to another. All OS and platform specifics are contained in the UDI environment implementations for those OS's and platforms and are thus isolated from driver code.

These specifications also define requirements on UDI build environments used to build UDI drivers and packages from source. Some environments will be both runtime environments and build environments.

1.2 Scope

The UDI Core Specification defines the core set of UDI interfaces that are available to all UDI drivers and that are required to be provided by all UDI environment implementations. The UDI interfaces defined in this document represent the interfaces that are always provided to a UDI driver by the UDI environment and may safely be used by any UDI driver implementation.

The UDI specifications are defined in terms of the C language and establish a C language binding for the UDI interfaces. Thus the UDI specifications support device driver portability at the C source code level. When combined with a UDI ABI binding, the UDI specifications support device driver portability at the binary level.

Other language bindings could be created for UDI; some of the syntax would differ, but the principles and the UDI-defined names would be the same. In particular, UDI interfaces can be accessed from assembly language code, as long as the shape of data structures and calling conventions are made to match the C language conventions for the target platform.

1.3 Normative References

The UDI Core Specification references the following non-UDI standards, listed below. These standards contain provisions that, through reference in this document, constitute provisions of the UDI Core Specification.

  1. ISO/IEC 9899-1990 (ISO C Programming Language Standard).
  2. ISO 10646 (Unicode), Annex P (UTF-8 Character Encoding Standard).
  3. ISO/IEC 9945-1 (POSIX locale specifier format).
  4. ISO 639-2/T (Language Codes).
  5. ISO 3166 (Country Codes).
  6. IEEE Std. 1003.1-1988 (Archive/Interchange File Format)
  7. ISO 9960 (CDROM filesystem specification).
  8. IETF RFC 1071 "Computing the Internet checksum"
  9. IETF RFC 1141 "Incremental updating of the Internet checksum"
  10. IETF RFC 1624 "Computation of the Internet Checksum via Incremental Update"
  11. IETF RFC 1936 "Implementing the Internet Checksum in Hardware"

Other UDI specification books rely on the UDI Core Specification, and may rely on additional non-UDI standards. For example, the UDI SCSI Driver Specification relies on the ANSI SCSI Standards, and the PCI Bus Binding depends on the PCI Local Bus Specification. The degree to which a UDI specification depends on these other standards, or specific versions of those standards, is indicated in the applicable UDI specification document.

1.4 Conformance

1.4.1 Environment Conformance

A conforming UDI environment implementation shall provide all of the interfaces defined in the UDI Core Specification, with their associated rules and semantics, including the architectural requirements defined in "Section 2: Architecture". Environments that support related functionality that is covered by other UDI specifications shall also provide all of the interfaces and semantics defined in those specifications.

A conforming environment shall also provide the header file "udi.h" for the interfaces in the UDI Core Specification, and additional header files as required by other UDI specifications supported by the environment. These header files must be ISO C conforming programs.

To provide portability guarantees to UDI drivers, conforming UDI environment implementations must provide all the interfaces defined in the UDI Core Specification. However, static environments, in which it is not possible to load new drivers or otherwise modify the configuration of the system, may know a priori that certain interfaces are not needed by any of the applicable drivers. Such a static environment that doesn't completely implement the relevant UDI specifications is not considered fully conformant; it is however considered statically conformant if it conforms to the requirements of the UDI interfaces that are applicable to it - i.e., if the applicable drivers are completely conformant UDI drivers. Note that in this case the applicable drivers would be portable to any fully comformant UDI environment, but not necessarily to another statically conformant environment.

Note - UDI environment implementations may vary in the way that they implement a particular UDI interface, the amount of internal debugging and interface consistency checking provided, the underlying address or protection or synchronization domain in which UDI drivers execute, etc. However, as defined above, fully conformant UDI environments must implement the full set of interfaces defined in this Core Specification, and all UDI environments must adhere to the requirements of the UDI architectural model as defined in this Specification.

1.4.2 Device Driver Conformance

A conforming UDI device driver implementation shall not, at the source code level, reference any interfaces external to the driver except those defined in the UDI specifications or exported explicitly to drivers via UDI-defined mechanisms. A conforming UDI device driver shall also follow all the rules and semantics defined for the use of these UDI interfaces. In particular, conforming UDI drivers must adhere to the general requirements regarding UDI_VERSION, header files, and the use of ISO C, as defined in Chapter 8, "General Requirements".


TOC PREV NEXT INDEX