# openipc/aic8800 architecture

> Architecture diagram of the GitHub repository openipc/aic8800, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/openipc/aic8800
- Repository: https://github.com/openipc/aic8800

## Overview

aic8800 is a Linux wireless driver for AIC8800-family hardware, with a separate USB Bluetooth firmware-loading path. The WiFi workflow connects Linux wireless interfaces to driver control and packet handling, then transports messages and frames to device firmware. Firmware loading and chip-specific configuration support device startup; Bluetooth has its own command and USB path. The README is minimal, and the sampled source is partial, so links between unsampled subsystems are omitted rather than inferred.

Main entry points: [`aic8800_fdrv/rwnx_main.c`](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_main.c) (Driver interface), [`aic8800_fdrv/rwnx_tx.c`](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_tx.c) (WiFi transmit), [`aic8800_fdrv/aicwf_usb.c`](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/aicwf_usb.c) (USB transport), [`aic8800_fdrv/ipc_host.c`](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/ipc_host.c) (Host IPC)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_wifi["WiFi interfaces"]
  node_main["Driver interface<br/>[rwnx_main.c]"]
  node_mesh["Mesh support<br/>[rwnx_mesh.c]"]
  node_tdls["TDLS support<br/>[rwnx_tdls.c]"]
  node_radar["Radar handling<br/>[rwnx_radar.c]"]
end

subgraph group_datapath["WiFi datapath"]
  node_tx["WiFi transmit<br/>[rwnx_tx.c]"]
  node_rx["WiFi receive<br/>[rwnx_rx.c]"]
  node_txq["Transmit queues<br/>[rwnx_txq.c]"]
  node_ipcmsg["Firmware messages<br/>[rwnx_msg_tx.c]"]
  node_ipcrx["Message dispatch<br/>[rwnx_msg_rx.c]"]
  node_ipc["Host IPC<br/>[ipc_host.c]"]
end

subgraph group_device["Device transport"]
  node_usb["USB transport<br/>[aicwf_usb.c]"]
  node_sdio["SDIO transport<br/>[aicwf_sdio.c]"]
  node_pci["PCI transport<br/>[rwnx_pci.c]"]
end

subgraph group_startup["Firmware startup"]
  node_platform["Platform firmware<br/>[rwnx_platform.c]"]
  node_compat["Chip configuration"]
end

subgraph group_bluetooth["Bluetooth"]
  node_btloader["Bluetooth loader<br/>[aicbluetooth.c]"]
  node_btcmd["Bluetooth commands"]
  node_bttxrx["Bluetooth USB bus<br/>[aic_txrxif.c]"]
  node_btusb["Bluetooth USB<br/>[aicwf_usb.c]"]
end

node_linux(("Linux wireless stack"))
node_chip{{"AIC8800 device"}}

node_linux -->|"configures interfaces"| node_main
node_linux -->|"submits packets"| node_tx
node_rx -->|"delivers packets"| node_linux
node_main -->|"supports mesh"| node_mesh
node_main -->|"supports TDLS"| node_tdls
node_main -->|"handles radar"| node_radar
node_tx -->|"queues frames"| node_txq
node_tx -->|"transmits frames"| node_usb
node_usb -->|"receives frames"| node_rx
node_ipcmsg -->|"submits messages"| node_ipc
node_ipcrx -->|"receives messages"| node_ipc
node_ipc -->|"exchanges IPC"| node_chip
node_usb -->|"transfers data"| node_chip
node_sdio -->|"transfers data"| node_chip
node_pci -->|"connects device"| node_chip
node_platform -->|"uploads firmware"| node_chip
node_compat -->|"configures memory"| node_chip
node_btloader -->|"uses commands"| node_btcmd
node_btloader -->|"initializes bus"| node_bttxrx
node_bttxrx -->|"uses USB transport"| node_btusb
node_btusb -->|"loads firmware"| node_chip

