Deleted Added
full compact
38a39
> /* $FreeBSD: head/sys/dev/oce/oce_if.c 231879 2012-02-17 13:55:17Z luigi $ */
40,41d40
< /* $FreeBSD: head/sys/dev/oce/oce_if.c 231511 2012-02-11 08:33:52Z bz $ */
<
74,77d72
< #if defined(INET6) || defined(INET)
< static struct mbuf * oce_tso_setup(POCE_SOFTC sc, struct mbuf **mpp,
< uint16_t *mss);
< #endif
85,87d79
< #if defined(INET6) || defined(INET)
< static void oce_rx_flush_lro(struct oce_rq *rq);
< #endif
99,101d90
< #if defined(INET6) || defined(INET)
< static int oce_init_lro(POCE_SOFTC sc);
< #endif
105a95,96
> static void process_link_state(POCE_SOFTC sc,
> struct oce_async_cqe_link_state *acqe);
106a98,105
>
> /* IP specific */
> #if defined(INET6) || defined(INET)
> static int oce_init_lro(POCE_SOFTC sc);
> static void oce_rx_flush_lro(struct oce_rq *rq);
> static struct mbuf * oce_tso_setup(POCE_SOFTC sc, struct mbuf **mpp);
> #endif
>
160,163c159,162
< uint16_t vendor;
< uint16_t device;
< int i;
< char str[80];
---
> uint16_t vendor = 0;
> uint16_t device = 0;
> int i = 0;
> char str[256] = {0};
173c172
< for (i = 0; i < (sizeof(supportedDevices) / sizeof(uint16_t)); i++) {
---
> for (i = 0; i < (sizeof(supportedDevices) / sizeof(uint32_t)); i++) {
176,177c175
< sprintf(str, "%s:%s",
< "Emulex CNA NIC function",
---
> sprintf(str, "%s:%s", "Emulex CNA NIC function",
231d228
<
234d230
<
239d234
<
244d238
<
249d242
<
253c246
< goto ifp_free;
---
> goto ifp_free;
256d248
<
261d252
<
273d263
<
277a268,269
> #ifdef DEV_NETMAP
> #endif /* DEV_NETMAP */
318d309
<
320d310
<
362,364d351
< case SIOCGIFPSRCADDR_IN6:
< rc = ether_ioctl(ifp, command, data);
< break;
366,373d352
< case SIOCGIFPSRCADDR:
< rc = ether_ioctl(ifp, command, data);
< break;
<
< case SIOCGIFSTATUS:
< rc = ether_ioctl(ifp, command, data);
< break;
<
378,389d356
< case SIOCSIFMEDIA:
< rc = ether_ioctl(ifp, command, data);
< break;
<
< case SIOCGIFGENERIC:
< rc = ether_ioctl(ifp, command, data);
< break;
<
< case SIOCGETMIFCNT_IN6:
< rc = ether_ioctl(ifp, command, data);
< break;
<
477d443
<
816,818d781
< #if defined(INET6) || defined(INET)
< uint16_t mss = 0;
< #endif
830d792
< #if defined(INET6) || defined(INET)
832c794,795
< m = oce_tso_setup(sc, mpp, &mss);
---
> #if defined(INET6) || defined(INET)
> m = oce_tso_setup(sc, mpp);
1014a978
>
1017c981
< oce_tso_setup(POCE_SOFTC sc, struct mbuf **mpp, uint16_t *mss)
---
> oce_tso_setup(POCE_SOFTC sc, struct mbuf **mpp)
1028d991
< int total_len = 0;
1030c993
< int ehdrlen = 0;
---
> int total_len = 0, ehdrlen = 0;
1033d995
< *mss = m->m_pkthdr.tso_segsz;
1052d1013
<
1087d1047
<
1117a1078
> int def_q = 0; /* Defualt tx queue is 0*/
1127,1130c1088,1091
< /* oce_start always uses default TX queue 0 */
< LOCK(&sc->wq[0]->tx_lock);
< rc = oce_tx(sc, &m, 0);
< UNLOCK(&sc->wq[0]->tx_lock);
---
>
> LOCK(&sc->wq[def_q]->tx_lock);
> rc = oce_tx(sc, &m, def_q);
> UNLOCK(&sc->wq[def_q]->tx_lock);
1133c1094
< sc->wq[0]->tx_stats.tx_stops ++;
---
> sc->wq[def_q]->tx_stats.tx_stops ++;
1143c1104
< } while (1);
---
> } while (TRUE);
1251d1211
< vtag = cqe->u0.s.vlan_tag;
1257a1218,1224
> /* Get vlan_tag value */
> if(IS_BE(sc))
> vtag = BSWAP_16(cqe->u0.s.vlan_tag);
> else
> vtag = cqe->u0.s.vlan_tag;
>
>
1293c1260
< if (!cqe->u0.s.ip_ver) { //IPV4
---
> if (!cqe->u0.s.ip_ver) { /* IPV4 */
1316c1283
< //This deternies if vlan tag is present
---
> /* This deternies if vlan tag is Valid */
1319c1286
< /* FLEX10 */
---
> /* FLEX10. If QnQ is not set, neglect VLAN */
1321,1326c1288
< /* If QnQ is not set, neglect VLAN */
< if (IS_BE(sc))
< m->m_pkthdr.ether_vtag =
< BSWAP_16(vtag);
< else
< m->m_pkthdr.ether_vtag = vtag;
---
> m->m_pkthdr.ether_vtag = vtag;
1329,1333c1291,1296
< } else {
< if (IS_BE(sc))
< m->m_pkthdr.ether_vtag = BSWAP_16(vtag);
< else
< m->m_pkthdr.ether_vtag = vtag;
---
> } else if (sc->pvid != (vtag & VLAN_VID_MASK)) {
> /* In UMC mode generally pvid will be striped by
> hw. But in some cases we have seen it comes
> with pvid. So if pvid == vlan, neglect vlan.
> */
> m->m_pkthdr.ether_vtag = vtag;
1418c1381
< } else {
---
> } else
1420d1382
< }
1445d1406
<
1485d1445
< #endif /* INET6 || INET */
1486a1447
>
1490d1450
< #if defined(INET6) || defined(INET)
1499d1458
< #endif
1500a1460
> #endif /* INET6 || INET */
1502d1461
<
1622a1582
>
1684a1645
>
1687a1649
> sc->ifp->if_capabilities |= IFCAP_VLAN_HWTSO;
1946a1909,1928
> static void
> process_link_state(POCE_SOFTC sc, struct oce_async_cqe_link_state *acqe)
> {
> /* Update Link status */
> if ((acqe->u0.s.link_status & ~ASYNC_EVENT_LOGICAL) ==
> ASYNC_EVENT_LINK_UP) {
> sc->link_status = ASYNC_EVENT_LINK_UP;
> if_link_state_change(sc->ifp, LINK_STATE_UP);
> } else {
> sc->link_status = ASYNC_EVENT_LINK_DOWN;
> if_link_state_change(sc->ifp, LINK_STATE_DOWN);
> }
>
> /* Update speed */
> sc->link_speed = acqe->u0.s.speed;
> sc->qos_link_speed = (uint32_t) acqe->u0.s.qos_link_speed * 10;
>
> }
>
>
1954c1936
< int num_cqes = 0;
---
> int num_cqes = 0, evt_type = 0, optype = 0;
1956a1939
> struct oce_async_event_grp5_pvid_state *gcqe;
1957a1941
>
1960a1945
>
1964,1971c1949,1964
< acqe = (struct oce_async_cqe_link_state *)cqe;
< if ((acqe->u0.s.link_status & ~ASYNC_EVENT_LOGICAL) ==
< ASYNC_EVENT_LINK_UP) {
< sc->link_status = ASYNC_EVENT_LINK_UP;
< if_link_state_change(sc->ifp, LINK_STATE_UP);
< } else {
< sc->link_status = ASYNC_EVENT_LINK_DOWN;
< if_link_state_change(sc->ifp, LINK_STATE_DOWN);
---
> evt_type = cqe->u0.s.event_type;
> optype = cqe->u0.s.async_type;
> if (evt_type == ASYNC_EVENT_CODE_LINK_STATE) {
> /* Link status evt */
> acqe = (struct oce_async_cqe_link_state *)cqe;
> process_link_state(sc, acqe);
> } else if ((evt_type == ASYNC_EVENT_GRP5) &&
> (optype == ASYNC_EVENT_PVID_STATE)) {
> /* GRP5 PVID */
> gcqe =
> (struct oce_async_event_grp5_pvid_state *)cqe;
> if (gcqe->enabled)
> sc->pvid = gcqe->tag & VLAN_VID_MASK;
> else
> sc->pvid = 0;
>
1973,1979d1965
<
< if (acqe->u0.s.event_code ==
< ASYNC_EVENT_CODE_LINK_STATE) {
< sc->link_speed = acqe->u0.s.speed;
< sc->qos_link_speed =
< (uint32_t )acqe->u0.s.qos_link_speed * 10;
< }
1983d1968
< RING_GET(mq->ring, 1);
2004,2005c1989,1992
< (!sc->rss_enable) ||
< (sc->flags & OCE_FLAGS_BE2)) {
---
> (sc->function_mode & FNM_UMC_MODE) ||
> (sc->function_mode & FNM_VNIC_MODE) ||
> (!sc->rss_enable) ||
> (sc->flags & OCE_FLAGS_BE2)) {
2021,2025d2007
<
< /*Hardware issue. Turn off multi TX for be2 */
< if (IS_BE(sc) && (sc->flags & OCE_FLAGS_BE2))
< sc->nwqs = 1;
<
2037,2038d2018
< if (IS_BE(sc) && (sc->flags & OCE_FLAGS_BE2))
< sc->nwqs = 1;