View | Details | Raw Unified | Return to bug 253374
Collapse All | Expand All

(-)/usr/src/sys/dev/usb/net/if_ure.c.new (-259 / +713 lines)
Lines 96-111 Link Here
96
 */
96
 */
97
static const STRUCT_USB_HOST_ID ure_devs[] = {
97
static const STRUCT_USB_HOST_ID ure_devs[] = {
98
#define	URE_DEV(v,p,i)	{ USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
98
#define	URE_DEV(v,p,i)	{ USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
99
	URE_DEV(LENOVO, RTL8153, 0),
99
	URE_DEV(LENOVO, RTL8153, URE_FLAG_8153),
100
	URE_DEV(LENOVO, TBT3LAN, 0),
100
	URE_DEV(LENOVO, TBT3LAN, 0),
101
	URE_DEV(LENOVO, TBT3LANGEN2, 0),
101
	URE_DEV(LENOVO, TBT3LANGEN2, 0),
102
	URE_DEV(LENOVO, ONELINK, 0),
102
	URE_DEV(LENOVO, ONELINK, 0),
103
	URE_DEV(LENOVO, USBCLAN, 0),
103
	URE_DEV(LENOVO, USBCLAN, 0),
104
	URE_DEV(LENOVO, USBCLANGEN2, 0),
104
	URE_DEV(LENOVO, USBCLANGEN2, 0),
105
	URE_DEV(NVIDIA, RTL8153, 0),
105
	URE_DEV(NVIDIA, RTL8153, URE_FLAG_8153),
106
	URE_DEV(REALTEK, RTL8152, URE_FLAG_8152),
106
	URE_DEV(REALTEK, RTL8152, URE_FLAG_8152),
107
	URE_DEV(REALTEK, RTL8153, 0),
107
	URE_DEV(REALTEK, RTL8153, URE_FLAG_8153),
108
	URE_DEV(TPLINK, RTL8153, 0),
108
	URE_DEV(TPLINK, RTL8153, URE_FLAG_8153),
109
	URE_DEV(REALTEK, RTL8156, URE_FLAG_8156),
109
#undef URE_DEV
110
#undef URE_DEV
110
};
111
};
111
112
Lines 141-146 Link Here
141
static int	ure_write_4(struct ure_softc *, uint16_t, uint16_t, uint32_t);
142
static int	ure_write_4(struct ure_softc *, uint16_t, uint16_t, uint32_t);
142
static uint16_t	ure_ocp_reg_read(struct ure_softc *, uint16_t);
143
static uint16_t	ure_ocp_reg_read(struct ure_softc *, uint16_t);
143
static void	ure_ocp_reg_write(struct ure_softc *, uint16_t, uint16_t);
144
static void	ure_ocp_reg_write(struct ure_softc *, uint16_t, uint16_t);
145
static void	ure_sram_write(struct ure_softc *, uint16_t, uint16_t);
144
146
145
static int	ure_sysctl_chipver(SYSCTL_HANDLER_ARGS);
147
static int	ure_sysctl_chipver(SYSCTL_HANDLER_ARGS);
146
148
Lines 149-244 Link Here
149
static void	ure_reset(struct ure_softc *);
151
static void	ure_reset(struct ure_softc *);
150
static int	ure_ifmedia_upd(struct ifnet *);
152
static int	ure_ifmedia_upd(struct ifnet *);
151
static void	ure_ifmedia_sts(struct ifnet *, struct ifmediareq *);
153
static void	ure_ifmedia_sts(struct ifnet *, struct ifmediareq *);
154
static void	ure_add_media_types(struct ure_softc *);
155
static void	ure_link_state(struct ure_softc *sc);
156
static int	ure_get_link_status(struct ure_softc *);
152
static int	ure_ioctl(struct ifnet *, u_long, caddr_t);
157
static int	ure_ioctl(struct ifnet *, u_long, caddr_t);
153
static void	ure_rtl8152_init(struct ure_softc *);
158
static void	ure_rtl8152_init(struct ure_softc *);
159
static void	ure_rtl8152_nic_reset(struct ure_softc *);
154
static void	ure_rtl8153_init(struct ure_softc *);
160
static void	ure_rtl8153_init(struct ure_softc *);
161
static void	ure_rtl8153b_init(struct ure_softc *);
162
static void	ure_rtl8153b_nic_reset(struct ure_softc *);
155
static void	ure_disable_teredo(struct ure_softc *);
163
static void	ure_disable_teredo(struct ure_softc *);
156
static void	ure_init_fifo(struct ure_softc *);
164
static void	ure_enable_aldps(struct ure_softc *, bool);
165
static uint16_t	ure_phy_status(struct ure_softc *, uint16_t);
157
static void	ure_rxcsum(int capenb, struct ure_rxpkt *rp, struct mbuf *m);
166
static void	ure_rxcsum(int capenb, struct ure_rxpkt *rp, struct mbuf *m);
158
static int	ure_txcsum(struct mbuf *m, int caps, uint32_t *regout);
167
static int	ure_txcsum(struct mbuf *m, int caps, uint32_t *regout);
159
168
160
static const struct usb_config ure_config_rx[URE_N_TRANSFER] = {
161
	{
162
		.type = UE_BULK,
163
		.endpoint = UE_ADDR_ANY,
164
		.direction = UE_DIR_IN,
165
		.bufsize = URE_TRANSFER_SIZE,
166
		.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
167
		.callback = ure_bulk_read_callback,
168
		.timeout = 0,	/* no timeout */
169
	},
170
	{
171
		.type = UE_BULK,
172
		.endpoint = UE_ADDR_ANY,
173
		.direction = UE_DIR_IN,
174
		.bufsize = URE_TRANSFER_SIZE,
175
		.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
176
		.callback = ure_bulk_read_callback,
177
		.timeout = 0,	/* no timeout */
178
	},
179
#if URE_N_TRANSFER == 4
180
	{
181
		.type = UE_BULK,
182
		.endpoint = UE_ADDR_ANY,
183
		.direction = UE_DIR_IN,
184
		.bufsize = URE_TRANSFER_SIZE,
185
		.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
186
		.callback = ure_bulk_read_callback,
187
		.timeout = 0,	/* no timeout */
188
	},
189
	{
190
		.type = UE_BULK,
191
		.endpoint = UE_ADDR_ANY,
192
		.direction = UE_DIR_IN,
193
		.bufsize = URE_TRANSFER_SIZE,
194
		.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
195
		.callback = ure_bulk_read_callback,
196
		.timeout = 0,	/* no timeout */
197
	},
198
#endif
199
};
200
201
static const struct usb_config ure_config_tx[URE_N_TRANSFER] = {
202
	{
203
		.type = UE_BULK,
204
		.endpoint = UE_ADDR_ANY,
205
		.direction = UE_DIR_OUT,
206
		.bufsize = URE_TRANSFER_SIZE,
207
		.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
208
		.callback = ure_bulk_write_callback,
209
		.timeout = 10000,	/* 10 seconds */
210
	},
211
	{
212
		.type = UE_BULK,
213
		.endpoint = UE_ADDR_ANY,
214
		.direction = UE_DIR_OUT,
215
		.bufsize = URE_TRANSFER_SIZE,
216
		.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
217
		.callback = ure_bulk_write_callback,
218
		.timeout = 10000,	/* 10 seconds */
219
	},
220
#if URE_N_TRANSFER == 4
221
	{
222
		.type = UE_BULK,
223
		.endpoint = UE_ADDR_ANY,
224
		.direction = UE_DIR_OUT,
225
		.bufsize = URE_TRANSFER_SIZE,
226
		.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
227
		.callback = ure_bulk_write_callback,
228
		.timeout = 10000,	/* 10 seconds */
229
	},
230
	{
231
		.type = UE_BULK,
232
		.endpoint = UE_ADDR_ANY,
233
		.direction = UE_DIR_OUT,
234
		.bufsize = URE_TRANSFER_SIZE,
235
		.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
236
		.callback = ure_bulk_write_callback,
237
		.timeout = 10000,	/* 10 seconds */
238
	},
239
#endif
240
};
241
242
static device_method_t ure_methods[] = {
169
static device_method_t ure_methods[] = {
243
	/* Device interface. */
170
	/* Device interface. */
244
	DEVMETHOD(device_probe, ure_probe),
171
	DEVMETHOD(device_probe, ure_probe),
Lines 283-288 Link Here
283
	.ue_mii_sts = ure_ifmedia_sts,
210
	.ue_mii_sts = ure_ifmedia_sts,
284
};
211
};
285
212
213
#define URE_SETBIT_1(sc, reg, index, x) \
214
	ure_write_1(sc, reg, index, ure_read_1(sc, reg, index) | (x))
215
#define URE_SETBIT_2(sc, reg, index, x) \
216
	ure_write_2(sc, reg, index, ure_read_2(sc, reg, index) | (x))
217
#define URE_SETBIT_4(sc, reg, index, x) \
218
	ure_write_4(sc, reg, index, ure_read_4(sc, reg, index) | (x))
219
220
#define URE_CLRBIT_1(sc, reg, index, x) \
221
	ure_write_1(sc, reg, index, ure_read_1(sc, reg, index) & ~(x))
222
#define URE_CLRBIT_2(sc, reg, index, x) \
223
	ure_write_2(sc, reg, index, ure_read_2(sc, reg, index) & ~(x))
224
#define URE_CLRBIT_4(sc, reg, index, x) \
225
	ure_write_4(sc, reg, index, ure_read_4(sc, reg, index) & ~(x))
226
286
static int
227
static int
287
ure_ctl(struct ure_softc *sc, uint8_t rw, uint16_t val, uint16_t index,
228
ure_ctl(struct ure_softc *sc, uint8_t rw, uint16_t val, uint16_t index,
288
    void *buf, int len)
229
    void *buf, int len)
Lines 435-440 Link Here
435
	ure_write_2(sc, reg, URE_MCU_TYPE_PLA, data);
376
	ure_write_2(sc, reg, URE_MCU_TYPE_PLA, data);
436
}
377
}
437
378
379
static void
380
ure_sram_write(struct ure_softc *sc, uint16_t addr, uint16_t data)
381
{
382
	
383
	ure_ocp_reg_write(sc, URE_OCP_SRAM_ADDR, addr);
384
	ure_ocp_reg_write(sc, URE_OCP_SRAM_DATA, data);
385
}
386
438
static int
387
static int
439
ure_miibus_readreg(device_t dev, int phy, int reg)
388
ure_miibus_readreg(device_t dev, int phy, int reg)
440
{
389
{
Lines 558-582 Link Here
558
	struct usb_attach_arg *uaa = device_get_ivars(dev);
507
	struct usb_attach_arg *uaa = device_get_ivars(dev);
559
	struct ure_softc *sc = device_get_softc(dev);
508
	struct ure_softc *sc = device_get_softc(dev);
560
	struct usb_ether *ue = &sc->sc_ue;
509
	struct usb_ether *ue = &sc->sc_ue;
510
	struct usb_config ure_config_rx[URE_MAX_RX];
511
	struct usb_config ure_config_tx[URE_MAX_TX];
561
	uint8_t iface_index;
512
	uint8_t iface_index;
562
	int error;
513
	int i, error;
563
514
564
	sc->sc_flags = USB_GET_DRIVER_INFO(uaa);
515
	sc->sc_flags = USB_GET_DRIVER_INFO(uaa);
565
	device_set_usb_desc(dev);
516
	device_set_usb_desc(dev);
566
	mtx_init(&sc->sc_mtx, device_get_nameunit(dev), NULL, MTX_DEF);
517
	mtx_init(&sc->sc_mtx, device_get_nameunit(dev), NULL, MTX_DEF);
567
518
568
	iface_index = URE_IFACE_IDX;
519
	iface_index = URE_IFACE_IDX;
520
521
	if (sc->sc_flags & (URE_FLAG_8153 | URE_FLAG_8153B))
522
		sc->sc_rxbufsz = URE_8153_RX_BUFSZ;
523
	else if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B))
524
		sc->sc_rxbufsz = URE_8156_RX_BUFSZ;
525
	else
526
		sc->sc_rxbufsz = URE_8152_RX_BUFSZ;
527
528
	for (i = 0; i < URE_MAX_RX; i++) {
529
		ure_config_rx[i] = (struct usb_config) {
530
			.type = UE_BULK,
531
			.endpoint = UE_ADDR_ANY,
532
			.direction = UE_DIR_IN,
533
			.bufsize = sc->sc_rxbufsz,
534
			.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
535
			.callback = ure_bulk_read_callback,
536
			.timeout = 0,	/* no timeout */
537
		};
538
	}
569
	error = usbd_transfer_setup(uaa->device, &iface_index, sc->sc_rx_xfer,
539
	error = usbd_transfer_setup(uaa->device, &iface_index, sc->sc_rx_xfer,
570
	    ure_config_rx, URE_N_TRANSFER, sc, &sc->sc_mtx);
540
	    ure_config_rx, URE_MAX_RX, sc, &sc->sc_mtx);
571
	if (error != 0) {
541
	if (error != 0) {
572
		device_printf(dev, "allocating USB RX transfers failed\n");
542
		device_printf(dev, "allocating USB RX transfers failed\n");
573
		goto detach;
543
		goto detach;
574
	}
544
	}
575
545
546
	for (i = 0; i < URE_MAX_TX; i++) {
547
		ure_config_tx[i] = (struct usb_config) {
548
			.type = UE_BULK,
549
			.endpoint = UE_ADDR_ANY,
550
			.direction = UE_DIR_OUT,
551
			.bufsize = URE_TX_BUFSZ,
552
			.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
553
			.callback = ure_bulk_write_callback,
554
			.timeout = 10000,	/* 10 seconds */
555
		};
556
	}
576
	error = usbd_transfer_setup(uaa->device, &iface_index, sc->sc_tx_xfer,
557
	error = usbd_transfer_setup(uaa->device, &iface_index, sc->sc_tx_xfer,
577
	    ure_config_tx, URE_N_TRANSFER, sc, &sc->sc_mtx);
558
	    ure_config_tx, URE_MAX_TX, sc, &sc->sc_mtx);
578
	if (error != 0) {
559
	if (error != 0) {
579
		usbd_transfer_unsetup(sc->sc_rx_xfer, URE_N_TRANSFER);
560
		usbd_transfer_unsetup(sc->sc_rx_xfer, URE_MAX_RX);
580
		device_printf(dev, "allocating USB TX transfers failed\n");
561
		device_printf(dev, "allocating USB TX transfers failed\n");
581
		goto detach;
562
		goto detach;
582
	}
563
	}
Lines 592-597 Link Here
592
		device_printf(dev, "could not attach interface\n");
573
		device_printf(dev, "could not attach interface\n");
593
		goto detach;
574
		goto detach;
594
	}
575
	}
576
595
	return (0);			/* success */
