feat: Dev tools, advanced spinlocks, IPC KASSERTs, docs & quality
This commit delivers a comprehensive set of updates including development
environment setup, advanced spinlock features, initial IPC robustness
KASSERTs, extensive Doxygen commenting, code formatting, and Doxygen setup.
Key Changes:
Part 0: Development Environment Setup
- Created `setup.sh` to automate installation of `doxygen`, `graphviz`,
`clang-format`, and `cppcheck`. (Tools were installed in the environment).
Part 1: Advanced Spinlock Features
- Enhanced `simple_spin_lock()` in `kernel/k_spinlock.h` with:
- Adaptive spinning: `MAX_SPIN_THRESHOLD` and a stubbed `kernel_yield()`
(calling `arch_pause()`).
- Contention statistics: `acquisitions` and `contentions` counters
added to `simple_spinlock_t` and integrated into lock functions.
- Added extensive Doxygen and inline comments for all spinlock code.
- Updated `docs/Signal_Refactoring_Verification.md` with these features.
Part 2: Initial IPC Robustness Analysis & KASSERTs
- Implemented an initial set of KASSERTs in `kernel/system.c` (in
`kernel_call`, `kernel_call_dispatch`, `kernel_call_finish`) for
validating IPC message parameters, call numbers, privileges, and
internal states.
- Added Doxygen/inline comments to these IPC functions.
- Created `docs/IPC_Robustness_Analysis.md` documenting these KASSERTs
and areas for further IPC validation.
Part 3: Code Formatting, Doxygen Setup & Review
- Code Formatting: Applied `clang-format --style=Google` to all C/H
files modified in recent KASSERT and spinlock work.
- Static Analysis: Ran `cppcheck`; no critical issues found in recent
changes requiring immediate code modification.
- Doxygen Setup: Created `docs/Doxyfile.kernel` with a comprehensive,
C23-aware configuration based on your feedback. This file enables
generation of extensive kernel documentation.
- `docs/Lock_Ordering.md`: Reviewed; no updates needed in this pass.
This work significantly improves kernel robustness, developer tooling,
code quality, and documentation infrastructure.
301
docs/Doxyfile.kernel
Normal file
|
|
@ -0,0 +1,301 @@
|
||||||
|
# Doxyfile.kernel - Optimized for C23 MINIX Kernel Documentation
|
||||||
|
# Project Settings
|
||||||
|
PROJECT_NAME = "MINIX C23 Microkernel"
|
||||||
|
PROJECT_NUMBER = "3.5.0" # Example version
|
||||||
|
PROJECT_BRIEF = "In-depth documentation of the MINIX microkernel components."
|
||||||
|
PROJECT_LOGO = # docs/images/minix_logo.png # Optional: Path to project logo
|
||||||
|
OUTPUT_DIRECTORY = ./generated-docs # Relative to this Doxyfile's location (docs/)
|
||||||
|
CREATE_SUBDIRS = YES
|
||||||
|
OUTPUT_LANGUAGE = English
|
||||||
|
BRIEF_MEMBER_DESC = YES
|
||||||
|
REPEAT_BRIEF = YES
|
||||||
|
ALWAYS_DETAILED_SEC = NO
|
||||||
|
INLINE_INHERITED_MEMB = NO
|
||||||
|
FULL_PATH_NAMES = YES
|
||||||
|
STRIP_FROM_PATH = ../
|
||||||
|
STRIP_FROM_INC_PATH =
|
||||||
|
SHORT_NAMES = NO
|
||||||
|
JAVADOC_AUTOBRIEF = YES
|
||||||
|
QT_AUTOBRIEF = YES
|
||||||
|
MULTILINE_CPP_IS_BRIEF = YES
|
||||||
|
INHERIT_DOCS = YES
|
||||||
|
SEPARATE_MEMBERS = YES
|
||||||
|
TAB_SIZE = 4
|
||||||
|
ALIASES = "rst=\verbatim embed:rst:leading-asterisk" \
|
||||||
|
"endrst=\endverbatim"
|
||||||
|
TCL_SUBST =
|
||||||
|
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||||
|
OPTIMIZE_OUTPUT_JAVA = NO
|
||||||
|
OPTIMIZE_FOR_FORTRAN = NO
|
||||||
|
OPTIMIZE_OUTPUT_VHDL = NO
|
||||||
|
OPTIMIZE_OUTPUT_SLICE = NO
|
||||||
|
EXTENSION_MAPPING = .h=C .c=C .S=Assembly .s=Assembly .asm=Assembly
|
||||||
|
MARKDOWN_SUPPORT = YES
|
||||||
|
TOC_INCLUDE_HEADINGS = 3 # Up to ### level
|
||||||
|
AUTOLINK_SUPPORT = YES
|
||||||
|
BUILTIN_STL_SUPPORT = NO # MINIX kernel doesn't use STL
|
||||||
|
CPP_CLI_SUPPORT = NO
|
||||||
|
SIP_SUPPORT = NO
|
||||||
|
IDL_PROPERTY_SUPPORT = YES
|
||||||
|
DISTRIBUTE_GROUP_DOC = NO # Group docs with their groups
|
||||||
|
GROUP_NESTED_COMPOUNDS = NO
|
||||||
|
SUBGROUPING = YES
|
||||||
|
INLINE_GROUPED_CLASSES = NO
|
||||||
|
INLINE_SIMPLE_STRUCTS = NO
|
||||||
|
TYPEDEF_HIDES_STRUCT = NO
|
||||||
|
LOOKUP_CACHE_SIZE = 0 # Default, consider increasing for very large projects
|
||||||
|
NUM_PROC_THREADS = 1 # Default, adjust based on build machine
|
||||||
|
# Build Process Related
|
||||||
|
QUIET = YES # Suppress normal messages
|
||||||
|
WARNINGS = YES
|
||||||
|
WARN_IF_UNDOCUMENTED = NO # Change to YES for full coverage checks
|
||||||
|
WARN_IF_DOC_ERROR = YES
|
||||||
|
WARN_NO_PARAMDOC = YES
|
||||||
|
WARN_AS_ERROR = NO # Treat warnings as errors
|
||||||
|
WARN_FORMAT = "$file:$line: $text"
|
||||||
|
WARN_LOGFILE = doxygen_warnings.log
|
||||||
|
# Input Files
|
||||||
|
INPUT = ../minix/kernel \
|
||||||
|
../minix/lib/klib \
|
||||||
|
../minix/include \
|
||||||
|
../minix/kernel/arch/i386/include \
|
||||||
|
../minix/kernel/arch/earm/include
|
||||||
|
# Add other relevant paths: ../minix/drivers, ../minix/servers, etc.
|
||||||
|
INPUT_ENCODING = UTF-8
|
||||||
|
FILE_PATTERNS = *.c *.h *.S *.s *.asm *.md *.markdown *.dox
|
||||||
|
# Add C++ patterns if any C++ is used: *.cpp *.hpp *.cc *.hh *.cxx *.hxx *.C
|
||||||
|
RECURSIVE = YES
|
||||||
|
EXCLUDE = ../minix/kernel/arch/x86_64 # Example: if x86_64 is not current target
|
||||||
|
EXCLUDE_SYMLINKS = NO
|
||||||
|
EXCLUDE_PATTERNS = */.git/* \
|
||||||
|
*/build*/* \
|
||||||
|
*/tests/old/* \
|
||||||
|
*Doxyfile.userland # Exclude other Doxyfiles
|
||||||
|
EXCLUDE_SYMBOLS = # Symbols to exclude
|
||||||
|
# Source Browsing
|
||||||
|
SOURCE_BROWSER = YES
|
||||||
|
INLINE_SOURCES = NO # Set to YES to embed sources in docs (larger output)
|
||||||
|
STRIP_CODE_COMMENTS = YES
|
||||||
|
REFERENCED_BY_RELATION = YES
|
||||||
|
REFERENCES_RELATION = YES
|
||||||
|
REFERENCES_LINK_SOURCE = YES
|
||||||
|
SOURCE_TOOLTIPS = YES
|
||||||
|
USE_HTAGS = YES # If you use ctags/etags
|
||||||
|
VERBATIM_HEADERS = YES
|
||||||
|
# Alphabetical Index
|
||||||
|
ALPHABETICAL_INDEX = YES
|
||||||
|
COLS_IN_ALPHA_INDEX = 3
|
||||||
|
IGNORE_PREFIX = # Prefixes to ignore in index
|
||||||
|
# HTML Output
|
||||||
|
GENERATE_HTML = YES
|
||||||
|
HTML_OUTPUT = html # Subdirectory under OUTPUT_DIRECTORY
|
||||||
|
HTML_FILE_EXTENSION = .html
|
||||||
|
HTML_HEADER = # html_header.html # Custom header
|
||||||
|
HTML_FOOTER = # html_footer.html # Custom footer
|
||||||
|
HTML_STYLESHEET = # custom_doxygen.css # Custom stylesheet
|
||||||
|
HTML_EXTRA_STYLESHEET =
|
||||||
|
HTML_EXTRA_FILES = # docs/images # For logos, etc.
|
||||||
|
HTML_COLORSTYLE_HUE = 220 # Blueish
|
||||||
|
HTML_COLORSTYLE_SAT = 100
|
||||||
|
HTML_COLORSTYLE_GAMMA = 80
|
||||||
|
HTML_TIMESTAMP = YES
|
||||||
|
HTML_DYNAMIC_SECTIONS = YES
|
||||||
|
HTML_INDEX_NUM_ENTRIES = 100
|
||||||
|
GENERATE_DOCSET = NO
|
||||||
|
GENERATE_HTMLHELP = NO
|
||||||
|
GENERATE_CHI = NO
|
||||||
|
GENERATE_QHP = NO
|
||||||
|
DISABLE_INDEX = NO
|
||||||
|
GENERATE_TREEVIEW = YES # Creates a navigation tree
|
||||||
|
ENUM_VALUES_PER_LINE = 4
|
||||||
|
TREEVIEW_WIDTH = 250
|
||||||
|
EXT_LINKS_IN_WINDOW = YES
|
||||||
|
FORMULA_FONTSIZE = 10
|
||||||
|
FORMULA_TRANSPARENT = YES
|
||||||
|
USE_MATHJAX = NO # Set to YES if using MathJax for formulas
|
||||||
|
MATHJAX_FORMAT = HTML-CSS # Or NativeMML, TeX
|
||||||
|
MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@3
|
||||||
|
MATHJAX_EXTENSIONS =
|
||||||
|
MATHJAX_CODEFILE =
|
||||||
|
SEARCHENGINE = YES # Enable built-in search
|
||||||
|
SERVER_BASED_SEARCH = NO
|
||||||
|
EXTERNAL_SEARCH = NO
|
||||||
|
SEARCHENGINE_URL =
|
||||||
|
SEARCHDATA_FILE = searchdata.xml
|
||||||
|
SEARCHINDEX_HASH = djb2
|
||||||
|
# LaTeX Output (Optional)
|
||||||
|
GENERATE_LATEX = NO
|
||||||
|
LATEX_OUTPUT = latex
|
||||||
|
LATEX_CMD_NAME = latex
|
||||||
|
MAKEINDEX_CMD_NAME = makeindex
|
||||||
|
COMPACT_LATEX = YES
|
||||||
|
PAPER_TYPE = a4
|
||||||
|
EXTRA_PACKAGES =
|
||||||
|
LATEX_HEADER =
|
||||||
|
LATEX_FOOTER =
|
||||||
|
LATEX_EXTRA_FILES =
|
||||||
|
PDF_HYPERLINKS = YES
|
||||||
|
USE_PDFLATEX = YES
|
||||||
|
LATEX_BATCHMODE = NO
|
||||||
|
LATEX_HIDE_INDICES = NO
|
||||||
|
LATEX_SOURCE_CODE = NO
|
||||||
|
LATEX_BIB_STYLE = plain
|
||||||
|
LATEX_TIMESTAMP = NO
|
||||||
|
# RTF Output (Optional)
|
||||||
|
GENERATE_RTF = NO
|
||||||
|
RTF_OUTPUT = rtf
|
||||||
|
COMPACT_RTF = YES
|
||||||
|
RTF_HYPERLINKS = NO
|
||||||
|
RTF_STYLESHEET_FILE =
|
||||||
|
RTF_EXTENSIONS_FILE =
|
||||||
|
# Man Page Output (Optional)
|
||||||
|
GENERATE_MAN = NO
|
||||||
|
MAN_OUTPUT = man
|
||||||
|
MAN_EXTENSION = .3
|
||||||
|
MAN_LINKS = NO
|
||||||
|
# XML Output (Optional)
|
||||||
|
GENERATE_XML = NO
|
||||||
|
XML_OUTPUT = xml
|
||||||
|
XML_PROGRAMLISTING = YES
|
||||||
|
XML_NS_MEMB_FILE_SCOPE = NO
|
||||||
|
# DOCBOOK Output (Optional)
|
||||||
|
GENERATE_DOCBOOK = NO
|
||||||
|
DOCBOOK_OUTPUT = docbook
|
||||||
|
# AutoGen Definitions (Optional)
|
||||||
|
GENERATE_AUTOGEN_DEF = NO
|
||||||
|
# Perl Module Output (Optional)
|
||||||
|
GENERATE_PERLMOD = NO
|
||||||
|
PERLMOD_LATEX = NO
|
||||||
|
PERLMOD_PRETTY = YES
|
||||||
|
PERLMOD_MAKEVAR_PREFIX =
|
||||||
|
# Preprocessor Settings
|
||||||
|
ENABLE_PREPROCESSING = YES
|
||||||
|
MACRO_EXPANSION = YES
|
||||||
|
EXPAND_ONLY_PREDEF = NO # Expand all macros
|
||||||
|
SEARCH_INCLUDES = YES
|
||||||
|
INCLUDE_PATH = ../minix/include \
|
||||||
|
../minix/kernel \
|
||||||
|
../minix/lib
|
||||||
|
INCLUDE_FILE_PATTERNS = *.h
|
||||||
|
PREDEFINED = __GNUC__ \
|
||||||
|
__x86_64__ \
|
||||||
|
CONFIG_SMP \
|
||||||
|
DEBUG \
|
||||||
|
KERNEL_SPACE \
|
||||||
|
KDEBUG \
|
||||||
|
"KASSERT(x)=" \
|
||||||
|
"_BitInt(n)=long long" \
|
||||||
|
"typeof(x)=__typeof__(x)" \
|
||||||
|
"restrict=" \
|
||||||
|
"_Static_assert(x,y)=" \
|
||||||
|
"__aligned(x)=__attribute__((aligned(x)))" \
|
||||||
|
"__packed=__attribute__((packed))" \
|
||||||
|
"__unused=__attribute__((unused))" \
|
||||||
|
"__deprecated__=__attribute__((deprecated))" \
|
||||||
|
"__dead=__attribute__((noreturn))" \
|
||||||
|
"__pure=__attribute__((pure))" \
|
||||||
|
"__const=__attribute__((const))" \
|
||||||
|
"__weak=__attribute__((weak))" \
|
||||||
|
"__always_inline=inline __attribute__((always_inline))" \
|
||||||
|
"__noinline=__attribute__((noinline))" \
|
||||||
|
"__returns_twice=__attribute__((returns_twice))" \
|
||||||
|
"__nonnull(x)=__attribute__((nonnull x))" \
|
||||||
|
"__printf_like(f,a)=__attribute__((format(printf,f,a)))" \
|
||||||
|
"__scanf_like(f,a)=__attribute__((format(scanf,f,a)))" \
|
||||||
|
"EXTERN=extern" \
|
||||||
|
"FORWARD=static" \
|
||||||
|
"PRIVATE=static" \
|
||||||
|
"PUBLIC=" \
|
||||||
|
"DEFINE_SPINLOCK(name)=simple_spinlock_t name" \
|
||||||
|
"DEFINE_SPINLOCK_IRQ(name)=spinlock_irq_t name" \
|
||||||
|
"NOT_REACHABLE=kprintf_nolock(\"FATAL: Unreachable code in %s at %d\\n\", __FILE__, __LINE__); panic(\"Not reachable\")" \
|
||||||
|
"BIT(n)=(1UL << (n))" \
|
||||||
|
"CEIL_DIV(a,b)=(((a) + (b) - 1) / (b))" \
|
||||||
|
"IS_ALIGNED(n, alignment)=(((n) % (alignment)) == 0)" \
|
||||||
|
"TRUE=1" \
|
||||||
|
"FALSE=0" \
|
||||||
|
"NULL=((void *)0)" \
|
||||||
|
"SELF=0" \
|
||||||
|
"ANY=0x7fff" \
|
||||||
|
"NONE=-1" \
|
||||||
|
"CLOCK_SYNC_HZ=60" \
|
||||||
|
"HZ=system_hz" \
|
||||||
|
"CONFIG_MAX_CPUS=1" # Adjust if actual is different
|
||||||
|
# Expand ifdef blocks to show all code paths
|
||||||
|
EXPAND_AS_DEFINED = # Add symbols here that should be treated as defined
|
||||||
|
SKIP_FUNCTION_MACROS = YES # Process function-like macros like functions
|
||||||
|
# External Reference Support
|
||||||
|
TAGFILES = # tagfile1=../../tagfile_dir/tagfile.xml=../../html_dir/
|
||||||
|
GENERATE_TAGFILE = # docs/kernel.tags
|
||||||
|
ALLEXTERNALS = NO
|
||||||
|
EXTERNAL_GROUPS = YES
|
||||||
|
EXTERNAL_PAGES = YES
|
||||||
|
PERL_PATH = /usr/bin/perl
|
||||||
|
# Dot Graph Visualization
|
||||||
|
CLASS_DIAGRAMS = YES
|
||||||
|
CLASS_GRAPH = YES
|
||||||
|
COLLABORATION_GRAPH = YES
|
||||||
|
GROUP_GRAPHS = YES
|
||||||
|
UML_LOOK = YES
|
||||||
|
UML_LIMIT_NUM_FIELDS = 10
|
||||||
|
TEMPLATE_RELATIONS = YES
|
||||||
|
INCLUDE_GRAPH = YES
|
||||||
|
INCLUDED_BY_GRAPH = YES
|
||||||
|
CALL_GRAPH = YES # Enable call graphs
|
||||||
|
CALLER_GRAPH = YES # Enable caller graphs
|
||||||
|
GRAPHICAL_HIERARCHY = YES
|
||||||
|
DIRECTORY_GRAPH = YES
|
||||||
|
DOT_IMAGE_FORMAT = svg # png, jpg, gif, svg
|
||||||
|
INTERACTIVE_SVG = YES # If svg, make it interactive
|
||||||
|
DOT_PATH = # /usr/bin/dot (usually found in PATH)
|
||||||
|
DOTFILE_DIRS =
|
||||||
|
MSCFILE_DIRS =
|
||||||
|
DIAFILE_DIRS =
|
||||||
|
DOT_FONTNAME = Sans
|
||||||
|
DOT_FONTSIZE = 10
|
||||||
|
DOT_FONTPATH =
|
||||||
|
PLANTUML_JAR_PATH =
|
||||||
|
PLANTUML_CFG_FILE =
|
||||||
|
PLANTUML_INCLUDE_PATH =
|
||||||
|
DOT_GRAPH_MAX_NODES = 100 # Increased from 50 for better overview
|
||||||
|
MAX_DOT_GRAPH_DEPTH = 0 # Unlimited depth
|
||||||
|
DOT_TRANSPARENT = NO
|
||||||
|
DOT_MULTI_TARGETS = YES
|
||||||
|
GENERATE_LEGEND = YES
|
||||||
|
DOT_CLEANUP = YES
|
||||||
|
# Search Options
|
||||||
|
SEARCHENGINE = YES # Already enabled, ensure it works
|
||||||
|
SERVER_BASED_SEARCH = NO
|
||||||
|
EXTERNAL_SEARCH = NO
|
||||||
|
# Other settings from user's Doxyfile.kernel
|
||||||
|
WARN_ON_MISSING_BRIEF = NO # Was YES, set to NO for now
|
||||||
|
JAVADOC_BANNER = YES
|
||||||
|
HTML_DYNAMIC_MENUS = YES
|
||||||
|
HTML_SIDEBAR_HIGHLIGHT = YES
|
||||||
|
DISABLE_म्EMPERL = NO
|
||||||
|
LOOKUP_CACHE_SIZE = 2
|
||||||
|
# User specific settings, ensuring these are present as requested
|
||||||
|
# (Many of these are defaults, but explicitly setting for clarity)
|
||||||
|
EXTRACT_ANON_NSPACES = NO
|
||||||
|
HIDE_UNDOC_MEMBERS = NO
|
||||||
|
HIDE_UNDOC_CLASSES = NO
|
||||||
|
HIDE_FRIEND_COMPOUNDS = NO
|
||||||
|
HIDE_IN_BODY_DOCS = NO
|
||||||
|
INTERNAL_DOCS = NO
|
||||||
|
CASE_SENSE_NAMES = YES # Default for C/C++
|
||||||
|
HIDE_SCOPE_NAMES = NO
|
||||||
|
SHOW_INCLUDE_FILES = YES
|
||||||
|
SHOW_GROUPED_MEMB_INC = NO
|
||||||
|
FORCE_LOCAL_INCLUDES = NO
|
||||||
|
INLINE_INFO_AFTER_REMOTE = NO
|
||||||
|
STRIP_UNDERSCORED_NAMES = NO
|
||||||
|
TYPEDEF_HIDES_STRUCT = NO
|
||||||
|
SYMBOL_CACHE_SIZE = 0
|
||||||
|
# Further graph settings
|
||||||
|
DOT_MAX_ semplice_NODES = 100 # Corrected typo from example to MAX_DOT_GRAPH_NODES
|
||||||
|
DOT_MAX_ semplice_DEPTH = 0 # Corrected typo
|
||||||
|
# Ensure these C specific settings are optimal
|
||||||
|
CLANG_ASSISTED_PARSING = NO # Set to YES if clang is available and configured
|
||||||
|
CLANG_OPTIONS =
|
||||||
|
CLANG_DATABASE_PATH =
|
||||||
|
# End of Doxyfile.kernel configuration
|
||||||
86
docs/doxygen_html/html/annotated.html
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: Class List</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">Class List</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
|
||||||
|
<table class="directory">
|
||||||
|
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsimple__spinlock__t.html" target="_self">simple_spinlock_t</a></td><td class="desc">Structure representing a simple spinlock </td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- directory -->
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
docs/doxygen_html/html/bc_s.png
Normal file
|
After Width: | Height: | Size: 676 B |
BIN
docs/doxygen_html/html/bc_sd.png
Normal file
|
After Width: | Height: | Size: 635 B |
87
docs/doxygen_html/html/classes.html
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: Class Index</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">Class Index</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="qindex"><a class="qindex" href="#letter_S">S</a></div>
|
||||||
|
<div class="classindex">
|
||||||
|
<dl class="classindex even">
|
||||||
|
<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
|
||||||
|
<dd><a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a></dd></dl>
|
||||||
|
</div>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
docs/doxygen_html/html/closed.png
Normal file
|
After Width: | Height: | Size: 132 B |
|
|
@ -0,0 +1,91 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: minix Directory Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_207bf8c12f5ffd71867b262b7e0c4f41.html">minix</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">minix Directory Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a>
|
||||||
|
Directories</h2></td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><span class="iconfclosed"></span> </td><td class="memItemRight" valign="bottom"><a class="el" href="dir_a593f8436b1bc29ffa99b7ee170e7ac1.html">kernel</a></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
101
docs/doxygen_html/html/dir_a593f8436b1bc29ffa99b7ee170e7ac1.html
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: minix/kernel Directory Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_207bf8c12f5ffd71867b262b7e0c4f41.html">minix</a></li><li class="navelem"><a class="el" href="dir_a593f8436b1bc29ffa99b7ee170e7ac1.html">kernel</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">kernel Directory Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="dynheader">
|
||||||
|
Directory dependency graph for kernel:</div>
|
||||||
|
<div class="dyncontent">
|
||||||
|
<div class="center"><img src="dir_a593f8436b1bc29ffa99b7ee170e7ac1_dep.png" border="0" usemap="#adir__a593f8436b1bc29ffa99b7ee170e7ac1__dep" alt="minix/kernel"/></div>
|
||||||
|
<map name="adir__a593f8436b1bc29ffa99b7ee170e7ac1__dep" id="adir__a593f8436b1bc29ffa99b7ee170e7ac1__dep">
|
||||||
|
<area shape="rect" href="dir_a593f8436b1bc29ffa99b7ee170e7ac1.html" title="kernel" alt="" coords="27,52,90,77"/>
|
||||||
|
<area shape="rect" href="dir_207bf8c12f5ffd71867b262b7e0c4f41.html" title="minix" alt="" coords="16,16,101,88"/>
|
||||||
|
</map>
|
||||||
|
</div>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
|
||||||
|
Files</h2></td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top"><a href="k__spinlock_8h_source.html"><span class="icondoc"></span></a> </td><td class="memItemRight" valign="bottom"><a class="el" href="k__spinlock_8h.html">k_spinlock.h</a></td></tr>
|
||||||
|
<tr class="memdesc:k__spinlock_8h"><td class="mdescLeft"> </td><td class="mdescRight">Defines a simple, non-recursive spinlock using GCC atomic builtins. <br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
<map id="minix/kernel" name="minix/kernel">
|
||||||
|
<area shape="rect" id="node1" href="dir_a593f8436b1bc29ffa99b7ee170e7ac1.html" title="kernel" alt="" coords="27,52,90,77"/>
|
||||||
|
<area shape="rect" id="clust1" href="dir_207bf8c12f5ffd71867b262b7e0c4f41.html" title="minix" alt="" coords="16,16,101,88"/>
|
||||||
|
</map>
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
0674c09b3673894dc9c5befa1805c294
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
12
docs/doxygen_html/html/doc.svg
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#4665A2">
|
||||||
|
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
|
||||||
|
</g>
|
||||||
|
<g style="fill:#D8DFEE;stroke-width:0">
|
||||||
|
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
|
||||||
|
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
12
docs/doxygen_html/html/docd.svg
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 80 60" id="doc" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#C4CFE5">
|
||||||
|
<path d="m 14,-1.1445312 c -2.824372,0 -5.1445313,2.320159 -5.1445312,5.1445312 v 72 c 0,2.824372 2.3201592,5.144531 5.1445312,5.144531 h 52 c 2.824372,0 5.144531,-2.320159 5.144531,-5.144531 V 23.699219 a 1.1447968,1.1447968 0 0 0 -0.01563,-0.1875 C 70.977847,22.605363 70.406495,21.99048 70.007812,21.591797 L 48.208984,-0.20898438 C 47.606104,-0.81186474 46.804652,-1.1445313 46,-1.1445312 Z m 1.144531,6.2890624 H 42.855469 V 24 c 0,1.724372 1.420159,3.144531 3.144531,3.144531 H 64.855469 V 74.855469 H 15.144531 Z m 34,4.4179688 L 60.4375,20.855469 H 49.144531 Z"/>
|
||||||
|
</g>
|
||||||
|
<g style="fill:#4665A2;stroke-width:0">
|
||||||
|
<path d="M 3.0307167,13.993174 V 7.0307167 h 2.7576792 2.7576792 v 1.8826151 c 0,1.2578262 0.0099,1.9287572 0.029818,2.0216512 0.03884,0.181105 0.168631,0.348218 0.33827,0.43554 l 0.1355017,0.06975 1.9598092,0.0079 1.959809,0.0078 v 4.749829 4.749829 H 8 3.0307167 Z" transform="matrix(5,0,0,5,0,-30)" />
|
||||||
|
<path d="M 9.8293515,9.0581469 V 7.9456453 l 1.1058025,1.1055492 c 0.608191,0.6080521 1.105802,1.1086775 1.105802,1.1125015 0,0.0038 -0.497611,0.007 -1.105802,0.007 H 9.8293515 Z" transform="matrix(5,0,0,5,0,-30)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
2044
docs/doxygen_html/html/doxygen.css
Normal file
28
docs/doxygen_html/html/doxygen.svg
Normal file
|
After Width: | Height: | Size: 15 KiB |
192
docs/doxygen_html/html/dynsections.js
Normal file
|
|
@ -0,0 +1,192 @@
|
||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
@licend The above is the entire license notice for the JavaScript code in this file
|
||||||
|
*/
|
||||||
|
function toggleVisibility(linkObj)
|
||||||
|
{
|
||||||
|
var base = $(linkObj).attr('id');
|
||||||
|
var summary = $('#'+base+'-summary');
|
||||||
|
var content = $('#'+base+'-content');
|
||||||
|
var trigger = $('#'+base+'-trigger');
|
||||||
|
var src=$(trigger).attr('src');
|
||||||
|
if (content.is(':visible')===true) {
|
||||||
|
content.hide();
|
||||||
|
summary.show();
|
||||||
|
$(linkObj).addClass('closed').removeClass('opened');
|
||||||
|
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||||
|
} else {
|
||||||
|
content.show();
|
||||||
|
summary.hide();
|
||||||
|
$(linkObj).removeClass('closed').addClass('opened');
|
||||||
|
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateStripes()
|
||||||
|
{
|
||||||
|
$('table.directory tr').
|
||||||
|
removeClass('even').filter(':visible:even').addClass('even');
|
||||||
|
$('table.directory tr').
|
||||||
|
removeClass('odd').filter(':visible:odd').addClass('odd');
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleLevel(level)
|
||||||
|
{
|
||||||
|
$('table.directory tr').each(function() {
|
||||||
|
var l = this.id.split('_').length-1;
|
||||||
|
var i = $('#img'+this.id.substring(3));
|
||||||
|
var a = $('#arr'+this.id.substring(3));
|
||||||
|
if (l<level+1) {
|
||||||
|
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||||
|
a.html('▼');
|
||||||
|
$(this).show();
|
||||||
|
} else if (l==level+1) {
|
||||||
|
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||||
|
a.html('►');
|
||||||
|
$(this).show();
|
||||||
|
} else {
|
||||||
|
$(this).hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
updateStripes();
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleFolder(id)
|
||||||
|
{
|
||||||
|
// the clicked row
|
||||||
|
var currentRow = $('#row_'+id);
|
||||||
|
|
||||||
|
// all rows after the clicked row
|
||||||
|
var rows = currentRow.nextAll("tr");
|
||||||
|
|
||||||
|
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||||
|
|
||||||
|
// only match elements AFTER this one (can't hide elements before)
|
||||||
|
var childRows = rows.filter(function() { return this.id.match(re); });
|
||||||
|
|
||||||
|
// first row is visible we are HIDING
|
||||||
|
if (childRows.filter(':first').is(':visible')===true) {
|
||||||
|
// replace down arrow by right arrow for current row
|
||||||
|
var currentRowSpans = currentRow.find("span");
|
||||||
|
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||||
|
currentRowSpans.filter(".arrow").html('►');
|
||||||
|
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||||
|
} else { // we are SHOWING
|
||||||
|
// replace right arrow by down arrow for current row
|
||||||
|
var currentRowSpans = currentRow.find("span");
|
||||||
|
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||||
|
currentRowSpans.filter(".arrow").html('▼');
|
||||||
|
// replace down arrows by right arrows for child rows
|
||||||
|
var childRowsSpans = childRows.find("span");
|
||||||
|
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||||
|
childRowsSpans.filter(".arrow").html('►');
|
||||||
|
childRows.show(); //show all children
|
||||||
|
}
|
||||||
|
updateStripes();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function toggleInherit(id)
|
||||||
|
{
|
||||||
|
var rows = $('tr.inherit.'+id);
|
||||||
|
var img = $('tr.inherit_header.'+id+' img');
|
||||||
|
var src = $(img).attr('src');
|
||||||
|
if (rows.filter(':first').is(':visible')===true) {
|
||||||
|
rows.css('display','none');
|
||||||
|
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||||
|
} else {
|
||||||
|
rows.css('display','table-row'); // using show() causes jump in firefox
|
||||||
|
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var opened=true;
|
||||||
|
// in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes
|
||||||
|
var plusImg = [ "var(--fold-plus-image)", "var(--fold-plus-image-relpath)" ];
|
||||||
|
var minusImg = [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ];
|
||||||
|
|
||||||
|
// toggle all folding blocks
|
||||||
|
function codefold_toggle_all(relPath) {
|
||||||
|
if (opened) {
|
||||||
|
$('#fold_all').css('background-image',plusImg[relPath]);
|
||||||
|
$('div[id^=foldopen]').hide();
|
||||||
|
$('div[id^=foldclosed]').show();
|
||||||
|
} else {
|
||||||
|
$('#fold_all').css('background-image',minusImg[relPath]);
|
||||||
|
$('div[id^=foldopen]').show();
|
||||||
|
$('div[id^=foldclosed]').hide();
|
||||||
|
}
|
||||||
|
opened=!opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
// toggle single folding block
|
||||||
|
function codefold_toggle(id) {
|
||||||
|
$('#foldopen'+id).toggle();
|
||||||
|
$('#foldclosed'+id).toggle();
|
||||||
|
}
|
||||||
|
function init_codefold(relPath) {
|
||||||
|
$('span[class=lineno]').css(
|
||||||
|
{'padding-right':'4px',
|
||||||
|
'margin-right':'2px',
|
||||||
|
'display':'inline-block',
|
||||||
|
'width':'54px',
|
||||||
|
'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%'
|
||||||
|
});
|
||||||
|
// add global toggle to first line
|
||||||
|
$('span[class=lineno]:first').append('<span class="fold" id="fold_all" '+
|
||||||
|
'onclick="javascript:codefold_toggle_all('+relPath+');" '+
|
||||||
|
'style="background-image:'+minusImg[relPath]+';"></span>');
|
||||||
|
// add vertical lines to other rows
|
||||||
|
$('span[class=lineno]').not(':eq(0)').append('<span class="fold"></span>');
|
||||||
|
// add toggle controls to lines with fold divs
|
||||||
|
$('div[class=foldopen]').each(function() {
|
||||||
|
// extract specific id to use
|
||||||
|
var id = $(this).attr('id').replace('foldopen','');
|
||||||
|
// extract start and end foldable fragment attributes
|
||||||
|
var start = $(this).attr('data-start');
|
||||||
|
var end = $(this).attr('data-end');
|
||||||
|
// replace normal fold span with controls for the first line of a foldable fragment
|
||||||
|
$(this).find('span[class=fold]:first').replaceWith('<span class="fold" '+
|
||||||
|
'onclick="javascript:codefold_toggle(\''+id+'\');" '+
|
||||||
|
'style="background-image:'+minusImg[relPath]+';"></span>');
|
||||||
|
// append div for folded (closed) representation
|
||||||
|
$(this).after('<div id="foldclosed'+id+'" class="foldclosed" style="display:none;"></div>');
|
||||||
|
// extract the first line from the "open" section to represent closed content
|
||||||
|
var line = $(this).children().first().clone();
|
||||||
|
// remove any glow that might still be active on the original line
|
||||||
|
$(line).removeClass('glow');
|
||||||
|
if (start) {
|
||||||
|
// if line already ends with a start marker (e.g. trailing {), remove it
|
||||||
|
$(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),''));
|
||||||
|
}
|
||||||
|
// replace minus with plus symbol
|
||||||
|
$(line).find('span[class=fold]').css('background-image',plusImg[relPath]);
|
||||||
|
// append ellipsis
|
||||||
|
$(line).append(' '+start+'<a href="javascript:codefold_toggle(\''+id+'\')">…</a>'+end);
|
||||||
|
// insert constructed line into closed div
|
||||||
|
$('#foldclosed'+id).html(line);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @license-end */
|
||||||
88
docs/doxygen_html/html/files.html
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: File List</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">File List</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
|
||||||
|
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
|
||||||
|
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')"> </span><a class="el" href="dir_207bf8c12f5ffd71867b262b7e0c4f41.html" target="_self">minix</a></td><td class="desc"></td></tr>
|
||||||
|
<tr id="row_0_0_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">▼</span><span id="img_0_0_" class="iconfopen" onclick="toggleFolder('0_0_')"> </span><a class="el" href="dir_a593f8436b1bc29ffa99b7ee170e7ac1.html" target="_self">kernel</a></td><td class="desc"></td></tr>
|
||||||
|
<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="k__spinlock_8h_source.html"><span class="icondoc"></span></a><a class="el" href="k__spinlock_8h.html" target="_self">k_spinlock.h</a></td><td class="desc">Defines a simple, non-recursive spinlock using GCC atomic builtins </td></tr>
|
||||||
|
</table>
|
||||||
|
</div><!-- directory -->
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
11
docs/doxygen_html/html/folderclosed.svg
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#4665A2;">
|
||||||
|
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
|
||||||
|
</g>
|
||||||
|
<g style="fill:#D8DFEE;stroke-width:0;">
|
||||||
|
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
11
docs/doxygen_html/html/folderclosedd.svg
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#C4CFE5;">
|
||||||
|
<path d="M1,5.998l-0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm2,-0l-0,16.002c-0,0.796 0.316,1.559 0.879,2.121c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121c0,-3.486 0,-8.514 0,-12c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998Z"/>
|
||||||
|
</g>
|
||||||
|
<g style="fill:#4665A2;stroke-width:0;">
|
||||||
|
<path d="M 5.6063709,24.951908 C 4.3924646,24.775461 3.4197129,23.899792 3.1031586,22.698521 L 3.0216155,22.389078 V 13.997725 5.6063709 L 3.1037477,5.2982247 C 3.3956682,4.2029881 4.1802788,3.412126 5.2787258,3.105917 5.5646428,3.0262132 5.6154982,3.0244963 8.0611641,3.0119829 l 2.4911989,-0.012746 1.932009,1.9300342 c 1.344142,1.3427669 1.976319,1.9498819 2.07763,1.9952626 0.137456,0.061571 0.474218,0.066269 6.006826,0.083795 l 5.861206,0.018568 0.29124,0.081916 c 1.094895,0.3079569 1.890116,1.109428 2.175567,2.192667 l 0.08154,0.3094425 V 16 22.389078 l -0.08154,0.309443 c -0.28446,1.079482 -1.086411,1.888085 -2.175567,2.193614 l -0.29124,0.0817 -10.302616,0.0049 c -5.700217,0.0027 -10.4001945,-0.0093 -10.5210471,-0.02684 z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
17
docs/doxygen_html/html/folderopen.svg
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#4665A2;">
|
||||||
|
<path
|
||||||
|
d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"
|
||||||
|
id="path2" />
|
||||||
|
</g>
|
||||||
|
<g style="fill:#D8DFEE;stroke-width:0;">
|
||||||
|
<path
|
||||||
|
d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z"
|
||||||
|
id="path199" /><path
|
||||||
|
d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z"
|
||||||
|
id="path201" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.2 KiB |
12
docs/doxygen_html/html/folderopend.svg
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" width="16" height="24" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||||
|
<g style="fill:#C4CFE5;">
|
||||||
|
<path d="M1,5.998l0,16.002c-0,1.326 0.527,2.598 1.464,3.536c0.938,0.937 2.21,1.464 3.536,1.464c5.322,0 14.678,-0 20,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-3.486 0,-8.514 0,-12c0,-1.326 -0.527,-2.598 -1.464,-3.536c-0.938,-0.937 -2.21,-1.464 -3.536,-1.464c-0,0 -10.586,0 -10.586,0c0,-0 -3.707,-3.707 -3.707,-3.707c-0.187,-0.188 -0.442,-0.293 -0.707,-0.293l-5.002,0c-2.76,0 -4.998,2.238 -4.998,4.998Zm28,14.415l-3.456,-5.925c-0.538,-0.921 -1.524,-1.488 -2.591,-1.488c-0,0 -12.905,0 -12.906,0c-1.067,0 -2.053,0.567 -2.591,1.488l-4.453,7.635c0.03,0.751 0.342,1.465 0.876,1.998c0.562,0.563 1.325,0.879 2.121,0.879l20,0c0.796,0 1.559,-0.316 2.121,-0.879c0.563,-0.562 0.879,-1.325 0.879,-2.121l0,-1.587Zm0,-3.969l0,-6.444c0,-0.796 -0.316,-1.559 -0.879,-2.121c-0.562,-0.563 -1.325,-0.879 -2.121,-0.879c-7.738,0 -11,0 -11,0c-0.265,0 -0.52,-0.105 -0.707,-0.293c-0,0 -3.707,-3.707 -3.707,-3.707c-0,0 -4.588,0 -4.588,0c-1.656,0 -2.998,1.342 -2.998,2.998l0,12.16l2.729,-4.677c0.896,-1.536 2.54,-2.481 4.318,-2.481c3.354,0 9.552,0 12.906,0c1.778,0 3.422,0.945 4.318,2.481l1.729,2.963Z"/>
|
||||||
|
</g>
|
||||||
|
<g style="fill:#4665A2;stroke-width:0;">
|
||||||
|
<path d="M 5.3879408,24.913408 C 4.1598821,24.650818 3.1571088,23.558656 3.053503,22.370876 L 3.0312746,22.116041 5.2606813,18.293515 C 6.486855,16.191126 7.5598351,14.372696 7.6450818,14.25256 8.0043056,13.746312 8.5423079,13.363007 9.2104664,13.137285 l 0.2548351,-0.08609 6.9294785,-0.0097 c 6.805096,-0.0095 6.934944,-0.0084 7.234011,0.06267 0.695577,0.165199 1.290483,0.557253 1.714887,1.130141 0.08158,0.110125 0.938747,1.556711 1.90481,3.214634 l 1.756479,3.014406 -0.0186,0.971942 c -0.01387,0.724723 -0.03365,1.032131 -0.07778,1.208575 -0.242792,0.970733 -0.88732,1.735415 -1.772382,2.102793 -0.58835,0.244217 0.247209,0.227436 -11.161974,0.224159 -9.0281537,-0.0026 -10.3636023,-0.0098 -10.5862902,-0.05746 z" />
|
||||||
|
<path d="M 3.0126385,11.849829 3.0235061,5.5881684 3.1020974,5.2969283 C 3.3478146,4.3863605 3.93576,3.6757372 4.756668,3.2971229 5.3293315,3.0330025 5.1813272,3.0450949 8.0130385,3.0310668 l 2.5522875,-0.012644 1.918693,1.9107086 c 1.404146,1.3983023 1.964459,1.9332518 2.089351,1.9947704 l 0.170657,0.084062 5.897611,0.019367 c 5.553257,0.018236 5.910365,0.023213 6.116041,0.085231 1.102257,0.3323708 1.857042,1.1184422 2.154229,2.2435244 0.05645,0.2137228 0.06373,0.5643981 0.07519,3.6220748 0.0076,2.032169 -5.42e-4,3.370979 -0.02041,3.349261 -0.0182,-0.0199 -0.414296,-0.691472 -0.880217,-1.492382 -0.46592,-0.80091 -0.93093,-1.577954 -1.033354,-1.726764 -0.735716,-1.0689 -1.983568,-1.844244 -3.315972,-2.060353 -0.280375,-0.04548 -1.345158,-0.05334 -7.238708,-0.05347 -4.713933,-1.09e-4 -6.9931825,0.01221 -7.1717862,0.03874 -1.3002273,0.193134 -2.4770512,0.889916 -3.283628,1.944192 -0.1076466,0.140705 -0.8359664,1.353438 -1.6184885,2.694963 L 3.0017709,18.11149 Z" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
83
docs/doxygen_html/html/functions.html
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: Class Members</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div><ul>
|
||||||
|
<li>acquisitions : <a class="el" href="structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390">simple_spinlock_t</a></li>
|
||||||
|
<li>contentions : <a class="el" href="structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041">simple_spinlock_t</a></li>
|
||||||
|
<li>locked : <a class="el" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">simple_spinlock_t</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
83
docs/doxygen_html/html/functions_vars.html
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: Class Members - Variables</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock">Here is a list of all variables with links to the classes they belong to:</div><ul>
|
||||||
|
<li>acquisitions : <a class="el" href="structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390">simple_spinlock_t</a></li>
|
||||||
|
<li>contentions : <a class="el" href="structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041">simple_spinlock_t</a></li>
|
||||||
|
<li>locked : <a class="el" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">simple_spinlock_t</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
87
docs/doxygen_html/html/globals.html
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: File Members</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock">Here is a list of all file members with links to the files they belong to:</div><ul>
|
||||||
|
<li>arch_pause() : <a class="el" href="k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c">k_spinlock.h</a></li>
|
||||||
|
<li>kernel_yield() : <a class="el" href="k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed">k_spinlock.h</a></li>
|
||||||
|
<li>KERNEL_YIELD_DEFINED : <a class="el" href="k__spinlock_8h.html#ab7e692108b27a8b15089a297b451f293">k_spinlock.h</a></li>
|
||||||
|
<li>MAX_SPIN_THRESHOLD : <a class="el" href="k__spinlock_8h.html#ab64669b95d563f14428a1f073106ef04">k_spinlock.h</a></li>
|
||||||
|
<li>simple_spin_init() : <a class="el" href="k__spinlock_8h.html#a614711109a66b779e92036c573e57002">k_spinlock.h</a></li>
|
||||||
|
<li>simple_spin_lock() : <a class="el" href="k__spinlock_8h.html#a8e8fd03b0cdf6f309bde43577c3dd548">k_spinlock.h</a></li>
|
||||||
|
<li>simple_spin_unlock() : <a class="el" href="k__spinlock_8h.html#ad62d430c4e62aaa0d945088f5e1adc32">k_spinlock.h</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
82
docs/doxygen_html/html/globals_defs.html
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: File Members</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock">Here is a list of all macros with links to the files they belong to:</div><ul>
|
||||||
|
<li>KERNEL_YIELD_DEFINED : <a class="el" href="k__spinlock_8h.html#ab7e692108b27a8b15089a297b451f293">k_spinlock.h</a></li>
|
||||||
|
<li>MAX_SPIN_THRESHOLD : <a class="el" href="k__spinlock_8h.html#ab64669b95d563f14428a1f073106ef04">k_spinlock.h</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
85
docs/doxygen_html/html/globals_func.html
Normal file
|
|
@ -0,0 +1,85 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: File Members</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contents">
|
||||||
|
<div class="textblock">Here is a list of all functions with links to the files they belong to:</div><ul>
|
||||||
|
<li>arch_pause() : <a class="el" href="k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c">k_spinlock.h</a></li>
|
||||||
|
<li>kernel_yield() : <a class="el" href="k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed">k_spinlock.h</a></li>
|
||||||
|
<li>simple_spin_init() : <a class="el" href="k__spinlock_8h.html#a614711109a66b779e92036c573e57002">k_spinlock.h</a></li>
|
||||||
|
<li>simple_spin_lock() : <a class="el" href="k__spinlock_8h.html#a8e8fd03b0cdf6f309bde43577c3dd548">k_spinlock.h</a></li>
|
||||||
|
<li>simple_spin_unlock() : <a class="el" href="k__spinlock_8h.html#ad62d430c4e62aaa0d945088f5e1adc32">k_spinlock.h</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
141
docs/doxygen_html/html/graph_legend.html
Normal file
|
|
@ -0,0 +1,141 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: Graph Legend</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">Graph Legend</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<p>This page explains how to interpret the graphs that are generated by doxygen.</p>
|
||||||
|
<p>Consider the following example: </p><div class="fragment"><div class="line"><span class="comment">/*! Invisible class because of truncation */</span></div>
|
||||||
|
<div class="line"><span class="keyword">class </span>Invisible { };</div>
|
||||||
|
<div class="line"><span class="comment"></span> </div>
|
||||||
|
<div class="line"><span class="comment">/*! Truncated class, inheritance relation is hidden */</span></div>
|
||||||
|
<div class="line"><span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };</div>
|
||||||
|
<div class="line"> </div>
|
||||||
|
<div class="line"><span class="comment">/* Class not documented with doxygen comments */</span></div>
|
||||||
|
<div class="line"><span class="keyword">class </span>Undocumented { };</div>
|
||||||
|
<div class="line"><span class="comment"></span> </div>
|
||||||
|
<div class="line"><span class="comment">/*! Class that is inherited using public inheritance */</span></div>
|
||||||
|
<div class="line"><span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };</div>
|
||||||
|
<div class="line"><span class="comment"></span> </div>
|
||||||
|
<div class="line"><span class="comment">/*! A template class */</span></div>
|
||||||
|
<div class="line"><span class="keyword">template</span><<span class="keyword">class</span> T> <span class="keyword">class </span>Templ { };</div>
|
||||||
|
<div class="line"><span class="comment"></span> </div>
|
||||||
|
<div class="line"><span class="comment">/*! Class that is inherited using protected inheritance */</span></div>
|
||||||
|
<div class="line"><span class="keyword">class </span>ProtectedBase { };</div>
|
||||||
|
<div class="line"><span class="comment"></span> </div>
|
||||||
|
<div class="line"><span class="comment">/*! Class that is inherited using private inheritance */</span></div>
|
||||||
|
<div class="line"><span class="keyword">class </span>PrivateBase { };</div>
|
||||||
|
<div class="line"><span class="comment"></span> </div>
|
||||||
|
<div class="line"><span class="comment">/*! Class that is used by the Inherited class */</span></div>
|
||||||
|
<div class="line"><span class="keyword">class </span>Used { };</div>
|
||||||
|
<div class="line"><span class="comment"></span> </div>
|
||||||
|
<div class="line"><span class="comment">/*! Super class that inherits a number of other classes */</span></div>
|
||||||
|
<div class="line"><span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,</div>
|
||||||
|
<div class="line"> <span class="keyword">protected</span> ProtectedBase,</div>
|
||||||
|
<div class="line"> <span class="keyword">private</span> PrivateBase,</div>
|
||||||
|
<div class="line"> <span class="keyword">public</span> Undocumented,</div>
|
||||||
|
<div class="line"> <span class="keyword">public</span> Templ<int></div>
|
||||||
|
<div class="line">{</div>
|
||||||
|
<div class="line"> <span class="keyword">private</span>:</div>
|
||||||
|
<div class="line"> Used *m_usedClass;</div>
|
||||||
|
<div class="line">};</div>
|
||||||
|
</div><!-- fragment --><p> This will result in the following graph:</p>
|
||||||
|
<center><img src="graph_legend.png" alt="" class="inline"/></center><p>The boxes in the above graph have the following meaning: </p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
A filled gray box represents the struct or class for which the graph is generated. </li>
|
||||||
|
<li>
|
||||||
|
A box with a black border denotes a documented struct or class. </li>
|
||||||
|
<li>
|
||||||
|
A box with a gray border denotes an undocumented struct or class. </li>
|
||||||
|
<li>
|
||||||
|
A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
|
||||||
|
</ul>
|
||||||
|
<p>The arrows have the following meaning: </p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
A blue arrow is used to visualize a public inheritance relation between two classes. </li>
|
||||||
|
<li>
|
||||||
|
A dark green arrow is used for protected inheritance. </li>
|
||||||
|
<li>
|
||||||
|
A dark red arrow is used for private inheritance. </li>
|
||||||
|
<li>
|
||||||
|
A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible. </li>
|
||||||
|
<li>
|
||||||
|
A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance. </li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1
docs/doxygen_html/html/graph_legend.md5
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
f74606a252eb303675caf37987d0b7af
|
||||||
BIN
docs/doxygen_html/html/graph_legend.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
81
docs/doxygen_html/html/index.html
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: Main Page</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">MINIX Kernel Documentation Documentation</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
34
docs/doxygen_html/html/jquery.js
vendored
Normal file
338
docs/doxygen_html/html/k__spinlock_8h.html
Normal file
|
|
@ -0,0 +1,338 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: minix/kernel/k_spinlock.h File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_207bf8c12f5ffd71867b262b7e0c4f41.html">minix</a></li><li class="navelem"><a class="el" href="dir_a593f8436b1bc29ffa99b7ee170e7ac1.html">kernel</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#nested-classes">Classes</a> |
|
||||||
|
<a href="#define-members">Macros</a> |
|
||||||
|
<a href="#func-members">Functions</a> </div>
|
||||||
|
<div class="headertitle"><div class="title">k_spinlock.h File Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>Defines a simple, non-recursive spinlock using GCC atomic builtins.
|
||||||
|
<a href="#details">More...</a></p>
|
||||||
|
<div class="textblock"><code>#include <minix/sys_config.h></code><br />
|
||||||
|
</div><div class="textblock"><div class="dynheader">
|
||||||
|
Include dependency graph for k_spinlock.h:</div>
|
||||||
|
<div class="dyncontent">
|
||||||
|
<div class="center"><img src="k__spinlock_8h__incl.png" border="0" usemap="#aminix_2kernel_2k__spinlock_8h" alt=""/></div>
|
||||||
|
<map name="aminix_2kernel_2k__spinlock_8h" id="aminix_2kernel_2k__spinlock_8h">
|
||||||
|
<area shape="rect" title="Defines a simple, non-recursive spinlock using GCC atomic builtins." alt="" coords="5,5,193,31"/>
|
||||||
|
<area shape="rect" title=" " alt="" coords="28,79,171,104"/>
|
||||||
|
<area shape="poly" title=" " alt="" coords="102,31,102,65,97,65,97,31"/>
|
||||||
|
</map>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p><a href="k__spinlock_8h_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
|
||||||
|
Classes</h2></td></tr>
|
||||||
|
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a></td></tr>
|
||||||
|
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure representing a simple spinlock. <a href="structsimple__spinlock__t.html#details">More...</a><br /></td></tr>
|
||||||
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table><table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
|
||||||
|
Macros</h2></td></tr>
|
||||||
|
<tr class="memitem:ab64669b95d563f14428a1f073106ef04" id="r_ab64669b95d563f14428a1f073106ef04"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="k__spinlock_8h.html#ab64669b95d563f14428a1f073106ef04">MAX_SPIN_THRESHOLD</a>   100000</td></tr>
|
||||||
|
<tr class="memdesc:ab64669b95d563f14428a1f073106ef04"><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of spin iterations before attempting to yield. <br /></td></tr>
|
||||||
|
<tr class="separator:ab64669b95d563f14428a1f073106ef04"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ab7e692108b27a8b15089a297b451f293" id="r_ab7e692108b27a8b15089a297b451f293"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="k__spinlock_8h.html#ab7e692108b27a8b15089a297b451f293">KERNEL_YIELD_DEFINED</a></td></tr>
|
||||||
|
<tr class="separator:ab7e692108b27a8b15089a297b451f293"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table><table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
|
||||||
|
Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:a79887c626e823a36834e349fb75c539c" id="r_a79887c626e823a36834e349fb75c539c"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c">arch_pause</a> (void)</td></tr>
|
||||||
|
<tr class="memdesc:a79887c626e823a36834e349fb75c539c"><td class="mdescLeft"> </td><td class="mdescRight">Placeholder for arch_pause on non-x86 architectures. <br /></td></tr>
|
||||||
|
<tr class="separator:a79887c626e823a36834e349fb75c539c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:a3b96827abeb83529b5d946e2654231ed" id="r_a3b96827abeb83529b5d946e2654231ed"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed">kernel_yield</a> (void)</td></tr>
|
||||||
|
<tr class="memdesc:a3b96827abeb83529b5d946e2654231ed"><td class="mdescLeft"> </td><td class="mdescRight">Yields the CPU, typically to the scheduler. (Stub Implementation) <br /></td></tr>
|
||||||
|
<tr class="separator:a3b96827abeb83529b5d946e2654231ed"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:a614711109a66b779e92036c573e57002" id="r_a614711109a66b779e92036c573e57002"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="k__spinlock_8h.html#a614711109a66b779e92036c573e57002">simple_spin_init</a> (<a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a> *lock)</td></tr>
|
||||||
|
<tr class="memdesc:a614711109a66b779e92036c573e57002"><td class="mdescLeft"> </td><td class="mdescRight">Initializes a spinlock to the unlocked state and resets statistics. <br /></td></tr>
|
||||||
|
<tr class="separator:a614711109a66b779e92036c573e57002"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:a8e8fd03b0cdf6f309bde43577c3dd548" id="r_a8e8fd03b0cdf6f309bde43577c3dd548"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="k__spinlock_8h.html#a8e8fd03b0cdf6f309bde43577c3dd548">simple_spin_lock</a> (<a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a> *lock)</td></tr>
|
||||||
|
<tr class="memdesc:a8e8fd03b0cdf6f309bde43577c3dd548"><td class="mdescLeft"> </td><td class="mdescRight">Acquires a spinlock, busy-waiting if necessary. <br /></td></tr>
|
||||||
|
<tr class="separator:a8e8fd03b0cdf6f309bde43577c3dd548"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ad62d430c4e62aaa0d945088f5e1adc32" id="r_ad62d430c4e62aaa0d945088f5e1adc32"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="k__spinlock_8h.html#ad62d430c4e62aaa0d945088f5e1adc32">simple_spin_unlock</a> (<a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a> *lock)</td></tr>
|
||||||
|
<tr class="memdesc:ad62d430c4e62aaa0d945088f5e1adc32"><td class="mdescLeft"> </td><td class="mdescRight">Releases a previously acquired spinlock. <br /></td></tr>
|
||||||
|
<tr class="separator:ad62d430c4e62aaa0d945088f5e1adc32"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p>Defines a simple, non-recursive spinlock using GCC atomic builtins. </p>
|
||||||
|
<p>This header provides a basic spinlock implementation suitable for short critical sections, particularly in contexts where sleeping is not permissible (e.g., some interrupt handlers or core kernel code before schedulers are fully active). It is designed with SMP considerations, relying on GCC's atomic builtins which typically ensure full memory barriers for sequential consistency. Includes adaptive spinning using <code><a class="el" href="k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c" title="Placeholder for arch_pause on non-x86 architectures.">arch_pause()</a></code> for supported architectures. </p>
|
||||||
|
</div><h2 class="groupheader">Macro Definition Documentation</h2>
|
||||||
|
<a id="ab7e692108b27a8b15089a297b451f293" name="ab7e692108b27a8b15089a297b451f293"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#ab7e692108b27a8b15089a297b451f293">◆ </a></span>KERNEL_YIELD_DEFINED</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">#define KERNEL_YIELD_DEFINED</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="ab64669b95d563f14428a1f073106ef04" name="ab64669b95d563f14428a1f073106ef04"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#ab64669b95d563f14428a1f073106ef04">◆ </a></span>MAX_SPIN_THRESHOLD</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">#define MAX_SPIN_THRESHOLD   100000</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Maximum number of spin iterations before attempting to yield. </p>
|
||||||
|
<p>This threshold is used in <code>simple_spin_lock</code> to prevent a CPU from monopolizing resources by spinning indefinitely on a highly contended lock. After this many spins in the inner loop, <code><a class="el" href="k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed" title="Yields the CPU, typically to the scheduler. (Stub Implementation)">kernel_yield()</a></code> is called. The value should be tuned based on system characteristics and expected contention levels. </p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<h2 class="groupheader">Function Documentation</h2>
|
||||||
|
<a id="a79887c626e823a36834e349fb75c539c" name="a79887c626e823a36834e349fb75c539c"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a79887c626e823a36834e349fb75c539c">◆ </a></span>arch_pause()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">static void arch_pause </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">void </td>
|
||||||
|
<td class="paramname"></td><td>)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Placeholder for arch_pause on non-x86 architectures. </p>
|
||||||
|
<p>For architectures other than i386/x86_64, this function currently acts as a no-op. It can be defined with architecture-specific pause/yield instructions if available to improve spin-wait loop performance. </p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="a3b96827abeb83529b5d946e2654231ed" name="a3b96827abeb83529b5d946e2654231ed"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a3b96827abeb83529b5d946e2654231ed">◆ </a></span>kernel_yield()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">static void kernel_yield </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype">void </td>
|
||||||
|
<td class="paramname"></td><td>)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Yields the CPU, typically to the scheduler. (Stub Implementation) </p>
|
||||||
|
<p>This function is called when a spinlock has been spinning for too long (exceeding MAX_SPIN_THRESHOLD), as a mechanism to prevent CPU monopolization and allow other threads/processes to run.</p>
|
||||||
|
<dl class="section note"><dt>Note</dt><dd>This is a stub implementation. A full implementation would typically involve interacting with the system scheduler to relinquish the CPU. For now, it at least performs an <code><a class="el" href="k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c" title="Placeholder for arch_pause on non-x86 architectures.">arch_pause()</a></code> to reduce contention. A real implementation might call something like <code>sched_yield()</code> or <code>yield()</code>. </dd></dl>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="a614711109a66b779e92036c573e57002" name="a614711109a66b779e92036c573e57002"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a614711109a66b779e92036c573e57002">◆ </a></span>simple_spin_init()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">static void simple_spin_init </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype"><a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a> * </td>
|
||||||
|
<td class="paramname"><em>lock</em></td><td>)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Initializes a spinlock to the unlocked state and resets statistics. </p>
|
||||||
|
<dl class="params"><dt>Parameters</dt><dd>
|
||||||
|
<table class="params">
|
||||||
|
<tr><td class="paramname">lock</td><td>Pointer to the <a class="el" href="structsimple__spinlock__t.html" title="Structure representing a simple spinlock.">simple_spinlock_t</a> to initialize.</td></tr>
|
||||||
|
</table>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<p>This function must be called before the spinlock is used for the first time. It sets the lock state to 0 (unlocked) and initializes statistics counters to zero. </p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="a8e8fd03b0cdf6f309bde43577c3dd548" name="a8e8fd03b0cdf6f309bde43577c3dd548"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a8e8fd03b0cdf6f309bde43577c3dd548">◆ </a></span>simple_spin_lock()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">static void simple_spin_lock </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype"><a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a> * </td>
|
||||||
|
<td class="paramname"><em>lock</em></td><td>)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Acquires a spinlock, busy-waiting if necessary. </p>
|
||||||
|
<dl class="params"><dt>Parameters</dt><dd>
|
||||||
|
<table class="params">
|
||||||
|
<tr><td class="paramname">lock</td><td>Pointer to the <a class="el" href="structsimple__spinlock__t.html" title="Structure representing a simple spinlock.">simple_spinlock_t</a> to acquire.</td></tr>
|
||||||
|
</table>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<p>This function attempts to acquire the lock. If the lock is already held, it will spin (busy-wait) until the lock becomes available. This function is non-recursive; a thread attempting to acquire a lock it already holds will deadlock. Includes a spin counter and calls <code><a class="el" href="k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed" title="Yields the CPU, typically to the scheduler. (Stub Implementation)">kernel_yield()</a></code> if spinning excessively. Also updates lock acquisition and contention statistics. </p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="ad62d430c4e62aaa0d945088f5e1adc32" name="ad62d430c4e62aaa0d945088f5e1adc32"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#ad62d430c4e62aaa0d945088f5e1adc32">◆ </a></span>simple_spin_unlock()</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="mlabels">
|
||||||
|
<tr>
|
||||||
|
<td class="mlabels-left">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">static void simple_spin_unlock </td>
|
||||||
|
<td>(</td>
|
||||||
|
<td class="paramtype"><a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a> * </td>
|
||||||
|
<td class="paramname"><em>lock</em></td><td>)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="mlabels-right">
|
||||||
|
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Releases a previously acquired spinlock. </p>
|
||||||
|
<dl class="params"><dt>Parameters</dt><dd>
|
||||||
|
<table class="params">
|
||||||
|
<tr><td class="paramname">lock</td><td>Pointer to the <a class="el" href="structsimple__spinlock__t.html" title="Structure representing a simple spinlock.">simple_spinlock_t</a> to release.</td></tr>
|
||||||
|
</table>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<p>This function releases the lock, allowing another thread to acquire it. It must only be called by the thread that currently holds the lock. </p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
5
docs/doxygen_html/html/k__spinlock_8h__incl.map
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
<map id="minix/kernel/k_spinlock.h" name="minix/kernel/k_spinlock.h">
|
||||||
|
<area shape="rect" id="Node000001" title="Defines a simple, non-recursive spinlock using GCC atomic builtins." alt="" coords="5,5,193,31"/>
|
||||||
|
<area shape="rect" id="Node000002" title=" " alt="" coords="28,79,171,104"/>
|
||||||
|
<area shape="poly" id="edge1_Node000001_Node000002" title=" " alt="" coords="102,31,102,65,97,65,97,31"/>
|
||||||
|
</map>
|
||||||
1
docs/doxygen_html/html/k__spinlock_8h__incl.md5
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
0f5eee4c63e2279b09ff9ead05640ac6
|
||||||
BIN
docs/doxygen_html/html/k__spinlock_8h__incl.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
220
docs/doxygen_html/html/k__spinlock_8h_source.html
Normal file
|
|
@ -0,0 +1,220 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: minix/kernel/k_spinlock.h Source File</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(document).ready(function() { init_codefold(0); });
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_207bf8c12f5ffd71867b262b7e0c4f41.html">minix</a></li><li class="navelem"><a class="el" href="dir_a593f8436b1bc29ffa99b7ee170e7ac1.html">kernel</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">k_spinlock.h</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<a href="k__spinlock_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
|
||||||
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#ifndef K_SPINLOCK_H</span></div>
|
||||||
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#define K_SPINLOCK_H</span></div>
|
||||||
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
|
||||||
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include <minix/sys_config.h></span> <span class="comment">/* For potential CONFIG_SMP or other system configs */</span></div>
|
||||||
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
|
||||||
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment">/* Include arch-specific definitions, e.g., for arch_pause() */</span></div>
|
||||||
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#if defined(__i386__) || defined(__x86_64__)</span></div>
|
||||||
|
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include "arch/i386/include/arch_cpu.h"</span> <span class="comment">// Provides arch_pause for x86</span></div>
|
||||||
|
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#else</span></div>
|
||||||
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c"> 29</a></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c">arch_pause</a>(<span class="keywordtype">void</span>) { <span class="comment">/* No-op */</span> }</div>
|
||||||
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#endif</span></div>
|
||||||
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
|
||||||
|
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="k__spinlock_8h.html#ab64669b95d563f14428a1f073106ef04"> 41</a></span><span class="preprocessor">#define MAX_SPIN_THRESHOLD 100000</span></div>
|
||||||
|
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
|
||||||
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#ifndef KERNEL_YIELD_DEFINED</span></div>
|
||||||
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="k__spinlock_8h.html#ab7e692108b27a8b15089a297b451f293"> 44</a></span><span class="preprocessor">#define KERNEL_YIELD_DEFINED</span></div>
|
||||||
|
<div class="foldopen" id="foldopen00057" data-start="{" data-end="}">
|
||||||
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed"> 57</a></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed">kernel_yield</a>(<span class="keywordtype">void</span>) {</div>
|
||||||
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="comment">/* Placeholder for actual yield. On x86, 'rep nop' is sometimes used</span></div>
|
||||||
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment"> * as a more potent pause than single 'pause', or actual scheduler yield.</span></div>
|
||||||
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment"> * For now, this can be a kprintf_stub for debugging or just a comment.</span></div>
|
||||||
|
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"> * A true yield would involve scheduler interaction.</span></div>
|
||||||
|
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment"> */</span></div>
|
||||||
|
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// kprintf_stub("kernel_yield() called (stub)\n"); // Uncomment for debugging</span></div>
|
||||||
|
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="comment">// yield calls</span></div>
|
||||||
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_function" href="k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c">arch_pause</a>(); <span class="comment">// At least do an arch_pause if yielding fully is complex.</span></div>
|
||||||
|
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>}</div>
|
||||||
|
</div>
|
||||||
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="preprocessor">#endif</span></div>
|
||||||
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
|
||||||
|
<div class="foldopen" id="foldopen00077" data-start="{" data-end="};">
|
||||||
|
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="structsimple__spinlock__t.html"> 77</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
|
||||||
|
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172"> 86</a></span> <span class="keyword">volatile</span> <span class="keywordtype">int</span> <a class="code hl_variable" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">locked</a>;</div>
|
||||||
|
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390"> 88</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code hl_variable" href="structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390">acquisitions</a>;</div>
|
||||||
|
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041"> 91</a></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code hl_variable" href="structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041">contentions</a>;</div>
|
||||||
|
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="comment">/* Future: unsigned long total_spin_cycles; // Could be added with more</span></div>
|
||||||
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="comment"> * advanced cycle counting */</span></div>
|
||||||
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span>} <a class="code hl_struct" href="structsimple__spinlock__t.html">simple_spinlock_t</a>;</div>
|
||||||
|
</div>
|
||||||
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
|
||||||
|
<div class="foldopen" id="foldopen00104" data-start="{" data-end="}">
|
||||||
|
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="k__spinlock_8h.html#a614711109a66b779e92036c573e57002"> 104</a></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="k__spinlock_8h.html#a614711109a66b779e92036c573e57002">simple_spin_init</a>(<a class="code hl_struct" href="structsimple__spinlock__t.html">simple_spinlock_t</a> *lock) {</div>
|
||||||
|
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// Initialize the lock state to 0 (unlocked).</span></div>
|
||||||
|
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> lock-><a class="code hl_variable" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">locked</a> = 0;</div>
|
||||||
|
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// Initialize statistics.</span></div>
|
||||||
|
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> lock-><a class="code hl_variable" href="structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390">acquisitions</a> = 0;</div>
|
||||||
|
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> lock-><a class="code hl_variable" href="structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041">contentions</a> = 0;</div>
|
||||||
|
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span>}</div>
|
||||||
|
</div>
|
||||||
|
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
|
||||||
|
<div class="foldopen" id="foldopen00123" data-start="{" data-end="}">
|
||||||
|
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="k__spinlock_8h.html#a8e8fd03b0cdf6f309bde43577c3dd548"> 123</a></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="k__spinlock_8h.html#a8e8fd03b0cdf6f309bde43577c3dd548">simple_spin_lock</a>(<a class="code hl_struct" href="structsimple__spinlock__t.html">simple_spinlock_t</a> *lock) {</div>
|
||||||
|
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// Attempt to acquire the lock immediately using atomic test-and-set.</span></div>
|
||||||
|
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// If __sync_lock_test_and_set returns 0, the lock was acquired successfully</span></div>
|
||||||
|
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// (it was 0 and is now 1).</span></div>
|
||||||
|
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">if</span> (__sync_lock_test_and_set(&lock-><a class="code hl_variable" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">locked</a>, 1) == 0) {</div>
|
||||||
|
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> lock-><a class="code hl_variable" href="structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390">acquisitions</a>++; <span class="comment">// Successfully acquired on the first try.</span></div>
|
||||||
|
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">return</span>; <span class="comment">// Lock acquired, no contention.</span></div>
|
||||||
|
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> }</div>
|
||||||
|
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
|
||||||
|
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="comment">// If the first attempt failed, the lock was already held. This is a</span></div>
|
||||||
|
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="comment">// contention.</span></div>
|
||||||
|
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> lock-><a class="code hl_variable" href="structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041">contentions</a>++;</div>
|
||||||
|
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">int</span> spin_count = 0; <span class="comment">// Initialize spin counter for this contention episode.</span></div>
|
||||||
|
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
|
||||||
|
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="comment">// Loop indefinitely, spinning and re-attempting to acquire the lock.</span></div>
|
||||||
|
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordflow">while</span> (1) {</div>
|
||||||
|
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// Inner busy-wait loop: Spin while the lock is held by someone else.</span></div>
|
||||||
|
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// This inner read loop (checking lock->locked directly) can be slightly</span></div>
|
||||||
|
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// more efficient on some architectures than repeatedly executing the atomic</span></div>
|
||||||
|
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// __sync_lock_test_and_set, as it might reduce bus contention.</span></div>
|
||||||
|
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keywordflow">while</span> (lock-><a class="code hl_variable" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">locked</a> != 0) {</div>
|
||||||
|
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="comment">/* arch_pause() provides a hint to the CPU that this is a spin-wait loop.</span></div>
|
||||||
|
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="comment"> * On x86, this is the "pause" instruction, which can improve performance</span></div>
|
||||||
|
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment"> * and reduce power consumption during the spin, especially on</span></div>
|
||||||
|
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span><span class="comment"> * hyper-threaded processors by yielding execution resources.</span></div>
|
||||||
|
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span><span class="comment"> */</span></div>
|
||||||
|
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <a class="code hl_function" href="k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c">arch_pause</a>();</div>
|
||||||
|
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
|
||||||
|
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> spin_count++; <span class="comment">// Increment spin counter.</span></div>
|
||||||
|
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">if</span> (spin_count > <a class="code hl_define" href="k__spinlock_8h.html#ab64669b95d563f14428a1f073106ef04">MAX_SPIN_THRESHOLD</a>) {</div>
|
||||||
|
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="comment">/* If we've spun too many times, call kernel_yield().</span></div>
|
||||||
|
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="comment"> * This is to prevent CPU monopolization on highly contended locks</span></div>
|
||||||
|
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="comment"> * by allowing other threads/processes to run.</span></div>
|
||||||
|
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="comment"> * The actual behavior of kernel_yield() depends on its implementation</span></div>
|
||||||
|
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="comment"> * (e.g., true scheduler yield or just a more potent pause).</span></div>
|
||||||
|
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span><span class="comment"> */</span></div>
|
||||||
|
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <a class="code hl_function" href="k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed">kernel_yield</a>();</div>
|
||||||
|
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> spin_count = 0; <span class="comment">// Reset counter after yielding.</span></div>
|
||||||
|
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> }</div>
|
||||||
|
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> }</div>
|
||||||
|
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> </div>
|
||||||
|
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="comment">// After observing lock->locked == 0 in the inner loop,</span></div>
|
||||||
|
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// attempt to acquire the lock again using atomic test-and-set.</span></div>
|
||||||
|
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">if</span> (__sync_lock_test_and_set(&lock-><a class="code hl_variable" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">locked</a>, 1) == 0) {</div>
|
||||||
|
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> lock-><a class="code hl_variable" href="structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390">acquisitions</a>++; <span class="comment">// Lock acquired after spinning.</span></div>
|
||||||
|
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">return</span>; <span class="comment">// Exit the function, lock is now held.</span></div>
|
||||||
|
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> }</div>
|
||||||
|
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="comment">// If __sync_lock_test_and_set still returned non-zero, it means another</span></div>
|
||||||
|
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// CPU/thread acquired the lock between our read of lock->locked and our TAS</span></div>
|
||||||
|
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// attempt (a race). In this case, the outer while(1) loop continues, and we</span></div>
|
||||||
|
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// re-enter the inner spin.</span></div>
|
||||||
|
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> }</div>
|
||||||
|
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span>}</div>
|
||||||
|
</div>
|
||||||
|
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
|
||||||
|
<div class="foldopen" id="foldopen00184" data-start="{" data-end="}">
|
||||||
|
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"><a class="line" href="k__spinlock_8h.html#ad62d430c4e62aaa0d945088f5e1adc32"> 184</a></span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="k__spinlock_8h.html#ad62d430c4e62aaa0d945088f5e1adc32">simple_spin_unlock</a>(<a class="code hl_struct" href="structsimple__spinlock__t.html">simple_spinlock_t</a> *lock) {</div>
|
||||||
|
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="comment">/* Atomically set lock->locked to 0 (unlocked).</span></div>
|
||||||
|
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment"> * __sync_lock_release provides a release memory barrier. This ensures that</span></div>
|
||||||
|
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="comment"> * all memory writes made by this thread within the critical section (before</span></div>
|
||||||
|
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="comment"> * this unlock) are visible to other CPUs before the lock is actually</span></div>
|
||||||
|
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="comment"> * released.</span></div>
|
||||||
|
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="comment"> */</span></div>
|
||||||
|
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> __sync_lock_release(&lock-><a class="code hl_variable" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">locked</a>);</div>
|
||||||
|
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span>}</div>
|
||||||
|
</div>
|
||||||
|
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
|
||||||
|
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="preprocessor">#endif </span><span class="comment">/* K_SPINLOCK_H */</span><span class="preprocessor"></span></div>
|
||||||
|
<div class="ttc" id="ak__spinlock_8h_html_a3b96827abeb83529b5d946e2654231ed"><div class="ttname"><a href="k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed">kernel_yield</a></div><div class="ttdeci">static void kernel_yield(void)</div><div class="ttdoc">Yields the CPU, typically to the scheduler. (Stub Implementation)</div><div class="ttdef"><b>Definition</b> k_spinlock.h:57</div></div>
|
||||||
|
<div class="ttc" id="ak__spinlock_8h_html_a614711109a66b779e92036c573e57002"><div class="ttname"><a href="k__spinlock_8h.html#a614711109a66b779e92036c573e57002">simple_spin_init</a></div><div class="ttdeci">static void simple_spin_init(simple_spinlock_t *lock)</div><div class="ttdoc">Initializes a spinlock to the unlocked state and resets statistics.</div><div class="ttdef"><b>Definition</b> k_spinlock.h:104</div></div>
|
||||||
|
<div class="ttc" id="ak__spinlock_8h_html_a79887c626e823a36834e349fb75c539c"><div class="ttname"><a href="k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c">arch_pause</a></div><div class="ttdeci">static void arch_pause(void)</div><div class="ttdoc">Placeholder for arch_pause on non-x86 architectures.</div><div class="ttdef"><b>Definition</b> k_spinlock.h:29</div></div>
|
||||||
|
<div class="ttc" id="ak__spinlock_8h_html_a8e8fd03b0cdf6f309bde43577c3dd548"><div class="ttname"><a href="k__spinlock_8h.html#a8e8fd03b0cdf6f309bde43577c3dd548">simple_spin_lock</a></div><div class="ttdeci">static void simple_spin_lock(simple_spinlock_t *lock)</div><div class="ttdoc">Acquires a spinlock, busy-waiting if necessary.</div><div class="ttdef"><b>Definition</b> k_spinlock.h:123</div></div>
|
||||||
|
<div class="ttc" id="ak__spinlock_8h_html_ab64669b95d563f14428a1f073106ef04"><div class="ttname"><a href="k__spinlock_8h.html#ab64669b95d563f14428a1f073106ef04">MAX_SPIN_THRESHOLD</a></div><div class="ttdeci">#define MAX_SPIN_THRESHOLD</div><div class="ttdoc">Maximum number of spin iterations before attempting to yield.</div><div class="ttdef"><b>Definition</b> k_spinlock.h:41</div></div>
|
||||||
|
<div class="ttc" id="ak__spinlock_8h_html_ad62d430c4e62aaa0d945088f5e1adc32"><div class="ttname"><a href="k__spinlock_8h.html#ad62d430c4e62aaa0d945088f5e1adc32">simple_spin_unlock</a></div><div class="ttdeci">static void simple_spin_unlock(simple_spinlock_t *lock)</div><div class="ttdoc">Releases a previously acquired spinlock.</div><div class="ttdef"><b>Definition</b> k_spinlock.h:184</div></div>
|
||||||
|
<div class="ttc" id="astructsimple__spinlock__t_html"><div class="ttname"><a href="structsimple__spinlock__t.html">simple_spinlock_t</a></div><div class="ttdoc">Structure representing a simple spinlock.</div><div class="ttdef"><b>Definition</b> k_spinlock.h:77</div></div>
|
||||||
|
<div class="ttc" id="astructsimple__spinlock__t_html_a7c66988c5d374d8eaf3b522a1ed7d041"><div class="ttname"><a href="structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041">simple_spinlock_t::contentions</a></div><div class="ttdeci">unsigned long contentions</div><div class="ttdoc">Number of times a thread tried to acquire the lock but found it already held, thus entering a spin-wa...</div><div class="ttdef"><b>Definition</b> k_spinlock.h:91</div></div>
|
||||||
|
<div class="ttc" id="astructsimple__spinlock__t_html_a849f8cded125ee7192052ca71e67f390"><div class="ttname"><a href="structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390">simple_spinlock_t::acquisitions</a></div><div class="ttdeci">unsigned long acquisitions</div><div class="ttdoc">Number of times the lock was successfully acquired.</div><div class="ttdef"><b>Definition</b> k_spinlock.h:88</div></div>
|
||||||
|
<div class="ttc" id="astructsimple__spinlock__t_html_ae8d529ab0ac1b69010d98ef8336e9172"><div class="ttname"><a href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">simple_spinlock_t::locked</a></div><div class="ttdeci">volatile int locked</div><div class="ttdoc">The lock state. 0 for unlocked, 1 for locked.</div><div class="ttdef"><b>Definition</b> k_spinlock.h:86</div></div>
|
||||||
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
136
docs/doxygen_html/html/menu.js
Normal file
|
|
@ -0,0 +1,136 @@
|
||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
@licend The above is the entire license notice for the JavaScript code in this file
|
||||||
|
*/
|
||||||
|
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
|
||||||
|
function makeTree(data,relPath) {
|
||||||
|
var result='';
|
||||||
|
if ('children' in data) {
|
||||||
|
result+='<ul>';
|
||||||
|
for (var i in data.children) {
|
||||||
|
var url;
|
||||||
|
var link;
|
||||||
|
link = data.children[i].url;
|
||||||
|
if (link.substring(0,1)=='^') {
|
||||||
|
url = link.substring(1);
|
||||||
|
} else {
|
||||||
|
url = relPath+link;
|
||||||
|
}
|
||||||
|
result+='<li><a href="'+url+'">'+
|
||||||
|
data.children[i].text+'</a>'+
|
||||||
|
makeTree(data.children[i],relPath)+'</li>';
|
||||||
|
}
|
||||||
|
result+='</ul>';
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
var searchBoxHtml;
|
||||||
|
if (searchEnabled) {
|
||||||
|
if (serverSide) {
|
||||||
|
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
|
||||||
|
'<div class="left">'+
|
||||||
|
'<form id="FSearchBox" action="'+relPath+searchPage+
|
||||||
|
'" method="get"><span id="MSearchSelectExt"> </span>'+
|
||||||
|
'<input type="text" id="MSearchField" name="query" value="" placeholder="'+search+
|
||||||
|
'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+
|
||||||
|
' onblur="searchBox.OnSearchFieldFocus(false)"/>'+
|
||||||
|
'</form>'+
|
||||||
|
'</div>'+
|
||||||
|
'<div class="right"></div>'+
|
||||||
|
'</div>';
|
||||||
|
} else {
|
||||||
|
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
|
||||||
|
'<span class="left">'+
|
||||||
|
'<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()"'+
|
||||||
|
' onmouseout="return searchBox.OnSearchSelectHide()"> </span>'+
|
||||||
|
'<input type="text" id="MSearchField" value="" placeholder="'+search+
|
||||||
|
'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+
|
||||||
|
'onblur="searchBox.OnSearchFieldFocus(false)" '+
|
||||||
|
'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+
|
||||||
|
'</span>'+
|
||||||
|
'<span class="right"><a id="MSearchClose" '+
|
||||||
|
'href="javascript:searchBox.CloseResultsWindow()">'+
|
||||||
|
'<img id="MSearchCloseImg" border="0" src="'+relPath+
|
||||||
|
'search/close.svg" alt=""/></a>'+
|
||||||
|
'</span>'+
|
||||||
|
'</div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+
|
||||||
|
'<label class="main-menu-btn" for="main-menu-state">'+
|
||||||
|
'<span class="main-menu-btn-icon"></span> '+
|
||||||
|
'Toggle main menu visibility</label>'+
|
||||||
|
'<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+
|
||||||
|
'</div>');
|
||||||
|
$('#main-nav').append(makeTree(menudata,relPath));
|
||||||
|
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
|
||||||
|
if (searchBoxHtml) {
|
||||||
|
$('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>');
|
||||||
|
}
|
||||||
|
var $mainMenuState = $('#main-menu-state');
|
||||||
|
var prevWidth = 0;
|
||||||
|
if ($mainMenuState.length) {
|
||||||
|
function initResizableIfExists() {
|
||||||
|
if (typeof initResizable==='function') initResizable();
|
||||||
|
}
|
||||||
|
// animate mobile menu
|
||||||
|
$mainMenuState.change(function(e) {
|
||||||
|
var $menu = $('#main-menu');
|
||||||
|
var options = { duration: 250, step: initResizableIfExists };
|
||||||
|
if (this.checked) {
|
||||||
|
options['complete'] = function() { $menu.css('display', 'block') };
|
||||||
|
$menu.hide().slideDown(options);
|
||||||
|
} else {
|
||||||
|
options['complete'] = function() { $menu.css('display', 'none') };
|
||||||
|
$menu.show().slideUp(options);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// set default menu visibility
|
||||||
|
function resetState() {
|
||||||
|
var $menu = $('#main-menu');
|
||||||
|
var $mainMenuState = $('#main-menu-state');
|
||||||
|
var newWidth = $(window).outerWidth();
|
||||||
|
if (newWidth!=prevWidth) {
|
||||||
|
if ($(window).outerWidth()<768) {
|
||||||
|
$mainMenuState.prop('checked',false); $menu.hide();
|
||||||
|
$('#searchBoxPos1').html(searchBoxHtml);
|
||||||
|
$('#searchBoxPos2').hide();
|
||||||
|
} else {
|
||||||
|
$menu.show();
|
||||||
|
$('#searchBoxPos1').empty();
|
||||||
|
$('#searchBoxPos2').html(searchBoxHtml);
|
||||||
|
$('#searchBoxPos2').show();
|
||||||
|
}
|
||||||
|
if (typeof searchBox!=='undefined') {
|
||||||
|
searchBox.CloseResultsWindow();
|
||||||
|
}
|
||||||
|
prevWidth = newWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$(window).ready(function() { resetState(); initResizableIfExists(); });
|
||||||
|
$(window).resize(resetState);
|
||||||
|
}
|
||||||
|
$('#main-menu').smartmenus();
|
||||||
|
}
|
||||||
|
/* @license-end */
|
||||||
38
docs/doxygen_html/html/menudata.js
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
@licend The above is the entire license notice for the JavaScript code in this file
|
||||||
|
*/
|
||||||
|
var menudata={children:[
|
||||||
|
{text:"Main Page",url:"index.html"},
|
||||||
|
{text:"Classes",url:"annotated.html",children:[
|
||||||
|
{text:"Class List",url:"annotated.html"},
|
||||||
|
{text:"Class Index",url:"classes.html"},
|
||||||
|
{text:"Class Members",url:"functions.html",children:[
|
||||||
|
{text:"All",url:"functions.html"},
|
||||||
|
{text:"Variables",url:"functions_vars.html"}]}]},
|
||||||
|
{text:"Files",url:"files.html",children:[
|
||||||
|
{text:"File List",url:"files.html"},
|
||||||
|
{text:"File Members",url:"globals.html",children:[
|
||||||
|
{text:"All",url:"globals.html"},
|
||||||
|
{text:"Functions",url:"globals_func.html"},
|
||||||
|
{text:"Macros",url:"globals_defs.html"}]}]}]}
|
||||||
8
docs/doxygen_html/html/minus.svg
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<g>
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
|
||||||
|
<rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 582 B |
8
docs/doxygen_html/html/minusd.svg
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<g>
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
|
||||||
|
<rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 582 B |
BIN
docs/doxygen_html/html/nav_f.png
Normal file
|
After Width: | Height: | Size: 153 B |
BIN
docs/doxygen_html/html/nav_fd.png
Normal file
|
After Width: | Height: | Size: 169 B |
BIN
docs/doxygen_html/html/nav_g.png
Normal file
|
After Width: | Height: | Size: 95 B |
BIN
docs/doxygen_html/html/nav_h.png
Normal file
|
After Width: | Height: | Size: 98 B |
BIN
docs/doxygen_html/html/nav_hd.png
Normal file
|
After Width: | Height: | Size: 114 B |
BIN
docs/doxygen_html/html/open.png
Normal file
|
After Width: | Height: | Size: 123 B |
9
docs/doxygen_html/html/plus.svg
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<g>
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
|
||||||
|
<rect style="fill:#fcfcfc;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 696 B |
9
docs/doxygen_html/html/plusd.svg
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="12px" height="12px" viewBox="0 0 105.83333 105.83333" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<g>
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="105.83333" height="105.83334" x="4.2409692e-08" y="-1.2701158e-06" ry="0" />
|
||||||
|
<rect style="fill:#000000;stroke-width:0" width="79.375" height="79.375" x="13.229166" y="13.229166" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="52.916668" height="15.874998" x="26.458332" y="44.979168" />
|
||||||
|
<rect style="fill:#808080;stroke-width:0" width="15.874998" height="52.916668" x="44.979168" y="26.458332" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 696 B |
5
docs/doxygen_html/html/search/all_0.js
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['acquisitions_0',['acquisitions',['../structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390',1,'simple_spinlock_t']]],
|
||||||
|
['arch_5fpause_1',['arch_pause',['../k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c',1,'k_spinlock.h']]]
|
||||||
|
];
|
||||||
4
docs/doxygen_html/html/search/all_1.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['contentions_0',['contentions',['../structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041',1,'simple_spinlock_t']]]
|
||||||
|
];
|
||||||
6
docs/doxygen_html/html/search/all_2.js
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['k_5fspinlock_2eh_0',['k_spinlock.h',['../k__spinlock_8h.html',1,'']]],
|
||||||
|
['kernel_5fyield_1',['kernel_yield',['../k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed',1,'k_spinlock.h']]],
|
||||||
|
['kernel_5fyield_5fdefined_2',['KERNEL_YIELD_DEFINED',['../k__spinlock_8h.html#ab7e692108b27a8b15089a297b451f293',1,'k_spinlock.h']]]
|
||||||
|
];
|
||||||
4
docs/doxygen_html/html/search/all_3.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['locked_0',['locked',['../structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172',1,'simple_spinlock_t']]]
|
||||||
|
];
|
||||||
4
docs/doxygen_html/html/search/all_4.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['max_5fspin_5fthreshold_0',['MAX_SPIN_THRESHOLD',['../k__spinlock_8h.html#ab64669b95d563f14428a1f073106ef04',1,'k_spinlock.h']]]
|
||||||
|
];
|
||||||
7
docs/doxygen_html/html/search/all_5.js
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['simple_5fspin_5finit_0',['simple_spin_init',['../k__spinlock_8h.html#a614711109a66b779e92036c573e57002',1,'k_spinlock.h']]],
|
||||||
|
['simple_5fspin_5flock_1',['simple_spin_lock',['../k__spinlock_8h.html#a8e8fd03b0cdf6f309bde43577c3dd548',1,'k_spinlock.h']]],
|
||||||
|
['simple_5fspin_5funlock_2',['simple_spin_unlock',['../k__spinlock_8h.html#ad62d430c4e62aaa0d945088f5e1adc32',1,'k_spinlock.h']]],
|
||||||
|
['simple_5fspinlock_5ft_3',['simple_spinlock_t',['../structsimple__spinlock__t.html',1,'']]]
|
||||||
|
];
|
||||||
4
docs/doxygen_html/html/search/classes_0.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['simple_5fspinlock_5ft_0',['simple_spinlock_t',['../structsimple__spinlock__t.html',1,'']]]
|
||||||
|
];
|
||||||
18
docs/doxygen_html/html/search/close.svg
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 11 11"
|
||||||
|
height="11"
|
||||||
|
width="11"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1">
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<path
|
||||||
|
id="path12"
|
||||||
|
d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
|
||||||
|
style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 947 B |
4
docs/doxygen_html/html/search/defines_0.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['kernel_5fyield_5fdefined_0',['KERNEL_YIELD_DEFINED',['../k__spinlock_8h.html#ab7e692108b27a8b15089a297b451f293',1,'k_spinlock.h']]]
|
||||||
|
];
|
||||||
4
docs/doxygen_html/html/search/defines_1.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['max_5fspin_5fthreshold_0',['MAX_SPIN_THRESHOLD',['../k__spinlock_8h.html#ab64669b95d563f14428a1f073106ef04',1,'k_spinlock.h']]]
|
||||||
|
];
|
||||||
4
docs/doxygen_html/html/search/files_0.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['k_5fspinlock_2eh_0',['k_spinlock.h',['../k__spinlock_8h.html',1,'']]]
|
||||||
|
];
|
||||||
4
docs/doxygen_html/html/search/functions_0.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['arch_5fpause_0',['arch_pause',['../k__spinlock_8h.html#a79887c626e823a36834e349fb75c539c',1,'k_spinlock.h']]]
|
||||||
|
];
|
||||||
4
docs/doxygen_html/html/search/functions_1.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['kernel_5fyield_0',['kernel_yield',['../k__spinlock_8h.html#a3b96827abeb83529b5d946e2654231ed',1,'k_spinlock.h']]]
|
||||||
|
];
|
||||||
6
docs/doxygen_html/html/search/functions_2.js
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['simple_5fspin_5finit_0',['simple_spin_init',['../k__spinlock_8h.html#a614711109a66b779e92036c573e57002',1,'k_spinlock.h']]],
|
||||||
|
['simple_5fspin_5flock_1',['simple_spin_lock',['../k__spinlock_8h.html#a8e8fd03b0cdf6f309bde43577c3dd548',1,'k_spinlock.h']]],
|
||||||
|
['simple_5fspin_5funlock_2',['simple_spin_unlock',['../k__spinlock_8h.html#ad62d430c4e62aaa0d945088f5e1adc32',1,'k_spinlock.h']]]
|
||||||
|
];
|
||||||
24
docs/doxygen_html/html/search/mag.svg
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 20 19"
|
||||||
|
height="19"
|
||||||
|
width="20"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1">
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<circle
|
||||||
|
r="3.5"
|
||||||
|
cy="8.5"
|
||||||
|
cx="5.5"
|
||||||
|
id="path4611"
|
||||||
|
style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
id="path4630"
|
||||||
|
d="m 8.1085854,11.109059 2.7823556,2.782356"
|
||||||
|
style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 804 B |
24
docs/doxygen_html/html/search/mag_d.svg
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 20 19"
|
||||||
|
height="19"
|
||||||
|
width="20"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1">
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<circle
|
||||||
|
r="3.5"
|
||||||
|
cy="8.5"
|
||||||
|
cx="5.5"
|
||||||
|
id="path4611"
|
||||||
|
style="fill:#000000;fill-opacity:0;stroke:#C5C5C5;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
|
<path
|
||||||
|
id="path4630"
|
||||||
|
d="m 8.1085854,11.109059 2.7823556,2.782356"
|
||||||
|
style="fill:none;stroke:#C5C5C5;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 804 B |
31
docs/doxygen_html/html/search/mag_sel.svg
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
width="20"
|
||||||
|
height="19"
|
||||||
|
viewBox="0 0 20 19"
|
||||||
|
>
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<circle
|
||||||
|
style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="path4611"
|
||||||
|
cx="5.5"
|
||||||
|
cy="8.5"
|
||||||
|
r="3.5" />
|
||||||
|
<path
|
||||||
|
style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 11,7 13.5,10 16,7 Z"
|
||||||
|
id="path4609"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 8.1085854,11.109059 2.7823556,2.782356"
|
||||||
|
id="path4630"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1019 B |
31
docs/doxygen_html/html/search/mag_seld.svg
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"https://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
width="20"
|
||||||
|
height="19"
|
||||||
|
viewBox="0 0 20 19"
|
||||||
|
>
|
||||||
|
<defs
|
||||||
|
id="defs6" />
|
||||||
|
<circle
|
||||||
|
style="fill:#000000;fill-opacity:0;stroke:#c5C5C5;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
id="path4611"
|
||||||
|
cx="5.5"
|
||||||
|
cy="8.5"
|
||||||
|
r="3.5" />
|
||||||
|
<path
|
||||||
|
style="fill:#c5C5C5;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 11,7 13.5,10 16,7 Z"
|
||||||
|
id="path4609"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#c5C5C5;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 8.1085854,11.109059 2.7823556,2.782356"
|
||||||
|
id="path4630"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1019 B |
290
docs/doxygen_html/html/search/search.css
Normal file
|
|
@ -0,0 +1,290 @@
|
||||||
|
/*---------------- Search Box positioning */
|
||||||
|
|
||||||
|
#main-menu > li:last-child {
|
||||||
|
/* This <li> object is the parent of the search bar */
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 36px;
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------- Search box styling */
|
||||||
|
|
||||||
|
.SRPage * {
|
||||||
|
font-weight: normal;
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
dark-mode-toggle {
|
||||||
|
margin-left: 5px;
|
||||||
|
display: flex;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#MSearchBox {
|
||||||
|
display: inline-block;
|
||||||
|
white-space : nowrap;
|
||||||
|
background: var(--search-background-color);
|
||||||
|
border-radius: 0.65em;
|
||||||
|
box-shadow: var(--search-box-shadow);
|
||||||
|
z-index: 102;
|
||||||
|
}
|
||||||
|
|
||||||
|
#MSearchBox .left {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
height: 1.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#MSearchSelect {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 20px;
|
||||||
|
height: 19px;
|
||||||
|
background-image: var(--search-magnification-select-image);
|
||||||
|
margin: 0 0 0 0.3em;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#MSearchSelectExt {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 10px;
|
||||||
|
height: 19px;
|
||||||
|
background-image: var(--search-magnification-image);
|
||||||
|
margin: 0 0 0 0.5em;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#MSearchField {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 7.5em;
|
||||||
|
height: 19px;
|
||||||
|
margin: 0 0.15em;
|
||||||
|
padding: 0;
|
||||||
|
line-height: 1em;
|
||||||
|
border:none;
|
||||||
|
color: var(--search-foreground-color);
|
||||||
|
outline: none;
|
||||||
|
font-family: var(--font-family-search);
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(hover: none) {
|
||||||
|
/* to avoid zooming on iOS */
|
||||||
|
#MSearchField {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#MSearchBox .right {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 1.4em;
|
||||||
|
height: 1.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#MSearchClose {
|
||||||
|
display: none;
|
||||||
|
font-size: inherit;
|
||||||
|
background : none;
|
||||||
|
border: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
outline: none;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#MSearchCloseImg {
|
||||||
|
padding: 0.3em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.MSearchBoxActive #MSearchField {
|
||||||
|
color: var(--search-active-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------- Search filter selection */
|
||||||
|
|
||||||
|
#MSearchSelectWindow {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
left: 0; top: 0;
|
||||||
|
border: 1px solid var(--search-filter-border-color);
|
||||||
|
background-color: var(--search-filter-background-color);
|
||||||
|
z-index: 10001;
|
||||||
|
padding-top: 4px;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
-webkit-border-top-left-radius: 4px;
|
||||||
|
-webkit-border-top-right-radius: 4px;
|
||||||
|
-webkit-border-bottom-left-radius: 4px;
|
||||||
|
-webkit-border-bottom-right-radius: 4px;
|
||||||
|
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.SelectItem {
|
||||||
|
font: 8pt var(--font-family-search);
|
||||||
|
padding-left: 2px;
|
||||||
|
padding-right: 12px;
|
||||||
|
border: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.SelectionMark {
|
||||||
|
margin-right: 4px;
|
||||||
|
font-family: var(--font-family-monospace);
|
||||||
|
outline-style: none;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.SelectItem {
|
||||||
|
display: block;
|
||||||
|
outline-style: none;
|
||||||
|
color: var(--search-filter-foreground-color);
|
||||||
|
text-decoration: none;
|
||||||
|
padding-left: 6px;
|
||||||
|
padding-right: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.SelectItem:focus,
|
||||||
|
a.SelectItem:active {
|
||||||
|
color: var(--search-filter-foreground-color);
|
||||||
|
outline-style: none;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.SelectItem:hover {
|
||||||
|
color: var(--search-filter-highlight-text-color);
|
||||||
|
background-color: var(--search-filter-highlight-bg-color);
|
||||||
|
outline-style: none;
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------- Search results window */
|
||||||
|
|
||||||
|
iframe#MSearchResults {
|
||||||
|
/*width: 60ex;*/
|
||||||
|
height: 15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#MSearchResultsWindow {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
left: 0; top: 0;
|
||||||
|
border: 1px solid var(--search-results-border-color);
|
||||||
|
background-color: var(--search-results-background-color);
|
||||||
|
z-index:10000;
|
||||||
|
width: 300px;
|
||||||
|
height: 400px;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
#SRIndex {
|
||||||
|
clear:both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SREntry {
|
||||||
|
font-size: 10pt;
|
||||||
|
padding-left: 1ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SRPage .SREntry {
|
||||||
|
font-size: 8pt;
|
||||||
|
padding: 1px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.SRPage {
|
||||||
|
margin: 5px 2px;
|
||||||
|
background-color: var(--search-results-background-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.SRChildren {
|
||||||
|
padding-left: 3ex; padding-bottom: .5em
|
||||||
|
}
|
||||||
|
|
||||||
|
.SRPage .SRChildren {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.SRSymbol {
|
||||||
|
font-weight: bold;
|
||||||
|
color: var(--search-results-foreground-color);
|
||||||
|
font-family: var(--font-family-search);
|
||||||
|
text-decoration: none;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.SRScope {
|
||||||
|
display: block;
|
||||||
|
color: var(--search-results-foreground-color);
|
||||||
|
font-family: var(--font-family-search);
|
||||||
|
font-size: 8pt;
|
||||||
|
text-decoration: none;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.SRSymbol:focus, a.SRSymbol:active,
|
||||||
|
a.SRScope:focus, a.SRScope:active {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.SRScope {
|
||||||
|
padding-left: 4px;
|
||||||
|
font-family: var(--font-family-search);
|
||||||
|
}
|
||||||
|
|
||||||
|
.SRPage .SRStatus {
|
||||||
|
padding: 2px 5px;
|
||||||
|
font-size: 8pt;
|
||||||
|
font-style: italic;
|
||||||
|
font-family: var(--font-family-search);
|
||||||
|
}
|
||||||
|
|
||||||
|
.SRResult {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.searchresults {
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------- External search page results */
|
||||||
|
|
||||||
|
.pages b {
|
||||||
|
color: white;
|
||||||
|
padding: 5px 5px 3px 5px;
|
||||||
|
background-image: var(--nav-gradient-active-image-parent);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
text-shadow: 0 1px 1px #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pages {
|
||||||
|
line-height: 17px;
|
||||||
|
margin-left: 4px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hl {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchresults {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchpages {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
840
docs/doxygen_html/html/search/search.js
Normal file
|
|
@ -0,0 +1,840 @@
|
||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or
|
||||||
|
substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||||
|
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
@licend The above is the entire license notice for the JavaScript code in this file
|
||||||
|
*/
|
||||||
|
function convertToId(search)
|
||||||
|
{
|
||||||
|
var result = '';
|
||||||
|
for (i=0;i<search.length;i++)
|
||||||
|
{
|
||||||
|
var c = search.charAt(i);
|
||||||
|
var cn = c.charCodeAt(0);
|
||||||
|
if (c.match(/[a-z0-9\u0080-\uFFFF]/))
|
||||||
|
{
|
||||||
|
result+=c;
|
||||||
|
}
|
||||||
|
else if (cn<16)
|
||||||
|
{
|
||||||
|
result+="_0"+cn.toString(16);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result+="_"+cn.toString(16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getXPos(item)
|
||||||
|
{
|
||||||
|
var x = 0;
|
||||||
|
if (item.offsetWidth)
|
||||||
|
{
|
||||||
|
while (item && item!=document.body)
|
||||||
|
{
|
||||||
|
x += item.offsetLeft;
|
||||||
|
item = item.offsetParent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getYPos(item)
|
||||||
|
{
|
||||||
|
var y = 0;
|
||||||
|
if (item.offsetWidth)
|
||||||
|
{
|
||||||
|
while (item && item!=document.body)
|
||||||
|
{
|
||||||
|
y += item.offsetTop;
|
||||||
|
item = item.offsetParent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
var searchResults = new SearchResults("searchResults");
|
||||||
|
|
||||||
|
/* A class handling everything associated with the search panel.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
name - The name of the global variable that will be
|
||||||
|
storing this instance. Is needed to be able to set timeouts.
|
||||||
|
resultPath - path to use for external files
|
||||||
|
*/
|
||||||
|
function SearchBox(name, resultsPath, extension)
|
||||||
|
{
|
||||||
|
if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
|
||||||
|
if (!extension || extension == "") { extension = ".html"; }
|
||||||
|
|
||||||
|
// ---------- Instance variables
|
||||||
|
this.name = name;
|
||||||
|
this.resultsPath = resultsPath;
|
||||||
|
this.keyTimeout = 0;
|
||||||
|
this.keyTimeoutLength = 500;
|
||||||
|
this.closeSelectionTimeout = 300;
|
||||||
|
this.lastSearchValue = "";
|
||||||
|
this.lastResultsPage = "";
|
||||||
|
this.hideTimeout = 0;
|
||||||
|
this.searchIndex = 0;
|
||||||
|
this.searchActive = false;
|
||||||
|
this.extension = extension;
|
||||||
|
|
||||||
|
// ----------- DOM Elements
|
||||||
|
|
||||||
|
this.DOMSearchField = function()
|
||||||
|
{ return document.getElementById("MSearchField"); }
|
||||||
|
|
||||||
|
this.DOMSearchSelect = function()
|
||||||
|
{ return document.getElementById("MSearchSelect"); }
|
||||||
|
|
||||||
|
this.DOMSearchSelectWindow = function()
|
||||||
|
{ return document.getElementById("MSearchSelectWindow"); }
|
||||||
|
|
||||||
|
this.DOMPopupSearchResults = function()
|
||||||
|
{ return document.getElementById("MSearchResults"); }
|
||||||
|
|
||||||
|
this.DOMPopupSearchResultsWindow = function()
|
||||||
|
{ return document.getElementById("MSearchResultsWindow"); }
|
||||||
|
|
||||||
|
this.DOMSearchClose = function()
|
||||||
|
{ return document.getElementById("MSearchClose"); }
|
||||||
|
|
||||||
|
this.DOMSearchBox = function()
|
||||||
|
{ return document.getElementById("MSearchBox"); }
|
||||||
|
|
||||||
|
// ------------ Event Handlers
|
||||||
|
|
||||||
|
// Called when focus is added or removed from the search field.
|
||||||
|
this.OnSearchFieldFocus = function(isActive)
|
||||||
|
{
|
||||||
|
this.Activate(isActive);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.OnSearchSelectShow = function()
|
||||||
|
{
|
||||||
|
var searchSelectWindow = this.DOMSearchSelectWindow();
|
||||||
|
var searchField = this.DOMSearchSelect();
|
||||||
|
|
||||||
|
var left = getXPos(searchField);
|
||||||
|
var top = getYPos(searchField);
|
||||||
|
top += searchField.offsetHeight;
|
||||||
|
|
||||||
|
// show search selection popup
|
||||||
|
searchSelectWindow.style.display='block';
|
||||||
|
searchSelectWindow.style.left = left + 'px';
|
||||||
|
searchSelectWindow.style.top = top + 'px';
|
||||||
|
|
||||||
|
// stop selection hide timer
|
||||||
|
if (this.hideTimeout)
|
||||||
|
{
|
||||||
|
clearTimeout(this.hideTimeout);
|
||||||
|
this.hideTimeout=0;
|
||||||
|
}
|
||||||
|
return false; // to avoid "image drag" default event
|
||||||
|
}
|
||||||
|
|
||||||
|
this.OnSearchSelectHide = function()
|
||||||
|
{
|
||||||
|
this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this),
|
||||||
|
this.closeSelectionTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called when the content of the search field is changed.
|
||||||
|
this.OnSearchFieldChange = function(evt)
|
||||||
|
{
|
||||||
|
if (this.keyTimeout) // kill running timer
|
||||||
|
{
|
||||||
|
clearTimeout(this.keyTimeout);
|
||||||
|
this.keyTimeout = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var e = (evt) ? evt : window.event; // for IE
|
||||||
|
if (e.keyCode==40 || e.keyCode==13)
|
||||||
|
{
|
||||||
|
if (e.shiftKey==1)
|
||||||
|
{
|
||||||
|
this.OnSearchSelectShow();
|
||||||
|
var win=this.DOMSearchSelectWindow();
|
||||||
|
for (i=0;i<win.childNodes.length;i++)
|
||||||
|
{
|
||||||
|
var child = win.childNodes[i]; // get span within a
|
||||||
|
if (child.className=='SelectItem')
|
||||||
|
{
|
||||||
|
child.focus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var elem = searchResults.NavNext(0);
|
||||||
|
if (elem) elem.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (e.keyCode==27) // Escape out of the search field
|
||||||
|
{
|
||||||
|
e.stopPropagation();
|
||||||
|
this.DOMSearchField().blur();
|
||||||
|
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
||||||
|
this.DOMSearchClose().style.display = 'none';
|
||||||
|
this.lastSearchValue = '';
|
||||||
|
this.Activate(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// strip whitespaces
|
||||||
|
var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
|
||||||
|
|
||||||
|
if (searchValue != this.lastSearchValue) // search value has changed
|
||||||
|
{
|
||||||
|
if (searchValue != "") // non-empty search
|
||||||
|
{
|
||||||
|
// set timer for search update
|
||||||
|
this.keyTimeout = setTimeout(this.Search.bind(this),
|
||||||
|
this.keyTimeoutLength);
|
||||||
|
}
|
||||||
|
else // empty search field
|
||||||
|
{
|
||||||
|
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
||||||
|
this.DOMSearchClose().style.display = 'none';
|
||||||
|
this.lastSearchValue = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.SelectItemCount = function(id)
|
||||||
|
{
|
||||||
|
var count=0;
|
||||||
|
var win=this.DOMSearchSelectWindow();
|
||||||
|
for (i=0;i<win.childNodes.length;i++)
|
||||||
|
{
|
||||||
|
var child = win.childNodes[i]; // get span within a
|
||||||
|
if (child.className=='SelectItem')
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.SelectItemSet = function(id)
|
||||||
|
{
|
||||||
|
var i,j=0;
|
||||||
|
var win=this.DOMSearchSelectWindow();
|
||||||
|
for (i=0;i<win.childNodes.length;i++)
|
||||||
|
{
|
||||||
|
var child = win.childNodes[i]; // get span within a
|
||||||
|
if (child.className=='SelectItem')
|
||||||
|
{
|
||||||
|
var node = child.firstChild;
|
||||||
|
if (j==id)
|
||||||
|
{
|
||||||
|
node.innerHTML='•';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
node.innerHTML=' ';
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called when an search filter selection is made.
|
||||||
|
// set item with index id as the active item
|
||||||
|
this.OnSelectItem = function(id)
|
||||||
|
{
|
||||||
|
this.searchIndex = id;
|
||||||
|
this.SelectItemSet(id);
|
||||||
|
var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
|
||||||
|
if (searchValue!="" && this.searchActive) // something was found -> do a search
|
||||||
|
{
|
||||||
|
this.Search();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.OnSearchSelectKey = function(evt)
|
||||||
|
{
|
||||||
|
var e = (evt) ? evt : window.event; // for IE
|
||||||
|
if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
|
||||||
|
{
|
||||||
|
this.searchIndex++;
|
||||||
|
this.OnSelectItem(this.searchIndex);
|
||||||
|
}
|
||||||
|
else if (e.keyCode==38 && this.searchIndex>0) // Up
|
||||||
|
{
|
||||||
|
this.searchIndex--;
|
||||||
|
this.OnSelectItem(this.searchIndex);
|
||||||
|
}
|
||||||
|
else if (e.keyCode==13 || e.keyCode==27)
|
||||||
|
{
|
||||||
|
e.stopPropagation();
|
||||||
|
this.OnSelectItem(this.searchIndex);
|
||||||
|
this.CloseSelectionWindow();
|
||||||
|
this.DOMSearchField().focus();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------- Actions
|
||||||
|
|
||||||
|
// Closes the results window.
|
||||||
|
this.CloseResultsWindow = function()
|
||||||
|
{
|
||||||
|
this.DOMPopupSearchResultsWindow().style.display = 'none';
|
||||||
|
this.DOMSearchClose().style.display = 'none';
|
||||||
|
this.Activate(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.CloseSelectionWindow = function()
|
||||||
|
{
|
||||||
|
this.DOMSearchSelectWindow().style.display = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Performs a search.
|
||||||
|
this.Search = function()
|
||||||
|
{
|
||||||
|
this.keyTimeout = 0;
|
||||||
|
|
||||||
|
// strip leading whitespace
|
||||||
|
var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
|
||||||
|
|
||||||
|
var code = searchValue.toLowerCase().charCodeAt(0);
|
||||||
|
var idxChar = searchValue.substr(0, 1).toLowerCase();
|
||||||
|
if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
|
||||||
|
{
|
||||||
|
idxChar = searchValue.substr(0, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
var jsFile;
|
||||||
|
|
||||||
|
var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
|
||||||
|
if (idx!=-1)
|
||||||
|
{
|
||||||
|
var hexCode=idx.toString(16);
|
||||||
|
jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js';
|
||||||
|
}
|
||||||
|
|
||||||
|
var loadJS = function(url, impl, loc){
|
||||||
|
var scriptTag = document.createElement('script');
|
||||||
|
scriptTag.src = url;
|
||||||
|
scriptTag.onload = impl;
|
||||||
|
scriptTag.onreadystatechange = impl;
|
||||||
|
loc.appendChild(scriptTag);
|
||||||
|
}
|
||||||
|
|
||||||
|
var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
|
||||||
|
var domSearchBox = this.DOMSearchBox();
|
||||||
|
var domPopupSearchResults = this.DOMPopupSearchResults();
|
||||||
|
var domSearchClose = this.DOMSearchClose();
|
||||||
|
var resultsPath = this.resultsPath;
|
||||||
|
|
||||||
|
var handleResults = function() {
|
||||||
|
document.getElementById("Loading").style.display="none";
|
||||||
|
if (typeof searchData !== 'undefined') {
|
||||||
|
createResults(resultsPath);
|
||||||
|
document.getElementById("NoMatches").style.display="none";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (idx!=-1) {
|
||||||
|
searchResults.Search(searchValue);
|
||||||
|
} else { // no file with search results => force empty search results
|
||||||
|
searchResults.Search('====');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (domPopupSearchResultsWindow.style.display!='block')
|
||||||
|
{
|
||||||
|
domSearchClose.style.display = 'inline-block';
|
||||||
|
var left = getXPos(domSearchBox) + 150;
|
||||||
|
var top = getYPos(domSearchBox) + 20;
|
||||||
|
domPopupSearchResultsWindow.style.display = 'block';
|
||||||
|
left -= domPopupSearchResults.offsetWidth;
|
||||||
|
var maxWidth = document.body.clientWidth;
|
||||||
|
var maxHeight = document.body.clientHeight;
|
||||||
|
var width = 300;
|
||||||
|
if (left<10) left=10;
|
||||||
|
if (width+left+8>maxWidth) width=maxWidth-left-8;
|
||||||
|
var height = 400;
|
||||||
|
if (height+top+8>maxHeight) height=maxHeight-top-8;
|
||||||
|
domPopupSearchResultsWindow.style.top = top + 'px';
|
||||||
|
domPopupSearchResultsWindow.style.left = left + 'px';
|
||||||
|
domPopupSearchResultsWindow.style.width = width + 'px';
|
||||||
|
domPopupSearchResultsWindow.style.height = height + 'px';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jsFile) {
|
||||||
|
loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow());
|
||||||
|
} else {
|
||||||
|
handleResults();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.lastSearchValue = searchValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------- Activation Functions
|
||||||
|
|
||||||
|
// Activates or deactivates the search panel, resetting things to
|
||||||
|
// their default values if necessary.
|
||||||
|
this.Activate = function(isActive)
|
||||||
|
{
|
||||||
|
if (isActive || // open it
|
||||||
|
this.DOMPopupSearchResultsWindow().style.display == 'block'
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this.DOMSearchBox().className = 'MSearchBoxActive';
|
||||||
|
this.searchActive = true;
|
||||||
|
}
|
||||||
|
else if (!isActive) // directly remove the panel
|
||||||
|
{
|
||||||
|
this.DOMSearchBox().className = 'MSearchBoxInactive';
|
||||||
|
this.searchActive = false;
|
||||||
|
this.lastSearchValue = ''
|
||||||
|
this.lastResultsPage = '';
|
||||||
|
this.DOMSearchField().value = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------
|
||||||
|
|
||||||
|
// The class that handles everything on the search results page.
|
||||||
|
function SearchResults(name)
|
||||||
|
{
|
||||||
|
// The number of matches from the last run of <Search()>.
|
||||||
|
this.lastMatchCount = 0;
|
||||||
|
this.lastKey = 0;
|
||||||
|
this.repeatOn = false;
|
||||||
|
|
||||||
|
// Toggles the visibility of the passed element ID.
|
||||||
|
this.FindChildElement = function(id)
|
||||||
|
{
|
||||||
|
var parentElement = document.getElementById(id);
|
||||||
|
var element = parentElement.firstChild;
|
||||||
|
|
||||||
|
while (element && element!=parentElement)
|
||||||
|
{
|
||||||
|
if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren')
|
||||||
|
{
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes())
|
||||||
|
{
|
||||||
|
element = element.firstChild;
|
||||||
|
}
|
||||||
|
else if (element.nextSibling)
|
||||||
|
{
|
||||||
|
element = element.nextSibling;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
element = element.parentNode;
|
||||||
|
}
|
||||||
|
while (element && element!=parentElement && !element.nextSibling);
|
||||||
|
|
||||||
|
if (element && element!=parentElement)
|
||||||
|
{
|
||||||
|
element = element.nextSibling;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Toggle = function(id)
|
||||||
|
{
|
||||||
|
var element = this.FindChildElement(id);
|
||||||
|
if (element)
|
||||||
|
{
|
||||||
|
if (element.style.display == 'block')
|
||||||
|
{
|
||||||
|
element.style.display = 'none';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
element.style.display = 'block';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Searches for the passed string. If there is no parameter,
|
||||||
|
// it takes it from the URL query.
|
||||||
|
//
|
||||||
|
// Always returns true, since other documents may try to call it
|
||||||
|
// and that may or may not be possible.
|
||||||
|
this.Search = function(search)
|
||||||
|
{
|
||||||
|
if (!search) // get search word from URL
|
||||||
|
{
|
||||||
|
search = window.location.search;
|
||||||
|
search = search.substring(1); // Remove the leading '?'
|
||||||
|
search = unescape(search);
|
||||||
|
}
|
||||||
|
|
||||||
|
search = search.replace(/^ +/, ""); // strip leading spaces
|
||||||
|
search = search.replace(/ +$/, ""); // strip trailing spaces
|
||||||
|
search = search.toLowerCase();
|
||||||
|
search = convertToId(search);
|
||||||
|
|
||||||
|
var resultRows = document.getElementsByTagName("div");
|
||||||
|
var matches = 0;
|
||||||
|
|
||||||
|
var i = 0;
|
||||||
|
while (i < resultRows.length)
|
||||||
|
{
|
||||||
|
var row = resultRows.item(i);
|
||||||
|
if (row.className == "SRResult")
|
||||||
|
{
|
||||||
|
var rowMatchName = row.id.toLowerCase();
|
||||||
|
rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
|
||||||
|
|
||||||
|
if (search.length<=rowMatchName.length &&
|
||||||
|
rowMatchName.substr(0, search.length)==search)
|
||||||
|
{
|
||||||
|
row.style.display = 'block';
|
||||||
|
matches++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
row.style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
document.getElementById("Searching").style.display='none';
|
||||||
|
if (matches == 0) // no results
|
||||||
|
{
|
||||||
|
document.getElementById("NoMatches").style.display='block';
|
||||||
|
}
|
||||||
|
else // at least one result
|
||||||
|
{
|
||||||
|
document.getElementById("NoMatches").style.display='none';
|
||||||
|
}
|
||||||
|
this.lastMatchCount = matches;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return the first item with index index or higher that is visible
|
||||||
|
this.NavNext = function(index)
|
||||||
|
{
|
||||||
|
var focusItem;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
var focusName = 'Item'+index;
|
||||||
|
focusItem = document.getElementById(focusName);
|
||||||
|
if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (!focusItem) // last element
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
focusItem=null;
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return focusItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.NavPrev = function(index)
|
||||||
|
{
|
||||||
|
var focusItem;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
var focusName = 'Item'+index;
|
||||||
|
focusItem = document.getElementById(focusName);
|
||||||
|
if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (!focusItem) // last element
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
focusItem=null;
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
return focusItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.ProcessKeys = function(e)
|
||||||
|
{
|
||||||
|
if (e.type == "keydown")
|
||||||
|
{
|
||||||
|
this.repeatOn = false;
|
||||||
|
this.lastKey = e.keyCode;
|
||||||
|
}
|
||||||
|
else if (e.type == "keypress")
|
||||||
|
{
|
||||||
|
if (!this.repeatOn)
|
||||||
|
{
|
||||||
|
if (this.lastKey) this.repeatOn = true;
|
||||||
|
return false; // ignore first keypress after keydown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (e.type == "keyup")
|
||||||
|
{
|
||||||
|
this.lastKey = 0;
|
||||||
|
this.repeatOn = false;
|
||||||
|
}
|
||||||
|
return this.lastKey!=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Nav = function(evt,itemIndex)
|
||||||
|
{
|
||||||
|
var e = (evt) ? evt : window.event; // for IE
|
||||||
|
if (e.keyCode==13) return true;
|
||||||
|
if (!this.ProcessKeys(e)) return false;
|
||||||
|
|
||||||
|
if (this.lastKey==38) // Up
|
||||||
|
{
|
||||||
|
var newIndex = itemIndex-1;
|
||||||
|
var focusItem = this.NavPrev(newIndex);
|
||||||
|
if (focusItem)
|
||||||
|
{
|
||||||
|
var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
|
||||||
|
if (child && child.style.display == 'block') // children visible
|
||||||
|
{
|
||||||
|
var n=0;
|
||||||
|
var tmpElem;
|
||||||
|
while (1) // search for last child
|
||||||
|
{
|
||||||
|
tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
|
||||||
|
if (tmpElem)
|
||||||
|
{
|
||||||
|
focusItem = tmpElem;
|
||||||
|
}
|
||||||
|
else // found it!
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (focusItem)
|
||||||
|
{
|
||||||
|
focusItem.focus();
|
||||||
|
}
|
||||||
|
else // return focus to search field
|
||||||
|
{
|
||||||
|
document.getElementById("MSearchField").focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (this.lastKey==40) // Down
|
||||||
|
{
|
||||||
|
var newIndex = itemIndex+1;
|
||||||
|
var focusItem;
|
||||||
|
var item = document.getElementById('Item'+itemIndex);
|
||||||
|
var elem = this.FindChildElement(item.parentNode.parentNode.id);
|
||||||
|
if (elem && elem.style.display == 'block') // children visible
|
||||||
|
{
|
||||||
|
focusItem = document.getElementById('Item'+itemIndex+'_c0');
|
||||||
|
}
|
||||||
|
if (!focusItem) focusItem = this.NavNext(newIndex);
|
||||||
|
if (focusItem) focusItem.focus();
|
||||||
|
}
|
||||||
|
else if (this.lastKey==39) // Right
|
||||||
|
{
|
||||||
|
var item = document.getElementById('Item'+itemIndex);
|
||||||
|
var elem = this.FindChildElement(item.parentNode.parentNode.id);
|
||||||
|
if (elem) elem.style.display = 'block';
|
||||||
|
}
|
||||||
|
else if (this.lastKey==37) // Left
|
||||||
|
{
|
||||||
|
var item = document.getElementById('Item'+itemIndex);
|
||||||
|
var elem = this.FindChildElement(item.parentNode.parentNode.id);
|
||||||
|
if (elem) elem.style.display = 'none';
|
||||||
|
}
|
||||||
|
else if (this.lastKey==27) // Escape
|
||||||
|
{
|
||||||
|
e.stopPropagation();
|
||||||
|
searchBox.CloseResultsWindow();
|
||||||
|
document.getElementById("MSearchField").focus();
|
||||||
|
}
|
||||||
|
else if (this.lastKey==13) // Enter
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.NavChild = function(evt,itemIndex,childIndex)
|
||||||
|
{
|
||||||
|
var e = (evt) ? evt : window.event; // for IE
|
||||||
|
if (e.keyCode==13) return true;
|
||||||
|
if (!this.ProcessKeys(e)) return false;
|
||||||
|
|
||||||
|
if (this.lastKey==38) // Up
|
||||||
|
{
|
||||||
|
if (childIndex>0)
|
||||||
|
{
|
||||||
|
var newIndex = childIndex-1;
|
||||||
|
document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
|
||||||
|
}
|
||||||
|
else // already at first child, jump to parent
|
||||||
|
{
|
||||||
|
document.getElementById('Item'+itemIndex).focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (this.lastKey==40) // Down
|
||||||
|
{
|
||||||
|
var newIndex = childIndex+1;
|
||||||
|
var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
|
||||||
|
if (!elem) // last child, jump to parent next parent
|
||||||
|
{
|
||||||
|
elem = this.NavNext(itemIndex+1);
|
||||||
|
}
|
||||||
|
if (elem)
|
||||||
|
{
|
||||||
|
elem.focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (this.lastKey==27) // Escape
|
||||||
|
{
|
||||||
|
e.stopPropagation();
|
||||||
|
searchBox.CloseResultsWindow();
|
||||||
|
document.getElementById("MSearchField").focus();
|
||||||
|
}
|
||||||
|
else if (this.lastKey==13) // Enter
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setKeyActions(elem,action)
|
||||||
|
{
|
||||||
|
elem.setAttribute('onkeydown',action);
|
||||||
|
elem.setAttribute('onkeypress',action);
|
||||||
|
elem.setAttribute('onkeyup',action);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setClassAttr(elem,attr)
|
||||||
|
{
|
||||||
|
elem.setAttribute('class',attr);
|
||||||
|
elem.setAttribute('className',attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function createResults(resultsPath)
|
||||||
|
{
|
||||||
|
var results = document.getElementById("SRResults");
|
||||||
|
results.innerHTML = '';
|
||||||
|
for (var e=0; e<searchData.length; e++)
|
||||||
|
{
|
||||||
|
var id = searchData[e][0];
|
||||||
|
var srResult = document.createElement('div');
|
||||||
|
srResult.setAttribute('id','SR_'+id);
|
||||||
|
setClassAttr(srResult,'SRResult');
|
||||||
|
var srEntry = document.createElement('div');
|
||||||
|
setClassAttr(srEntry,'SREntry');
|
||||||
|
var srLink = document.createElement('a');
|
||||||
|
srLink.setAttribute('id','Item'+e);
|
||||||
|
setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
|
||||||
|
setClassAttr(srLink,'SRSymbol');
|
||||||
|
srLink.innerHTML = searchData[e][1][0];
|
||||||
|
srEntry.appendChild(srLink);
|
||||||
|
if (searchData[e][1].length==2) // single result
|
||||||
|
{
|
||||||
|
srLink.setAttribute('href',resultsPath+searchData[e][1][1][0]);
|
||||||
|
srLink.setAttribute('onclick','searchBox.CloseResultsWindow()');
|
||||||
|
if (searchData[e][1][1][1])
|
||||||
|
{
|
||||||
|
srLink.setAttribute('target','_parent');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
srLink.setAttribute('target','_blank');
|
||||||
|
}
|
||||||
|
var srScope = document.createElement('span');
|
||||||
|
setClassAttr(srScope,'SRScope');
|
||||||
|
srScope.innerHTML = searchData[e][1][1][2];
|
||||||
|
srEntry.appendChild(srScope);
|
||||||
|
}
|
||||||
|
else // multiple results
|
||||||
|
{
|
||||||
|
srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
|
||||||
|
var srChildren = document.createElement('div');
|
||||||
|
setClassAttr(srChildren,'SRChildren');
|
||||||
|
for (var c=0; c<searchData[e][1].length-1; c++)
|
||||||
|
{
|
||||||
|
var srChild = document.createElement('a');
|
||||||
|
srChild.setAttribute('id','Item'+e+'_c'+c);
|
||||||
|
setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
|
||||||
|
setClassAttr(srChild,'SRScope');
|
||||||
|
srChild.setAttribute('href',resultsPath+searchData[e][1][c+1][0]);
|
||||||
|
srChild.setAttribute('onclick','searchBox.CloseResultsWindow()');
|
||||||
|
if (searchData[e][1][c+1][1])
|
||||||
|
{
|
||||||
|
srChild.setAttribute('target','_parent');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
srChild.setAttribute('target','_blank');
|
||||||
|
}
|
||||||
|
srChild.innerHTML = searchData[e][1][c+1][2];
|
||||||
|
srChildren.appendChild(srChild);
|
||||||
|
}
|
||||||
|
srEntry.appendChild(srChildren);
|
||||||
|
}
|
||||||
|
srResult.appendChild(srEntry);
|
||||||
|
results.appendChild(srResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function init_search()
|
||||||
|
{
|
||||||
|
var results = document.getElementById("MSearchSelectWindow");
|
||||||
|
results.tabIndex=0;
|
||||||
|
for (var key in indexSectionLabels)
|
||||||
|
{
|
||||||
|
var link = document.createElement('a');
|
||||||
|
link.setAttribute('class','SelectItem');
|
||||||
|
link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
|
||||||
|
link.href='javascript:void(0)';
|
||||||
|
link.innerHTML='<span class="SelectionMark"> </span>'+indexSectionLabels[key];
|
||||||
|
results.appendChild(link);
|
||||||
|
}
|
||||||
|
searchBox.OnSelectItem(0);
|
||||||
|
|
||||||
|
var input = document.getElementById("MSearchSelect");
|
||||||
|
var searchSelectWindow = document.getElementById("MSearchSelectWindow");
|
||||||
|
input.tabIndex=0;
|
||||||
|
input.addEventListener("keydown", function(event) {
|
||||||
|
if (event.keyCode==13 || event.keyCode==40) {
|
||||||
|
event.preventDefault();
|
||||||
|
if (searchSelectWindow.style.display == 'block') {
|
||||||
|
searchBox.CloseSelectionWindow();
|
||||||
|
} else {
|
||||||
|
searchBox.OnSearchSelectShow();
|
||||||
|
searchBox.DOMSearchSelectWindow().focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/* @license-end */
|
||||||
29
docs/doxygen_html/html/search/searchdata.js
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
var indexSectionsWithContent =
|
||||||
|
{
|
||||||
|
0: "acklms",
|
||||||
|
1: "s",
|
||||||
|
2: "k",
|
||||||
|
3: "aks",
|
||||||
|
4: "acl",
|
||||||
|
5: "km"
|
||||||
|
};
|
||||||
|
|
||||||
|
var indexSectionNames =
|
||||||
|
{
|
||||||
|
0: "all",
|
||||||
|
1: "classes",
|
||||||
|
2: "files",
|
||||||
|
3: "functions",
|
||||||
|
4: "variables",
|
||||||
|
5: "defines"
|
||||||
|
};
|
||||||
|
|
||||||
|
var indexSectionLabels =
|
||||||
|
{
|
||||||
|
0: "All",
|
||||||
|
1: "Classes",
|
||||||
|
2: "Files",
|
||||||
|
3: "Functions",
|
||||||
|
4: "Variables",
|
||||||
|
5: "Macros"
|
||||||
|
};
|
||||||
4
docs/doxygen_html/html/search/variables_0.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['acquisitions_0',['acquisitions',['../structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390',1,'simple_spinlock_t']]]
|
||||||
|
];
|
||||||
4
docs/doxygen_html/html/search/variables_1.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['contentions_0',['contentions',['../structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041',1,'simple_spinlock_t']]]
|
||||||
|
];
|
||||||
4
docs/doxygen_html/html/search/variables_2.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
var searchData=
|
||||||
|
[
|
||||||
|
['locked_0',['locked',['../structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172',1,'simple_spinlock_t']]]
|
||||||
|
];
|
||||||
BIN
docs/doxygen_html/html/splitbar.png
Normal file
|
After Width: | Height: | Size: 314 B |
BIN
docs/doxygen_html/html/splitbard.png
Normal file
|
After Width: | Height: | Size: 282 B |
|
|
@ -0,0 +1,87 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: Member List</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle"><div class="title">simple_spinlock_t Member List</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>This is the complete list of members for <a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a>, including all inherited members.</p>
|
||||||
|
<table class="directory">
|
||||||
|
<tr class="even"><td class="entry"><a class="el" href="structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390">acquisitions</a></td><td class="entry"><a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a></td><td class="entry"></td></tr>
|
||||||
|
<tr class="odd"><td class="entry"><a class="el" href="structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041">contentions</a></td><td class="entry"><a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a></td><td class="entry"></td></tr>
|
||||||
|
<tr class="even"><td class="entry"><a class="el" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">locked</a></td><td class="entry"><a class="el" href="structsimple__spinlock__t.html">simple_spinlock_t</a></td><td class="entry"></td></tr>
|
||||||
|
</table></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
158
docs/doxygen_html/html/structsimple__spinlock__t.html
Normal file
|
|
@ -0,0 +1,158 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>MINIX Kernel Documentation: simple_spinlock_t Struct Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr id="projectrow">
|
||||||
|
<td id="projectalign">
|
||||||
|
<div id="projectname">MINIX Kernel Documentation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.9.8 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<div id="MSearchResults">
|
||||||
|
<div class="SRPage">
|
||||||
|
<div id="SRIndex">
|
||||||
|
<div id="SRResults"></div>
|
||||||
|
<div class="SRStatus" id="Loading">Loading...</div>
|
||||||
|
<div class="SRStatus" id="Searching">Searching...</div>
|
||||||
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#pub-attribs">Public Attributes</a> |
|
||||||
|
<a href="structsimple__spinlock__t-members.html">List of all members</a> </div>
|
||||||
|
<div class="headertitle"><div class="title">simple_spinlock_t Struct Reference</div></div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p>Structure representing a simple spinlock.
|
||||||
|
<a href="structsimple__spinlock__t.html#details">More...</a></p>
|
||||||
|
|
||||||
|
<p><code>#include <<a class="el" href="k__spinlock_8h_source.html">k_spinlock.h</a>></code></p>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
|
||||||
|
Public Attributes</h2></td></tr>
|
||||||
|
<tr class="memitem:ae8d529ab0ac1b69010d98ef8336e9172" id="r_ae8d529ab0ac1b69010d98ef8336e9172"><td class="memItemLeft" align="right" valign="top">volatile int </td><td class="memItemRight" valign="bottom"><a class="el" href="structsimple__spinlock__t.html#ae8d529ab0ac1b69010d98ef8336e9172">locked</a></td></tr>
|
||||||
|
<tr class="memdesc:ae8d529ab0ac1b69010d98ef8336e9172"><td class="mdescLeft"> </td><td class="mdescRight">The lock state. 0 for unlocked, 1 for locked. <br /></td></tr>
|
||||||
|
<tr class="separator:ae8d529ab0ac1b69010d98ef8336e9172"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:a849f8cded125ee7192052ca71e67f390" id="r_a849f8cded125ee7192052ca71e67f390"><td class="memItemLeft" align="right" valign="top">unsigned long </td><td class="memItemRight" valign="bottom"><a class="el" href="structsimple__spinlock__t.html#a849f8cded125ee7192052ca71e67f390">acquisitions</a></td></tr>
|
||||||
|
<tr class="memdesc:a849f8cded125ee7192052ca71e67f390"><td class="mdescLeft"> </td><td class="mdescRight">Number of times the lock was successfully acquired. <br /></td></tr>
|
||||||
|
<tr class="separator:a849f8cded125ee7192052ca71e67f390"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:a7c66988c5d374d8eaf3b522a1ed7d041" id="r_a7c66988c5d374d8eaf3b522a1ed7d041"><td class="memItemLeft" align="right" valign="top">unsigned long </td><td class="memItemRight" valign="bottom"><a class="el" href="structsimple__spinlock__t.html#a7c66988c5d374d8eaf3b522a1ed7d041">contentions</a></td></tr>
|
||||||
|
<tr class="memdesc:a7c66988c5d374d8eaf3b522a1ed7d041"><td class="mdescLeft"> </td><td class="mdescRight">Number of times a thread tried to acquire the lock but found it already held, thus entering a spin-wait loop. This indicates contention. <br /></td></tr>
|
||||||
|
<tr class="separator:a7c66988c5d374d8eaf3b522a1ed7d041"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p>Structure representing a simple spinlock. </p>
|
||||||
|
<p>The spinlock's state is determined by the <code>locked</code> member. It also includes basic statistics for acquisitions and contentions. It is crucial that operations on this structure use the provided <code>simple_spin_*</code> functions to ensure atomicity and correct memory ordering. </p>
|
||||||
|
</div><h2 class="groupheader">Member Data Documentation</h2>
|
||||||
|
<a id="a849f8cded125ee7192052ca71e67f390" name="a849f8cded125ee7192052ca71e67f390"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a849f8cded125ee7192052ca71e67f390">◆ </a></span>acquisitions</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">unsigned long simple_spinlock_t::acquisitions</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Number of times the lock was successfully acquired. </p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="a7c66988c5d374d8eaf3b522a1ed7d041" name="a7c66988c5d374d8eaf3b522a1ed7d041"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#a7c66988c5d374d8eaf3b522a1ed7d041">◆ </a></span>contentions</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">unsigned long simple_spinlock_t::contentions</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>Number of times a thread tried to acquire the lock but found it already held, thus entering a spin-wait loop. This indicates contention. </p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="ae8d529ab0ac1b69010d98ef8336e9172" name="ae8d529ab0ac1b69010d98ef8336e9172"></a>
|
||||||
|
<h2 class="memtitle"><span class="permalink"><a href="#ae8d529ab0ac1b69010d98ef8336e9172">◆ </a></span>locked</h2>
|
||||||
|
|
||||||
|
<div class="memitem">
|
||||||
|
<div class="memproto">
|
||||||
|
<table class="memname">
|
||||||
|
<tr>
|
||||||
|
<td class="memname">volatile int simple_spinlock_t::locked</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div><div class="memdoc">
|
||||||
|
|
||||||
|
<p>The lock state. 0 for unlocked, 1 for locked. </p>
|
||||||
|
<p><code>volatile</code> ensures that the compiler does not optimize away reads of this variable, as its value can change unexpectedly due to actions from other CPUs or threads. The atomicity of lock operations is guaranteed by GCC's <code>__sync_*</code> builtins, not by <code>volatile</code> itself. </p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr/>The documentation for this struct was generated from the following file:<ul>
|
||||||
|
<li>minix/kernel/<a class="el" href="k__spinlock_8h_source.html">k_spinlock.h</a></li>
|
||||||
|
</ul>
|
||||||
|
</div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
docs/doxygen_html/html/sync_off.png
Normal file
|
After Width: | Height: | Size: 853 B |
BIN
docs/doxygen_html/html/sync_on.png
Normal file
|
After Width: | Height: | Size: 845 B |
BIN
docs/doxygen_html/html/tab_a.png
Normal file
|
After Width: | Height: | Size: 142 B |
BIN
docs/doxygen_html/html/tab_ad.png
Normal file
|
After Width: | Height: | Size: 135 B |
BIN
docs/doxygen_html/html/tab_b.png
Normal file
|
After Width: | Height: | Size: 169 B |
BIN
docs/doxygen_html/html/tab_bd.png
Normal file
|
After Width: | Height: | Size: 173 B |
BIN
docs/doxygen_html/html/tab_h.png
Normal file
|
After Width: | Height: | Size: 177 B |
BIN
docs/doxygen_html/html/tab_hd.png
Normal file
|
After Width: | Height: | Size: 180 B |
BIN
docs/doxygen_html/html/tab_s.png
Normal file
|
After Width: | Height: | Size: 184 B |
BIN
docs/doxygen_html/html/tab_sd.png
Normal file
|
After Width: | Height: | Size: 188 B |
1
docs/doxygen_html/html/tabs.css
Normal file
27
docs/doxygen_html/latex/Makefile
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
LATEX_CMD?=pdflatex
|
||||||
|
MKIDX_CMD?=makeindex
|
||||||
|
BIBTEX_CMD?=bibtex
|
||||||
|
LATEX_COUNT?=8
|
||||||
|
MANUAL_FILE?=refman
|
||||||
|
|
||||||
|
all: $(MANUAL_FILE).pdf
|
||||||
|
|
||||||
|
pdf: $(MANUAL_FILE).pdf
|
||||||
|
|
||||||
|
$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex
|
||||||
|
$(LATEX_CMD) $(MANUAL_FILE)
|
||||||
|
$(MKIDX_CMD) $(MANUAL_FILE).idx
|
||||||
|
$(LATEX_CMD) $(MANUAL_FILE)
|
||||||
|
latex_count=$(LATEX_COUNT) ; \
|
||||||
|
while grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\
|
||||||
|
do \
|
||||||
|
echo "Rerunning latex...." ;\
|
||||||
|
$(LATEX_CMD) $(MANUAL_FILE) ;\
|
||||||
|
latex_count=`expr $$latex_count - 1` ;\
|
||||||
|
done
|
||||||
|
$(MKIDX_CMD) $(MANUAL_FILE).idx
|
||||||
|
$(LATEX_CMD) $(MANUAL_FILE)
|
||||||
|
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf
|
||||||
4
docs/doxygen_html/latex/annotated.tex
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
\doxysection{Class List}
|
||||||
|
Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList}
|
||||||
|
\item\contentsline{section}{\mbox{\hyperlink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t}} \\*Structure representing a simple spinlock }{\pageref{structsimple__spinlock__t}}{}
|
||||||
|
\end{DoxyCompactList}
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
\doxysection{minix Directory Reference}
|
||||||
|
\hypertarget{dir_207bf8c12f5ffd71867b262b7e0c4f41}{}\label{dir_207bf8c12f5ffd71867b262b7e0c4f41}\index{minix Directory Reference@{minix Directory Reference}}
|
||||||
|
\doxysubsubsection*{Directories}
|
||||||
|
\begin{DoxyCompactItemize}
|
||||||
|
\item
|
||||||
|
directory \mbox{\hyperlink{dir_a593f8436b1bc29ffa99b7ee170e7ac1}{kernel}}
|
||||||
|
\end{DoxyCompactItemize}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
\doxysection{minix/kernel Directory Reference}
|
||||||
|
\hypertarget{dir_a593f8436b1bc29ffa99b7ee170e7ac1}{}\label{dir_a593f8436b1bc29ffa99b7ee170e7ac1}\index{minix/kernel Directory Reference@{minix/kernel Directory Reference}}
|
||||||
|
Directory dependency graph for kernel\+:
|
||||||
|
\nopagebreak
|
||||||
|
\begin{figure}[H]
|
||||||
|
\begin{center}
|
||||||
|
\leavevmode
|
||||||
|
\includegraphics[width=160pt]{dir_a593f8436b1bc29ffa99b7ee170e7ac1_dep}
|
||||||
|
\end{center}
|
||||||
|
\end{figure}
|
||||||
|
\doxysubsubsection*{Files}
|
||||||
|
\begin{DoxyCompactItemize}
|
||||||
|
\item
|
||||||
|
file \mbox{\hyperlink{k__spinlock_8h}{k\+\_\+spinlock.\+h}}
|
||||||
|
\begin{DoxyCompactList}\small\item\em Defines a simple, non-\/recursive spinlock using GCC atomic builtins. \end{DoxyCompactList}\end{DoxyCompactItemize}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
0674c09b3673894dc9c5befa1805c294
|
||||||
694
docs/doxygen_html/latex/doxygen.sty
Normal file
|
|
@ -0,0 +1,694 @@
|
||||||
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
|
\ProvidesPackage{doxygen}
|
||||||
|
|
||||||
|
% Packages used by this style file
|
||||||
|
\RequirePackage{alltt}
|
||||||
|
%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
|
||||||
|
\RequirePackage{calc}
|
||||||
|
\RequirePackage{float}
|
||||||
|
%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
|
||||||
|
\RequirePackage{verbatim}
|
||||||
|
\RequirePackage[table]{xcolor}
|
||||||
|
\RequirePackage{longtable_doxygen}
|
||||||
|
\RequirePackage{tabu_doxygen}
|
||||||
|
\RequirePackage{fancyvrb}
|
||||||
|
\RequirePackage{tabularx}
|
||||||
|
\RequirePackage{multicol}
|
||||||
|
\RequirePackage{multirow}
|
||||||
|
\RequirePackage{hanging}
|
||||||
|
\RequirePackage{ifpdf}
|
||||||
|
\RequirePackage{adjustbox}
|
||||||
|
\RequirePackage{amssymb}
|
||||||
|
\RequirePackage{stackengine}
|
||||||
|
\RequirePackage{enumitem}
|
||||||
|
\RequirePackage{alphalph}
|
||||||
|
\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis
|
||||||
|
|
||||||
|
%---------- Internal commands used in this style file ----------------
|
||||||
|
|
||||||
|
\newcommand{\ensurespace}[1]{%
|
||||||
|
\begingroup%
|
||||||
|
\setlength{\dimen@}{#1}%
|
||||||
|
\vskip\z@\@plus\dimen@%
|
||||||
|
\penalty -100\vskip\z@\@plus -\dimen@%
|
||||||
|
\vskip\dimen@%
|
||||||
|
\penalty 9999%
|
||||||
|
\vskip -\dimen@%
|
||||||
|
\vskip\z@skip% hide the previous |\vskip| from |\addvspace|
|
||||||
|
\endgroup%
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcommand{\DoxyHorRuler}[1]{%
|
||||||
|
\setlength{\parskip}{0ex plus 0ex minus 0ex}%
|
||||||
|
\ifthenelse{#1=0}%
|
||||||
|
{%
|
||||||
|
\hrule%
|
||||||
|
}%
|
||||||
|
{%
|
||||||
|
\hrulefilll%
|
||||||
|
}%
|
||||||
|
}
|
||||||
|
\newcommand{\DoxyLabelFont}{}
|
||||||
|
\newcommand{\entrylabel}[1]{%
|
||||||
|
{%
|
||||||
|
\parbox[b]{\labelwidth-4pt}{%
|
||||||
|
\makebox[0pt][l]{\DoxyLabelFont#1}%
|
||||||
|
\vspace{1.5\baselineskip}%
|
||||||
|
}%
|
||||||
|
}%
|
||||||
|
}
|
||||||
|
|
||||||
|
\newenvironment{DoxyDesc}[1]{%
|
||||||
|
\ensurespace{4\baselineskip}%
|
||||||
|
\begin{list}{}{%
|
||||||
|
\settowidth{\labelwidth}{20pt}%
|
||||||
|
%\setlength{\parsep}{0pt}%
|
||||||
|
\setlength{\itemsep}{0pt}%
|
||||||
|
\setlength{\leftmargin}{\labelwidth+\labelsep}%
|
||||||
|
\renewcommand{\makelabel}{\entrylabel}%
|
||||||
|
}%
|
||||||
|
\item[#1]%
|
||||||
|
}{%
|
||||||
|
\end{list}%
|
||||||
|
}
|
||||||
|
|
||||||
|
\newsavebox{\xrefbox}
|
||||||
|
\newlength{\xreflength}
|
||||||
|
\newcommand{\xreflabel}[1]{%
|
||||||
|
\sbox{\xrefbox}{#1}%
|
||||||
|
\setlength{\xreflength}{\wd\xrefbox}%
|
||||||
|
\ifthenelse{\xreflength>\labelwidth}{%
|
||||||
|
\begin{minipage}{\textwidth}%
|
||||||
|
\setlength{\parindent}{0pt}%
|
||||||
|
\hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
|
||||||
|
\end{minipage}%
|
||||||
|
}{%
|
||||||
|
\parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
|
||||||
|
}%
|
||||||
|
}
|
||||||
|
|
||||||
|
%---------- Commands used by doxygen LaTeX output generator ----------
|
||||||
|
|
||||||
|
% Used by <pre> ... </pre>
|
||||||
|
\newenvironment{DoxyPre}{%
|
||||||
|
\small%
|
||||||
|
\begin{alltt}%
|
||||||
|
}{%
|
||||||
|
\end{alltt}%
|
||||||
|
\normalsize%
|
||||||
|
}
|
||||||
|
% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output.
|
||||||
|
\newlength{\CodeWidthChar}
|
||||||
|
\newlength{\CodeHeightChar}
|
||||||
|
\settowidth{\CodeWidthChar}{?}
|
||||||
|
\settoheight{\CodeHeightChar}{?}
|
||||||
|
% Necessary for hanging indent
|
||||||
|
\newlength{\DoxyCodeWidth}
|
||||||
|
|
||||||
|
\newcommand\DoxyCodeLine[1]{
|
||||||
|
\ifthenelse{\equal{\detokenize{#1}}{}}
|
||||||
|
{
|
||||||
|
\vspace*{\baselineskip}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
\hangpara{\DoxyCodeWidth}{1}{#1}\par
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcommand\NiceSpace{%
|
||||||
|
\discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @code ... @endcode
|
||||||
|
\newenvironment{DoxyCode}[1]{%
|
||||||
|
\par%
|
||||||
|
\scriptsize%
|
||||||
|
\normalfont\ttfamily%
|
||||||
|
\rightskip0pt plus 1fil%
|
||||||
|
\settowidth{\DoxyCodeWidth}{000000}%
|
||||||
|
\settowidth{\CodeWidthChar}{?}%
|
||||||
|
\settoheight{\CodeHeightChar}{?}%
|
||||||
|
\setlength{\parskip}{0ex plus 0ex minus 0ex}%
|
||||||
|
\ifthenelse{\equal{#1}{0}}
|
||||||
|
{
|
||||||
|
{\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
|
||||||
|
}
|
||||||
|
{
|
||||||
|
{\lccode`~32 \lowercase{\global\let~}}\obeyspaces%
|
||||||
|
}
|
||||||
|
|
||||||
|
}{%
|
||||||
|
\normalfont%
|
||||||
|
\normalsize%
|
||||||
|
\settowidth{\CodeWidthChar}{?}%
|
||||||
|
\settoheight{\CodeHeightChar}{?}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Redefining not defined characters, i.e. "Replacement Character" in tex output.
|
||||||
|
\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{%
|
||||||
|
\textcolor{white}{\sffamily\bfseries\small ?}}{%
|
||||||
|
\rotatebox{45}{$\blacksquare$}}}}
|
||||||
|
|
||||||
|
% Used by @example, @include, @includelineno and @dontinclude
|
||||||
|
\newenvironment{DoxyCodeInclude}[1]{%
|
||||||
|
\DoxyCode{#1}%
|
||||||
|
}{%
|
||||||
|
\endDoxyCode%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @verbatim ... @endverbatim
|
||||||
|
\newenvironment{DoxyVerb}{%
|
||||||
|
\par%
|
||||||
|
\footnotesize%
|
||||||
|
\verbatim%
|
||||||
|
}{%
|
||||||
|
\endverbatim%
|
||||||
|
\normalsize%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @verbinclude
|
||||||
|
\newenvironment{DoxyVerbInclude}{%
|
||||||
|
\DoxyVerb%
|
||||||
|
}{%
|
||||||
|
\endDoxyVerb%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by numbered lists (using '-#' or <ol> ... </ol>)
|
||||||
|
\setlistdepth{12}
|
||||||
|
\newlist{DoxyEnumerate}{enumerate}{12}
|
||||||
|
\setlist[DoxyEnumerate,1]{label=\arabic*.}
|
||||||
|
\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)}
|
||||||
|
\setlist[DoxyEnumerate,3]{label=\roman*.}
|
||||||
|
\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.}
|
||||||
|
\setlist[DoxyEnumerate,5]{label=\arabic*.}
|
||||||
|
\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)}
|
||||||
|
\setlist[DoxyEnumerate,7]{label=\roman*.}
|
||||||
|
\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.}
|
||||||
|
\setlist[DoxyEnumerate,9]{label=\arabic*.}
|
||||||
|
\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)}
|
||||||
|
\setlist[DoxyEnumerate,11]{label=\roman*.}
|
||||||
|
\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.}
|
||||||
|
|
||||||
|
% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
|
||||||
|
\setlistdepth{12}
|
||||||
|
\newlist{DoxyItemize}{itemize}{12}
|
||||||
|
\setlist[DoxyItemize]{label=\textperiodcentered}
|
||||||
|
|
||||||
|
\setlist[DoxyItemize,1]{label=\textbullet}
|
||||||
|
\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash}
|
||||||
|
\setlist[DoxyItemize,3]{label=\textasteriskcentered}
|
||||||
|
\setlist[DoxyItemize,4]{label=\textperiodcentered}
|
||||||
|
|
||||||
|
% Used by description lists (using <dl> ... </dl>)
|
||||||
|
\newenvironment{DoxyDescription}{%
|
||||||
|
\description%
|
||||||
|
}{%
|
||||||
|
\enddescription%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
|
||||||
|
% (only if caption is specified)
|
||||||
|
\newenvironment{DoxyImage}{%
|
||||||
|
\begin{figure}[H]%
|
||||||
|
\centering%
|
||||||
|
}{%
|
||||||
|
\end{figure}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
|
||||||
|
% (only if no caption is specified)
|
||||||
|
\newenvironment{DoxyImageNoCaption}{%
|
||||||
|
\begin{center}%
|
||||||
|
}{%
|
||||||
|
\end{center}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @image
|
||||||
|
% (only if inline is specified)
|
||||||
|
\newenvironment{DoxyInlineImage}{%
|
||||||
|
}{%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @attention
|
||||||
|
\newenvironment{DoxyAttention}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @author and @authors
|
||||||
|
\newenvironment{DoxyAuthor}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @date
|
||||||
|
\newenvironment{DoxyDate}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @invariant
|
||||||
|
\newenvironment{DoxyInvariant}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @note
|
||||||
|
\newenvironment{DoxyNote}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @post
|
||||||
|
\newenvironment{DoxyPostcond}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @pre
|
||||||
|
\newenvironment{DoxyPrecond}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @copyright
|
||||||
|
\newenvironment{DoxyCopyright}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @remark
|
||||||
|
\newenvironment{DoxyRemark}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @return and @returns
|
||||||
|
\newenvironment{DoxyReturn}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @since
|
||||||
|
\newenvironment{DoxySince}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @see
|
||||||
|
\newenvironment{DoxySeeAlso}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @version
|
||||||
|
\newenvironment{DoxyVersion}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @warning
|
||||||
|
\newenvironment{DoxyWarning}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @par and @paragraph
|
||||||
|
\newenvironment{DoxyParagraph}[1]{%
|
||||||
|
\begin{DoxyDesc}{#1}%
|
||||||
|
}{%
|
||||||
|
\end{DoxyDesc}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by parameter lists
|
||||||
|
\newenvironment{DoxyParams}[2][]{%
|
||||||
|
\tabulinesep=1mm%
|
||||||
|
\par%
|
||||||
|
\ifthenelse{\equal{#1}{}}%
|
||||||
|
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description
|
||||||
|
{\ifthenelse{\equal{#1}{1}}%
|
||||||
|
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc
|
||||||
|
{\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc
|
||||||
|
}
|
||||||
|
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endfirsthead%
|
||||||
|
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endhead%
|
||||||
|
}{%
|
||||||
|
\end{longtabu*}%
|
||||||
|
\vspace{6pt}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used for fields of simple structs
|
||||||
|
\newenvironment{DoxyFields}[1]{%
|
||||||
|
\tabulinesep=1mm%
|
||||||
|
\par%
|
||||||
|
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}%
|
||||||
|
\multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endfirsthead%
|
||||||
|
\multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endhead%
|
||||||
|
}{%
|
||||||
|
\end{longtabu*}%
|
||||||
|
\vspace{6pt}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used for fields simple class style enums
|
||||||
|
\newenvironment{DoxyEnumFields}[1]{%
|
||||||
|
\tabulinesep=1mm%
|
||||||
|
\par%
|
||||||
|
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
|
||||||
|
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endfirsthead%
|
||||||
|
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endhead%
|
||||||
|
}{%
|
||||||
|
\end{longtabu*}%
|
||||||
|
\vspace{6pt}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used for parameters within a detailed function description
|
||||||
|
\newenvironment{DoxyParamCaption}{%
|
||||||
|
\renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}%
|
||||||
|
}{%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by return value lists
|
||||||
|
\newenvironment{DoxyRetVals}[1]{%
|
||||||
|
\tabulinesep=1mm%
|
||||||
|
\par%
|
||||||
|
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
|
||||||
|
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endfirsthead%
|
||||||
|
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endhead%
|
||||||
|
}{%
|
||||||
|
\end{longtabu*}%
|
||||||
|
\vspace{6pt}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by exception lists
|
||||||
|
\newenvironment{DoxyExceptions}[1]{%
|
||||||
|
\tabulinesep=1mm%
|
||||||
|
\par%
|
||||||
|
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
|
||||||
|
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endfirsthead%
|
||||||
|
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endhead%
|
||||||
|
}{%
|
||||||
|
\end{longtabu*}%
|
||||||
|
\vspace{6pt}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by template parameter lists
|
||||||
|
\newenvironment{DoxyTemplParams}[1]{%
|
||||||
|
\tabulinesep=1mm%
|
||||||
|
\par%
|
||||||
|
\begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
|
||||||
|
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endfirsthead%
|
||||||
|
\multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
|
||||||
|
\hline%
|
||||||
|
\endhead%
|
||||||
|
}{%
|
||||||
|
\end{longtabu*}%
|
||||||
|
\vspace{6pt}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used for member lists
|
||||||
|
\newenvironment{DoxyCompactItemize}{%
|
||||||
|
\begin{itemize}%
|
||||||
|
\setlength{\itemsep}{-3pt}%
|
||||||
|
\setlength{\parsep}{0pt}%
|
||||||
|
\setlength{\topsep}{0pt}%
|
||||||
|
\setlength{\partopsep}{0pt}%
|
||||||
|
}{%
|
||||||
|
\end{itemize}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used for member descriptions
|
||||||
|
\newenvironment{DoxyCompactList}{%
|
||||||
|
\begin{list}{}{%
|
||||||
|
\setlength{\leftmargin}{0.5cm}%
|
||||||
|
\setlength{\itemsep}{0pt}%
|
||||||
|
\setlength{\parsep}{0pt}%
|
||||||
|
\setlength{\topsep}{0pt}%
|
||||||
|
\renewcommand{\makelabel}{\hfill}%
|
||||||
|
}%
|
||||||
|
}{%
|
||||||
|
\end{list}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used for reference lists (@bug, @deprecated, @todo, etc.)
|
||||||
|
\newenvironment{DoxyRefList}{%
|
||||||
|
\begin{list}{}{%
|
||||||
|
\setlength{\labelwidth}{10pt}%
|
||||||
|
\setlength{\leftmargin}{\labelwidth}%
|
||||||
|
\addtolength{\leftmargin}{\labelsep}%
|
||||||
|
\renewcommand{\makelabel}{\xreflabel}%
|
||||||
|
}%
|
||||||
|
}{%
|
||||||
|
\end{list}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @bug, @deprecated, @todo, etc.
|
||||||
|
\newenvironment{DoxyRefDesc}[1]{%
|
||||||
|
\begin{list}{}{%
|
||||||
|
\renewcommand\makelabel[1]{\textbf{##1}}%
|
||||||
|
\settowidth\labelwidth{\makelabel{#1}}%
|
||||||
|
\setlength\leftmargin{\labelwidth+\labelsep}%
|
||||||
|
}%
|
||||||
|
}{%
|
||||||
|
\end{list}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by parameter lists and simple sections
|
||||||
|
\newenvironment{Desc}
|
||||||
|
{\begin{list}{}{%
|
||||||
|
\settowidth{\labelwidth}{20pt}%
|
||||||
|
\setlength{\parsep}{0pt}%
|
||||||
|
\setlength{\itemsep}{0pt}%
|
||||||
|
\setlength{\leftmargin}{\labelwidth+\labelsep}%
|
||||||
|
\renewcommand{\makelabel}{\entrylabel}%
|
||||||
|
}
|
||||||
|
}{%
|
||||||
|
\end{list}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by tables
|
||||||
|
\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
|
||||||
|
\newenvironment{TabularC}[1]%
|
||||||
|
{\tabulinesep=1mm
|
||||||
|
\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}%
|
||||||
|
{\end{longtabu*}\par}%
|
||||||
|
|
||||||
|
\newenvironment{TabularNC}[1]%
|
||||||
|
{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}%
|
||||||
|
{\end{tabu}\par}%
|
||||||
|
|
||||||
|
% Used for member group headers
|
||||||
|
\newenvironment{Indent}{%
|
||||||
|
\begin{list}{}{%
|
||||||
|
\setlength{\leftmargin}{0.5cm}%
|
||||||
|
}%
|
||||||
|
\item[]\ignorespaces%
|
||||||
|
}{%
|
||||||
|
\unskip%
|
||||||
|
\end{list}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used when hyperlinks are turned on
|
||||||
|
\newcommand{\doxylink}[2]{%
|
||||||
|
\mbox{\hyperlink{#1}{#2}}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used when hyperlinks are turned on
|
||||||
|
% Third argument is the SectionType, see the doxygen internal
|
||||||
|
% documentation for the values (relevant: Page ... Subsubsection).
|
||||||
|
\newcommand{\doxysectlink}[3]{%
|
||||||
|
\mbox{\hyperlink{#1}{#2}}%
|
||||||
|
}
|
||||||
|
% Used when hyperlinks are turned off
|
||||||
|
\newcommand{\doxyref}[3]{%
|
||||||
|
\textbf{#1} (\textnormal{#2}\,\pageref{#3})%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used when hyperlinks are turned off
|
||||||
|
% Fourth argument is the SectionType, see the doxygen internal
|
||||||
|
% documentation for the values (relevant: Page ... Subsubsection).
|
||||||
|
\newcommand{\doxysectref}[4]{%
|
||||||
|
\textbf{#1} (\textnormal{#2}\,\pageref{#3})%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used to link to a table when hyperlinks are turned on
|
||||||
|
\newcommand{\doxytablelink}[2]{%
|
||||||
|
\ref{#1}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used to link to a table when hyperlinks are turned off
|
||||||
|
\newcommand{\doxytableref}[3]{%
|
||||||
|
\ref{#3}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Used by @addindex
|
||||||
|
\newcommand{\lcurly}{\{}
|
||||||
|
\newcommand{\rcurly}{\}}
|
||||||
|
|
||||||
|
% Colors used for syntax highlighting
|
||||||
|
\definecolor{comment}{rgb}{0.5,0.0,0.0}
|
||||||
|
\definecolor{keyword}{rgb}{0.0,0.5,0.0}
|
||||||
|
\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
|
||||||
|
\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
|
||||||
|
\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
|
||||||
|
\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
|
||||||
|
\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
|
||||||
|
\definecolor{xmlcdata}{rgb}{0.0,0.0,0.0}
|
||||||
|
\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
|
||||||
|
\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
|
||||||
|
\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
|
||||||
|
\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
|
||||||
|
|
||||||
|
% Color used for table heading
|
||||||
|
\newcommand{\tableheadbgcolor}{lightgray}%
|
||||||
|
|
||||||
|
% Version of hypertarget with correct landing location
|
||||||
|
\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}
|
||||||
|
|
||||||
|
% possibility to have sections etc. be within the margins
|
||||||
|
% unfortunately had to copy part of book.cls and add \raggedright
|
||||||
|
\makeatletter
|
||||||
|
\newcounter{subsubsubsection}[subsubsection]
|
||||||
|
\newcounter{subsubsubsubsection}[subsubsubsection]
|
||||||
|
\newcounter{subsubsubsubsubsection}[subsubsubsubsection]
|
||||||
|
\newcounter{subsubsubsubsubsubsection}[subsubsubsubsubsection]
|
||||||
|
\renewcommand{\thesubsubsubsection}{\thesubsubsection.\arabic{subsubsubsection}}
|
||||||
|
\renewcommand{\thesubsubsubsubsection}{\thesubsubsubsection.\arabic{subsubsubsubsection}}
|
||||||
|
\renewcommand{\thesubsubsubsubsubsection}{\thesubsubsubsubsection.\arabic{subsubsubsubsubsection}}
|
||||||
|
\renewcommand{\thesubsubsubsubsubsubsection}{\thesubsubsubsubsubsection.\arabic{subsubsubsubsubsubsection}}
|
||||||
|
\newcommand{\subsubsubsectionmark}[1]{}
|
||||||
|
\newcommand{\subsubsubsubsectionmark}[1]{}
|
||||||
|
\newcommand{\subsubsubsubsubsectionmark}[1]{}
|
||||||
|
\newcommand{\subsubsubsubsubsubsectionmark}[1]{}
|
||||||
|
\def\toclevel@subsubsubsection{4}
|
||||||
|
\def\toclevel@subsubsubsubsection{5}
|
||||||
|
\def\toclevel@subsubsubsubsubsection{6}
|
||||||
|
\def\toclevel@subsubsubsubsubsubsection{7}
|
||||||
|
\def\toclevel@paragraph{8}
|
||||||
|
\def\toclevel@subparagraph{9}
|
||||||
|
|
||||||
|
\newcommand\doxysection{\@startsection {section}{1}{\z@}%
|
||||||
|
{-3.5ex \@plus -1ex \@minus -.2ex}%
|
||||||
|
{2.3ex \@plus.2ex}%
|
||||||
|
{\raggedright\normalfont\Large\bfseries}}
|
||||||
|
\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}%
|
||||||
|
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||||
|
{1.5ex \@plus .2ex}%
|
||||||
|
{\raggedright\normalfont\large\bfseries}}
|
||||||
|
\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}%
|
||||||
|
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||||
|
{1.5ex \@plus .2ex}%
|
||||||
|
{\raggedright\normalfont\normalsize\bfseries}}
|
||||||
|
\newcommand\doxysubsubsubsection{\@startsection{subsubsubsection}{4}{\z@}%
|
||||||
|
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||||
|
{1.5ex \@plus .2ex}%
|
||||||
|
{\raggedright\normalfont\normalsize\bfseries}}
|
||||||
|
\newcommand\doxysubsubsubsubsection{\@startsection{subsubsubsubsection}{5}{\z@}%
|
||||||
|
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||||
|
{1.5ex \@plus .2ex}%
|
||||||
|
{\raggedright\normalfont\normalsize\bfseries}}
|
||||||
|
\newcommand\doxysubsubsubsubsubsection{\@startsection{subsubsubsubsubsection}{6}{\z@}%
|
||||||
|
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||||
|
{1.5ex \@plus .2ex}%
|
||||||
|
{\raggedright\normalfont\normalsize\bfseries}}
|
||||||
|
\newcommand\doxysubsubsubsubsubsubsection{\@startsection{subsubsubsubsubsubsection}{7}{\z@}%
|
||||||
|
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||||
|
{1.5ex \@plus .2ex}%
|
||||||
|
{\raggedright\normalfont\normalsize\bfseries}}
|
||||||
|
\newcommand\doxyparagraph{\@startsection{paragraph}{8}{\z@}%
|
||||||
|
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||||
|
{1.5ex \@plus .2ex}%
|
||||||
|
{\raggedright\normalfont\normalsize\bfseries}}
|
||||||
|
\newcommand\doxysubparagraph{\@startsection{subparagraph}{9}{\parindent}%
|
||||||
|
{-3.25ex\@plus -1ex \@minus -.2ex}%
|
||||||
|
{1.5ex \@plus .2ex}%
|
||||||
|
{\raggedright\normalfont\normalsize\bfseries}}
|
||||||
|
|
||||||
|
\newcommand\l@subsubsubsection{\@dottedtocline{4}{6.1em}{7.8em}}
|
||||||
|
\newcommand\l@subsubsubsubsection{\@dottedtocline{5}{6.1em}{9.4em}}
|
||||||
|
\newcommand\l@subsubsubsubsubsection{\@dottedtocline{6}{6.1em}{11em}}
|
||||||
|
\newcommand\l@subsubsubsubsubsubsection{\@dottedtocline{7}{6.1em}{12.6em}}
|
||||||
|
\renewcommand\l@paragraph{\@dottedtocline{8}{6.1em}{14.2em}}
|
||||||
|
\renewcommand\l@subparagraph{\@dottedtocline{9}{6.1em}{15.8em}}
|
||||||
|
\makeatother
|
||||||
|
% the sectsty doesn't look to be maintained but gives, in our case, some warning like:
|
||||||
|
% LaTeX Warning: Command \underline has changed.
|
||||||
|
% Check if current package is valid.
|
||||||
|
% unfortunately had to copy the relevant part
|
||||||
|
\newcommand*{\doxypartfont} [1]
|
||||||
|
{\gdef\SS@partnumberfont{\SS@sectid{0}\SS@nopart\SS@makeulinepartchap#1}
|
||||||
|
\gdef\SS@parttitlefont{\SS@sectid{0}\SS@titlepart\SS@makeulinepartchap#1}}
|
||||||
|
\newcommand*{\doxychapterfont} [1]
|
||||||
|
{\gdef\SS@chapnumfont{\SS@sectid{1}\SS@nopart\SS@makeulinepartchap#1}
|
||||||
|
\gdef\SS@chaptitlefont{\SS@sectid{1}\SS@titlepart\SS@makeulinepartchap#1}}
|
||||||
|
\newcommand*{\doxysectionfont} [1]
|
||||||
|
{\gdef\SS@sectfont{\SS@sectid{2}\SS@rr\SS@makeulinesect#1}}
|
||||||
|
\newcommand*{\doxysubsectionfont} [1]
|
||||||
|
{\gdef\SS@subsectfont{\SS@sectid{3}\SS@rr\SS@makeulinesect#1}}
|
||||||
|
\newcommand*{\doxysubsubsectionfont} [1]
|
||||||
|
{\gdef\SS@subsubsectfont{\SS@sectid{4}\SS@rr\SS@makeulinesect#1}}
|
||||||
|
\newcommand*{\doxyparagraphfont} [1]
|
||||||
|
{\gdef\SS@parafont{\SS@sectid{5}\SS@rr\SS@makeulinesect#1}}
|
||||||
|
\newcommand*{\doxysubparagraphfont} [1]
|
||||||
|
{\gdef\SS@subparafont{\SS@sectid{6}\SS@rr\SS@makeulinesect#1}}
|
||||||
|
\newcommand*{\doxyminisecfont} [1]
|
||||||
|
{\gdef\SS@minisecfont{\SS@sectid{7}\SS@rr\SS@makeulinepartchap#1}}
|
||||||
|
\newcommand*{\doxyallsectionsfont} [1] {\doxypartfont{#1}%
|
||||||
|
\doxychapterfont{#1}%
|
||||||
|
\doxysectionfont{#1}%
|
||||||
|
\doxysubsectionfont{#1}%
|
||||||
|
\doxysubsubsectionfont{#1}%
|
||||||
|
\doxyparagraphfont{#1}%
|
||||||
|
\doxysubparagraphfont{#1}%
|
||||||
|
\doxyminisecfont{#1}}%
|
||||||
|
% Define caption that is also suitable in a table
|
||||||
|
\makeatletter
|
||||||
|
\def\doxyfigcaption{%
|
||||||
|
\H@refstepcounter{figure}%
|
||||||
|
\@dblarg{\@caption{figure}}}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
% Define alpha enumarative names for counters > 26
|
||||||
|
\makeatletter
|
||||||
|
\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname}
|
||||||
|
\def\@enumalphalphcnt#1{\alphalph{#1}}
|
||||||
|
\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname}
|
||||||
|
\def\@enumAlphAlphcnt#1{\AlphAlph{#1}}
|
||||||
|
\makeatother
|
||||||
|
\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa}
|
||||||
|
\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA}
|
||||||
2178
docs/doxygen_html/latex/etoc_doxygen.sty
Normal file
4
docs/doxygen_html/latex/files.tex
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
\doxysection{File List}
|
||||||
|
Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList}
|
||||||
|
\item\contentsline{section}{minix/kernel/\mbox{\hyperlink{k__spinlock_8h}{k\+\_\+spinlock.\+h}} \\*Defines a simple, non-\/recursive spinlock using GCC atomic builtins }{\pageref{k__spinlock_8h}}{}
|
||||||
|
\end{DoxyCompactList}
|
||||||
139
docs/doxygen_html/latex/k__spinlock_8h.tex
Normal file
|
|
@ -0,0 +1,139 @@
|
||||||
|
\doxysection{minix/kernel/k\+\_\+spinlock.h File Reference}
|
||||||
|
\hypertarget{k__spinlock_8h}{}\label{k__spinlock_8h}\index{minix/kernel/k\_spinlock.h@{minix/kernel/k\_spinlock.h}}
|
||||||
|
|
||||||
|
|
||||||
|
Defines a simple, non-\/recursive spinlock using GCC atomic builtins.
|
||||||
|
|
||||||
|
|
||||||
|
{\ttfamily \#include $<$minix/sys\+\_\+config.\+h$>$}\newline
|
||||||
|
Include dependency graph for k\+\_\+spinlock.\+h\+:
|
||||||
|
\nopagebreak
|
||||||
|
\begin{figure}[H]
|
||||||
|
\begin{center}
|
||||||
|
\leavevmode
|
||||||
|
\includegraphics[width=221pt]{k__spinlock_8h__incl}
|
||||||
|
\end{center}
|
||||||
|
\end{figure}
|
||||||
|
\doxysubsubsection*{Classes}
|
||||||
|
\begin{DoxyCompactItemize}
|
||||||
|
\item
|
||||||
|
struct \mbox{\hyperlink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t}}
|
||||||
|
\begin{DoxyCompactList}\small\item\em Structure representing a simple spinlock. \end{DoxyCompactList}\end{DoxyCompactItemize}
|
||||||
|
\doxysubsubsection*{Macros}
|
||||||
|
\begin{DoxyCompactItemize}
|
||||||
|
\item
|
||||||
|
\#define \mbox{\hyperlink{k__spinlock_8h_ab64669b95d563f14428a1f073106ef04}{MAX\+\_\+\+SPIN\+\_\+\+THRESHOLD}}~100000
|
||||||
|
\begin{DoxyCompactList}\small\item\em Maximum number of spin iterations before attempting to yield. \end{DoxyCompactList}\item
|
||||||
|
\#define \mbox{\hyperlink{k__spinlock_8h_ab7e692108b27a8b15089a297b451f293}{KERNEL\+\_\+\+YIELD\+\_\+\+DEFINED}}
|
||||||
|
\end{DoxyCompactItemize}
|
||||||
|
\doxysubsubsection*{Functions}
|
||||||
|
\begin{DoxyCompactItemize}
|
||||||
|
\item
|
||||||
|
static void \mbox{\hyperlink{k__spinlock_8h_a79887c626e823a36834e349fb75c539c}{arch\+\_\+pause}} (void)
|
||||||
|
\begin{DoxyCompactList}\small\item\em Placeholder for arch\+\_\+pause on non-\/x86 architectures. \end{DoxyCompactList}\item
|
||||||
|
static void \mbox{\hyperlink{k__spinlock_8h_a3b96827abeb83529b5d946e2654231ed}{kernel\+\_\+yield}} (void)
|
||||||
|
\begin{DoxyCompactList}\small\item\em Yields the CPU, typically to the scheduler. (Stub Implementation) \end{DoxyCompactList}\item
|
||||||
|
static void \mbox{\hyperlink{k__spinlock_8h_a614711109a66b779e92036c573e57002}{simple\+\_\+spin\+\_\+init}} (\mbox{\hyperlink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t}} \texorpdfstring{$\ast$}{*}lock)
|
||||||
|
\begin{DoxyCompactList}\small\item\em Initializes a spinlock to the unlocked state and resets statistics. \end{DoxyCompactList}\item
|
||||||
|
static void \mbox{\hyperlink{k__spinlock_8h_a8e8fd03b0cdf6f309bde43577c3dd548}{simple\+\_\+spin\+\_\+lock}} (\mbox{\hyperlink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t}} \texorpdfstring{$\ast$}{*}lock)
|
||||||
|
\begin{DoxyCompactList}\small\item\em Acquires a spinlock, busy-\/waiting if necessary. \end{DoxyCompactList}\item
|
||||||
|
static void \mbox{\hyperlink{k__spinlock_8h_ad62d430c4e62aaa0d945088f5e1adc32}{simple\+\_\+spin\+\_\+unlock}} (\mbox{\hyperlink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t}} \texorpdfstring{$\ast$}{*}lock)
|
||||||
|
\begin{DoxyCompactList}\small\item\em Releases a previously acquired spinlock. \end{DoxyCompactList}\end{DoxyCompactItemize}
|
||||||
|
|
||||||
|
|
||||||
|
\doxysubsection{Detailed Description}
|
||||||
|
Defines a simple, non-\/recursive spinlock using GCC atomic builtins.
|
||||||
|
|
||||||
|
This header provides a basic spinlock implementation suitable for short critical sections, particularly in contexts where sleeping is not permissible (e.\+g., some interrupt handlers or core kernel code before schedulers are fully active). It is designed with SMP considerations, relying on GCC\textquotesingle{}s atomic builtins which typically ensure full memory barriers for sequential consistency. Includes adaptive spinning using {\ttfamily \doxylink{k__spinlock_8h_a79887c626e823a36834e349fb75c539c}{arch\+\_\+pause()}} for supported architectures.
|
||||||
|
|
||||||
|
\doxysubsection{Macro Definition Documentation}
|
||||||
|
\Hypertarget{k__spinlock_8h_ab7e692108b27a8b15089a297b451f293}\label{k__spinlock_8h_ab7e692108b27a8b15089a297b451f293}
|
||||||
|
\index{k\_spinlock.h@{k\_spinlock.h}!KERNEL\_YIELD\_DEFINED@{KERNEL\_YIELD\_DEFINED}}
|
||||||
|
\index{KERNEL\_YIELD\_DEFINED@{KERNEL\_YIELD\_DEFINED}!k\_spinlock.h@{k\_spinlock.h}}
|
||||||
|
\doxysubsubsection{\texorpdfstring{KERNEL\_YIELD\_DEFINED}{KERNEL\_YIELD\_DEFINED}}
|
||||||
|
{\footnotesize\ttfamily \#define KERNEL\+\_\+\+YIELD\+\_\+\+DEFINED}
|
||||||
|
|
||||||
|
\Hypertarget{k__spinlock_8h_ab64669b95d563f14428a1f073106ef04}\label{k__spinlock_8h_ab64669b95d563f14428a1f073106ef04}
|
||||||
|
\index{k\_spinlock.h@{k\_spinlock.h}!MAX\_SPIN\_THRESHOLD@{MAX\_SPIN\_THRESHOLD}}
|
||||||
|
\index{MAX\_SPIN\_THRESHOLD@{MAX\_SPIN\_THRESHOLD}!k\_spinlock.h@{k\_spinlock.h}}
|
||||||
|
\doxysubsubsection{\texorpdfstring{MAX\_SPIN\_THRESHOLD}{MAX\_SPIN\_THRESHOLD}}
|
||||||
|
{\footnotesize\ttfamily \#define MAX\+\_\+\+SPIN\+\_\+\+THRESHOLD~100000}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Maximum number of spin iterations before attempting to yield.
|
||||||
|
|
||||||
|
This threshold is used in {\ttfamily simple\+\_\+spin\+\_\+lock} to prevent a CPU from monopolizing resources by spinning indefinitely on a highly contended lock. After this many spins in the inner loop, {\ttfamily \doxylink{k__spinlock_8h_a3b96827abeb83529b5d946e2654231ed}{kernel\+\_\+yield()}} is called. The value should be tuned based on system characteristics and expected contention levels.
|
||||||
|
|
||||||
|
\doxysubsection{Function Documentation}
|
||||||
|
\Hypertarget{k__spinlock_8h_a79887c626e823a36834e349fb75c539c}\label{k__spinlock_8h_a79887c626e823a36834e349fb75c539c}
|
||||||
|
\index{k\_spinlock.h@{k\_spinlock.h}!arch\_pause@{arch\_pause}}
|
||||||
|
\index{arch\_pause@{arch\_pause}!k\_spinlock.h@{k\_spinlock.h}}
|
||||||
|
\doxysubsubsection{\texorpdfstring{arch\_pause()}{arch\_pause()}}
|
||||||
|
{\footnotesize\ttfamily static void arch\+\_\+pause (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Placeholder for arch\+\_\+pause on non-\/x86 architectures.
|
||||||
|
|
||||||
|
For architectures other than i386/x86\+\_\+64, this function currently acts as a no-\/op. It can be defined with architecture-\/specific pause/yield instructions if available to improve spin-\/wait loop performance. \Hypertarget{k__spinlock_8h_a3b96827abeb83529b5d946e2654231ed}\label{k__spinlock_8h_a3b96827abeb83529b5d946e2654231ed}
|
||||||
|
\index{k\_spinlock.h@{k\_spinlock.h}!kernel\_yield@{kernel\_yield}}
|
||||||
|
\index{kernel\_yield@{kernel\_yield}!k\_spinlock.h@{k\_spinlock.h}}
|
||||||
|
\doxysubsubsection{\texorpdfstring{kernel\_yield()}{kernel\_yield()}}
|
||||||
|
{\footnotesize\ttfamily static void kernel\+\_\+yield (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Yields the CPU, typically to the scheduler. (Stub Implementation)
|
||||||
|
|
||||||
|
This function is called when a spinlock has been spinning for too long (exceeding MAX\+\_\+\+SPIN\+\_\+\+THRESHOLD), as a mechanism to prevent CPU monopolization and allow other threads/processes to run.
|
||||||
|
|
||||||
|
\begin{DoxyNote}{Note}
|
||||||
|
This is a stub implementation. A full implementation would typically involve interacting with the system scheduler to relinquish the CPU. For now, it at least performs an {\ttfamily \doxylink{k__spinlock_8h_a79887c626e823a36834e349fb75c539c}{arch\+\_\+pause()}} to reduce contention. A real implementation might call something like {\ttfamily sched\+\_\+yield()} or {\ttfamily yield()}.
|
||||||
|
\end{DoxyNote}
|
||||||
|
\Hypertarget{k__spinlock_8h_a614711109a66b779e92036c573e57002}\label{k__spinlock_8h_a614711109a66b779e92036c573e57002}
|
||||||
|
\index{k\_spinlock.h@{k\_spinlock.h}!simple\_spin\_init@{simple\_spin\_init}}
|
||||||
|
\index{simple\_spin\_init@{simple\_spin\_init}!k\_spinlock.h@{k\_spinlock.h}}
|
||||||
|
\doxysubsubsection{\texorpdfstring{simple\_spin\_init()}{simple\_spin\_init()}}
|
||||||
|
{\footnotesize\ttfamily static void simple\+\_\+spin\+\_\+init (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t}} \texorpdfstring{$\ast$}{*}}]{lock }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Initializes a spinlock to the unlocked state and resets statistics.
|
||||||
|
|
||||||
|
|
||||||
|
\begin{DoxyParams}{Parameters}
|
||||||
|
{\em lock} & Pointer to the \doxylink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t} to initialize.\\
|
||||||
|
\hline
|
||||||
|
\end{DoxyParams}
|
||||||
|
This function must be called before the spinlock is used for the first time. It sets the lock state to 0 (unlocked) and initializes statistics counters to zero. \Hypertarget{k__spinlock_8h_a8e8fd03b0cdf6f309bde43577c3dd548}\label{k__spinlock_8h_a8e8fd03b0cdf6f309bde43577c3dd548}
|
||||||
|
\index{k\_spinlock.h@{k\_spinlock.h}!simple\_spin\_lock@{simple\_spin\_lock}}
|
||||||
|
\index{simple\_spin\_lock@{simple\_spin\_lock}!k\_spinlock.h@{k\_spinlock.h}}
|
||||||
|
\doxysubsubsection{\texorpdfstring{simple\_spin\_lock()}{simple\_spin\_lock()}}
|
||||||
|
{\footnotesize\ttfamily static void simple\+\_\+spin\+\_\+lock (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t}} \texorpdfstring{$\ast$}{*}}]{lock }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Acquires a spinlock, busy-\/waiting if necessary.
|
||||||
|
|
||||||
|
|
||||||
|
\begin{DoxyParams}{Parameters}
|
||||||
|
{\em lock} & Pointer to the \doxylink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t} to acquire.\\
|
||||||
|
\hline
|
||||||
|
\end{DoxyParams}
|
||||||
|
This function attempts to acquire the lock. If the lock is already held, it will spin (busy-\/wait) until the lock becomes available. This function is non-\/recursive; a thread attempting to acquire a lock it already holds will deadlock. Includes a spin counter and calls {\ttfamily \doxylink{k__spinlock_8h_a3b96827abeb83529b5d946e2654231ed}{kernel\+\_\+yield()}} if spinning excessively. Also updates lock acquisition and contention statistics. \Hypertarget{k__spinlock_8h_ad62d430c4e62aaa0d945088f5e1adc32}\label{k__spinlock_8h_ad62d430c4e62aaa0d945088f5e1adc32}
|
||||||
|
\index{k\_spinlock.h@{k\_spinlock.h}!simple\_spin\_unlock@{simple\_spin\_unlock}}
|
||||||
|
\index{simple\_spin\_unlock@{simple\_spin\_unlock}!k\_spinlock.h@{k\_spinlock.h}}
|
||||||
|
\doxysubsubsection{\texorpdfstring{simple\_spin\_unlock()}{simple\_spin\_unlock()}}
|
||||||
|
{\footnotesize\ttfamily static void simple\+\_\+spin\+\_\+unlock (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t}} \texorpdfstring{$\ast$}{*}}]{lock }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Releases a previously acquired spinlock.
|
||||||
|
|
||||||
|
|
||||||
|
\begin{DoxyParams}{Parameters}
|
||||||
|
{\em lock} & Pointer to the \doxylink{structsimple__spinlock__t}{simple\+\_\+spinlock\+\_\+t} to release.\\
|
||||||
|
\hline
|
||||||
|
\end{DoxyParams}
|
||||||
|
This function releases the lock, allowing another thread to acquire it. It must only be called by the thread that currently holds the lock.
|
||||||
1
docs/doxygen_html/latex/k__spinlock_8h__incl.md5
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
3f783b23f1794284213ee9f30a77c979
|
||||||