diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-09-02 08:17:25 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-02 08:17:25 +0200 |
| commit | d41f15b09cc6adce79ce5c698dc5a53ddd7dd5f0 (patch) | |
| tree | 879b48c9eb935a1546e23b1f926c2a7895f7205e /docs | |
| parent | f24e3cd5212e533f9dc0125c62f4d36fb9882cee (diff) | |
| parent | efe0d71bd816f57d6d3338f04348c07dd8aade46 (diff) | |
Merge pull request #8 from nekernel-org/dev
v0.0.1e2 — Oakland
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/tex/pci-tree.tex | 74 |
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} |
