Lines Matching defs:gld

27  * gld - Generic LAN Driver Version 2, PSARC/1997/382
62 #include <sys/gld.h>
240 /* Media must correspond to #defines in gld.h */
259 /* Must correspond to #defines in gld.h */
384 #define UPRI(gld, band) ((band != 0) ? user_priority[(band)] : (gld)->gld_upri)
449 /* So this gld binary maybe can be forward compatible with future v2 drivers */
601 "gld-provider-styles", 0);
724 * Create style 2 node (gated by gld-provider-styles property).
741 * Create style 1 node (gated by gld-provider-styles property)
1427 gld_t *gld;
1468 gld = kmem_zalloc(sizeof (gld_t), KM_SLEEP);
1473 gld->gld_qptr = q;
1474 gld->gld_device = glddev;
1475 gld->gld_state = DL_UNATTACHED;
1485 gld->gld_minor = gld_findminor(glddev);
1486 if (gld->gld_minor == 0) {
1488 kmem_free(gld, sizeof (gld_t));
1494 cmn_err(CE_NOTE, "gld_open() gld ptr: %p minor: %d",
1495 (void *)gld, gld->gld_minor);
1499 gld->gld_style = DL_STYLE2;
1500 *dev = makedevice(getmajor(*dev), gld->gld_minor);
1501 WR(q)->q_ptr = q->q_ptr = (caddr_t)gld;
1502 gldinsque(gld, glddev->gld_str_prev);
1511 gld->gld_style = DL_STYLE1;
1531 gld->gld_mac_info = macinfo;
1534 gld->gld_send = macinfo->gldm_send_tagged;
1536 gld->gld_send = macinfo->gldm_send;
1539 gld->gld_state = DL_UNBOUND;
1544 kmem_free(gld, sizeof (gld_t));
1554 kmem_free(gld, sizeof (gld_t));
1559 gld->gld_vlan = vlan;
1561 gldinsque(gld, vlan->gldv_str_prev);
1562 *dev = makedevice(getmajor(*dev), gld->gld_minor);
1563 WR(q)->q_ptr = q->q_ptr = (caddr_t)gld;
1574 if (gld->gld_state == DL_UNATTACHED) {
1576 kmem_free(gld, sizeof (gld_t));
1596 gld_t *gld = (gld_t *)q->q_ptr;
1597 glddev_t *glddev = gld->gld_device;
1600 ASSERT(gld);
1605 (void *)q, (gld->gld_style & 0x1) + 1);
1612 if (gld->gld_mac_info != NULL) {
1614 GLDM_LOCK(gld->gld_mac_info, RW_WRITER);
1615 gld->gld_flags |= GLD_STR_CLOSING; /* no more rcv putnexts */
1616 GLDM_UNLOCK(gld->gld_mac_info);
1619 gld->gld_flags |= GLD_STR_CLOSING;
1630 ASSERT(gld->gld_wput_count == 0);
1631 gld->gld_wput_count = 0; /* just in case */
1633 if (gld->gld_state == DL_IDLE) {
1635 ASSERT(gld->gld_mac_info != NULL);
1639 if (gld->gld_state == DL_UNBOUND) {
1645 ASSERT(gld->gld_mac_info != NULL);
1658 gldremque(gld); /* remove from Style 2 list */
1661 kmem_free(gld, sizeof (gld_t));
1696 * general gld stream write put routine. Receives fastpath data from upper
1704 gld_t *gld = (gld_t *)(q->q_ptr);
1720 if ((gld->gld_flags & (GLD_RAW | GLD_FAST)) == 0 ||
1721 gld->gld_state != DL_IDLE) {
1743 if (gld->gld_in_wsrv)
1751 atomic_inc_32((uint32_t *)&gld->gld_wput_count);
1756 if (gld->gld_state != DL_IDLE || gld->gld_in_unbind) {
1758 atomic_dec_32((uint32_t *)&gld->gld_wput_count);
1766 upri = (gld->gld_flags & GLD_RAW) ? gld->gld_upri :
1767 UPRI(gld, mp->b_band);
1774 atomic_dec_32((uint32_t *)&gld->gld_wput_count);
1820 "gld: Unexpected packet type from queue: 0x%x",
1840 gld_t *gld = (gld_t *)q->q_ptr;
1852 ASSERT(!gld->gld_in_wsrv);
1854 gld->gld_xwait = B_FALSE; /* We are now going to process this Q */
1859 macinfo = gld->gld_mac_info;
1865 gld->gld_in_wsrv = B_TRUE;
1884 gld->gld_sched_ran = B_FALSE;
1891 upri = (gld->gld_flags & GLD_RAW) ? gld->gld_upri :
1892 UPRI(gld, mp->b_band);
1898 gld->gld_xwait = B_TRUE; /* want qenable */
1913 if (gld->gld_sched_ran) {
1921 gld->gld_in_wsrv = B_FALSE;
1950 gld->gld_in_wsrv = B_FALSE;
1972 gld->gld_in_wsrv = B_FALSE;
2042 gld_t *gld = (gld_t *)q->q_ptr;
2054 macinfo = gld->gld_mac_info;
2057 vlan = (gld_vlan_t *)gld->gld_vlan;
2095 if (gld->gld_flags & GLD_RAW) {
2182 rc = (*gld->gld_send)(macinfo, mp, vtag);
2241 gld_t *gld = (gld_t *)q->q_ptr;
2242 gld_mac_info_t *macinfo = gld->gld_mac_info;
2247 gld_vlan_t *vlan = (gld_vlan_t *)gld->gld_vlan;
2458 gld_t *gld;
2477 for (gld = vlan->gldv_str_next;
2478 gld != (gld_t *)&vlan->gldv_str_next;
2479 gld = gld->gld_next) {
2480 ASSERT(gld->gld_mac_info == macinfo);
2481 gld->gld_sched_ran = B_TRUE;
2483 if (gld->gld_xwait) {
2484 gld->gld_xwait = B_FALSE;
2485 qenable(WR(gld->gld_qptr));
2761 gld_t *gld;
2765 for (gld = vlan->gldv_str_next; gld != (gld_t *)&vlan->gldv_str_next;
2766 gld = gld->gld_next) {
2769 "QSTATE: %s", gld->gld_sap, (void *)gld->gld_qptr,
2770 gld->gld_state == DL_IDLE ? "IDLE" : "NOT IDLE");
2772 ASSERT(gld->gld_qptr != NULL);
2773 ASSERT(gld->gld_state == DL_IDLE ||
2774 gld->gld_state == DL_UNBOUND);
2775 ASSERT(gld->gld_vlan == vlan);
2777 if (gld->gld_state != DL_IDLE)
2779 if (gld->gld_flags & GLD_STR_CLOSING)
2788 gld->gld_sap,
2789 gld->gld_flags & GLD_PROM_PHYS ? "phys " : " ",
2790 gld->gld_flags & GLD_PROM_SAP ? "sap " : " ",
2791 gld->gld_flags & GLD_PROM_MULT ? "multi" : " ");
2798 if ((*acceptfunc)(gld, pktinfo)) {
2802 if (!(*cansend)(gld->gld_qptr)) {
2814 qenable(gld->gld_qptr);
2820 * gld if this is the first eligible stream.
2823 *fgldp = gld;
2842 gld_passon(gld, nmp, pktinfo, send);
2943 #define GLD_IS_PHYS(gld) \
2944 (((gld_vlan_t *)gld->gld_vlan)->gldv_id == VLAN_VID_NONE)
2961 * are presented in gld data structures.
2964 gld_accept(gld_t *gld, pktinfo_t *pktinfo)
2975 if ((!MATCH(gld, pktinfo) && !(gld->gld_flags & GLD_PROM_SAP) &&
2976 !(GLD_IS_PHYS(gld) && gld->gld_sap == ETHERTYPE_VLAN &&
2992 gld_mcmatch(gld, pktinfo))
2998 if (gld->gld_flags & GLD_PROM_PHYS)
3009 gld_mcmatch(gld_t *gld, pktinfo_t *pktinfo)
3020 if (gld->gld_flags & GLD_PROM_MULT)
3026 if (!gld->gld_mcast)
3032 return (gld_multicast(pktinfo->dhost, gld));
3040 gld_multicast(unsigned char *macaddr, gld_t *gld)
3044 ASSERT(GLDM_LOCK_HELD(gld->gld_mac_info));
3046 if (!gld->gld_mcast)
3049 for (i = 0; i < gld->gld_multicnt; i++) {
3050 if (gld->gld_mcast[i]) {
3051 ASSERT(gld->gld_mcast[i]->gldm_refcnt);
3052 if (mac_eq(gld->gld_mcast[i]->gldm_addr, macaddr,
3053 gld->gld_mac_info->gldm_addrlen))
3065 gld_paccept(gld_t *gld, pktinfo_t *pktinfo)
3075 return (gld->gld_flags & GLD_PROM_PHYS &&
3076 (MATCH(gld, pktinfo) || gld->gld_flags & GLD_PROM_SAP ||
3077 (GLD_IS_PHYS(gld) && gld->gld_sap == ETHERTYPE_VLAN &&
3083 gld_passon(gld_t *gld, mblk_t *mp, pktinfo_t *pktinfo,
3086 boolean_t is_phys = GLD_IS_PHYS(gld);
3093 cmn_err(CE_NOTE, "gld_passon(%p, %p, %p)", (void *)gld,
3099 (void *)gld->gld_qptr->q_next, (void *)mp, gld->gld_minor,
3100 gld->gld_sap);
3108 if (gld->gld_flags & GLD_RAW) {
3126 ((gld->gld_sap == ETHERTYPE_VLAN) ||
3127 (gld->gld_flags & GLD_PROM_SAP))) {
3132 if (gld->gld_ethertype)
3176 if (((gld->gld_flags & GLD_FAST) && !pktinfo->isMulticast &&
3177 !pktinfo->isBroadcast) || (gld->gld_flags & GLD_RAW)) {
3179 (*send)(gld->gld_qptr, mp);
3182 mp = gld_addudind(gld, mp, pktinfo, addtag);
3184 (*send)(gld->gld_qptr, mp);
3190 * gld_addudind(gld, mp, pktinfo)
3194 gld_addudind(gld_t *gld, mblk_t *mp, pktinfo_t *pktinfo, boolean_t tagged)
3196 gld_mac_info_t *macinfo = gld->gld_mac_info;
3197 gld_vlan_t *vlan = (gld_vlan_t *)gld->gld_vlan;
3205 cmn_err(CE_NOTE, "gld_addudind(%p, %p, %p)", (void *)gld,
3232 type = (gld->gld_ethertype) ? pktinfo->ethertype : 0;
3372 gld_t *gld;
3379 gld = (gld_t *)q->q_ptr;
3383 gld->gld_flags |= GLD_RAW;
3398 gld_fastpath(gld, q, mp);
3404 if ((macinfo = gld->gld_mac_info) == NULL) {
3419 macinfo = gld->gld_mac_info;
3443 gld_fastpath(gld_t *gld, queue_t *q, mblk_t *mp)
3453 if (gld->gld_state != DL_IDLE) {
3458 macinfo = gld->gld_mac_info;
3487 gld->gld_flags |= GLD_FAST;
3494 if ((nmp = (*ifp->mkfastpath)(gld, mp)) == NULL) {
3519 gld_t *gld = (gld_t *)(q->q_ptr);
3570 if (gld->gld_style == DL_STYLE2)
3579 if (gld->gld_style == DL_STYLE2)
3664 gld_t *gld = (gld_t *)q->q_ptr;
3667 if (gld->gld_state == DL_UNATTACHED)
3679 gld_t *gld = (gld_t *)q->q_ptr;
3680 gld_mac_info_t *macinfo = gld->gld_mac_info;
3821 gld_t *gld;
3836 for (gld = vlan->gldv_str_next;
3837 gld != (gld_t *)&vlan->gldv_str_next;
3838 gld = gld->gld_next) {
3839 ASSERT(gld->gld_qptr != NULL);
3840 ASSERT(gld->gld_state == DL_IDLE ||
3841 gld->gld_state == DL_UNBOUND);
3842 ASSERT(gld->gld_mac_info == macinfo);
3844 if (gld->gld_flags & GLD_STR_CLOSING)
3846 if (!(notification & gld->gld_notifications))
3855 qreply(WR(gld->gld_qptr), nmp);
3988 gld_t *gld = (gld_t *)q->q_ptr;
3994 ASSERT(gld != NULL);
3995 ASSERT(gld->gld_qptr == RD(q));
4005 if (gld->gld_state == DL_UNATTACHED) {
4009 gld->gld_state);
4017 macinfo = gld->gld_mac_info;
4020 gld->gld_notifications = dlnrp->dl_notifications & pvt->notifications;
4040 gld_notify_ind(macinfo, gld->gld_notifications, q);
4092 gld_t *gld = (gld_t *)q->q_ptr;
4097 ASSERT(gld);
4098 ASSERT(gld->gld_qptr == RD(q));
4105 if (gld->gld_state != DL_IDLE) {
4109 gld->gld_state);
4137 gld->gld_upri = selp->dl_priority;
4146 gld_t *gld = (gld_t *)q->q_ptr;
4147 gld_mac_info_t *macinfo = gld->gld_mac_info;
4160 dlp->dl_sap = gld->gld_sap;
4169 *(ushort_t *)sapp = gld->gld_sap;
4183 gld_t *gld = (gld_t *)q->q_ptr;
4184 gld_mac_info_t *macinfo = gld->gld_mac_info;
4186 ASSERT(gld);
4187 ASSERT(gld->gld_qptr == RD(q));
4202 if (gld->gld_state != DL_UNBOUND) {
4206 gld->gld_state);
4233 gld->gld_ethertype = (sap > ETHERMTU);
4236 gld->gld_ethertype = (sap > GLD_MAX_802_SAP);
4242 gld->gld_state = DL_IDLE; /* bound and ready */
4243 gld->gld_sap = sap;
4245 ((gld_vlan_t *)gld->gld_vlan)->gldv_nvlan_sap++;
4246 gld_set_ipq(gld);
4250 cmn_err(CE_NOTE, "gld_bind: ok - sap = %d", gld->gld_sap);
4272 gld_t *gld = (gld_t *)q->q_ptr;
4273 gld_mac_info_t *macinfo = gld->gld_mac_info;
4275 ASSERT(gld);
4282 if (gld->gld_state != DL_IDLE) {
4286 gld->gld_state);
4296 gld->gld_in_unbind = B_TRUE; /* disallow wput=>start */
4298 if (gld->gld_wput_count != 0) {
4299 gld->gld_in_unbind = B_FALSE;
4312 (gld->gld_sap == ETHERTYPE_VLAN)) {
4313 ((gld_vlan_t *)gld->gld_vlan)->gldv_nvlan_sap--;
4315 gld->gld_state = DL_UNBOUND;
4316 gld->gld_sap = 0;
4317 gld_set_ipq(gld);
4321 gld->gld_in_unbind = B_FALSE;
4337 gld_t *gld;
4356 gld = (gld_t *)q->q_ptr;
4357 ASSERT(gld);
4358 glddev = gld->gld_device;
4361 if (gld->gld_state == DL_IDLE || gld->gld_state == DL_UNBOUND) {
4362 macinfo = gld->gld_mac_info;
4385 if (((gld_vlan_t *)gld->gld_vlan) != NULL) {
4402 dlp->dl_current_state = gld->gld_state;
4403 dlp->dl_provider_style = gld->gld_style;
4418 selp->dl_priority = gld->gld_upri;
4426 if (gld->gld_state == DL_IDLE || gld->gld_state == DL_UNBOUND) {
4433 if (gld->gld_state == DL_IDLE) {
4445 gld->gld_ethertype)
4455 *(ushort_t *)sapp = gld->gld_sap;
4495 gld_t *gld = (gld_t *)q->q_ptr;
4497 gld_mac_info_t *macinfo = gld->gld_mac_info;
4513 if (gld->gld_state != DL_IDLE) {
4517 gld->gld_state);
4558 if ((nmp = (*ifp->mkunitdata)(gld, mp)) == NULL) {
4591 gld_t *gld = (gld_t *)q->q_ptr;
4600 if (gld->gld_state != DL_UNATTACHED)
4603 ASSERT(!gld->gld_mac_info);
4610 glddev = gld->gld_device;
4642 gldremque(gld);
4650 gld->gld_mac_info = macinfo;
4653 gld->gld_send = macinfo->gldm_send_tagged;
4655 gld->gld_send = macinfo->gldm_send;
4659 gldinsque(gld, glddev->gld_str_prev);
4670 gldinsque(gld, glddev->gld_str_prev);
4679 gld->gld_vlan = vlan;
4681 gldinsque(gld, vlan->gldv_str_prev);
4682 gld->gld_state = DL_UNBOUND;
4707 gld_t *gld = (gld_t *)q->q_ptr;
4708 glddev_t *glddev = gld->gld_device;
4709 gld_mac_info_t *macinfo = gld->gld_mac_info;
4710 int state = gld->gld_state;
4722 ASSERT(gld->gld_sap == 0);
4734 if (gld->gld_mcast) {
4735 for (i = 0; i < gld->gld_multicnt; i++) {
4738 if ((mcast = gld->gld_mcast[i]) != NULL) {
4743 kmem_free(gld->gld_mcast,
4744 sizeof (gld_mcast_t *) * gld->gld_multicnt);
4745 gld->gld_mcast = NULL;
4746 gld->gld_multicnt = 0;
4750 phys_off = (gld->gld_flags & GLD_PROM_PHYS &&
4752 mult_off = (gld->gld_flags & GLD_PROM_MULT &&
4766 vlan = (gld_vlan_t *)gld->gld_vlan;
4767 if (gld->gld_flags & GLD_PROM_PHYS)
4769 if (gld->gld_flags & GLD_PROM_MULT)
4771 if (gld->gld_flags & GLD_PROM_SAP) {
4776 gld->gld_flags &= ~(GLD_PROM_PHYS | GLD_PROM_SAP | GLD_PROM_MULT);
4791 gldremque(gld);
4795 gld->gld_vlan = NULL;
4798 gld->gld_mac_info = NULL;
4799 gld->gld_state = DL_UNATTACHED;
4807 /* make sure no references to this gld for gld_v0_sched */
4808 if (mac_pvt->last_sched == gld)
4814 gldinsque(gld, glddev->gld_str_prev);
4822 if (gld->gld_style == DL_STYLE2)
4835 gld_t *gld = (gld_t *)q->q_ptr;
4837 gld_mac_info_t *macinfo = gld->gld_mac_info;
4851 if (gld->gld_state == DL_UNATTACHED)
4870 ASSERT(glddev == gld->gld_device);
4885 if (gld->gld_mcast == NULL) {
4887 gld->gld_mcast = GLD_GETSTRUCT(gld_mcast_t *,
4889 if (gld->gld_mcast == NULL) {
4894 gld->gld_multicnt = glddev->gld_multisize;
4896 for (i = 0; i < gld->gld_multicnt; i++) {
4897 if (gld->gld_mcast[i] &&
4898 mac_eq(gld->gld_mcast[i]->gldm_addr,
4901 ASSERT(gld->gld_mcast[i]->gldm_refcnt);
4949 for (i = 0; i < gld->gld_multicnt; i++) {
4950 if (gld->gld_mcast[i] != NULL)
4979 gld->gld_xwait = B_TRUE;
4989 gld->gld_mcast[i] = mcast;
5010 gld_t *gld;
5024 gld = (gld_t *)q->q_ptr;
5025 if (gld->gld_state == DL_UNATTACHED)
5028 macinfo = gld->gld_mac_info;
5045 if (gld->gld_mcast != NULL) {
5046 for (i = 0; i < gld->gld_multicnt; i++)
5047 if (((mcast = gld->gld_mcast[i]) != NULL) &&
5052 gld->gld_mcast[i] = NULL;
5103 gld_t *gld;
5122 gld = (gld_t *)q->q_ptr;
5123 if (gld->gld_state == DL_UNATTACHED)
5126 macinfo = gld->gld_mac_info;
5130 vlan = (gld_vlan_t *)gld->gld_vlan;
5166 if (!(gld->gld_flags & GLD_PROM_PHYS))
5176 if (!(gld->gld_flags & GLD_PROM_MULT))
5184 if (!(gld->gld_flags & GLD_PROM_SAP))
5216 gld->gld_flags |= GLD_PROM_PHYS;
5222 gld->gld_flags |= GLD_PROM_MULT;
5226 gld->gld_flags |= GLD_PROM_SAP;
5239 gld->gld_flags &= ~GLD_PROM_PHYS;
5245 gld->gld_flags &= ~GLD_PROM_MULT;
5249 gld->gld_flags &= ~GLD_PROM_SAP;
5264 gld->gld_xwait = B_TRUE;
5324 gld_t *gld = (gld_t *)q->q_ptr;
5329 if (gld->gld_state == DL_UNATTACHED)
5332 macinfo = (gld_mac_info_t *)gld->gld_mac_info;
5363 gld_t *gld = (gld_t *)q->q_ptr;
5372 if (gld->gld_state == DL_UNATTACHED)
5375 vlan = (gld_vlan_t *)gld->gld_vlan;
5381 macinfo = (gld_mac_info_t *)gld->gld_mac_info;
5429 gld_t *gld = (gld_t *)q->q_ptr;
5430 gld_mac_info_t *macinfo = gld->gld_mac_info;
5433 if (gld->gld_state == DL_UNATTACHED)
5527 gld_set_ipq(gld_t *gld)
5530 gld_mac_info_t *macinfo = gld->gld_mac_info;
5544 vlan = (gld_vlan_t *)gld->gld_vlan;
5552 for (gld = vlan->gldv_str_next;
5553 gld != (gld_t *)&vlan->gldv_str_next; gld = gld->gld_next) {
5554 if (gld->gld_state != DL_IDLE)
5556 if (gld->gld_flags & GLD_STR_CLOSING)
5559 if (gld->gld_sap == ETHERTYPE_IP) {
5560 ip_gld = gld;
5564 if (gld->gld_sap == ETHERTYPE_IPV6) {
5565 ipv6_gld = gld;