In a raw Itanium, a 'Processor Abstraction Layer' (PAL) is incorporated in system. When it's booted PAL is loaded in the CPU and provides a low-level interface which abstracts a number of instructions in addition provides a mechanism for processor updates distributed by a BIOS update.
At the time of BIOS initialization an additional layer of code 'System Abstraction Layer' (SAL) is loaded which provides a uniform API for implementation specific platform functions.
On top of PAL/SAL interface sits 'Extensible Firmware Interface' (EFI). EFI isn't part of IA-64 architecture however by convention it's needed on all IA-64 systems. It is a simple API for access to logical features of system (display, storage, keyboard etc) combined with a lightweight runtime environment (which is similar to DOS) which allows basic system administration tasks like configuring storage adapters, flashing BIOS and running an OS boot-loader.
Moment OS has been booted; some features of PAL/SAL/EFI stack stay resident in memory and can be accessed by OS to perform low-level tasks which are implementation-dependent on underlying hardware.