mirror of
https://github.com/drakmor/ShadowMountPlus.git
synced 2026-10-21 06:10:01 -05:00
84 lines
3.5 KiB
C
84 lines
3.5 KiB
C
#ifndef SM_MOUNT_DEFS_H
|
|
#define SM_MOUNT_DEFS_H
|
|
|
|
#define IMAGE_MOUNT_READ_ONLY 1
|
|
|
|
// 1 = use legacy /dev/mdctl backend for .exfat images, 0 = use LVD for all.
|
|
#define EXFAT_ATTACH_USE_MDCTL 0
|
|
// 1 = allow mounting .ffpkg images via /dev/mdctl, 0 = keep UFS on LVD.
|
|
#define UFS_ATTACH_USE_MDCTL 0
|
|
|
|
// --- LVD Definitions ---
|
|
// Kernel exposes base attach (V0), extended attach (V1/Attach2) and detach.
|
|
// This code only builds V0 layer descriptors, so it uses the base attach path.
|
|
// Wrapper-side raw attach presets:
|
|
// - 0x8/0x9 -> single-image/save-data family (normalized 0x14/0x1C)
|
|
// - 0xC/0xD -> download-data/LWFS family (normalized 0x16/0x1E)
|
|
// raw bit3 (0x8) sets the DONT_MAP_BM-style mode, raw bit2 (0x4) switches to
|
|
// the DD/LWFS family, and raw bit0 (0x1) selects the alternate preset inside a
|
|
// family. Firmware pairs bit0 with read-only mount variants, but this is not a
|
|
// standalone LVD readonly bit by itself.
|
|
// image_type values accepted by validator: 0..0xC (13 values total).
|
|
// layer source_type observed: 1=file, 2=device/special source (/dev/sbram0, char/block).
|
|
// layer descriptor flag bit0 is "no bitmap file specified".
|
|
#define LVD_CTRL_PATH "/dev/lvdctl"
|
|
#define MD_CTRL_PATH "/dev/mdctl"
|
|
#define SCE_LVD_IOC_ATTACH_V0 0xC0286D00
|
|
#define SCE_LVD_IOC_ATTACH_V1 0xC0286D09
|
|
#define SCE_LVD_IOC_DETACH 0xC0286D01
|
|
#define LVD_ATTACH_IO_VERSION_V0 0u
|
|
#define LVD_ATTACH_IO_VERSION_V1 1u
|
|
#define LVD_ATTACH_RAW_FLAGS_SINGLE_RO 0x9
|
|
#define LVD_ATTACH_RAW_FLAGS_SINGLE_RW 0x8
|
|
#define LVD_ATTACH_RAW_FLAGS_DD_RO 0xD
|
|
#define LVD_ATTACH_RAW_FLAGS_DD_RW 0xC
|
|
#
|
|
#define LVD_SECTOR_SIZE_EXFAT 512u
|
|
#define LVD_SECTOR_SIZE_UFS 4096u
|
|
#define LVD_SECTOR_SIZE_PFS 4096u
|
|
#define LVD_SECONDARY_UNIT_SINGLE_IMAGE 0x10000u
|
|
#define MD_SECTOR_SIZE_EXFAT 512u
|
|
#define MD_SECTOR_SIZE_UFS 512u
|
|
// Raw option bits are normalized by sceFsLvdAttachCommon before validation:
|
|
// raw:0x1->norm:0x08, raw:0x2->norm:0x80, raw:0x4->norm:0x02, raw:0x8->norm:0x10.
|
|
// The normalized masks are then checked against validator constraints (0x82/0x92).
|
|
#define LVD_ATTACH_IMAGE_TYPE_SINGLE 0
|
|
#define LVD_ATTACH_IMAGE_TYPE_UFS_DOWNLOAD_DATA 7
|
|
#define LVD_ATTACH_IMAGE_TYPE_PFS_SAVE_DATA 5
|
|
#define PFS_NESTED_OUTER_IMG_TYPE 0x02u
|
|
#define PFS_NESTED_INNER_IMG_TYPE 0x82u
|
|
#define LVD_ATTACH_LAYER_COUNT 1
|
|
#define LVD_ATTACH_LAYER_ARRAY_SIZE 3
|
|
#define LVD_ENTRY_TYPE_FILE 1
|
|
#define LVD_ENTRY_TYPE_SPECIAL 2
|
|
#define LVD_ENTRY_FLAG_NO_BITMAP 0x1
|
|
#define LVD_NODE_WAIT_US 100000
|
|
#define LVD_NODE_WAIT_RETRIES 100
|
|
#define UFS_NMOUNT_FLAG_RW 0x10000000u
|
|
#define UFS_NMOUNT_FLAG_RO 0x10000001u
|
|
|
|
// --- devpfs/pfs option defaults ---
|
|
// PFS nmount key/value variants observed in refs:
|
|
// - fstype: "pfs", "transaction_pfs", "ppr_pfs"
|
|
// - mkeymode: "SD"
|
|
// - budgetid: "game"/"system" in init paths
|
|
// - sigverify/playgo/disc: "0" or "1"
|
|
// - optional keys in specific flows: ekpfs/eekpfs, eekc, pubkey_ver, key_ver,
|
|
// finalized, ppkg_opt, sblock_offset, maxpkgszingib
|
|
#define DEVPFS_BUDGET_GAME "game"
|
|
#define DEVPFS_BUDGET_SYSTEM "system"
|
|
#define DEVPFS_MKEYMODE_SD "SD"
|
|
#define DEVPFS_MKEYMODE_GD "GD"
|
|
#define DEVPFS_MKEYMODE_AC "AC"
|
|
#define PFS_MOUNT_BUDGET_ID DEVPFS_BUDGET_GAME
|
|
#define PFS_MOUNT_MKEYMODE DEVPFS_MKEYMODE_AC
|
|
#define PFS_MOUNT_SIGVERIFY 0
|
|
#define PFS_MOUNT_PLAYGO 0
|
|
#define PFS_MOUNT_DISC 0
|
|
#define PFS_GDDR5_CACHE_IOCTL 0x80209168
|
|
// 4x64-bit PFS key encoded as 64 hex chars.
|
|
#define PFS_ZERO_EKPFS_KEY_HEX \
|
|
"0000000000000000000000000000000000000000000000000000000000000000"
|
|
|
|
#endif
|