577
	return (0);			/* success */
596
578
597
detach:
579
detach:
Lines 605-612 Link Here
605
	struct ure_softc *sc = device_get_softc(dev);
587
	struct ure_softc *sc = device_get_softc(dev);
606
	struct usb_ether *ue = &sc->sc_ue;
588
	struct usb_ether *ue = &sc->sc_ue;
607
589
608
	usbd_transfer_unsetup(sc->sc_tx_xfer, URE_N_TRANSFER);
590
	usbd_transfer_unsetup(sc->sc_tx_xfer, URE_MAX_TX);
609
	usbd_transfer_unsetup(sc->sc_rx_xfer, URE_N_TRANSFER);
591
	usbd_transfer_unsetup(sc->sc_rx_xfer, URE_MAX_RX);
610
	uether_ifdetach(ue);
592
	uether_ifdetach(ue);
611
	mtx_destroy(&sc->sc_mtx);
593
	mtx_destroy(&sc->sc_mtx);
612
594
Lines 785-791 Link Here
785
		caps = if_getcapenable(ifp);
767
		caps = if_getcapenable(ifp);
786
768
787
		pos = 0;
769
		pos = 0;
788
		rem = URE_TRANSFER_SIZE;
770
		rem = URE_TX_BUFSZ;
789
		while (rem > sizeof(txpkt)) {
771
		while (rem > sizeof(txpkt)) {
790
			IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
772
			IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
791
			if (m == NULL)
773
			if (m == NULL)
Lines 895-916 Link Here
895
	switch (ver) {
877
	switch (ver) {
896
	case 0x4c00:
878
	case 0x4c00:
897
		sc->sc_chip |= URE_CHIP_VER_4C00;
879
		sc->sc_chip |= URE_CHIP_VER_4C00;
880
		sc->sc_flags = URE_FLAG_8152;
898
		break;
881
		break;
899
	case 0x4c10:
882
	case 0x4c10:
900
		sc->sc_chip |= URE_CHIP_VER_4C10;
883
		sc->sc_chip |= URE_CHIP_VER_4C10;
884
		sc->sc_flags = URE_FLAG_8152;
901
		break;
885
		break;
902
	case 0x5c00:
886
	case 0x5c00:
903
		sc->sc_chip |= URE_CHIP_VER_5C00;
887
		sc->sc_chip |= URE_CHIP_VER_5C00;
888
		sc->sc_flags = URE_FLAG_8153;
904
		break;
889
		break;
905
	case 0x5c10:
890
	case 0x5c10:
906
		sc->sc_chip |= URE_CHIP_VER_5C10;
891
		sc->sc_chip |= URE_CHIP_VER_5C10;
892
		sc->sc_flags = URE_FLAG_8153;
907
		break;
893
		break;
908
	case 0x5c20:
894
	case 0x5c20:
909
		sc->sc_chip |= URE_CHIP_VER_5C20;
895
		sc->sc_chip |= URE_CHIP_VER_5C20;
896
		sc->sc_flags = URE_FLAG_8153;
910
		break;
897
		break;
911
	case 0x5c30:
898
	case 0x5c30:
912
		sc->sc_chip |= URE_CHIP_VER_5C30;
899
		sc->sc_chip |= URE_CHIP_VER_5C30;
900
		sc->sc_flags = URE_FLAG_8153;
913
		break;
901
		break;
902
	case 0x6000:
903
		sc->sc_flags = URE_FLAG_8153B;
904
		sc->sc_chip |= URE_CHIP_VER_6000;
905
		break;
906
	case 0x6010:
907
		sc->sc_flags = URE_FLAG_8153B;
908
		sc->sc_chip |= URE_CHIP_VER_6010;
909
		break;
910
	case 0x7020:
911
		sc->sc_flags = URE_FLAG_8156;
912
		sc->sc_chip |= URE_CHIP_VER_7020;
913
		break;
914
	case 0x7030:
915
		sc->sc_flags = URE_FLAG_8156;
916
		sc->sc_chip |= URE_CHIP_VER_7030;
917
		break;
918
	case 0x7400:
919
		sc->sc_flags = URE_FLAG_8156B;
920
		sc->sc_chip |= URE_CHIP_VER_7400;
921
		break;
922
	case 0x7410:
923
		sc->sc_flags = URE_FLAG_8156B;
924
		sc->sc_chip |= URE_CHIP_VER_7410;
925
		break;
914
	default:
926
	default:
915
		device_printf(sc->sc_ue.ue_dev,
927
		device_printf(sc->sc_ue.ue_dev,
916
		    "unknown version 0x%04x\n", ver);
928
		    "unknown version 0x%04x\n", ver);
Lines 949-954 Link Here
949
	/* Initialize controller and get station address. */
961
	/* Initialize controller and get station address. */
950
	if (sc->sc_flags & URE_FLAG_8152)
962
	if (sc->sc_flags & URE_FLAG_8152)
951
		ure_rtl8152_init(sc);
963
		ure_rtl8152_init(sc);
964
	else if (sc->sc_flags & (URE_FLAG_8153B | URE_FLAG_8156 | URE_FLAG_8156B))
965
		ure_rtl8153b_init(sc);
952
	else
966
	else
953
		ure_rtl8153_init(sc);
967
		ure_rtl8153_init(sc);
954
968
Lines 972-984 Link Here
972
ure_attach_post_sub(struct usb_ether *ue)
986
ure_attach_post_sub(struct usb_ether *ue)
973
{
987
{
974
	struct sysctl_ctx_list *sctx;
988
	struct sysctl_ctx_list *sctx;
975
	struct sysctl_oid *soid;	
989
	struct sysctl_oid *soid;
976
	struct ure_softc *sc;
990
	struct ure_softc *sc = uether_getsc(ue);
977
	struct ifnet *ifp;
991
	struct ifnet *ifp = ue->ue_ifp;
978
	int error;
992
	int error = 0;
979
993
980
	sc = uether_getsc(ue);
981
	ifp = ue->ue_ifp;
982
	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
994
	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
983
	ifp->if_start = uether_start;
995
	ifp->if_start = uether_start;
984
	ifp->if_ioctl = ure_ioctl;
996
	ifp->if_ioctl = ure_ioctl;
Lines 1001-1009 Link Here
1001
	if_setcapenable(ifp, if_getcapabilities(ifp));
1013
	if_setcapenable(ifp, if_getcapabilities(ifp));
1002
1014
1003
	mtx_lock(&Giant);
1015
	mtx_lock(&Giant);
1004
	error = mii_attach(ue->ue_dev, &ue->ue_miibus, ifp,
1016
	if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B)) {
1005
	    uether_ifmedia_upd, ue->ue_methods->ue_mii_sts,
1017
		ifmedia_init(&sc->sc_ifmedia, IFM_IMASK, ure_ifmedia_upd,
1006
	    BMSR_DEFCAPMASK, sc->sc_phyno, MII_OFFSET_ANY, 0);
1018
		    ure_ifmedia_sts);
1019
		ure_add_media_types(sc);
1020
		ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_AUTO, 0, NULL);
1021
		ifmedia_set(&sc->sc_ifmedia, IFM_ETHER | IFM_AUTO);
1022
		sc->sc_ifmedia.ifm_media = IFM_ETHER | IFM_AUTO;
1023
	} else {
1024
		error = mii_attach(ue->ue_dev, &ue->ue_miibus, ifp,
1025
		    uether_ifmedia_upd, ue->ue_methods->ue_mii_sts,
1026
		    BMSR_DEFCAPMASK, sc->sc_phyno, MII_OFFSET_ANY, 0);
1027
	}
1007
	mtx_unlock(&Giant);
1028
	mtx_unlock(&Giant);
1008
1029
1009
	sctx = device_get_sysctl_ctx(sc->sc_ue.ue_dev);
1030
	sctx = device_get_sysctl_ctx(sc->sc_ue.ue_dev);
Lines 1022-1027 Link Here
1022
	struct ure_softc *sc = uether_getsc(ue);
1043
	struct ure_softc *sc = uether_getsc(ue);
1023
	struct ifnet *ifp = uether_getifp(ue);
1044
	struct ifnet *ifp = uether_getifp(ue);
1024
	uint16_t cpcr;
1045
	uint16_t cpcr;
1046
	uint32_t reg;
1025
1047
1026
	URE_LOCK_ASSERT(sc, MA_OWNED);
1048
	URE_LOCK_ASSERT(sc, MA_OWNED);
1027
1049
Lines 1031-1037 Link Here
1031
	/* Cancel pending I/O. */
1053
	/* Cancel pending I/O. */
1032
	ure_stop(ue);
1054
	ure_stop(ue);
1033
1055
1034
	ure_reset(sc);
1056
	if (sc->sc_flags & (URE_FLAG_8153B | URE_FLAG_8156 | URE_FLAG_8156B))
1057
		ure_rtl8153b_nic_reset(sc);
1058
	else
1059
		ure_reset(sc);
1035
1060
1036
	/* Set MAC address. */
1061
	/* Set MAC address. */
1037
	ure_write_1(sc, URE_PLA_CRWECR, URE_MCU_TYPE_PLA, URE_CRWECR_CONFIG);
1062
	ure_write_1(sc, URE_PLA_CRWECR, URE_MCU_TYPE_PLA, URE_CRWECR_CONFIG);
Lines 1039-1051 Link Here
1039
	    IF_LLADDR(ifp), 8);
1064
	    IF_LLADDR(ifp), 8);
1040
	ure_write_1(sc, URE_PLA_CRWECR, URE_MCU_TYPE_PLA, URE_CRWECR_NORAML);
1065
	ure_write_1(sc, URE_PLA_CRWECR, URE_MCU_TYPE_PLA, URE_CRWECR_NORAML);
1041
1066
1067
	/* Set RX EARLY timeout and size */
1068
	if (sc->sc_flags & URE_FLAG_8153) {
1069
		switch (usbd_get_speed(sc->sc_ue.ue_udev)) {
1070
		case USB_SPEED_SUPER:
1071
			reg = URE_COALESCE_SUPER / 8;
1072
			break;
1073
		case USB_SPEED_HIGH:
1074
			reg = URE_COALESCE_HIGH / 8;
1075
			break;
1076
		default:
1077
			reg = URE_COALESCE_SLOW / 8;
1078
			break;
1079
		}
1080
		ure_write_2(sc, URE_USB_RX_EARLY_AGG, URE_MCU_TYPE_USB, reg);
1081
		reg = URE_8153_RX_BUFSZ - (URE_FRAMELEN(if_getmtu(ifp)) +
1082
		    sizeof(struct ure_rxpkt) + URE_RXPKT_ALIGN);
1083
		ure_write_2(sc, URE_USB_RX_EARLY_SIZE, URE_MCU_TYPE_USB, reg / 4);
1084
	} else if (sc->sc_flags & URE_FLAG_8153B) {
1085
		ure_write_2(sc, URE_USB_RX_EARLY_AGG, URE_MCU_TYPE_USB, 158);
1086
		ure_write_2(sc, URE_USB_RX_EXTRA_AGG_TMR, URE_MCU_TYPE_USB, 1875);
1087
		reg = URE_8153_RX_BUFSZ - (URE_FRAMELEN(if_getmtu(ifp)) +
1088
		    sizeof(struct ure_rxpkt) + URE_RXPKT_ALIGN);
1089
		ure_write_2(sc, URE_USB_RX_EARLY_SIZE, URE_MCU_TYPE_USB, reg / 8);
1090
		ure_write_1(sc, URE_USB_UPT_RXDMA_OWN, URE_MCU_TYPE_USB,
1091
		    URE_OWN_UPDATE | URE_OWN_CLEAR);
1092
	} else if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B)) {
1093
		ure_write_2(sc, URE_USB_RX_EARLY_AGG, URE_MCU_TYPE_USB, 80);
1094
		ure_write_2(sc, URE_USB_RX_EXTRA_AGG_TMR, URE_MCU_TYPE_USB, 1875);
1095
		reg = URE_8156_RX_BUFSZ - (URE_FRAMELEN(if_getmtu(ifp)) +
1096
		    sizeof(struct ure_rxpkt) + URE_RXPKT_ALIGN);
1097
		ure_write_2(sc, URE_USB_RX_EARLY_SIZE, URE_MCU_TYPE_USB, reg / 8);
1098
		ure_write_1(sc, URE_USB_UPT_RXDMA_OWN, URE_MCU_TYPE_USB,
1099
		    URE_OWN_UPDATE | URE_OWN_CLEAR);
1100
	}
1101
1102
	if (sc->sc_flags & URE_FLAG_8156B) {
1103
		URE_CLRBIT_2(sc, URE_USB_FW_TASK, URE_MCU_TYPE_USB, URE_FC_PATCH_TASK);
1104
		uether_pause(&sc->sc_ue, hz / 500);
1105
		URE_SETBIT_2(sc, URE_USB_FW_TASK, URE_MCU_TYPE_USB, URE_FC_PATCH_TASK);
1106
	}
1107
	
1042
	/* Reset the packet filter. */
1108
	/* Reset the packet filter. */
1043
	ure_write_2(sc, URE_PLA_FMC, URE_MCU_TYPE_PLA,
1109
	URE_CLRBIT_2(sc, URE_PLA_FMC, URE_MCU_TYPE_PLA, URE_FMC_FCR_MCU_EN);
1044
	    ure_read_2(sc, URE_PLA_FMC, URE_MCU_TYPE_PLA) &
1110
	URE_SETBIT_2(sc, URE_PLA_FMC, URE_MCU_TYPE_PLA, URE_FMC_FCR_MCU_EN);
1045
	    ~URE_FMC_FCR_MCU_EN);
1046
	ure_write_2(sc, URE_PLA_FMC, URE_MCU_TYPE_PLA,
1047
	    ure_read_2(sc, URE_PLA_FMC, URE_MCU_TYPE_PLA) |
1048
	    URE_FMC_FCR_MCU_EN);
1049
1111
1050
	/* Enable RX VLANs if enabled */
1112
	/* Enable RX VLANs if enabled */
1051
	cpcr = ure_read_2(sc, URE_PLA_CPCR, URE_MCU_TYPE_PLA);
1113
	cpcr = ure_read_2(sc, URE_PLA_CPCR, URE_MCU_TYPE_PLA);
Lines 1059-1071 Link Here
1059
	ure_write_2(sc, URE_PLA_CPCR, URE_MCU_TYPE_PLA, cpcr);
1121
	ure_write_2(sc, URE_PLA_CPCR, URE_MCU_TYPE_PLA, cpcr);
1060
1122
1061
	/* Enable transmit and receive. */
1123
	/* Enable transmit and receive. */
