void RTMPFreeTxRxRingMemory(undefined4 *param_1)

{
  uint uVar1;
  uint uVar2;
  undefined4 *puVar3;
  int *piVar4;
  uint uVar5;
  undefined4 *puVar6;
  undefined4 *puVar7;
  int iVar8;
  int iVar9;
  int *piVar10;
  
  if (2 < RTDebugLevel) {
    printk("--> RTMPFreeTxRxRingMemory\n");
  }
  puVar6 = param_1;
  do {
    local_bh_disable();
    piVar4 = (int *)puVar6[0xa8c];
    while (piVar4 != (int *)0x0) {
      iVar9 = *piVar4;
      *piVar4 = 0;
      puVar6[0xa8c] = iVar9;
      if (iVar9 == 0) {
        puVar6[0xa8d] = 0;
      }
      puVar6[0xa8e] = puVar6[0xa8e] + -1;
      RTMPFreeNdisPacket(param_1,piVar4);
      piVar4 = (int *)puVar6[0xa8c];
    }
    puVar6 = puVar6 + 3;
    local_bh_enable();
  } while (puVar6 != param_1 + 0xf);
  puVar6 = param_1 + 0x263;
  iVar9 = 0;
  do {
    puVar3 = param_1 + iVar9 * 0x203 + 99;
    do {
      puVar7 = puVar3;
      piVar10 = (int *)*puVar7;
      uVar5 = puVar7[-2];
      if (piVar10 != (int *)0x0) {
        uVar1 = uVar5 + 3 & 3;
        uVar2 = uVar5 & 3;
        linux_pci_unmap_single
                  (*(undefined4 *)*param_1,
                   (*(int *)((uVar5 + 3) - uVar1) << (3 - uVar1) * 8 |
                   (uint)piVar4 & 0xffffffffU >> (uVar1 + 1) * 8) & -1 << (4 - uVar2) * 8 |
                   *(uint *)(uVar5 - uVar2) >> uVar2 * 8,
                   (*(byte *)(uVar5 + 7) & 0x3f) << 8 | (uint)*(byte *)(uVar5 + 6),0xff00);
        RTMPFreeNdisPacket(param_1);
        piVar4 = piVar10;
      }
      piVar10 = (int *)puVar7[1];
      *puVar7 = 0;
      if (piVar10 != (int *)0x0) {
        linux_pci_unmap_single
                  (*(undefined4 *)*param_1,*(undefined4 *)(uVar5 + 8),
                   (*(byte *)(uVar5 + 5) & 0x3f) << 8 | (uint)*(byte *)(uVar5 + 4),0xff00);
        RTMPFreeNdisPacket(param_1);
        piVar4 = piVar10;
      }
      param_1[iVar9 * 0x203 + puVar6[-1] * 8 + 100] = 0;
      puVar3 = puVar7 + 8;
    } while (puVar7 + 8 != puVar6);
    iVar9 = iVar9 + 1;
    puVar6 = puVar7 + 0x20b;
  } while (iVar9 != 5);
  local_bh_disable();
  if (*(char *)(param_1 + 0x3b) == '\0') {
    param_1[0xe9f] = *(undefined4 *)(param_1[0x37] + 0x1000);
    param_1[0xe9f] = *(undefined4 *)(param_1[0x37] + 0x28c);
  }
  else {
    param_1[0xe9f] = 0;
  }
  while (param_1[0xea0] != param_1[0xe9f]) {
    puVar6 = (undefined4 *)param_1[param_1[0xea0] * 8 + 0xa9f];
    *(byte *)((int)puVar6 + 7) = *(byte *)((int)puVar6 + 7) & 0x7f;
    iVar9 = param_1[0xea0];
    iVar8 = param_1[(iVar9 + 0x154) * 8 + 1];
    if (iVar8 != 0) {
      linux_pci_unmap_single
                (*(undefined4 *)*param_1,*puVar6,
                 (*(byte *)((int)puVar6 + 7) & 0x3f) << 8 | (uint)*(byte *)((int)puVar6 + 6),0xff00)
      ;
      RTMPFreeNdisPacket(param_1,iVar8);
      param_1[(param_1[0xea0] + 0x154) * 8 + 1] = 0;
      iVar9 = param_1[param_1[0xea0] * 8 + 0xaa2];
      if (iVar9 != 0) {
        linux_pci_unmap_single
                  (*(undefined4 *)*param_1,puVar6[2],
                   (*(byte *)((int)puVar6 + 5) & 0x3f) << 8 | (uint)*(byte *)(puVar6 + 1),0xff00);
        RTMPFreeNdisPacket(param_1,iVar9);
      }
      param_1[param_1[0xea0] * 8 + 0xaa2] = 0;
      iVar9 = param_1[0xea0];
    }
    param_1[0xea0] = iVar9 + 1U & 0x7f;
  }
  piVar4 = param_1 + 0x12a0;
  local_bh_enable();
  iVar9 = *piVar4;
  while( true ) {
    if ((iVar9 != 0) && (piVar4[-3] != 0)) {
      linux_pci_unmap_single(*(undefined4 *)*param_1,piVar4[1],piVar4[-1],0xff01);
      RTMPFreeNdisPacket(param_1,piVar4[-3]);
    }
    piVar4 = piVar4 + -8;
    if (piVar4 == param_1 + 0xea0) break;
    iVar9 = *piVar4;
  }
  memset(param_1 + 0xea2,0,0x1000)   //possible issue identified - semgrep
  if (param_1[0x4f] != 0) {
    RTMP_FreeDescMemory(*(undefined4 *)*param_1,param_1[0x4e],param_1[0x4f],param_1[0x50]);
  }
  memset(param_1 + 0x4e,0,0xc)   //possible issue identified - semgrep
  if (param_1[0xa9c] != 0) {
    RTMP_FreeDescMemory(*(undefined4 *)*param_1,param_1[0xa9b],param_1[0xa9c],param_1[0xa9d]);
  }
  memset(param_1 + 0xa9b,0,0xc)   //possible issue identified - semgrep
  iVar9 = 0;
  puVar6 = param_1;
  do {
    if (puVar6[0x40] != 0) {
      RTMP_FreeFirstTxBuffer(*(undefined4 *)*param_1,puVar6[0x3f],0,puVar6[0x40],puVar6[0x41]);
    }
    memset(param_1 + iVar9 * 3 + 0x3f,0,0xc)   //possible issue identified - semgrep
    if (puVar6[0x52] != 0) {
      RTMP_FreeDescMemory(*(undefined4 *)*param_1,puVar6[0x51],puVar6[0x52],puVar6[0x53]);
    }
    iVar8 = iVar9 * 3;
    iVar9 = iVar9 + 1;
    memset(param_1 + iVar8 + 0x51,0,0xc)   //possible issue identified - semgrep
    puVar6 = puVar6 + 3;
  } while (iVar9 != 5);
  if (param_1[0x1d995] != 0) {
    RTMPFreeNdisPacket(param_1);
  }
  if (RTDebugLevel < 3) {
    return;
  }
  printk("<-- RTMPFreeTxRxRingMemory\n");
  return;
}