summaryrefslogtreecommitdiff
path: root/sys/dev/pci/if_myxreg.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/pci/if_myxreg.h')
-rw-r--r--sys/dev/pci/if_myxreg.h206
1 files changed, 206 insertions, 0 deletions
diff --git a/sys/dev/pci/if_myxreg.h b/sys/dev/pci/if_myxreg.h
new file mode 100644
index 00000000000..1edd00c2407
--- /dev/null
+++ b/sys/dev/pci/if_myxreg.h
@@ -0,0 +1,206 @@
+/* $OpenBSD: if_myxreg.h,v 1.1 2007/05/31 18:23:42 reyk Exp $ */
+
+/*
+ * Copyright (c) 2007 Reyk Floeter <reyk@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * Register definitions for the Myricom Myri-10G Lanai-Z8E Ethernet chipsets.
+ */
+
+#ifndef _MYX_REG_H
+#define _MYX_REG_H
+
+/*
+ * Common definitions
+ */
+
+#define MYXBAR0 PCI_MAPREG_START
+
+#define MYX_NRXDESC 256
+#define MYX_IRQCOALDELAY 30
+#define MYX_IRQDEASSERTWAIT 1
+#define MYX_FLOW_CONTROL 1
+
+#define MYXALIGN_CMD 64
+#define MYXALIGN_DATA PAGE_SIZE
+
+#define MYX_ADDRHIGH(_v) htobe32((_v >> 32) & 0xffffffff)
+#define MYX_ADDRLOW(_v) htobe32(_v & 0xffffffff)
+
+/*
+ * PCI memory/register layout
+ */
+
+#define MYX_SRAM 0x00000000 /* SRAM offset */
+#define MYX_SRAM_SIZE 0x001dff00 /* SRAM size */
+#define MYX_HEADER_POS 0x0000003c /* Header position offset */
+#define MYX_HEADER_POS_SIZE 0x00000004 /* Header position size */
+#define MYX_FW 0x00100000 /* Firmware offset */
+#define MYX_FW_BOOT 0x00100008 /* Firmware boot offset */
+#define MYX_EEPROM 0x001dfe00 /* EEPROM offset */
+#define MYX_EEPROM_SIZE 0x00000100 /* EEPROM size */
+#define MYX_BOOT 0x00fc0000 /* Boot handoff */
+#define MYX_RDMA 0x00fc01c0 /* Dummy RDMA */
+#define MYX_CMD 0x00f80000 /* Command offset */
+
+/*
+ * Firmware definitions
+ */
+
+#define MYXFW_ALIGNED "myx-eth_z8e"
+#define MYXFW_UNALIGNED "myx-ethp_z8e"
+#define MYXFW_TYPE_ETH 0x45544820
+#define MYXFW_VER "1.4." /* stored as a string... */
+
+#define MYXFW_MIN_LEN (MYX_HEADER_POS + MYX_HEADER_POS_SIZE)
+
+struct myx_firmware_hdr {
+ u_int32_t fw_hdrlength;
+ u_int32_t fw_type;
+ u_int8_t fw_version[128];
+ u_int32_t fw_sram_size;
+ u_int32_t fw_specs;
+ u_int32_t fw_specs_len;
+} __packed;
+
+
+/*
+ * Commands, descriptors, and DMA structures
+ */
+
+struct myx_cmd {
+ u_int32_t mc_cmd;
+ u_int32_t mc_data0;
+ u_int32_t mc_data1;
+ u_int32_t mc_data2;
+ u_int32_t mc_addr_high;
+ u_int32_t mc_addr_low;
+ u_int8_t mc_pad[40]; /* pad up to 64 bytes */
+} __packed;
+
+struct myx_response {
+ u_int32_t mr_data;
+ u_int32_t mr_result;
+} __packed;
+
+struct myx_bootcmd {
+ u_int32_t bc_addr_high;
+ u_int32_t bc_addr_low;
+ u_int32_t bc_result;
+ u_int32_t bc_offset;
+ u_int32_t bc_length;
+ u_int32_t bc_copyto;
+ u_int32_t bc_jumpto;
+ u_int8_t bc_pad[36]; /* pad up to 64 bytes */
+} __packed;
+
+struct myx_rdmacmd {
+ u_int32_t rc_addr_high;
+ u_int32_t rc_addr_low;
+ u_int32_t rc_result;
+ u_int32_t rc_rdma_high;
+ u_int32_t rc_rdma_low;
+ u_int32_t rc_enable;
+#define MYXRDMA_ON 1
+#define MYXRDMA_OFF 0
+ u_int8_t rc_pad[40]; /* pad up to 64 bytes */
+} __packed;
+
+struct myx_status {
+ u_int32_t ms_reserved;
+ u_int32_t ms_dropped_pause;
+ u_int32_t ms_dropped_unicast;
+ u_int32_t ms_dropped_crc32err;
+ u_int32_t ms_dropped_phyerr;
+ u_int32_t ms_dropped_mcast;
+ u_int32_t ms_txdonecnt;
+ u_int32_t ms_linkstate;
+#define MYXSTS_LINKDOWN 0
+#define MYXSTS_LINKUP 1
+#define MYXSTS_LINKMYRINET 2
+#define MYXSTS_LINKUNKNOWN 3
+ u_int32_t ms_dropped_linkoverflow;
+ u_int32_t ms_dropped_linkerror;
+ u_int32_t ms_dropped_runt;
+ u_int32_t ms_dropped_overrun;
+ u_int32_t ms_dropped_smallbufunderrun;
+ u_int32_t ms_dropped_bigbufunderrun;
+ u_int32_t ms_rdmatags_available;
+#define MYXSTS_RDMAON 1
+#define MYXSTS_RDMAOFF 0
+ u_int8_t ms_txstopped;
+ u_int8_t ms_linkdowncnt;
+ u_int8_t ms_statusupdated;
+ u_int8_t ms_isvalid;
+} __packed;
+
+struct myx_rxdesc {
+ u_int16_t rd_csum;
+ u_int16_t rd_length;
+} __packed;
+
+enum {
+ MYXCMD_NONE = 0,
+ MYXCMD_RESET = 1,
+ MYXCMD_GET_VERSION = 2,
+ MYXCMD_SET_INTRQDMA = 3,
+ MYXCMD_SET_BIGBUFSZ = 4,
+ MYXCMD_SET_SMALLBUFSZ = 5,
+ MYXCMD_GET_TXOFF = 6,
+ MYXCMD_GET_SMALLRXOFF = 7,
+ MYXCMD_GET_BIGRXOFF = 8,
+ MYXCMD_GET_INTRACKOFF = 9,
+ MYXCMD_GET_INTRDEASSERTOFF = 10,
+ MYXCMD_GET_TXRINGSZ = 11,
+ MYXCMD_GET_RXRINGSZ = 12,
+ MYXCMD_SET_INTRQSZ = 13,
+ MYXCMD_SET_IFUP = 14,
+ MYXCMD_SET_IFDOWN = 15,
+ MYXCMD_SET_MTU = 16,
+ MYXCMD_GET_INTRCOALDELAYOFF = 17,
+ MYXCMD_SET_STATSINTVL = 18,
+ MYXCMD_SET_STATSDMA_OLD = 19,
+ MYXCMD_SET_PROMISC = 20,
+ MYXCMD_UNSET_PROMISC = 21,
+ MYXCMD_SET_LLADDR = 22,
+ MYXCMD_SET_FC = 23,
+ MYXCMD_UNSET_FC = 24,
+ MYXCMD_DMA_TEST = 25,
+ MYXCMD_SET_ALLMULTI = 26,
+ MYXCMD_UNSET_ALLMULTI = 27,
+ MYXCMD_SET_MCASTGROUP = 28,
+ MYXCMD_UNSET_MCASTGROUP = 29,
+ MYXCMD_UNSET_MCAST = 30,
+ MYXCMD_SET_STATSDMA = 31,
+ MYXCMD_UNALIGNED_DMA_TEST = 32,
+ MYXCMD_GET_UNALIGNED_STATUS = 33
+};
+
+enum {
+ MYXCMD_OK = 0,
+ MYXCMD_UNKNOWN = 1,
+ MYXCMD_ERR_RANGE = 2,
+ MYXCMD_ERR_BUSY = 3,
+ MYXCMD_ERR_EMPTY = 4,
+ MYXCMD_ERR_CLOSED = 5,
+ MYXCMD_ERR_HASH = 6,
+ MYXCMD_ERR_BADPORT = 7,
+ MYXCMD_ERR_RES = 8,
+ MYXCMD_ERR_MULTICAST = 9,
+ MYXCMD_ERR_UNALIGNED = 10
+};
+
+#endif /* _MYX_REG_H */