FreeBSD/sys/dev/cxgb/common/cxgb_mc5.c
/**
 *	t3_mc5_init - initialize MC5 and the TCAM
 *	@mc5: the MC5 handle
 *	@nservers: desired number the TCP servers (listening ports)
 *	@nfilters: desired number of HW filters (classifiers)
 *	@nroutes: desired number of routes
 *
 *	Initialize MC5 and the TCAM and partition the TCAM for the requested
 *	number of servers, filters, and routes.  The number of routes is
 *	typically 0 except for specialized uses of the T3 adapters.
 */
initialize MC5 and the TCAM
@mc5: the MC5 handle
@nservers: desired number the TCP servers (listening ports)
@nfilters: desired number of HW filters (classifiers)
@nroutes: desired number of routes

Initialize MC5 and the TCAM and partition the TCAM for the requested
number of servers, filters, and routes.  The number of routes is
typically 0 except for specialized uses of the T3 adapters.
initialize MC5 and the TCAM @mc5 : the MC5 handle @nservers : desired number the TCP servers ( listening ports ) @nfilters : desired number of HW filters ( classifiers ) @nroutes : desired number of routes Initialize MC5 and the TCAM and partition the TCAM for the requested number of servers filters and routes . The number of routes is typically 0 except for specialized uses of the T3 adapters .
int t3_mc5_init(struct mc5 *mc5, unsigned int nservers, unsigned int nfilters,
		unsigned int nroutes)
{
	int err;
	unsigned int tcam_size = mc5->tcam_size;
	unsigned int mode72 = mc5->mode == MC5_MODE_72_BIT;
	adapter_t *adap = mc5->adapter;
	if (!tcam_size)
		return 0;
	if (nroutes > MAX_ROUTES || nroutes + nservers + nfilters > tcam_size)
		return -EINVAL;
	if (nfilters)
		mc5->parity_enabled = 0;
	t3_set_reg_field(adap, A_MC5_DB_CONFIG, F_TMMODE | F_COMPEN,
			 V_COMPEN(mode72) | V_TMMODE(mode72) | F_TMRST);
	if (t3_wait_op_done(adap, A_MC5_DB_CONFIG, F_TMRDY, 1, 500, 0)) {
		CH_ERR(adap, "TCAM reset timed out\n");
		return -1;
	}
	t3_write_reg(adap, A_MC5_DB_ROUTING_TABLE_INDEX, tcam_size - nroutes);
	t3_write_reg(adap, A_MC5_DB_FILTER_TABLE,
		     tcam_size - nroutes - nfilters);
	t3_write_reg(adap, A_MC5_DB_SERVER_INDEX,
		     tcam_size - nroutes - nfilters - nservers);
	t3_write_reg(adap, A_MC5_DB_DBGI_REQ_ADDR1, 0);
	t3_write_reg(adap, A_MC5_DB_DBGI_REQ_ADDR2, 0);
	mc5_dbgi_mode_enable(mc5);
	switch (mc5->part_type) {
	case IDT75P52100:
		err = init_idt52100(mc5);
		break;
	case IDT75N43102:
		err = init_idt43102(mc5);
		break;
	default:
		CH_ERR(adap, "Unsupported TCAM type %d\n", mc5->part_type);
		err = -EINVAL;
		break;
	}
	mc5_dbgi_mode_disable(mc5);
	return err;
}
int t3_mc5_init ( struct mc5 * mc5 , unsigned int nservers , unsigned int nfilters , unsigned int nroutes ) { int err ; unsigned int tcam_size = mc5 -> tcam_size ; unsigned int mode72 = mc5 -> mode == MC5_MODE_72_BIT ; adapter_t * adap = mc5 -> adapter ; if ( ! tcam_size ) return 0 ; if ( nroutes > MAX_ROUTES || nroutes + nservers + nfilters > tcam_size ) return - EINVAL ; if ( nfilters ) mc5 -> parity_enabled = 0 ; t3_set_reg_field ( adap , A_MC5_DB_CONFIG , F_TMMODE | F_COMPEN , V_COMPEN ( mode72 ) | V_TMMODE ( mode72 ) | F_TMRST ) ; if ( t3_wait_op_done ( adap , A_MC5_DB_CONFIG , F_TMRDY , 1 , 500 , 0 ) ) { CH_ERR ( adap , " \n " ) ; return -1 ; } t3_write_reg ( adap , A_MC5_DB_ROUTING_TABLE_INDEX , tcam_size - nroutes ) ; t3_write_reg ( adap , A_MC5_DB_FILTER_TABLE , tcam_size - nroutes - nfilters ) ; t3_write_reg ( adap , A_MC5_DB_SERVER_INDEX , tcam_size - nroutes - nfilters - nservers ) ; t3_write_reg ( adap , A_MC5_DB_DBGI_REQ_ADDR1 , 0 ) ; t3_write_reg ( adap , A_MC5_DB_DBGI_REQ_ADDR2 , 0 ) ; mc5_dbgi_mode_enable ( mc5 ) ; switch ( mc5 -> part_type ) { case IDT75P52100 : err = init_idt52100 ( mc5 ) ; break ; case IDT75N43102 : err = init_idt43102 ( mc5 ) ; break ; default : CH_ERR ( adap , " \n " , mc5 -> part_type ) ; err = - EINVAL ; break ; } mc5_dbgi_mode_disable ( mc5 ) ; return err ; }
t3_mc5_init - initialize MC5 and the TCAM
      @mc5: the MC5 handle
      @nservers: desired number the TCP servers (listening ports)
      @nfilters: desired number of HW filters (classifiers)
      @nroutes: desired number of routes
t3_mc5_init - initialize MC5 and the TCAM @mc5 : the MC5 handle @nservers : desired number the TCP servers ( listening ports ) @nfilters : desired number of HW filters ( classifiers ) @nroutes : desired number of routes
/* Reset the TCAM */ /* All the TCAM addresses we access have only the low 32 bits non 0 */