Annotation of sys/dev/pci/if_myxreg.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: if_myxreg.h,v 1.2 2007/06/01 18:07:08 reyk Exp $ */
2:
3: /*
4: * Copyright (c) 2007 Reyk Floeter <reyk@openbsd.org>
5: *
6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17: */
18:
19: /*
20: * Register definitions for the Myricom Myri-10G Lanai-Z8E Ethernet chipsets.
21: */
22:
23: #ifndef _MYX_REG_H
24: #define _MYX_REG_H
25:
26: /*
27: * Common definitions
28: */
29:
30: #define MYXBAR0 PCI_MAPREG_START
31:
32: #define MYX_NRXDESC 256
33: #define MYX_NTXDESC_MIN 2
34: #define MYX_IRQCOALDELAY 30
35: #define MYX_IRQDEASSERTWAIT 1
36: #define MYX_MAX_MTU_SMALL (ETHERMTU + ETHER_HDR_LEN + 4)
37: #define MYX_MAX_MTU_BIG PAGE_SIZE
38:
39: #define MYXALIGN_CMD 64
40: #define MYXALIGN_DATA PAGE_SIZE
41:
42: #define MYX_ADDRHIGH(_v) ((_v >> 32) & 0xffffffff)
43: #define MYX_ADDRLOW(_v) (_v & 0xffffffff)
44:
45: /*
46: * PCI memory/register layout
47: */
48:
49: #define MYX_SRAM 0x00000000 /* SRAM offset */
50: #define MYX_SRAM_SIZE 0x001dff00 /* SRAM size */
51: #define MYX_HEADER_POS 0x0000003c /* Header position offset */
52: #define MYX_HEADER_POS_SIZE 0x00000004 /* Header position size */
53: #define MYX_FW 0x00100000 /* Firmware offset */
54: #define MYX_FW_BOOT 0x00100008 /* Firmware boot offset */
55: #define MYX_EEPROM 0x001dfe00 /* EEPROM offset */
56: #define MYX_EEPROM_SIZE 0x00000100 /* EEPROM size */
57: #define MYX_BOOT 0x00fc0000 /* Boot handoff */
58: #define MYX_RDMA 0x00fc01c0 /* Dummy RDMA */
59: #define MYX_CMD 0x00f80000 /* Command offset */
60:
61: /*
62: * Firmware definitions
63: */
64:
65: #define MYXFW_ALIGNED "myx-eth_z8e"
66: #define MYXFW_UNALIGNED "myx-ethp_z8e"
67: #define MYXFW_TYPE_ETH 0x45544820
68: #define MYXFW_VER "1.4." /* stored as a string... */
69:
70: #define MYXFW_MIN_LEN (MYX_HEADER_POS + MYX_HEADER_POS_SIZE)
71:
72: struct myx_firmware_hdr {
73: u_int32_t fw_hdrlength;
74: u_int32_t fw_type;
75: u_int8_t fw_version[128];
76: u_int32_t fw_sram_size;
77: u_int32_t fw_specs;
78: u_int32_t fw_specs_len;
79: } __packed;
80:
81:
82: /*
83: * Commands, descriptors, and DMA structures
84: */
85:
86: struct myx_cmd {
87: u_int32_t mc_cmd;
88: u_int32_t mc_data0;
89: u_int32_t mc_data1;
90: u_int32_t mc_data2;
91: u_int32_t mc_addr_high;
92: u_int32_t mc_addr_low;
93: u_int8_t mc_pad[40]; /* pad up to 64 bytes */
94: } __packed;
95:
96: struct myx_response {
97: u_int32_t mr_data;
98: u_int32_t mr_result;
99: } __packed;
100:
101: struct myx_bootcmd {
102: u_int32_t bc_addr_high;
103: u_int32_t bc_addr_low;
104: u_int32_t bc_result;
105: u_int32_t bc_offset;
106: u_int32_t bc_length;
107: u_int32_t bc_copyto;
108: u_int32_t bc_jumpto;
109: u_int8_t bc_pad[36]; /* pad up to 64 bytes */
110: } __packed;
111:
112: struct myx_rdmacmd {
113: u_int32_t rc_addr_high;
114: u_int32_t rc_addr_low;
115: u_int32_t rc_result;
116: u_int32_t rc_rdma_high;
117: u_int32_t rc_rdma_low;
118: u_int32_t rc_enable;
119: #define MYXRDMA_ON 1
120: #define MYXRDMA_OFF 0
121: u_int8_t rc_pad[40]; /* pad up to 64 bytes */
122: } __packed;
123:
124: struct myx_status {
125: u_int32_t ms_reserved;
126: u_int32_t ms_dropped_pause;
127: u_int32_t ms_dropped_unicast;
128: u_int32_t ms_dropped_crc32err;
129: u_int32_t ms_dropped_phyerr;
130: u_int32_t ms_dropped_mcast;
131: u_int32_t ms_txdonecnt;
132: u_int32_t ms_linkstate;
133: #define MYXSTS_LINKDOWN 0
134: #define MYXSTS_LINKUP 1
135: #define MYXSTS_LINKMYRINET 2
136: #define MYXSTS_LINKUNKNOWN 3
137: u_int32_t ms_dropped_linkoverflow;
138: u_int32_t ms_dropped_linkerror;
139: u_int32_t ms_dropped_runt;
140: u_int32_t ms_dropped_overrun;
141: u_int32_t ms_dropped_smallbufunderrun;
142: u_int32_t ms_dropped_bigbufunderrun;
143: u_int32_t ms_rdmatags_available;
144: #define MYXSTS_RDMAON 1
145: #define MYXSTS_RDMAOFF 0
146: u_int8_t ms_txstopped;
147: u_int8_t ms_linkdowncnt;
148: u_int8_t ms_statusupdated;
149: u_int8_t ms_isvalid;
150: } __packed;
151:
152: struct myx_rxdesc {
153: u_int16_t rx_csum;
154: u_int16_t rx_length;
155: } __packed;
156:
157: struct myx_rxbufdesc {
158: u_int32_t rb_addr_high;
159: u_int32_t rb_addr_low;
160: } __packed;
161:
162: struct myx_txdesc {
163: u_int32_t tx_addr_high;
164: u_int32_t tx_addr_low;
165: u_int16_t tx_hdr_offset;
166: u_int16_t tx_length;
167: u_int8_t tx_pad;
168: u_int8_t tx_nsegs;
169: u_int8_t tx_cksum_offset;
170: u_int8_t tx_flags;
171: #define MYXTXD_FLAGS_SMALL (1<<0)
172: #define MYXTXD_FLAGS_FIRST (1<<1)
173: #define MYXTXD_FLAGS_ALIGN_ODD (1<<2)
174: #define MYXTXD_FLAGS_CKSUM (1<<3)
175: #define MYXTXD_FLAGS_NO_TSO (1<<4)
176:
177: #define MYXTXD_FLAGS_TSO_HDR (1<<0)
178: #define MYXTXD_FLAGS_TSO_LAST (1<<3)
179: #define MYXTXD_FLAGS_TSO_CHOP (1<<4)
180: #define MYXTXD_FLAGS_TSO_PLD (1<<5)
181: } __packed;
182:
183: enum {
184: MYXCMD_NONE = 0,
185: MYXCMD_RESET = 1,
186: MYXCMD_GET_VERSION = 2,
187: MYXCMD_SET_INTRQDMA = 3,
188: MYXCMD_SET_BIGBUFSZ = 4,
189: MYXCMD_SET_SMALLBUFSZ = 5,
190: MYXCMD_GET_TXRINGOFF = 6,
191: MYXCMD_GET_RXSMALLRINGOFF = 7,
192: MYXCMD_GET_RXBIGRINGOFF = 8,
193: MYXCMD_GET_INTRACKOFF = 9,
194: MYXCMD_GET_INTRDEASSERTOFF = 10,
195: MYXCMD_GET_TXRINGSZ = 11,
196: MYXCMD_GET_RXRINGSZ = 12,
197: MYXCMD_SET_INTRQSZ = 13,
198: MYXCMD_SET_IFUP = 14,
199: MYXCMD_SET_IFDOWN = 15,
200: MYXCMD_SET_MTU = 16,
201: MYXCMD_GET_INTRCOALDELAYOFF = 17,
202: MYXCMD_SET_STATSINTVL = 18,
203: MYXCMD_SET_STATSDMA_OLD = 19,
204: MYXCMD_SET_PROMISC = 20,
205: MYXCMD_UNSET_PROMISC = 21,
206: MYXCMD_SET_LLADDR = 22,
207: MYXCMD_SET_FC = 23,
208: MYXCMD_UNSET_FC = 24,
209: #define MYXCMD_FC_DEFAULT MYXCMD_SET_FC /* set flow control */
210: MYXCMD_DMA_TEST = 25,
211: MYXCMD_SET_ALLMULTI = 26,
212: MYXCMD_UNSET_ALLMULTI = 27,
213: MYXCMD_SET_MCASTGROUP = 28,
214: MYXCMD_UNSET_MCASTGROUP = 29,
215: MYXCMD_UNSET_MCAST = 30,
216: MYXCMD_SET_STATSDMA = 31,
217: MYXCMD_UNALIGNED_DMA_TEST = 32,
218: MYXCMD_GET_UNALIGNED_STATUS = 33,
219: MYXCMD_MAX = 34
220: };
221:
222: enum {
223: MYXCMD_OK = 0,
224: MYXCMD_UNKNOWN = 1,
225: MYXCMD_ERR_RANGE = 2,
226: MYXCMD_ERR_BUSY = 3,
227: MYXCMD_ERR_EMPTY = 4,
228: MYXCMD_ERR_CLOSED = 5,
229: MYXCMD_ERR_HASH = 6,
230: MYXCMD_ERR_BADPORT = 7,
231: MYXCMD_ERR_RES = 8,
232: MYXCMD_ERR_MULTICAST = 9,
233: MYXCMD_ERR_UNALIGNED = 10
234: };
235:
236: #endif /* _MYX_REG_H */
CVSweb