4019 case MAC_GROUP_TYPE_STATIC:
4020 /*
4021 * Note that an empty group is allowed, e.g., an aggr
4022 * would start with an empty group.
4023 */
4024 break;
4025 default:
4026 /* unknown group type */
4027 DTRACE_PROBE2(mac__init__rings__unknown__type,
4028 char *, mip->mi_name,
4029 int, cap_rings->mr_group_type);
4030 err = EINVAL;
4031 goto bail;
4032 }
4033
4034
4035 /*
4036 * Driver must register group->mgi_addmac/remmac() for rx groups
4037 * to support multiple MAC addresses.
4038 */
4039 if (rtype == MAC_RING_TYPE_RX) {
4040 if ((group_info.mgi_addmac == NULL) ||
4041 (group_info.mgi_addmac == NULL)) {
4042 goto bail;
4043 }
4044 }
4045
4046 /* Cache driver-supplied information */
4047 group->mrg_info = group_info;
4048
4049 /* Update the group's status and group count. */
4050 mac_set_group_state(group, MAC_GROUP_STATE_REGISTERED);
4051 group_free++;
4052
4053 group->mrg_rings = NULL;
4054 group->mrg_cur_count = 0;
4055 mac_init_group(mip, group, group_info.mgi_count, cap_rings);
4056 ring_left -= group_info.mgi_count;
4057
4058 /* The current group size should be equal to default value */
4059 ASSERT(group->mrg_cur_count == group_info.mgi_count);
4060 }
4061
4062 /* Build up a dummy group for free resources as a pool */
4063 group = groups + grpcnt;
4064
|
4019 case MAC_GROUP_TYPE_STATIC:
4020 /*
4021 * Note that an empty group is allowed, e.g., an aggr
4022 * would start with an empty group.
4023 */
4024 break;
4025 default:
4026 /* unknown group type */
4027 DTRACE_PROBE2(mac__init__rings__unknown__type,
4028 char *, mip->mi_name,
4029 int, cap_rings->mr_group_type);
4030 err = EINVAL;
4031 goto bail;
4032 }
4033
4034
4035 /*
4036 * Driver must register group->mgi_addmac/remmac() for rx groups
4037 * to support multiple MAC addresses.
4038 */
4039 if (rtype == MAC_RING_TYPE_RX &&
4040 ((group_info.mgi_addmac == NULL) ||
4041 (group_info.mgi_remmac == NULL))) {
4042 err = EINVAL;
4043 goto bail;
4044 }
4045
4046 /* Cache driver-supplied information */
4047 group->mrg_info = group_info;
4048
4049 /* Update the group's status and group count. */
4050 mac_set_group_state(group, MAC_GROUP_STATE_REGISTERED);
4051 group_free++;
4052
4053 group->mrg_rings = NULL;
4054 group->mrg_cur_count = 0;
4055 mac_init_group(mip, group, group_info.mgi_count, cap_rings);
4056 ring_left -= group_info.mgi_count;
4057
4058 /* The current group size should be equal to default value */
4059 ASSERT(group->mrg_cur_count == group_info.mgi_count);
4060 }
4061
4062 /* Build up a dummy group for free resources as a pool */
4063 group = groups + grpcnt;
4064
|