forked from Imagelibrary/littlefs
Reworked tag encoding a little bit
Mainly to make room for some future planned stuff:
- Moved the mroot's redund bits from LFSR_TAG_GEOMETRY to
LFSR_TAG_MAGIC:
LFSR_TAG_MAGIC 0x003r v--- ---- --11 --rr
This has the benefit of living in a fixed location (off=0x5), which
may make mounting/debugging easier. It also makes LFSR_TAG_GEOMETRY
less of a special case (LFSR_TAG_MAGIC is already a _very_ special
case).
Unfortunately, this does get in the way of our previous magic=0x3
encoding. To compensate (and to avoid conflicts with LFSR_TAG_NULL),
I've added the 0x3_ prefix. This has the funny side-effect of
rendering redunds 0-3 as ascii 0-3 (0x30-0x33), which is a complete
accident but may actually be useful when debugging.
Currently all config tags fit in the 0x3_ prefix, which is nice for
debugging but not a hard requirement.
- Flipped LFSR_TAG_FILELIMIT/NAMELIMIT:
LFSR_TAG_FILELIMIT 0x0039 v--- ---- --11 1--1
LFSR_TAG_NAMELIMIT 0x003a v--- ---- --11 1-1-
The file limit is a _bit_ more fundamental. It's effectively the
required integer size for the filesystem.
These may also be followed by LFSR_TAG_ATTRLIMIT based on how future
attr revisits go.
- Rearranged struct tags so that LFSR_TAG_BRANCH = 0x300:
LFSR_TAG_BRANCH 0x030r v--- --11 ---- --rr
LFSR_TAG_DATA 0x0304 v--- --11 ---- -1--
LFSR_TAG_BLOCK 0x0308 v--- --11 ---- 1err
LFSR_TAG_DDKEY* 0x0310 v--- --11 ---1 ----
LFSR_TAG_DID 0x0314 v--- --11 ---1 -1--
LFSR_TAG_BSHRUB 0x0318 v--- --11 ---1 1---
LFSR_TAG_BTREE 0x031c v--- --11 ---1 11rr
LFSR_TAG_MROOT 0x032r v--- --11 --1- --rr
LFSR_TAG_MDIR 0x0324 v--- --11 --1- -1rr
LFSR_TAG_MTREE 0x032c v--- --11 --1- 11rr
*Planned
LFSR_TAG_BRANCH is a very special tag when it comes to bshrub/btree
traversal, so I think it deserves the subtype=0 slot.
This also just makes everything fit together better, and makes room
for the future planned ddkey tag.
Code changes minimal:
code stack ctx
before: 35728 2440 640
after: 35732 (+0.0%) 2440 (+0.0%) 640 (+0.0%)
This commit is contained in:
@@ -31,31 +31,31 @@ except ModuleNotFoundError:
|
||||
|
||||
TAG_NULL = 0x0000 ## 0x0000 v--- ---- ---- ----
|
||||
TAG_CONFIG = 0x0000 ## 0x00tt v--- ---- -ttt tttt
|
||||
TAG_MAGIC = 0x0003 # 0x0003 v--- ---- ---- --11
|
||||
TAG_VERSION = 0x0004 # 0x0004 v--- ---- ---- -1--
|
||||
TAG_RCOMPAT = 0x0005 # 0x0005 v--- ---- ---- -1-1
|
||||
TAG_WCOMPAT = 0x0006 # 0x0006 v--- ---- ---- -11-
|
||||
TAG_OCOMPAT = 0x0007 # 0x0007 v--- ---- ---- -111
|
||||
TAG_GEOMETRY = 0x0009 # 0x0008 v--- ---- ---- 1-rr
|
||||
TAG_NAMELIMIT = 0x000c # 0x000c v--- ---- ---- 11--
|
||||
TAG_FILELIMIT = 0x000d # 0x000d v--- ---- ---- 11-1
|
||||
TAG_GDELTA = 0x0100 ## 0x01tt v--- ---1 -ttt tttt
|
||||
TAG_MAGIC = 0x0031 # 0x003r v--- ---- --11 --rr
|
||||
TAG_VERSION = 0x0034 # 0x0034 v--- ---- --11 -1--
|
||||
TAG_RCOMPAT = 0x0035 # 0x0035 v--- ---- --11 -1-1
|
||||
TAG_WCOMPAT = 0x0036 # 0x0036 v--- ---- --11 -11-
|
||||
TAG_OCOMPAT = 0x0037 # 0x0037 v--- ---- --11 -111
|
||||
TAG_GEOMETRY = 0x0038 # 0x0038 v--- ---- --11 1---
|
||||
TAG_FILELIMIT = 0x0039 # 0x0039 v--- ---- --11 1--1
|
||||
TAG_NAMELIMIT = 0x003a # 0x003a v--- ---- --11 1-1-
|
||||
TAG_GDELTA = 0x0100 ## 0x01tt v--- ---1 -ttt ttrr
|
||||
TAG_GRMDELTA = 0x0100 # 0x0100 v--- ---1 ---- ----
|
||||
TAG_NAME = 0x0200 ## 0x02tt v--- --1- -ttt tttt
|
||||
TAG_REG = 0x0201 # 0x0201 v--- --1- ---- ---1
|
||||
TAG_DIR = 0x0202 # 0x0202 v--- --1- ---- --1-
|
||||
TAG_STICKYNOTE = 0x0203 # 0x0203 v--- --1- ---- --11
|
||||
TAG_BOOKMARK = 0x0204 # 0x0204 v--- --1- ---- -1--
|
||||
TAG_STRUCT = 0x0300 ## 0x03tt v--- --11 -ttt tttt
|
||||
TAG_DATA = 0x0300 # 0x0300 v--- --11 ---- ----
|
||||
TAG_BLOCK = 0x0304 # 0x0304 v--- --11 ---- -1rr
|
||||
TAG_BSHRUB = 0x0308 # 0x0308 v--- --11 ---- 1---
|
||||
TAG_BTREE = 0x030c # 0x030c v--- --11 ---- 11rr
|
||||
TAG_MROOT = 0x0311 # 0x0310 v--- --11 ---1 --rr
|
||||
TAG_MDIR = 0x0315 # 0x0314 v--- --11 ---1 -1rr
|
||||
TAG_MTREE = 0x031c # 0x031c v--- --11 ---1 11rr
|
||||
TAG_DID = 0x0320 # 0x0320 v--- --11 --1- ----
|
||||
TAG_BRANCH = 0x032c # 0x032c v--- --11 --1- 11rr
|
||||
TAG_STRUCT = 0x0300 ## 0x03tt v--- --11 -ttt ttrr
|
||||
TAG_BRANCH = 0x0300 # 0x030r v--- --11 ---- --rr
|
||||
TAG_DATA = 0x0304 # 0x0304 v--- --11 ---- -1--
|
||||
TAG_BLOCK = 0x0308 # 0x0308 v--- --11 ---- 1err
|
||||
TAG_DID = 0x0314 # 0x0314 v--- --11 ---1 -1--
|
||||
TAG_BSHRUB = 0x0318 # 0x0318 v--- --11 ---1 1---
|
||||
TAG_BTREE = 0x031c # 0x031c v--- --11 ---1 11rr
|
||||
TAG_MROOT = 0x0321 # 0x032r v--- --11 --1- --rr
|
||||
TAG_MDIR = 0x0325 # 0x0324 v--- --11 --1- -1rr
|
||||
TAG_MTREE = 0x032c # 0x032c v--- --11 --1- 11rr
|
||||
TAG_ATTR = 0x0400 ## 0x04aa v--- -1-a -aaa aaaa
|
||||
TAG_UATTR = 0x0400 # 0x04aa v--- -1-- -aaa aaaa
|
||||
TAG_SATTR = 0x0500 # 0x05aa v--- -1-1 -aaa aaaa
|
||||
@@ -289,8 +289,8 @@ def tagrepr(tag, weight=None, size=None, *,
|
||||
else 'wcompat' if (tag & 0xfff) == TAG_WCOMPAT
|
||||
else 'ocompat' if (tag & 0xfff) == TAG_OCOMPAT
|
||||
else 'geometry' if (tag & 0xfff) == TAG_GEOMETRY
|
||||
else 'namelimit' if (tag & 0xfff) == TAG_NAMELIMIT
|
||||
else 'filelimit' if (tag & 0xfff) == TAG_FILELIMIT
|
||||
else 'namelimit' if (tag & 0xfff) == TAG_NAMELIMIT
|
||||
else 'config 0x%02x' % (tag & 0xff),
|
||||
' w%d' % weight if weight else '',
|
||||
' %s' % size if size is not None else '')
|
||||
@@ -326,15 +326,15 @@ def tagrepr(tag, weight=None, size=None, *,
|
||||
elif (tag & 0x6f00) == TAG_STRUCT:
|
||||
return '%s%s%s%s' % (
|
||||
'shrub' if tag & TAG_SHRUB else '',
|
||||
'data' if (tag & 0xfff) == TAG_DATA
|
||||
'branch' if (tag & 0xfff) == TAG_BRANCH
|
||||
else 'data' if (tag & 0xfff) == TAG_DATA
|
||||
else 'block' if (tag & 0xfff) == TAG_BLOCK
|
||||
else 'did' if (tag & 0xfff) == TAG_DID
|
||||
else 'bshrub' if (tag & 0xfff) == TAG_BSHRUB
|
||||
else 'btree' if (tag & 0xfff) == TAG_BTREE
|
||||
else 'mroot' if (tag & 0xfff) == TAG_MROOT
|
||||
else 'mdir' if (tag & 0xfff) == TAG_MDIR
|
||||
else 'mtree' if (tag & 0xfff) == TAG_MTREE
|
||||
else 'did' if (tag & 0xfff) == TAG_DID
|
||||
else 'branch' if (tag & 0xfff) == TAG_BRANCH
|
||||
else 'struct 0x%02x' % (tag & 0xff),
|
||||
' w%d' % weight if weight else '',
|
||||
' %s' % size if size is not None else '')
|
||||
@@ -2500,6 +2500,7 @@ class Config:
|
||||
# the filesystem magic string
|
||||
class Magic(Config):
|
||||
tag = TAG_MAGIC
|
||||
mask = 0x3
|
||||
|
||||
def repr(self):
|
||||
return 'magic \"%s\"' % (
|
||||
@@ -2548,7 +2549,6 @@ class Config:
|
||||
# block device geometry
|
||||
class Geometry(Config):
|
||||
tag = TAG_GEOMETRY
|
||||
mask = 0x3
|
||||
|
||||
def __init__(self, mroot, tag, rattr):
|
||||
super().__init__(mroot, tag, rattr)
|
||||
|
||||
Reference in New Issue
Block a user