1062
	ure_write_1(sc, URE_PLA_CR, URE_MCU_TYPE_PLA,
1124
	URE_SETBIT_1(sc, URE_PLA_CR, URE_MCU_TYPE_PLA, URE_CR_RE | URE_CR_TE);
1063
	    ure_read_1(sc, URE_PLA_CR, URE_MCU_TYPE_PLA) | URE_CR_RE |
1064
	    URE_CR_TE);
1065
1125
1066
	ure_write_2(sc, URE_PLA_MISC_1, URE_MCU_TYPE_PLA,
1126
	URE_CLRBIT_2(sc, URE_PLA_MISC_1, URE_MCU_TYPE_PLA, URE_RXDY_GATED_EN);
1067
	    ure_read_2(sc, URE_PLA_MISC_1, URE_MCU_TYPE_PLA) &
1068
	    ~URE_RXDY_GATED_EN);
1069
1127
1070
	/*  Configure RX filters. */
1128
	/*  Configure RX filters. */
1071
	ure_rxfilter(ue);
1129
	ure_rxfilter(ue);
Lines 1084-1109 Link Here
1084
{
1142
{
1085
	struct ure_softc *sc = uether_getsc(ue);
1143
	struct ure_softc *sc = uether_getsc(ue);
1086
	struct ifnet *ifp = uether_getifp(ue);
1144
	struct ifnet *ifp = uether_getifp(ue);
1087
	struct mii_data *mii = GET_MII(sc);
1145
	struct mii_data *mii;
1088
1146
1089
	URE_LOCK_ASSERT(sc, MA_OWNED);
1147
	URE_LOCK_ASSERT(sc, MA_OWNED);
1090
1148
1091
	(void)ifp;
1149
	(void)ifp;
1092
	for (int i = 0; i < URE_N_TRANSFER; i++)
1150
	for (int i = 0; i < URE_MAX_RX; i++)
1093
		DEVPRINTFN(13, sc->sc_ue.ue_dev,
1151
		DEVPRINTFN(13, sc->sc_ue.ue_dev,
1094
		    "rx[%d] = %d\n", i, USB_GET_STATE(sc->sc_rx_xfer[i]));
1152
		    "rx[%d] = %d\n", i, USB_GET_STATE(sc->sc_rx_xfer[i]));
1095
1153
1096
	for (int i = 0; i < URE_N_TRANSFER; i++)
1154
	for (int i = 0; i < URE_MAX_TX; i++)
1097
		DEVPRINTFN(13, sc->sc_ue.ue_dev,
1155
		DEVPRINTFN(13, sc->sc_ue.ue_dev,
1098
		    "tx[%d] = %d\n", i, USB_GET_STATE(sc->sc_tx_xfer[i]));
1156
		    "tx[%d] = %d\n", i, USB_GET_STATE(sc->sc_tx_xfer[i]));
1099
1157
1100
	mii_tick(mii);
1158
	if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B))
1101
	if ((sc->sc_flags & URE_FLAG_LINK) == 0
1159
		ure_link_state(sc);
1102
	    && mii->mii_media_status & IFM_ACTIVE &&
1160
	else {
1103
	    IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
1161
		mii = GET_MII(sc);
1104
		sc->sc_flags |= URE_FLAG_LINK;
1162
		mii_tick(mii);
1105
		sc->sc_rxstarted = 0;
1163
		if ((sc->sc_flags & URE_FLAG_LINK) == 0
1106
		ure_start(ue);
1164
			&& mii->mii_media_status & IFM_ACTIVE &&
1165
			IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
1166
			sc->sc_flags |= URE_FLAG_LINK;
1167
			sc->sc_rxstarted = 0;
1168
			ure_start(ue);
1169
		}
1107
	}
1170
	}
1108
}
1171
}
1109
1172
Lines 1171-1181 Link Here
1171
1234
1172
	if (!sc->sc_rxstarted) {
1235
	if (!sc->sc_rxstarted) {
1173
		sc->sc_rxstarted = 1;
1236
		sc->sc_rxstarted = 1;
1174
		for (i = 0; i != URE_N_TRANSFER; i++)
1237
		for (i = 0; i != URE_MAX_RX; i++)
1175
			usbd_transfer_start(sc->sc_rx_xfer[i]);
1238
			usbd_transfer_start(sc->sc_rx_xfer[i]);
1176
	}
1239
	}
1177
1240
1178
	for (i = 0; i != URE_N_TRANSFER; i++)
1241
	for (i = 0; i != URE_MAX_TX; i++)
1179
		usbd_transfer_start(sc->sc_tx_xfer[i]);
1242
		usbd_transfer_start(sc->sc_tx_xfer[i]);
1180
}
1243
}
1181
1244
Lines 1203-1214 Link Here
1203
ure_ifmedia_upd(struct ifnet *ifp)
1266
ure_ifmedia_upd(struct ifnet *ifp)
1204
{
1267
{
1205
	struct ure_softc *sc = ifp->if_softc;
1268
	struct ure_softc *sc = ifp->if_softc;
1206
	struct mii_data *mii = GET_MII(sc);
1269
	struct ifmedia *ifm = &sc->sc_ifmedia;
1270
	struct mii_data *mii;
1207
	struct mii_softc *miisc;
1271
	struct mii_softc *miisc;
1208
	int error;
1272
	int anar, gig, reg, locked, error;
1209
1273
1210
	URE_LOCK_ASSERT(sc, MA_OWNED);
1274
	if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B)) {
1275
		if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
1276
			return (EINVAL);
1211
1277
1278
		locked = mtx_owned(&sc->sc_mtx);
1279
		if (!locked)
1280
			URE_LOCK(sc);
1281
		reg = ure_ocp_reg_read(sc, 0xa5d4);
1282
		reg &= ~URE_ADV_2500TFDX;
1283
1284
		anar = gig = 0;
1285
		switch (IFM_SUBTYPE(ifm->ifm_media)) {
1286
		case IFM_AUTO:
1287
			anar |= ANAR_TX_FD | ANAR_TX | ANAR_10_FD | ANAR_10;
1288
			gig |= GTCR_ADV_1000TFDX | GTCR_ADV_1000THDX;
1289
			reg |= URE_ADV_2500TFDX;
1290
			break;
1291
		case IFM_2500_T:
1292
			anar |= ANAR_TX_FD | ANAR_TX | ANAR_10_FD | ANAR_10;
1293
			gig |= GTCR_ADV_1000TFDX | GTCR_ADV_1000THDX;
1294
			reg |= URE_ADV_2500TFDX;
1295
			ifp->if_baudrate = IF_Mbps(2500);
1296
			break;
1297
		case IFM_1000_T:
1298
			anar |= ANAR_TX_FD | ANAR_TX | ANAR_10_FD | ANAR_10;
1299
			gig |= GTCR_ADV_1000TFDX | GTCR_ADV_1000THDX;
1300
			ifp->if_baudrate = IF_Gbps(1);
1301
			break;
1302
		case IFM_100_TX:
1303
			anar |= ANAR_TX | ANAR_TX_FD;
1304
			ifp->if_baudrate = IF_Mbps(100);
1305
			break;
1306
		case IFM_10_T:
1307
			anar |= ANAR_10 | ANAR_10_FD;
1308
			ifp->if_baudrate = IF_Mbps(10);
1309
			break;
1310
		default:
1311
			device_printf(sc->sc_ue.ue_dev, "unsupported media type\n");
1312
			if (!locked)
1313
				URE_UNLOCK(sc);
1314
			return (EINVAL);
1315
		}
1316
1317
		ure_ocp_reg_write(sc, URE_OCP_BASE_MII + MII_ANAR * 2,
1318
		    anar | ANAR_PAUSE_ASYM | ANAR_FC); 
1319
		ure_ocp_reg_write(sc, URE_OCP_BASE_MII + MII_100T2CR * 2, gig); 
1320
		ure_ocp_reg_write(sc, 0xa5d4, reg);
1321
		ure_ocp_reg_write(sc, URE_OCP_BASE_MII + MII_BMCR,
1322
		    BMCR_AUTOEN | BMCR_STARTNEG);
1323
		if (!locked)
1324
			URE_UNLOCK(sc);
1325
		return (0);
1326
	}
1327
1328
	mii = GET_MII(sc);
1329
1330
	URE_LOCK_ASSERT(sc, MA_OWNED);
1212
	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
1331
	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
1213
		PHY_RESET(miisc);
1332
		PHY_RESET(miisc);
1214
	error = mii_mediachg(mii);
1333
	error = mii_mediachg(mii);
Lines 1223-1230 Link Here
1223
{
1342
{
1224
	struct ure_softc *sc;
1343
	struct ure_softc *sc;
1225
	struct mii_data *mii;
1344
	struct mii_data *mii;
1345
	uint16_t status=0;
1226
1346
1227
	sc = ifp->if_softc;
1347
	sc = ifp->if_softc;
1348
	if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B)) {
1349
		URE_LOCK(sc);
1350
		ifmr->ifm_status = IFM_AVALID;
1351
		if (ure_get_link_status(sc)) {
1352
			ifmr->ifm_status |= IFM_ACTIVE;
1353
			status = ure_read_2(sc, URE_PLA_PHYSTATUS,
1354
			    URE_MCU_TYPE_PLA);
1355
			if ((status & URE_PHYSTATUS_FDX) ||
1356
			    (status & URE_PHYSTATUS_2500MBPS)) 
1357
				ifmr->ifm_active |= IFM_FDX;
1358
			else
1359
				ifmr->ifm_active |= IFM_HDX;
1360
			if (status & URE_PHYSTATUS_10MBPS)
1361
				ifmr->ifm_active |= IFM_10_T;
1362
			else if (status & URE_PHYSTATUS_100MBPS)
1363
				ifmr->ifm_active |= IFM_100_TX;
1364
			else if (status & URE_PHYSTATUS_1000MBPS)
1365
				ifmr->ifm_active |= IFM_1000_T;
1366
			else if (status & URE_PHYSTATUS_2500MBPS)
1367
				ifmr->ifm_active |= IFM_2500_T;
1368
		}
1369
		URE_UNLOCK(sc);
1370
		return;
1371
	}
1372
1228
	mii = GET_MII(sc);
1373
	mii = GET_MII(sc);
1229
1374
1230
	URE_LOCK(sc);
1375
	URE_LOCK(sc);
Lines 1234-1248 Link Here
1234
	URE_UNLOCK(sc);
1379
	URE_UNLOCK(sc);
1235
}
1380
}
1236
1381
1382
static void
1383
ure_add_media_types(struct ure_softc *sc)
1384
{
1385
1386
	ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_10_T, 0, NULL);
1387
	ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_10_T | IFM_FDX, 0, NULL);
1388
	ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_100_TX, 0, NULL);
1389
	ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_100_TX | IFM_FDX, 0, NULL);
1390
	ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL);
1391
	ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_2500_T | IFM_FDX, 0, NULL);
1392
}
1393
1394
static void
1395
ure_link_state(struct ure_softc *sc)
1396
{
1397
	struct ifnet *ifp = uether_getifp(&sc->sc_ue);
1398
1399
	if (ure_get_link_status(sc)) {
1400
		if (ifp->if_link_state != LINK_STATE_UP) {
1401
			if_link_state_change(ifp, LINK_STATE_UP);
1402
			/* Enable transmit and receive. */
1403
			URE_SETBIT_1(sc, URE_PLA_CR, URE_MCU_TYPE_PLA, URE_CR_RE | URE_CR_TE);
1404
			
1405
			if (ure_read_2(sc, URE_PLA_PHYSTATUS, URE_MCU_TYPE_PLA) &
1406
			    URE_PHYSTATUS_2500MBPS)
1407
				URE_CLRBIT_2(sc, URE_PLA_MAC_PWR_CTRL4, URE_MCU_TYPE_PLA, 0x40);
1408
			else
1409
				URE_SETBIT_2(sc, URE_PLA_MAC_PWR_CTRL4, URE_MCU_TYPE_PLA, 0x40);
1410
		}
1411
	} else {
1412
		if (ifp->if_link_state != LINK_STATE_DOWN) {
1413
			if_link_state_change(ifp, LINK_STATE_DOWN);
1414
		}
1415
	}
1416
}
1417
1237
static int
1418
static int
1419
ure_get_link_status(struct ure_softc *sc)
1420
{
1421
1422
	if (ure_read_2(sc, URE_PLA_PHYSTATUS, URE_MCU_TYPE_PLA) &
1423
	    URE_PHYSTATUS_LINK) {
1424
		sc->sc_flags |= URE_FLAG_LINK;
1425
		return (1);
1426
	} else {
1427
1428
		sc->sc_flags &= ~URE_FLAG_LINK;
1429
		return (0);
1430
	}
1431
}
1432
1433
static int
1238
ure_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
1434
ure_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
1239
{
1435
{
1240
	struct usb_ether *ue = ifp->if_softc;
1436
	struct usb_ether *ue = ifp->if_softc;
1241
	struct ure_softc *sc;
1437
	struct ure_softc *sc = uether_getsc(ue);;
1242
	struct ifreq *ifr;
1438
	struct ifreq *ifr;
1243
	int error, mask, reinit;
1439
	int error, mask, reinit;
1244
1440
1245
	sc = uether_getsc(ue);
1246
	ifr = (struct ifreq *)data;
1441
	ifr = (struct ifreq *)data;
1247
	error = 0;
1442
	error = 0;
1248
	reinit = 0;
1443
	reinit = 0;
Lines 1297-1302 Link Here
1297
			if_setmtu(ifp, ifr->ifr_mtu);
1492
			if_setmtu(ifp, ifr->ifr_mtu);
1298
		URE_UNLOCK(sc);
1493
		URE_UNLOCK(sc);
1299
		break;
1494
		break;
1495
 
1496
	case SIOCGIFMEDIA:
1497
	case SIOCSIFMEDIA:
1498
		if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B))
1499
			error = ifmedia_ioctl(ifp, ifr, &sc->sc_ifmedia, cmd);
1500
		else
1501
			error = uether_ioctl(ifp, cmd, data);
1502
		break;
1300
1503
1301
	default:
1504
	default:
1302
		error = uether_ioctl(ifp, cmd, data);
1505
		error = uether_ioctl(ifp, cmd, data);
