RTL_W8
RTL_W8 (HltClk, 'H'); /* 'R' would leave the clock running. */
RTL_W8 (Cfg9346, EE_ENB & ~EE_CS);
RTL_W8 (Cfg9346, EE_ENB);
RTL_W8 (Cfg9346, EE_ENB | dataval);
RTL_W8 (Cfg9346, EE_ENB | dataval | EE_SHIFT_CLK);
RTL_W8 (Cfg9346, EE_ENB);
RTL_W8 (Cfg9346, EE_ENB | EE_SHIFT_CLK);
RTL_W8 (Cfg9346, EE_ENB);
RTL_W8(Cfg9346, 0);
RTL_W8 (Config4, MDIO_WRITE1);
RTL_W8 (Config4, MDIO_WRITE1 | MDIO_CLK);
RTL_W8 (Config4, MDIO_DIR | dataval);
RTL_W8 (Config4, MDIO_DIR | dataval | MDIO_CLK);
RTL_W8 (Config4, 0);
RTL_W8 (Config4, MDIO_CLK);
RTL_W8 (Cfg9346, Cfg9346_Unlock);
RTL_W8 (Cfg9346, Cfg9346_Lock);
RTL_W8 (Config4, dataval);
RTL_W8 (Config4, dataval | MDIO_CLK);
RTL_W8 (Config4, 0);
RTL_W8 (Config4, MDIO_CLK);
RTL_W8 (HltClk, 'R');
RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
RTL_W8 (Config3, RTL_R8 (Config3) & ~Cfg3_Magic);
RTL_W8 (Cfg9346, Cfg9346_Lock);
RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
RTL_W8 (Cfg9346, Cfg9346_Unlock);
RTL_W8 (Config1, tp->mii.full_duplex ? 0x60 : 0x20);
RTL_W8 (Cfg9346, Cfg9346_Lock);
RTL_W8 (ChipCmd, CmdRxEnb);
RTL_W8 (ChipCmd, tmp8 & ~CmdRxEnb);
RTL_W8 (ChipCmd, tmp8);
RTL_W8 (ChipCmd, CmdRxEnb | CmdTxEnb);
RTL_W8 (Cfg9346, Cfg9346_Lock);
RTL_W8 (ChipCmd, 0);
RTL_W8 (Cfg9346, Cfg9346_Unlock);
RTL_W8 (HltClk, 'H'); /* 'R' would leave the clock running. */
RTL_W8 (Cfg9346, Cfg9346_Unlock);
RTL_W8 (Config3, cfg3);
RTL_W8 (Cfg9346, Cfg9346_Lock);
RTL_W8 (Config5, cfg5); /* need not unlock via Cfg9346 */
RTL_W8 (ChipCmd, 0);
RTL_W8 (ChipCmd, CmdReset);
RTL_W8 (HltClk, 'R');
RTL_W8 (Cfg9346, Cfg9346_Unlock);
RTL_W8 (Config1, tmp8);
RTL_W8 (Cfg9346, Cfg9346_Lock);
RTL_W8 (Cfg9346, Cfg9346_Unlock);
RTL_W8 (Config4, tmp8 & ~LWPTN);
RTL_W8 (Cfg9346, Cfg9346_Lock);
RTL_W8 (Config1, tmp8);
RTL_W8(tp, 0x2350, RTL_R8(tp, 0x2350) & ~BIT(0));
RTL_W8(tp, 0x2350, RTL_R8(tp, 0x2350) | BIT(0));
RTL_W8(tp, IBCR2, RTL_R8(tp, IBCR2) & ~0x01);
RTL_W8(tp, IBISR0, RTL_R8(tp, IBISR0) | 0x20);
RTL_W8(tp, IBCR0, RTL_R8(tp, IBCR0) & ~0x01);
RTL_W8(tp, 0x82, 0x01);
RTL_W8(tp, MaxTxPacketSize, jumbo ? 0x24 : 0x3f);
RTL_W8(tp, ChipCmd, CmdReset);
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Rdy_to_L23);
RTL_W8(tp, COMBO_LTR_EXTEND, RTL_R8(tp, COMBO_LTR_EXTEND) | COMBO_LTR_EXTEND_EN);
RTL_W8(tp, INT_CFG0_8125, val8);
RTL_W8(tp, INT_CFG0_8125, val8);
RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
RTL_W8(tp, Config1, RTL_R8(tp, Config1) | Speed_down);
RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
RTL_W8(tp, DBG_REG, 0x20);
RTL_W8(tp, DBG_REG, 0x06 | FIX_NAK_1 | FIX_NAK_2);
RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) | PFM_EN);
RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) | PFM_EN);
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN);
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~TX_10M_PS_EN);
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~TX_10M_PS_EN);
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN);
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN);
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~TX_10M_PS_EN);
RTL_W8(tp, DBG_REG, FIX_NAK_1);
RTL_W8(tp, Config1,
RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
RTL_W8(tp, Config1, cfg1 & ~LEDS0);
RTL_W8(tp, Config1, MEMMAP | IOMAP | VPD | PMEnable);
RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
RTL_W8(tp, MCU, RTL_R8(tp, MCU) | EN_NDP | EN_OOB_RESET);
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) | PFM_EN);
RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
RTL_W8(tp, MCU, RTL_R8(tp, MCU) | EN_NDP | EN_OOB_RESET);
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
RTL_W8(tp, Config1, RTL_R8(tp, Config1) & ~0x10);
RTL_W8(tp, 0xD8, RTL_R8(tp, 0xD8) & ~0x02);
RTL_W8(tp, INT_CFG0_8125, 0x00);
RTL_W8(tp, MaxTxPacketSize, EarlySize);
RTL_W8(tp, MaxTxPacketSize, TxPacketMax);
RTL_W8(tp, EarlyTxThres, NoEarlyTx);
RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb);
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
RTL_W8(tp, TxPoll, NPQ);
RTL_W8(tp, EEE_LED, RTL_R8(tp, EEE_LED) & ~0x07);
RTL_W8(tp, Config2, RTL_R8(tp, Config2) & ~MSIEnable);
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) & ~(CmdTxEnb | CmdRxEnb));
RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) & ~(CmdTxEnb | CmdRxEnb));
RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
RTL_W8(tp, Cfg9346, Cfg9346_Lock);
RTL_W8(tp, Cfg9346, Cfg9346_Unlock);
RTL_W8(tp, Config2, (val & ~clear) | set);
RTL_W8(tp, Config5, (val & ~clear) | set);
RTL_W8(tp, reg, val);