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