carl9170 firmware: implement command sequence counter
[carl9170fw.git] / carlfw / usb / main.c
index f32efc2a9a0f15aaea30a1b858d21336c3c18701..1429607f891a1a7514457d797d247b3f669d6736 100644 (file)
@@ -65,7 +65,14 @@ static struct carl9170_rsp *get_int_buf(void)
 {
        struct carl9170_rsp *tmp;
 
-       tmp = &fw.usb.int_buf[fw.usb.int_tail_index++];
+       /* fetch the _oldest_ buffer from the ring */
+       tmp = &fw.usb.int_buf[fw.usb.int_tail_index];
+
+       /* assign a unique sequence for every response/trap */
+       tmp->hdr.seq = fw.usb.int_tail_index;
+
+       fw.usb.int_tail_index++;
+
        fw.usb.int_tail_index %= CARL9170_INT_RQ_CACHES;
        if (fw.usb.int_pending != CARL9170_INT_RQ_CACHES)
                fw.usb.int_pending++;
@@ -152,6 +159,7 @@ static void usb_status_in(void)
                goto reclaim;
        }
 
+       fw.usb.int_desc->ctrl = AR9170_CTRL_FS_BIT | AR9170_CTRL_LS_BIT;
        fw.usb.int_desc->totalLen = tlen;
        fw.usb.int_desc->dataSize = tlen;