if_muevar.h revision 1.2.4.4 1 /* $NetBSD: if_muevar.h,v 1.2.4.4 2019/01/18 08:50:43 pgoyette Exp $ */
2 /* $OpenBSD: if_muereg.h,v 1.1 2018/08/03 01:50:15 kevlo Exp $ */
3
4 /*
5 * Copyright (c) 2018 Kevin Lo <kevlo (at) openbsd.org>
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20 #ifndef _IF_MUEVAR_H_
21 #define _IF_MUEVAR_H_
22
23 #include <sys/rndsource.h>
24
25 struct mue_chain {
26 struct mue_softc *mue_sc;
27 struct usbd_xfer *mue_xfer;
28 char *mue_buf;
29 int mue_accum;
30 int mue_idx;
31 };
32
33 struct mue_cdata {
34 #define MUE_TX_LIST_CNT 4
35 struct mue_chain mue_tx_chain[MUE_TX_LIST_CNT];
36 #define MUE_RX_LIST_CNT 4
37 struct mue_chain mue_rx_chain[MUE_RX_LIST_CNT];
38 int mue_tx_prod;
39 int mue_tx_cons;
40 int mue_tx_cnt;
41 int mue_rx_prod;
42 };
43
44 struct mue_rxbuf_hdr {
45 uint32_t rx_cmd_a;
46 #define MUE_RX_CMD_A_LEN_MASK 0x00003fff
47 #define MUE_RX_CMD_A_ICSM 0x00004000
48 #define MUE_RX_CMD_A_ERRORS __BITS(16, 21) /* non-checksum errors */
49 #define MUE_RX_CMD_A_RED 0x00400000
50 #define MUE_RX_CMD_A_PID __BITS(28, 27)
51 #define MUE_RX_CMD_A_PID_TCP __SHIFTIN(1, MUE_RX_CMD_A_PID)
52 #define MUE_RX_CMD_A_PID_UDP __SHIFTIN(2, MUE_RX_CMD_A_PID)
53 #define MUE_RX_CMD_A_PID_IP __SHIFTIN(3, MUE_RX_CMD_A_PID)
54 #define MUE_RX_CMD_A_IPV __BIT(29)
55 #define MUE_RX_CMD_A_TCE __BIT(30)
56 #define MUE_RX_CMD_A_ICE __BIT(31)
57
58 uint32_t rx_cmd_b;
59 uint16_t rx_cmd_c;
60 } __packed;
61
62 struct mue_txbuf_hdr {
63 uint32_t tx_cmd_a;
64 #define MUE_TX_CMD_A_LEN_MASK 0x000fffff
65 #define MUE_TX_CMD_A_FCS 0x00400000
66 #define MUE_TX_CMD_A_TPE 0x02000000
67 #define MUE_TX_CMD_A_IPE 0x04000000
68 #define MUE_TX_CMD_A_LSO 0x08000000
69
70 uint32_t tx_cmd_b;
71 #define MUE_TX_MSS_MIN 8
72 #define MUE_TX_CMD_B_MSS_SHIFT 16
73 #define MUE_TX_CMD_B_MSS_MASK 0x3fff0000
74
75 } __packed;
76
77 struct mue_softc {
78 device_t mue_dev;
79 bool mue_dying;
80
81 uint8_t mue_enaddr[ETHER_ADDR_LEN];
82 struct ethercom mue_ec;
83 struct mii_data mue_mii;
84 #define GET_MII(sc) (&(sc)->mue_mii)
85 #define GET_IFP(sc) (&(sc)->mue_ec.ec_if)
86
87 /* The interrupt endpoint is currently unused by the Moschip part. */
88 #define MUE_ENDPT_RX 0
89 #define MUE_ENDPT_TX 1
90 #define MUE_ENDPT_INTR 2
91 #define MUE_ENDPT_MAX 3
92 int mue_ed[MUE_ENDPT_MAX];
93 struct usbd_pipe *mue_ep[MUE_ENDPT_MAX];
94
95 struct mue_cdata mue_cdata;
96 callout_t mue_stat_ch;
97
98 struct usbd_device *mue_udev;
99 struct usbd_interface *mue_iface;
100
101 struct usb_task mue_tick_task;
102 struct usb_task mue_stop_task;
103
104 kmutex_t mue_mii_lock;
105
106 struct timeval mue_rx_notice;
107
108 uint16_t mue_product;
109 uint16_t mue_flags;
110
111 int mue_if_flags;
112 int mue_refcnt;
113
114 krndsource_t mue_rnd_source;
115
116 int mue_phyno;
117 uint32_t mue_rxbufsz;
118 uint32_t mue_txbufsz;
119 int mue_link;
120 };
121
122 #endif /* _IF_MUEVAR_H_ */
123