/* * Copyright (c) 2018-2020 Atmosphère-NX * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef FUSEE_NX_BOOT_H #define FUSEE_NX_BOOT_H #include "utils.h" #define EMUMMC_ENABLED_KEY "enabled" #define EMUMMC_SECTOR_KEY "sector" #define EMUMMC_PATH_KEY "path" #define EMUMMC_NINTENDO_PATH_KEY "nintendo_path" #define EMUMMC_ID_KEY "id" typedef struct { bool enabled; uint32_t id; uint64_t sector; char path[0x80]; char nintendo_path[0x80]; } emummc_config_t; #define MAILBOX_NX_BOOTLOADER_BASE 0x40000000 #define MAKE_MAILBOX_NX_BOOTLOADER_REG(n) MAKE_REG32(MAILBOX_NX_BOOTLOADER_BASE + n) #define MAILBOX_NX_BOOTLOADER_BOOT_REASON_BASE MAKE_MAILBOX_NX_BOOTLOADER_REG(0x10) #define MAILBOX_NX_BOOTLOADER_SETUP_STATE MAKE_MAILBOX_NX_BOOTLOADER_REG(0xF8) #define MAILBOX_NX_BOOTLOADER_IS_SECMON_AWAKE MAKE_MAILBOX_NX_BOOTLOADER_REG(0xFC) #define NX_BOOTLOADER_STATE_INIT 0 #define NX_BOOTLOADER_STATE_MOVED_BOOTCONFIG 1 #define NX_BOOTLOADER_STATE_LOADED_PACKAGE2 2 #define NX_BOOTLOADER_STATE_FINISHED 3 #define NX_BOOTLOADER_STATE_DRAM_INITIALIZED_4X 2 #define NX_BOOTLOADER_STATE_LOADED_PACKAGE2_4X 3 #define NX_BOOTLOADER_STATE_FINISHED_4X 4 typedef struct { uint32_t bootloader_version; uint32_t bootloader_start_block; uint32_t bootloader_start_page; uint32_t bootloader_attribute; uint32_t boot_reason_value; uint32_t boot_reason_state; } boot_reason_t; uint32_t nxboot_main(void); void nxboot_finish(uint32_t boot_memaddr); #endif