Lines 1310-1336 Link Here
1310
{
1513
{
1311
	uint32_t pwrctrl;
1514
	uint32_t pwrctrl;
1312
1515
1313
	/* Disable ALDPS. */
1516
	ure_enable_aldps(sc, false);
1314
	ure_ocp_reg_write(sc, URE_OCP_ALDPS_CONFIG, URE_ENPDNPS | URE_LINKENA |
1315
	    URE_DIS_SDSAVE);
1316
	uether_pause(&sc->sc_ue, hz / 50);
1317
1517
1318
	if (sc->sc_chip & URE_CHIP_VER_4C00) {
1518
	if (sc->sc_chip & URE_CHIP_VER_4C00) {
1319
		ure_write_2(sc, URE_PLA_LED_FEATURE, URE_MCU_TYPE_PLA,
1519
		URE_CLRBIT_2(sc, URE_PLA_LED_FEATURE, URE_MCU_TYPE_PLA, URE_LED_MODE_MASK);
1320
		    ure_read_2(sc, URE_PLA_LED_FEATURE, URE_MCU_TYPE_PLA) &
1321
		    ~URE_LED_MODE_MASK);
1322
	}
1520
	}
1323
1521
1324
	ure_write_2(sc, URE_USB_UPS_CTRL, URE_MCU_TYPE_USB,
1522
	URE_CLRBIT_2(sc, URE_USB_UPS_CTRL, URE_MCU_TYPE_USB, URE_POWER_CUT);
1325
	    ure_read_2(sc, URE_USB_UPS_CTRL, URE_MCU_TYPE_USB) &
1326
	    ~URE_POWER_CUT);
1327
	ure_write_2(sc, URE_USB_PM_CTRL_STATUS, URE_MCU_TYPE_USB,
1328
	    ure_read_2(sc, URE_USB_PM_CTRL_STATUS, URE_MCU_TYPE_USB) &
1329
	    ~URE_RESUME_INDICATE);
1330
1523
1331
	ure_write_2(sc, URE_PLA_PHY_PWR, URE_MCU_TYPE_PLA,
1524
	URE_CLRBIT_2(sc, URE_USB_PM_CTRL_STATUS, URE_MCU_TYPE_USB, URE_RESUME_INDICATE);
1332
	    ure_read_2(sc, URE_PLA_PHY_PWR, URE_MCU_TYPE_PLA) |
1525
1333
	    URE_TX_10M_IDLE_EN | URE_PFM_PWM_SWITCH);
1526
	URE_SETBIT_2(sc, URE_PLA_PHY_PWR, URE_MCU_TYPE_PLA, URE_TX_10M_IDLE_EN | URE_PFM_PWM_SWITCH);
1527
1334
	pwrctrl = ure_read_4(sc, URE_PLA_MAC_PWR_CTRL, URE_MCU_TYPE_PLA);
1528
	pwrctrl = ure_read_4(sc, URE_PLA_MAC_PWR_CTRL, URE_MCU_TYPE_PLA);
1335
	pwrctrl &= ~URE_MCU_CLK_RATIO_MASK;
1529
	pwrctrl &= ~URE_MCU_CLK_RATIO_MASK;
1336
	pwrctrl |= URE_MCU_CLK_RATIO | URE_D3_CLK_GATED_EN;
1530
	pwrctrl |= URE_MCU_CLK_RATIO | URE_D3_CLK_GATED_EN;
Lines 1340-1355 Link Here
1340
	    URE_SPDWN_LINKCHG_MSK);
1534
	    URE_SPDWN_LINKCHG_MSK);
1341
1535
1342
	/* Enable Rx aggregation. */
1536
	/* Enable Rx aggregation. */
1343
	ure_write_2(sc, URE_USB_USB_CTRL, URE_MCU_TYPE_USB,
1537
	URE_CLRBIT_2(sc, URE_USB_USB_CTRL, URE_MCU_TYPE_USB, URE_RX_AGG_DISABLE | URE_RX_ZERO_EN);
1344
	    ure_read_2(sc, URE_USB_USB_CTRL, URE_MCU_TYPE_USB) &
1345
	    ~URE_RX_AGG_DISABLE);
1346
1538
1347
	/* Disable ALDPS. */
1539
	ure_enable_aldps(sc, false);
1348
	ure_ocp_reg_write(sc, URE_OCP_ALDPS_CONFIG, URE_ENPDNPS | URE_LINKENA |
1349
	    URE_DIS_SDSAVE);
1350
	uether_pause(&sc->sc_ue, hz / 50);
1351
1540
1352
	ure_init_fifo(sc);
1541
	ure_rtl8152_nic_reset(sc);
1353
1542
1354
	ure_write_1(sc, URE_USB_TX_AGG, URE_MCU_TYPE_USB,
1543
	ure_write_1(sc, URE_USB_TX_AGG, URE_MCU_TYPE_USB,
1355
	    URE_TX_AGG_MAX_THRESHOLD);
1544
	    URE_TX_AGG_MAX_THRESHOLD);
Lines 1365-1374 Link Here
1365
	uint8_t u1u2[8];
1554
	uint8_t u1u2[8];
1366
	int i;
1555
	int i;
1367
1556
1368
	/* Disable ALDPS. */
1557
	ure_enable_aldps(sc, false);
1369
	ure_ocp_reg_write(sc, URE_OCP_POWER_CFG,
1370
	    ure_ocp_reg_read(sc, URE_OCP_POWER_CFG) & ~URE_EN_ALDPS);
1371
	uether_pause(&sc->sc_ue, hz / 50);
1372
1558
1373
	memset(u1u2, 0x00, sizeof(u1u2));
1559
	memset(u1u2, 0x00, sizeof(u1u2));
1374
	ure_write_mem(sc, URE_USB_TOLERANCE,
1560
	ure_write_mem(sc, URE_USB_TOLERANCE,
Lines 1395-1403 Link Here
1395
		device_printf(sc->sc_ue.ue_dev,
1581
		device_printf(sc->sc_ue.ue_dev,
1396
		    "timeout waiting for phy to stabilize\n");
1582
		    "timeout waiting for phy to stabilize\n");
1397
1583
1398
	ure_write_2(sc, URE_USB_U2P3_CTRL, URE_MCU_TYPE_USB,
1584
	URE_CLRBIT_2(sc, URE_USB_U2P3_CTRL, URE_MCU_TYPE_USB, URE_U2P3_ENABLE);
1399
	    ure_read_2(sc, URE_USB_U2P3_CTRL, URE_MCU_TYPE_USB) &
1400
	    ~URE_U2P3_ENABLE);
1401
1585
1402
	if (sc->sc_chip & URE_CHIP_VER_5C10) {
1586
	if (sc->sc_chip & URE_CHIP_VER_5C10) {
1403
		val = ure_read_2(sc, URE_USB_SSPHYLINK2, URE_MCU_TYPE_USB);
1587
		val = ure_read_2(sc, URE_USB_SSPHYLINK2, URE_MCU_TYPE_USB);
Lines 1405-1418 Link Here
1405
		val |= URE_PWD_DN_SCALE(96);
1589
		val |= URE_PWD_DN_SCALE(96);
1406
		ure_write_2(sc, URE_USB_SSPHYLINK2, URE_MCU_TYPE_USB, val);
1590
		ure_write_2(sc, URE_USB_SSPHYLINK2, URE_MCU_TYPE_USB, val);
1407
1591
1408
		ure_write_1(sc, URE_USB_USB2PHY, URE_MCU_TYPE_USB,
1592
		URE_SETBIT_1(sc, URE_USB_USB2PHY, URE_MCU_TYPE_USB, URE_USB2PHY_L1 | URE_USB2PHY_SUSPEND);
1409
		    ure_read_1(sc, URE_USB_USB2PHY, URE_MCU_TYPE_USB) |
1593
	} else if (sc->sc_chip & URE_CHIP_VER_5C20)
1410
		    URE_USB2PHY_L1 | URE_USB2PHY_SUSPEND);
1594
		URE_CLRBIT_1(sc, URE_PLA_DMY_REG0, URE_MCU_TYPE_PLA, URE_ECM_ALDPS);
1411
	} else if (sc->sc_chip & URE_CHIP_VER_5C20) {
1595
1412
		ure_write_1(sc, URE_PLA_DMY_REG0, URE_MCU_TYPE_PLA,
1413
		    ure_read_1(sc, URE_PLA_DMY_REG0, URE_MCU_TYPE_PLA) &
1414
		    ~URE_ECM_ALDPS);
1415
	}
1416
	if (sc->sc_chip & (URE_CHIP_VER_5C20 | URE_CHIP_VER_5C30)) {
1596
	if (sc->sc_chip & (URE_CHIP_VER_5C20 | URE_CHIP_VER_5C30)) {
1417
		val = ure_read_1(sc, URE_USB_CSR_DUMMY1, URE_MCU_TYPE_USB);
1597
		val = ure_read_1(sc, URE_USB_CSR_DUMMY1, URE_MCU_TYPE_USB);
1418
		if (ure_read_2(sc, URE_USB_BURST_SIZE, URE_MCU_TYPE_USB) ==
1598
		if (ure_read_2(sc, URE_USB_BURST_SIZE, URE_MCU_TYPE_USB) ==
Lines 1423-1439 Link Here
1423
		ure_write_1(sc, URE_USB_CSR_DUMMY1, URE_MCU_TYPE_USB, val);
1603
		ure_write_1(sc, URE_USB_CSR_DUMMY1, URE_MCU_TYPE_USB, val);
1424
	}
1604
	}
1425
1605
1426
	ure_write_1(sc, URE_USB_CSR_DUMMY2, URE_MCU_TYPE_USB,
1606
	URE_SETBIT_1(sc, URE_USB_CSR_DUMMY2, URE_MCU_TYPE_USB, URE_EP4_FULL_FC);
1427
	    ure_read_1(sc, URE_USB_CSR_DUMMY2, URE_MCU_TYPE_USB) |
1428
	    URE_EP4_FULL_FC);
1429
1607
1430
	ure_write_2(sc, URE_USB_WDT11_CTRL, URE_MCU_TYPE_USB,
1608
	URE_CLRBIT_2(sc, URE_USB_WDT11_CTRL, URE_MCU_TYPE_USB, URE_TIMER11_EN);
1431
	    ure_read_2(sc, URE_USB_WDT11_CTRL, URE_MCU_TYPE_USB) &
1432
	    ~URE_TIMER11_EN);
1433
1609
1434
	ure_write_2(sc, URE_PLA_LED_FEATURE, URE_MCU_TYPE_PLA,
1610
	URE_CLRBIT_2(sc, URE_PLA_LED_FEATURE, URE_MCU_TYPE_PLA, URE_LED_MODE_MASK);
1435
	    ure_read_2(sc, URE_PLA_LED_FEATURE, URE_MCU_TYPE_PLA) &
1436
	    ~URE_LED_MODE_MASK);
1437
1611
1438
	if ((sc->sc_chip & URE_CHIP_VER_5C10) &&
1612
	if ((sc->sc_chip & URE_CHIP_VER_5C10) &&
1439
	    usbd_get_speed(sc->sc_ue.ue_udev) != USB_SPEED_SUPER)
1613
	    usbd_get_speed(sc->sc_ue.ue_udev) != USB_SPEED_SUPER)
Lines 1450-1462 Link Here
1450
1624
1451
	ure_write_2(sc, URE_USB_CONNECT_TIMER, URE_MCU_TYPE_USB, 0x0001);
1625
	ure_write_2(sc, URE_USB_CONNECT_TIMER, URE_MCU_TYPE_USB, 0x0001);
1452
1626
1453
	ure_write_2(sc, URE_USB_POWER_CUT, URE_MCU_TYPE_USB,
1627
	URE_CLRBIT_2(sc, URE_USB_POWER_CUT, URE_MCU_TYPE_USB, URE_PWR_EN | URE_PHASE2_EN);
1454
	    ure_read_2(sc, URE_USB_POWER_CUT, URE_MCU_TYPE_USB) &
1455
	    ~(URE_PWR_EN | URE_PHASE2_EN));
1456
	ure_write_2(sc, URE_USB_MISC_0, URE_MCU_TYPE_USB,
1457
	    ure_read_2(sc, URE_USB_MISC_0, URE_MCU_TYPE_USB) &
1458
	    ~URE_PCUT_STATUS);
1459
1628
1629
	URE_CLRBIT_2(sc, URE_USB_MISC_0, URE_MCU_TYPE_USB, URE_PCUT_STATUS);
1630
1460
	memset(u1u2, 0xff, sizeof(u1u2));
1631
	memset(u1u2, 0xff, sizeof(u1u2));
1461
	ure_write_mem(sc, URE_USB_TOLERANCE,
1632
	ure_write_mem(sc, URE_USB_TOLERANCE,
1462
	    URE_MCU_TYPE_USB | URE_BYTE_EN_SIX_BYTES, u1u2, sizeof(u1u2));
1633
	    URE_MCU_TYPE_USB | URE_BYTE_EN_SIX_BYTES, u1u2, sizeof(u1u2));
Lines 1484-1500 Link Here
1484
	ure_write_mem(sc, URE_USB_TOLERANCE,
1655
	ure_write_mem(sc, URE_USB_TOLERANCE,
1485
	    URE_MCU_TYPE_USB | URE_BYTE_EN_SIX_BYTES, u1u2, sizeof(u1u2));
1656
	    URE_MCU_TYPE_USB | URE_BYTE_EN_SIX_BYTES, u1u2, sizeof(u1u2));
1486
1657
1487
	/* Disable ALDPS. */
1658
	ure_enable_aldps(sc, false);
1659
1660
	if (sc->sc_chip & (URE_CHIP_VER_5C00 | URE_CHIP_VER_5C10 |
1661
	    URE_CHIP_VER_5C20)) {
1662
			ure_ocp_reg_write(sc, URE_OCP_ADC_CFG,
1663
			    URE_CKADSEL_L | URE_ADC_EN | URE_EN_EMI_L);
1664
	}
1665
	if (sc->sc_chip & URE_CHIP_VER_5C00) {
1666
		ure_ocp_reg_write(sc, URE_OCP_EEE_CFG,
1667
		    ure_ocp_reg_read(sc, URE_OCP_EEE_CFG) &
1668
		    ~URE_CTAP_SHORT_EN);
1669
	}
1488
	ure_ocp_reg_write(sc, URE_OCP_POWER_CFG,
1670
	ure_ocp_reg_write(sc, URE_OCP_POWER_CFG,
1489
	    ure_ocp_reg_read(sc, URE_OCP_POWER_CFG) & ~URE_EN_ALDPS);
1671
	    ure_ocp_reg_read(sc, URE_OCP_POWER_CFG) |
1490
	uether_pause(&sc->sc_ue, hz / 50);
1672
	    URE_EEE_CLKDIV_EN);
1673
	ure_ocp_reg_write(sc, URE_OCP_DOWN_SPEED,
1674
	    ure_ocp_reg_read(sc, URE_OCP_DOWN_SPEED) |
1675
	    URE_EN_10M_BGOFF);
1676
	ure_ocp_reg_write(sc, URE_OCP_POWER_CFG,
1677
	    ure_ocp_reg_read(sc, URE_OCP_POWER_CFG) |
1678
	    URE_EN_10M_PLLOFF);
1679
	ure_sram_write(sc, URE_SRAM_IMPEDANCE, 0x0b13);
1680
	URE_SETBIT_2(sc, URE_PLA_PHY_PWR, URE_MCU_TYPE_PLA, URE_PFM_PWM_SWITCH);
1491
1681
1492
	ure_init_fifo(sc);
1682
	/* Enable LPF corner auto tune. */
1683
	ure_sram_write(sc, URE_SRAM_LPF_CFG, 0xf70f);
1493
1684
1685
	/* Adjust 10M amplitude. */
1686
	ure_sram_write(sc, URE_SRAM_10M_AMP1, 0x00af);
1687
	ure_sram_write(sc, URE_SRAM_10M_AMP2, 0x0208);
1688
1689
	ure_rtl8152_nic_reset(sc);
1690
1494
	/* Enable Rx aggregation. */
1691
	/* Enable Rx aggregation. */
1495
	ure_write_2(sc, URE_USB_USB_CTRL, URE_MCU_TYPE_USB,
1692
	URE_CLRBIT_2(sc, URE_USB_USB_CTRL, URE_MCU_TYPE_USB, URE_RX_AGG_DISABLE | URE_RX_ZERO_EN);
1496
	    ure_read_2(sc, URE_USB_USB_CTRL, URE_MCU_TYPE_USB) &
1497
	    ~URE_RX_AGG_DISABLE);
1498
1693
1499
	val = ure_read_2(sc, URE_USB_U2P3_CTRL, URE_MCU_TYPE_USB);
1694
	val = ure_read_2(sc, URE_USB_U2P3_CTRL, URE_MCU_TYPE_USB);
1500
	if (!(sc->sc_chip & (URE_CHIP_VER_5C00 | URE_CHIP_VER_5C10)))
1695
	if (!(sc->sc_chip & (URE_CHIP_VER_5C00 | URE_CHIP_VER_5C10)))
Lines 1509-1514 Link Here
1509
}
1704
}
1510
1705
1511
static void
1706
static void
1707
ure_rtl8153b_init(struct ure_softc *sc)
1708
{
1709
	uint16_t val;
1710
	int i;
1711
1712
	if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B)) {
1713
		URE_CLRBIT_1(sc, 0xd26b, URE_MCU_TYPE_USB, 0x01);
1714
		ure_write_2(sc, 0xd32a, URE_MCU_TYPE_USB, 0);
1715
		URE_SETBIT_2(sc, 0xcfee, URE_MCU_TYPE_USB, 0x0020);
1716
	}
1717
1718
	if (sc->sc_flags & URE_FLAG_8156B) {
1719
		URE_SETBIT_2(sc, 0xb460, URE_MCU_TYPE_USB, 0x08);
1720
	}
1721
1722
	ure_enable_aldps(sc, false);
1723
	
1724
	/* Disable U1U2 */
1725
	URE_CLRBIT_2(sc, URE_USB_LPM_CONFIG, URE_MCU_TYPE_USB, URE_LPM_U1U2_EN);
1726
1727
	/* Wait loading flash */
1728
	if (sc->sc_chip == URE_CHIP_VER_7410)
1729
		if ((ure_read_2(sc, 0xd3ae, URE_MCU_TYPE_PLA) & 0x0002) &&
1730
		    !(ure_read_2(sc, 0xd284, URE_MCU_TYPE_USB) & 0x0020)) {
1731
			for (i=0; i < 100; i++) {
1732
				if (ure_read_2(sc, 0xd284, URE_MCU_TYPE_USB) & 0x0004)
1733
					break;
1734
				uether_pause(&sc->sc_ue, hz / 1000);
1735
			}
1736
		}
1737
1738
	for (i = 0; i < URE_TIMEOUT; i++) {
1739
		if (ure_read_2(sc, URE_PLA_BOOT_CTRL, URE_MCU_TYPE_PLA) &
1740
		    URE_AUTOLOAD_DONE)
1741
			break;
1742
		uether_pause(&sc->sc_ue, hz / 100);
1743
	}
1744
	if (i == URE_TIMEOUT)
1745
		device_printf(sc->sc_ue.ue_dev,
1746
		    "timeout waiting for chip autoload\n");	
1747
1748
	val = ure_phy_status(sc, 0);
1749
	if ((val == URE_PHY_STAT_EXT_INIT) &
1750
	    (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B))) {
1751
		ure_ocp_reg_write(sc, 0xa468,
1752
		    ure_ocp_reg_read(sc, 0xa468) & ~0x0a);
1753
		if (sc->sc_flags & URE_FLAG_8156B)
1754
			ure_ocp_reg_write(sc, 0xa466,
1755
				ure_ocp_reg_read(sc, 0xa466) & ~0x01);
1756
	}
