From e29425af3c9ac47242856783f1c5e2fbaebc8de3 Mon Sep 17 00:00:00 2001
From: Amlal <amlal@nekernel.org>
Date: Wed, 13 Aug 2025 03:22:05 +0200
Subject: feat: tex: new revision of tex specs.

Signed-off-by: Amlal <amlal@nekernel.org>
---
 docs/tex/mini_bus_controller_interface.tex | 117 +++++++++++++++++++++++++++++
 1 file changed, 117 insertions(+)
 create mode 100644 docs/tex/mini_bus_controller_interface.tex

(limited to 'docs/tex/mini_bus_controller_interface.tex')

diff --git a/docs/tex/mini_bus_controller_interface.tex b/docs/tex/mini_bus_controller_interface.tex
new file mode 100644
index 00000000..71907376
--- /dev/null
+++ b/docs/tex/mini_bus_controller_interface.tex
@@ -0,0 +1,117 @@
+
+\documentclass{article}
+\usepackage{geometry}
+\usepackage{longtable}
+\usepackage{listings}
+\usepackage{xcolor}
+\geometry{margin=1in}
+\title{MBCI: Mini Bus Controller Interface Specification}
+\author{Amlal El Mahrouss}
+\date{2025}
+
+\begin{document}
+
+\maketitle
+
+\section{Overview}
+The Mini Bus Controller Interface (MBCI) is a standardized memory-mapped I/O bus specification designed for use in embedded systems and operating system kernels. It provides an extensible framework for managing hardware devices via a shared bus using memory-mapped registers. It is designed to remain abstract and platform-agnostic, leaving platform-specific interrupt and address logic to the HAL.
+
+\section{Signal Lines}
+The MBCI bus interface includes the following signal lines:
+
+\begin{itemize}
+  \item \textbf{VCC} (IN) – Power supply (OUT for MCU)
+  \item \textbf{CLK} (IN) – Clock line (OUT for MCU)
+  \item \textbf{ACK} (BI) – Acknowledge line containing packet frame
+  \item \textbf{D0-, D1-} (IN) – Host interface packet input
+  \item \textbf{D0+, D1+} (OUT) – Host interface packet output
+  \item \textbf{GND} (IN) – Ground line (OUT for MCU)
+\end{itemize}
+
+\section{Host Structure}
+
+\subsection*{IMBCIHost Structure}
+
+\begin{lstlisting}[language=C++,basicstyle=\ttfamily\footnotesize]
+volatile struct IMBCIHost {
+  UInt32 Magic;
+  UInt32 HostId;
+  UInt16 VendorId;
+  UInt16 DeviceId;
+  UInt8  MemoryType;
+  UInt16 HostType;
+  UInt16 HostFlags;
+  UInt8  Error;
+  UInt32 MMIOTest;
+  UInt16 State;
+  UInt8  Status;
+  UInt8  InterruptEnable;
+  UInt64 BaseAddressRegister;
+  UInt64 BaseAddressRegisterSize;
+  UInt32 CommandIssue;
+  UInt8  Esb[64];  // Extended Signature Block
+  UInt8  Zero[8];
+};
+\end{lstlisting}
+
+\section{Enumerations}
+
+\subsection*{Device Speeds}
+\begin{itemize}
+  \item \texttt{kMBCISpeedDeviceInvalid}
+  \item \texttt{kMBCILowSpeedDevice}
+  \item \texttt{kMBCIHighSpeedDevice}
+\end{itemize}
+
+\subsection*{Host Flags}
+\begin{itemize}
+  \item \texttt{kMBCIHostFlagsSupportsNothing}
+  \item \texttt{kMBCIHostFlagsSupportsAPM}
+  \item \texttt{kMBCIHostFlagsSupportsDaisyChain}
+  \item \texttt{kMBCIHostFlagsSupportsHWInterrupts}
+  \item \texttt{kMBCIHostFlagsSupportsDMA}
+  \item \texttt{kMBCIHostFlagsExtended}
+\end{itemize}
+
+\subsection*{Host Types}
+\begin{itemize}
+  \item \texttt{kMBCIHostKindHardDisk}
+  \item \texttt{kMBCIHostKindOpticalDisk}
+  \item \texttt{kMBCIHostKindKeyboardLow}
+  \item \texttt{kMBCIHostKindMouseLow}
+  \item \texttt{kMBCIHostKindMouseHigh}
+  \item \texttt{kMBCIHostKindKeyboardHigh}
+  \item \texttt{kMBCIHostKindNetworkInterface}
+  \item \texttt{kMBCIHostKindDaisyChain}
+  \item \texttt{kMBCIHostKindStartExtended}
+\end{itemize}
+
+\subsection*{Host State}
+\begin{itemize}
+  \item \texttt{kMBCIHostStateInvalid}
+  \item \texttt{kMBCIHostStateReset}
+  \item \texttt{kMBCIHostStateSuccess}
+  \item \texttt{kMBCIHostStateReady}
+  \item \texttt{kMBCIHostStateDmaStart}
+  \item \texttt{kMBCIHostStateDmaEnd}
+  \item \texttt{kMBCIHostStateFail}
+  \item \texttt{kMBCIHostStateCount}
+\end{itemize}
+
+\section{Functions}
+
+\subsection*{MMIO Test}
+Tests if MMIO is accessible by writing and checking a challenge value. Times out if the bus does not respond.
+
+\begin{lstlisting}[language=C++,basicstyle=\ttfamily\footnotesize]
+inline BOOL busi_test_mmio(struct IMBCIHost* host, const UInt32 test);
+\end{lstlisting}
+
+\subsection*{Auth Key Reader}
+Reads the 24-bit auth key encoded in the last three bytes of the Extended Signature Block after verifying MMIO test success:
+
+\begin{lstlisting}[language=C++,basicstyle=\ttfamily\footnotesize]
+inline MBCIAuthKeyType mbci_read_auth_key(struct IMBCIHost* host);
+\end{lstlisting}
+
+\end{document}
-- 
cgit v1.2.3

