1306219Sjpaetzel/*- 2306219Sjpaetzel * Copyright (C) 2013 Emulex 3306219Sjpaetzel * All rights reserved. 4306219Sjpaetzel * 5306219Sjpaetzel * Redistribution and use in source and binary forms, with or without 6306219Sjpaetzel * modification, are permitted provided that the following conditions are met: 7306219Sjpaetzel * 8306219Sjpaetzel * 1. Redistributions of source code must retain the above copyright notice, 9306219Sjpaetzel * this list of conditions and the following disclaimer. 10306219Sjpaetzel * 11306219Sjpaetzel * 2. Redistributions in binary form must reproduce the above copyright 12306219Sjpaetzel * notice, this list of conditions and the following disclaimer in the 13306219Sjpaetzel * documentation and/or other materials provided with the distribution. 14306219Sjpaetzel * 15306219Sjpaetzel * 3. Neither the name of the Emulex Corporation nor the names of its 16306219Sjpaetzel * contributors may be used to endorse or promote products derived from 17306219Sjpaetzel * this software without specific prior written permission. 18306219Sjpaetzel * 19306219Sjpaetzel * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20306219Sjpaetzel * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21306219Sjpaetzel * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22306219Sjpaetzel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23306219Sjpaetzel * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24306219Sjpaetzel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25306219Sjpaetzel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26306219Sjpaetzel * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27306219Sjpaetzel * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28306219Sjpaetzel * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29306219Sjpaetzel * POSSIBILITY OF SUCH DAMAGE. 30306219Sjpaetzel * 31306219Sjpaetzel * Contact Information: 32306219Sjpaetzel * freebsd-drivers@emulex.com 33306219Sjpaetzel * 34306219Sjpaetzel * Emulex 35306219Sjpaetzel * 3333 Susan Street 36306219Sjpaetzel * Costa Mesa, CA 92626 37306219Sjpaetzel */ 38306219Sjpaetzel 39306219Sjpaetzel/* $FreeBSD: stable/11/sys/dev/oce/oce_user.h 338938 2018-09-25 23:48:43Z jpaetzel $ */ 40306219Sjpaetzel 41306219Sjpaetzelstruct oce_mbx; 42306219Sjpaetzelstruct oce_softc; 43306219Sjpaetzelstruct mbx_hdr; 44306219Sjpaetzel 45306219Sjpaetzelenum oce_interrupt_mode { 46306219Sjpaetzel OCE_INTERRUPT_MODE_MSIX = 0, 47306219Sjpaetzel OCE_INTERRUPT_MODE_INTX = 1, 48306219Sjpaetzel OCE_INTERRUPT_MODE_MSI = 2, 49306219Sjpaetzel}; 50306219Sjpaetzel 51306219Sjpaetzel#define MAX_ROCE_MSIX_VECTORS 16 52306219Sjpaetzel#define MIN_ROCE_MSIX_VECTORS 1 53306219Sjpaetzel#define ROCE_MSIX_VECTORS 2 54306219Sjpaetzel 55306219Sjpaetzelstruct oce_dev_info { 56306219Sjpaetzel device_t dev; 57306219Sjpaetzel struct ifnet *ifp; 58306219Sjpaetzel struct oce_softc *softc; 59306219Sjpaetzel 60306219Sjpaetzel bus_space_handle_t db_bhandle; 61306219Sjpaetzel bus_space_tag_t db_btag; 62306219Sjpaetzel uint64_t unmapped_db; 63306219Sjpaetzel uint32_t unmapped_db_len; 64306219Sjpaetzel uint32_t db_page_size; 65306219Sjpaetzel uint64_t dpp_unmapped_addr; 66306219Sjpaetzel uint32_t dpp_unmapped_len; 67306219Sjpaetzel uint8_t mac_addr[6]; 68306219Sjpaetzel uint32_t dev_family; 69306219Sjpaetzel uint16_t vendor_id; 70306219Sjpaetzel uint16_t dev_id; 71306219Sjpaetzel enum oce_interrupt_mode intr_mode; 72306219Sjpaetzel struct { 73306219Sjpaetzel int num_vectors; 74306219Sjpaetzel int start_vector; 75306219Sjpaetzel uint32_t vector_list[MAX_ROCE_MSIX_VECTORS]; 76306219Sjpaetzel } msix; 77306219Sjpaetzel uint32_t flags; 78306219Sjpaetzel#define OCE_RDMA_INFO_RDMA_SUPPORTED 0x00000001 79306219Sjpaetzel}; 80306219Sjpaetzel 81306219Sjpaetzel 82306219Sjpaetzel#define OCE_GEN2_FAMILY 2 83306219Sjpaetzel 84306219Sjpaetzel#ifdef notdef 85306219Sjpaetzelstruct oce_mbx_ctx { 86306219Sjpaetzel struct oce_mbx *mbx; 87306219Sjpaetzel void (*cb) (void *ctx); 88306219Sjpaetzel void *cb_ctx; 89306219Sjpaetzel}; 90306219Sjpaetzel#endif 91306219Sjpaetzel 92306219Sjpaetzelstruct oce_mbx_ctx; 93306219Sjpaetzel 94306219Sjpaetzeltypedef struct oce_rdma_info { 95306219Sjpaetzel int size; 96306219Sjpaetzel void (*close)(void); 97306219Sjpaetzel int (*mbox_post)(struct oce_softc *sc, 98306219Sjpaetzel struct oce_mbx *mbx, 99306219Sjpaetzel struct oce_mbx_ctx *mbxctx); 100306219Sjpaetzel void (*common_req_hdr_init)(struct mbx_hdr *hdr, 101306219Sjpaetzel uint8_t dom, 102306219Sjpaetzel uint8_t port, 103306219Sjpaetzel uint8_t subsys, 104306219Sjpaetzel uint8_t opcode, 105306219Sjpaetzel uint32_t timeout, 106306219Sjpaetzel uint32_t pyld_len, 107306219Sjpaetzel uint8_t version); 108306219Sjpaetzel void (*get_mac_addr)(struct oce_softc *sc, 109306219Sjpaetzel uint8_t *macaddr); 110306219Sjpaetzel} OCE_RDMA_INFO, *POCE_RDMA_INFO; 111306219Sjpaetzel 112306219Sjpaetzel#define OCE_RDMA_INFO_SIZE (sizeof(OCE_RDMA_INFO)) 113306219Sjpaetzel 114306219Sjpaetzeltypedef struct oce_rdma_if { 115306219Sjpaetzel int size; 116306219Sjpaetzel int (*announce)(struct oce_dev_info *devinfo); 117306219Sjpaetzel} OCE_RDMA_IF, *POCE_RDMA_IF; 118306219Sjpaetzel 119306219Sjpaetzel#define OCE_RDMA_IF_SIZE (sizeof(OCE_RDMA_IF)) 120306219Sjpaetzel 121306219Sjpaetzelint oce_register_rdma(POCE_RDMA_INFO rdma_info, POCE_RDMA_IF rdma_if); 122