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