| Address | Name | Description |
|---|---|---|
| _ModuleEntryPoint | ||
| DcpmmDriverInit | ||
| DcpmmDriverMain | ||
| DcpmmDriverStartThunk | ||
| DcpmmDriverStart | ||
| DcpmmDriverSupported | ||
| DcpmmDriverStop | ||
| NvdimmFwCommand | ||
| DcpmmFirmwareCommandDispatch | ||
| DcpmmGetDeviceInfo | ||
| DcpmmGetHealth | ||
| DcpmmSmbusAcquire | ||
| DcpmmSmbusRelease | ||
| DcpmmGetNvdimmConfig | ||
| DcpmmSetNvdimmConfig | ||
| DcpmmEnumerateNvdimmHandles | ||
| DcpmmCheckNamespaceSupport | ||
| DcpmmCheckSmbusSupport | ||
| UtilFreePool | ||
| UtilDebugPrint | ||
| 0x33348 | EFI_BOOT_SERVICES *gBootServices = NULL; // 0x33350 | |
| 0x33358 | DCPMM_DRIVER_GLOBAL *gDcpmmDriver = NULL; // qword_33308 | |
| DCPMM | protocol | |
| DCPMM | config protocol | |
| DCPMM | health protocol | |
| SMBus | HC protocol | |
| NVDIMM | PassThru protocol | |
| SMBus | arbitration protocol | |
| Unknown | located protocol | |
| Device | path utilities | |
| Device | path protocol GUID | |
| NVDIMM | Firmware Interface Table protocol | |
| Namespace | protocol instance | |
| Driver | Binding protocol GUID | |
| NVDIMM | device path instance | |
| Protocol | dispatch tables (defined externally in .data section) | |
| Protocol | function table | |
| Configuration | protocol table | |
| Firmware | interface table | |
| Step | 1: Early initialization (serial port, protocol locations) | |
| Step | 2: Install driver binding protocol | |
| Set | the Start handler | will be called when controller is found |
| Step | 3: Complete initialization | |
| Serial | port (COM1) initialization via I/O ports 0x3F8-0x3FD. | |
| DCPMM | driver uses the serial port for debug logging. | |
| COM1 | registers: | |
| 0x3F8 | - Data register / Divisor Latch Low (DLAB=1) | |
| 0x3F9 | - Interrupt Enable / Divisor Latch High (DLAB=1) | |
| 0x3FA | - FIFO Control / Interrupt ID | |
| 0x3FB | - Line Control Register | |
| 0x3FC | - Modem Control Register | |
| 0x3FD | - Line Status Register | |
| Save | UEFI table pointers | |
| Locate | dependent protocols needed by this driver | |
| Parse | SMBIOS Type 17 to find NVDIMM presence | |
| Walk | SMBIOS entries looking for NVDIMM (Type 17 with NVDIMM flag) | |
| Process | SMBIOS entry looking for: | |
| or | Type 0x7F with NVDIMM characteristics | |
| Save | image handle | |
| gImageHandle | = (UINT64)ImageHandle; | |
| Allocate | driver global context (592 bytes = 0x250) | |
| gDcpmmDriver | = UtilAllocateZeroPool(592); | |
| Initialize | global state | |
| Initialize | linked lists within the context | |
| Install | all DCPMM protocols on the image handle | |
| FW | interface protocol | |
| Enumerate | all NVDIMM handles present in the system | |
| Install | all protocols again on the image handle | |
| Then | set up the driver binding protocol Start handler | |
| Status | = gBootServices->InstallProtocolInterface( | |
| Open | device path protocol on each cached NVDIMM handle | |
| if | (gNvdimmHandleCount > 0 && gNvdimmHandles) { | |
| Clear | cached handles and re-enumerate | |
| gNvdimmHandleCount | = 0; | |
| Locate | controller handles that support the NVDIMM FIT protocol | |
| Install | DCPMM protocols on each controller handle | |
| Check | namespace and SMBUS support | |
| Install | all remaining protocols on the controller handle | |
| Walk | NVDIMM linked list to see if this controller is known | |
| Also | check if controller supports NVDIMM FIT protocol | |
| Status | = gBootServices->OpenProtocol( | |
| Close | all protocols opened by this driver on the controller | |
| Close | SMBUS protocol | |
| Uninstall | all protocol interfaces | |
| Build | NVDIMM firmware command packet | |
| Structure | per ACPI NVDIMM FW spec for passthrough: | |
| Command | + Input/Output buffer sizes + payload | |
| Transmit | via SMBUS to the NVDIMM device address. | |
| return | EFI_SUCCESS; | |
| Dispatch | firmware command via the NFIT-defined function table | |
| Status | = FwIf->ExecuteCommand( | |
| Walk | the NVDIMM device list and collect info: | |
| Queries | NVDIMM via firmware command for health info | |
| Acquire | SMBUS ownership for the NVDIMM memory controller: | |
| Debug | messages format: | |
| Release | SMBUS ownership: | |
| Read | NVDIMM namespace label data: | |
| Write | NVDIMM namespace label data with full validation. | |
| Handles | page alignment, BTT/PFN translation, and error recovery. | |
| Uses | UtilDebugPrint for status logging. | |
| If | handles are already cached, return success | |
| if | (gNvdimmHandles && gNvdimmHandleCount > 0) { | |
| Free | any previously allocated handle buffer | |
| if | (gNvdimmHandles) { | |
| Locate | all handles with the NVDIMM Firmware Interface protocol | |
| Status | = gBootServices->LocateHandleBuffer( | |
| Allocate | handle cache | |
| gNvdimmHandleCount | = HandleCount; | |
| Install | device path on each handle and cache the handle | |
| for | (Index = 0; Index < HandleCount; Index++) { | |
| DCPMM | debug output format: | |
| All | messages use this prefix format for log identification. | |
| Messages | observed: | |
| DCPMM | driver acquired SMBUS access | |
| DCPMM | driver waiting %d ms for smbus access | |
| DCPMM | driver failed to acquire SMBUS access | |
| DCPMM | driver releasing SMBUS access | |
| DCPMM | driver released SMBUS access. Rc %d | |
| DCPMM | driver inconsistent state found! ... | |
| DCPMM | driver failed to release SMBUS access! Exiting | |
| DCPMM | driver starting to acquire SMBUS access. Window: 0 ms | |
| DCPMM | driver starting to acquire SMBUS access. Window: %d - %d ms |
Generated by HR650X BIOS Decompilation Project