summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-08-31 13:26:15 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-08-31 13:26:15 +0200
commitb4e7e0bcca4b2a83b73e2eace0d40b6f2085f96c (patch)
tree0fd7817110f62eb6ef364d48f24d765ea549b31d
parenta3da89ca05d188dd372612f1a2ff055d7696a880 (diff)
feat: First draft of the PCI-Tree system.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
-rw-r--r--docs/tex/pci-tree.tex74
1 files changed, 74 insertions, 0 deletions
diff --git a/docs/tex/pci-tree.tex b/docs/tex/pci-tree.tex
new file mode 100644
index 0000000..5b95a6c
--- /dev/null
+++ b/docs/tex/pci-tree.tex
@@ -0,0 +1,74 @@
+\documentclass{article}
+\usepackage{graphicx} % Required for inserting images
+
+\title{The PCI Tree System}
+\author{Amlal El Mahrouss}
+\date{\today}
+
+\usepackage{listings}
+
+\lstset { %
+ language=C++,
+}
+
+\begin{document}
+
+\maketitle
+
+\section{Abstract}
+
+The PCI tree is an architecture designed to abstract away device specific data. One leaf might for instance hold an AHCI's HBA (Host Bus Adapter) into a '/pci-tree/@ahci' for instance. The advantage of this approach is the ability to quickly lookup and recognize a device from a tree given by a firmware at handoff.
+
+\section{The Protocol}
+
+Each leaf has a identification number of '0xfeedd00d', then followed by the version in a binary encoded format (0x1000). The offset and size of the offset and then given by the firmware. A PCI-Tree is assembled by the firmware itself. As the structures are not packed, thus multi-platform portability isn't possible.
+
+\section{Trade-offs}
+
+The trade-offs (portability, complexity) are largely justified by the need of a better and more straightforward way to recognize devices at the firmware level, the PCI tree approach helps us do exactly that.
+
+\subsection{Implementation of a PCI-Tree Leaf}
+
+Language of implementation is the C programming language
+
+\begin{lstlisting}
+struct hw_cb_pci_tree {
+ cb_pci_num_t d_magic;
+ cb_pci_num_t d_version;
+ cb_pci_num_t d_off_props;
+ cb_pci_num_t d_off_struct;
+ cb_pci_num_t d_sz_props;
+ cb_pci_num_t d_sz_struct;
+
+ cb_pci_num_t d_first_node;
+ cb_pci_num_t d_next_sibling;
+
+ cb_pci_char_t d_name[NB_PCI_NAME_LEN];
+};
+
+\end{lstlisting}
+
+\section{Official Implementations}
+
+Below are the official implementations of the PCI-Tree, organized by their programming languages.
+
+\subsection{ISO C}
+
+\begin{ImplC}
+\item {SNU Trusted Base:} https://snu.systems
+\item {NeBoot (NeKernel Boot):} https://github.com/nekernel-org/neboot
+\end{ImplC}
+
+\subsection{ISO C++}
+
+\begin{ImplCxx}
+\item {No Implementation yet}
+\end{ImplCxx}
+
+\subsection{Forth}
+
+\begin{ImplCxx}
+\item {No Implementation yet}
+\end{ImplCxx}
+
+\end{document}