1 /*- 2 * Copyright (C) 2013 Emulex 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 are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * 3. Neither the name of the Emulex Corporation nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 * 31 * Contact Information: 32 * freebsd-drivers@emulex.com 33 * 34 * Emulex 35 * 3333 Susan Street 36 * Costa Mesa, CA 92626 37 */ 38 39 40 struct oce_mbx; 41 struct oce_softc; 42 struct mbx_hdr; 43 44 enum oce_interrupt_mode { 45 OCE_INTERRUPT_MODE_MSIX = 0, 46 OCE_INTERRUPT_MODE_INTX = 1, 47 OCE_INTERRUPT_MODE_MSI = 2, 48 }; 49 50 #define MAX_ROCE_MSIX_VECTORS 16 51 #define MIN_ROCE_MSIX_VECTORS 1 52 #define ROCE_MSIX_VECTORS 2 53 54 struct oce_dev_info { 55 device_t dev; 56 if_t ifp; 57 struct oce_softc *softc; 58 59 bus_space_handle_t db_bhandle; 60 bus_space_tag_t db_btag; 61 uint64_t unmapped_db; 62 uint32_t unmapped_db_len; 63 uint32_t db_page_size; 64 uint64_t dpp_unmapped_addr; 65 uint32_t dpp_unmapped_len; 66 uint8_t mac_addr[6]; 67 uint32_t dev_family; 68 uint16_t vendor_id; 69 uint16_t dev_id; 70 enum oce_interrupt_mode intr_mode; 71 struct { 72 int num_vectors; 73 int start_vector; 74 uint32_t vector_list[MAX_ROCE_MSIX_VECTORS]; 75 } msix; 76 uint32_t flags; 77 #define OCE_RDMA_INFO_RDMA_SUPPORTED 0x00000001 78 }; 79 80 #define OCE_GEN2_FAMILY 2 81 82 #ifdef notdef 83 struct oce_mbx_ctx { 84 struct oce_mbx *mbx; 85 void (*cb) (void *ctx); 86 void *cb_ctx; 87 }; 88 #endif 89 90 struct oce_mbx_ctx; 91 92 typedef struct oce_rdma_info { 93 int size; 94 void (*close)(void); 95 int (*mbox_post)(struct oce_softc *sc, 96 struct oce_mbx *mbx, 97 struct oce_mbx_ctx *mbxctx); 98 void (*common_req_hdr_init)(struct mbx_hdr *hdr, 99 uint8_t dom, 100 uint8_t port, 101 uint8_t subsys, 102 uint8_t opcode, 103 uint32_t timeout, 104 uint32_t pyld_len, 105 uint8_t version); 106 void (*get_mac_addr)(struct oce_softc *sc, 107 uint8_t *macaddr); 108 } OCE_RDMA_INFO, *POCE_RDMA_INFO; 109 110 #define OCE_RDMA_INFO_SIZE (sizeof(OCE_RDMA_INFO)) 111 112 typedef struct oce_rdma_if { 113 int size; 114 int (*announce)(struct oce_dev_info *devinfo); 115 } OCE_RDMA_IF, *POCE_RDMA_IF; 116 117 #define OCE_RDMA_IF_SIZE (sizeof(OCE_RDMA_IF)) 118 119 int oce_register_rdma(POCE_RDMA_INFO rdma_info, POCE_RDMA_IF rdma_if); 120