mc5
struct mc5_params mc5;
static inline unsigned int t3_mc5_size(const struct mc5 *p)
void t3_mc5_prep(adapter_t *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);
int t3_read_mc5_range(const struct mc5 *mc5, unsigned int start, unsigned int n,
static int init_mask_data_array(struct mc5 *mc5, u32 mask_array_base,
adapter_t *adap = mc5->adapter;
unsigned int size72 = mc5->tcam_size;
if (mc5->mode == MC5_MODE_144_BIT) {
mc5->mode == MC5_MODE_144_BIT ? 0xfffffff9 : 0xfffffffd,
static int init_idt52100(struct mc5 *mc5)
adapter_t *adap = mc5->adapter;
return init_mask_data_array(mc5, IDT_MSKARY_BASE_ADR0,
static int init_idt43102(struct mc5 *mc5)
adapter_t *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_set_reg_field(mc5->adapter, A_MC5_DB_CONFIG, F_PRTYEN | F_MBUSEN,
static void mc5_dbgi_mode_disable(const struct mc5 *mc5)
t3_set_reg_field(mc5->adapter, A_MC5_DB_CONFIG, F_DBGIEN,
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;
unsigned int mode72 = mc5->mode == MC5_MODE_72_BIT;
adapter_t *adap = mc5->adapter;
mc5->parity_enabled = 0;
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);
int t3_read_mc5_range(const struct mc5 *mc5, unsigned int start,
adapter_t *adap = mc5->adapter;
if (mc5->part_type == IDT75P52100)
else if (mc5->part_type == IDT75N43102)
mc5_dbgi_mode_enable(mc5);
mc5_dbgi_mode_disable(mc5);
void t3_mc5_intr_handler(struct mc5 *mc5)
adapter_t *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 __devinit t3_mc5_prep(adapter_t *adapter, struct mc5 *mc5, int mode)
mc5->adapter = adapter;
mc5->parity_enabled = 1;
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 = 0;
adapter->params.mc5.nroutes = 0;
t3_mc5_prep(adapter, &adapter->mc5, MC5_MODE_144_BIT);
struct mc5 mc5;
unsigned int mxf = t3_mc5_size(&sc->mc5) - MC5_MIN_TIDS;
sc->params.mc5.nservers = 0;
sc->params.mc5.nfilters = mxf;
sc->params.mc5.nfilters = min(nfilters, mxf);
return -t3_read_mc5_range(&sc->mc5, t->addr, 1, t->buf);
unsigned int nfilters = sc->params.mc5.nfilters;
unsigned int nfilters = sc->params.mc5.nfilters;
unsigned int i, nfilters = sc->params.mc5.nfilters;
unsigned int nfilters = sc->params.mc5.nfilters;
unsigned int nfilters = sc->params.mc5.nfilters;
id += t3_mc5_size(&sc->mc5) - sc->params.mc5.nroutes -
sc->params.mc5.nfilters;