/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _DAPL_TAVOR_WR_H #define _DAPL_TAVOR_WR_H /* * dapl_tavor_wr.h * Contains the definition of all structures that are used for * doing the work request handling. */ #ifdef __cplusplus extern "C" { #endif #include "dapl_osd.h" #include "dapl_hash.h" #include "dapl_tavor_ibtf.h" #include "dapl_tavor_hw.h" typedef struct dapls_tavor_workq_hdr_s dapls_tavor_workq_hdr_t; typedef struct dapls_tavor_wrid_list_hdr_s dapls_tavor_wrid_list_hdr_t; typedef struct dapls_tavor_wrid_entry_s dapls_tavor_wrid_entry_t; typedef struct dapls_tavor_wrid_lock_s dapls_tavor_wrid_lock_t; /* * Defines the lock that protects the wrid list. * For send queues and receive queues this is allocated with the workq header * structure. For SRQs it is allocated with the wrid_list_hdr and the receive * workq header points to it. */ struct dapls_tavor_wrid_lock_s { uint32_t wrl_on_srq; /* lock resides in the srq wridlist */ DAPL_OS_LOCK wrl_lock; }; /* * Defines the workq header for each queue in the QP. This points to the * dapls_tavor_wrid_list_hdr_t which has the work request id list. */ struct dapls_tavor_workq_hdr_s { uint32_t wq_qpn; uint32_t wq_send_or_recv; dapls_tavor_wrid_lock_t *wq_wrid_lock; uint32_t wq_size; uint32_t wq_head; uint32_t wq_tail; uint32_t wq_full; dapls_tavor_wrid_list_hdr_t *wq_wrid_poll; dapls_tavor_wrid_list_hdr_t *wq_wrid_post; }; /* Type of the work queue */ #define TAVOR_WR_SEND 0x1 #define TAVOR_WR_RECV 0x0 /* * Defines each work request id entry */ struct dapls_tavor_wrid_entry_s { uint64_t wr_wrid; uint32_t wr_wqeaddrsz; uint32_t wr_signaled_dbd; }; #define TAVOR_WRID_ENTRY_SIGNALED (1 << 0) #define TAVOR_WRID_ENTRY_DOORBELLED (1 << 1) /* * Defines each work request id list which has an array of wrid entries */ struct dapls_tavor_wrid_list_hdr_s { dapls_tavor_wrid_list_hdr_t *wl_next; dapls_tavor_wrid_list_hdr_t *wl_prev; dapls_tavor_wrid_list_hdr_t *wl_reap_next; dapls_tavor_workq_hdr_t *wl_wqhdr; dapls_tavor_wrid_entry_t *wl_wre; dapls_tavor_wrid_entry_t *wl_wre_old_tail; uint32_t wl_size; uint32_t wl_full; uint32_t wl_head; uint32_t wl_tail; dapls_tavor_wrid_lock_t *wl_lock; /* valid only for SRQs */ /* For SRQ */ uint_t wl_srq_en; uint32_t *wl_free_list; /* free descrptr list */ uint32_t wl_freel_head; uint32_t wl_freel_tail; uint32_t wl_freel_entries; /* # free entries */ uint32_t wl_srq_wqesz; uint64_t wl_srq_desc_addr; }; extern dapls_tavor_wrid_entry_t *dapli_tavor_wrid_find_match_srq( dapls_tavor_wrid_list_hdr_t *, tavor_hw_cqe_t *); #ifdef __cplusplus } #endif #endif /* _DAPL_TAVOR_WR_H */