# SataController

**Index:** 0128 | **Size:** 158.0 KB | **Phase:** DXE | **Arch:** X64

## Overview

SATA host controller driver implementing the EFI_IDE_CONTROLLER_INIT_PROTOCOL for Intel PCH SATA controllers on the Purley platform. Manages channel enumeration, device identification (IDENTIFY DEVICE), PIO/DMA mode calculation, and asynchronous command submission. Also integrates S3 boot script management -- saves/restores SATA controller configuration to/from the SMM LockBox for S3 resume path.

## Key Functions

- **SataGetDeviceCount** / **SataGetDevice**: Enumerate and identify SATA devices on available channels
- **SataIdentifyDevice**: Execute ATA IDENTIFY DEVICE command, parse capabilities (PIO modes, DMA modes, IORDY support)
- **SataCalculateBestPioMode**: Determine optimal PIO timing mode from IDENTIFY data (modes 0-4 based on Field103)
- **PchGetPchSeries**: Detect PCH generation (SPT range 0x9D00-0x9D3F, CNP range, Cannon Point) for controller-specific configuration
- **S3BootScriptLibInit** / **SaveBootScriptDataToLockBox**: Save SATA register state to LockBox for S3 resume, including memory ranges and boot script context

## Protocols/Dependencies

- EFI_IDE_CONTROLLER_INIT_PROTOCOL, EFI_SMM_BASE2_PROTOCOL
- PCI I/O protocol (MmPciBase for PCH register access)
- SMM LockBox protocol (SmmLockBoxSave/Restore/SetAttributes)
- S3 Boot Script Library, DxeSmmReadyToLock event

## Platform

Intel Purley platform (PurleySktPkg), Lenovo HR650X. PCH SATA controller with S3 resume support.