19 #ifndef __NETIO_INTF_H__
20 #define __NETIO_INTF_H__
25 #include <linux/types.h>
30 #if !defined(__HV__) && !defined(__BOGUX__) && !defined(__KERNEL__)
32 #define netio_assert assert
34 #define netio_assert(...) ((void)(0))
41 #if !defined(__HV__) && !defined(__BOGUX__) && !defined(__KERNEL__) && \
43 #define _NETIO_PTHREAD
51 #ifndef NETIO_UNLOCKED
67 while (__builtin_expect(__insn_tns(lock), 0))
83 #define _netio_percpu_mutex_init(L)
84 #define _netio_percpu_mutex_lock(L)
85 #define _netio_percpu_mutex_unlock(L)
92 #define NETIO_MAX_TILES_PER_QUEUE 64
97 #define NETIO_MAX_QUEUE_ID 255
105 #define _NETIO_PKT_NO_L4_CSUM_SHIFT 0
106 #define _NETIO_PKT_NO_L4_CSUM_RMASK 1
107 #define _NETIO_PKT_NO_L4_CSUM_MASK \
108 (_NETIO_PKT_NO_L4_CSUM_RMASK << _NETIO_PKT_NO_L4_CSUM_SHIFT)
111 #define _NETIO_PKT_NO_L3_CSUM_SHIFT 1
112 #define _NETIO_PKT_NO_L3_CSUM_RMASK 1
113 #define _NETIO_PKT_NO_L3_CSUM_MASK \
114 (_NETIO_PKT_NO_L3_CSUM_RMASK << _NETIO_PKT_NO_L3_CSUM_SHIFT)
117 #define _NETIO_PKT_BAD_L3_CSUM_SHIFT 2
118 #define _NETIO_PKT_BAD_L3_CSUM_RMASK 1
119 #define _NETIO_PKT_BAD_L3_CSUM_MASK \
120 (_NETIO_PKT_BAD_L3_CSUM_RMASK << _NETIO_PKT_BAD_L3_CSUM_SHIFT)
123 #define _NETIO_PKT_TYPE_UNRECOGNIZED_SHIFT 3
124 #define _NETIO_PKT_TYPE_UNRECOGNIZED_RMASK 1
125 #define _NETIO_PKT_TYPE_UNRECOGNIZED_MASK \
126 (_NETIO_PKT_TYPE_UNRECOGNIZED_RMASK << \
127 _NETIO_PKT_TYPE_UNRECOGNIZED_SHIFT)
133 #define _NETIO_PKT_TYPE_SHIFT 4
134 #define _NETIO_PKT_TYPE_RMASK 0x3F
139 #define _NETIO_PKT_VLAN_SHIFT 4
140 #define _NETIO_PKT_VLAN_RMASK 0x3
141 #define _NETIO_PKT_VLAN_MASK \
142 (_NETIO_PKT_VLAN_RMASK << _NETIO_PKT_VLAN_SHIFT)
143 #define _NETIO_PKT_VLAN_NONE 0
144 #define _NETIO_PKT_VLAN_ONE 1
145 #define _NETIO_PKT_VLAN_TWO_OUTER 2
146 #define _NETIO_PKT_VLAN_TWO_INNER 3
149 #define _NETIO_PKT_TAG_SHIFT 6
150 #define _NETIO_PKT_TAG_RMASK 0x3
151 #define _NETIO_PKT_TAG_MASK \
152 (_NETIO_PKT_TAG_RMASK << _NETIO_PKT_TAG_SHIFT)
153 #define _NETIO_PKT_TAG_NONE 0
154 #define _NETIO_PKT_TAG_MRVL 1
155 #define _NETIO_PKT_TAG_MRVL_EXT 2
156 #define _NETIO_PKT_TAG_BRCM 3
159 #define _NETIO_PKT_SNAP_SHIFT 8
160 #define _NETIO_PKT_SNAP_RMASK 0x1
161 #define _NETIO_PKT_SNAP_MASK \
162 (_NETIO_PKT_SNAP_RMASK << _NETIO_PKT_SNAP_SHIFT)
167 #define _NETIO_PKT_CUSTOM_LEN_SHIFT 11
168 #define _NETIO_PKT_CUSTOM_LEN_RMASK 0x1F
169 #define _NETIO_PKT_CUSTOM_LEN_MASK \
170 (_NETIO_PKT_CUSTOM_LEN_RMASK << _NETIO_PKT_CUSTOM_LEN_SHIFT)
173 #define _NETIO_PKT_BAD_L4_CSUM_SHIFT 16
174 #define _NETIO_PKT_BAD_L4_CSUM_RMASK 0x1
175 #define _NETIO_PKT_BAD_L4_CSUM_MASK \
176 (_NETIO_PKT_BAD_L4_CSUM_RMASK << _NETIO_PKT_BAD_L4_CSUM_SHIFT)
179 #define _NETIO_PKT_L2_LEN_SHIFT 17
180 #define _NETIO_PKT_L2_LEN_RMASK 0x1F
181 #define _NETIO_PKT_L2_LEN_MASK \
182 (_NETIO_PKT_L2_LEN_RMASK << _NETIO_PKT_L2_LEN_SHIFT)
188 #define _NETIO_PKT_NEED_EDMA_CSUM_SHIFT 0
189 #define _NETIO_PKT_NEED_EDMA_CSUM_RMASK 1
190 #define _NETIO_PKT_NEED_EDMA_CSUM_MASK \
191 (_NETIO_PKT_NEED_EDMA_CSUM_RMASK << _NETIO_PKT_NEED_EDMA_CSUM_SHIFT)
199 #define _NETIO_PKT_INFO_ETYPE_SHIFT 6
200 #define _NETIO_PKT_INFO_ETYPE_RMASK 0x1F
203 #define _NETIO_PKT_INFO_VLAN_SHIFT 11
204 #define _NETIO_PKT_INFO_VLAN_RMASK 0x1F
211 #define SMALL_PACKET_SIZE 256
215 #define LARGE_PACKET_SIZE 2048
219 #define JUMBO_PACKET_SIZE (12 * 1024)
226 #define ETHERTYPE_IPv4 (0x0800)
228 #define ETHERTYPE_ARP (0x0806)
230 #define ETHERTYPE_VLAN (0x8100)
232 #define ETHERTYPE_Q_IN_Q (0x9100)
234 #define ETHERTYPE_IPv6 (0x86DD)
236 #define ETHERTYPE_MPLS (0x8847)
263 #define NETIO_LOG2_NUM_BUCKETS (10)
267 #define NETIO_NUM_BUCKETS (1 << NETIO_LOG2_NUM_BUCKETS)
281 unsigned int __balance_on_l4:1;
283 unsigned int __balance_on_l3:1;
285 unsigned int __balance_on_l2:1;
343 unsigned char opaque[24];
367 #define NETIO_PACKET_PADDING 2
388 unsigned char opaque[14];
425 unsigned int __channel:7;
426 unsigned int __type:4;
427 unsigned int __ack:1;
429 unsigned int __protocol:1;
431 unsigned int __framing:2;
432 unsigned int __transfer_size:14;
441 #define _NETIO_PKT_HANDLE_BASE(p) \
442 ((unsigned char*)((p).word & 0xFFFFFFC0))
447 #define _NETIO_PKT_BASE(p) \
448 _NETIO_PKT_HANDLE_BASE(p->__packet)
476 unsigned int __ipp_handle:2;
483 unsigned int __minimal:1;
489 unsigned int __offset:2;
557 unsigned char opaque[32];
577 #define __NETIO_PKT_NOTIF_HEADER(pkt) ((pkt)->__notif_header)
578 #define __NETIO_PKT_IPP_HANDLE(pkt) ((pkt)->__packet.bits.__ipp_handle)
579 #define __NETIO_PKT_QUEUE(pkt) ((pkt)->__packet.bits.__queue)
580 #define __NETIO_PKT_NOTIF_HEADER_M(mda, pkt) ((pkt)->__notif_header)
581 #define __NETIO_PKT_IPP_HANDLE_M(mda, pkt) ((pkt)->__packet.bits.__ipp_handle)
582 #define __NETIO_PKT_MINIMAL(pkt) ((pkt)->__packet.bits.__minimal)
583 #define __NETIO_PKT_QUEUE_M(mda, pkt) ((pkt)->__packet.bits.__queue)
584 #define __NETIO_PKT_FLAGS_M(mda, pkt) ((mda)->__flags)
594 #define NETIO_PKT_GOOD_CHECKSUM(pkt) \
595 NETIO_PKT_L4_CSUM_CORRECT(pkt)
596 #define NETIO_PKT_GOOD_CHECKSUM_M(mda, pkt) \
597 NETIO_PKT_L4_CSUM_CORRECT_M(mda, pkt)
684 #define NETIO_PKT_HANDLE_NONE ((netio_pkt_handle_t) { 0 })
701 return handle.
word != 0;
782 return NETIO_PKT_CUSTOM_DATA_H(NETIO_PKT_HANDLE(pkt));
817 return (NETIO_PKT_CUSTOM_LENGTH_M(mda, pkt) -
818 NETIO_PKT_CUSTOM_HEADER_LENGTH_M(mda,pkt));
832 return (NETIO_PKT_CUSTOM_DATA_M(mda, pkt) +
833 NETIO_PKT_CUSTOM_HEADER_LENGTH_M(mda, pkt));
848 return (NETIO_PKT_L2_LENGTH_M(mda, pkt) -
849 NETIO_PKT_L2_HEADER_LENGTH_M(mda,pkt));
865 return (NETIO_PKT_L2_DATA_M(mda, pkt) +
866 NETIO_PKT_L2_HEADER_LENGTH_M(mda, pkt));
938 unsigned short* pkt_p;
945 pkt_p = (
unsigned short*) NETIO_PKT_L2_DATA_M(mda, pkt);
952 return (__insn_bytex(val) >> 16) & 0xFFF;
954 return (__builtin_bswap32(val) >> 16) & 0xFFF;
974 unsigned short* pkt_p = (
unsigned short*) NETIO_PKT_L2_DATA_M(mda, pkt);
981 return __builtin_bswap32(val) >> 16;
1177 return ((NETIO_PKT_STATUS_M(mda, pkt) & 1) &&
1178 (NETIO_PKT_ETHERTYPE_RECOGNIZED_M(mda, pkt) ||
1222 return (NETIO_PKT_L2_LENGTH_MM(mmd, pkt) -
1223 NETIO_PKT_L2_HEADER_LENGTH_MM(mmd, pkt));
1293 return NETIO_PKT_BAD_M(mda, pkt);
1312 return NETIO_PKT_CUSTOM_HEADER_LENGTH_M(mda, pkt);
1331 return NETIO_PKT_CUSTOM_LENGTH_M(mda, pkt);
1350 return NETIO_PKT_CUSTOM_DATA_M(mda, pkt);
1363 if (NETIO_PKT_IS_MINIMAL(pkt))
1367 return NETIO_PKT_L2_HEADER_LENGTH_MM(mmd, pkt);
1373 return NETIO_PKT_L2_HEADER_LENGTH_M(mda, pkt);
1387 if (NETIO_PKT_IS_MINIMAL(pkt))
1391 return NETIO_PKT_L2_LENGTH_MM(mmd, pkt);
1397 return NETIO_PKT_L2_LENGTH_M(mda, pkt);
1411 if (NETIO_PKT_IS_MINIMAL(pkt))
1415 return NETIO_PKT_L2_DATA_MM(mmd, pkt);
1421 return NETIO_PKT_L2_DATA_M(mda, pkt);
1436 if (NETIO_PKT_IS_MINIMAL(pkt))
1440 return NETIO_PKT_L3_LENGTH_MM(mmd, pkt);
1446 return NETIO_PKT_L3_LENGTH_M(mda, pkt);
1462 if (NETIO_PKT_IS_MINIMAL(pkt))
1466 return NETIO_PKT_L3_DATA_MM(mmd, pkt);
1472 return NETIO_PKT_L3_DATA_M(mda, pkt);
1499 return NETIO_PKT_ORDINAL_M(mda, pkt);
1528 return NETIO_PKT_GROUP_ORDINAL_M(mda, pkt);
1546 return NETIO_PKT_VLAN_ID_M(mda, pkt);
1564 return NETIO_PKT_ETHERTYPE_M(mda, pkt);
1601 return NETIO_PKT_FLOW_HASH_M(mda, pkt);
1625 return NETIO_PKT_USER_DATA_0_M(mda, pkt);
1649 return NETIO_PKT_USER_DATA_1_M(mda, pkt);
1664 return NETIO_PKT_L4_CSUM_CALCULATED_M(mda, pkt);
1680 return NETIO_PKT_L4_CSUM_CORRECT_M(mda, pkt);
1695 return NETIO_PKT_L3_CSUM_CALCULATED_M(mda, pkt);
1711 return NETIO_PKT_L3_CSUM_CORRECT_M(mda, pkt);
1728 return NETIO_PKT_ETHERTYPE_RECOGNIZED_M(mda, pkt);
1755 NETIO_PKT_SET_L2_LENGTH(
netio_pkt_t* pkt,
int len)
1759 NETIO_PKT_SET_L2_LENGTH_MM(mmd, pkt, len);
1796 NETIO_PKT_SET_L2_HEADER_LENGTH(
netio_pkt_t* pkt,
int len)
1800 NETIO_PKT_SET_L2_HEADER_LENGTH_MM(mmd, pkt, len);
1895 NETIO_PKT_DO_EGRESS_CSUM_MM(mmd, pkt, start, length, location, seed);
1911 NETIO_PKT_CUSTOM_HEADER_LENGTH_M(mda, pkt);
1941 if (NETIO_PKT_IS_MINIMAL(pkt))
1945 return NETIO_PKT_PREPEND_AVAIL_MM(mmd, pkt);
1951 return NETIO_PKT_PREPEND_AVAIL_M(mda, pkt);
2043 NETIO_PKT_FLUSH_MINIMAL_METADATA(
netio_pkt_t* pkt)
2065 NETIO_PKT_FLUSH_INV_MINIMAL_METADATA(
netio_pkt_t* pkt)
2104 #define NETIO_NUM_NODE_WEIGHTS 16
2452 #define NETIO_STRICT_HOMING 0x00000002
2455 #define NETIO_TAG_NONE 0x00000004
2458 #define NETIO_TAG_MRVL 0x00000008
2461 #define NETIO_TAG_BRCM 0x00000010
2464 #define NETIO_RECV 0x00000020
2467 #define NETIO_NO_RECV 0x00000040
2470 #define NETIO_XMIT 0x00000080
2474 #define NETIO_XMIT_CSUM 0x00000100
2477 #define NETIO_NO_XMIT 0x00000200
2504 #define NETIO_FIXED_BUFFER_VA 0x00000400
2521 #define NETIO_REQUIRE_LINK_UP 0x00000800
2531 #define NETIO_NOREQUIRE_LINK_UP 0x00001000
2539 #define _NETIO_AUTO_UP 0x00002000
2540 #define _NETIO_AUTO_DN 0x00004000
2541 #define _NETIO_AUTO_PRESENT 0x00008000
2551 #define NETIO_AUTO_LINK_UP (_NETIO_AUTO_PRESENT | _NETIO_AUTO_UP)
2560 #define NETIO_AUTO_LINK_UPDN (_NETIO_AUTO_PRESENT | _NETIO_AUTO_UP | \
2568 #define NETIO_AUTO_LINK_DN (_NETIO_AUTO_PRESENT | _NETIO_AUTO_DN)
2575 #define NETIO_AUTO_LINK_NONE _NETIO_AUTO_PRESENT
2579 #define NETIO_MIN_RECEIVE_PKTS 16
2583 #define NETIO_MAX_RECEIVE_PKTS 128
2586 #define NETIO_MAX_SEND_BUFFERS 16
2589 #define NETIO_TOTAL_SENDS_OUTSTANDING 2015
2593 #define NETIO_MIN_SENDS_OUTSTANDING 16
2623 #ifdef _NETIO_PTHREAD
2656 #define SEND_PKT_CTX_USE_EPP 1
2657 #define SEND_PKT_CTX_SEND_CSUM 2
2727 if (NETIO_PKT_IS_MINIMAL(pkt))
2731 v->buffer_address_low = (
uintptr_t) NETIO_PKT_L2_DATA_MM(mmd, pkt) & 0xFF;
2732 v->size = NETIO_PKT_L2_LENGTH_MM(mmd, pkt);
2737 v->buffer_address_low = (
uintptr_t) NETIO_PKT_L2_DATA_M(mda, pkt) & 0xFF;
2738 v->size = NETIO_PKT_L2_LENGTH_M(mda, pkt);
2760 #define NETIO_PARAM 0
2764 #define NETIO_PARAM_MAC 0
2769 #define NETIO_PARAM_PAUSE_IN 1
2775 #define NETIO_PARAM_PAUSE_OUT 2
2780 #define NETIO_PARAM_JUMBO 3
2790 #define NETIO_PARAM_OVERFLOW 4
2796 #define NETIO_PARAM_STAT 5
2806 #define NETIO_PARAM_LINK_POSSIBLE_STATE 6
2819 #define NETIO_PARAM_LINK_CONFIG NETIO_PARAM_LINK_POSSIBLE_STATE
2827 #define NETIO_PARAM_LINK_CURRENT_STATE 7
2831 #define NETIO_PARAM_LINK_STATUS NETIO_PARAM_LINK_CURRENT_STATE
2836 #define NETIO_PARAM_COHERENT 8
2855 #define NETIO_PARAM_LINK_DESIRED_STATE 9
2887 #define NETIO_STAT_DROPS_NO_WORKER 0
2894 #define NETIO_STAT_DROPS_NO_SMALLBUF 1
2901 #define NETIO_STAT_DROPS_NO_LARGEBUF 2
2908 #define NETIO_STAT_DROPS_NO_JUMBOBUF 3
2915 #define NETIO_LINK_10M 0x01
2918 #define NETIO_LINK_100M 0x02
2921 #define NETIO_LINK_1G 0x04
2924 #define NETIO_LINK_10G 0x08
2930 #define NETIO_LINK_ANYSPEED 0x10
2933 #define NETIO_LINK_SPEED (NETIO_LINK_10M | \
2937 NETIO_LINK_ANYSPEED)
2948 #define NETIO_MDIO 2
2952 #define NETIO_MDIO_CLAUSE45 3