Skip to content

Commit

Permalink
cxgb4: update FW definitions
Browse files Browse the repository at this point in the history
Update to latest FW API.  Most changes here pertain to port types and
querying FW for parameter values.

Signed-off-by: Dimitris Michailidis <dm@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Dimitris Michailidis authored and David S. Miller committed Jun 19, 2010
1 parent 91e9a1e commit a0881ca
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 24 deletions.
55 changes: 42 additions & 13 deletions drivers/net/cxgb4/cxgb4_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -216,15 +216,15 @@ void t4_os_link_changed(struct adapter *adapter, int port_id, int link_stat)
void t4_os_portmod_changed(const struct adapter *adap, int port_id)
{
static const char *mod_str[] = {
NULL, "LR", "SR", "ER", "passive DA", "active DA"
NULL, "LR", "SR", "ER", "passive DA", "active DA", "LRM"
};

const struct net_device *dev = adap->port[port_id];
const struct port_info *pi = netdev_priv(dev);

if (pi->mod_type == FW_PORT_MOD_TYPE_NONE)
netdev_info(dev, "port module unplugged\n");
else
else if (pi->mod_type < ARRAY_SIZE(mod_str))
netdev_info(dev, "%s module inserted\n", mod_str[pi->mod_type]);
}

Expand Down Expand Up @@ -1234,7 +1234,8 @@ static unsigned int from_fw_linkcaps(unsigned int type, unsigned int caps)
{
unsigned int v = 0;

if (type == FW_PORT_TYPE_BT_SGMII || type == FW_PORT_TYPE_BT_XAUI) {
if (type == FW_PORT_TYPE_BT_SGMII || type == FW_PORT_TYPE_BT_XFI ||
type == FW_PORT_TYPE_BT_XAUI) {
v |= SUPPORTED_TP;
if (caps & FW_PORT_CAP_SPEED_100M)
v |= SUPPORTED_100baseT_Full;
Expand All @@ -1250,7 +1251,10 @@ static unsigned int from_fw_linkcaps(unsigned int type, unsigned int caps)
v |= SUPPORTED_10000baseKX4_Full;
} else if (type == FW_PORT_TYPE_KR)
v |= SUPPORTED_Backplane | SUPPORTED_10000baseKR_Full;
else if (type == FW_PORT_TYPE_FIBER)
else if (type == FW_PORT_TYPE_BP_AP)
v |= SUPPORTED_Backplane | SUPPORTED_10000baseR_FEC;
else if (type == FW_PORT_TYPE_FIBER_XFI ||
type == FW_PORT_TYPE_FIBER_XAUI || type == FW_PORT_TYPE_SFP)
v |= SUPPORTED_FIBRE;

if (caps & FW_PORT_CAP_ANEG)
Expand All @@ -1276,13 +1280,19 @@ static int get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
const struct port_info *p = netdev_priv(dev);

if (p->port_type == FW_PORT_TYPE_BT_SGMII ||
p->port_type == FW_PORT_TYPE_BT_XFI ||
p->port_type == FW_PORT_TYPE_BT_XAUI)
cmd->port = PORT_TP;
else if (p->port_type == FW_PORT_TYPE_FIBER)
else if (p->port_type == FW_PORT_TYPE_FIBER_XFI ||
p->port_type == FW_PORT_TYPE_FIBER_XAUI)
cmd->port = PORT_FIBRE;
else if (p->port_type == FW_PORT_TYPE_TWINAX)
cmd->port = PORT_DA;
else
else if (p->port_type == FW_PORT_TYPE_SFP) {
if (p->mod_type == FW_PORT_MOD_TYPE_TWINAX_PASSIVE ||
p->mod_type == FW_PORT_MOD_TYPE_TWINAX_ACTIVE)
cmd->port = PORT_DA;
else
cmd->port = PORT_FIBRE;
} else
cmd->port = PORT_OTHER;

if (p->mdio_addr >= 0) {
Expand Down Expand Up @@ -2814,14 +2824,20 @@ static int adap_init0(struct adapter *adap)
for (v = 1; v < SGE_NCOUNTERS; v++)
adap->sge.counter_val[v] = min(intr_cnt[v - 1],
THRESHOLD_3_MASK);
ret = adap_init1(adap, &c);
if (ret < 0)
goto bye;

#define FW_PARAM_DEV(param) \
(FW_PARAMS_MNEM(FW_PARAMS_MNEM_DEV) | \
FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_DEV_##param))

params[0] = FW_PARAM_DEV(CCLK);
ret = t4_query_params(adap, 0, 0, 0, 1, params, val);
if (ret < 0)
goto bye;
adap->params.vpd.cclk = val[0];

ret = adap_init1(adap, &c);
if (ret < 0)
goto bye;

#define FW_PARAM_PFVF(param) \
(FW_PARAMS_MNEM(FW_PARAMS_MNEM_PFVF) | \
FW_PARAMS_PARAM_X(FW_PARAMS_PARAM_PFVF_##param))
Expand Down Expand Up @@ -2874,6 +2890,18 @@ static int adap_init0(struct adapter *adap)
adap->vres.rq.size = val[3] - val[2] + 1;
adap->vres.pbl.start = val[4];
adap->vres.pbl.size = val[5] - val[4] + 1;

params[0] = FW_PARAM_PFVF(SQRQ_START);
params[1] = FW_PARAM_PFVF(SQRQ_END);
params[2] = FW_PARAM_PFVF(CQ_START);
params[3] = FW_PARAM_PFVF(CQ_END);
ret = t4_query_params(adap, 0, 0, 0, 4, params, val);
if (ret < 0)
goto bye;
adap->vres.qp.start = val[0];
adap->vres.qp.size = val[1] - val[0] + 1;
adap->vres.cq.start = val[2];
adap->vres.cq.size = val[3] - val[2] + 1;
}
if (c.iscsicaps) {
params[0] = FW_PARAM_PFVF(ISCSI_START);
Expand Down Expand Up @@ -3194,7 +3222,8 @@ static int __devinit enable_msix(struct adapter *adap)
static void __devinit print_port_info(struct adapter *adap)
{
static const char *base[] = {
"R", "KX4", "T", "KX", "T", "KR", "CX4"
"R XFI", "R XAUI", "T SGMII", "T XFI", "T XAUI", "KX4", "CX4",
"KX", "KR", "KR SFP+", "KR FEC"
};

int i;
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/cxgb4/cxgb4_uld.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,8 @@ struct cxgb4_virt_res { /* virtualized HW resources */
struct cxgb4_range stag;
struct cxgb4_range rq;
struct cxgb4_range pbl;
struct cxgb4_range qp;
struct cxgb4_range cq;
};

/*
Expand Down
6 changes: 3 additions & 3 deletions drivers/net/cxgb4/t4_hw.c
Original file line number Diff line number Diff line change
Expand Up @@ -2580,7 +2580,7 @@ int t4_alloc_vi(struct adapter *adap, unsigned int mbox, unsigned int port,
}
if (rss_size)
*rss_size = FW_VI_CMD_RSSSIZE_GET(ntohs(c.rsssize_pkd));
return ntohs(c.viid_pkd);
return FW_VI_CMD_VIID_GET(ntohs(c.type_viid));
}

/**
Expand All @@ -2603,7 +2603,7 @@ int t4_free_vi(struct adapter *adap, unsigned int mbox, unsigned int pf,
FW_CMD_EXEC | FW_VI_CMD_PFN(pf) |
FW_VI_CMD_VFN(vf));
c.alloc_to_len16 = htonl(FW_VI_CMD_FREE | FW_LEN16(c));
c.viid_pkd = htons(FW_VI_CMD_VIID(viid));
c.type_viid = htons(FW_VI_CMD_VIID(viid));
return t4_wr_mbox(adap, mbox, &c, sizeof(c), &c);
}

Expand Down Expand Up @@ -3169,7 +3169,7 @@ int __devinit t4_port_init(struct adapter *adap, int mbox, int pf, int vf)
p->mdio_addr = (ret & FW_PORT_CMD_MDIOCAP) ?
FW_PORT_CMD_MDIOADDR_GET(ret) : -1;
p->port_type = FW_PORT_CMD_PTYPE_GET(ret);
p->mod_type = FW_PORT_CMD_MODTYPE_GET(ret);
p->mod_type = FW_PORT_MOD_TYPE_NA;

init_link_config(&p->link_cfg, ntohs(c.u.info.pcap));
j++;
Expand Down
34 changes: 26 additions & 8 deletions drivers/net/cxgb4/t4fw_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,13 @@ enum fw_params_param_pfvf {
FW_PARAMS_PARAM_PFVF_PBL_END = 0x12,
FW_PARAMS_PARAM_PFVF_L2T_START = 0x13,
FW_PARAMS_PARAM_PFVF_L2T_END = 0x14,
FW_PARAMS_PARAM_PFVF_SQRQ_START = 0x15,
FW_PARAMS_PARAM_PFVF_SQRQ_END = 0x16,
FW_PARAMS_PARAM_PFVF_CQ_START = 0x17,
FW_PARAMS_PARAM_PFVF_CQ_END = 0x18,
FW_PARAMS_PARAM_PFVF_SCHEDCLASS_ETH = 0x20,
FW_PARAMS_PARAM_PFVF_VIID = 0x24,
FW_PARAMS_PARAM_PFVF_CPMASK = 0x25,
};

/*
Expand Down Expand Up @@ -804,16 +810,16 @@ struct fw_eq_ofld_cmd {
struct fw_vi_cmd {
__be32 op_to_vfn;
__be32 alloc_to_len16;
__be16 viid_pkd;
__be16 type_viid;
u8 mac[6];
u8 portid_pkd;
u8 nmac;
u8 nmac0[6];
__be16 rsssize_pkd;
u8 nmac1[6];
__be16 r7;
__be16 idsiiq_pkd;
u8 nmac2[6];
__be16 r8;
__be16 idseiq_pkd;
u8 nmac3[6];
__be64 r9;
__be64 r10;
Expand All @@ -824,6 +830,7 @@ struct fw_vi_cmd {
#define FW_VI_CMD_ALLOC (1U << 31)
#define FW_VI_CMD_FREE (1U << 30)
#define FW_VI_CMD_VIID(x) ((x) << 0)
#define FW_VI_CMD_VIID_GET(x) ((x) & 0xfff)
#define FW_VI_CMD_PORTID(x) ((x) << 4)
#define FW_VI_CMD_RSSSIZE_GET(x) (((x) >> 0) & 0x7ff)

Expand Down Expand Up @@ -1136,6 +1143,11 @@ struct fw_port_cmd {
__be32 lstatus_to_modtype;
__be16 pcap;
__be16 acap;
__be16 mtu;
__u8 cbllen;
__u8 r9;
__be32 r10;
__be64 r11;
} info;
struct fw_port_ppp {
__be32 pppen_to_ncsich;
Expand Down Expand Up @@ -1196,14 +1208,17 @@ struct fw_port_cmd {
#define FW_PORT_CMD_NCSICH(x) ((x) << 4)

enum fw_port_type {
FW_PORT_TYPE_FIBER,
FW_PORT_TYPE_KX4,
FW_PORT_TYPE_FIBER_XFI,
FW_PORT_TYPE_FIBER_XAUI,
FW_PORT_TYPE_BT_SGMII,
FW_PORT_TYPE_KX,
FW_PORT_TYPE_BT_XFI,
FW_PORT_TYPE_BT_XAUI,
FW_PORT_TYPE_KR,
FW_PORT_TYPE_KX4,
FW_PORT_TYPE_CX4,
FW_PORT_TYPE_TWINAX,
FW_PORT_TYPE_KX,
FW_PORT_TYPE_KR,
FW_PORT_TYPE_SFP,
FW_PORT_TYPE_BP_AP,

FW_PORT_TYPE_NONE = FW_PORT_CMD_PTYPE_MASK
};
Expand All @@ -1213,6 +1228,9 @@ enum fw_port_module_type {
FW_PORT_MOD_TYPE_LR,
FW_PORT_MOD_TYPE_SR,
FW_PORT_MOD_TYPE_ER,
FW_PORT_MOD_TYPE_TWINAX_PASSIVE,
FW_PORT_MOD_TYPE_TWINAX_ACTIVE,
FW_PORT_MOD_TYPE_LRM,

FW_PORT_MOD_TYPE_NONE = FW_PORT_CMD_MODTYPE_MASK
};
Expand Down

0 comments on commit a0881ca

Please sign in to comment.