mxge_mcp.h revision 155852
1155852Sgallatin/*******************************************************************************
2155852Sgallatin
3155852SgallatinCopyright (c) 2006, Myricom Inc.
4155852SgallatinAll rights reserved.
5155852Sgallatin
6155852SgallatinRedistribution and use in source and binary forms, with or without
7155852Sgallatinmodification, are permitted provided that the following conditions are met:
8155852Sgallatin
9155852Sgallatin 1. Redistributions of source code must retain the above copyright notice,
10155852Sgallatin    this list of conditions and the following disclaimer.
11155852Sgallatin
12155852Sgallatin 2. Redistributions in binary form must reproduce the above copyright
13155852Sgallatin    notice, this list of conditions and the following disclaimer in the
14155852Sgallatin    documentation and/or other materials provided with the distribution.
15155852Sgallatin
16155852Sgallatin 3. Neither the name of the Myricom Inc, nor the names of its
17155852Sgallatin    contributors may be used to endorse or promote products derived from
18155852Sgallatin    this software without specific prior written permission.
19155852Sgallatin
20155852SgallatinTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21155852SgallatinAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22155852SgallatinIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23155852SgallatinARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24155852SgallatinLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25155852SgallatinCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26155852SgallatinSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27155852SgallatinINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28155852SgallatinCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29155852SgallatinARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30155852SgallatinPOSSIBILITY OF SUCH DAMAGE.
31155852Sgallatin
32155852Sgallatin$FreeBSD: head/sys/dev/mxge/mxge_mcp.h 155852 2006-02-19 22:39:19Z gallatin $
33155852Sgallatin***************************************************************************/
34155852Sgallatin
35155852Sgallatin#ifndef _myri10ge_mcp_h
36155852Sgallatin#define _myri10ge_mcp_h
37155852Sgallatin
38155852Sgallatin#ifdef MYRI10GE_MCP
39155852Sgallatintypedef signed char          int8_t;
40155852Sgallatintypedef signed short        int16_t;
41155852Sgallatintypedef signed int          int32_t;
42155852Sgallatintypedef signed long long    int64_t;
43155852Sgallatintypedef unsigned char       uint8_t;
44155852Sgallatintypedef unsigned short     uint16_t;
45155852Sgallatintypedef unsigned int       uint32_t;
46155852Sgallatintypedef unsigned long long uint64_t;
47155852Sgallatin#endif
48155852Sgallatin
49155852Sgallatin/* 8 Bytes */
50155852Sgallatintypedef struct
51155852Sgallatin{
52155852Sgallatin  uint32_t high;
53155852Sgallatin  uint32_t low;
54155852Sgallatin} mcp_dma_addr_t;
55155852Sgallatin
56155852Sgallatin/* 16 Bytes */
57155852Sgallatintypedef struct
58155852Sgallatin{
59155852Sgallatin  uint32_t data0;
60155852Sgallatin  uint32_t data1;
61155852Sgallatin  uint32_t seqnum;
62155852Sgallatin  uint16_t index;
63155852Sgallatin  uint8_t flag;
64155852Sgallatin  uint8_t type;
65155852Sgallatin} mcp_slot_t;
66155852Sgallatin
67155852Sgallatin/* 64 Bytes */
68155852Sgallatintypedef struct
69155852Sgallatin{
70155852Sgallatin  uint32_t cmd;
71155852Sgallatin  uint32_t data0;	/* will be low portion if data > 32 bits */
72155852Sgallatin  /* 8 */
73155852Sgallatin  uint32_t data1;	/* will be high portion if data > 32 bits */
74155852Sgallatin  uint32_t data2;	/* currently unused.. */
75155852Sgallatin  /* 16 */
76155852Sgallatin  mcp_dma_addr_t response_addr;
77155852Sgallatin  /* 24 */
78155852Sgallatin  uint8_t pad[40];
79155852Sgallatin} mcp_cmd_t;
80155852Sgallatin
81155852Sgallatin/* 8 Bytes */
82155852Sgallatintypedef struct
83155852Sgallatin{
84155852Sgallatin  uint32_t data;
85155852Sgallatin  uint32_t result;
86155852Sgallatin} mcp_cmd_response_t;
87155852Sgallatin
88155852Sgallatin
89155852Sgallatin
90155852Sgallatin/*
91155852Sgallatin   flags used in mcp_kreq_ether_send_t:
92155852Sgallatin
93155852Sgallatin   The SMALL flag is only needed in the first segment. It is raised
94155852Sgallatin   for packets that are total less or equal 512 bytes.
95155852Sgallatin
96155852Sgallatin   The CKSUM flag must be set in all segments.
97155852Sgallatin
98155852Sgallatin   The PADDED flags is set if the packet needs to be padded, and it
99155852Sgallatin   must be set for all segments.
100155852Sgallatin
101155852Sgallatin   The  MYRI10GE_MCP_ETHER_FLAGS_ALIGN_ODD must be set if the cumulative
102155852Sgallatin   length of all previous segments was odd.
103155852Sgallatin*/
104155852Sgallatin
105155852Sgallatin
106155852Sgallatin#define MYRI10GE_MCP_ETHER_FLAGS_VALID      0x1
107155852Sgallatin#define MYRI10GE_MCP_ETHER_FLAGS_FIRST      0x2
108155852Sgallatin#define MYRI10GE_MCP_ETHER_FLAGS_ALIGN_ODD  0x4
109155852Sgallatin#define MYRI10GE_MCP_ETHER_FLAGS_CKSUM      0x8
110155852Sgallatin#define MYRI10GE_MCP_ETHER_FLAGS_SMALL      0x10
111155852Sgallatin#define MYRI10GE_MCP_ETHER_FLAGS_NOT_LAST   0x100
112155852Sgallatin#define MYRI10GE_MCP_ETHER_FLAGS_TSO_HDR    0x200
113155852Sgallatin#define MYRI10GE_MCP_ETHER_FLAGS_TSO  	    0x400
114155852Sgallatin
115155852Sgallatin#define MYRI10GE_MCP_ETHER_SEND_SMALL_SIZE  1520
116155852Sgallatin#define MYRI10GE_MCP_ETHER_MAX_MTU          9400
117155852Sgallatin
118155852Sgallatintypedef union mcp_pso_or_cumlen
119155852Sgallatin{
120155852Sgallatin  uint16_t pseudo_hdr_offset;
121155852Sgallatin  uint16_t cum_len;
122155852Sgallatin} mcp_pso_or_cumlen_t;
123155852Sgallatin
124155852Sgallatin#define	MYRI10GE_MCP_ETHER_MAX_SEND_DESC 12
125155852Sgallatin#define MYRI10GE_MCP_ETHER_PAD	    2
126155852Sgallatin
127155852Sgallatin/* 16 Bytes */
128155852Sgallatintypedef struct
129155852Sgallatin{
130155852Sgallatin  uint32_t addr_high;
131155852Sgallatin  uint32_t addr_low;
132155852Sgallatin  uint16_t length;
133155852Sgallatin  uint8_t  pad;
134155852Sgallatin  uint8_t  cksum_offset; 	/* where to start computing cksum */
135155852Sgallatin  uint16_t pseudo_hdr_offset;
136155852Sgallatin  uint16_t flags;	       	/* as defined above */
137155852Sgallatin} mcp_kreq_ether_send_t;
138155852Sgallatin
139155852Sgallatin/* 8 Bytes */
140155852Sgallatintypedef struct
141155852Sgallatin{
142155852Sgallatin  uint32_t addr_high;
143155852Sgallatin  uint32_t addr_low;
144155852Sgallatin} mcp_kreq_ether_recv_t;
145155852Sgallatin
146155852Sgallatin
147155852Sgallatin/* Commands */
148155852Sgallatin
149155852Sgallatin#define MYRI10GE_MCP_CMD_OFFSET 0xf80000
150155852Sgallatin
151155852Sgallatintypedef enum {
152155852Sgallatin  MYRI10GE_MCP_CMD_NONE = 0,
153155852Sgallatin  /* Reset the mcp, it is left in a safe state, waiting
154155852Sgallatin     for the driver to set all its parameters */
155155852Sgallatin  MYRI10GE_MCP_CMD_RESET,
156155852Sgallatin
157155852Sgallatin  /* get the version number of the current firmware..
158155852Sgallatin     (may be available in the eeprom strings..? */
159155852Sgallatin  MYRI10GE_MCP_GET_MCP_VERSION,
160155852Sgallatin
161155852Sgallatin
162155852Sgallatin  /* Parameters which must be set by the driver before it can
163155852Sgallatin     issue MYRI10GE_MCP_CMD_ETHERNET_UP. They persist until the next
164155852Sgallatin     MYRI10GE_MCP_CMD_RESET is issued */
165155852Sgallatin
166155852Sgallatin  MYRI10GE_MCP_CMD_SET_INTRQ0_DMA,
167155852Sgallatin  MYRI10GE_MCP_CMD_SET_INTRQ1_DMA,
168155852Sgallatin  MYRI10GE_MCP_CMD_SET_BIG_BUFFER_SIZE,	/* in bytes, power of 2 */
169155852Sgallatin  MYRI10GE_MCP_CMD_SET_SMALL_BUFFER_SIZE,	/* in bytes */
170155852Sgallatin
171155852Sgallatin
172155852Sgallatin  /* Parameters which refer to lanai SRAM addresses where the
173155852Sgallatin     driver must issue PIO writes for various things */
174155852Sgallatin
175155852Sgallatin  MYRI10GE_MCP_CMD_GET_SEND_OFFSET,
176155852Sgallatin  MYRI10GE_MCP_CMD_GET_SMALL_RX_OFFSET,
177155852Sgallatin  MYRI10GE_MCP_CMD_GET_BIG_RX_OFFSET,
178155852Sgallatin  MYRI10GE_MCP_CMD_GET_IRQ_ACK_OFFSET,
179155852Sgallatin  MYRI10GE_MCP_CMD_GET_IRQ_DEASSERT_OFFSET,
180155852Sgallatin  MYRI10GE_MCP_CMD_GET_IRQ_ACK_DEASSERT_OFFSET,
181155852Sgallatin
182155852Sgallatin  /* Parameters which refer to rings stored on the MCP,
183155852Sgallatin     and whose size is controlled by the mcp */
184155852Sgallatin
185155852Sgallatin  MYRI10GE_MCP_CMD_GET_SEND_RING_SIZE,	/* in bytes */
186155852Sgallatin  MYRI10GE_MCP_CMD_GET_RX_RING_SIZE,		/* in bytes */
187155852Sgallatin
188155852Sgallatin  /* Parameters which refer to rings stored in the host,
189155852Sgallatin     and whose size is controlled by the host.  Note that
190155852Sgallatin     all must be physically contiguous and must contain
191155852Sgallatin     a power of 2 number of entries.  */
192155852Sgallatin
193155852Sgallatin  MYRI10GE_MCP_CMD_SET_INTRQ_SIZE, 	/* in bytes */
194155852Sgallatin
195155852Sgallatin  /* command to bring ethernet interface up.  Above parameters
196155852Sgallatin     (plus mtu & mac address) must have been exchanged prior
197155852Sgallatin     to issuing this command  */
198155852Sgallatin  MYRI10GE_MCP_CMD_ETHERNET_UP,
199155852Sgallatin
200155852Sgallatin  /* command to bring ethernet interface down.  No further sends
201155852Sgallatin     or receives may be processed until an MYRI10GE_MCP_CMD_ETHERNET_UP
202155852Sgallatin     is issued, and all interrupt queues must be flushed prior
203155852Sgallatin     to ack'ing this command */
204155852Sgallatin
205155852Sgallatin  MYRI10GE_MCP_CMD_ETHERNET_DOWN,
206155852Sgallatin
207155852Sgallatin  /* commands the driver may issue live, without resetting
208155852Sgallatin     the nic.  Note that increasing the mtu "live" should
209155852Sgallatin     only be done if the driver has already supplied buffers
210155852Sgallatin     sufficiently large to handle the new mtu.  Decreasing
211155852Sgallatin     the mtu live is safe */
212155852Sgallatin
213155852Sgallatin  MYRI10GE_MCP_CMD_SET_MTU,
214155852Sgallatin  MYRI10GE_MCP_CMD_SET_INTR_COAL_DELAY,  /* in microseconds */
215155852Sgallatin  MYRI10GE_MCP_CMD_SET_STATS_INTERVAL,   /* in microseconds */
216155852Sgallatin  MYRI10GE_MCP_CMD_SET_STATS_DMA,
217155852Sgallatin
218155852Sgallatin  MYRI10GE_MCP_ENABLE_PROMISC,
219155852Sgallatin  MYRI10GE_MCP_DISABLE_PROMISC,
220155852Sgallatin  MYRI10GE_MCP_SET_MAC_ADDRESS,
221155852Sgallatin
222155852Sgallatin  MYRI10GE_MCP_ENABLE_FLOW_CONTROL,
223155852Sgallatin  MYRI10GE_MCP_DISABLE_FLOW_CONTROL
224155852Sgallatin} myri10ge_mcp_cmd_type_t;
225155852Sgallatin
226155852Sgallatin
227155852Sgallatintypedef enum {
228155852Sgallatin  MYRI10GE_MCP_CMD_OK = 0,
229155852Sgallatin  MYRI10GE_MCP_CMD_UNKNOWN,
230155852Sgallatin  MYRI10GE_MCP_CMD_ERROR_RANGE,
231155852Sgallatin  MYRI10GE_MCP_CMD_ERROR_BUSY,
232155852Sgallatin  MYRI10GE_MCP_CMD_ERROR_EMPTY,
233155852Sgallatin  MYRI10GE_MCP_CMD_ERROR_CLOSED,
234155852Sgallatin  MYRI10GE_MCP_CMD_ERROR_HASH_ERROR,
235155852Sgallatin  MYRI10GE_MCP_CMD_ERROR_BAD_PORT,
236155852Sgallatin  MYRI10GE_MCP_CMD_ERROR_RESOURCES
237155852Sgallatin} myri10ge_mcp_cmd_status_t;
238155852Sgallatin
239155852Sgallatintypedef enum {
240155852Sgallatin  MYRI10GE_MCP_INTR_NONE = 0,
241155852Sgallatin  MYRI10GE_MCP_INTR_ETHER_SEND_DONE,
242155852Sgallatin  MYRI10GE_MCP_INTR_ETHER_RECV_SMALL,
243155852Sgallatin  MYRI10GE_MCP_INTR_ETHER_RECV_BIG,
244155852Sgallatin  MYRI10GE_MCP_INTR_LINK_CHANGE,
245155852Sgallatin  MYRI10GE_MCP_INTR_STATS_UPDATE,
246155852Sgallatin  MYRI10GE_MCP_INTR_ETHER_DOWN
247155852Sgallatin} myri10ge_mcp_intr_type_t;
248155852Sgallatin
249155852Sgallatin
250155852Sgallatin/* 32 Bytes */
251155852Sgallatintypedef struct
252155852Sgallatin{
253155852Sgallatin  uint32_t link_up;
254155852Sgallatin  uint32_t dropped_link_overflow;
255155852Sgallatin  uint32_t dropped_link_error_or_filtered;
256155852Sgallatin  uint32_t dropped_runt;
257155852Sgallatin  uint32_t dropped_overrun;
258155852Sgallatin  uint32_t dropped_no_small_buffer;
259155852Sgallatin  uint32_t dropped_no_big_buffer;
260155852Sgallatin  uint32_t dropped_interrupt_busy;
261155852Sgallatin  uint32_t rdma_tags_available;
262155852Sgallatin} mcp_stats_t;
263155852Sgallatin
264155852Sgallatin
265155852Sgallatin#endif /* _myri10ge_mcp_h */
266