54 lines
1.8 KiB
C
Executable file
54 lines
1.8 KiB
C
Executable file
/****************************************************************************
|
|
*
|
|
* Copyright (c) 2014 - 2018 Samsung Electronics Co., Ltd. All rights reserved
|
|
*
|
|
****************************************************************************/
|
|
#ifndef __MIFSMAPPER_H
|
|
#define __MIFSMAPPER_H
|
|
|
|
#include <linux/mutex.h>
|
|
|
|
struct mifsmapper;
|
|
struct scsc_mif_abs;
|
|
struct mutex;
|
|
|
|
int mifsmapper_init(struct mifsmapper *smapper, struct scsc_mif_abs *mif);
|
|
u16 mifsmapper_get_alignment(struct mifsmapper *smapper);
|
|
int mifsmapper_alloc_bank(struct mifsmapper *smapper, bool large_bank, u32 entry_size, u16 *entries);
|
|
int mifsmapper_free_bank(struct mifsmapper *smapper, u8 bank);
|
|
int mifsmapper_get_entries(struct mifsmapper *smapper, u8 bank, u8 num_entries, u8 *entr);
|
|
int mifsmapper_free_entries(struct mifsmapper *smapper, u8 bank, u8 num_entries, u8 *entries);
|
|
void mifsmapper_configure(struct mifsmapper *smapper, u32 granularity);
|
|
int mifsmapper_write_sram(struct mifsmapper *smapper, u8 bank, u8 num_entries, u8 first_entry, dma_addr_t *addr);
|
|
u32 mifsmapper_get_bank_base_address(struct mifsmapper *smapper, u8 bank);
|
|
int mifsmapper_deinit(struct mifsmapper *smapper);
|
|
|
|
#define MIFSMAPPER_160 4
|
|
#define MIFSMAPPER_64 7
|
|
|
|
#define MIFSMAPPER_NOT_VALID 0
|
|
#define MIFSMAPPER_VALID 1
|
|
|
|
struct mifsmapper_bank {
|
|
unsigned long *entries_bm;
|
|
u32 num_entries;
|
|
u32 num_entries_left;
|
|
u32 mem_range_bytes;
|
|
u8 phy_index;
|
|
u32 granularity;
|
|
bool in_use;
|
|
};
|
|
|
|
/* Inclusion in core.c treat it as opaque */
|
|
struct mifsmapper {
|
|
bool in_use;
|
|
spinlock_t lock;
|
|
struct scsc_mif_abs *mif;
|
|
struct mifsmapper_bank *bank; /* Bank reference created after reading HW capabilities */
|
|
unsigned long *bank_bm_large;
|
|
unsigned long *bank_bm_small;
|
|
u32 num_large_banks;
|
|
u32 num_small_banks;
|
|
u16 align;
|
|
};
|
|
#endif
|