)]}'
{
  "commit": "6ca6be4a3c370e79514a0815a61763379fea30b4",
  "tree": "85366a0d106c4d8e906be7274138d4afc420a77c",
  "parents": [
    "56b64a9162594cc7ae052e7b682914e58ce2f810"
  ],
  "author": {
    "name": "Anthony Rocha",
    "email": "anthony.rocha@amd.com",
    "time": "Thu Mar 19 12:07:50 2026 -0700"
  },
  "committer": {
    "name": "Anthony Rocha",
    "email": "anthony.rocha@amd.com",
    "time": "Fri Mar 20 09:40:51 2026 -0700"
  },
  "message": "i2c: phase 4 — WaitGroup interrupt loop + slave notification dispatch\n\nReplace the single-channel object_wait with a WaitGroup that multiplexes\ntwo sources on the i2c_server main loop:\n\n  user_data\u003d0  IPC from client  (Signals::READABLE on handle::I2C)\n  user_data\u003d1  I2C2 hardware interrupt (signals::i2c2 on handle::I2C2_IRQ)\n\nServer startup registers both sources once via wait_group_add, then\ncalls object_wait(WG, READABLE, Instant::MAX) as the single blocking\npoint. When the WaitGroup fires:\n\n  • user_data 1 (interrupt): call drain_slave_rx() for every\n    notification-enabled bus, interrupt_ack() the IRQ, then\n    raise_peer_user_signal() to wake the registered client.\n\n  • user_data 0 (IPC): dispatch as before; two new ops added:\n    - EnableSlaveNotification  → backend.enable_slave_notification()\n    - DisableSlaveNotification → backend.disable_slave_notification()\n    SlaveReceive now calls get_buffered_slave_message() (non-blocking)\n    instead of the 10 000-iteration poll loop.\n\nsystem.json5 changes (both i2c-slave and i2c targets):\n  - Add I2C2_IRQ interrupt object (IRQ 112, name \"i2c2\")\n  - Add WG wait_group object\n\nchannel_read/channel_respond remain synchronous: by the time the\nWaitGroup fires with user_data\u003d0 the channel is already READABLE, so\nchannel_read returns immediately without blocking.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a80b741cfd99c33cf9abef218f1d66e86715dec9",
      "old_mode": 33188,
      "old_path": "services/i2c/server/src/main.rs",
      "new_id": "43ef4c501f33de965fb1c31716a8893834348fcc",
      "new_mode": 33188,
      "new_path": "services/i2c/server/src/main.rs"
    },
    {
      "type": "modify",
      "old_id": "8994902758849bed8e1b666361c071d459c2f3e0",
      "old_mode": 33188,
      "old_path": "target/ast1060-evb/i2c-slave/system.json5",
      "new_id": "0c1ce5bbcaebd9bd2332e3040595cfde476a756e",
      "new_mode": 33188,
      "new_path": "target/ast1060-evb/i2c-slave/system.json5"
    },
    {
      "type": "modify",
      "old_id": "93858968983719a38f7664e2bffb5e62c1d83b48",
      "old_mode": 33188,
      "old_path": "target/ast1060-evb/i2c/system.json5",
      "new_id": "8a20b2d5b179e3be3c3c33a27e9a06765bbe4fba",
      "new_mode": 33188,
      "new_path": "target/ast1060-evb/i2c/system.json5"
    }
  ]
}
