+static int
+cn9k_sso_hws_link(void *arg, void *port, uint16_t *map, uint16_t nb_link)
+{
+ struct cnxk_sso_evdev *dev = arg;
+ struct cn9k_sso_hws_dual *dws;
+ struct cn9k_sso_hws *ws;
+ int rc;
+
+ if (dev->dual_ws) {
+ dws = port;
+ rc = roc_sso_hws_link(&dev->sso,
+ CN9K_DUAL_WS_PAIR_ID(dws->hws_id, 0), map,
+ nb_link);
+ rc |= roc_sso_hws_link(&dev->sso,
+ CN9K_DUAL_WS_PAIR_ID(dws->hws_id, 1),
+ map, nb_link);
+ } else {
+ ws = port;
+ rc = roc_sso_hws_link(&dev->sso, ws->hws_id, map, nb_link);
+ }
+
+ return rc;
+}
+
+static int
+cn9k_sso_hws_unlink(void *arg, void *port, uint16_t *map, uint16_t nb_link)
+{
+ struct cnxk_sso_evdev *dev = arg;
+ struct cn9k_sso_hws_dual *dws;
+ struct cn9k_sso_hws *ws;
+ int rc;
+
+ if (dev->dual_ws) {
+ dws = port;
+ rc = roc_sso_hws_unlink(&dev->sso,
+ CN9K_DUAL_WS_PAIR_ID(dws->hws_id, 0),
+ map, nb_link);
+ rc |= roc_sso_hws_unlink(&dev->sso,
+ CN9K_DUAL_WS_PAIR_ID(dws->hws_id, 1),
+ map, nb_link);
+ } else {
+ ws = port;
+ rc = roc_sso_hws_unlink(&dev->sso, ws->hws_id, map, nb_link);
+ }
+
+ return rc;
+}
+