1757
			
1758
	val = ure_ocp_reg_read(sc, URE_OCP_BASE_MII + MII_BMCR);
1759
	if (val & BMCR_PDOWN) {
1760
		val &= ~BMCR_PDOWN;
1761
		ure_ocp_reg_write(sc, URE_OCP_BASE_MII + MII_BMCR, val);
1762
	}
1763
1764
	ure_phy_status(sc, URE_PHY_STAT_LAN_ON);
1765
1766
	/* Disable U2P3 */
1767
	URE_CLRBIT_2(sc, URE_USB_U2P3_CTRL, URE_MCU_TYPE_USB, URE_U2P3_ENABLE);
1768
1769
	/* MSC timer, 32760 ms. */
1770
	ure_write_2(sc, URE_USB_MSC_TIMER, URE_MCU_TYPE_USB, 0x0fff);
1771
1772
	/* U1/U2/L1 idle timer, 500 us. */
1773
	ure_write_2(sc, URE_USB_U1U2_TIMER, URE_MCU_TYPE_USB, 500);
1774
1775
	/* Disable power cut */
1776
	URE_CLRBIT_2(sc, URE_USB_POWER_CUT, URE_MCU_TYPE_USB, URE_PWR_EN);
1777
	URE_CLRBIT_2(sc, URE_USB_MISC_0, URE_MCU_TYPE_USB, URE_PCUT_STATUS);
1778
1779
	/* Disable ups */
1780
	URE_CLRBIT_1(sc, URE_USB_POWER_CUT, URE_MCU_TYPE_USB, URE_UPS_EN | URE_USP_PREWAKE);
1781
	URE_CLRBIT_1(sc, 0xcfff, URE_MCU_TYPE_USB, 0x01);
1782
1783
	/* Disable queue wake */
1784
	URE_CLRBIT_1(sc, URE_PLA_INDICATE_FALG, URE_MCU_TYPE_USB, URE_UPCOMING_RUNTIME_D3);
1785
	URE_CLRBIT_1(sc, URE_PLA_SUSPEND_FLAG, URE_MCU_TYPE_USB, URE_LINK_CHG_EVENT);
1786
	URE_CLRBIT_2(sc, URE_PLA_EXTRA_STATUS, URE_MCU_TYPE_USB, URE_LINK_CHANGE_FLAG);
1787
1788
	/* Disable runtime suspend */
1789
	ure_write_1(sc, URE_PLA_CRWECR, URE_MCU_TYPE_PLA, URE_CRWECR_CONFIG);
1790
	URE_CLRBIT_2(sc, URE_PLA_CONFIG34, URE_MCU_TYPE_USB, URE_LINK_OFF_WAKE_EN);
1791
	ure_write_1(sc, URE_PLA_CRWECR, URE_MCU_TYPE_PLA, URE_CRWECR_NORAML);
1792
	
1793
	/* Enable U1U2 */
1794
	if (usbd_get_speed(sc->sc_ue.ue_udev) == USB_SPEED_SUPER)
1795
		URE_SETBIT_2(sc, URE_USB_LPM_CONFIG, URE_MCU_TYPE_USB, URE_LPM_U1U2_EN);
1796
	
1797
	if (sc->sc_flags & URE_FLAG_8156B) {
1798
		URE_CLRBIT_2(sc, 0xc010, URE_MCU_TYPE_PLA, 0x0800);
1799
		URE_SETBIT_2(sc, 0xe854, URE_MCU_TYPE_PLA, 0x0001);
1800
1801
		/* enable fc timer and set timer to 600 ms. */
1802
		ure_write_2(sc, URE_USB_FC_TIMER, URE_MCU_TYPE_USB, URE_CTRL_TIMER_EN | (600 / 8));
1803
1804
		if (!(ure_read_1(sc, 0xdc6b, URE_MCU_TYPE_PLA) & 0x80)) {
1805
			val = ure_read_2(sc, URE_USB_FW_CTRL, URE_MCU_TYPE_USB);
1806
			val |= URE_FLOW_CTRL_PATCH_OPT | 0x0100;
1807
			val &= ~0x08;
1808
			ure_write_2(sc, URE_USB_FW_CTRL, URE_MCU_TYPE_USB, val);
1809
		}
1810
1811
		URE_SETBIT_2(sc, URE_USB_FW_TASK, URE_MCU_TYPE_USB, URE_FC_PATCH_TASK);
1812
	}
1813
1814
	val = ure_read_2(sc, URE_PLA_EXTRA_STATUS, URE_MCU_TYPE_PLA);
1815
	if (ure_get_link_status(sc))
1816
		val |= URE_CUR_LINK_OK;
1817
	else
1818
		val &= ~URE_CUR_LINK_OK;
1819
	val |= URE_POLL_LINK_CHG;
1820
	ure_write_2(sc, URE_PLA_EXTRA_STATUS, URE_MCU_TYPE_PLA, val);
1821
1822
	/* MAC clock speed down */
1823
	if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B)) {
1824
		ure_write_2(sc, URE_PLA_MAC_PWR_CTRL, URE_MCU_TYPE_PLA, 0x0403);
1825
		val = ure_read_2(sc, URE_PLA_MAC_PWR_CTRL2, URE_MCU_TYPE_PLA);
1826
		val &= ~0xff;
1827
		val |= URE_MAC_CLK_SPDWN_EN | 0x03;
1828
		ure_write_2(sc, URE_PLA_MAC_PWR_CTRL2, URE_MCU_TYPE_PLA, val);
1829
	} else {
1830
		URE_SETBIT_2(sc, URE_PLA_MAC_PWR_CTRL2, URE_MCU_TYPE_USB, URE_MAC_CLK_SPDWN_EN);
1831
	}
1832
	URE_CLRBIT_2(sc, URE_PLA_MAC_PWR_CTRL3, URE_MCU_TYPE_PLA, URE_PLA_MCU_SPDWN_EN);
1833
1834
	/* Enable Rx aggregation. */
1835
	URE_CLRBIT_2(sc, URE_USB_USB_CTRL, URE_MCU_TYPE_USB, URE_RX_AGG_DISABLE | URE_RX_ZERO_EN);
1836
1837
	if (sc->sc_flags & URE_FLAG_8156)
1838
		URE_SETBIT_1(sc, 0xd4b4, URE_MCU_TYPE_USB, 0x02);
1839
1840
	/* Reset tally */
1841
	URE_SETBIT_2(sc, URE_PLA_RSTTALLY, URE_MCU_TYPE_USB, URE_TALLY_RESET);
1842
}
1843
1844
static void
1845
ure_rtl8153b_nic_reset(struct ure_softc *sc)
1846
{
1847
	struct ifnet *ifp = uether_getifp(&sc->sc_ue);
1848
	uint16_t val;
1849
	int i;
1850
	
1851
	/* Disable U1U2 */
1852
	URE_CLRBIT_2(sc, URE_USB_LPM_CONFIG, URE_MCU_TYPE_USB, URE_LPM_U1U2_EN);
1853
1854
	/* Disable U2P3 */
1855
	URE_CLRBIT_2(sc, URE_USB_U2P3_CTRL, URE_MCU_TYPE_USB, URE_U2P3_ENABLE);
1856
1857
	ure_enable_aldps(sc, false);
1858
1859
	/* Enable rxdy_gated */
1860
	URE_SETBIT_2(sc, URE_PLA_MISC_1, URE_MCU_TYPE_PLA, URE_RXDY_GATED_EN);
1861
1862
	/* Disable teredo */
1863
	ure_disable_teredo(sc);
1864
1865
	DEVPRINTFN(14, sc->sc_ue.ue_dev, "rtl8153b_nic_reset: RCR: %#x\n", ure_read_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA));
1866
	URE_CLRBIT_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA, URE_RCR_ACPT_ALL);
1867
1868
	ure_reset(sc);
1869
1870
	/* Reset BMU */
1871
	URE_CLRBIT_1(sc, URE_USB_BMU_RESET, URE_MCU_TYPE_USB, URE_BMU_RESET_EP_IN | URE_BMU_RESET_EP_OUT);
1872
	URE_SETBIT_1(sc, URE_USB_BMU_RESET, URE_MCU_TYPE_USB, URE_BMU_RESET_EP_IN | URE_BMU_RESET_EP_OUT);
1873
1874
	URE_CLRBIT_1(sc, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA, URE_NOW_IS_OOB);
1875
	URE_CLRBIT_2(sc, URE_PLA_SFF_STS_7, URE_MCU_TYPE_PLA, URE_MCU_BORW_EN);
1876
	if (sc->sc_flags & URE_FLAG_8153B) {
1877
		for (i = 0; i < URE_TIMEOUT; i++) {
1878
			if (ure_read_1(sc, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA) &
1879
			    URE_LINK_LIST_READY)
1880
				break;
1881
			uether_pause(&sc->sc_ue, hz / 100);
1882
		}
1883
		if (i == URE_TIMEOUT)
1884
			device_printf(sc->sc_ue.ue_dev,
1885
			    "timeout waiting for OOB control\n");
1886
1887
		URE_SETBIT_2(sc, URE_PLA_SFF_STS_7, URE_MCU_TYPE_PLA, URE_RE_INIT_LL);
1888
		for (i = 0; i < URE_TIMEOUT; i++) {
1889
			if (ure_read_1(sc, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA) &
1890
			    URE_LINK_LIST_READY)
1891
			break;
1892
			uether_pause(&sc->sc_ue, hz / 100);
1893
		}
1894
		if (i == URE_TIMEOUT)
1895
			device_printf(sc->sc_ue.ue_dev,
1896
			    "timeout waiting for OOB control\n");
1897
	}
1898
	
1899
	/* Configure rxvlan */
1900
	val = ure_read_2(sc, 0xc012, URE_MCU_TYPE_PLA);
1901
	val &= ~0x00c0;
1902
	if (ifp->if_capabilities & IFCAP_VLAN_HWTAGGING)
1903
		val |= 0x00c0;
1904
	ure_write_2(sc, 0xc012, URE_MCU_TYPE_PLA, val);
1905
1906
	val = if_getmtu(ifp);
1907
	ure_write_2(sc, URE_PLA_RMS, URE_MCU_TYPE_PLA, URE_FRAMELEN(val));
1908
	ure_write_1(sc, URE_PLA_MTPS, URE_MCU_TYPE_PLA, URE_MTPS_JUMBO);
