NVMeFS
------

FileCore based filing system. It takes requests from FileCore and passes
it to NVMeDriver.

Parameters at start
-------------------

- -bg (optional)
  Activates FileCore background mode. Read seems to work fine whilst
  write crashes at least FileCore. Experimental

FileCore Handlers
-----------------

- Misc Ops
  0 - Mount -> tries to read given data from NVMe device (similar to
               Read but limited)
  2 - Lock Drive -> Ignored
  3 - Unlock Drive -> Ignored
  7 - Returns 0 in R2 in case that no NVMe operations are running for
      the desired device and 1 in case that there are operations running
  Other - Ignored with debug entry

- Disc Ops
  0 - Verify -> Read in the moment without retry at disc errors
                Data ignored.
                No support of NVMe Verify yet
  1 - Read -> NVMe Read(s)
  2 - Write -> NVME Write(s)
  5 - Seek -> Ignored
  6 - Restore -> Ignored
  Other - Ignored with debug entry

SWIs
----
0x05a600 - NVMeFS_DiscOp -> Passed to FileCore
0x05a602 - NVMeFS_Drives -> Passed to FileCore
0x05a605 - NVMeFS_DescribeDisc -> Passed to FileCore
0x05a609 - NVMeFS_MiscOp -> Passed to FileCore
0x05a60a - NVMeFS_SectorDiscOp -> Passed to FileCore
0x05a60c - NVMeFS_DiscOp64 -> Passed to FileCore
0x05a620 - NVMeFS_DiscInfo
           In

           R0 - Disc Index (0-7)
           R1 - Subreason code
                = 0 Read various disc parameters for index in R0
                > 0 Reserved for future use

           Out (subreason 0)

           R0 - NVMe controller handle
           R1 - NMVe Namespace ID belonging
           R2 - NVMe LBA (sector/block) size
           R3 - Disc size lower 32 Bits
           R4 - Disc size upper 32 Bits
           R5 - Number of NVMe LBAs lower 32 Bits
           R6 - Number of NVMe LBAs upper 32 Bits
           R7 - Maximal size of data which can processed within one
                NVMe comamnd
           R8 - = 0 in case that disc is inactive
                != 0 in case that disc is active
                     exact value to be determined
0x05a621 - NVMeFS_FreeOp
           See section Free below and PRMs

Service Calls
-------------

Evaluated:
- 0x811C0 NVMeDriverStarted
- 0x811C1 NVMeDriverDying

Launched:
- None

Free
----

Inside NVMeFS Free is only an assembler function consisting of two ARM
assembler statements. One is the return as recommended inside PRMs and the
other first one is the SWI call to NVMeFS_FreeOp which is doing the real
work.

Commands
--------

- NVMe
  Selects NVMeFS as filing system

Other
-----

Starts asynchronous scan for NVMe device controllers managed by NVMeDriver.
After this is done it registers itself to FileCore. The scan process is
also activated when noting a NVMeDriverStarted service call.

Deregistration is done in bit brutal way by launching OS_Module 4 for its
FileCore instantiation. This happens at module termination or in case that
a NVMeDriverDying service call is detected.
