Lines Matching defs:macinfo

74  * GLDM_LOCK_HELD_WRITE(macinfo).
215 #define VLAN_CAPABLE(macinfo) \
216 ((macinfo)->gldm_type == DL_ETHER && \
217 (macinfo)->gldm_send_tagged != NULL)
456 gld_mac_info_t *macinfo;
458 macinfo = kmem_zalloc(sizeof (gld_mac_info_t) + GLD_MAC_RESERVED,
465 macinfo->gldm_driver_version = GLD_VERSION_200;
471 macinfo->gldm_GLD_version = GLD_VERSION;
473 return (macinfo);
485 gld_mac_free(gld_mac_info_t *macinfo)
487 ASSERT(macinfo);
488 ASSERT(macinfo->gldm_GLD_version == GLD_VERSION);
494 ASSERT(!GLDM_LOCK_INITED(macinfo) ||
495 (macinfo->gldm_GLD_flags & GLD_UNREGISTERED));
497 GLDM_LOCK_DESTROY(macinfo);
499 kmem_free(macinfo, sizeof (gld_mac_info_t) + GLD_MAC_RESERVED);
507 * devinfo pointer, the device name, and a macinfo structure describing the
511 gld_register(dev_info_t *devinfo, char *devname, gld_mac_info_t *macinfo)
522 ASSERT(macinfo != NULL);
524 if (macinfo->gldm_driver_version != GLD_VERSION)
527 mediatype = macinfo->gldm_type;
535 ASSERT(macinfo->gldm_reset != NULL);
536 ASSERT(macinfo->gldm_start != NULL);
537 ASSERT(macinfo->gldm_stop != NULL);
538 ASSERT(macinfo->gldm_set_mac_addr != NULL);
539 ASSERT(macinfo->gldm_set_promiscuous != NULL);
540 ASSERT(macinfo->gldm_send != NULL);
542 ASSERT(macinfo->gldm_maxpkt >= macinfo->gldm_minpkt);
543 ASSERT(macinfo->gldm_GLD_version == GLD_VERSION);
544 ASSERT(macinfo->gldm_broadcast_addr != NULL);
545 ASSERT(macinfo->gldm_vendor_addr != NULL);
546 ASSERT(macinfo->gldm_ident != NULL);
548 if (macinfo->gldm_addrlen > GLD_MAX_ADDRLEN) {
550 "ported", devname, macinfo->gldm_addrlen, GLD_MAX_ADDRLEN);
557 if (macinfo->gldm_saplen != -2) {
559 "not supported", devname, macinfo->gldm_saplen);
565 macinfo->gldm_options |= GLDOPT_FAST_RECV;
604 glddev->gld_type = macinfo->gldm_type;
605 glddev->gld_minsdu = macinfo->gldm_minpkt;
606 glddev->gld_saplen = macinfo->gldm_saplen;
607 glddev->gld_addrlen = macinfo->gldm_addrlen;
608 glddev->gld_broadcast = kmem_zalloc(macinfo->gldm_addrlen,
610 bcopy(macinfo->gldm_broadcast_addr,
611 glddev->gld_broadcast, macinfo->gldm_addrlen);
612 glddev->gld_maxsdu = macinfo->gldm_maxpkt;
632 macinfo->gldm_mac_pvt = kmem_zalloc(sizeof (gld_mac_pvt_t),
634 ((gld_mac_pvt_t *)macinfo->gldm_mac_pvt)->interfacep = ifp =
648 if (macinfo->gldm_maxpkt > ifp->mtu_size) {
657 if (VLAN_CAPABLE(macinfo) && (macinfo->gldm_margin == 0))
658 macinfo->gldm_margin = VTAG_SIZE;
664 if (macinfo->gldm_mdt_pre != NULL) {
674 if ((macinfo->gldm_mdt_send == NULL) ||
675 (macinfo->gldm_mdt_post == NULL)) {
680 macinfo->gldm_options |= GLDOPT_MDT;
683 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
686 mac_pvt->curr_macaddr = kmem_zalloc(macinfo->gldm_addrlen, KM_SLEEP);
693 bcopy(macinfo->gldm_vendor_addr, mac_pvt->curr_macaddr,
694 macinfo->gldm_addrlen);
703 if (macinfo->gldm_capabilities & GLD_CAP_LINKSTATE)
707 GLDM_LOCK_INIT(macinfo);
709 ddi_set_driver_private(devinfo, macinfo);
717 if (macinfo->gldm_ppa != ddi_get_instance(devinfo))
720 macinfo->gldm_ppa);
745 macinfo->gldm_ppa);
747 GLD_STYLE1_PPA_TO_MINOR(macinfo->gldm_ppa), DDI_NT_NET,
755 gldinsque(macinfo, glddev->gld_mac_prev);
770 if (gld_initstats(macinfo) != GLD_SUCCESS) {
772 gldremque(macinfo);
783 GLDM_LOCK(macinfo, RW_WRITER);
784 macinfo->gldm_GLD_flags |= GLD_MAC_READY;
785 GLDM_UNLOCK(macinfo);
788 if (macinfo->gldm_addrlen == sizeof (struct ether_addr))
790 (struct ether_addr *)macinfo->gldm_vendor_addr, NULL);
795 macinfo->gldm_ppa, macinfo->gldm_ident,
797 gld_macaddr_sprintf(pbuf, macinfo->gldm_vendor_addr,
798 macinfo->gldm_addrlen));
805 GLDM_LOCK_DESTROY(macinfo);
807 kmem_free(mac_pvt->curr_macaddr, macinfo->gldm_addrlen);
810 kmem_free(macinfo->gldm_mac_pvt, sizeof (gld_mac_pvt_t));
811 macinfo->gldm_mac_pvt = NULL;
851 * gld_unregister (macinfo)
852 * remove the macinfo structure from local structures
856 gld_unregister(gld_mac_info_t *macinfo)
858 gld_mac_pvt_t *mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
864 GLDM_LOCK(macinfo, RW_WRITER);
867 GLDM_UNLOCK(macinfo);
887 gldremque(macinfo);
890 macinfo->gldm_GLD_flags |= GLD_UNREGISTERED;
892 GLDM_UNLOCK(macinfo);
895 ifp = ((gld_mac_pvt_t *)macinfo->gldm_mac_pvt)->interfacep;
896 (*ifp->uninit)(macinfo);
901 ASSERT(GLDM_LOCK_INITED(macinfo));
902 kmem_free(mac_pvt->curr_macaddr, macinfo->gldm_addrlen);
907 kmem_free(macinfo->gldm_mac_pvt, sizeof (gld_mac_pvt_t));
908 macinfo->gldm_mac_pvt = (caddr_t)NULL;
930 ddi_remove_minor_node(macinfo->gldm_devinfo, NULL);
947 gld_initstats(gld_mac_info_t *macinfo)
949 gld_mac_pvt_t *mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
957 if ((ksp = kstat_create(glddev->gld_name, macinfo->gldm_ppa,
962 glddev->gld_name, macinfo->gldm_ppa);
968 ksp->ks_private = (void *)macinfo;
1004 ifp = ((gld_mac_pvt_t *)macinfo->gldm_mac_pvt)->interfacep;
1006 (*ifp->init)(macinfo);
1017 gld_mac_info_t *macinfo;
1025 macinfo = (gld_mac_info_t *)ksp->ks_private;
1026 ASSERT(macinfo != NULL);
1028 GLDM_LOCK(macinfo, RW_WRITER);
1030 if (!(macinfo->gldm_GLD_flags & GLD_MAC_READY)) {
1031 GLDM_UNLOCK(macinfo);
1035 if (macinfo->gldm_GLD_flags & GLD_UNREGISTERED) {
1036 GLDM_UNLOCK(macinfo);
1040 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
1045 if (macinfo->gldm_get_stats)
1046 (void) (*macinfo->gldm_get_stats)(macinfo, stats);
1090 switch (macinfo->gldm_type) {
1157 GLDM_UNLOCK(macinfo);
1162 gld_sr_dump(macinfo);
1239 gld_mac_info_t *macinfo;
1251 macinfo = vlan->gldv_mac;
1252 GLDM_LOCK(macinfo, RW_WRITER);
1254 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
1288 GLDM_UNLOCK(macinfo);
1429 gld_mac_info_t *macinfo;
1516 for (macinfo = glddev->gld_mac_next;
1517 macinfo != (gld_mac_info_t *)(&glddev->gld_mac_next);
1518 macinfo = macinfo->gldm_next) {
1519 ASSERT(macinfo != NULL);
1520 if (macinfo->gldm_ppa != ppa)
1523 if (!(macinfo->gldm_GLD_flags & GLD_MAC_READY))
1529 GLDM_LOCK(macinfo, RW_WRITER);
1531 gld->gld_mac_info = macinfo;
1533 if (macinfo->gldm_send_tagged != NULL)
1534 gld->gld_send = macinfo->gldm_send_tagged;
1536 gld->gld_send = macinfo->gldm_send;
1541 if ((vlan = gld_get_vlan(macinfo, VLAN_VID_NONE)) == NULL) {
1542 GLDM_UNLOCK(macinfo);
1548 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
1550 if (gld_start_mac(macinfo) != GLD_SUCCESS) {
1552 GLDM_UNLOCK(macinfo);
1565 GLDM_UNLOCK(macinfo);
1609 /* Hold all device streams lists still while we check for a macinfo */
1613 /* If there's a macinfo, block recv while we change state */
1841 gld_mac_info_t *macinfo;
1859 macinfo = gld->gld_mac_info;
1878 if (macinfo == NULL) {
1931 if (macinfo == NULL) {
1936 if (macinfo->gldm_mctl != NULL) {
1937 GLDM_LOCK(macinfo, RW_WRITER);
1938 (void) (*macinfo->gldm_mctl) (macinfo, q, mp);
1939 GLDM_UNLOCK(macinfo);
2001 * detach/unregister could be called, and the macinfo could go away entirely.
2043 gld_mac_info_t *macinfo;
2054 macinfo = gld->gld_mac_info;
2055 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
2065 * access VLAN 0's kstats from macinfo.
2074 if ((*ifp->interpreter)(macinfo, mp, &pktinfo, GLD_TX) != 0) {
2120 tmp_vlan = gld_find_vlan(macinfo, raw_vid);
2134 ((macinfo->gldm_type == DL_ETHER) && (upri != 0))) {
2159 if (macinfo->gldm_capabilities & GLD_CAP_ZEROCOPY)
2168 macinfo->gldm_maxpkt) {
2177 macinfo->gldm_maxpkt);
2182 rc = (*gld->gld_send)(macinfo, mp, vtag);
2214 GLDM_LOCK(macinfo, RW_WRITER);
2215 gld_precv(macinfo, nmp, vtag, stats);
2216 GLDM_UNLOCK(macinfo);
2242 gld_mac_info_t *macinfo = gld->gld_mac_info;
2243 gld_mac_pvt_t *mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
2310 (void) (*ifp->interpreter_mdt)(macinfo, mp, NULL, &pktinfo,
2313 numpacks = (*macinfo->gldm_mdt_pre)(macinfo, mp, &cookie);
2330 (void) (*ifp->interpreter_mdt)(macinfo, NULL,
2341 GLDM_LOCK(macinfo, RW_WRITER);
2342 gld_precv_mdt(macinfo, vlan, mp,
2344 GLDM_UNLOCK(macinfo);
2350 (*macinfo->gldm_mdt_send)(macinfo, cookie,
2363 (*macinfo->gldm_mdt_post)(macinfo, mp, cookie);
2407 (void) (*ifp->interpreter_mdt)(macinfo, NULL,
2434 * gld_intr (macinfo)
2437 gld_intr(gld_mac_info_t *macinfo)
2439 ASSERT(macinfo != NULL);
2441 if (!(macinfo->gldm_GLD_flags & GLD_MAC_READY))
2444 return ((*macinfo->gldm_intr)(macinfo));
2448 * gld_sched (macinfo)
2450 * This routine scans the streams that refer to a specific macinfo
2455 gld_sched(gld_mac_info_t *macinfo)
2462 ASSERT(macinfo != NULL);
2464 GLDM_LOCK(macinfo, RW_WRITER);
2466 if (macinfo->gldm_GLD_flags & GLD_UNREGISTERED) {
2468 GLDM_UNLOCK(macinfo);
2472 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
2480 ASSERT(gld->gld_mac_info == macinfo);
2491 GLDM_UNLOCK(macinfo);
2495 * gld_precv (macinfo, mp, vtag, stats)
2502 gld_precv(gld_mac_info_t *macinfo, mblk_t *mp, uint32_t vtag,
2509 ASSERT(GLDM_LOCK_HELD_WRITE(macinfo));
2511 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
2517 if ((*ifp->interpreter)(macinfo, mp, &pktinfo, GLD_RXLOOP) != 0) {
2536 gld_sendup(macinfo, &pktinfo, mp, gld_paccept);
2546 gld_precv_mdt(gld_mac_info_t *macinfo, gld_vlan_t *vlan, mblk_t *mp,
2550 gld_mac_pvt_t *mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
2553 ASSERT(GLDM_LOCK_HELD_WRITE(macinfo));
2558 (void) (*ifp->interpreter_mdt)(macinfo, mp, NULL, pktinfo,
2561 gld_sendup(macinfo, pktinfo, adjmp, gld_paccept);
2565 * gld_recv (macinfo, mp)
2572 gld_recv(gld_mac_info_t *macinfo, mblk_t *mp)
2574 gld_recv_tagged(macinfo, mp, VLAN_VTAG_NONE);
2578 gld_recv_tagged(gld_mac_info_t *macinfo, mblk_t *mp, uint32_t vtag)
2590 ASSERT(macinfo != NULL);
2593 GLDM_LOCK(macinfo, RW_READER);
2595 if (macinfo->gldm_GLD_flags & GLD_UNREGISTERED) {
2604 * kstats from macinfo.
2610 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
2614 vlan0 = gld_find_vlan(macinfo, VLAN_VID_NONE);
2625 vlann = gld_find_vlan(macinfo, vid);
2633 err = (*ifp->interpreter)(macinfo, mp, &pktinfo, GLD_RXQUICK);
2691 if ((*ifp->interpreter)(macinfo, mp, &pktinfo, GLD_RX) != 0) {
2722 macinfo->gldm_addrlen), gld_macaddr_sprintf(pbuf2,
2723 pktinfo.dhost, macinfo->gldm_addrlen));
2737 gld_sendup(macinfo, &pktinfo, mp, gld_accept);
2740 GLDM_UNLOCK(macinfo);
2849 * gld_sendup (macinfo, pktinfo, mp, acceptfunc)
2854 gld_sendup(gld_mac_info_t *macinfo, pktinfo_t *pktinfo,
2867 (void *)macinfo);
2871 ASSERT(macinfo != NULL);
2873 ASSERT(GLDM_LOCK_HELD(macinfo));
2882 stats0 = ((gld_mac_pvt_t *)macinfo->gldm_mac_pvt)->statistics;
2883 vlan0 = gld_find_vlan(macinfo, VLAN_VID_NONE);
2887 vlann = gld_find_vlan(macinfo, pktinfo->vid);
2902 if (macinfo->gldm_options & GLDOPT_FAST_RECV) {
2969 * macinfo->gldm_lock is held.
3068 * Note that it is okay to examine gld_vlan because macinfo->gldm_lock
3196 gld_mac_info_t *macinfo = gld->gld_mac_info;
3208 ASSERT(macinfo != NULL);
3215 2 * (macinfo->gldm_addrlen + abs(macinfo->gldm_saplen));
3243 dludindp->dl_dest_addr_length = macinfo->gldm_addrlen +
3244 abs(macinfo->gldm_saplen);
3254 mac_copy(pktinfo->dhost, nmp->b_wptr, macinfo->gldm_addrlen);
3255 nmp->b_wptr += macinfo->gldm_addrlen;
3257 ASSERT(macinfo->gldm_saplen == -2); /* XXX following code assumes */
3259 nmp->b_wptr += abs(macinfo->gldm_saplen);
3263 mac_copy(pktinfo->shost, nmp->b_wptr, macinfo->gldm_addrlen);
3264 nmp->b_wptr += macinfo->gldm_addrlen;
3267 nmp->b_wptr += abs(macinfo->gldm_saplen);
3283 * Elements of the per-instance macinfo and per-stream gld_t structures
3286 * macinfo structure for purposes of this discussion).
3290 * Elements of the macinfo structure that are set before the macinfo
3296 * Most other elements of the macinfo structure may only be read or
3306 * presently attached to a PPA, there is no associated macinfo,
3326 * The list of streams associated with a macinfo is protected by
3327 * two locks: the per-macinfo maclock, and the per-major-device
3331 * path (using macinfo), while facilitating routines that must search
3334 * macinfo element, and the gld_mac_info gld_t element, are similarly
3335 * protected, since they change at exactly the same time macinfo
3338 * The list of macinfo structures associated with a major device
3349 * GLDM_LOCK(macinfo)
3373 gld_mac_info_t *macinfo;
3404 if ((macinfo = gld->gld_mac_info) == NULL) {
3414 *((uint32_t *)mp->b_cont->b_rptr) = macinfo->gldm_margin;
3419 macinfo = gld->gld_mac_info;
3420 if (macinfo == NULL || macinfo->gldm_ioctl == NULL) {
3425 GLDM_LOCK(macinfo, RW_WRITER);
3426 (void) (*macinfo->gldm_ioctl) (macinfo, q, mp);
3427 GLDM_UNLOCK(macinfo);
3446 gld_mac_info_t *macinfo;
3458 macinfo = gld->gld_mac_info;
3459 ASSERT(macinfo != NULL);
3460 maclen = macinfo->gldm_addrlen + abs(macinfo->gldm_saplen);
3486 GLDM_LOCK(macinfo, RW_WRITER);
3488 GLDM_UNLOCK(macinfo);
3490 ifp = ((gld_mac_pvt_t *)macinfo->gldm_mac_pvt)->interfacep;
3680 gld_mac_info_t *macinfo = gld->gld_mac_info;
3687 ifp = ((gld_mac_pvt_t *)macinfo->gldm_mac_pvt)->interfacep;
3689 if (macinfo->gldm_capabilities & GLD_CAP_CKSUM_ANY)
3692 if (macinfo->gldm_capabilities & GLD_CAP_ZEROCOPY)
3695 if (macinfo->gldm_options & GLDOPT_MDT)
3709 if (macinfo->gldm_capabilities & GLD_CAP_CKSUM_ANY) {
3718 if (macinfo->gldm_capabilities & GLD_CAP_CKSUM_PARTIAL)
3720 if (macinfo->gldm_capabilities & GLD_CAP_CKSUM_FULL_V4)
3722 if (macinfo->gldm_capabilities & GLD_CAP_CKSUM_FULL_V6)
3724 if (macinfo->gldm_capabilities & GLD_CAP_CKSUM_IPHDR)
3731 if (macinfo->gldm_capabilities & GLD_CAP_ZEROCOPY) {
3743 if (macinfo->gldm_options & GLDOPT_MDT) {
3750 dlmp->mdt_max_pld = macinfo->gldm_mdt_segs;
3751 dlmp->mdt_span_limit = macinfo->gldm_mdt_sgl;
3817 gld_notify_qs(gld_mac_info_t *macinfo, mblk_t *mp, uint32_t notification)
3825 ASSERT(GLDM_LOCK_HELD_WRITE(macinfo));
3827 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
3830 * Search all the streams attached to this macinfo looking
3842 ASSERT(gld->gld_mac_info == macinfo);
3872 gld_notify_ind(gld_mac_info_t *macinfo, uint32_t notifications, queue_t *q)
3881 GLDM_LOCK(macinfo, RW_WRITER);
3888 if (!(macinfo->gldm_GLD_flags & GLD_MAC_READY)) {
3889 GLDM_UNLOCK(macinfo);
3893 if (macinfo->gldm_GLD_flags & GLD_UNREGISTERED) {
3894 GLDM_UNLOCK(macinfo);
3902 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
3904 if (macinfo->gldm_get_stats)
3905 (void) (*macinfo->gldm_get_stats)(macinfo, stats);
3914 size += macinfo->gldm_addrlen;
3935 if (macinfo->gldm_linkstate == GLD_LINKSTATE_DOWN)
3940 if (macinfo->gldm_linkstate == GLD_LINKSTATE_UP)
3959 dlnip->dl_addr_length = macinfo->gldm_addrlen +
3960 abs(macinfo->gldm_saplen);
3961 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
3964 macinfo->gldm_addrlen);
3976 gld_notify_qs(macinfo, mp, bit);
3979 GLDM_UNLOCK(macinfo);
3989 gld_mac_info_t *macinfo;
4017 macinfo = gld->gld_mac_info;
4018 pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
4040 gld_notify_ind(macinfo, gld->gld_notifications, q);
4053 gld_linkstate(gld_mac_info_t *macinfo, int32_t newstate)
4074 GLDM_LOCK(macinfo, RW_WRITER);
4075 if (macinfo->gldm_linkstate == newstate)
4078 macinfo->gldm_linkstate = newstate;
4079 GLDM_UNLOCK(macinfo);
4082 gld_notify_ind(macinfo, notification, NULL);
4147 gld_mac_info_t *macinfo = gld->gld_mac_info;
4148 gld_mac_pvt_t *mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
4154 addrlen = macinfo->gldm_addrlen + abs(macinfo->gldm_saplen);
4167 macinfo->gldm_addrlen);
4168 sapp = mp->b_rptr + dlp->dl_addr_offset + macinfo->gldm_addrlen;
4184 gld_mac_info_t *macinfo = gld->gld_mac_info;
4210 ASSERT(macinfo);
4231 switch (macinfo->gldm_type) {
4241 GLDM_LOCK(macinfo, RW_WRITER);
4244 if ((macinfo->gldm_type == DL_ETHER) && (sap == ETHERTYPE_VLAN))
4255 GLDM_UNLOCK(macinfo);
4273 gld_mac_info_t *macinfo = gld->gld_mac_info;
4290 ASSERT(macinfo);
4310 GLDM_LOCK(macinfo, RW_WRITER);
4311 if ((macinfo->gldm_type == DL_ETHER) &&
4318 GLDM_UNLOCK(macinfo);
4341 gld_mac_info_t *macinfo;
4362 macinfo = gld->gld_mac_info;
4363 ASSERT(macinfo != NULL);
4365 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
4367 addr_length = macinfo->gldm_addrlen;
4368 sap_length = macinfo->gldm_saplen;
4369 brdcst_length = macinfo->gldm_addrlen;
4427 dlp->dl_min_sdu = macinfo->gldm_minpkt;
4428 dlp->dl_max_sdu = macinfo->gldm_maxpkt;
4429 dlp->dl_mac_type = macinfo->gldm_type;
4443 if ((macinfo->gldm_type == DL_TPR ||
4444 macinfo->gldm_type == DL_FDDI) &&
4452 addr_offset, macinfo->gldm_addrlen);
4454 macinfo->gldm_addrlen;
4461 dlp->dl_brdcst_addr_length = macinfo->gldm_addrlen;
4463 mac_copy((caddr_t)macinfo->gldm_broadcast_addr,
4497 gld_mac_info_t *macinfo = gld->gld_mac_info;
4523 ASSERT(macinfo != NULL);
4527 macinfo->gldm_addrlen + abs(macinfo->gldm_saplen)) {
4536 if (msglen == 0 || msglen > macinfo->gldm_maxpkt) {
4549 ifp = ((gld_mac_pvt_t *)macinfo->gldm_mac_pvt)->interfacep;
4590 gld_mac_info_t *macinfo;
4612 for (macinfo = glddev->gld_mac_next;
4613 macinfo != (gld_mac_info_t *)&glddev->gld_mac_next;
4614 macinfo = macinfo->gldm_next) {
4617 ASSERT(macinfo != NULL);
4618 if (macinfo->gldm_ppa != ppa)
4621 if (!(macinfo->gldm_GLD_flags & GLD_MAC_READY))
4627 if (vid != VLAN_VID_NONE && !VLAN_CAPABLE(macinfo)) {
4635 inst = ddi_get_instance(macinfo->gldm_devinfo);
4648 GLDM_LOCK(macinfo, RW_WRITER);
4650 gld->gld_mac_info = macinfo;
4652 if (macinfo->gldm_send_tagged != NULL)
4653 gld->gld_send = macinfo->gldm_send_tagged;
4655 gld->gld_send = macinfo->gldm_send;
4657 if ((vlan = gld_get_vlan(macinfo, vid)) == NULL) {
4658 GLDM_UNLOCK(macinfo);
4665 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
4667 if (gld_start_mac(macinfo) != GLD_SUCCESS) {
4669 GLDM_UNLOCK(macinfo);
4683 GLDM_UNLOCK(macinfo);
4688 (void *)q, (void *)mp, macinfo->gldm_ppa);
4709 gld_mac_info_t *macinfo = gld->gld_mac_info;
4721 ASSERT(macinfo != NULL);
4723 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
4728 (void *)q, (void *)mp, macinfo->gldm_ppa);
4732 GLDM_LOCK(macinfo, RW_WRITER);
4740 gld_send_disable_multi(macinfo, mcast);
4764 (void) (*macinfo->gldm_set_promiscuous)(macinfo, op);
4778 GLDM_UNLOCK(macinfo);
4781 gld_notify_ind(macinfo, DL_NOTE_PROMISC_OFF_PHYS, NULL);
4788 GLDM_LOCK(macinfo, RW_WRITER);
4803 gld_stop_mac(macinfo);
4804 macinfo->gldm_GLD_flags &= ~GLD_INTR_WAIT;
4811 GLDM_UNLOCK(macinfo);
4837 gld_mac_info_t *macinfo = gld->gld_mac_info;
4854 ASSERT(macinfo != NULL);
4855 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
4857 if (macinfo->gldm_set_multicast == NULL) {
4864 multi->dl_addr_length != macinfo->gldm_addrlen)
4882 GLDM_LOCK(macinfo, RW_WRITER);
4890 GLDM_UNLOCK(macinfo);
4899 maddr, macinfo->gldm_addrlen)) {
4902 GLDM_UNLOCK(macinfo);
4917 GLDM_UNLOCK(macinfo);
4925 maddr, macinfo->gldm_addrlen)) {
4937 macinfo->gldm_addrlen);
4944 GLDM_UNLOCK(macinfo);
4957 ASSERT(sizeof (cmaddr) >= macinfo->gldm_addrlen);
4959 macinfo->gldm_addrlen, macinfo);
4961 rc = (*macinfo->gldm_set_multicast)
4962 (macinfo, cmaddr, GLD_MULTI_ENABLE);
4964 GLDM_UNLOCK(macinfo);
4967 GLDM_UNLOCK(macinfo);
4970 GLDM_UNLOCK(macinfo);
4980 GLDM_UNLOCK(macinfo);
4983 GLDM_UNLOCK(macinfo);
4991 GLDM_UNLOCK(macinfo);
4997 GLDM_UNLOCK(macinfo);
5011 gld_mac_info_t *macinfo;
5028 macinfo = gld->gld_mac_info;
5029 ASSERT(macinfo != NULL);
5030 if (macinfo->gldm_set_multicast == NULL) {
5037 multi->dl_addr_length != macinfo->gldm_addrlen)
5044 GLDM_LOCK(macinfo, RW_WRITER);
5049 maddr, macinfo->gldm_addrlen)) {
5051 gld_send_disable_multi(macinfo, mcast);
5053 GLDM_UNLOCK(macinfo);
5058 GLDM_UNLOCK(macinfo);
5063 * gld_send_disable_multi(macinfo, mcast)
5069 gld_send_disable_multi(gld_mac_info_t *macinfo, gld_mcast_t *mcast)
5071 ASSERT(macinfo != NULL);
5072 ASSERT(GLDM_LOCK_HELD_WRITE(macinfo));
5088 if (macinfo->gldm_options & GLDOPT_CANONICAL_ADDR)
5089 gld_bitreverse(mcast->gldm_addr, macinfo->gldm_addrlen);
5092 (void) (*macinfo->gldm_set_multicast)
5093 (macinfo, mcast->gldm_addr, GLD_MULTI_DISABLE);
5104 gld_mac_info_t *macinfo;
5126 macinfo = gld->gld_mac_info;
5127 ASSERT(macinfo != NULL);
5128 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
5133 GLDM_LOCK(macinfo, RW_WRITER);
5196 GLDM_UNLOCK(macinfo);
5204 macrc = (*macinfo->gldm_set_promiscuous)(macinfo, op);
5267 GLDM_UNLOCK(macinfo);
5306 gld_notify_ind(macinfo, DL_NOTE_PROMISC_ON_PHYS, NULL);
5310 gld_notify_ind(macinfo, DL_NOTE_PROMISC_OFF_PHYS, NULL);
5325 gld_mac_info_t *macinfo;
5332 macinfo = (gld_mac_info_t *)gld->gld_mac_info;
5333 ASSERT(macinfo != NULL);
5334 ASSERT(macinfo->gldm_addrlen <= GLD_MAX_ADDRLEN);
5338 mac_copy((caddr_t)macinfo->gldm_vendor_addr,
5339 (caddr_t)addr, macinfo->gldm_addrlen);
5343 GLDM_LOCK(macinfo, RW_WRITER);
5345 ((gld_mac_pvt_t *)macinfo->gldm_mac_pvt)->curr_macaddr,
5346 (caddr_t)addr, macinfo->gldm_addrlen);
5347 GLDM_UNLOCK(macinfo);
5352 dlphysaddrack(q, mp, (caddr_t)addr, macinfo->gldm_addrlen);
5364 gld_mac_info_t *macinfo;
5381 macinfo = (gld_mac_info_t *)gld->gld_mac_info;
5382 ASSERT(macinfo != NULL);
5383 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
5387 prim->set_physaddr_req.dl_addr_length != macinfo->gldm_addrlen)
5390 GLDM_LOCK(macinfo, RW_WRITER);
5394 ASSERT(sizeof (cmaddr) >= macinfo->gldm_addrlen);
5395 cmac_copy(addr, cmaddr, macinfo->gldm_addrlen, macinfo);
5397 rc = (*macinfo->gldm_set_mac_addr)(macinfo, cmaddr);
5400 macinfo->gldm_addrlen);
5402 GLDM_UNLOCK(macinfo);
5419 gld_notify_ind(macinfo, DL_NOTE_PHYS_ADDR, NULL);
5430 gld_mac_info_t *macinfo = gld->gld_mac_info;
5436 ASSERT(macinfo != NULL);
5438 mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
5452 GLDM_LOCK(macinfo, RW_WRITER);
5456 GLDM_UNLOCK(macinfo);
5470 gld_start_mac(gld_mac_info_t *macinfo)
5474 gld_mac_pvt_t *mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
5476 ASSERT(GLDM_LOCK_HELD_WRITE(macinfo));
5479 rc = (*macinfo->gldm_reset)(macinfo);
5484 ASSERT(sizeof (cmaddr) >= macinfo->gldm_addrlen);
5485 cmac_copy(((gld_mac_pvt_t *)macinfo->gldm_mac_pvt)
5486 ->curr_macaddr, cmaddr, macinfo->gldm_addrlen, macinfo);
5488 rc = (*macinfo->gldm_set_mac_addr)(macinfo, cmaddr);
5493 rc = (*macinfo->gldm_start)(macinfo);
5505 gld_stop_mac(gld_mac_info_t *macinfo)
5507 gld_mac_pvt_t *mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
5509 ASSERT(GLDM_LOCK_HELD_WRITE(macinfo));
5512 (void) (*macinfo->gldm_stop)(macinfo);
5530 gld_mac_info_t *macinfo = gld->gld_mac_info;
5536 ASSERT(GLDM_LOCK_HELD_WRITE(macinfo));
5539 if (((macinfo->gldm_type != DL_ETHER) &&
5540 (macinfo->gldm_type != DL_IB)) ||
5724 gld_add_vlan(gld_mac_info_t *macinfo, uint32_t vid)
5726 gld_mac_pvt_t *mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
5739 p->gldv_mac = macinfo;
5768 gld_mac_info_t *macinfo = vlan->gldv_mac;
5769 gld_mac_pvt_t *mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
5792 gld_find_vlan(gld_mac_info_t *macinfo, uint32_t vid)
5794 gld_mac_pvt_t *mac_pvt = (gld_mac_pvt_t *)macinfo->gldm_mac_pvt;
5807 gld_get_vlan(gld_mac_info_t *macinfo, uint32_t vid)
5811 if ((vlan = gld_find_vlan(macinfo, vid)) == NULL)
5812 vlan = gld_add_vlan(macinfo, vid);