summaryrefslogtreecommitdiffhomepage
path: root/docs
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-08-17 07:55:38 +0200
committerGitHub <noreply@github.com>2025-08-17 07:55:38 +0200
commit7802a79f34c6f96f1c1ead72098c449b1a8826d8 (patch)
tree9a1b0ce29eb1bcf7ca443fcd9500d3e54a268eb3 /docs
parent31d6c0c1ee8ac790399efc3949a2806dca44d301 (diff)
parent2835bd8b264d52dc922cc303c0c5e5ddb6aedb99 (diff)
Merge pull request #6 from nekernel-org/dev
v0.0.1
Diffstat (limited to 'docs')
-rw-r--r--docs/tex/30pin.tex73
-rw-r--r--docs/tex/epm.tex143
2 files changed, 216 insertions, 0 deletions
diff --git a/docs/tex/30pin.tex b/docs/tex/30pin.tex
new file mode 100644
index 0000000..5ca006c
--- /dev/null
+++ b/docs/tex/30pin.tex
@@ -0,0 +1,73 @@
+
+\documentclass{article}
+\usepackage{listings}
+\usepackage{xcolor}
+\usepackage{geometry}
+\usepackage{titlesec}
+\usepackage{fancyhdr}
+\usepackage{amsmath}
+\usepackage{amsfonts}
+\usepackage{graphicx}
+\usepackage{enumitem}
+\geometry{margin=1in}
+
+\titleformat{\section}{\large\bfseries}{\thesection}{1em}{}
+\titleformat{\subsection}{\normalsize\bfseries}{\thesubsection}{1em}{}
+
+\title{\texttt{30Pin}: Technical Specification}
+\author{Amlal EL Mahrouss}
+\date{\today}
+
+\lstset{
+ basicstyle=\ttfamily\footnotesize,
+ keywordstyle=\color{blue},
+ commentstyle=\color{gray},
+ stringstyle=\color{red},
+ showstringspaces=false,
+ breaklines=true
+}
+
+\begin{document}
+
+\maketitle
+
+\section*{File Description}
+\textbf{File:} \texttt{30pin.h} \\
+\textbf{Description:} This header defines the 30pin recovery protocol structures, constants, and packet kinds.
+
+\section{Constants}
+\begin{itemize}[leftmargin=2em]
+ \item \texttt{CB\_30PIN\_MAG} - Magic number identifier for a 30pin packet. Defined as \texttt{"TP"}.
+ \item \texttt{CP\_30PIN\_MAG\_LEN} - Length of the magic number (\texttt{2} bytes).
+ \item \texttt{CB\_30PIN\_BUFFER\_LEN} - Length of the data buffer in the packet (\texttt{498} bytes).
+ \item \texttt{CB\_30PIN\_EOP\_LEN} - Length of the end-of-packet data (\texttt{11} bytes).
+\end{itemize}
+
+\section{Data Structures}
+\subsection{\texttt{cb\_tpin\_recovery\_packet}}
+\begin{lstlisting}[language=C]
+struct _cb_tpin_recovery_packet
+{
+ uint8_t mag[CP_30PIN_MAG_LEN]; // Magic number
+ uint8_t kind; // Packet kind identifier
+ uint8_t buffer[NB_30PIN_BUFFER_LEN]; // Packet data buffer
+ uint8_t eop[NB_30PIN_EOP_LEN]; // End-of-packet data
+};
+\end{lstlisting}
+
+\textbf{Typedef:} \texttt{cb\_tpin\_recovery\_packet\_t}
+
+\section{Enumerations}
+\subsection{Packet Kinds}
+Defines the kinds of packets used in the 30pin recovery protocol:
+
+\begin{itemize}[leftmargin=2em]
+ \item \texttt{TPIN\_RECOVERY\_PACKET\_KIND\_UNKNOWN = 0}
+ \item \texttt{TPIN\_RECOVERY\_PACKET\_KIND\_BOOT = 1}
+ \item \texttt{TPIN\_RECOVERY\_PACKET\_KIND\_DATA = 2}
+ \item \texttt{TPIN\_RECOVERY\_PACKET\_KIND\_EOP = 3}
+ \item \texttt{TPIN\_RECOVERY\_PACKET\_KIND\_EOP\_ACK = 4}
+ \item \texttt{TPIN\_RECOVERY\_PACKET\_KIND\_EOP\_NACK = 5}
+\end{itemize}
+
+\end{document}
diff --git a/docs/tex/epm.tex b/docs/tex/epm.tex
new file mode 100644
index 0000000..f97df2c
--- /dev/null
+++ b/docs/tex/epm.tex
@@ -0,0 +1,143 @@
+\documentclass[12pt]{article}
+\usepackage[utf8]{inputenc}
+\usepackage[margin=1in]{geometry}
+\usepackage{titlesec}
+\usepackage{listings}
+\usepackage{xcolor}
+\usepackage{amsmath}
+\usepackage{caption}
+\usepackage{longtable}
+
+\titleformat{\section}{\large\bfseries}{\thesection}{1em}{}
+\titleformat{\subsection}{\normalsize\bfseries}{\thesubsection}{1em}{}
+
+\definecolor{codegray}{gray}{0.95}
+
+\lstdefinestyle{customc}{
+ backgroundcolor=\color{codegray},
+ basicstyle=\ttfamily\footnotesize,
+ keywordstyle=\color{blue},
+ commentstyle=\color{gray},
+ stringstyle=\color{red},
+ breaklines=true,
+ showstringspaces=false,
+ frame=single,
+ language=C
+}
+
+\title{EPM Partition Map: Technical Specification}
+\author{Amlal EL Mahrouss}
+\date{\today}
+
+\begin{document}
+
+\maketitle
+
+\section{Overview}
+This document specifies the Explicit Partition Map (EPM) data structures and constants as defined in \texttt{partition\_map.h}. The EPM is designed to store partition information in a platform-independent manner with architecture-specific magic identifiers.
+
+\section{Constants and Macros}
+
+\subsection{Magic Strings}
+\begin{longtable}{|l|l|}
+\hline
+\textbf{Macro} & \textbf{Description} \\
+\hline
+\texttt{EPM\_MAGIC\_X86} & "EPMAM", used on AMD64 \\
+\texttt{EPM\_MAGIC\_RV} & "EPMRV", used on RISC-V \\
+\texttt{EPM\_MAGIC\_ARM} & "EPMAR", used on ARM \\
+\texttt{EPM\_MAGIC\_64X0} & "EPM64", for custom 64x0 architecture \\
+\texttt{EPM\_MAGIC\_32X0} & "EPM32", for custom 32x0 architecture \\
+\texttt{EPM\_MAGIC\_PPC} & "EPMPC", used on POWER \\
+\texttt{EPM\_MAGIC} & Defaults based on architecture \\
+\hline
+\end{longtable}
+
+\subsection{Layout Macros}
+\begin{itemize}
+ \item \texttt{EPM\_MAX\_BLKS = 128} \\
+ Maximum number of blocks in the partition table (first 128 LBAs).
+ \item \texttt{EPM\_PART\_BLK\_SZ} \\
+ Size of the \texttt{part\_block} structure.
+ \item \texttt{EPM\_PART\_BLK\_START = 0} \\
+ Start LBA of EPM partition headers.
+ \item \texttt{EPM\_REVISION = 2} \\
+ Current revision of the EPM format.
+\end{itemize}
+
+\section{Data Structures}
+
+\subsection{boot\_guid\_t}
+\begin{lstlisting}[style=customc]
+typedef struct boot_guid {
+ uint32_t data1;
+ uint16_t data2;
+ uint16_t data3;
+ uint8_t data4[8];
+} __attribute__((packed)) boot_guid_t;
+\end{lstlisting}
+A GUID structure used for identifying partitions.
+
+\subsection{part\_block}
+\begin{lstlisting}[style=customc]
+struct __attribute__((packed)) part_block {
+ ascii_char_t magic[5]; // Magic string
+ ascii_char_t name[32]; // Human-readable name
+ boot_guid_t uuid; // Partition UUID
+ int32_t version; // Partition version
+ int32_t num_blocks; // Number of blocks
+ int64_t lba_start; // Starting LBA
+ int64_t sector_sz; // Sector size
+ int64_t lba_end; // Ending LBA
+ int16_t type; // Partition type
+ int32_t fs_version; // Filesystem version
+ ascii_char_t fs[16]; // Filesystem name
+ ascii_char_t reserved[401]; // Reserved for future use
+};
+\end{lstlisting}
+
+\subsection*{Filesystem Type Values}
+\begin{longtable}{|l|l|}
+\hline
+\textbf{Enum Value} & \textbf{Meaning} \\
+\hline
+\texttt{EPM\_INVALID} & \texttt{0x00} - Invalid/undefined \\
+\texttt{EPM\_GENERIC\_OS} & \texttt{0xcf} - Generic OS partition \\
+\texttt{EPM\_LINUX} & \texttt{0x8f} - Linux partition \\
+\texttt{EPM\_BSD} & \texttt{0x9f} - BSD partition \\
+\texttt{EPM\_NEKERNEL\_OS} & \texttt{0x1f} - NeKernel-specific \\
+\texttt{EPM\_SNU\_OS} & \texttt{0x1f} - SNU-specific \\
+\hline
+\end{longtable}
+
+\section{Functions}
+
+\subsection{\texttt{cb\_filesystem\_exists}}
+\begin{lstlisting}[style=customc]
+boolean cb_filesystem_exists(caddr_t fs, size_t len);
+\end{lstlisting}
+Checks if a filesystem name is supported.
+
+\subsection{\texttt{cb\_parse\_partition\_block\_data\_at}}
+\begin{lstlisting}[style=customc]
+bool cb_parse_partition_block_data_at(
+ voidptr_t blob,
+ size_t blob_sz,
+ size_t index,
+ size_t* end_lba,
+ size_t* start_lba,
+ size_t* sector_sz);
+\end{lstlisting}
+Parses an EPM partition block from a blob at the specified index and returns LBA information.
+
+\subsection{\texttt{cb\_parse\_partition\_block\_at}}
+\begin{lstlisting}[style=customc]
+part_block_t* cb_parse_partition_block_at(
+ voidptr_t blob,
+ size_t blob_sz,
+ size_t index);
+\end{lstlisting}
+Returns a pointer to a parsed EPM partition block at the specified index.
+
+\end{document}
+