xref: /dragonfly/sys/bus/u4b/net/if_cdcereg.h (revision 0e23f1df67bc88a3e0766ae418d445b227340023)
1 /*-
2  * Copyright (c) 2003-2005 Craig Boston
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *      This product includes software developed by Bill Paul.
16  * 4. Neither the name of the author nor the names of any co-contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul, THE VOICES IN HIS HEAD OR
24  * THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
30  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * $FreeBSD$
33  */
34 
35 #ifndef _USB_IF_CDCEREG_H_
36 #define   _USB_IF_CDCEREG_H_
37 
38 #define   CDCE_FRAMES_MAX     8                   /* units */
39 #define   CDCE_IND_SIZE_MAX 32            /* bytes */
40 
41 #define   CDCE_NCM_TX_MINLEN 512                  /* bytes, must be power of two */
42 #define   CDCE_NCM_TX_MAXLEN (16384 + 4)          /* bytes, must be short terminated */
43 #define   CDCE_NCM_TX_FRAMES_MAX 8      /* units */
44 
45 #define   CDCE_NCM_RX_MAXLEN (1UL << 14)          /* bytes */
46 #define   CDCE_NCM_RX_FRAMES_MAX 1      /* units */
47 
48 #define   CDCE_NCM_SUBFRAMES_MAX 32     /* units */
49 
50 #define   CDCE_NCM_ALIGN(rem,off,mod) \
51     ((uint32_t)(((uint32_t)(rem)) - \
52     ((uint32_t)((-(uint32_t)(off)) & (-(uint32_t)(mod))))))
53 
54 #ifndef CDCE_HAVE_NCM
55 #define   CDCE_HAVE_NCM 1
56 #endif
57 
58 enum {
59           CDCE_BULK_RX,
60           CDCE_BULK_TX,
61           CDCE_INTR_RX,
62           CDCE_INTR_TX,
63           CDCE_N_TRANSFER,
64 };
65 
66 struct cdce_ncm {
67           struct usb_ncm16_hdr hdr;
68           struct usb_ncm16_dpt dpt;
69           struct usb_ncm16_dp dp[CDCE_NCM_SUBFRAMES_MAX];
70           uint32_t rx_max;
71           uint32_t tx_max;
72           uint16_t tx_remainder;
73           uint16_t tx_modulus;
74           uint16_t tx_struct_align;
75           uint16_t tx_seq;
76           uint16_t tx_nframe;
77 };
78 
79 struct cdce_softc {
80           struct usb_ether    sc_ue;
81           struct lock                   sc_lock;
82 #if CDCE_HAVE_NCM
83           struct cdce_ncm               sc_ncm;
84 #endif
85           struct usb_xfer     *sc_xfer[CDCE_N_TRANSFER];
86           struct mbuf                   *sc_rx_buf[CDCE_FRAMES_MAX];
87           struct mbuf                   *sc_tx_buf[CDCE_FRAMES_MAX];
88 
89           int                           sc_flags;
90 #define   CDCE_FLAG_ZAURUS    0x0001
91 #define   CDCE_FLAG_NO_UNION  0x0002
92 #define   CDCE_FLAG_RX_DATA   0x0010
93 
94           uint8_t sc_eaddr_str_index;
95           uint8_t   sc_ifaces_index[2];
96           uint8_t sc_notify_state;
97 #define   CDCE_NOTIFY_NETWORK_CONNECTION          0
98 #define   CDCE_NOTIFY_SPEED_CHANGE      1
99 #define   CDCE_NOTIFY_DONE              2
100 };
101 
102 #define   CDCE_LOCK(_sc)                          lockmgr(&(_sc)->sc_lock, LK_EXCLUSIVE)
103 #define   CDCE_UNLOCK(_sc)              lockmgr(&(_sc)->sc_lock, LK_RELEASE)
104 #define   CDCE_LOCK_ASSERT(_sc, t)      KKASSERT(lockowned(&(_sc)->sc_lock))
105 #endif                                            /* _USB_IF_CDCEREG_H_ */
106