An apparatus and method for sharing I/O devices. The apparatus has a first
plurality of I/O ports, a second I/O port, and core logic. The first
plurality is coupled to a plurality of operating system domains through a
load-store fabric. Each of the first plurality routes transactions
between the operating system domains and the switching apparatus. The
second I/O port is coupled to a first shared input/output endpoint. The
first shared input/output endpoint requests/completes transactions for
each of the plurality of operating system domains. The core logic is
coupled to the first plurality of I/O ports and the second I/O port. The
core logic routes the transactions between the first plurality of I/O
ports and the second I/O port and associates each of the transactions
with a corresponding one of the plurality of operating system domains
(OSDs) by encapsulating an OS domain header within a transaction layer
packet.