diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-05 06:27:18 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-05 06:30:10 +0200 |
| commit | 9b7a2a6461a463b08a120c660fcc64b46b65d417 (patch) | |
| tree | 0f29fbbe829f4d276b0bc3088138c81157fc4c73 /dev/modules/MBCI | |
| parent | 1142eb1ca0b0323e5f01e55a16e690346a99f018 (diff) | |
kernel: storage, modules, mbci: implement mbci_read_auth_key, mbci_test_mmio, test DMA on AHCI too.
- Alongside fixes for BootNet, SysChk, and refactor for KernelScheduler, and
MemoryMgr.
- IMPORTANT: Add MBCI specs.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/modules/MBCI')
| -rw-r--r-- | dev/modules/MBCI/MBCI.h | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/dev/modules/MBCI/MBCI.h b/dev/modules/MBCI/MBCI.h index 975fa7fe..ebc73f69 100644 --- a/dev/modules/MBCI/MBCI.h +++ b/dev/modules/MBCI/MBCI.h @@ -7,9 +7,13 @@ #ifndef _INC_MODULE_MBCI_H_ #define _INC_MODULE_MBCI_H_ +#include <hint/CompilerHint.h> #include <NewKit/Defines.h> #include <modules/ACPI/ACPI.h> +/// @file MBCI.h +/// @brief Mini Bus Controller Interface. + /** - VCC (IN) (OUT for MCU) - CLK (IN) (OUT for MCU) @@ -22,8 +26,9 @@ */ #define kMBCIZeroSz (8) +#define kMBCIESBSz (64) -namespace NeOS +namespace Kernel { struct IMBCIHost; @@ -53,14 +58,15 @@ namespace NeOS UInt64 BaseAddressRegister; UInt64 BaseAddressRegisterSize; UInt32 CommandIssue; - Char Zero[kMBCIZeroSz]; + UInt8 Esb[kMBCIESBSz]; // Extended Signature Block + UInt8 Zero[kMBCIZeroSz]; }; /// @brief MBCI host flags. enum MBCIHostFlags { kMBCIHostFlagsSupportsNothing, // Invalid MBCI device. - kMBCIHostFlagsSupportsAPM, // Advanced Power Management. + kMBCIHostFlagsSupportsAPM, // FW's Advanced Power Management. kMBCIHostFlagsSupportsDaisyChain, // Is daisy chained. kMBCIHostFlagsSupportsHWInterrupts, // Has HW interrupts. kMBCIHostFlagsSupportsDMA, // Has DMA. @@ -93,8 +99,33 @@ namespace NeOS kMBCIHostStateCount, }; - /// @brief An AuthKey is a context used to decrpy data from an MBCI packet. - typedef UInt64 MBCIAuthKeyType; -} // namespace NeOS + /// @brief An AuthKey is a context used to tokenize data for an MBCI packet. + typedef UInt32 MBCIAuthKeyType; + + /// @brief Read Auth key for MBCI host. + /// @param host the mbci host to get the key on. + /// @return the 24-bit key. + inline MBCIAuthKeyType mbci_read_auth_key(_Input volatile struct IMBCIHost* host) + { + constexpr auto const kChallengeMBCI = 0xdeadbeef; + + host->MMIOTest = kChallengeMBCI; + + if (host->MMIOTest == kChallengeMBCI) + { + return (host->Esb[kMBCIESBSz - 1] << 16) | (host->Esb[kMBCIESBSz - 2] << 8) | (host->Esb[kMBCIESBSz - 3] & 0xFF); + } + + return kChallengeMBCI; + } + + inline BOOL mbci_test_mmio(_Input volatile struct IMBCIHost* host) + { + constexpr auto const kChallengeMBCI = 0xdeadbeef; + + host->MMIOTest = kChallengeMBCI; + return host->MMIOTest == kChallengeMBCI; + } +} // namespace Kernel #endif // ifndef _INC_MODULE_MBCI_H_
\ No newline at end of file |
