mc5
struct mc5_params mc5;
struct mc5 mc5;
struct mc5_params mc5;
static inline unsigned int t3_mc5_size(const struct mc5 *p)
void t3_mc5_prep(struct adapter *adapter, struct mc5 *mc5, int mode);
int t3_mc5_init(struct mc5 *mc5, unsigned int nservers, unsigned int nfilters,
void t3_mc5_intr_handler(struct mc5 *mc5);
if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nservers -
adap->params.mc5.nfilters = val;
if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nfilters -
adap->params.mc5.nservers = val;
CXGB3_ATTR_R(cam_size, t3_mc5_size(&adap->mc5));
CXGB3_ATTR_RW(nfilters, adap->params.mc5.nfilters, store_nfilters);
CXGB3_ATTR_RW(nservers, adap->params.mc5.nservers, store_nservers);
tid->num = t3_mc5_size(&adapter->mc5) -
adapter->params.mc5.nroutes -
adapter->params.mc5.nfilters - adapter->params.mc5.nservers;
tid->num = adapter->params.mc5.nservers;
tid->base = t3_mc5_size(&adapter->mc5) - tid->num -
adapter->params.mc5.nfilters - adapter->params.mc5.nroutes;
static int init_mask_data_array(struct mc5 *mc5, u32 mask_array_base,
struct adapter *adap = mc5->adapter;
unsigned int size72 = mc5->tcam_size;
if (mc5->mode == MC5_MODE_144_BIT) {
mc5->mode == MC5_MODE_144_BIT ?
static int init_idt52100(struct mc5 *mc5)
struct adapter *adap = mc5->adapter;
return init_mask_data_array(mc5, IDT_MSKARY_BASE_ADR0,
static int init_idt43102(struct mc5 *mc5)
struct adapter *adap = mc5->adapter;
return init_mask_data_array(mc5, IDT4_MSKARY_BASE_ADR0,
static inline void mc5_dbgi_mode_enable(const struct mc5 *mc5)
t3_write_reg(mc5->adapter, A_MC5_DB_CONFIG,
V_TMMODE(mc5->mode == MC5_MODE_72_BIT) | F_DBGIEN);
static void mc5_dbgi_mode_disable(const struct mc5 *mc5)
t3_write_reg(mc5->adapter, A_MC5_DB_CONFIG,
V_TMMODE(mc5->mode == MC5_MODE_72_BIT) |
V_COMPEN(mc5->mode == MC5_MODE_72_BIT) |
V_PRTYEN(mc5->parity_enabled) | F_MBUSEN);
int t3_mc5_init(struct mc5 *mc5, unsigned int nservers, unsigned int nfilters,
unsigned int tcam_size = mc5->tcam_size;
struct adapter *adap = mc5->adapter;
cfg |= V_TMMODE(mc5->mode == MC5_MODE_72_BIT) | F_TMRST;
mc5->parity_enabled = 1;
mc5_dbgi_mode_enable(mc5);
switch (mc5->part_type) {
err = init_idt52100(mc5);
err = init_idt43102(mc5);
CH_ERR(adap, "Unsupported TCAM type %d\n", mc5->part_type);
mc5_dbgi_mode_disable(mc5);
void t3_mc5_intr_handler(struct mc5 *mc5)
struct adapter *adap = mc5->adapter;
if ((cause & F_PARITYERR) && mc5->parity_enabled) {
mc5->stats.parity_err++;
mc5->stats.reqq_parity_err++;
mc5->stats.dispq_parity_err++;
mc5->stats.active_rgn_full++;
mc5->stats.nfa_srch_err++;
mc5->stats.unknown_cmd++;
mc5->stats.del_act_empty++;
void t3_mc5_prep(struct adapter *adapter, struct mc5 *mc5, int mode)
mc5->adapter = adapter;
mc5->mode = (unsigned char)mode;
mc5->part_type = (unsigned char)G_TMTYPE(cfg);
mc5->part_type |= 4;
mc5->tcam_size = tcam_part_size[G_TMPARTSIZE(cfg)];
mc5->tcam_size /= 2;
t3_mc5_intr_handler(&adapter->mc5);
unsigned int m, pstructs, tids = t3_mc5_size(&adap->mc5);
m = t3_mc5_size(&adap->mc5) - adap->params.mc5.nservers -
adap->params.mc5.nfilters - adap->params.mc5.nroutes;
adap->params.mc5.nservers += m - tids;
t3_mc5_init(&adapter->mc5, adapter->params.mc5.nservers,
adapter->params.mc5.nfilters,
adapter->params.mc5.nroutes))
adapter->params.mc5.nservers = DEFAULT_NSERVERS;
adapter->params.mc5.nfilters = adapter->params.rev > 0 ?
adapter->params.mc5.nroutes = 0;
t3_mc5_prep(adapter, &adapter->mc5, MC5_MODE_144_BIT);
DB8500_FUNC_GROUPS(mc5, "mc5_c_1");
FUNCTION(mc5),