This project is dedicated to developing PlayStation 2 Ethernet drivers.
Each driver may be covered by a different software license. Please check the license of the driver before using it.
- Driver for the standard Sony Ethernet adapter.
- Based on
smap.irxfrom retail PS2 games. - Supports DMA transfers.
- Used as a loadable
.IRXmodule by.ELFapplications on the PS2. - License: check individual source files.
- Driver for the standard Sony Ethernet adapter used by PS2 Linux.
- Compatible API with
smap, licensed under GPL. - Integrates into the Linux kernel running on the IOP for networking support.
There are two main PS2 Ethernet drivers with different use cases:
- The official PS2 retail driver.
- Primarily used as a loadable
.IRXmodule by any.ELFapplication on the PS2. - Provides:
- EMAC and DMA initialization
- TX/RX interrupt handling
- A simple API for sending and receiving packets from the EE
- Use case: Homebrew games or applications can load
ps2smap.irxto send/receive data using their own networking stack (e.g., lwIP).
- Adapted for PS2 Linux.
- Integrates into the Linux kernel running on the IOP as part of the Linux networking stack.
- Uses the same base as
smapbut modified for Linux API compatibility and licensed under GPL. - Use case: Allows PS2 Linux to detect the network interface automatically, enabling commands like
ifconfigorping.
| Driver | Primary Use | Load Method | License |
|---|---|---|---|
smap |
PS2 retail / homebrew .ELF applications |
Manual .IRX |
Sony / Dan Potter (varies) |
smap-linux |
PS2 Linux kernel / networking | Automatic | GPL |
The PlayStation 2 includes a Sony Ethernet Adapter:
- PS2 Fat: compatible with SCPH-30000 to SCPH-50000 series (SCPH-10350 Ethernet Adapter)
The adapter supports 10/100 Mbps and full/half duplex via an MII interface.
- EE (Emotion Engine): main CPU, runs the game/application.
- IOP (I/O Processor): auxiliary CPU, runs IRX drivers and handles Ethernet.
Drivers execute on the IOP, exposing APIs to the EE through SIF RPC or direct calls.
- Uses circular TX/RX descriptors pointing to data buffers.
- Registers used include:
EMAC3,RXEND,TXEND,RXDNV,TXDNV. - Handles interrupts to signal packet transmission, reception, or errors.
INTR_EMAC3: EMAC3 interruptINTR_RXEND: packet receivedINTR_TXEND: packet transmittedINTR_RXDNV/INTR_TXDNV: invalid descriptor error
- Initialization / control:
SMap_Init(),SMap_Start(),SMap_Stop() - Transmission / reception:
SMap_CanSend(),SMap_Send(struct pbuf* pPacket)
SMap_HandleTXInterrupt(int iFlags),SMap_HandleRXEMACInterrupt(int iFlags) - Configuration / status:
SMap_GetMACAddress(),SMap_EnableInterrupts(int iFlags)
SMap_DisableInterrupts(int iFlags),SMap_ClearIRQ(int iFlags)
- Usually uses lwIP-style pbufs (
struct pbuf). - DMA buffers must reside in IOP-accessible memory, 16-byte aligned.
- Supports zero-copy transfers for large packets.
- smap: original Sony / Dan Potter code, license may vary.
- smap-linux: GPL, used in PS2 Linux official kit.
- Both expose a similar API, allowing interoperability between retail PS2 games and PS2 Linux.
sudo mkdir -p /usr/local/ps2dev
sudo chown -R $USER: $PS2DEV
export PS2DEV=/usr/local/ps2dev
export PS2SDK=$PS2DEV/ps2sdk
export GSKIT=$PS2DEV/gsKit
export PATH=$PATH:$PS2DEV/bin:$PS2DEV/ee/bin:$PS2DEV/iop/bin:$PS2DEV/dvp/bin:$PS2SDK/bin
git clone https://github.com/azagramac/ps2dev
cd ps2dev
./build-all.sh
./build-extra.shmake all
make install- ps2smap.irx
- ps2smap.notiopmod.elf
- ps2smap.notiopmod.stripped.elf
make clean