100 lines
3.1 KiB
C
Executable file
100 lines
3.1 KiB
C
Executable file
/****************************************************************************
|
|
*
|
|
* Copyright (c) 2014 - 2018 Samsung Electronics Co., Ltd. All rights reserved
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef __HIP4_SMAPPER_H__
|
|
#define __HIP4_SMAPPER_H__
|
|
|
|
struct slsi_dev;
|
|
struct slsi_hip4;
|
|
|
|
enum smapper_type {
|
|
TX_5G,
|
|
TX_2G,
|
|
RX
|
|
};
|
|
|
|
#define HIP4_SMAPPER_TOTAL_BANKS 10
|
|
|
|
#define HIP4_SMAPPER_BANK_SMALL false
|
|
#define HIP4_SMAPPER_BANK_LARGE true
|
|
|
|
#define HIP_SMAPPER_OWNER_FW 0
|
|
#define HIP_SMAPPER_OWNER_HOST 1
|
|
|
|
#define HIP_SMAPPER_STATUS_REFILL 0
|
|
#define HIP_SMAPPER_STATUS_MAPPED 1
|
|
|
|
#define HIP4_SMAPPER_OTHER_CPU 0
|
|
#define HIP4_SMAPPER_OWN_CPU 1
|
|
|
|
#define HIP4_SMAPPER_STATE_OUT 0
|
|
#define HIP4_SMAPPER_STATE_WANT 1
|
|
#define HIP4_SMAPPER_STATE_CLAIM 2
|
|
|
|
#define HIP4_SMAPPER_BANKS_CHECK_CONFIGURE(reg) (((reg) >> 30) == 0 ? 1 : 0)
|
|
#define HIP4_SMAPPER_BANKS_CONFIGURE_DONE(reg) ((reg) = (reg) | 0xc0000000)
|
|
|
|
#define HIP4_SMAPPER_GET_BANK_STATE(b, reg) (((0x1 << ((b) * 2)) & (reg)) > 0 ? 1 : 0)
|
|
#define HIP4_SMAPPER_GET_BANK_OWNER(b, reg) (((0x2 << ((b) * 2)) & (reg)) > 0 ? 1 : 0)
|
|
|
|
#define HIP4_SMAPPER_SET_BANK_STATE(b, reg, val) ((reg) = ((reg) & ~(0x1 << ((b) * 2))) | \
|
|
((val) << ((b) * 2)))
|
|
#define HIP4_SMAPPER_SET_BANK_OWNER(b, reg, val) ((reg) = (reg & ~(0x2 << ((b) * 2))) | \
|
|
(((val) << 1) << ((b) * 2)))
|
|
|
|
|
|
struct hip4_smapper_descriptor {
|
|
u8 bank_num;
|
|
u8 entry_num;
|
|
u16 entry_size;
|
|
u16 headroom;
|
|
};
|
|
|
|
/* There should be an agreement between host and FW about bank mapping */
|
|
/* TODO : think about this agreement */
|
|
enum smapper_banks {
|
|
RX_0,
|
|
RX_1,
|
|
RX_2,
|
|
RX_3,
|
|
END_RX_BANKS
|
|
};
|
|
|
|
struct hip4_smapper_control {
|
|
u32 emul_loc; /* Smapper emulator location in MIF_ADDR */
|
|
u32 emul_sz; /* Smapper emulator size */
|
|
u8 th_req; /* TH smapper request interrupt bit position */
|
|
u8 fh_ind; /* FH smapper ind interrupt bit position */
|
|
u32 mbox_scb; /* SMAPPER MBOX scoreboard location */
|
|
u32 *mbox_ptr; /* Mbox pointer */
|
|
spinlock_t smapper_lock;
|
|
/* Lookup table to map the virtual bank mapping in wlan with the phy mapping in HW */
|
|
/* Currently is safe to use this indexing as only WIFI is using smapper */
|
|
u8 lookuptable[HIP4_SMAPPER_TOTAL_BANKS];
|
|
};
|
|
|
|
struct hip4_smapper_bank {
|
|
enum smapper_type type;
|
|
u16 entries;
|
|
bool in_use;
|
|
u8 bank;
|
|
u8 cur;
|
|
u32 entry_size;
|
|
struct sk_buff **skbuff;
|
|
dma_addr_t *skbuff_dma;
|
|
struct hip4_smapper_control_entry *entry;
|
|
u16 align;
|
|
};
|
|
|
|
int hip4_smapper_init(struct slsi_dev *sdev, struct slsi_hip4 *hip);
|
|
void hip4_smapper_deinit(struct slsi_dev *sdev, struct slsi_hip4 *hip);
|
|
|
|
struct mbulk *hip4_smapper_send(struct slsi_hip4 *hip, struct sk_buff *skb, int *val);
|
|
int hip4_smapper_consume_entry(struct slsi_dev *sdev, struct slsi_hip4 *hip, struct sk_buff *skb_fapi);
|
|
void *hip4_smapper_get_skb_data(struct slsi_dev *sdev, struct slsi_hip4 *hip, struct sk_buff *skb_fapi);
|
|
struct sk_buff *hip4_smapper_get_skb(struct slsi_dev *sdev, struct slsi_hip4 *hip, struct sk_buff *skb_fapi);
|
|
void hip4_smapper_free_mapped_skb(struct sk_buff *skb);
|
|
#endif
|