]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - sys/mips/nlm/dev/net/xlpge.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / sys / mips / nlm / dev / net / xlpge.h
1 /*-
2  * Copyright (c) 2003-2012 Broadcom Corporation
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  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in
13  *    the documentation and/or other materials provided with the
14  *    distribution.
15  * 
16  * THIS SOFTWARE IS PROVIDED BY BROADCOM ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL BROADCOM OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * $FreeBSD$
29  */
30
31 #ifndef __XLPGE_H__
32 #define __XLPGE_H__
33
34 #define NLM_XLPGE_TXQ_SIZE      1024
35 #define MAC_CRC_LEN             4
36
37 enum xlpge_link_state {
38         NLM_LINK_DOWN,
39         NLM_LINK_UP
40 };
41
42 enum xlpge_floctrl_status {
43         NLM_FLOWCTRL_DISABLED,
44         NLM_FLOWCTRL_ENABLED
45 };
46
47 struct nlm_xlp_portdata {
48         struct ifnet *xlpge_if;
49         struct nlm_xlpge_softc *xlpge_sc;
50 };
51
52 struct nlm_xlpnae_softc {
53         device_t        xlpnae_dev;
54         int             node;           /* XLP Node id */
55         uint64_t        base;           /* NAE IO base */
56         uint64_t        poe_base;       /* POE IO base */
57         uint64_t        poedv_base;     /* POE distribution vec IO base */
58
59         int             freq;           /* frequency of nae block */
60         int             flow_crc_poly;  /* Flow CRC16 polynomial */
61         int             total_free_desc; /* total for node */
62         int             max_ports;
63         int             total_num_ports;
64         int             per_port_num_flows;
65
66         u_int           nucores;
67         u_int           nblocks;
68         u_int           num_complex;
69         u_int           ncontexts;
70
71         /*  Ingress side parameters */
72         u_int           num_desc;       /* no of descriptors in each packet */
73         u_int           parser_threshold;/* threshold of entries above which */
74                                         /* the parser sequencer is scheduled */
75         /* NetIOR configs */
76         u_int           cmplx_type[8];          /* XXXJC: redundant? */
77         struct nae_port_config *portcfg;
78         u_int           blockmask;
79         u_int           portmask[XLP_NAE_NBLOCKS];
80         u_int           ilmask;
81         u_int           xauimask;
82         u_int           sgmiimask;
83         u_int           hw_parser_en;
84         u_int           prepad_en;
85         u_int           prepad_size;
86         u_int           driver_mode;
87         u_int           ieee_1588_en;
88 };
89
90 struct nlm_xlpge_softc {
91         struct ifnet    *xlpge_if;      /* should be first member */
92                                         /* see - mii.c:miibus_attach() */
93         device_t        xlpge_dev;
94         device_t        mii_bus;
95         struct nlm_xlpnae_softc *network_sc;
96         uint64_t        base_addr;      /* NAE IO base */
97         int             node;           /* node id (quickread) */
98         int             block;          /* network block id (quickread) */
99         int             port;           /* port id - among the 18 in XLP */
100         int             type;           /* port type - see xlp_gmac_port_types */
101         int             valid;          /* boolean: valid port or not */
102         struct mii_data xlpge_mii;
103         int             nfree_desc;     /* No of free descriptors sent to port */
104         int             phy_addr;       /* PHY id for the interface */
105
106         int             speed;          /* Port speed */
107         int             duplexity;      /* Port duplexity */
108         int             link;           /* Port link status */
109         int              flowctrl;      /* Port flow control setting */
110
111         unsigned char   dev_addr[ETHER_ADDR_LEN]; 
112         struct mtx      sc_lock;
113         int             if_flags;
114         struct nae_port_config *portcfg;
115         struct callout  xlpge_callout;
116         int             mdio_bus;
117         int             txq;
118         int             rxfreeq;
119         int             hw_parser_en;
120         int             prepad_en;
121         int             prepad_size;
122 };
123
124 #define XLP_NTXFRAGS            16
125 #define NULL_VFBID              127
126
127 struct xlpge_tx_desc {
128         uint64_t        frag[XLP_NTXFRAGS];
129 };
130
131 #define XLPGE_LOCK_INIT(_sc, _name)     \
132         mtx_init(&(_sc)->sc_lock, _name, MTX_NETWORK_LOCK, MTX_DEF)
133 #define XLPGE_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_lock)
134 #define XLPGE_LOCK(_sc)         mtx_lock(&(_sc)->sc_lock)
135 #define XLPGE_UNLOCK(_sc)       mtx_unlock(&(_sc)->sc_lock)
136 #define XLPGE_LOCK_ASSERT(_sc)  mtx_assert(&(_sc)->sc_lock, MA_OWNED)
137
138 #endif