if_muevar.h revision 1.2.4.2 1 /* $NetBSD: if_muevar.h,v 1.2.4.2 2018/09/06 06:56:04 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 1
35 struct mue_chain mue_tx_chain[MUE_TX_LIST_CNT];
36 #define MUE_RX_LIST_CNT 1
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_RED 0x00400000
49
50 uint32_t rx_cmd_b;
51 uint16_t rx_cmd_c;
52 } __packed;
53
54 struct mue_txbuf_hdr {
55 uint32_t tx_cmd_a;
56 #define MUE_TX_CMD_A_LEN_MASK 0x000fffff
57 #define MUE_TX_CMD_A_FCS 0x00400000
58 #define MUE_TX_CMD_A_TPE 0x02000000
59 #define MUE_TX_CMD_A_IPE 0x04000000
60 #define MUE_TX_CMD_A_LSO 0x08000000
61
62 uint32_t tx_cmd_b;
63 #define MUE_TX_MSS_MIN 8
64 #define MUE_TX_CMD_B_MSS_SHIFT 16
65 #define MUE_TX_CMD_B_MSS_MASK 0x3fff0000
66
67 } __packed;
68
69 struct mue_softc {
70 device_t mue_dev;
71 bool mue_dying;
72
73 uint8_t mue_enaddr[ETHER_ADDR_LEN];
74 struct ethercom mue_ec;
75 struct mii_data mue_mii;
76 #define GET_MII(sc) (&(sc)->mue_mii)
77 #define GET_IFP(sc) (&(sc)->mue_ec.ec_if)
78
79 /* The interrupt endpoint is currently unused by the Moschip part. */
80 #define MUE_ENDPT_RX 0
81 #define MUE_ENDPT_TX 1
82 #define MUE_ENDPT_INTR 2
83 #define MUE_ENDPT_MAX 3
84 int mue_ed[MUE_ENDPT_MAX];
85 struct usbd_pipe *mue_ep[MUE_ENDPT_MAX];
86
87 struct mue_cdata mue_cdata;
88 callout_t mue_stat_ch;
89
90 struct usbd_device *mue_udev;
91 struct usbd_interface *mue_iface;
92
93 struct usb_task mue_tick_task;
94 struct usb_task mue_stop_task;
95
96 kmutex_t mue_mii_lock;
97
98 struct timeval mue_rx_notice;
99
100 uint16_t mue_product;
101 uint16_t mue_flags;
102
103 int mue_if_flags;
104 int mue_refcnt;
105
106 krndsource_t mue_rnd_source;
107
108 int mue_phyno;
109 uint32_t mue_rxbufsz;
110 uint32_t mue_txbufsz;
111 int mue_link;
112 };
113
114 #endif /* _IF_MUEVAR_H_ */
115