MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / emac3_write

Function emac3_write

pcsx2/DEV9/smap.cpp:254–324  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

252
253
254void emac3_write(u32 addr)
255{
256 u32 value = wswap(dev9Ru32(addr));
257 switch (addr)
258 {
259 case SMAP_R_EMAC3_MODE0_L:
260 //DevCon.WriteLn("DEV9: SMAP: SMAP_R_EMAC3_MODE0 write %x", value);
261 value = (value & (~SMAP_E3_SOFT_RESET)) | SMAP_E3_TXMAC_IDLE | SMAP_E3_RXMAC_IDLE;
262 dev9Ru16(SMAP_R_EMAC3_STA_CTRL_H) |= SMAP_E3_PHY_OP_COMP;
263 break;
264 case SMAP_R_EMAC3_TxMODE0_L:
265 //DevCon.WriteLn("DEV9: SMAP: SMAP_R_EMAC3_TxMODE0_L write %x", value);
266 //Process TX here ?
267 if (!(value & SMAP_E3_TX_GNP_0))
268 Console.Error("DEV9: SMAP_R_EMAC3_TxMODE0_L: SMAP_E3_TX_GNP_0 not set");
269
270 tx_process();
271 value = value & ~SMAP_E3_TX_GNP_0;
272 if (value)
273 Console.Error("DEV9: SMAP_R_EMAC3_TxMODE0_L: extra bits set !");
274 break;
275 case SMAP_R_EMAC3_TxMODE1_L:
276 //DevCon.WriteLn("DEV9: SMAP_R_EMAC3_TxMODE1_L 32bit write %x", value);
277 break;
278 case SMAP_R_EMAC3_STA_CTRL_L:
279 //DevCon.WriteLn("DEV9: SMAP: SMAP_R_EMAC3_STA_CTRL write %x", value);
280 {
281 if (value & (SMAP_E3_PHY_READ))
282 {
283 value |= SMAP_E3_PHY_OP_COMP;
284 const int reg = value & (SMAP_E3_PHY_REG_ADDR_MSK);
285 u16 val = dev9.phyregs[reg];
286 switch (reg)
287 {
288 case SMAP_DsPHYTER_BMSR:
289 if (has_link)
290 val |= SMAP_PHY_BMSR_LINK | SMAP_PHY_BMSR_ANCP;
291 break;
292 case SMAP_DsPHYTER_PHYSTS:
293 if (has_link)
294 val |= SMAP_PHY_STS_LINK | SMAP_PHY_STS_100M | SMAP_PHY_STS_FDX | SMAP_PHY_STS_ANCP;
295 break;
296 }
297 //DevCon.WriteLn("DEV9: phy_read %d: %x", reg, val);
298 value = (value & 0xFFFF) | (val << 16);
299 }
300 if (value & (SMAP_E3_PHY_WRITE))
301 {
302 value |= SMAP_E3_PHY_OP_COMP;
303 int reg = value & (SMAP_E3_PHY_REG_ADDR_MSK);
304 u16 val = value >> 16;
305 if (reg == SMAP_DsPHYTER_BMCR)
306 {
307 if (val & SMAP_PHY_BMCR_RST)
308 {
309 ad_reset();
310 }
311 val &= ~SMAP_PHY_BMCR_RST;

Callers 1

smap_write16Function · 0.85

Calls 5

wswapFunction · 0.85
tx_processFunction · 0.85
ad_resetFunction · 0.85
ErrorMethod · 0.45
WriteLnMethod · 0.45

Tested by

no test coverage detected