^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Parts of INFTL headers shared with userspace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #ifndef __MTD_INFTL_USER_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define __MTD_INFTL_USER_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define OSAK_VERSION 0x5120
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define PERCENTUSED 98
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define SECTORSIZE 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) /* Block Control Information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) struct inftl_bci {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) __u8 ECCsig[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) __u8 Status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) __u8 Status1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) struct inftl_unithead1 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) __u16 virtualUnitNo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) __u16 prevUnitNo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) __u8 ANAC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) __u8 NACs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) __u8 parityPerField;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) __u8 discarded;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) struct inftl_unithead2 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) __u8 parityPerField;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) __u8 ANAC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) __u16 prevUnitNo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) __u16 virtualUnitNo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) __u8 NACs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) __u8 discarded;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) struct inftl_unittail {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) __u8 Reserved[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) __u16 EraseMark;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) __u16 EraseMark1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) union inftl_uci {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) struct inftl_unithead1 a;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) struct inftl_unithead2 b;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) struct inftl_unittail c;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) struct inftl_oob {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) struct inftl_bci b;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) union inftl_uci u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) /* INFTL Media Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) struct INFTLPartition {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) __u32 virtualUnits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) __u32 firstUnit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) __u32 lastUnit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) __u32 spareUnits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) __u32 Reserved0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) __u32 Reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) struct INFTLMediaHeader {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) char bootRecordID[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) __u32 NoOfBootImageBlocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) __u32 NoOfBinaryPartitions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) __u32 NoOfBDTLPartitions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) __u32 BlockMultiplierBits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) __u32 FormatFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) __u32 OsakVersion;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) __u32 PercentUsed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) struct INFTLPartition Partitions[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) /* Partition flag types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define INFTL_BINARY 0x20000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define INFTL_BDTL 0x40000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define INFTL_LAST 0x80000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #endif /* __MTD_INFTL_USER_H__ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)