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