summaryrefslogtreecommitdiffhomepage
path: root/docs/tex
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-09-02 08:17:25 +0200
committerGitHub <noreply@github.com>2025-09-02 08:17:25 +0200
commitd41f15b09cc6adce79ce5c698dc5a53ddd7dd5f0 (patch)
tree879b48c9eb935a1546e23b1f926c2a7895f7205e /docs/tex
parentf24e3cd5212e533f9dc0125c62f4d36fb9882cee (diff)
parentefe0d71bd816f57d6d3338f04348c07dd8aade46 (diff)
Merge pull request #8 from nekernel-org/dev
v0.0.1e2 — Oakland
Diffstat (limited to 'docs/tex')
-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..894e4cf
--- /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{ImplForth}
+\item {No Implementation yet}
+\end{ImplForth}
+
+\end{document}