1909
1910
	if (sc->sc_flags & URE_FLAG_8153B) {
1911
		URE_SETBIT_2(sc, URE_PLA_TCR0, URE_MCU_TYPE_PLA, URE_TCR0_AUTO_FIFO);
1912
		ure_reset(sc);
1913
	}
1914
1915
	/* Configure fc parameter */
1916
	if (sc->sc_flags & URE_FLAG_8156) {
1917
		ure_write_2(sc, 0xc0a6, URE_MCU_TYPE_PLA, 0x0400);
1918
		ure_write_2(sc, 0xc0aa, URE_MCU_TYPE_PLA, 0x0800);
1919
	} else if (sc->sc_flags & URE_FLAG_8156B) {
1920
		ure_write_2(sc, 0xc0a6, URE_MCU_TYPE_PLA, 0x0200);
1921
		ure_write_2(sc, 0xc0aa, URE_MCU_TYPE_PLA, 0x0400);		
1922
	}
1923
	
1924
	/* Configure Rx FIFO threshold. */
1925
	if (sc->sc_flags & URE_FLAG_8153B) {
1926
		ure_write_4(sc, URE_PLA_RXFIFO_CTRL0, URE_MCU_TYPE_PLA,	URE_RXFIFO_THR1_NORMAL);
1927
		ure_write_2(sc, URE_PLA_RXFIFO_CTRL1, URE_MCU_TYPE_PLA, URE_RXFIFO_THR2_NORMAL);
1928
		ure_write_2(sc, URE_PLA_RXFIFO_CTRL2, URE_MCU_TYPE_PLA, URE_RXFIFO_THR3_NORMAL);
1929
		ure_write_4(sc, URE_USB_RX_BUF_TH, URE_MCU_TYPE_USB, URE_RX_THR_B);
1930
	} else {
1931
		ure_write_2(sc, 0xc0a2, URE_MCU_TYPE_PLA,
1932
		    (ure_read_2(sc, 0xc0a2, URE_MCU_TYPE_PLA) & ~0xfff) | 0x08);
1933
		ure_write_4(sc, URE_USB_RX_BUF_TH, URE_MCU_TYPE_USB, 0x00600400);
1934
	}
1935
1936
	/* Configure Tx FIFO threshold. */
1937
	if (sc->sc_flags & URE_FLAG_8153B) {
1938
		ure_write_4(sc, URE_PLA_TXFIFO_CTRL, URE_MCU_TYPE_PLA, URE_TXFIFO_THR_NORMAL2);
1939
	} else if (sc->sc_flags & URE_FLAG_8156) {
1940
		ure_write_2(sc, URE_PLA_TXFIFO_CTRL, URE_MCU_TYPE_PLA, URE_TXFIFO_THR_NORMAL2);
1941
		URE_SETBIT_2(sc, 0xd4b4, URE_MCU_TYPE_USB, 0x0002);
1942
	} else if (sc->sc_flags & URE_FLAG_8156B) {
1943
		ure_write_2(sc, URE_PLA_TXFIFO_CTRL, URE_MCU_TYPE_PLA, 0x0008);
1944
		ure_write_2(sc, 0xe61a, URE_MCU_TYPE_PLA,
1945
		    (URE_FRAMELEN(val) + 0x100) / 16 );
1946
	}
1947
1948
	URE_CLRBIT_2(sc, URE_PLA_MAC_PWR_CTRL3, URE_MCU_TYPE_PLA, URE_PLA_MCU_SPDWN_EN);
1949
1950
	if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B))
1951
		URE_CLRBIT_2(sc, 0xd32a, URE_MCU_TYPE_USB, 0x300);
1952
1953
	ure_enable_aldps(sc, true);
1954
1955
	if (sc->sc_flags & (URE_FLAG_8156 | URE_FLAG_8156B)) {
1956
		/* Enable U2P3 */
1957
		URE_SETBIT_2(sc, URE_USB_U2P3_CTRL, URE_MCU_TYPE_USB, URE_U2P3_ENABLE);
1958
	}
1959
1960
	/* Enable U1U2 */
1961
	if (usbd_get_speed(sc->sc_ue.ue_udev) == USB_SPEED_SUPER)
1962
		URE_SETBIT_2(sc, URE_USB_LPM_CONFIG, URE_MCU_TYPE_USB, URE_LPM_U1U2_EN);
1963
}
1964
1965
static void
1512
ure_stop(struct usb_ether *ue)
1966
ure_stop(struct usb_ether *ue)
1513
{
1967
{
1514
	struct ure_softc *sc = uether_getsc(ue);
1968
	struct ure_softc *sc = uether_getsc(ue);
Lines 1523-1530 Link Here
1523
	/*
1977
	/*
1524
	 * stop all the transfers, if not already stopped:
1978
	 * stop all the transfers, if not already stopped:
1525
	 */
1979
	 */
1526
	for (int i = 0; i < URE_N_TRANSFER; i++) {
1980
	for (int i = 0; i < URE_MAX_RX; i++) {
1527
		usbd_transfer_stop(sc->sc_rx_xfer[i]);
1981
		usbd_transfer_stop(sc->sc_rx_xfer[i]);
1982
	}
1983
	for (int i = 0; i < URE_MAX_TX; i++) {
1528
		usbd_transfer_stop(sc->sc_tx_xfer[i]);
1984
		usbd_transfer_stop(sc->sc_tx_xfer[i]);
1529
	}
1985
	}
1530
}
1986
}
Lines 1533-1612 Link Here
1533
ure_disable_teredo(struct ure_softc *sc)
1989
ure_disable_teredo(struct ure_softc *sc)
1534
{
1990
{
1535
1991
1536
	ure_write_4(sc, URE_PLA_TEREDO_CFG, URE_MCU_TYPE_PLA,
1992
	if (sc->sc_flags & (URE_FLAG_8153B | URE_FLAG_8156 | URE_FLAG_8156B))
1537
	    ure_read_4(sc, URE_PLA_TEREDO_CFG, URE_MCU_TYPE_PLA) &
1993
		ure_write_1(sc, URE_PLA_TEREDO_CFG, URE_MCU_TYPE_PLA, 0xff);
1538
	    ~(URE_TEREDO_SEL | URE_TEREDO_RS_EVENT_MASK | URE_OOB_TEREDO_EN));
1994
	else {
1539
	ure_write_2(sc, URE_PLA_WDT6_CTRL, URE_MCU_TYPE_PLA,
1995
		URE_CLRBIT_2(sc, URE_PLA_TEREDO_CFG, URE_MCU_TYPE_PLA,
1540
	    URE_WDT6_SET_MODE);
1996
		    (URE_TEREDO_SEL | URE_TEREDO_RS_EVENT_MASK | URE_OOB_TEREDO_EN));
1997
	}
1998
	ure_write_2(sc, URE_PLA_WDT6_CTRL, URE_MCU_TYPE_PLA, URE_WDT6_SET_MODE);
1541
	ure_write_2(sc, URE_PLA_REALWOW_TIMER, URE_MCU_TYPE_PLA, 0);
1999
	ure_write_2(sc, URE_PLA_REALWOW_TIMER, URE_MCU_TYPE_PLA, 0);
1542
	ure_write_4(sc, URE_PLA_TEREDO_TIMER, URE_MCU_TYPE_PLA, 0);
2000
	ure_write_4(sc, URE_PLA_TEREDO_TIMER, URE_MCU_TYPE_PLA, 0);
1543
}
2001
}
1544
2002
1545
static void
2003
static void
1546
ure_init_fifo(struct ure_softc *sc)
2004
ure_enable_aldps(struct ure_softc *sc, bool enable)
1547
{
2005
{
1548
	uint32_t rx_fifo1, rx_fifo2;
1549
	int i;
2006
	int i;
1550
2007
1551
	ure_write_2(sc, URE_PLA_MISC_1, URE_MCU_TYPE_PLA,
2008
	if (enable)
1552
	    ure_read_2(sc, URE_PLA_MISC_1, URE_MCU_TYPE_PLA) |
2009
		ure_ocp_reg_write(sc, URE_OCP_POWER_CFG,
1553
	    URE_RXDY_GATED_EN);
2010
			ure_ocp_reg_read(sc, URE_OCP_POWER_CFG) | URE_EN_ALDPS);
2011
	else {
2012
		ure_ocp_reg_write(sc, URE_OCP_ALDPS_CONFIG, URE_ENPDNPS | URE_LINKENA |
2013
			URE_DIS_SDSAVE);
2014
		for (i = 0; i < 20; i++) {
2015
			uether_pause(&sc->sc_ue, hz / 1000);
2016
			if (ure_ocp_reg_read(sc, 0xe000) & 0x0100)
2017
				break;
2018
		}
2019
	}
2020
}
1554
2021
1555
	ure_disable_teredo(sc);
2022
static uint16_t
2023
ure_phy_status(struct ure_softc *sc, uint16_t desired)
2024
{
2025
	uint16_t val;
2026
	int i;
2027
	
2028
	for (i = 0; i < URE_TIMEOUT; i++) {
2029
		val = ure_ocp_reg_read(sc, URE_OCP_PHY_STATUS) &
2030
		    URE_PHY_STAT_MASK;
2031
		if (desired) {
2032
			if (val == desired)
2033
				break;
2034
		} else {
2035
			if (val == URE_PHY_STAT_LAN_ON ||
2036
				val == URE_PHY_STAT_PWRDN ||
2037
			    val == URE_PHY_STAT_EXT_INIT)
2038
				break;
2039
		}
2040
		uether_pause(&sc->sc_ue, hz / 100);
2041
	}
2042
	if (i == URE_TIMEOUT)
2043
		device_printf(sc->sc_ue.ue_dev,
2044
		    "timeout waiting for phy to stabilize\n");
1556
2045
1557
	DEVPRINTFN(14, sc->sc_ue.ue_dev, "init_fifo: RCR: %#x\n", ure_read_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA));
2046
	return val;
1558
	ure_write_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA,
2047
}
1559
	    ure_read_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA) &
1560
	    ~URE_RCR_ACPT_ALL);
1561
2048
1562
	if (!(sc->sc_flags & URE_FLAG_8152)) {
2049
static void
1563
		if (sc->sc_chip & (URE_CHIP_VER_5C00 | URE_CHIP_VER_5C10 |
2050
ure_rtl8152_nic_reset(struct ure_softc *sc)
1564
		    URE_CHIP_VER_5C20)) {
2051
{
1565
				ure_ocp_reg_write(sc, URE_OCP_ADC_CFG,
2052
	uint32_t rx_fifo1, rx_fifo2;
1566
				    URE_CKADSEL_L | URE_ADC_EN | URE_EN_EMI_L);
2053
	int i;
1567
		}
1568
		if (sc->sc_chip & URE_CHIP_VER_5C00) {
1569
			ure_ocp_reg_write(sc, URE_OCP_EEE_CFG,
1570
			    ure_ocp_reg_read(sc, URE_OCP_EEE_CFG) &
1571
			    ~URE_CTAP_SHORT_EN);
1572
		}
1573
		ure_ocp_reg_write(sc, URE_OCP_POWER_CFG,
1574
		    ure_ocp_reg_read(sc, URE_OCP_POWER_CFG) |
1575
		    URE_EEE_CLKDIV_EN);
1576
		ure_ocp_reg_write(sc, URE_OCP_DOWN_SPEED,
1577
		    ure_ocp_reg_read(sc, URE_OCP_DOWN_SPEED) |
1578
		    URE_EN_10M_BGOFF);
1579
		ure_ocp_reg_write(sc, URE_OCP_POWER_CFG,
1580
		    ure_ocp_reg_read(sc, URE_OCP_POWER_CFG) |
1581
		    URE_EN_10M_PLLOFF);
1582
		ure_ocp_reg_write(sc, URE_OCP_SRAM_ADDR, URE_SRAM_IMPEDANCE);
1583
		ure_ocp_reg_write(sc, URE_OCP_SRAM_DATA, 0x0b13);
1584
		ure_write_2(sc, URE_PLA_PHY_PWR, URE_MCU_TYPE_PLA,
1585
		    ure_read_2(sc, URE_PLA_PHY_PWR, URE_MCU_TYPE_PLA) |
1586
		    URE_PFM_PWM_SWITCH);
1587
2054
1588
		/* Enable LPF corner auto tune. */
2055
	URE_SETBIT_2(sc, URE_PLA_MISC_1, URE_MCU_TYPE_PLA, URE_RXDY_GATED_EN);
1589
		ure_ocp_reg_write(sc, URE_OCP_SRAM_ADDR, URE_SRAM_LPF_CFG);
1590
		ure_ocp_reg_write(sc, URE_OCP_SRAM_DATA, 0xf70f);
1591
2056
1592
		/* Adjust 10M amplitude. */
2057
	ure_disable_teredo(sc);
1593
		ure_ocp_reg_write(sc, URE_OCP_SRAM_ADDR, URE_SRAM_10M_AMP1);
1594
		ure_ocp_reg_write(sc, URE_OCP_SRAM_DATA, 0x00af);
1595
		ure_ocp_reg_write(sc, URE_OCP_SRAM_ADDR, URE_SRAM_10M_AMP2);
1596
		ure_ocp_reg_write(sc, URE_OCP_SRAM_DATA, 0x0208);
1597
	}
1598
2058
2059
	DEVPRINTFN(14, sc->sc_ue.ue_dev, "rtl8152_nic_reset: RCR: %#x\n", ure_read_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA));
2060
	URE_CLRBIT_4(sc, URE_PLA_RCR, URE_MCU_TYPE_PLA, URE_RCR_ACPT_ALL);
2061
1599
	ure_reset(sc);
2062
	ure_reset(sc);
1600
2063
1601
	ure_write_1(sc, URE_PLA_CR, URE_MCU_TYPE_PLA, 0);
2064
	ure_write_1(sc, URE_PLA_CR, URE_MCU_TYPE_PLA, 0);
1602
2065
1603
	ure_write_1(sc, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA,
2066
	URE_CLRBIT_1(sc, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA, URE_NOW_IS_OOB);
1604
	    ure_read_1(sc, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA) &
1605
	    ~URE_NOW_IS_OOB);
1606
2067
1607
	ure_write_2(sc, URE_PLA_SFF_STS_7, URE_MCU_TYPE_PLA,
2068
	URE_CLRBIT_2(sc, URE_PLA_SFF_STS_7, URE_MCU_TYPE_PLA, URE_MCU_BORW_EN);
1608
	    ure_read_2(sc, URE_PLA_SFF_STS_7, URE_MCU_TYPE_PLA) &
1609
	    ~URE_MCU_BORW_EN);
