summaryrefslogtreecommitdiffhomepage
path: root/dev/modules/MBCI
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-05 06:27:18 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-04-05 06:30:10 +0200
commit9b7a2a6461a463b08a120c660fcc64b46b65d417 (patch)
tree0f29fbbe829f4d276b0bc3088138c81157fc4c73 /dev/modules/MBCI
parent1142eb1ca0b0323e5f01e55a16e690346a99f018 (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.h43
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