nimble/ll: Add option to discard excessive ISO SDUs

See syscfg description for details.
diff --git a/nimble/controller/src/ble_ll_isoal.c b/nimble/controller/src/ble_ll_isoal.c
index 3ccf986..fd9d205 100644
--- a/nimble/controller/src/ble_ll_isoal.c
+++ b/nimble/controller/src/ble_ll_isoal.c
@@ -152,6 +152,20 @@
         mux->last_tx_packet_seq_num = blehdr->txiso.packet_seq_num;
     }
 
+#if MYNEWT_VAL(BLE_LL_ISO_HCI_DISCARD_THRESHOLD)
+    /* Drop queued SDUs if number of queued SDUs exceeds defined threshold.
+     * Threshold is defined as number of ISO events. If number of queued SDUs
+     * exceeds number of SDUs required for single event (i.e. including pt)
+     * and number of subsequent ISO events defined by threshold value, we'll
+     * drop any excessive SDUs and notify host as if they were sent.
+     */
+    uint32_t thr = MYNEWT_VAL(BLE_LL_ISO_HCI_DISCARD_THRESHOLD);
+    if (mux->sdu_q_len > mux->sdu_per_event + thr * mux->sdu_per_interval) {
+        num_sdu = mux->sdu_q_len - mux->sdu_per_event -
+                  thr * mux->sdu_per_interval;
+    }
+#endif
+
     while (pkthdr && num_sdu--) {
         OS_ENTER_CRITICAL(sr);
         STAILQ_REMOVE_HEAD(&mux->sdu_q, omp_next);
diff --git a/nimble/controller/syscfg.yml b/nimble/controller/syscfg.yml
index ae4b3c2..f125891 100644
--- a/nimble/controller/syscfg.yml
+++ b/nimble/controller/syscfg.yml
@@ -502,6 +502,18 @@
         experimental: 1
         restrictions:
             - BLE_LL_HCI_VS || BLE_LL_ISO_HCI_FEEDBACK_INTERVAL_MS == 0
+    BLE_LL_ISO_HCI_DISCARD_THRESHOLD:
+        description: >
+            Enables automatic discarding of excessive ISO SDUs to avoid exhaustion
+            of HCI ISO buffers in case host sends too many SDUs.
+            Threshold is defined as number of ISO events. If number of queued
+            SDUs exceeds number of SDUs required for single event (i.e. including
+            pre-transmissions) and number of subsequent ISO events defined by
+            threshold value, the controller will drop any excessive SDUs and
+            notify to host as if they were already sent.
+            Set to 0 to disable.
+        value: 0
+        experimental: 1
 
     BLE_LL_SYSINIT_STAGE:
         description: >