include: one folder per subsystem, and includes that name it

Sixty-five headers sat side by side in include/, so `#include "irq.h"`
said nothing about where irq.h was or what it belonged to, and errno.h,
stat.h and fcntl.h at the top shadowed the system's for any host tool
built with -I./include. They are in folders now -- arch/ core/ fs/
dev/ gfx/ net/ uapi/ (and ldls/ for the Linux driver layer) -- and
every include names the folder, as Linux's do: "core/proc.h".

Done mechanically and checked the hard way: the kernel built from this
tree disassembles identically to the one built from the tree before
it. The full image boots, and userland is the same set of programs.
Paths in docs and comments follow; docs/guides/layout.md has a table
of what is where, and tools/fix-includes.py rewrites old-style
includes from the folders in the tree, for code written before this.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S1giNvrHTrPMPw7V6x1kQ4
This commit is contained in:
Nexoniarz 2026-10-23 15:05:12 +02:00
commit a1c965da1e
267 changed files with 1560 additions and 1440 deletions

View file

@ -1,63 +0,0 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
// What the firmware and the buses said about this machine, kept so /sys can
// say it again. kernel/fs/sysfs.c is the reader; each producer is named
// beside its part.
//
// Read-only views, copied out under whatever lock the producer has, so a
// caller never holds a pointer into a table that may change under it.
// --- the memory map, as the loader handed it over (kernel/arch/x86_64/e820.c)
struct e820_rec {
uint64 base, len;
uint32 type; // E820: 1 RAM, 2 reserved, 3 ACPI, 4 NVS, 5 bad
};
int e820_nth(int i, struct e820_rec *out); // 0, or -1 past the end
// The RAM the page allocator was given, in bytes: MemTotal and sysinfo's
// totalram. Not PHYSTOP, which is an address and counts the PCI hole.
uint64 ram_total_bytes(void);
// --- ACPI tables (kernel/arch/x86_64/acpi.c)
//
// Every table the RSDT or XSDT lists, then the DSDT and FACS, which only the
// FADT points at. `sig` gets four characters, no terminator. 0 for a table,
// 1 for an empty slot (keep counting), -1 past the end.
int acpi_table_nth(int i, uint64 *pa, uint32 *len, char sig[4]);
// --- SMBIOS (kernel/dev/dmi.c)
void dmi_init(void);
// The entry point structure and the table it describes, both physical.
int dmi_entry(uint64 *pa, uint32 *len);
int dmi_table(uint64 *pa, uint32 *len);
// Bytes of physical memory, through the direct map or ioremap. 0 on failure.
void *phys_view(uint64 pa, uint64 len);
// The strings Linux publishes in /sys/class/dmi/id, under its names. Serial
// numbers and the UUID are left out on purpose: nothing here needs them, and a
// hardware report is meant to be handed to somebody else.
enum {
DMI_BIOS_VENDOR, DMI_BIOS_VERSION, DMI_BIOS_DATE, DMI_BIOS_RELEASE,
DMI_SYS_VENDOR, DMI_PRODUCT_NAME, DMI_PRODUCT_VERSION, DMI_PRODUCT_SKU,
DMI_PRODUCT_FAMILY,
DMI_BOARD_VENDOR, DMI_BOARD_NAME, DMI_BOARD_VERSION,
DMI_CHASSIS_VENDOR, DMI_CHASSIS_TYPE, DMI_CHASSIS_VERSION,
DMI_NFIELDS
};
extern const char *const dmi_field_names[DMI_NFIELDS];
// Length written (no terminator counted), or -1 if the machine does not say.
int dmi_field(int f, char *out, int cap);
// 1 if the UEFI loader booted this kernel.
int boot_is_efi(void);
// --- USB devices (kernel/drivers/usb/core/usb.c), one per addressed device
struct usb_info {
int bus, devnum, speed; // speed: USB_SPEED_*
uint16 vid, pid, bcd;
uint8 cls, subcls, proto; // the device descriptor's
uint8 nconf;
char path[24]; // Linux's name: "1-3", "2-1.4"
char driver[16]; // the first interface's, or empty
};
int usb_info_nth(int i, struct usb_info *out);