2#ifndef POSIX_DEVFS_BLOCK_H
3#define POSIX_DEVFS_BLOCK_H
4#include "pedigree/kernel/processor/types.h"
8constexpr uint32_t MountedMajor = 240;
9constexpr uint32_t PhysicalMajor = 241;
10constexpr uint32_t MaximumMinor = 0xfffff;
11constexpr uint64_t encode(uint32_t major, uint32_t minor) {
12 return (minor & 0xffULL) | (
static_cast<uint64_t
>(major & 0xfff) << 8) |
13 (
static_cast<uint64_t
>(minor & ~0xffU) << 12);
15constexpr uint32_t major(uint64_t device) {
16 return (device >> 8) & 0xfff;
18constexpr uint32_t minor(uint64_t device) {
19 return (device & 0xff) | ((device >> 12) & 0xffffff00);
21constexpr bool valid(uint64_t device, uint32_t expectedMajor) {
22 return major(device) == expectedMajor && minor(device) && minor(device) <= MaximumMinor &&
23 encode(expectedMajor, minor(device)) == device;
26File* posix_make_block_directory(
DevFs& filesystem,
File* parent);
27File* posix_make_disk_directory(
DevFs& filesystem,
File* parent);