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 /* $FreeBSD$ */ 40 41 struct oce_mbx; 42 struct oce_softc; 43 struct mbx_hdr; 44 45 enum oce_interrupt_mode { 46 OCE_INTERRUPT_MODE_MSIX = 0, 47 OCE_INTERRUPT_MODE_INTX = 1, 48 OCE_INTERRUPT_MODE_MSI = 2, 49 }; 50 51 #define MAX_ROCE_MSIX_VECTORS 16 52 #define MIN_ROCE_MSIX_VECTORS 1 53 #define ROCE_MSIX_VECTORS 2 54 55 struct oce_dev_info { 56 device_t dev; 57 struct ifnet *ifp; 58 struct oce_softc *softc; 59 60 bus_space_handle_t db_bhandle; 61 bus_space_tag_t db_btag; 62 uint64_t unmapped_db; 63 uint32_t unmapped_db_len; 64 uint32_t db_page_size; 65 uint64_t dpp_unmapped_addr; 66 uint32_t dpp_unmapped_len; 67 uint8_t mac_addr[6]; 68 uint32_t dev_family; 69 uint16_t vendor_id; 70 uint16_t dev_id; 71 enum oce_interrupt_mode intr_mode; 72 struct { 73 int num_vectors; 74 int start_vector; 75 uint32_t vector_list[MAX_ROCE_MSIX_VECTORS]; 76 } msix; 77 uint32_t flags; 78 #define OCE_RDMA_INFO_RDMA_SUPPORTED 0x00000001 79 }; 80 81 #define OCE_GEN2_FAMILY 2 82 83 #ifdef notdef 84 struct oce_mbx_ctx { 85 struct oce_mbx *mbx; 86 void (*cb) (void *ctx); 87 void *cb_ctx; 88 }; 89 #endif 90 91 struct oce_mbx_ctx; 92 93 typedef struct oce_rdma_info { 94 int size; 95 void (*close)(void); 96 int (*mbox_post)(struct oce_softc *sc, 97 struct oce_mbx *mbx, 98 struct oce_mbx_ctx *mbxctx); 99 void (*common_req_hdr_init)(struct mbx_hdr *hdr, 100 uint8_t dom, 101 uint8_t port, 102 uint8_t subsys, 103 uint8_t opcode, 104 uint32_t timeout, 105 uint32_t pyld_len, 106 uint8_t version); 107 void (*get_mac_addr)(struct oce_softc *sc, 108 uint8_t *macaddr); 109 } OCE_RDMA_INFO, *POCE_RDMA_INFO; 110 111 #define OCE_RDMA_INFO_SIZE (sizeof(OCE_RDMA_INFO)) 112 113 typedef struct oce_rdma_if { 114 int size; 115 int (*announce)(struct oce_dev_info *devinfo); 116 } OCE_RDMA_IF, *POCE_RDMA_IF; 117 118 #define OCE_RDMA_IF_SIZE (sizeof(OCE_RDMA_IF)) 119 120 int oce_register_rdma(POCE_RDMA_INFO rdma_info, POCE_RDMA_IF rdma_if); 121