• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _PHANTOM_HW_H
2 #define _PHANTOM_HW_H
3 
4 /*
5  * Copyright (C) 2008 Michael Brown <mbrown@fensystems.co.uk>.
6  * Copyright (C) 2008 NetXen, Inc.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of the
11  * License, or any later version.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  */
22 
23 FILE_LICENCE ( GPL2_OR_LATER );
24 
25 /**
26  * @file
27  *
28  * Phantom hardware definitions
29  *
30  */
31 
32 /** A Phantom RX descriptor */
33 struct phantom_rds_pb {
34 	pseudo_bit_t handle[16];		/**< Reference handle */
35 	pseudo_bit_t flags[16];			/**< Flags */
36 	pseudo_bit_t length[32];		/**< Buffer length */
37 
38 	/* --------------------------------------------------------------- */
39 
40 	pseudo_bit_t dma_addr[64];		/**< Buffer DMA address */
41 
42 };
43 
44 /** A Phantom RX status descriptor */
45 struct phantom_sds_pb {
46 	pseudo_bit_t port[4];			/**< Port number */
47 	pseudo_bit_t status[4];			/**< Checksum status */
48 	pseudo_bit_t type[4];			/**< Type */
49 	pseudo_bit_t total_length[16];		/**< Total packet length */
50 	pseudo_bit_t handle[16];		/**< Reference handle */
51 	pseudo_bit_t protocol[4];		/**< Protocol */
52 	pseudo_bit_t pkt_offset[5];		/**< Offset to packet start */
53 	pseudo_bit_t desc_cnt[3];		/**< Descriptor count */
54 	pseudo_bit_t owner[2];			/**< Owner */
55 	pseudo_bit_t opcode[6];			/**< Opcode */
56 
57 	/* --------------------------------------------------------------- */
58 
59 	pseudo_bit_t hash_value[32];		/**< RSS hash value */
60 	pseudo_bit_t hash_type[8];		/**< RSS hash type */
61 	pseudo_bit_t lro[8];			/**< LRO data */
62 };
63 
64 /** Phantom RX status opcodes */
65 enum phantom_sds_opcode {
66 	UNM_SYN_OFFLOAD = 0x03,
67 	UNM_RXPKT_DESC = 0x04,
68 };
69 
70 /** A Phantom TX descriptor */
71 struct phantom_tx_cds_pb {
72 	pseudo_bit_t tcp_hdr_offset[8];		/**< TCP header offset (LSO) */
73         pseudo_bit_t ip_hdr_offset[8];		/**< IP header offset (LSO) */
74 	pseudo_bit_t flags[7];			/**< Flags */
75 	pseudo_bit_t opcode[6];			/**< Opcode */
76 	pseudo_bit_t hw_rsvd_0[3];		/**< (Reserved) */
77 	pseudo_bit_t num_buffers[8];		/**< Total number of buffers */
78 	pseudo_bit_t length[24];		/**< Total length */
79 
80 	/* --------------------------------------------------------------- */
81 
82 	pseudo_bit_t buffer2_dma_addr[64];	/**< Buffer 2 DMA address */
83 
84 	/* --------------------------------------------------------------- */
85 
86 	pseudo_bit_t handle[16];		/**< Reference handle (n/a) */
87 	pseudo_bit_t port_mss[16];		/**< TCP MSS (LSO) */
88 	pseudo_bit_t port[4];			/**< Port */
89 	pseudo_bit_t context_id[4];		/**< Context ID */
90 	pseudo_bit_t total_hdr_length[8];	/**< MAC+IP+TCP header (LSO) */
91 	pseudo_bit_t conn_id[16];		/**< IPSec connection ID */
92 
93 	/* --------------------------------------------------------------- */
94 
95 	pseudo_bit_t buffer3_dma_addr[64];	/**< Buffer 3 DMA address */
96 
97 	/* --------------------------------------------------------------- */
98 
99 	pseudo_bit_t buffer1_dma_addr[64];	/**< Buffer 1 DMA address */
100 
101 	/* --------------------------------------------------------------- */
102 
103 	pseudo_bit_t buffer1_length[16];	/**< Buffer 1 length */
104 	pseudo_bit_t buffer2_length[16];	/**< Buffer 2 length */
105 	pseudo_bit_t buffer3_length[16];	/**< Buffer 3 length */
106 	pseudo_bit_t buffer4_length[16];	/**< Buffer 4 length */
107 
108 	/* --------------------------------------------------------------- */
109 
110 	pseudo_bit_t buffer4_dma_addr[64];	/**< Buffer 4 DMA address */
111 
112 	/* --------------------------------------------------------------- */
113 
114 	pseudo_bit_t hw_rsvd_1[64];		/**< (Reserved) */
115 };
116 
117 /** A Phantom MAC address request body */
118 struct phantom_nic_request_body_mac_request_pb {
119 	pseudo_bit_t opcode[8];			/**< Opcode */
120 	pseudo_bit_t tag[8];			/**< Tag */
121 	pseudo_bit_t mac_addr_0[8];		/**< MAC address byte 0 */
122 	pseudo_bit_t mac_addr_1[8];		/**< MAC address byte 1 */
123 	pseudo_bit_t mac_addr_2[8];		/**< MAC address byte 2 */
124 	pseudo_bit_t mac_addr_3[8];		/**< MAC address byte 3 */
125 	pseudo_bit_t mac_addr_4[8];		/**< MAC address byte 4 */
126 	pseudo_bit_t mac_addr_5[8];		/**< MAC address byte 5 */
127 };
128 
129 /** Phantom MAC request opcodes */
130 enum phantom_mac_request_opcode {
131 	UNM_MAC_ADD = 0x01,			/**< Add MAC address */
132 	UNM_MAC_DEL = 0x02,			/**< Delete MAC address */
133 };
134 
135 /** A Phantom NIC request command descriptor */
136 struct phantom_nic_request_cds_pb {
137 	struct {
138 		pseudo_bit_t dst_minor[18];
139 		pseudo_bit_t dst_subq[1];
140 		pseudo_bit_t dst_major[4];
141 		pseudo_bit_t opcode[6];
142 		pseudo_bit_t hw_rsvd_0[3];
143 		pseudo_bit_t msginfo[24];
144 		pseudo_bit_t hw_rsvd_1[2];
145 		pseudo_bit_t qmsg_type[6];
146 	} common;
147 
148 	/* --------------------------------------------------------------- */
149 
150 	struct {
151 		pseudo_bit_t opcode[8];
152 		pseudo_bit_t comp_id [8];
153 		pseudo_bit_t context_id[16];
154 		pseudo_bit_t need_completion[1];
155 		pseudo_bit_t hw_rsvd_0[23];
156 		pseudo_bit_t sub_opcode[8];
157 	} header;
158 
159 	/* --------------------------------------------------------------- */
160 
161 	union {
162 		struct phantom_nic_request_body_mac_request_pb mac_request;
163 		pseudo_bit_t padding[384];
164 	} body;
165 };
166 
167 /** Phantom NIC request opcodes */
168 enum phantom_nic_request_opcode {
169 	UNM_MAC_EVENT = 0x01,			/**< Add/delete MAC address */
170 };
171 
172 /** A Phantom command descriptor */
173 union phantom_cds_pb {
174 	struct phantom_tx_cds_pb tx;
175 	struct phantom_nic_request_cds_pb nic_request;
176 };
177 
178 /** Phantom command descriptor opcodes */
179 enum phantom_cds_opcode {
180 	UNM_TX_ETHER_PKT = 0x01,		/**< Transmit raw Ethernet */
181 	UNM_NIC_REQUEST = 0x14,			/**< NIC request */
182 };
183 
184 #endif /* _PHANTOM_HW_H */
185