1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0 3 * 4 * This file is provided under a dual BSD/GPLv2 license. When using or 5 * redistributing this file, you may do so under either license. 6 * 7 * GPL LICENSE SUMMARY 8 * 9 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of version 2 of the GNU General Public License as 13 * published by the Free Software Foundation. 14 * 15 * This program is distributed in the hope that it will be useful, but 16 * WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 * General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 23 * The full GNU General Public License is included in this distribution 24 * in the file called LICENSE.GPL. 25 * 26 * BSD LICENSE 27 * 28 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 29 * All rights reserved. 30 * 31 * Redistribution and use in source and binary forms, with or without 32 * modification, are permitted provided that the following conditions 33 * are met: 34 * 35 * * Redistributions of source code must retain the above copyright 36 * notice, this list of conditions and the following disclaimer. 37 * * Redistributions in binary form must reproduce the above copyright 38 * notice, this list of conditions and the following disclaimer in 39 * the documentation and/or other materials provided with the 40 * distribution. 41 * 42 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 43 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 44 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 45 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 46 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 47 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 48 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 49 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 50 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 51 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 52 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 53 * 54 * $FreeBSD$ 55 */ 56 #ifndef _SCI_BASE_MEMORY_DESCRIPTOR_LIST_H_ 57 #define _SCI_BASE_MEMORY_DESCRIPTOR_LIST_H_ 58 59 /** 60 * @file 61 * 62 * @brief This file contains the protected interface structures, constants 63 * and interface methods for the SCI_BASE_MEMORY_DESCRIPTOR_LIST 64 * object. 65 */ 66 67 #ifdef __cplusplus 68 extern "C" { 69 #endif // __cplusplus 70 71 #include <dev/isci/scil/sci_types.h> 72 #include <dev/isci/scil/sci_memory_descriptor_list.h> 73 74 75 /** 76 * @struct SCI_BASE_MEMORY_DESCRIPTOR_LIST 77 * 78 * @brief This structure contains all of the fields necessary to implement 79 * a simple stack for managing the list of available controller indices. 80 */ 81 typedef struct SCI_BASE_MEMORY_DESCRIPTOR_LIST 82 { 83 /** 84 * This field indicates the length of the memory descriptor entry array. 85 */ 86 U32 length; 87 88 /** 89 * This field is utilized to provide iterator pattern functionality. 90 * It indicates the index of the next memory descriptor in the iteration. 91 */ 92 U32 next_index; 93 94 /** 95 * This field will point to the list of memory descriptors. 96 */ 97 SCI_PHYSICAL_MEMORY_DESCRIPTOR_T * mde_array; 98 99 /** 100 * This field simply allows a user to chain memory descriptor lists 101 * together if desired. This field will be initialized to 102 * SCI_INVALID_HANDLE. 103 */ 104 SCI_MEMORY_DESCRIPTOR_LIST_HANDLE_T next_mdl; 105 106 } SCI_BASE_MEMORY_DESCRIPTOR_LIST_T; 107 108 /** 109 * @brief This method is invoked to construct an memory descriptor list. 110 * It initializes the fields of the MDL. 111 * 112 * @param[in] mdl This parameter specifies the memory descriptor list 113 * to be constructed. 114 * @param[in] mde_array This parameter specifies the array of memory 115 * descriptor entries to be managed by this list. 116 * @param[in] mde_array_length This parameter specifies the size of the 117 * array of entries. 118 * @param[in] next_mdl This parameter specifies a subsequent MDL object 119 * to be managed by this MDL object. 120 * 121 * @return none. 122 */ 123 void sci_base_mdl_construct( 124 SCI_BASE_MEMORY_DESCRIPTOR_LIST_T * mdl, 125 SCI_PHYSICAL_MEMORY_DESCRIPTOR_T * mde_array, 126 U32 mde_array_length, 127 SCI_MEMORY_DESCRIPTOR_LIST_HANDLE_T next_mdl 128 ); 129 130 /** 131 * This macro constructs an memory descriptor entry with the given 132 * alignment and size 133 */ 134 #define sci_base_mde_construct(mde, alignment, size, attributes) \ 135 { \ 136 (mde)->constant_memory_alignment = (alignment); \ 137 (mde)->constant_memory_size = (size); \ 138 (mde)->constant_memory_attributes = (attributes); \ 139 } 140 141 /** 142 * @brief This method validates that the memory descriptor is correctly 143 * filled out by the SCI User 144 * 145 * @param[in] mde This parameter is the mde entry to validate 146 * @param[in] alignment This parameter specifies the expected alignment of 147 * the memory for the mde. 148 * @param[in] size This parameter specifies the memory size expected for 149 * the mde its value should not have been changed by the SCI 150 * User. 151 * @param[in] attributes This parameter specifies the attributes for the 152 * memory descriptor provided. 153 * 154 * @return BOOL This method returns an indication as to whether the 155 * supplied MDE is valid or not. 156 * @retval TRUE The MDE is valid. 157 * @retval FALSE The MDE is not valid. 158 */ 159 BOOL sci_base_mde_is_valid( 160 SCI_PHYSICAL_MEMORY_DESCRIPTOR_T *mde, 161 U32 alignment, 162 U32 size, 163 U16 attributes 164 ); 165 166 #ifdef __cplusplus 167 } 168 #endif // __cplusplus 169 170 #endif // _SCI_BASE_MEMORY_DESCRIPTOR_LIST_H_ 171