mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-08 11:31:44 +00:00
bdk: add global header
This commit is contained in:
parent
01b6e645b3
commit
a5cd962f99
20 changed files with 630 additions and 246 deletions
74
bdk/bdk.h
Normal file
74
bdk/bdk.h
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 CTCaer
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BDK_H
|
||||||
|
#define BDK_H
|
||||||
|
|
||||||
|
#include <memory_map.h>
|
||||||
|
|
||||||
|
#include <display/di.h>
|
||||||
|
#include <input/als.h>
|
||||||
|
#include <input/joycon.h>
|
||||||
|
#include <input/touch.h>
|
||||||
|
#include <mem/emc.h>
|
||||||
|
#include <mem/heap.h>
|
||||||
|
#include <mem/mc.h>
|
||||||
|
#include <mem/minerva.h>
|
||||||
|
#include <mem/sdram.h>
|
||||||
|
#include <mem/smmu.h>
|
||||||
|
#include <module.h>
|
||||||
|
#include <power/bm92t36.h>
|
||||||
|
#include <power/bq24193.h>
|
||||||
|
#include <power/max17050.h>
|
||||||
|
#include <power/max77620.h>
|
||||||
|
#include <power/max7762x.h>
|
||||||
|
#include <power/max77812.h>
|
||||||
|
#include <power/regulator_5v.h>
|
||||||
|
#include <rtc/max77620-rtc.h>
|
||||||
|
#include <sec/se.h>
|
||||||
|
#include <sec/tsec.h>
|
||||||
|
#include <soc/bpmp.h>
|
||||||
|
#include <soc/ccplex.h>
|
||||||
|
#include <soc/clock.h>
|
||||||
|
#include <soc/fuse.h>
|
||||||
|
#include <soc/gpio.h>
|
||||||
|
#include <soc/hw_init.h>
|
||||||
|
#include <soc/i2c.h>
|
||||||
|
#include <soc/kfuse.h>
|
||||||
|
#include <soc/pinmux.h>
|
||||||
|
#include <soc/pmc.h>
|
||||||
|
#include <soc/t210.h>
|
||||||
|
#include <soc/uart.h>
|
||||||
|
#include <storage/mbr_gpt.h>
|
||||||
|
#include <storage/mmc.h>
|
||||||
|
#include <storage/ramdisk.h>
|
||||||
|
#include <storage/sd.h>
|
||||||
|
#include <storage/sdmmc.h>
|
||||||
|
#include <thermal/fan.h>
|
||||||
|
#include <thermal/tmp451.h>
|
||||||
|
#include <usb/usbd.h>
|
||||||
|
#include <utils/aarch64_util.h>
|
||||||
|
#include <utils/btn.h>
|
||||||
|
#include <utils/dirlist.h>
|
||||||
|
#include <utils/ini.h>
|
||||||
|
#include <utils/list.h>
|
||||||
|
#include <utils/sprintf.h>
|
||||||
|
#include <utils/types.h>
|
||||||
|
#include <utils/util.h>
|
||||||
|
|
||||||
|
#include <gfx_utils.h>
|
||||||
|
|
||||||
|
#endif
|
|
@ -17,8 +17,12 @@
|
||||||
#ifndef _FATFS_CFG_H_
|
#ifndef _FATFS_CFG_H_
|
||||||
#define _FATFS_CFG_H_
|
#define _FATFS_CFG_H_
|
||||||
|
|
||||||
|
// define FFCFG_INC in a project to use a specific FatFS configuration.
|
||||||
|
// Example: FFCFG_INC := '"../$(PROJECT_DIR)/libs/fatfs/ffconf.h"'
|
||||||
#ifdef FFCFG_INC
|
#ifdef FFCFG_INC
|
||||||
#include FFCFG_INC
|
#include FFCFG_INC
|
||||||
|
#else
|
||||||
|
#include "fatfs_conf.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
305
bdk/fatfs_conf.h
Normal file
305
bdk/fatfs_conf.h
Normal file
|
@ -0,0 +1,305 @@
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ FatFs Functional Configurations
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define FFCONF_DEF 86604 /* Revision ID */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ Function Configurations
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define FF_FS_READONLY 0
|
||||||
|
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
|
||||||
|
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
|
||||||
|
/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
|
||||||
|
/ and optional writing functions as well. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_MINIMIZE 0
|
||||||
|
/* This option defines minimization level to remove some basic API functions.
|
||||||
|
/
|
||||||
|
/ 0: Basic functions are fully enabled.
|
||||||
|
/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
|
||||||
|
/ are removed.
|
||||||
|
/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
|
||||||
|
/ 3: f_lseek() function is removed in addition to 2. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_STRFUNC 2
|
||||||
|
/* This option switches string functions, f_gets(), f_putc(), f_puts() and f_printf().
|
||||||
|
/
|
||||||
|
/ 0: Disable string functions.
|
||||||
|
/ 1: Enable without LF-CRLF conversion.
|
||||||
|
/ 2: Enable with LF-CRLF conversion. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_FIND 1
|
||||||
|
/* This option switches filtered directory read functions, f_findfirst() and
|
||||||
|
/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_MKFS 0
|
||||||
|
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
#if FF_USE_MKFS
|
||||||
|
#define FF_MKFS_LABEL "SWITCH SD "
|
||||||
|
#endif
|
||||||
|
/* This sets FAT/FAT32 label. Exactly 11 characters, all caps. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_FASTSEEK 0
|
||||||
|
/* This option switches fast seek function. (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
#define FF_FASTFS 0
|
||||||
|
#if FF_FASTFS
|
||||||
|
#undef FF_USE_FASTSEEK
|
||||||
|
#define FF_USE_FASTSEEK 1
|
||||||
|
#endif
|
||||||
|
/* This option switches fast access to chained clusters. (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_SIMPLE_GPT 1
|
||||||
|
/* This option switches support for the first GPT partition. (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_EXPAND 0
|
||||||
|
/* This option switches f_expand function. (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_CHMOD 1
|
||||||
|
/* This option switches attribute manipulation functions, f_chmod() and f_utime().
|
||||||
|
/ (0:Disable or 1:Enable) Also FF_FS_READONLY needs to be 0 to enable this option. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_LABEL 0
|
||||||
|
/* This option switches volume label functions, f_getlabel() and f_setlabel().
|
||||||
|
/ (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_FORWARD 0
|
||||||
|
/* This option switches f_forward() function. (0:Disable or 1:Enable) */
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ Locale and Namespace Configurations
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define FF_CODE_PAGE 850
|
||||||
|
/* This option specifies the OEM code page to be used on the target system.
|
||||||
|
/ Incorrect code page setting can cause a file open failure.
|
||||||
|
/
|
||||||
|
/ 437 - U.S.
|
||||||
|
/ 720 - Arabic
|
||||||
|
/ 737 - Greek
|
||||||
|
/ 771 - KBL
|
||||||
|
/ 775 - Baltic
|
||||||
|
/ 850 - Latin 1
|
||||||
|
/ 852 - Latin 2
|
||||||
|
/ 855 - Cyrillic
|
||||||
|
/ 857 - Turkish
|
||||||
|
/ 860 - Portuguese
|
||||||
|
/ 861 - Icelandic
|
||||||
|
/ 862 - Hebrew
|
||||||
|
/ 863 - Canadian French
|
||||||
|
/ 864 - Arabic
|
||||||
|
/ 865 - Nordic
|
||||||
|
/ 866 - Russian
|
||||||
|
/ 869 - Greek 2
|
||||||
|
/ 932 - Japanese (DBCS)
|
||||||
|
/ 936 - Simplified Chinese (DBCS)
|
||||||
|
/ 949 - Korean (DBCS)
|
||||||
|
/ 950 - Traditional Chinese (DBCS)
|
||||||
|
/ 0 - Include all code pages above and configured by f_setcp()
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_LFN 3
|
||||||
|
#define FF_MAX_LFN 255
|
||||||
|
/* The FF_USE_LFN switches the support for LFN (long file name).
|
||||||
|
/
|
||||||
|
/ 0: Disable LFN. FF_MAX_LFN has no effect.
|
||||||
|
/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
|
||||||
|
/ 2: Enable LFN with dynamic working buffer on the STACK.
|
||||||
|
/ 3: Enable LFN with dynamic working buffer on the HEAP.
|
||||||
|
/
|
||||||
|
/ To enable the LFN, ffunicode.c needs to be added to the project. The LFN function
|
||||||
|
/ requiers certain internal working buffer occupies (FF_MAX_LFN + 1) * 2 bytes and
|
||||||
|
/ additional (FF_MAX_LFN + 44) / 15 * 32 bytes when exFAT is enabled.
|
||||||
|
/ The FF_MAX_LFN defines size of the working buffer in UTF-16 code unit and it can
|
||||||
|
/ be in range of 12 to 255. It is recommended to be set 255 to fully support LFN
|
||||||
|
/ specification.
|
||||||
|
/ When use stack for the working buffer, take care on stack overflow. When use heap
|
||||||
|
/ memory for the working buffer, memory management functions, ff_memalloc() and
|
||||||
|
/ ff_memfree() in ffsystem.c, need to be added to the project. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_LFN_UNICODE 0
|
||||||
|
/* This option switches the character encoding on the API when LFN is enabled.
|
||||||
|
/
|
||||||
|
/ 0: ANSI/OEM in current CP (TCHAR = char)
|
||||||
|
/ 1: Unicode in UTF-16 (TCHAR = WCHAR)
|
||||||
|
/ 2: Unicode in UTF-8 (TCHAR = char)
|
||||||
|
/ 3: Unicode in UTF-32 (TCHAR = DWORD)
|
||||||
|
/
|
||||||
|
/ Also behavior of string I/O functions will be affected by this option.
|
||||||
|
/ When LFN is not enabled, this option has no effect. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_LFN_BUF 255
|
||||||
|
#define FF_SFN_BUF 12
|
||||||
|
/* This set of options defines size of file name members in the FILINFO structure
|
||||||
|
/ which is used to read out directory items. These values should be suffcient for
|
||||||
|
/ the file names to read. The maximum possible length of the read file name depends
|
||||||
|
/ on character encoding. When LFN is not enabled, these options have no effect. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_STRF_ENCODE 0
|
||||||
|
/* When FF_LFN_UNICODE >= 1 with LFN enabled, string I/O functions, f_gets(),
|
||||||
|
/ f_putc(), f_puts and f_printf() convert the character encoding in it.
|
||||||
|
/ This option selects assumption of character encoding ON THE FILE to be
|
||||||
|
/ read/written via those functions.
|
||||||
|
/
|
||||||
|
/ 0: ANSI/OEM in current CP
|
||||||
|
/ 1: Unicode in UTF-16LE
|
||||||
|
/ 2: Unicode in UTF-16BE
|
||||||
|
/ 3: Unicode in UTF-8
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_RPATH 0
|
||||||
|
/* This option configures support for relative path.
|
||||||
|
/
|
||||||
|
/ 0: Disable relative path and remove related functions.
|
||||||
|
/ 1: Enable relative path. f_chdir() and f_chdrive() are available.
|
||||||
|
/ 2: f_getcwd() function is available in addition to 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ Drive/Volume Configurations
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define FF_VOLUMES 1
|
||||||
|
/* Number of volumes (logical drives) to be used. (1-10) */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_STR_VOLUME_ID 0
|
||||||
|
#define FF_VOLUME_STRS "sd"
|
||||||
|
/* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings.
|
||||||
|
/ When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive
|
||||||
|
/ number in the path name. FF_VOLUME_STRS defines the volume ID strings for each
|
||||||
|
/ logical drives. Number of items must not be less than FF_VOLUMES. Valid
|
||||||
|
/ characters for the volume ID strings are A-Z, a-z and 0-9, however, they are
|
||||||
|
/ compared in case-insensitive. If FF_STR_VOLUME_ID >= 1 and FF_VOLUME_STRS is
|
||||||
|
/ not defined, a user defined volume string table needs to be defined as:
|
||||||
|
/
|
||||||
|
/ const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",...
|
||||||
|
/ Order is important. Any change to order, must also be reflected to diskio drive enum.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_MULTI_PARTITION 0
|
||||||
|
/* This option switches support for multiple volumes on the physical drive.
|
||||||
|
/ By default (0), each logical drive number is bound to the same physical drive
|
||||||
|
/ number and only an FAT volume found on the physical drive will be mounted.
|
||||||
|
/ When this function is enabled (1), each logical drive number can be bound to
|
||||||
|
/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
|
||||||
|
/ funciton will be available. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_MIN_SS 512
|
||||||
|
#define FF_MAX_SS 512
|
||||||
|
/* This set of options configures the range of sector size to be supported. (512,
|
||||||
|
/ 1024, 2048 or 4096) Always set both 512 for most systems, generic memory card and
|
||||||
|
/ harddisk. But a larger value may be required for on-board flash memory and some
|
||||||
|
/ type of optical media. When FF_MAX_SS is larger than FF_MIN_SS, FatFs is configured
|
||||||
|
/ for variable sector size mode and disk_ioctl() function needs to implement
|
||||||
|
/ GET_SECTOR_SIZE command. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_USE_TRIM 0
|
||||||
|
/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable)
|
||||||
|
/ To enable Trim function, also CTRL_TRIM command should be implemented to the
|
||||||
|
/ disk_ioctl() function. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_NOFSINFO 1
|
||||||
|
/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
|
||||||
|
/ option, and f_getfree() function at first time after volume mount will force
|
||||||
|
/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
|
||||||
|
/
|
||||||
|
/ bit0=0: Use free cluster count in the FSINFO if available.
|
||||||
|
/ bit0=1: Do not trust free cluster count in the FSINFO.
|
||||||
|
/ bit1=0: Use last allocated cluster number in the FSINFO if available.
|
||||||
|
/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------/
|
||||||
|
/ System Configurations
|
||||||
|
/---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define FF_FS_TINY 0
|
||||||
|
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
|
||||||
|
/ At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes.
|
||||||
|
/ Instead of private sector buffer eliminated from the file object, common sector
|
||||||
|
/ buffer in the filesystem object (FATFS) is used for the file data transfer. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_EXFAT 1
|
||||||
|
/* This option switches support for exFAT filesystem. (0:Disable or 1:Enable)
|
||||||
|
/ To enable exFAT, also LFN needs to be enabled. (FF_USE_LFN >= 1)
|
||||||
|
/ Note that enabling exFAT discards ANSI C (C89) compatibility. */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_NORTC 1
|
||||||
|
#define FF_NORTC_MON 1
|
||||||
|
#define FF_NORTC_MDAY 1
|
||||||
|
#define FF_NORTC_YEAR 2022
|
||||||
|
/* The option FF_FS_NORTC switches timestamp function. If the system does not have
|
||||||
|
/ any RTC function or valid timestamp is not needed, set FF_FS_NORTC = 1 to disable
|
||||||
|
/ the timestamp function. Every object modified by FatFs will have a fixed timestamp
|
||||||
|
/ defined by FF_NORTC_MON, FF_NORTC_MDAY and FF_NORTC_YEAR in local time.
|
||||||
|
/ To enable timestamp function (FF_FS_NORTC = 0), get_fattime() function need to be
|
||||||
|
/ added to the project to read current time form real-time clock. FF_NORTC_MON,
|
||||||
|
/ FF_NORTC_MDAY and FF_NORTC_YEAR have no effect.
|
||||||
|
/ These options have no effect at read-only configuration (FF_FS_READONLY = 1). */
|
||||||
|
|
||||||
|
|
||||||
|
#define FF_FS_LOCK 0
|
||||||
|
/* The option FF_FS_LOCK switches file lock function to control duplicated file open
|
||||||
|
/ and illegal operation to open objects. This option must be 0 when FF_FS_READONLY
|
||||||
|
/ is 1.
|
||||||
|
/
|
||||||
|
/ 0: Disable file lock function. To avoid volume corruption, application program
|
||||||
|
/ should avoid illegal open, remove and rename to the open objects.
|
||||||
|
/ >0: Enable file lock function. The value defines how many files/sub-directories
|
||||||
|
/ can be opened simultaneously under file lock control. Note that the file
|
||||||
|
/ lock control is independent of re-entrancy. */
|
||||||
|
|
||||||
|
|
||||||
|
/* #include <somertos.h> // O/S definitions */
|
||||||
|
#define FF_FS_REENTRANT 0
|
||||||
|
#define FF_FS_TIMEOUT 1000
|
||||||
|
#define FF_SYNC_t HANDLE
|
||||||
|
/* The option FF_FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
|
||||||
|
/ module itself. Note that regardless of this option, file access to different
|
||||||
|
/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
|
||||||
|
/ and f_fdisk() function, are always not re-entrant. Only file/directory access
|
||||||
|
/ to the same volume is under control of this function.
|
||||||
|
/
|
||||||
|
/ 0: Disable re-entrancy. FF_FS_TIMEOUT and FF_SYNC_t have no effect.
|
||||||
|
/ 1: Enable re-entrancy. Also user provided synchronization handlers,
|
||||||
|
/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
|
||||||
|
/ function, must be added to the project. Samples are available in
|
||||||
|
/ option/syscall.c.
|
||||||
|
/
|
||||||
|
/ The FF_FS_TIMEOUT defines timeout period in unit of time tick.
|
||||||
|
/ The FF_SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
|
||||||
|
/ SemaphoreHandle_t and etc. A header file for O/S definitions needs to be
|
||||||
|
/ included somewhere in the scope of ff.h. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--- End of configuration options ---*/
|
|
@ -29,33 +29,34 @@
|
||||||
|
|
||||||
#ifndef ELF_H
|
#ifndef ELF_H
|
||||||
#define ELF_H
|
#define ELF_H
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
typedef uint8_t Elf_Byte;
|
#include <utils/types.h>
|
||||||
|
|
||||||
typedef uint32_t Elf32_Addr; /* Unsigned program address */
|
typedef u8 Elf_Byte;
|
||||||
typedef uint32_t Elf32_Off; /* Unsigned file offset */
|
|
||||||
typedef int32_t Elf32_Sword; /* Signed large integer */
|
|
||||||
typedef uint32_t Elf32_Word; /* Unsigned large integer */
|
|
||||||
typedef uint16_t Elf32_Half; /* Unsigned medium integer */
|
|
||||||
|
|
||||||
typedef uint64_t Elf64_Addr;
|
typedef u32 Elf32_Addr; /* Unsigned program address */
|
||||||
typedef uint64_t Elf64_Off;
|
typedef u32 Elf32_Off; /* Unsigned file offset */
|
||||||
typedef int32_t Elf64_Shalf;
|
typedef s32 Elf32_Sword; /* Signed large integer */
|
||||||
|
typedef u32 Elf32_Word; /* Unsigned large integer */
|
||||||
|
typedef u16 Elf32_Half; /* Unsigned medium integer */
|
||||||
|
|
||||||
|
typedef u64 Elf64_Addr;
|
||||||
|
typedef u64 Elf64_Off;
|
||||||
|
typedef s32 Elf64_Shalf;
|
||||||
|
|
||||||
#ifdef __alpha__
|
#ifdef __alpha__
|
||||||
typedef int64_t Elf64_Sword;
|
typedef s64 Elf64_Sword;
|
||||||
typedef uint64_t Elf64_Word;
|
typedef u64 Elf64_Word;
|
||||||
#else
|
#else
|
||||||
typedef int32_t Elf64_Sword;
|
typedef s32 Elf64_Sword;
|
||||||
typedef uint32_t Elf64_Word;
|
typedef u32 Elf64_Word;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef int64_t Elf64_Sxword;
|
typedef s64 Elf64_Sxword;
|
||||||
typedef uint64_t Elf64_Xword;
|
typedef u64 Elf64_Xword;
|
||||||
|
|
||||||
typedef uint32_t Elf64_Half;
|
typedef u32 Elf64_Half;
|
||||||
typedef uint16_t Elf64_Quarter;
|
typedef u16 Elf64_Quarter;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* e_ident[] identification indexes
|
* e_ident[] identification indexes
|
||||||
|
@ -376,7 +377,7 @@ typedef struct
|
||||||
|
|
||||||
#define ELF64_R_SYM(info) ((info) >> 32)
|
#define ELF64_R_SYM(info) ((info) >> 32)
|
||||||
#define ELF64_R_TYPE(info) ((info)&0xFFFFFFFF)
|
#define ELF64_R_TYPE(info) ((info)&0xFFFFFFFF)
|
||||||
#define ELF64_R_INFO(s, t) (((s) << 32) + (__uint32_t)(t))
|
#define ELF64_R_INFO(s, t) (((s) << 32) + (u32)(t))
|
||||||
|
|
||||||
#if defined(__mips64__) && defined(__MIPSEL__)
|
#if defined(__mips64__) && defined(__MIPSEL__)
|
||||||
/*
|
/*
|
||||||
|
@ -389,7 +390,7 @@ typedef struct
|
||||||
#undef ELF64_R_INFO
|
#undef ELF64_R_INFO
|
||||||
#define ELF64_R_TYPE(info) (swap32((info) >> 32))
|
#define ELF64_R_TYPE(info) (swap32((info) >> 32))
|
||||||
#define ELF64_R_SYM(info) ((info)&0xFFFFFFFF)
|
#define ELF64_R_SYM(info) ((info)&0xFFFFFFFF)
|
||||||
#define ELF64_R_INFO(s, t) (((__uint64_t)swap32(t) << 32) + (__uint32_t)(s))
|
#define ELF64_R_INFO(s, t) (((u64)swap32(t) << 32) + (u32)(s))
|
||||||
#endif /* __mips64__ && __MIPSEL__ */
|
#endif /* __mips64__ && __MIPSEL__ */
|
||||||
|
|
||||||
/* Program Header */
|
/* Program Header */
|
||||||
|
|
|
@ -25,7 +25,7 @@ el_status el_pread(el_ctx *ctx, void *def, size_t nb, size_t offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define EL_PHOFF(ctx, num) (((ctx)->ehdr.e_phoff + (num) *(ctx)->ehdr.e_phentsize))
|
#define EL_PHOFF(ctx, num) (((ctx)->ehdr.e_phoff + (num) *(ctx)->ehdr.e_phentsize))
|
||||||
el_status el_findphdr(el_ctx *ctx, Elf_Phdr *phdr, uint32_t type, unsigned *i)
|
el_status el_findphdr(el_ctx *ctx, Elf_Phdr *phdr, u32 type, unsigned *i)
|
||||||
{
|
{
|
||||||
el_status rv = EL_OK;
|
el_status rv = EL_OK;
|
||||||
for (; *i < ctx->ehdr.e_phnum; (*i)++)
|
for (; *i < ctx->ehdr.e_phnum; (*i)++)
|
||||||
|
@ -44,7 +44,7 @@ el_status el_findphdr(el_ctx *ctx, Elf_Phdr *phdr, uint32_t type, unsigned *i)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define EL_SHOFF(ctx, num) (((ctx)->ehdr.e_shoff + (num) *(ctx)->ehdr.e_shentsize))
|
#define EL_SHOFF(ctx, num) (((ctx)->ehdr.e_shoff + (num) *(ctx)->ehdr.e_shentsize))
|
||||||
el_status el_findshdr(el_ctx *ctx, Elf_Shdr *shdr, uint32_t type, unsigned *i)
|
el_status el_findshdr(el_ctx *ctx, Elf_Shdr *shdr, u32 type, unsigned *i)
|
||||||
{
|
{
|
||||||
el_status rv = EL_OK;
|
el_status rv = EL_OK;
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ el_status el_load(el_ctx *ctx, el_alloc_cb alloc)
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
el_status el_finddyn(el_ctx *ctx, Elf_Dyn *dyn, uint32_t tag)
|
el_status el_finddyn(el_ctx *ctx, Elf_Dyn *dyn, u32 tag)
|
||||||
{
|
{
|
||||||
el_status rv = EL_OK;
|
el_status rv = EL_OK;
|
||||||
size_t ndyn = ctx->dynsize / sizeof(Elf_Dyn);
|
size_t ndyn = ctx->dynsize / sizeof(Elf_Dyn);
|
||||||
|
@ -231,7 +231,7 @@ el_status el_finddyn(el_ctx *ctx, Elf_Dyn *dyn, uint32_t tag)
|
||||||
return EL_OK;
|
return EL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
el_status el_findrelocs(el_ctx *ctx, el_relocinfo *ri, uint32_t type)
|
el_status el_findrelocs(el_ctx *ctx, el_relocinfo *ri, u32 type)
|
||||||
{
|
{
|
||||||
el_status rv = EL_OK;
|
el_status rv = EL_OK;
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,6 @@
|
||||||
#include "elfarch.h"
|
#include "elfarch.h"
|
||||||
#include "elf.h"
|
#include "elf.h"
|
||||||
|
|
||||||
#include <utils/types.h>
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#include <gfx_utils.h>
|
#include <gfx_utils.h>
|
||||||
#define EL_DEBUG(format, ...) \
|
#define EL_DEBUG(format, ...) \
|
||||||
|
@ -100,7 +98,7 @@ el_status el_load(el_ctx *ctx, el_alloc_cb alloccb);
|
||||||
* If the end of the phdrs table was reached, *i is set to -1 and the contents
|
* If the end of the phdrs table was reached, *i is set to -1 and the contents
|
||||||
* of *phdr are undefined
|
* of *phdr are undefined
|
||||||
*/
|
*/
|
||||||
el_status el_findphdr(el_ctx *ctx, Elf_Phdr *phdr, uint32_t type, unsigned *i);
|
el_status el_findphdr(el_ctx *ctx, Elf_Phdr *phdr, u32 type, unsigned *i);
|
||||||
|
|
||||||
/* Relocate the loaded executable */
|
/* Relocate the loaded executable */
|
||||||
el_status el_relocate(el_ctx *ctx);
|
el_status el_relocate(el_ctx *ctx);
|
||||||
|
@ -108,7 +106,7 @@ el_status el_relocate(el_ctx *ctx);
|
||||||
/* find a dynamic table entry
|
/* find a dynamic table entry
|
||||||
* returns the entry on success, dyn->d_tag = DT_NULL on failure
|
* returns the entry on success, dyn->d_tag = DT_NULL on failure
|
||||||
*/
|
*/
|
||||||
el_status el_finddyn(el_ctx *ctx, Elf_Dyn *dyn, uint32_t type);
|
el_status el_finddyn(el_ctx *ctx, Elf_Dyn *dyn, u32 type);
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -122,6 +120,6 @@ typedef struct
|
||||||
* pass DT_REL or DT_RELA for type
|
* pass DT_REL or DT_RELA for type
|
||||||
* sets ri->entrysize = 0 if not found
|
* sets ri->entrysize = 0 if not found
|
||||||
*/
|
*/
|
||||||
el_status el_findrelocs(el_ctx *ctx, el_relocinfo *ri, uint32_t type);
|
el_status el_findrelocs(el_ctx *ctx, el_relocinfo *ri, u32 type);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
|
|
||||||
el_status el_applyrela(el_ctx *ctx, Elf_RelA *rel)
|
el_status el_applyrela(el_ctx *ctx, Elf_RelA *rel)
|
||||||
{
|
{
|
||||||
uintptr_t *p = (uintptr_t *)(rel->r_offset + ctx->base_load_paddr);
|
uptr *p = (uptr *)(rel->r_offset + ctx->base_load_paddr);
|
||||||
uint32_t type = ELF_R_TYPE(rel->r_info);
|
u32 type = ELF_R_TYPE(rel->r_info);
|
||||||
uint32_t sym = ELF_R_SYM(rel->r_info);
|
u32 sym = ELF_R_SYM(rel->r_info);
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
@ -53,9 +53,9 @@ el_status el_applyrela(el_ctx *ctx, Elf_RelA *rel)
|
||||||
|
|
||||||
el_status el_applyrel(el_ctx *ctx, Elf_Rel *rel)
|
el_status el_applyrel(el_ctx *ctx, Elf_Rel *rel)
|
||||||
{
|
{
|
||||||
uintptr_t *p = (uintptr_t *)(rel->r_offset + ctx->base_load_paddr);
|
uptr *p = (uptr *)(rel->r_offset + ctx->base_load_paddr);
|
||||||
uint32_t type = ELF_R_TYPE(rel->r_info);
|
u32 type = ELF_R_TYPE(rel->r_info);
|
||||||
uint32_t sym = ELF_R_SYM(rel->r_info);
|
u32 sym = ELF_R_SYM(rel->r_info);
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
|
|
||||||
el_status el_applyrel(el_ctx *ctx, Elf_Rel *rel)
|
el_status el_applyrel(el_ctx *ctx, Elf_Rel *rel)
|
||||||
{
|
{
|
||||||
uint32_t sym = ELF_R_SYM(rel->r_info); // Symbol offset
|
u32 sym = ELF_R_SYM(rel->r_info); // Symbol offset
|
||||||
uint32_t type = ELF_R_TYPE(rel->r_info); // Relocation Type
|
u32 type = ELF_R_TYPE(rel->r_info); // Relocation Type
|
||||||
uintptr_t *p = (uintptr_t *)(rel->r_offset + ctx->base_load_paddr); // Target Addr
|
uptr *p = (uptr *)(rel->r_offset + ctx->base_load_paddr); // Target Addr
|
||||||
|
|
||||||
#if 0 // For later symbol usage
|
#if 0 // For later symbol usage
|
||||||
Elf32_Sym *elfSym;
|
Elf32_Sym *elfSym;
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include <module.h>
|
#include <module.h>
|
||||||
#include <mem/heap.h>
|
#include <mem/heap.h>
|
||||||
#include <power/max7762x.h>
|
#include <power/max7762x.h>
|
||||||
#include <storage/nx_sd.h>
|
#include <storage/sd.h>
|
||||||
#include <utils/types.h>
|
#include <utils/types.h>
|
||||||
|
|
||||||
#include <gfx_utils.h>
|
#include <gfx_utils.h>
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "se.h"
|
#include "se.h"
|
||||||
#include "se_t210.h"
|
|
||||||
#include <mem/heap.h>
|
#include <mem/heap.h>
|
||||||
#include <soc/bpmp.h>
|
#include <soc/bpmp.h>
|
||||||
#include <soc/pmc.h>
|
#include <soc/pmc.h>
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#ifndef _SE_H_
|
#ifndef _SE_H_
|
||||||
#define _SE_H_
|
#define _SE_H_
|
||||||
|
|
||||||
|
#include "se_t210.h"
|
||||||
#include <utils/types.h>
|
#include <utils/types.h>
|
||||||
|
|
||||||
void se_rsa_acc_ctrl(u32 rs, u32 flags);
|
void se_rsa_acc_ctrl(u32 rs, u32 flags);
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
#include <power/max77620.h>
|
#include <power/max77620.h>
|
||||||
#include <power/max7762x.h>
|
#include <power/max7762x.h>
|
||||||
#include <power/regulator_5v.h>
|
#include <power/regulator_5v.h>
|
||||||
#include <storage/nx_sd.h>
|
#include <storage/sd.h>
|
||||||
#include <storage/sdmmc.h>
|
#include <storage/sdmmc.h>
|
||||||
#include <thermal/fan.h>
|
#include <thermal/fan.h>
|
||||||
#include <thermal/tmp451.h>
|
#include <thermal/tmp451.h>
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2018 naehrwert
|
|
||||||
* Copyright (c) 2018-2021 CTCaer
|
|
||||||
*
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NX_SD_H
|
|
||||||
#define NX_SD_H
|
|
||||||
|
|
||||||
#include <storage/sdmmc.h>
|
|
||||||
#include <storage/sdmmc_driver.h>
|
|
||||||
#include <libs/fatfs/ff.h>
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
SD_INIT_FAIL = 0,
|
|
||||||
SD_1BIT_HS25 = 1,
|
|
||||||
SD_4BIT_HS25 = 2,
|
|
||||||
SD_UHS_SDR82 = 3,
|
|
||||||
SD_UHS_SDR104 = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
SD_ERROR_INIT_FAIL = 0,
|
|
||||||
SD_ERROR_RW_FAIL = 1,
|
|
||||||
SD_ERROR_RW_RETRY = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
extern sdmmc_t sd_sdmmc;
|
|
||||||
extern sdmmc_storage_t sd_storage;
|
|
||||||
extern FATFS sd_fs;
|
|
||||||
|
|
||||||
void sd_error_count_increment(u8 type);
|
|
||||||
u16 *sd_get_error_count();
|
|
||||||
bool sd_get_card_removed();
|
|
||||||
bool sd_get_card_initialized();
|
|
||||||
bool sd_get_card_mounted();
|
|
||||||
u32 sd_get_mode();
|
|
||||||
int sd_init_retry(bool power_cycle);
|
|
||||||
bool sd_initialize(bool power_cycle);
|
|
||||||
bool sd_mount();
|
|
||||||
void sd_unmount();
|
|
||||||
void sd_end();
|
|
||||||
bool sd_is_gpt();
|
|
||||||
void *sd_file_read(const char *path, u32 *fsize);
|
|
||||||
int sd_save_to_file(void *buf, u32 size, const char *filename);
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "ramdisk.h"
|
#include "ramdisk.h"
|
||||||
#include <libs/fatfs/diskio.h>
|
#include <libs/fatfs/diskio.h>
|
||||||
|
#include <libs/fatfs/ff.h>
|
||||||
#include <mem/heap.h>
|
#include <mem/heap.h>
|
||||||
#include <utils/types.h>
|
#include <utils/types.h>
|
||||||
|
|
||||||
|
@ -27,10 +28,11 @@
|
||||||
|
|
||||||
static u32 disk_size = 0;
|
static u32 disk_size = 0;
|
||||||
|
|
||||||
int ram_disk_init(FATFS *ram_fs, u32 ramdisk_size)
|
int ram_disk_init(void *ram_fs, u32 ramdisk_size)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
disk_size = ramdisk_size;
|
disk_size = ramdisk_size;
|
||||||
|
FATFS *ram_fatfs = (FATFS *)ram_fs;
|
||||||
|
|
||||||
// If ramdisk is not raw, format it.
|
// If ramdisk is not raw, format it.
|
||||||
if (ram_fs)
|
if (ram_fs)
|
||||||
|
@ -49,7 +51,7 @@ int ram_disk_init(FATFS *ram_fs, u32 ramdisk_size)
|
||||||
|
|
||||||
// Mount ramdisk.
|
// Mount ramdisk.
|
||||||
if (!res)
|
if (!res)
|
||||||
res = f_mount(ram_fs, "ram:", 1);
|
res = f_mount(ram_fatfs, "ram:", 1);
|
||||||
|
|
||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,11 +19,11 @@
|
||||||
#ifndef RAM_DISK_H
|
#ifndef RAM_DISK_H
|
||||||
#define RAM_DISK_H
|
#define RAM_DISK_H
|
||||||
|
|
||||||
#include <libs/fatfs/ff.h>
|
#include <utils/types.h>
|
||||||
|
|
||||||
#define RAMDISK_CLUSTER_SZ 32768
|
#define RAMDISK_CLUSTER_SZ 32768
|
||||||
|
|
||||||
int ram_disk_init(FATFS *ram_fs, u32 ramdisk_size);
|
int ram_disk_init(void *ram_fs, u32 ramdisk_size);
|
||||||
int ram_disk_read(u32 sector, u32 sector_count, void *buf);
|
int ram_disk_read(u32 sector, u32 sector_count, void *buf);
|
||||||
int ram_disk_write(u32 sector, u32 sector_count, const void *buf);
|
int ram_disk_write(u32 sector, u32 sector_count, const void *buf);
|
||||||
|
|
||||||
|
|
186
bdk/storage/sd.h
186
bdk/storage/sd.h
|
@ -1,150 +1,60 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005-2007 Pierre Ossman, All Rights Reserved.
|
* Copyright (c) 2018 naehrwert
|
||||||
* Copyright (c) 2018-2021 CTCaer
|
* Copyright (c) 2018-2021 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* it under the terms of the GNU General Public License as published by
|
* under the terms and conditions of the GNU General Public License,
|
||||||
* the Free Software Foundation; either version 2 of the License, or (at
|
* version 2, as published by the Free Software Foundation.
|
||||||
* your option) any later version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MMC_SD_H
|
|
||||||
#define MMC_SD_H
|
|
||||||
|
|
||||||
/* SD commands type argument response */
|
|
||||||
/* class 0 */
|
|
||||||
/* This is basically the same command as for MMC with some quirks. */
|
|
||||||
#define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */
|
|
||||||
#define SD_SEND_IF_COND 8 /* bcr [11:0] See below R7 */
|
|
||||||
#define SD_SWITCH_VOLTAGE 11 /* ac R1 */
|
|
||||||
/* class 10 */
|
|
||||||
#define SD_SWITCH 6 /* adtc [31:0] See below R1 */
|
|
||||||
/* class 5 */
|
|
||||||
#define SD_ERASE_WR_BLK_START 32 /* ac [31:0] data addr R1 */
|
|
||||||
#define SD_ERASE_WR_BLK_END 33 /* ac [31:0] data addr R1 */
|
|
||||||
|
|
||||||
/* Application commands */
|
|
||||||
#define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */
|
|
||||||
#define SD_APP_SD_STATUS 13 /* adtc R1 */
|
|
||||||
#define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */
|
|
||||||
#define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */
|
|
||||||
#define SD_APP_SET_CLR_CARD_DETECT 42 /* adtc R1 */
|
|
||||||
#define SD_APP_SEND_SCR 51 /* adtc R1 */
|
|
||||||
|
|
||||||
/* Application secure commands */
|
|
||||||
#define SD_APP_SECURE_READ_MULTI_BLOCK 18 /* adtc R1 */
|
|
||||||
#define SD_APP_SECURE_WRITE_MULTI_BLOCK 25 /* adtc R1 */
|
|
||||||
#define SD_APP_SECURE_WRITE_MKB 26 /* adtc R1 */
|
|
||||||
#define SD_APP_SECURE_ERASE 38 /* adtc R1b */
|
|
||||||
#define SD_APP_GET_MKB 43 /* adtc [31:0] See below R1 */
|
|
||||||
#define SD_APP_GET_MID 44 /* adtc R1 */
|
|
||||||
#define SD_APP_SET_CER_RN1 45 /* adtc R1 */
|
|
||||||
#define SD_APP_GET_CER_RN2 46 /* adtc R1 */
|
|
||||||
#define SD_APP_SET_CER_RES2 47 /* adtc R1 */
|
|
||||||
#define SD_APP_GET_CER_RES1 48 /* adtc R1 */
|
|
||||||
#define SD_APP_CHANGE_SECURE_AREA 49 /* adtc R1b */
|
|
||||||
|
|
||||||
/* OCR bit definitions */
|
|
||||||
#define SD_OCR_VDD_18 (1 << 7) /* VDD voltage 1.8 */
|
|
||||||
#define SD_VHD_27_36 (1 << 8) /* VDD voltage 2.7 ~ 3.6 */
|
|
||||||
#define SD_OCR_VDD_27_34 (0x7F << 15) /* VDD voltage 2.7 ~ 3.4 */
|
|
||||||
#define SD_OCR_VDD_32_33 (1 << 20) /* VDD voltage 3.2 ~ 3.3 */
|
|
||||||
#define SD_OCR_S18R (1 << 24) /* 1.8V switching request */
|
|
||||||
#define SD_ROCR_S18A SD_OCR_S18R /* 1.8V switching accepted by card */
|
|
||||||
#define SD_OCR_XPC (1 << 28) /* SDXC power control */
|
|
||||||
#define SD_OCR_CCS (1 << 30) /* Card Capacity Status */
|
|
||||||
#define SD_OCR_BUSY (1 << 31) /* Card Power up Status */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SD_SWITCH argument format:
|
|
||||||
*
|
*
|
||||||
* [31] Check (0) or switch (1)
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
* [30:24] Reserved (0)
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* [23:20] Function group 6
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
* [19:16] Function group 5
|
* more details.
|
||||||
* [15:12] Function group 4
|
|
||||||
* [11:8] Function group 3
|
|
||||||
* [7:4] Function group 2
|
|
||||||
* [3:0] Function group 1
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SD_SEND_IF_COND argument format:
|
|
||||||
*
|
*
|
||||||
* [31:12] Reserved (0)
|
* You should have received a copy of the GNU General Public License
|
||||||
* [11:8] Host Voltage Supply Flags
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* [7:0] Check Pattern (0xAA)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
#ifndef SD_H
|
||||||
* SD_APP_GET_MKB argument format:
|
#define SD_H
|
||||||
*
|
|
||||||
* [31:24] Number of blocks to read (512 block size)
|
|
||||||
* [23:16] MKB ID
|
|
||||||
* [15:0] Block offset
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
#include <storage/sdmmc.h>
|
||||||
* SCR field definitions
|
#include <storage/sdmmc_driver.h>
|
||||||
*/
|
#include <libs/fatfs/ff.h>
|
||||||
#define SCR_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.01 */
|
|
||||||
#define SCR_SPEC_VER_1 1 /* Implements system specification 1.10 */
|
|
||||||
#define SCR_SPEC_VER_2 2 /* Implements system specification 2.00-3.0X */
|
|
||||||
#define SD_SCR_BUS_WIDTH_1 (1<<0)
|
|
||||||
#define SD_SCR_BUS_WIDTH_4 (1<<2)
|
|
||||||
|
|
||||||
/*
|
enum
|
||||||
* SD bus widths
|
{
|
||||||
*/
|
SD_INIT_FAIL = 0,
|
||||||
#define SD_BUS_WIDTH_1 0
|
SD_1BIT_HS25 = 1,
|
||||||
#define SD_BUS_WIDTH_4 2
|
SD_4BIT_HS25 = 2,
|
||||||
|
SD_UHS_SDR82 = 3,
|
||||||
|
SD_UHS_SDR104 = 4
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
enum
|
||||||
* SD bus speeds
|
{
|
||||||
*/
|
SD_ERROR_INIT_FAIL = 0,
|
||||||
#define UHS_SDR12_BUS_SPEED 0
|
SD_ERROR_RW_FAIL = 1,
|
||||||
#define HIGH_SPEED_BUS_SPEED 1
|
SD_ERROR_RW_RETRY = 2
|
||||||
#define UHS_SDR25_BUS_SPEED 1
|
};
|
||||||
#define UHS_SDR50_BUS_SPEED 2
|
|
||||||
#define UHS_SDR104_BUS_SPEED 3
|
|
||||||
#define UHS_DDR50_BUS_SPEED 4
|
|
||||||
#define HS400_BUS_SPEED 5
|
|
||||||
|
|
||||||
#define SD_MODE_HIGH_SPEED (1 << HIGH_SPEED_BUS_SPEED)
|
extern sdmmc_t sd_sdmmc;
|
||||||
#define SD_MODE_UHS_SDR12 (1 << UHS_SDR12_BUS_SPEED)
|
extern sdmmc_storage_t sd_storage;
|
||||||
#define SD_MODE_UHS_SDR25 (1 << UHS_SDR25_BUS_SPEED)
|
extern FATFS sd_fs;
|
||||||
#define SD_MODE_UHS_SDR50 (1 << UHS_SDR50_BUS_SPEED)
|
|
||||||
#define SD_MODE_UHS_SDR104 (1 << UHS_SDR104_BUS_SPEED)
|
|
||||||
#define SD_MODE_UHS_DDR50 (1 << UHS_DDR50_BUS_SPEED)
|
|
||||||
|
|
||||||
#define SD_DRIVER_TYPE_B 0x01
|
void sd_error_count_increment(u8 type);
|
||||||
#define SD_DRIVER_TYPE_A 0x02
|
u16 *sd_get_error_count();
|
||||||
|
bool sd_get_card_removed();
|
||||||
|
bool sd_get_card_initialized();
|
||||||
|
bool sd_get_card_mounted();
|
||||||
|
u32 sd_get_mode();
|
||||||
|
int sd_init_retry(bool power_cycle);
|
||||||
|
bool sd_initialize(bool power_cycle);
|
||||||
|
bool sd_mount();
|
||||||
|
void sd_unmount();
|
||||||
|
void sd_end();
|
||||||
|
bool sd_is_gpt();
|
||||||
|
void *sd_file_read(const char *path, u32 *fsize);
|
||||||
|
int sd_save_to_file(void *buf, u32 size, const char *filename);
|
||||||
|
|
||||||
#define SD_SET_CURRENT_LIMIT_200 0
|
#endif
|
||||||
#define SD_SET_CURRENT_LIMIT_400 1
|
|
||||||
#define SD_SET_CURRENT_LIMIT_600 2
|
|
||||||
#define SD_SET_CURRENT_LIMIT_800 3
|
|
||||||
|
|
||||||
#define SD_MAX_CURRENT_200 (1 << SD_SET_CURRENT_LIMIT_200)
|
|
||||||
#define SD_MAX_CURRENT_400 (1 << SD_SET_CURRENT_LIMIT_400)
|
|
||||||
#define SD_MAX_CURRENT_600 (1 << SD_SET_CURRENT_LIMIT_600)
|
|
||||||
#define SD_MAX_CURRENT_800 (1 << SD_SET_CURRENT_LIMIT_800)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SD_SWITCH mode
|
|
||||||
*/
|
|
||||||
#define SD_SWITCH_CHECK 0
|
|
||||||
#define SD_SWITCH_SET 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SD_SWITCH function groups
|
|
||||||
*/
|
|
||||||
#define SD_SWITCH_GRP_ACCESS 0
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SD_SWITCH access modes
|
|
||||||
*/
|
|
||||||
#define SD_SWITCH_ACCESS_DEF 0
|
|
||||||
#define SD_SWITCH_ACCESS_HS 1
|
|
||||||
|
|
||||||
#endif /* LINUX_MMC_SD_H */
|
|
150
bdk/storage/sd_def.h
Normal file
150
bdk/storage/sd_def.h
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2005-2007 Pierre Ossman, All Rights Reserved.
|
||||||
|
* Copyright (c) 2018-2021 CTCaer
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
* your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SD_DEF_H
|
||||||
|
#define SD_DEF_H
|
||||||
|
|
||||||
|
/* SD commands type argument response */
|
||||||
|
/* class 0 */
|
||||||
|
/* This is basically the same command as for MMC with some quirks. */
|
||||||
|
#define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */
|
||||||
|
#define SD_SEND_IF_COND 8 /* bcr [11:0] See below R7 */
|
||||||
|
#define SD_SWITCH_VOLTAGE 11 /* ac R1 */
|
||||||
|
/* class 10 */
|
||||||
|
#define SD_SWITCH 6 /* adtc [31:0] See below R1 */
|
||||||
|
/* class 5 */
|
||||||
|
#define SD_ERASE_WR_BLK_START 32 /* ac [31:0] data addr R1 */
|
||||||
|
#define SD_ERASE_WR_BLK_END 33 /* ac [31:0] data addr R1 */
|
||||||
|
|
||||||
|
/* Application commands */
|
||||||
|
#define SD_APP_SET_BUS_WIDTH 6 /* ac [1:0] bus width R1 */
|
||||||
|
#define SD_APP_SD_STATUS 13 /* adtc R1 */
|
||||||
|
#define SD_APP_SEND_NUM_WR_BLKS 22 /* adtc R1 */
|
||||||
|
#define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */
|
||||||
|
#define SD_APP_SET_CLR_CARD_DETECT 42 /* adtc R1 */
|
||||||
|
#define SD_APP_SEND_SCR 51 /* adtc R1 */
|
||||||
|
|
||||||
|
/* Application secure commands */
|
||||||
|
#define SD_APP_SECURE_READ_MULTI_BLOCK 18 /* adtc R1 */
|
||||||
|
#define SD_APP_SECURE_WRITE_MULTI_BLOCK 25 /* adtc R1 */
|
||||||
|
#define SD_APP_SECURE_WRITE_MKB 26 /* adtc R1 */
|
||||||
|
#define SD_APP_SECURE_ERASE 38 /* adtc R1b */
|
||||||
|
#define SD_APP_GET_MKB 43 /* adtc [31:0] See below R1 */
|
||||||
|
#define SD_APP_GET_MID 44 /* adtc R1 */
|
||||||
|
#define SD_APP_SET_CER_RN1 45 /* adtc R1 */
|
||||||
|
#define SD_APP_GET_CER_RN2 46 /* adtc R1 */
|
||||||
|
#define SD_APP_SET_CER_RES2 47 /* adtc R1 */
|
||||||
|
#define SD_APP_GET_CER_RES1 48 /* adtc R1 */
|
||||||
|
#define SD_APP_CHANGE_SECURE_AREA 49 /* adtc R1b */
|
||||||
|
|
||||||
|
/* OCR bit definitions */
|
||||||
|
#define SD_OCR_VDD_18 (1 << 7) /* VDD voltage 1.8 */
|
||||||
|
#define SD_VHD_27_36 (1 << 8) /* VDD voltage 2.7 ~ 3.6 */
|
||||||
|
#define SD_OCR_VDD_27_34 (0x7F << 15) /* VDD voltage 2.7 ~ 3.4 */
|
||||||
|
#define SD_OCR_VDD_32_33 (1 << 20) /* VDD voltage 3.2 ~ 3.3 */
|
||||||
|
#define SD_OCR_S18R (1 << 24) /* 1.8V switching request */
|
||||||
|
#define SD_ROCR_S18A SD_OCR_S18R /* 1.8V switching accepted by card */
|
||||||
|
#define SD_OCR_XPC (1 << 28) /* SDXC power control */
|
||||||
|
#define SD_OCR_CCS (1 << 30) /* Card Capacity Status */
|
||||||
|
#define SD_OCR_BUSY (1 << 31) /* Card Power up Status */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SD_SWITCH argument format:
|
||||||
|
*
|
||||||
|
* [31] Check (0) or switch (1)
|
||||||
|
* [30:24] Reserved (0)
|
||||||
|
* [23:20] Function group 6
|
||||||
|
* [19:16] Function group 5
|
||||||
|
* [15:12] Function group 4
|
||||||
|
* [11:8] Function group 3
|
||||||
|
* [7:4] Function group 2
|
||||||
|
* [3:0] Function group 1
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SD_SEND_IF_COND argument format:
|
||||||
|
*
|
||||||
|
* [31:12] Reserved (0)
|
||||||
|
* [11:8] Host Voltage Supply Flags
|
||||||
|
* [7:0] Check Pattern (0xAA)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SD_APP_GET_MKB argument format:
|
||||||
|
*
|
||||||
|
* [31:24] Number of blocks to read (512 block size)
|
||||||
|
* [23:16] MKB ID
|
||||||
|
* [15:0] Block offset
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SCR field definitions
|
||||||
|
*/
|
||||||
|
#define SCR_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.01 */
|
||||||
|
#define SCR_SPEC_VER_1 1 /* Implements system specification 1.10 */
|
||||||
|
#define SCR_SPEC_VER_2 2 /* Implements system specification 2.00-3.0X */
|
||||||
|
#define SD_SCR_BUS_WIDTH_1 (1<<0)
|
||||||
|
#define SD_SCR_BUS_WIDTH_4 (1<<2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SD bus widths
|
||||||
|
*/
|
||||||
|
#define SD_BUS_WIDTH_1 0
|
||||||
|
#define SD_BUS_WIDTH_4 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SD bus speeds
|
||||||
|
*/
|
||||||
|
#define UHS_SDR12_BUS_SPEED 0
|
||||||
|
#define HIGH_SPEED_BUS_SPEED 1
|
||||||
|
#define UHS_SDR25_BUS_SPEED 1
|
||||||
|
#define UHS_SDR50_BUS_SPEED 2
|
||||||
|
#define UHS_SDR104_BUS_SPEED 3
|
||||||
|
#define UHS_DDR50_BUS_SPEED 4
|
||||||
|
#define HS400_BUS_SPEED 5
|
||||||
|
|
||||||
|
#define SD_MODE_HIGH_SPEED (1 << HIGH_SPEED_BUS_SPEED)
|
||||||
|
#define SD_MODE_UHS_SDR12 (1 << UHS_SDR12_BUS_SPEED)
|
||||||
|
#define SD_MODE_UHS_SDR25 (1 << UHS_SDR25_BUS_SPEED)
|
||||||
|
#define SD_MODE_UHS_SDR50 (1 << UHS_SDR50_BUS_SPEED)
|
||||||
|
#define SD_MODE_UHS_SDR104 (1 << UHS_SDR104_BUS_SPEED)
|
||||||
|
#define SD_MODE_UHS_DDR50 (1 << UHS_DDR50_BUS_SPEED)
|
||||||
|
|
||||||
|
#define SD_DRIVER_TYPE_B 0x01
|
||||||
|
#define SD_DRIVER_TYPE_A 0x02
|
||||||
|
|
||||||
|
#define SD_SET_CURRENT_LIMIT_200 0
|
||||||
|
#define SD_SET_CURRENT_LIMIT_400 1
|
||||||
|
#define SD_SET_CURRENT_LIMIT_600 2
|
||||||
|
#define SD_SET_CURRENT_LIMIT_800 3
|
||||||
|
|
||||||
|
#define SD_MAX_CURRENT_200 (1 << SD_SET_CURRENT_LIMIT_200)
|
||||||
|
#define SD_MAX_CURRENT_400 (1 << SD_SET_CURRENT_LIMIT_400)
|
||||||
|
#define SD_MAX_CURRENT_600 (1 << SD_SET_CURRENT_LIMIT_600)
|
||||||
|
#define SD_MAX_CURRENT_800 (1 << SD_SET_CURRENT_LIMIT_800)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SD_SWITCH mode
|
||||||
|
*/
|
||||||
|
#define SD_SWITCH_CHECK 0
|
||||||
|
#define SD_SWITCH_SET 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SD_SWITCH function groups
|
||||||
|
*/
|
||||||
|
#define SD_SWITCH_GRP_ACCESS 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SD_SWITCH access modes
|
||||||
|
*/
|
||||||
|
#define SD_SWITCH_ACCESS_DEF 0
|
||||||
|
#define SD_SWITCH_ACCESS_HS 1
|
||||||
|
|
||||||
|
#endif /* SD_DEF_H */
|
|
@ -18,8 +18,8 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <storage/sdmmc.h>
|
#include <storage/sdmmc.h>
|
||||||
#include <storage/mmc.h>
|
#include <storage/mmc.h>
|
||||||
#include <storage/nx_sd.h>
|
|
||||||
#include <storage/sd.h>
|
#include <storage/sd.h>
|
||||||
|
#include <storage/sd_def.h>
|
||||||
#include <memory_map.h>
|
#include <memory_map.h>
|
||||||
#include <gfx_utils.h>
|
#include <gfx_utils.h>
|
||||||
#include <mem/heap.h>
|
#include <mem/heap.h>
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include <gfx_utils.h>
|
#include <gfx_utils.h>
|
||||||
#include <soc/hw_init.h>
|
#include <soc/hw_init.h>
|
||||||
#include <soc/t210.h>
|
#include <soc/t210.h>
|
||||||
#include <storage/nx_sd.h>
|
#include <storage/sd.h>
|
||||||
#include <storage/sdmmc.h>
|
#include <storage/sdmmc.h>
|
||||||
#include <storage/sdmmc_driver.h>
|
#include <storage/sdmmc_driver.h>
|
||||||
#include <utils/btn.h>
|
#include <utils/btn.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include <soc/i2c.h>
|
#include <soc/i2c.h>
|
||||||
#include <soc/pmc.h>
|
#include <soc/pmc.h>
|
||||||
#include <soc/t210.h>
|
#include <soc/t210.h>
|
||||||
#include <storage/nx_sd.h>
|
#include <storage/sd.h>
|
||||||
|
|
||||||
#define USE_RTC_TIMER
|
#define USE_RTC_TIMER
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue