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];
 
        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]);
 }
 
 {
        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;
                        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)
        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) {
        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))
                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);
 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;
 
        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,
 };
 
 /*
 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;
 #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)
 
                        __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;
 #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
 };
        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
 };