#include <linux/kernel.h>
#include <linux/bitops.h>
#include "spectrum.h"
#define MLXSW_SP1_KVDL_SINGLE_BASE …
#define MLXSW_SP1_KVDL_SINGLE_SIZE …
#define MLXSW_SP1_KVDL_SINGLE_END …
#define MLXSW_SP1_KVDL_CHUNKS_BASE …
#define MLXSW_SP1_KVDL_CHUNKS_SIZE …
#define MLXSW_SP1_KVDL_CHUNKS_END …
#define MLXSW_SP1_KVDL_LARGE_CHUNKS_BASE …
#define MLXSW_SP1_KVDL_LARGE_CHUNKS_SIZE …
#define MLXSW_SP1_KVDL_LARGE_CHUNKS_END …
#define MLXSW_SP1_KVDL_SINGLE_ALLOC_SIZE …
#define MLXSW_SP1_KVDL_CHUNKS_ALLOC_SIZE …
#define MLXSW_SP1_KVDL_LARGE_CHUNKS_ALLOC_SIZE …
struct mlxsw_sp1_kvdl_part_info { … };
enum mlxsw_sp1_kvdl_part_id { … };
#define MLXSW_SP1_KVDL_PART_INFO(id) …
static const struct mlxsw_sp1_kvdl_part_info mlxsw_sp1_kvdl_parts_info[] = …;
#define MLXSW_SP1_KVDL_PARTS_INFO_LEN …
struct mlxsw_sp1_kvdl_part { … };
struct mlxsw_sp1_kvdl { … };
static struct mlxsw_sp1_kvdl_part *
mlxsw_sp1_kvdl_alloc_size_part(struct mlxsw_sp1_kvdl *kvdl,
unsigned int alloc_size)
{ … }
static struct mlxsw_sp1_kvdl_part *
mlxsw_sp1_kvdl_index_part(struct mlxsw_sp1_kvdl *kvdl, u32 kvdl_index)
{ … }
static u32
mlxsw_sp1_kvdl_to_kvdl_index(const struct mlxsw_sp1_kvdl_part_info *info,
unsigned int entry_index)
{ … }
static unsigned int
mlxsw_sp1_kvdl_to_entry_index(const struct mlxsw_sp1_kvdl_part_info *info,
u32 kvdl_index)
{ … }
static int mlxsw_sp1_kvdl_part_alloc(struct mlxsw_sp1_kvdl_part *part,
u32 *p_kvdl_index)
{ … }
static void mlxsw_sp1_kvdl_part_free(struct mlxsw_sp1_kvdl_part *part,
u32 kvdl_index)
{ … }
static int mlxsw_sp1_kvdl_alloc(struct mlxsw_sp *mlxsw_sp, void *priv,
enum mlxsw_sp_kvdl_entry_type type,
unsigned int entry_count,
u32 *p_entry_index)
{ … }
static void mlxsw_sp1_kvdl_free(struct mlxsw_sp *mlxsw_sp, void *priv,
enum mlxsw_sp_kvdl_entry_type type,
unsigned int entry_count, int entry_index)
{ … }
static int mlxsw_sp1_kvdl_alloc_size_query(struct mlxsw_sp *mlxsw_sp,
void *priv,
enum mlxsw_sp_kvdl_entry_type type,
unsigned int entry_count,
unsigned int *p_alloc_size)
{ … }
static void mlxsw_sp1_kvdl_part_update(struct mlxsw_sp1_kvdl_part *part,
struct mlxsw_sp1_kvdl_part *part_prev,
unsigned int size)
{ … }
static struct mlxsw_sp1_kvdl_part *
mlxsw_sp1_kvdl_part_init(struct mlxsw_sp *mlxsw_sp,
const struct mlxsw_sp1_kvdl_part_info *info,
struct mlxsw_sp1_kvdl_part *part_prev)
{ … }
static void mlxsw_sp1_kvdl_part_fini(struct mlxsw_sp1_kvdl_part *part)
{ … }
static int mlxsw_sp1_kvdl_parts_init(struct mlxsw_sp *mlxsw_sp,
struct mlxsw_sp1_kvdl *kvdl)
{ … }
static void mlxsw_sp1_kvdl_parts_fini(struct mlxsw_sp1_kvdl *kvdl)
{ … }
static u64 mlxsw_sp1_kvdl_part_occ(struct mlxsw_sp1_kvdl_part *part)
{ … }
static u64 mlxsw_sp1_kvdl_occ_get(void *priv)
{ … }
static u64 mlxsw_sp1_kvdl_single_occ_get(void *priv)
{ … }
static u64 mlxsw_sp1_kvdl_chunks_occ_get(void *priv)
{ … }
static u64 mlxsw_sp1_kvdl_large_chunks_occ_get(void *priv)
{ … }
static int mlxsw_sp1_kvdl_init(struct mlxsw_sp *mlxsw_sp, void *priv)
{ … }
static void mlxsw_sp1_kvdl_fini(struct mlxsw_sp *mlxsw_sp, void *priv)
{ … }
const struct mlxsw_sp_kvdl_ops mlxsw_sp1_kvdl_ops = …;
int mlxsw_sp1_kvdl_resources_register(struct mlxsw_core *mlxsw_core)
{ … }