2:616
Volume 2, Part 2: I/O Architecture
The mf.a instruction on the other hand ensures that all prior data memory references
made by the processor issuing the mf.a have been “accepted” by the external platform.
However by itself the mf.a does not guarantee that all cache coherent agents have
observed all prior memory operations. For instance, an uncacheable store to a chipset
register may have completed on the system bus, however, that does not entail that all
prior cacheable transactions (from the processor issuing the store) have been observed
by all other processors in the coherence domain.
If software needs to ensure that all prior memory operations have been accepted by the
platform
and
have been observed by all cache coherent agents, both an
mf.a
and an
mf
instruction must be issued. The
mf.a
must be issued first, and the
mf
must be issued
second. For more details on memory ordering between cache coherent agents please
refer to
Chapter 2, “MP Coherence and Synchronization.”
Typically
mf.a
is used to configure a system’s I/O space, e.g. to setup chipset registers
that affect all subsequent memory operations. Specifically, the mf.a instruction
restrains further data accesses from initiating on the external platform interface until:
1. All previous sequential (i.e. non write-coalescing uncacheable) loads have been
returned data, and
2. All previous stores have been “accepted” by the platform. Typically acceptance is
indicated by a bus-specific signals/phase, e.g. completion of response phase on
the system bus.
Architecturally, the definition of “acceptance” is platform dependent. The next section
discusses the usage of the
mf.a
instruction in the context of the I/O port space.
11.2
I/O Port Space
IA-32 processors support two I/O models: memory mapped I/O and the 64KB I/O port
space. To support IA-32 platforms, the Itanium architecture allows operating systems
to map the 64KB I/O port space into the 64-bit virtual address space. This allows
Itanium architecture-based operating systems to see all I/O devices as a single unified
memory mapped I/O model, and permits “normal” Itanium load and store instructions
as well as IA-32 IN and OUT instructions to directly access the I/O port space.
As described in
Section 10.7, “I/O Port Space Model” on page 2:267
, Itanium
architecture-based operating systems can map the physical 64KB I/O port space into a
spread-out 64MB block of virtual address space. The virtual base address of the I/O
port space (IOBase) is maintained by the operating system in kernel register KR0.
When the processor issues Itanium load and stores accesses to the I/O port space, a
port’s virtual address is computed as:
port_virtual_address = IOBase | (port{15:2}<<12) | port{11:0}
For Itanium loads and stores, this address computation places four 1-byte ports on
each 4KB page and expands the space to 64MB, with the ports being at a relative offset
specified by port{11:0} within each 4KB virtual page. When executing an IA-32 IN or
OUT instruction a processor based on the Itanium architecture automatically converts
the IA-32 address to the appropriate expanded I/O port space address.
Содержание ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS VOLUME 3 REV 2.3
Страница 1: ......
Страница 11: ...x Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 12: ...1 1 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part I Application Architecture Guide ...
Страница 13: ...1 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 33: ...1 22 Volume 1 Part 1 Introduction to the Intel Itanium Architecture ...
Страница 57: ...1 46 Volume 1 Part 1 Execution Environment ...
Страница 147: ...1 136 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 149: ...1 138 Volume 1 Part 2 About the Optimization Guide ...
Страница 191: ...1 180 Volume 1 Part 2 Predication Control Flow and Instruction Stream ...
Страница 230: ......
Страница 248: ...236 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 249: ...2 1 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part I System Architecture Guide ...
Страница 250: ...2 2 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 264: ...2 16 Volume 2 Part 1 Intel Itanium System Environment ...
Страница 380: ...2 132 Volume 2 Part 1 Interruptions ...
Страница 398: ...2 150 Volume 2 Part 1 Register Stack Engine ...
Страница 486: ...2 238 Volume 2 Part 1 IA 32 Interruption Vector Descriptions ...
Страница 749: ...2 501 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Part II System Programmer s Guide ...
Страница 750: ...2 502 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 754: ...2 506 Volume 2 Part 2 About the System Programmer s Guide ...
Страница 796: ...2 548 Volume 2 Part 2 Interruptions and Serialization ...
Страница 808: ...2 560 Volume 2 Part 2 Context Management ...
Страница 842: ...2 594 Volume 2 Part 2 Floating point System Software ...
Страница 850: ...2 602 Volume 2 Part 2 IA 32 Application Support ...
Страница 862: ...2 614 Volume 2 Part 2 External Interrupt Architecture ...
Страница 870: ...2 622 Volume 2 Part 2 Performance Monitoring Support ...
Страница 891: ......
Страница 941: ...3 42 Volume 3 Instruction Reference cmp illegal_operation_fault PR p1 0 PR p2 0 Interruptions Illegal Operation fault ...
Страница 1099: ...3 200 Volume 3 Instruction Reference padd Interruptions Illegal Operation fault ...
Страница 1191: ...3 292 Volume 3 Pseudo Code Functions Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1295: ...3 396 Volume 3 Resource and Dependency Semantics ...
Страница 1296: ......
Страница 1302: ...402 Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1494: ...4 192 Volume 4 Base IA 32 Instruction Reference FWAIT Wait See entry for WAIT ...
Страница 1564: ...4 262 Volume 4 Base IA 32 Instruction Reference LES Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1565: ...Volume 4 Base IA 32 Instruction Reference 4 263 LFS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1568: ...4 266 Volume 4 Base IA 32 Instruction Reference LGS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1583: ...Volume 4 Base IA 32 Instruction Reference 4 281 LSS Load Full Pointer See entry for LDS LES LFS LGS LSS ...
Страница 1647: ...Volume 4 Base IA 32 Instruction Reference 4 345 ROL ROR Rotate See entry for RCL RCR ROL ROR ...
Страница 1663: ...Volume 4 Base IA 32 Instruction Reference 4 361 SHL SHR Shift Instructions See entry for SAL SAR SHL SHR ...
Страница 1668: ...4 366 Volume 4 Base IA 32 Instruction Reference SIDT Store Interrupt Descriptor Table Register See entry for SGDT SIDT ...
Страница 1884: ...4 582 Volume 4 IA 32 SSE Instruction Reference ...
Страница 1885: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 Index ...
Страница 1886: ...Index Intel Itanium Architecture Software Developer s Manual Rev 2 3 ...
Страница 1898: ...INDEX Index 12 Index for Volumes 1 2 3 and 4 ...