1610
	for (i = 0; i < URE_TIMEOUT; i++) {
2069
	for (i = 0; i < URE_TIMEOUT; i++) {
1611
		if (ure_read_1(sc, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA) &
2070
		if (ure_read_1(sc, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA) &
1612
		    URE_LINK_LIST_READY)
2071
		    URE_LINK_LIST_READY)
Lines 1616-1624 Link Here
1616
	if (i == URE_TIMEOUT)
2075
	if (i == URE_TIMEOUT)
1617
		device_printf(sc->sc_ue.ue_dev,
2076
		device_printf(sc->sc_ue.ue_dev,
1618
		    "timeout waiting for OOB control\n");
2077
		    "timeout waiting for OOB control\n");
1619
	ure_write_2(sc, URE_PLA_SFF_STS_7, URE_MCU_TYPE_PLA,
2078
	URE_SETBIT_2(sc, URE_PLA_SFF_STS_7, URE_MCU_TYPE_PLA, URE_RE_INIT_LL);
1620
	    ure_read_2(sc, URE_PLA_SFF_STS_7, URE_MCU_TYPE_PLA) |
1621
	    URE_RE_INIT_LL);
1622
	for (i = 0; i < URE_TIMEOUT; i++) {
2079
	for (i = 0; i < URE_TIMEOUT; i++) {
1623
		if (ure_read_1(sc, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA) &
2080
		if (ure_read_1(sc, URE_PLA_OOB_CTRL, URE_MCU_TYPE_PLA) &
1624
		    URE_LINK_LIST_READY)
2081
		    URE_LINK_LIST_READY)
Lines 1629-1640 Link Here
1629
		device_printf(sc->sc_ue.ue_dev,
2086
		device_printf(sc->sc_ue.ue_dev,
1630
		    "timeout waiting for OOB control\n");
2087
		    "timeout waiting for OOB control\n");
1631
2088
1632
	ure_write_2(sc, URE_PLA_CPCR, URE_MCU_TYPE_PLA,
2089
	URE_CLRBIT_2(sc, URE_PLA_CPCR, URE_MCU_TYPE_PLA, URE_CPCR_RX_VLAN);
1633
	    ure_read_2(sc, URE_PLA_CPCR, URE_MCU_TYPE_PLA) &
2090
1634
	    ~URE_CPCR_RX_VLAN);
2091
	URE_SETBIT_2(sc, URE_PLA_TCR0, URE_MCU_TYPE_PLA, URE_TCR0_AUTO_FIFO);
1635
	ure_write_2(sc, URE_PLA_TCR0, URE_MCU_TYPE_PLA,
1636
	    ure_read_2(sc, URE_PLA_TCR0, URE_MCU_TYPE_PLA) |
1637
	    URE_TCR0_AUTO_FIFO);
1638
2092
1639
	/* Configure Rx FIFO threshold. */
2093
	/* Configure Rx FIFO threshold. */
1640
	ure_write_4(sc, URE_PLA_RXFIFO_CTRL0, URE_MCU_TYPE_PLA,
2094
	ure_write_4(sc, URE_PLA_RXFIFO_CTRL0, URE_MCU_TYPE_PLA,
(-)/usr/src/sys/dev/usb/net/if_urereg.h.new (-22 / +173 lines)
Lines 40-46 Link Here
40
#define	URE_BYTE_EN_BYTE	0x11
40
#define	URE_BYTE_EN_BYTE	0x11
41
#define	URE_BYTE_EN_SIX_BYTES	0x3f
41
#define	URE_BYTE_EN_SIX_BYTES	0x3f
42
42
43
#define	URE_FRAMELEN(mtu)	(mtu + ETHER_HDR_LEN + ETHER_CRC_LEN + ETHER_VLAN_ENCAP_LEN)
43
#define	URE_MAX_FRAMELEN	(ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN)
44
#define	URE_MAX_FRAMELEN	(ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN)
45
#define	URE_JUMBO_FRAMELEN	(9*1024)
46
#define	URE_JUMBO_MTU		(URE_JUMBO_FRAMELEN - ETHER_HDR_LEN - ETHER_CRC_LEN - ETHER_VLAN_ENCAP_LEN)
44
47
45
#define	URE_PLA_IDR		0xc000
48
#define	URE_PLA_IDR		0xc000
46
#define	URE_PLA_RCR		0xc010
49
#define	URE_PLA_RCR		0xc010
Lines 58-63 Link Here
58
#define	URE_PAL_BDC_CR		0xd1a0
61
#define	URE_PAL_BDC_CR		0xd1a0
59
#define	URE_PLA_TEREDO_TIMER	0xd2cc
62
#define	URE_PLA_TEREDO_TIMER	0xd2cc
60
#define	URE_PLA_REALWOW_TIMER	0xd2e8
63
#define	URE_PLA_REALWOW_TIMER	0xd2e8
64
#define	URE_PLA_SUSPEND_FLAG	0xd38a
65
#define	URE_PLA_INDICATE_FALG	0xd38c
66
#define	URE_PLA_EXTRA_STATUS	0xd398
61
#define	URE_PLA_LEDSEL		0xdd90
67
#define	URE_PLA_LEDSEL		0xdd90
62
#define	URE_PLA_LED_FEATURE	0xdd92
68
#define	URE_PLA_LED_FEATURE	0xdd92
63
#define	URE_PLA_PHYAR		0xde00
69
#define	URE_PLA_PHYAR		0xde00
Lines 74-82 Link Here
74
#define	URE_PLA_TCR1		0xe612
80
#define	URE_PLA_TCR1		0xe612
75
#define	URE_PLA_MTPS		0xe615
81
#define	URE_PLA_MTPS		0xe615
76
#define	URE_PLA_TXFIFO_CTRL	0xe618
82
#define	URE_PLA_TXFIFO_CTRL	0xe618
77
#define	URE_PLA_RSTTELLY	0xe800
83
#define	URE_PLA_RSTTALLY	0xe800
78
#define	URE_PLA_CR		0xe813
84
#define	URE_PLA_CR		0xe813
79
#define	URE_PLA_CRWECR		0xe81c
85
#define	URE_PLA_CRWECR		0xe81c
86
#define	URE_PLA_CONFIG34	0xe820
80
#define	URE_PLA_CONFIG5		0xe822
87
#define	URE_PLA_CONFIG5		0xe822
81
#define	URE_PLA_PHY_PWR		0xe84c
88
#define	URE_PLA_PHY_PWR		0xe84c
82
#define	URE_PLA_OOB_CTRL	0xe84f
89
#define	URE_PLA_OOB_CTRL	0xe84f
Lines 86-92 Link Here
86
#define	URE_PLA_OCP_GPHY_BASE	0xe86c
93
#define	URE_PLA_OCP_GPHY_BASE	0xe86c
87
#define	URE_PLA_TELLYCNT	0xe890
94
#define	URE_PLA_TELLYCNT	0xe890
88
#define	URE_PLA_SFF_STS_7	0xe8de
95
#define	URE_PLA_SFF_STS_7	0xe8de
96
#define	URE_PLA_PHYSTATUS	0xe908
89
#define	URE_GMEDIASTAT		0xe908
97
#define	URE_GMEDIASTAT		0xe908
98
#define	URE_PLA_BP_BA		0xfc26
99
#define	URE_PLA_BP_0		0xfc28
100
#define	URE_PLA_BP_1		0xfc2a
101
#define	URE_PLA_BP_2		0xfc2c
102
#define	URE_PLA_BP_3		0xfc2e
103
#define	URE_PLA_BP_4		0xfc30
104
#define	URE_PLA_BP_5		0xfc32
105
#define	URE_PLA_BP_6		0xfc34
106
#define	URE_PLA_BP_7		0xfc36
107
#define	URE_PLA_BP_EN		0xfc38
90
108
91
#define	URE_USB_USB2PHY		0xb41e
109
#define	URE_USB_USB2PHY		0xb41e
92
#define	URE_USB_SSPHYLINK2	0xb428
110
#define	URE_USB_SSPHYLINK2	0xb428
Lines 95-117 Link Here
95
#define	URE_USB_CSR_DUMMY2	0xb466
113
#define	URE_USB_CSR_DUMMY2	0xb466
96
#define	URE_USB_DEV_STAT	0xb808
114
#define	URE_USB_DEV_STAT	0xb808
97
#define	URE_USB_CONNECT_TIMER	0xcbf8
115
#define	URE_USB_CONNECT_TIMER	0xcbf8
116
#define	URE_USB_MSC_TIMER	0xcbfc
98
#define	URE_USB_BURST_SIZE	0xcfc0
117
#define	URE_USB_BURST_SIZE	0xcfc0
118
#define	URE_USB_LPM_CONFIG	0xcfd8
119
#define	URE_USB_FW_CTRL		0xd334	/* RTL8153B */
99
#define	URE_USB_USB_CTRL	0xd406
120
#define	URE_USB_USB_CTRL	0xd406
100
#define	URE_USB_PHY_CTRL	0xd408
121
#define	URE_USB_PHY_CTRL	0xd408
101
#define	URE_USB_TX_AGG		0xd40a
122
#define	URE_USB_TX_AGG		0xd40a
102
#define	URE_USB_RX_BUF_TH	0xd40c
123
#define	URE_USB_RX_BUF_TH	0xd40c
124
#define	URE_USB_FW_TASK		0xd4e8	/* RTL8153B */
103
#define	URE_USB_USB_TIMER	0xd428
125
#define	URE_USB_USB_TIMER	0xd428
104
#define	URE_USB_RX_EARLY_AGG	0xd42c
126
#define	URE_USB_RX_EARLY_AGG	0xd42c
105
#define	URE_USB_PM_CTRL_STATUS	0xd432
127
#define	URE_USB_RX_EARLY_SIZE	0xd42e
128
#define	URE_USB_PM_CTRL_STATUS	0xd432	/* RTL8153A */
129
#define	URE_USB_RX_EXTRA_AGG_TMR	0xd432 /* RTL8153B */
106
#define	URE_USB_TX_DMA		0xd434
130
#define	URE_USB_TX_DMA		0xd434
131
#define	URE_USB_UPT_RXDMA_OWN	0xd437
132
#define	URE_USB_FC_TIMER		0xd340
107
#define	URE_USB_TOLERANCE	0xd490
133
#define	URE_USB_TOLERANCE	0xd490
108
#define	URE_USB_LPM_CTRL	0xd41a
134
#define	URE_USB_LPM_CTRL	0xd41a
135
#define	URE_USB_BMU_RESET	0xd4b0
136
#define	URE_USB_U1U2_TIMER	0xd4da
109
#define	URE_USB_UPS_CTRL	0xd800
137
#define	URE_USB_UPS_CTRL	0xd800
110
#define	URE_USB_MISC_0		0xd81a
111
#define	URE_USB_POWER_CUT	0xd80a
138
#define	URE_USB_POWER_CUT	0xd80a
139
#define	URE_USB_MISC_0		0xd81a
112
#define	URE_USB_AFE_CTRL2	0xd824
140
#define	URE_USB_AFE_CTRL2	0xd824
113
#define	URE_USB_WDT11_CTRL	0xe43c
141
#define	URE_USB_WDT11_CTRL	0xe43c
142
#define	URE_USB_BP_BA		URE_PLA_BP_BA
143
#define	URE_USB_BP_0		URE_PLA_BP_0
144
#define	URE_USB_BP_1		URE_PLA_BP_1
145
#define	URE_USB_BP_2		URE_PLA_BP_2
146
#define	URE_USB_BP_3		URE_PLA_BP_3
147
#define	URE_USB_BP_4		URE_PLA_BP_4
148
#define	URE_USB_BP_5		URE_PLA_BP_5
149
#define	URE_USB_BP_6		URE_PLA_BP_6
150
#define	URE_USB_BP_7		URE_PLA_BP_7
151
#define	URE_USB_BP_EN		URE_PLA_BP_EN	/* RTL8153A */
152
#define	URE_USB_BP_8		0xfc38		/* RTL8153B */
153
#define	URE_USB_BP_9		0xfc3a
154
#define	URE_USB_BP_10		0xfc3c
155
#define	URE_USB_BP_11		0xfc3e
156
#define	URE_USB_BP_12		0xfc40
157
#define	URE_USB_BP_13		0xfc42
158
#define	URE_USB_BP_14		0xfc44
159
#define	URE_USB_BP_15		0xfc46
160
#define	URE_USB_BP2_EN		0xfc48
114
161
162
115
/* OCP Registers. */
163
/* OCP Registers. */
116
#define	URE_OCP_ALDPS_CONFIG	0x2010
164
#define	URE_OCP_ALDPS_CONFIG	0x2010
117
#define	URE_OCP_EEE_CONFIG1	0x2080
165
#define	URE_OCP_EEE_CONFIG1	0x2080
Lines 130-142 Link Here
130
#define	URE_OCP_EEE_ADV		0xa5d0
178
#define	URE_OCP_EEE_ADV		0xa5d0
131
#define	URE_OCP_EEE_LPABLE	0xa5d2
179
#define	URE_OCP_EEE_LPABLE	0xa5d2
132
#define	URE_OCP_PHY_STATE	0xa708
180
#define	URE_OCP_PHY_STATE	0xa708
181
#define	URE_OCP_PHY_PATCH_STAT	0xb800
182
#define	URE_OCP_PHY_PATCH_CMD	0xb820
183
#define	URE_OCP_PHY_LOCK	0xb82e
133
#define	URE_OCP_ADC_CFG		0xbc06
184
#define	URE_OCP_ADC_CFG		0xbc06
134
185
135
/* SRAM Register. */
186
/* SRAM Register. */
187
#define	URE_SRAM_GREEN_CFG	0x8011
136
#define	URE_SRAM_LPF_CFG	0x8012
188
#define	URE_SRAM_LPF_CFG	0x8012
189
#define	URE_SRAM_GPHY_FW_VER	0x801e
137
#define	URE_SRAM_10M_AMP1	0x8080
190
#define	URE_SRAM_10M_AMP1	0x8080
138
#define	URE_SRAM_10M_AMP2	0x8082
191
#define	URE_SRAM_10M_AMP2	0x8082
139
#define	URE_SRAM_IMPEDANCE	0x8084
192
#define	URE_SRAM_IMPEDANCE	0x8084
193
#define	URE_SRAM_PHY_LOCK	0xb82e
140
194
141
/* PLA_RCR */
195
/* PLA_RCR */
142
#define	URE_RCR_AAP		0x00000001
196
#define	URE_RCR_AAP		0x00000001
Lines 189-194 Link Here
189
/* PLA_TCR1 */
243
/* PLA_TCR1 */
190
#define	URE_VERSION_MASK	0x7cf0
244
#define	URE_VERSION_MASK	0x7cf0
191
245
246
/* PLA_MTPS */
247
#define	URE_MTPS_DEFAULT	96
248
#define	URE_MTPS_JUMBO		192
249
250
/* PLA_RSTTALLY */
251
#define	URE_TALLY_RESET		0x0001
252
192
/* PLA_CR */
253
/* PLA_CR */
193
#define	URE_CR_RST		0x10
254
#define	URE_CR_RST		0x10
194
#define	URE_CR_RE		0x08
255
#define	URE_CR_RE		0x08
Lines 225-230 Link Here
225
/* PAL_BDC_CR */
286
/* PAL_BDC_CR */
226
#define	URE_ALDPS_PROXY_MODE	0x0001
287
#define	URE_ALDPS_PROXY_MODE	0x0001
227
288
289
/* URE_PLA_CONFIG34 */
290
#define	URE_LINK_OFF_WAKE_EN	0x0008
291
#define	URE_LINK_ON_WAKE_EN	0x0010
292
228
/* PLA_CONFIG5 */
293
/* PLA_CONFIG5 */
229
#define	URE_LAN_WAKE_EN		0x0002
294
#define	URE_LAN_WAKE_EN		0x0002
230
295
Lines 242-250 Link Here
242
#define	URE_ALDPS_SPDWN_RATIO	0x0f87
307
#define	URE_ALDPS_SPDWN_RATIO	0x0f87
243
308
244
/* PLA_MAC_PWR_CTRL2 */
309
/* PLA_MAC_PWR_CTRL2 */
310
#define	URE_MAC_CLK_SPDWN_EN	0x8000
245
#define	URE_EEE_SPDWN_RATIO	0x8007
311
#define	URE_EEE_SPDWN_RATIO	0x8007
246
312
247
/* PLA_MAC_PWR_CTRL3 */
313
/* PLA_MAC_PWR_CTRL3 */
314
#define	URE_PLA_MCU_SPDWN_EN	0x4000
248
#define	URE_PKT_AVAIL_SPDWN_EN	0x0100
315
#define	URE_PKT_AVAIL_SPDWN_EN	0x0100
249
#define	URE_SUSPEND_SPDWN_EN	0x0004
316
#define	URE_SUSPEND_SPDWN_EN	0x0004
250
#define	URE_U1U2_SPDWN_EN	0x0002
317
#define	URE_U1U2_SPDWN_EN	0x0002
Lines 276-281 Link Here
276
/* PLA_BOOT_CTRL */
343
/* PLA_BOOT_CTRL */
277
#define	URE_AUTOLOAD_DONE	0x0002
344
#define	URE_AUTOLOAD_DONE	0x0002
278
345
346
/* PLA_SUSPEND_FLAG */
347
#define	URE_LINK_CHG_EVENT	0x01
348
349
/* PLA_INDICATE_FALG */
350
#define	URE_UPCOMING_RUNTIME_D3	0x01
351
352
/* PLA_EXTRA_STATUS */
353
#define	URE_POLL_LINK_CHG		0x0001
354
#define	URE_LINK_CHANGE_FLAG	0x0100
355
#define	URE_CUR_LINK_OK			0x8000
356
357
/* URE_PLA_PHYSTATUS */
358
#define	URE_PHYSTATUS_FDX	0x0001
359
#define	URE_PHYSTATUS_LINK	0x0002
360
#define	URE_PHYSTATUS_10MBPS	0x0004
361
#define	URE_PHYSTATUS_100MBPS	0x0008
362
#define	URE_PHYSTATUS_1000MBPS	0x0010
363
#define	URE_PHYSTATUS_500MBPS	0x0100
364
#define	URE_PHYSTATUS_1250MBPS	0x0200
365
#define	URE_PHYSTATUS_2500MBPS	0x0400
366
279
/* USB_USB2PHY */
367
/* USB_USB2PHY */
280
#define	URE_USB2PHY_SUSPEND	0x0001
368
#define	URE_USB2PHY_SUSPEND	0x0001
281
#define	URE_USB2PHY_L1		0x0002
369
#define	URE_USB2PHY_L1		0x0002
Lines 295-300 Link Here
295
#define	URE_STAT_SPEED_HIGH	0x0000
383
#define	URE_STAT_SPEED_HIGH	0x0000
296
#define	URE_STAT_SPEED_FULL	0x0001
384
#define	URE_STAT_SPEED_FULL	0x0001
297
385
386
/* URE_USB_LPM_CONFIG */
387
#define	URE_LPM_U1U2_EN		0x0001
388
298
/* USB_TX_AGG */
389
/* USB_TX_AGG */
299
#define	URE_TX_AGG_MAX_THRESHOLD	0x03
390
#define	URE_TX_AGG_MAX_THRESHOLD	0x03
300
391
Lines 302-318 Link Here
302
#define	URE_RX_THR_SUPER	0x0c350180
393
#define	URE_RX_THR_SUPER	0x0c350180
303
#define	URE_RX_THR_HIGH		0x7a120180
394
#define	URE_RX_THR_HIGH		0x7a120180
304
#define	URE_RX_THR_SLOW		0xffff0180
395
#define	URE_RX_THR_SLOW		0xffff0180
396
#define	URE_RX_THR_B		0x00010001
305
397
306
/* USB_TX_DMA */
398
/* USB_TX_DMA */
307
#define	URE_TEST_MODE_DISABLE	0x00000001
399
#define	URE_TEST_MODE_DISABLE	0x00000001
308
#define	URE_TX_SIZE_ADJUST1	0x00000100
400
#define	URE_TX_SIZE_ADJUST1	0x00000100
309
401
402
/* USB_BMU_RESET */
403
#define	URE_BMU_RESET_EP_IN		0x01
404
#define	URE_BMU_RESET_EP_OUT	0x02
405
406
/* USB_UPT_RXDMA_OWN */
407
#define	URE_OWN_UPDATE		0x01
408
#define	URE_OWN_CLEAR		0x02
409
410
/* USB_FW_TASK */
411
#define	URE_FC_PATCH_TASK	0x0001
412
310
/* USB_UPS_CTRL */
413
/* USB_UPS_CTRL */
311
#define	URE_POWER_CUT		0x0100
414
#define	URE_POWER_CUT		0x0100
312
415
313
/* USB_PM_CTRL_STATUS */
416
/* USB_PM_CTRL_STATUS */
314
#define	URE_RESUME_INDICATE	0x0001
417
#define	URE_RESUME_INDICATE	0x0001
315
418
419
/* USB_FW_CTRL */
420
#define	URE_FLOW_CTRL_PATCH_OPT	0x01
421
422
/* USB_FC_TIMER */
423
#define	URE_CTRL_TIMER_EN	0x8000
424
316
/* USB_USB_CTRL */
425
/* USB_USB_CTRL */
317
#define	URE_RX_AGG_DISABLE	0x0010
426
#define	URE_RX_AGG_DISABLE	0x0010
318
#define	URE_RX_ZERO_EN		0x0080
427
#define	URE_RX_ZERO_EN		0x0080
Lines 321-328 Link Here
321
#define	URE_U2P3_ENABLE		0x0001
430
#define	URE_U2P3_ENABLE		0x0001
322
431
323
/* USB_POWER_CUT */
432
/* USB_POWER_CUT */
324
#define	URE_PWR_EN		0x0001
433
#define	URE_PWR_EN			0x0001
325
#define	URE_PHASE2_EN		0x0008
434
#define	URE_PHASE2_EN		0x0008
435
#define	URE_UPS_EN			0x0010
436
#define	URE_USP_PREWAKE		0x0020
326
437
327
/* USB_MISC_0 */
438
/* USB_MISC_0 */
328
#define	URE_PCUT_STATUS		0x0001
439
#define	URE_PCUT_STATUS		0x0001
Lines 355-360 Link Here
355
466
356
/* OCP_PHY_STATUS */
467
/* OCP_PHY_STATUS */
357
#define	URE_PHY_STAT_MASK	0x0007
468
#define	URE_PHY_STAT_MASK	0x0007
469
#define	URE_PHY_STAT_EXT_INIT	2
358
#define	URE_PHY_STAT_LAN_ON	3
470
#define	URE_PHY_STAT_LAN_ON	3
359
#define	URE_PHY_STAT_PWRDN	5
471
#define	URE_PHY_STAT_PWRDN	5
360
472
Lines 369-384 Link Here
369
481
370
/* OCP_DOWN_SPEED */
482
/* OCP_DOWN_SPEED */
371
#define	URE_EN_10M_BGOFF	0x0080
483
#define	URE_EN_10M_BGOFF	0x0080
484
#define	URE_EN_10M_CLKDIV	0x0800
485
#define	URE_EN_EEE_100		0x1000
486
#define	URE_EN_EEE_1000		0x2000
487
#define	URE_EN_EEE_CMODE	0x4000
372
488
373
/* OCP_PHY_STATE */
489
/* OCP_PHY_STATE */
374
#define	URE_TXDIS_STATE		0x01
490
#define	URE_TXDIS_STATE		0x01
375
#define	URE_ABD_STATE		0x02
491
#define	URE_ABD_STATE		0x02
376
492
493
/* OCP_PHY_PATCH_STAT */
494
#define	URE_PATCH_READY		0x40
495
496
/* OCP_PHY_PATCH_CMD */
497
#define	URE_PATCH_REQUEST	0x10
498
499
/* OCP_PHY_LOCK */
500
#define	URE_PATCH_LOCK		0x01
501
377
/* OCP_ADC_CFG */
502
/* OCP_ADC_CFG */
378
#define	URE_CKADSEL_L		0x0100
503
#define	URE_CKADSEL_L		0x0100
379
#define	URE_ADC_EN		0x0080
504
#define	URE_ADC_EN		0x0080
380
#define	URE_EN_EMI_L		0x0040
505
#define	URE_EN_EMI_L		0x0040
381
506
507
/* SRAM_GREEN_CFG */
508
#define	URE_GREEN_ETH_EN	0x8000
509
510
/* SRAM_PHY_LOCK */
511
#define	URE_PHY_PATCH_LOCK		0x0001
512
513
#define	URE_ADV_2500TFDX	0x0080
514
382
#define	URE_MCU_TYPE_PLA	0x0100
515
#define	URE_MCU_TYPE_PLA	0x0100
383
#define	URE_MCU_TYPE_USB	0x0000
516
#define	URE_MCU_TYPE_USB	0x0000
384
517
Lines 423-464 Link Here
423
#define	URE_TKPKT_TX_LS		(1 << 30)
556
#define	URE_TKPKT_TX_LS		(1 << 30)
424
#define	URE_TXPKT_LEN_MASK	0xffff
557
#define	URE_TXPKT_LEN_MASK	0xffff
425
	uint32_t ure_csum;
558
	uint32_t ure_csum;
426
#define URE_L4_OFFSET_MAX       0x7ff
559
#define	URE_L4_OFFSET_MAX       0x7ff
427
#define URE_L4_OFFSET_SHIFT     17
560
#define	URE_L4_OFFSET_SHIFT     17
428
#define	URE_TXPKT_VLAN_MASK	0xffff
561
#define	URE_TXPKT_VLAN_MASK	0xffff
429
#define URE_TXPKT_VLAN		(1 << 16)
562
#define	URE_TXPKT_VLAN		(1 << 16)
430
#define URE_TXPKT_IPV6_CS	(1 << 28)
563
#define	URE_TXPKT_IPV6_CS	(1 << 28)
431
#define URE_TXPKT_IPV4_CS	(1 << 29)
564
#define	URE_TXPKT_IPV4_CS	(1 << 29)
432
#define URE_TXPKT_TCP_CS	(1 << 30)
565
#define	URE_TXPKT_TCP_CS	(1 << 30)
433
#define URE_TXPKT_UDP_CS	(1 << 31)
566
#define	URE_TXPKT_UDP_CS	(1 << 31)
434
/* Lower 12 bits are the VLAN tag */
567
/* Lower 12 bits are the VLAN tag */
435
} __packed;
568
} __packed;
436
569
437
#define	URE_N_TRANSFER	4
570
#define	URE_MAX_TX	4
438
#define	URE_TRANSFER_SIZE	16384
571
#define	URE_MAX_RX	4
439
572
573
#define	URE_TX_BUFSZ		16384
574
#define	URE_8152_RX_BUFSZ	16 * 1024
575
#define	URE_8153_RX_BUFSZ	32 * 1024
576
#define	URE_8156_RX_BUFSZ	48 * 1024
577
578
440
struct ure_softc {
579
struct ure_softc {
441
	struct usb_ether	sc_ue;
580
	struct usb_ether	sc_ue;
581
	struct ifmedia		sc_ifmedia;
442
	struct mtx		sc_mtx;
582
	struct mtx		sc_mtx;
443
	struct usb_xfer		*sc_rx_xfer[URE_N_TRANSFER];
583
	struct usb_xfer		*sc_rx_xfer[URE_MAX_RX];
444
	struct usb_xfer		*sc_tx_xfer[URE_N_TRANSFER];
584
	struct usb_xfer		*sc_tx_xfer[URE_MAX_TX];
445
585
586
	int			sc_rxbufsz;
446
	int			sc_rxstarted;
587
	int			sc_rxstarted;
447
588
448
	int			sc_phyno;
589
	int			sc_phyno;
449
590
450
	u_int			sc_flags;
591
	u_int			sc_flags;
451
#define	URE_FLAG_LINK		0x0001
592
#define	URE_FLAG_LINK		0x0001
452
#define	URE_FLAG_8152		0x1000	/* RTL8152 */
593
#define	URE_FLAG_8152		0x0100	/* RTL8152 */
594
#define	URE_FLAG_8153		0x0200	/* RTL8153 */
595
#define	URE_FLAG_8153B		0x0400	/* RTL8153B */
596
#define	URE_FLAG_8156		0x0800	/* RTL8156 */
597
#define	URE_FLAG_8156B		0x1000	/* RTL8156B */
453
598
454
	u_int			sc_chip;
599
	u_int			sc_chip;
455
	u_int			sc_ver;
600
	u_int			sc_ver;
456
#define	URE_CHIP_VER_4C00	0x01
601
#define	URE_CHIP_VER_4C00	0x0001
457
#define	URE_CHIP_VER_4C10	0x02
602
#define	URE_CHIP_VER_4C10	0x0002
458
#define	URE_CHIP_VER_5C00	0x04
603
#define	URE_CHIP_VER_5C00	0x0004
459
#define	URE_CHIP_VER_5C10	0x08
604
#define	URE_CHIP_VER_5C10	0x0008
460
#define	URE_CHIP_VER_5C20	0x10
605
#define	URE_CHIP_VER_5C20	0x0010
461
#define	URE_CHIP_VER_5C30	0x20
606
#define	URE_CHIP_VER_5C30	0x0020
607
#define	URE_CHIP_VER_6000	0x0040
608
#define	URE_CHIP_VER_6010	0x0080
609
#define	URE_CHIP_VER_7020	0x0100
610
#define	URE_CHIP_VER_7030	0x0200
611
#define	URE_CHIP_VER_7400	0x0400
612
#define	URE_CHIP_VER_7410	0x0800
462
};
613
};
463
614
464
#define	URE_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
615
#define	URE_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)

Return to bug 253374