click node_main "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_main.c"
click node_mesh "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_mesh.c"
click node_tdls "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_tdls.c"
click node_radar "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_radar.c"
click node_tx "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_tx.c"
click node_rx "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_rx.c"
click node_txq "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_txq.c"
click node_ipcmsg "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_msg_tx.c"
click node_ipcrx "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_msg_rx.c"
click node_ipc "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/ipc_host.c"
click node_usb "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/aicwf_usb.c"
click node_sdio "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/aicwf_sdio.c"
click node_pci "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_pci.c"
click node_platform "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_platform.c"
click node_compat "https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/aicwf_compat_8800dc.c"
click node_btloader "https://github.com/openipc/aic8800/blob/master/aic_load_fw/aicbluetooth.c"
click node_btcmd "https://github.com/openipc/aic8800/blob/master/aic_load_fw/aicbluetooth_cmds.c"
click node_bttxrx "https://github.com/openipc/aic8800/blob/master/aic_load_fw/aic_txrxif.c"
click node_btusb "https://github.com/openipc/aic8800/blob/master/aic_load_fw/aicwf_usb.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_mesh,node_tdls,node_radar toneBlue
class node_tx,node_rx,node_txq,node_ipcmsg,node_ipcrx,node_ipc toneAmber
class node_usb,node_sdio,node_pci toneMint
class node_platform,node_compat toneRose
class node_btloader,node_btcmd,node_bttxrx,node_btusb,node_linux,node_chip toneIndigo
```

## Components

### WiFi interfaces

- [Driver interface](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_main.c): `aic8800_fdrv/rwnx_main.c`
- [Mesh support](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_mesh.c): `aic8800_fdrv/rwnx_mesh.c`
- [TDLS support](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_tdls.c): `aic8800_fdrv/rwnx_tdls.c`
- [Radar handling](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_radar.c): `aic8800_fdrv/rwnx_radar.c`

### WiFi datapath

- [WiFi transmit](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_tx.c): `aic8800_fdrv/rwnx_tx.c`
- [WiFi receive](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_rx.c): `aic8800_fdrv/rwnx_rx.c`
- [Transmit queues](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_txq.c): `aic8800_fdrv/rwnx_txq.c`
- [Firmware messages](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_msg_tx.c): `aic8800_fdrv/rwnx_msg_tx.c`
- [Message dispatch](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_msg_rx.c): `aic8800_fdrv/rwnx_msg_rx.c`
- [Host IPC](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/ipc_host.c): `aic8800_fdrv/ipc_host.c`

### Device transport

- [USB transport](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/aicwf_usb.c): `aic8800_fdrv/aicwf_usb.c`
- [SDIO transport](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/aicwf_sdio.c): `aic8800_fdrv/aicwf_sdio.c`
- [PCI transport](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_pci.c): `aic8800_fdrv/rwnx_pci.c`

### Firmware startup

- [Platform firmware](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/rwnx_platform.c): `aic8800_fdrv/rwnx_platform.c`
- [Chip configuration](https://github.com/openipc/aic8800/blob/master/aic8800_fdrv/aicwf_compat_8800dc.c): `aic8800_fdrv/aicwf_compat_8800dc.c`

### Bluetooth

- [Bluetooth loader](https://github.com/openipc/aic8800/blob/master/aic_load_fw/aicbluetooth.c): `aic_load_fw/aicbluetooth.c`
- [Bluetooth commands](https://github.com/openipc/aic8800/blob/master/aic_load_fw/aicbluetooth_cmds.c): `aic_load_fw/aicbluetooth_cmds.c`
- [Bluetooth USB bus](https://github.com/openipc/aic8800/blob/master/aic_load_fw/aic_txrxif.c): `aic_load_fw/aic_txrxif.c`
- [Bluetooth USB](https://github.com/openipc/aic8800/blob/master/aic_load_fw/aicwf_usb.c): `aic_load_fw/aicwf_usb.c`

### Other components

- **Linux wireless stack**
- **AIC8800 device**

## Connections

- Linux wireless stack → Driver interface: configures interfaces
- Linux wireless stack → WiFi transmit: submits packets
- WiFi receive → Linux wireless stack: delivers packets
- Driver interface → Mesh support: supports mesh
- Driver interface → TDLS support: supports TDLS
- Driver interface → Radar handling: handles radar
- WiFi transmit → Transmit queues: queues frames
- WiFi transmit → USB transport: transmits frames
- USB transport → WiFi receive: receives frames
- Firmware messages → Host IPC: submits messages
- Message dispatch → Host IPC: receives messages
- Host IPC → AIC8800 device: exchanges IPC
- USB transport → AIC8800 device: transfers data
- SDIO transport → AIC8800 device: transfers data
- PCI transport → AIC8800 device: connects device
- Platform firmware → AIC8800 device: uploads firmware
- Chip configuration → AIC8800 device: configures memory
- Bluetooth loader → Bluetooth commands: uses commands
- Bluetooth loader → Bluetooth USB bus: initializes bus
- Bluetooth USB bus → Bluetooth USB: uses USB transport
- Bluetooth USB → AIC8800 device: loads firmware
