No description
  • Rust 94.7%
  • C 5.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Steffen Deusch 3a33389804 rfs: commit the NV image when the transfer ends, not on close
The NV files are implicitly open in downstream rfsd and the CP never closes
them, so committing on RFS_CLOSE meant committing never. Hardware showed the
result: nv_normal.bin.part and nv_user.bin.part accumulating in the state
directory while every write was still effectively discarded.

A transfer ending is the only signal that the image is whole, so rename there.
The GDDS path already did the equivalent -- it commits when the last chunk
reaches the declared size -- and that one worked on the same boot.

Tested by driving the frame handler directly: an IO_REQUEST write plus its data
frame, no CLOSE, must leave a committed file and no .part.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CNuQ3gAkiwVoscqZHr3SEi
2026-08-12 19:48:04 +00:00
.cargo oem: answer the CP's oem_ipc1 (GEMS) channel 2026-07-09 20:28:36 +02:00
crates rfs: commit the NV image when the transfer ends, not on close 2026-08-12 19:48:04 +00:00
.gitignore oem: answer the CP's oem_ipc1 (GEMS) channel 2026-07-09 20:28:36 +02:00
Cargo.lock gnss: add long-running KEPLER daemon 2026-08-11 16:29:33 +00:00
Cargo.toml add samsung-sit codec crate; convert repo to a Cargo workspace 2026-07-13 16:19:49 +02:00
README.md add samsung-sit-ffi: a plain-C ABI over the codec 2026-07-13 17:08:19 +02:00

exynos-modem workspace

Userspace pieces for the Exynos s5300 ("Shannon") modem on the mainline-Linux bring-up of the Google Tensor G4 (Pixel 9a). A Cargo workspace of peer crates:

  • crates/exynos-modem — the daemon that answers the CP's vendor channels (GEMS/OEM on oem_ipc1, RFS, boot supervision + crash recovery). The analog of Qualcomm's rmtfs. See its own README for details.
  • crates/samsung-sit — a pure, I/O-free codec for the SIT (Exynos RIL) wire protocol: bytes ⟷ typed structs, no transport, no GLib. Consumed today via a C FFI shim from ModemManager's samsung-sit plugin (so the plugin keeps owning the wwan0sit* ports and the async/mainloop) and natively by any future Rust modem daemon. Written with binrw for declarative binary layouts.
  • crates/samsung-sit-ffi — a #[repr(C)] static library (libsamsung_sit_ffi.a) exposing samsung-sit to the ModemManager C plugin. The ABI is GLib-free (byte-buffer out-params, status codes); a thin C adapter re-wraps it into the GByteArray/GError shapes of the plugin's existing mm-sit-protocol.h, so the transport/orchestration C is left untouched.

Build

rustup target add aarch64-unknown-linux-musl   # once
cargo build --release                          # all crates -> static musl
cargo test                                     # wire-format tests