126113a74bb2e20b03c4e2b6b3bd831d7e71faab
[people/xl0/gpxe.git] / src / include / gpxe / infiniband.h
1 #ifndef _GPXE_INFINIBAND_H
2 #define _GPXE_INFINIBAND_H
3
4 /** @file
5  *
6  * Infiniband protocol
7  *
8  */
9
10 #include <stdint.h>
11 #include <gpxe/netdevice.h>
12
13 /** Infiniband hardware address length */
14 #define IB_ALEN 20
15 #define IB_HLEN 24
16
17 /** An Infiniband header
18  *
19  * This data structure doesn't represent the on-wire format, but does
20  * contain all the information required by the driver to construct the
21  * packet.
22  */
23 struct ibhdr {
24         /** Peer address */
25         uint8_t peer[IB_ALEN];
26         /** Network-layer protocol */
27         uint16_t proto;
28         /** Reserved, must be zero */
29         uint16_t reserved;
30 } __attribute__ (( packed ));
31
32 extern struct ll_protocol infiniband_protocol;
33
34 extern const char * ib_ntoa ( const void *ll_addr );
35
36 /**
37  * Allocate Infiniband device
38  *
39  * @v priv_size         Size of driver private data
40  * @ret netdev          Network device, or NULL
41  */
42 static inline struct net_device * alloc_ibdev ( size_t priv_size ) {
43         struct net_device *netdev;
44
45         netdev = alloc_netdev ( priv_size );
46         if ( netdev ) {
47                 netdev->ll_protocol = &infiniband_protocol;
48         }
49         return netdev;
50 }
51
52 #endif /* _GPXE_INFINIBAND_H */