xgehal-ring.h revision 303975
1/*- 2 * Copyright (c) 2002-2007 Neterion, Inc. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 * $FreeBSD: releng/11.0/sys/dev/nxge/include/xgehal-ring.h 173139 2007-10-29 14:19:32Z rwatson $ 27 */ 28 29#ifndef XGE_HAL_RING_H 30#define XGE_HAL_RING_H 31 32#include <dev/nxge/include/xgehal-channel.h> 33#include <dev/nxge/include/xgehal-config.h> 34#include <dev/nxge/include/xgehal-mm.h> 35 36__EXTERN_BEGIN_DECLS 37 38/* HW ring configuration */ 39#define XGE_HAL_RING_RXDBLOCK_SIZE 0x1000 40 41#define XGE_HAL_RXD_T_CODE_OK 0x0 42#define XGE_HAL_RXD_T_CODE_PARITY 0x1 43#define XGE_HAL_RXD_T_CODE_ABORT 0x2 44#define XGE_HAL_RXD_T_CODE_PARITY_ABORT 0x3 45#define XGE_HAL_RXD_T_CODE_RDA_FAILURE 0x4 46#define XGE_HAL_RXD_T_CODE_UNKNOWN_PROTO 0x5 47#define XGE_HAL_RXD_T_CODE_BAD_FCS 0x6 48#define XGE_HAL_RXD_T_CODE_BUFF_SIZE 0x7 49#define XGE_HAL_RXD_T_CODE_BAD_ECC 0x8 50#define XGE_HAL_RXD_T_CODE_UNUSED_C 0xC 51#define XGE_HAL_RXD_T_CODE_UNKNOWN 0xF 52 53#define XGE_HAL_RING_USE_MTU -1 54 55/* control_1 and control_2 formatting - same for all buffer modes */ 56#define XGE_HAL_RXD_GET_L3_CKSUM(control_1) ((u16)(control_1>>16) & 0xFFFF) 57#define XGE_HAL_RXD_GET_L4_CKSUM(control_1) ((u16)(control_1 & 0xFFFF)) 58 59#define XGE_HAL_RXD_MASK_VLAN_TAG vBIT(0xFFFF,48,16) 60#define XGE_HAL_RXD_SET_VLAN_TAG(control_2, val) control_2 |= (u16)val 61#define XGE_HAL_RXD_GET_VLAN_TAG(control_2) ((u16)(control_2 & 0xFFFF)) 62 63#define XGE_HAL_RXD_POSTED_4_XFRAME BIT(7) /* control_1 */ 64#define XGE_HAL_RXD_NOT_COMPLETED BIT(0) /* control_2 */ 65#define XGE_HAL_RXD_T_CODE (BIT(12)|BIT(13)|BIT(14)|BIT(15)) 66#define XGE_HAL_RXD_GET_T_CODE(control_1) \ 67 ((control_1 & XGE_HAL_RXD_T_CODE)>>48) 68#define XGE_HAL_RXD_SET_T_CODE(control_1, val) \ 69 (control_1 |= (((u64)val & 0xF) << 48)) 70 71#define XGE_HAL_RXD_MASK_FRAME_TYPE vBIT(0x3,25,2) 72#define XGE_HAL_RXD_MASK_FRAME_PROTO vBIT(0xFFFF,24,8) 73#define XGE_HAL_RXD_GET_FRAME_TYPE(control_1) \ 74 (u8)(0x3 & ((control_1 & XGE_HAL_RXD_MASK_FRAME_TYPE) >> 37)) 75#define XGE_HAL_RXD_GET_FRAME_PROTO(control_1) \ 76 (u8)((control_1 & XGE_HAL_RXD_MASK_FRAME_PROTO) >> 32) 77#define XGE_HAL_RXD_FRAME_PROTO_VLAN_TAGGED BIT(24) 78#define XGE_HAL_RXD_FRAME_PROTO_IPV4 BIT(27) 79#define XGE_HAL_RXD_FRAME_PROTO_IPV6 BIT(28) 80#define XGE_HAL_RXD_FRAME_PROTO_IP_FRAGMENTED BIT(29) 81#define XGE_HAL_RXD_FRAME_PROTO_TCP BIT(30) 82#define XGE_HAL_RXD_FRAME_PROTO_UDP BIT(31) 83#define XGE_HAL_RXD_FRAME_TCP_OR_UDP (XGE_HAL_RXD_FRAME_PROTO_TCP | \ 84 XGE_HAL_RXD_FRAME_PROTO_UDP) 85 86/** 87 * enum xge_hal_frame_type_e - Ethernet frame format. 88 * @XGE_HAL_FRAME_TYPE_DIX: DIX (Ethernet II) format. 89 * @XGE_HAL_FRAME_TYPE_LLC: LLC format. 90 * @XGE_HAL_FRAME_TYPE_SNAP: SNAP format. 91 * @XGE_HAL_FRAME_TYPE_IPX: IPX format. 92 * 93 * Ethernet frame format. 94 */ 95typedef enum xge_hal_frame_type_e { 96 XGE_HAL_FRAME_TYPE_DIX = 0x0, 97 XGE_HAL_FRAME_TYPE_LLC = 0x1, 98 XGE_HAL_FRAME_TYPE_SNAP = 0x2, 99 XGE_HAL_FRAME_TYPE_IPX = 0x3, 100} xge_hal_frame_type_e; 101 102/** 103 * enum xge_hal_frame_proto_e - Higher-layer ethernet protocols. 104 * @XGE_HAL_FRAME_PROTO_VLAN_TAGGED: VLAN. 105 * @XGE_HAL_FRAME_PROTO_IPV4: IPv4. 106 * @XGE_HAL_FRAME_PROTO_IPV6: IPv6. 107 * @XGE_HAL_FRAME_PROTO_IP_FRAGMENTED: IP fragmented. 108 * @XGE_HAL_FRAME_PROTO_TCP: TCP. 109 * @XGE_HAL_FRAME_PROTO_UDP: UDP. 110 * @XGE_HAL_FRAME_PROTO_TCP_OR_UDP: TCP or UDP. 111 * 112 * Higher layer ethernet protocols and options. 113 */ 114typedef enum xge_hal_frame_proto_e { 115 XGE_HAL_FRAME_PROTO_VLAN_TAGGED = 0x80, 116 XGE_HAL_FRAME_PROTO_IPV4 = 0x10, 117 XGE_HAL_FRAME_PROTO_IPV6 = 0x08, 118 XGE_HAL_FRAME_PROTO_IP_FRAGMENTED = 0x04, 119 XGE_HAL_FRAME_PROTO_TCP = 0x02, 120 XGE_HAL_FRAME_PROTO_UDP = 0x01, 121 XGE_HAL_FRAME_PROTO_TCP_OR_UDP = (XGE_HAL_FRAME_PROTO_TCP | \ 122 XGE_HAL_FRAME_PROTO_UDP) 123} xge_hal_frame_proto_e; 124 125/* 126 * xge_hal_ring_rxd_1_t 127 */ 128typedef struct { 129 u64 host_control; 130 u64 control_1; 131 u64 control_2; 132#define XGE_HAL_RXD_1_MASK_BUFFER0_SIZE vBIT(0xFFFF,0,16) 133#define XGE_HAL_RXD_1_SET_BUFFER0_SIZE(val) vBIT(val,0,16) 134#define XGE_HAL_RXD_1_GET_BUFFER0_SIZE(Control_2) \ 135 (int)((Control_2 & vBIT(0xFFFF,0,16))>>48) 136#define XGE_HAL_RXD_1_GET_RTH_VALUE(Control_2) \ 137 (u32)((Control_2 & vBIT(0xFFFFFFFF,16,32))>>16) 138 u64 buffer0_ptr; 139} xge_hal_ring_rxd_1_t; 140 141/* 142 * xge_hal_ring_rxd_3_t 143 */ 144typedef struct { 145 u64 host_control; 146 u64 control_1; 147 148 u64 control_2; 149#define XGE_HAL_RXD_3_MASK_BUFFER0_SIZE vBIT(0xFF,8,8) 150#define XGE_HAL_RXD_3_SET_BUFFER0_SIZE(val) vBIT(val,8,8) 151#define XGE_HAL_RXD_3_MASK_BUFFER1_SIZE vBIT(0xFFFF,16,16) 152#define XGE_HAL_RXD_3_SET_BUFFER1_SIZE(val) vBIT(val,16,16) 153#define XGE_HAL_RXD_3_MASK_BUFFER2_SIZE vBIT(0xFFFF,32,16) 154#define XGE_HAL_RXD_3_SET_BUFFER2_SIZE(val) vBIT(val,32,16) 155 156 157#define XGE_HAL_RXD_3_GET_BUFFER0_SIZE(Control_2) \ 158 (int)((Control_2 & vBIT(0xFF,8,8))>>48) 159#define XGE_HAL_RXD_3_GET_BUFFER1_SIZE(Control_2) \ 160 (int)((Control_2 & vBIT(0xFFFF,16,16))>>32) 161#define XGE_HAL_RXD_3_GET_BUFFER2_SIZE(Control_2) \ 162 (int)((Control_2 & vBIT(0xFFFF,32,16))>>16) 163 164 u64 buffer0_ptr; 165 u64 buffer1_ptr; 166 u64 buffer2_ptr; 167} xge_hal_ring_rxd_3_t; 168 169/* 170 * xge_hal_ring_rxd_5_t 171 */ 172typedef struct { 173#ifdef XGE_OS_HOST_BIG_ENDIAN 174 u32 host_control; 175 u32 control_3; 176#else 177 u32 control_3; 178 u32 host_control; 179#endif 180 181 182#define XGE_HAL_RXD_5_MASK_BUFFER3_SIZE vBIT(0xFFFF,32,16) 183#define XGE_HAL_RXD_5_SET_BUFFER3_SIZE(val) vBIT(val,32,16) 184#define XGE_HAL_RXD_5_MASK_BUFFER4_SIZE vBIT(0xFFFF,48,16) 185#define XGE_HAL_RXD_5_SET_BUFFER4_SIZE(val) vBIT(val,48,16) 186 187#define XGE_HAL_RXD_5_GET_BUFFER3_SIZE(Control_3) \ 188 (int)((Control_3 & vBIT(0xFFFF,32,16))>>16) 189#define XGE_HAL_RXD_5_GET_BUFFER4_SIZE(Control_3) \ 190 (int)((Control_3 & vBIT(0xFFFF,48,16))) 191 192 u64 control_1; 193 u64 control_2; 194 195#define XGE_HAL_RXD_5_MASK_BUFFER0_SIZE vBIT(0xFFFF,0,16) 196#define XGE_HAL_RXD_5_SET_BUFFER0_SIZE(val) vBIT(val,0,16) 197#define XGE_HAL_RXD_5_MASK_BUFFER1_SIZE vBIT(0xFFFF,16,16) 198#define XGE_HAL_RXD_5_SET_BUFFER1_SIZE(val) vBIT(val,16,16) 199#define XGE_HAL_RXD_5_MASK_BUFFER2_SIZE vBIT(0xFFFF,32,16) 200#define XGE_HAL_RXD_5_SET_BUFFER2_SIZE(val) vBIT(val,32,16) 201 202 203#define XGE_HAL_RXD_5_GET_BUFFER0_SIZE(Control_2) \ 204 (int)((Control_2 & vBIT(0xFFFF,0,16))>>48) 205#define XGE_HAL_RXD_5_GET_BUFFER1_SIZE(Control_2) \ 206 (int)((Control_2 & vBIT(0xFFFF,16,16))>>32) 207#define XGE_HAL_RXD_5_GET_BUFFER2_SIZE(Control_2) \ 208 (int)((Control_2 & vBIT(0xFFFF,32,16))>>16) 209 u64 buffer0_ptr; 210 u64 buffer1_ptr; 211 u64 buffer2_ptr; 212 u64 buffer3_ptr; 213 u64 buffer4_ptr; 214} xge_hal_ring_rxd_5_t; 215 216#define XGE_HAL_RXD_GET_RTH_SPDM_HIT(Control_1) \ 217 (u8)((Control_1 & BIT(18))>>45) 218#define XGE_HAL_RXD_GET_RTH_IT_HIT(Control_1) \ 219 (u8)((Control_1 & BIT(19))>>44) 220#define XGE_HAL_RXD_GET_RTH_HASH_TYPE(Control_1) \ 221 (u8)((Control_1 & vBIT(0xF,20,4))>>40) 222 223#define XGE_HAL_RXD_HASH_TYPE_NONE 0x0 224#define XGE_HAL_RXD_HASH_TYPE_TCP_IPV4 0x1 225#define XGE_HAL_RXD_HASH_TYPE_UDP_IPV4 0x2 226#define XGE_HAL_RXD_HASH_TYPE_IPV4 0x3 227#define XGE_HAL_RXD_HASH_TYPE_TCP_IPV6 0x4 228#define XGE_HAL_RXD_HASH_TYPE_UDP_IPV6 0x5 229#define XGE_HAL_RXD_HASH_TYPE_IPV6 0x6 230#define XGE_HAL_RXD_HASH_TYPE_TCP_IPV6_EX 0x7 231#define XGE_HAL_RXD_HASH_TYPE_UDP_IPV6_EX 0x8 232#define XGE_HAL_RXD_HASH_TYPE_IPV6_EX 0x9 233 234typedef u8 xge_hal_ring_block_t[XGE_HAL_RING_RXDBLOCK_SIZE]; 235 236#define XGE_HAL_RING_NEXT_BLOCK_POINTER_OFFSET 0xFF8 237#define XGE_HAL_RING_MEMBLOCK_IDX_OFFSET 0xFF0 238 239#define XGE_HAL_RING_RXD_SIZEOF(n) \ 240 (n==1 ? sizeof(xge_hal_ring_rxd_1_t) : \ 241 (n==3 ? sizeof(xge_hal_ring_rxd_3_t) : \ 242 sizeof(xge_hal_ring_rxd_5_t))) 243 244#define XGE_HAL_RING_RXDS_PER_BLOCK(n) \ 245 (n==1 ? 127 : (n==3 ? 85 : 63)) 246 247/** 248 * struct xge_hal_ring_rxd_priv_t - Receive descriptor HAL-private data. 249 * @dma_addr: DMA (mapped) address of _this_ descriptor. 250 * @dma_handle: DMA handle used to map the descriptor onto device. 251 * @dma_offset: Descriptor's offset in the memory block. HAL allocates 252 * descriptors in memory blocks of 253 * %XGE_HAL_RING_RXDBLOCK_SIZE 254 * bytes. Each memblock is contiguous DMA-able memory. Each 255 * memblock contains 1 or more 4KB RxD blocks visible to the 256 * Xframe hardware. 257 * @dma_object: DMA address and handle of the memory block that contains 258 * the descriptor. This member is used only in the "checked" 259 * version of the HAL (to enforce certain assertions); 260 * otherwise it gets compiled out. 261 * @allocated: True if the descriptor is reserved, 0 otherwise. Internal usage. 262 * 263 * Per-receive decsriptor HAL-private data. HAL uses the space to keep DMA 264 * information associated with the descriptor. Note that ULD can ask HAL 265 * to allocate additional per-descriptor space for its own (ULD-specific) 266 * purposes. 267 */ 268typedef struct xge_hal_ring_rxd_priv_t { 269 dma_addr_t dma_addr; 270 pci_dma_h dma_handle; 271 ptrdiff_t dma_offset; 272#ifdef XGE_DEBUG_ASSERT 273 xge_hal_mempool_dma_t *dma_object; 274#endif 275#ifdef XGE_OS_MEMORY_CHECK 276 int allocated; 277#endif 278} xge_hal_ring_rxd_priv_t; 279 280/** 281 * struct xge_hal_ring_t - Ring channel. 282 * @channel: Channel "base" of this ring, the common part of all HAL 283 * channels. 284 * @buffer_mode: 1, 3, or 5. The value specifies a receive buffer mode, 285 * as per Xframe User Guide. 286 * @indicate_max_pkts: Maximum number of packets processed within a single 287 * interrupt. Can be used to limit the time spent inside hw 288 * interrupt. 289 * @config: Ring configuration, part of device configuration 290 * (see xge_hal_device_config_t{}). 291 * @rxd_size: RxD sizes for 1-, 3- or 5- buffer modes. As per Xframe spec, 292 * 1-buffer mode descriptor is 32 byte long, etc. 293 * @rxd_priv_size: Per RxD size reserved (by HAL) for ULD to keep per-descriptor 294 * data (e.g., DMA handle for Solaris) 295 * @rxds_per_block: Number of descriptors per hardware-defined RxD 296 * block. Depends on the (1-,3-,5-) buffer mode. 297 * @mempool: Memory pool, the pool from which descriptors get allocated. 298 * (See xge_hal_mm.h). 299 * @rxdblock_priv_size: Reserved at the end of each RxD block. HAL internal 300 * usage. Not to confuse with @rxd_priv_size. 301 * @reserved_rxds_arr: Array of RxD pointers. At any point in time each 302 * entry in this array is available for allocation 303 * (via xge_hal_ring_dtr_reserve()) and posting. 304 * @cmpl_cnt: Completion counter. Is reset to zero upon entering the ISR. 305 * Used in conjunction with @indicate_max_pkts. 306 * Ring channel. 307 * 308 * Note: The structure is cache line aligned to better utilize 309 * CPU cache performance. 310 */ 311typedef struct xge_hal_ring_t { 312 xge_hal_channel_t channel; 313 int buffer_mode; 314 int indicate_max_pkts; 315 xge_hal_ring_config_t *config; 316 int rxd_size; 317 int rxd_priv_size; 318 int rxds_per_block; 319 xge_hal_mempool_t *mempool; 320 int rxdblock_priv_size; 321 void **reserved_rxds_arr; 322 int cmpl_cnt; 323} __xge_os_attr_cacheline_aligned xge_hal_ring_t; 324 325/** 326 * struct xge_hal_dtr_info_t - Extended information associated with a 327 * completed ring descriptor. 328 * @l3_cksum: Result of IP checksum check (by Xframe hardware). 329 * This field containing XGE_HAL_L3_CKSUM_OK would mean that 330 * the checksum is correct, otherwise - the datagram is 331 * corrupted. 332 * @l4_cksum: Result of TCP/UDP checksum check (by Xframe hardware). 333 * This field containing XGE_HAL_L4_CKSUM_OK would mean that 334 * the checksum is correct. Otherwise - the packet is 335 * corrupted. 336 * @frame: See xge_hal_frame_type_e{}. 337 * @proto: Reporting bits for various higher-layer protocols, including (but 338 * note restricted to) TCP and UDP. See xge_hal_frame_proto_e{}. 339 * @vlan: VLAN tag extracted from the received frame. 340 * @rth_value: Receive Traffic Hashing(RTH) hash value. Produced by Xframe II 341 * hardware if RTH is enabled. 342 * @rth_it_hit: Set, If RTH hash value calculated by the Xframe II hardware 343 * has a matching entry in the Indirection table. 344 * @rth_spdm_hit: Set, If RTH hash value calculated by the Xframe II hardware 345 * has a matching entry in the Socket Pair Direct Match table. 346 * @rth_hash_type: RTH hash code of the function used to calculate the hash. 347 * @reserved_pad: Unused byte. 348 */ 349typedef struct xge_hal_dtr_info_t { 350 int l3_cksum; 351 int l4_cksum; 352 int frame; /* zero or more of xge_hal_frame_type_e flags */ 353 int proto; /* zero or more of xge_hal_frame_proto_e flags */ 354 int vlan; 355 u32 rth_value; 356 u8 rth_it_hit; 357 u8 rth_spdm_hit; 358 u8 rth_hash_type; 359 u8 reserved_pad; 360} xge_hal_dtr_info_t; 361 362/* ========================== RING PRIVATE API ============================ */ 363 364xge_hal_status_e __hal_ring_open(xge_hal_channel_h channelh, 365 xge_hal_channel_attr_t *attr); 366 367void __hal_ring_close(xge_hal_channel_h channelh); 368 369void __hal_ring_hw_initialize(xge_hal_device_h devh); 370 371void __hal_ring_mtu_set(xge_hal_device_h devh, int new_mtu); 372 373void __hal_ring_prc_enable(xge_hal_channel_h channelh); 374 375void __hal_ring_prc_disable(xge_hal_channel_h channelh); 376 377xge_hal_status_e __hal_ring_initial_replenish(xge_hal_channel_t *channel, 378 xge_hal_channel_reopen_e reopen); 379 380#if defined(XGE_DEBUG_FP) && (XGE_DEBUG_FP & XGE_DEBUG_FP_RING) 381#define __HAL_STATIC_RING 382#define __HAL_INLINE_RING 383 384__HAL_STATIC_RING __HAL_INLINE_RING int 385__hal_ring_block_memblock_idx(xge_hal_ring_block_t *block); 386 387__HAL_STATIC_RING __HAL_INLINE_RING void 388__hal_ring_block_memblock_idx_set(xge_hal_ring_block_t*block, int memblock_idx); 389 390__HAL_STATIC_RING __HAL_INLINE_RING dma_addr_t 391__hal_ring_block_next_pointer(xge_hal_ring_block_t *block); 392 393__HAL_STATIC_RING __HAL_INLINE_RING void 394__hal_ring_block_next_pointer_set(xge_hal_ring_block_t*block, 395 dma_addr_t dma_next); 396 397__HAL_STATIC_RING __HAL_INLINE_RING xge_hal_ring_rxd_priv_t* 398__hal_ring_rxd_priv(xge_hal_ring_t *ring, xge_hal_dtr_h dtrh); 399 400/* =========================== RING PUBLIC API ============================ */ 401 402__HAL_STATIC_RING __HAL_INLINE_RING xge_hal_status_e 403xge_hal_ring_dtr_reserve(xge_hal_channel_h channelh, xge_hal_dtr_h *dtrh); 404 405__HAL_STATIC_RING __HAL_INLINE_RING void* 406xge_hal_ring_dtr_private(xge_hal_channel_h channelh, xge_hal_dtr_h dtrh); 407 408__HAL_STATIC_RING __HAL_INLINE_RING void 409xge_hal_ring_dtr_1b_set(xge_hal_dtr_h dtrh, dma_addr_t dma_pointer, int size); 410 411__HAL_STATIC_RING __HAL_INLINE_RING void 412xge_hal_ring_dtr_info_get(xge_hal_channel_h channelh, xge_hal_dtr_h dtrh, 413 xge_hal_dtr_info_t *ext_info); 414 415__HAL_STATIC_RING __HAL_INLINE_RING void 416xge_hal_ring_dtr_1b_get(xge_hal_channel_h channelh, xge_hal_dtr_h dtrh, 417 dma_addr_t *dma_pointer, int *pkt_length); 418 419__HAL_STATIC_RING __HAL_INLINE_RING void 420xge_hal_ring_dtr_3b_set(xge_hal_dtr_h dtrh, dma_addr_t dma_pointers[], 421 int sizes[]); 422 423__HAL_STATIC_RING __HAL_INLINE_RING void 424xge_hal_ring_dtr_3b_get(xge_hal_channel_h channelh, xge_hal_dtr_h dtrh, 425 dma_addr_t dma_pointers[], int sizes[]); 426 427__HAL_STATIC_RING __HAL_INLINE_RING void 428xge_hal_ring_dtr_5b_set(xge_hal_dtr_h dtrh, dma_addr_t dma_pointers[], 429 int sizes[]); 430 431__HAL_STATIC_RING __HAL_INLINE_RING void 432xge_hal_ring_dtr_5b_get(xge_hal_channel_h channelh, xge_hal_dtr_h dtrh, 433 dma_addr_t dma_pointer[], int sizes[]); 434 435__HAL_STATIC_RING __HAL_INLINE_RING void 436xge_hal_ring_dtr_post(xge_hal_channel_h channelh, xge_hal_dtr_h dtrh); 437 438__HAL_STATIC_RING __HAL_INLINE_RING void 439xge_hal_ring_dtr_pre_post(xge_hal_channel_h channelh, xge_hal_dtr_h dtrh); 440 441__HAL_STATIC_RING __HAL_INLINE_RING void 442xge_hal_ring_dtr_post_post(xge_hal_channel_h channelh, xge_hal_dtr_h dtrh); 443 444__HAL_STATIC_RING __HAL_INLINE_RING void 445xge_hal_ring_dtr_post_post_wmb(xge_hal_channel_h channelh, xge_hal_dtr_h dtrh); 446 447__HAL_STATIC_RING __HAL_INLINE_RING xge_hal_status_e 448xge_hal_ring_dtr_next_completed(xge_hal_channel_h channelh, xge_hal_dtr_h *dtrh, 449 u8 *t_code); 450 451__HAL_STATIC_RING __HAL_INLINE_RING void 452xge_hal_ring_dtr_free(xge_hal_channel_h channelh, xge_hal_dtr_h dtrh); 453 454__HAL_STATIC_RING __HAL_INLINE_RING xge_hal_status_e 455xge_hal_ring_is_next_dtr_completed(xge_hal_channel_h channelh); 456 457#else /* XGE_FASTPATH_EXTERN */ 458#define __HAL_STATIC_RING static 459#define __HAL_INLINE_RING inline 460#include <dev/nxge/xgehal/xgehal-ring-fp.c> 461#endif /* XGE_FASTPATH_INLINE */ 462 463__EXTERN_END_DECLS 464 465#endif /* XGE_HAL_RING_H */ 466