ecore_ooo.h revision 316485
1/* 2 * Copyright (c) 2017-2018 Cavium, 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 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 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 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 * 27 * $FreeBSD: head/sys/dev/qlnx/qlnxe/ecore_ooo.h 316485 2017-04-04 06:16:59Z davidcs $ 28 * 29 */ 30 31#ifndef __ECORE_OOO_H__ 32#define __ECORE_OOO_H__ 33 34#include "ecore.h" 35 36#define ECORE_MAX_NUM_ISLES 256 37#define ECORE_MAX_NUM_OOO_HISTORY_ENTRIES 512 38 39#define ECORE_OOO_LEFT_BUF 0 40#define ECORE_OOO_RIGHT_BUF 1 41 42struct ecore_ooo_buffer { 43 osal_list_entry_t list_entry; 44 void *rx_buffer_virt_addr; 45 dma_addr_t rx_buffer_phys_addr; 46 u32 rx_buffer_size; 47 u16 packet_length; 48 u16 parse_flags; 49 u16 vlan; 50 u8 placement_offset; 51}; 52 53struct ecore_ooo_isle { 54 osal_list_entry_t list_entry; 55 osal_list_t buffers_list; 56}; 57 58struct ecore_ooo_archipelago { 59 osal_list_t isles_list; 60}; 61 62struct ecore_ooo_history { 63 struct ooo_opaque *p_cqes; 64 u32 head_idx; 65 u32 num_of_cqes; 66}; 67 68struct ecore_ooo_info { 69 osal_list_t free_buffers_list; 70 osal_list_t ready_buffers_list; 71 osal_list_t free_isles_list; 72 struct ecore_ooo_archipelago *p_archipelagos_mem; 73 struct ecore_ooo_isle *p_isles_mem; 74 struct ecore_ooo_history ooo_history; 75 u32 cur_isles_number; 76 u32 max_isles_number; 77 u32 gen_isles_number; 78 u16 max_num_archipelagos; 79 u16 cid_base; 80}; 81 82enum _ecore_status_t ecore_ooo_alloc(struct ecore_hwfn *p_hwfn); 83 84void ecore_ooo_setup(struct ecore_hwfn *p_hwfn); 85 86void ecore_ooo_free(struct ecore_hwfn *p_hwfn); 87 88void ecore_ooo_save_history_entry(struct ecore_hwfn *p_hwfn, 89 struct ecore_ooo_info *p_ooo_info, 90 struct ooo_opaque *p_cqe); 91 92void ecore_ooo_release_connection_isles(struct ecore_hwfn *p_hwfn, 93 struct ecore_ooo_info *p_ooo_info, 94 u32 cid); 95 96void ecore_ooo_release_all_isles(struct ecore_hwfn *p_hwfn, 97 struct ecore_ooo_info *p_ooo_info); 98 99void ecore_ooo_put_free_buffer(struct ecore_hwfn *p_hwfn, 100 struct ecore_ooo_info *p_ooo_info, 101 struct ecore_ooo_buffer *p_buffer); 102 103struct ecore_ooo_buffer * 104 ecore_ooo_get_free_buffer(struct ecore_hwfn *p_hwfn, 105 struct ecore_ooo_info *p_ooo_info); 106 107void ecore_ooo_put_ready_buffer(struct ecore_hwfn *p_hwfn, 108 struct ecore_ooo_info *p_ooo_info, 109 struct ecore_ooo_buffer *p_buffer, 110 u8 on_tail); 111 112struct ecore_ooo_buffer * 113 ecore_ooo_get_ready_buffer(struct ecore_hwfn *p_hwfn, 114 struct ecore_ooo_info *p_ooo_info); 115 116void ecore_ooo_delete_isles(struct ecore_hwfn *p_hwfn, 117 struct ecore_ooo_info *p_ooo_info, 118 u32 cid, 119 u8 drop_isle, 120 u8 drop_size); 121 122void ecore_ooo_add_new_isle(struct ecore_hwfn *p_hwfn, 123 struct ecore_ooo_info *p_ooo_info, 124 u32 cid, 125 u8 ooo_isle, 126 struct ecore_ooo_buffer *p_buffer); 127 128void ecore_ooo_add_new_buffer(struct ecore_hwfn *p_hwfn, 129 struct ecore_ooo_info *p_ooo_info, 130 u32 cid, 131 u8 ooo_isle, 132 struct ecore_ooo_buffer *p_buffer, 133 u8 buffer_side); 134 135void ecore_ooo_join_isles(struct ecore_hwfn *p_hwfn, 136 struct ecore_ooo_info *p_ooo_info, 137 u32 cid, 138 u8 left_isle); 139 140void ecore_ooo_dump_rx_event(struct ecore_hwfn *p_hwfn, 141 struct ooo_opaque *iscsi_ooo, 142 struct ecore_ooo_buffer *p_buffer); 143 144#endif /*__ECORE_OOO_H__*/ 145 146