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