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