Mechanisms for splitting responsibilities for communicating with an
endpoint between a device driver and device driver services are provided.
With these mechanisms, the device driver is responsible for managing
queues for communicating requests between applications in a logical
partition and the endpoint. The device driver further invokes memory
management via device driver services. The device driver services are
responsible for managing memory accessible by the endpoint, including the
address translation and protection table (ATPT) or a root complex and the
address translation caches (ATCs) of the endpoint. The device driver
services may associate untranslated addresses for data structures used to
communicate between a system image and the endpoint. The endpoint may
request translations of the untranslated addresses and may cache the
translations in the ATCs.