1*44091d29SJiri Pirko /* 2*44091d29SJiri Pirko * include/linux/parman.h - Manager for linear priority array areas 3*44091d29SJiri Pirko * Copyright (c) 2017 Mellanox Technologies. All rights reserved. 4*44091d29SJiri Pirko * Copyright (c) 2017 Jiri Pirko <[email protected]> 5*44091d29SJiri Pirko * 6*44091d29SJiri Pirko * Redistribution and use in source and binary forms, with or without 7*44091d29SJiri Pirko * modification, are permitted provided that the following conditions are met: 8*44091d29SJiri Pirko * 9*44091d29SJiri Pirko * 1. Redistributions of source code must retain the above copyright 10*44091d29SJiri Pirko * notice, this list of conditions and the following disclaimer. 11*44091d29SJiri Pirko * 2. Redistributions in binary form must reproduce the above copyright 12*44091d29SJiri Pirko * notice, this list of conditions and the following disclaimer in the 13*44091d29SJiri Pirko * documentation and/or other materials provided with the distribution. 14*44091d29SJiri Pirko * 3. Neither the names of the copyright holders nor the names of its 15*44091d29SJiri Pirko * contributors may be used to endorse or promote products derived from 16*44091d29SJiri Pirko * this software without specific prior written permission. 17*44091d29SJiri Pirko * 18*44091d29SJiri Pirko * Alternatively, this software may be distributed under the terms of the 19*44091d29SJiri Pirko * GNU General Public License ("GPL") version 2 as published by the Free 20*44091d29SJiri Pirko * Software Foundation. 21*44091d29SJiri Pirko * 22*44091d29SJiri Pirko * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 23*44091d29SJiri Pirko * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24*44091d29SJiri Pirko * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25*44091d29SJiri Pirko * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 26*44091d29SJiri Pirko * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 27*44091d29SJiri Pirko * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 28*44091d29SJiri Pirko * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 29*44091d29SJiri Pirko * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 30*44091d29SJiri Pirko * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 31*44091d29SJiri Pirko * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32*44091d29SJiri Pirko * POSSIBILITY OF SUCH DAMAGE. 33*44091d29SJiri Pirko */ 34*44091d29SJiri Pirko 35*44091d29SJiri Pirko #ifndef _PARMAN_H 36*44091d29SJiri Pirko #define _PARMAN_H 37*44091d29SJiri Pirko 38*44091d29SJiri Pirko #include <linux/list.h> 39*44091d29SJiri Pirko 40*44091d29SJiri Pirko enum parman_algo_type { 41*44091d29SJiri Pirko PARMAN_ALGO_TYPE_LSORT, 42*44091d29SJiri Pirko }; 43*44091d29SJiri Pirko 44*44091d29SJiri Pirko struct parman_item { 45*44091d29SJiri Pirko struct list_head list; 46*44091d29SJiri Pirko unsigned long index; 47*44091d29SJiri Pirko }; 48*44091d29SJiri Pirko 49*44091d29SJiri Pirko struct parman_prio { 50*44091d29SJiri Pirko struct list_head list; 51*44091d29SJiri Pirko struct list_head item_list; 52*44091d29SJiri Pirko unsigned long priority; 53*44091d29SJiri Pirko }; 54*44091d29SJiri Pirko 55*44091d29SJiri Pirko struct parman_ops { 56*44091d29SJiri Pirko unsigned long base_count; 57*44091d29SJiri Pirko unsigned long resize_step; 58*44091d29SJiri Pirko int (*resize)(void *priv, unsigned long new_count); 59*44091d29SJiri Pirko void (*move)(void *priv, unsigned long from_index, 60*44091d29SJiri Pirko unsigned long to_index, unsigned long count); 61*44091d29SJiri Pirko enum parman_algo_type algo; 62*44091d29SJiri Pirko }; 63*44091d29SJiri Pirko 64*44091d29SJiri Pirko struct parman; 65*44091d29SJiri Pirko 66*44091d29SJiri Pirko struct parman *parman_create(const struct parman_ops *ops, void *priv); 67*44091d29SJiri Pirko void parman_destroy(struct parman *parman); 68*44091d29SJiri Pirko void parman_prio_init(struct parman *parman, struct parman_prio *prio, 69*44091d29SJiri Pirko unsigned long priority); 70*44091d29SJiri Pirko void parman_prio_fini(struct parman_prio *prio); 71*44091d29SJiri Pirko int parman_item_add(struct parman *parman, struct parman_prio *prio, 72*44091d29SJiri Pirko struct parman_item *item); 73*44091d29SJiri Pirko void parman_item_remove(struct parman *parman, struct parman_prio *prio, 74*44091d29SJiri Pirko struct parman_item *item); 75*44091d29SJiri Pirko 76*44091d29SJiri Pirko #endif 77