void RTMPPrepareRDCTSFrame
               (int param_1,undefined4 param_2,undefined2 param_3,undefined4 param_4,int param_5)

{
  char cVar1;
  int iVar2;
  byte *pbVar3;
  undefined2 local_40 [2];
  undefined4 local_3c;
  undefined1 auStack_38 [4];
  byte abStack_34 [8];
  byte local_2c [4];
  uint local_28;
  byte abStack_20 [8];
  
  if (param_5 == 0x7700) {
    cVar1 = *(char *)(param_1 + 0xb0) + -2   //possible issue identified - semgrep
  }
  else {
    if (param_5 != 0x7780) {
      printk("%s illegal address (%lx) for CTS frame buffer.\n","RTMPPrepareRDCTSFrame",param_5);
      return;
    }
    cVar1 = *(char *)(param_1 + 0xb0) + -1   //possible issue identified - semgrep
  }
  memset(&local_3c,0,0x10)   //possible issue identified - semgrep
  local_3c = CONCAT22(param_3,(undefined2)local_3c) & 0xffffff03 | 0xc4;
  memcpy(auStack_38,(void *)(param_1 + 0x16973),6)   //possible issue identified - semgrep
  if (*(byte *)(param_1 + 0x169ec) < 0xf) {
    local_40[0] = 0;
  }
  else {
    local_40[0] = 0x4000;
  }
  pbVar3 = local_2c;
  RTMPWriteTxWI(param_1,pbVar3,0,0,0,0,0,1,0,cVar1,10,5,0,0,2,0,local_40);
  local_28 = local_28 & 0xfffffff | 0x50000000;
  iVar2 = param_5;
  while( true ) {
    if (*(char *)(param_1 + 0xec) == '\0') {
      *(uint *)(*(int *)(param_1 + 0xdc) + iVar2) =
           (uint)pbVar3[1] * 0x100 + (uint)pbVar3[2] * 0x10000 + (uint)*pbVar3 +
           (uint)pbVar3[3] * 0x1000000;
    }
    iVar2 = iVar2 + 4;
    if (pbVar3 == abStack_20) break;
    pbVar3 = pbVar3 + 4;
  }
  param_5 = param_5 + 0x10;
  pbVar3 = (byte *)&local_3c;
  while( true ) {
    if (*(char *)(param_1 + 0xec) == '\0') {
      *(uint *)(*(int *)(param_1 + 0xdc) + param_5) =
           (uint)pbVar3[1] * 0x100 + (uint)pbVar3[2] * 0x10000 + (uint)*pbVar3 +
           (uint)pbVar3[3] * 0x1000000;
    }
    param_5 = param_5 + 4;
    if (pbVar3 == abStack_34) break;
    pbVar3 = pbVar3 + 4;
  }
  AsicUpdateRxWCIDTable(param_1,cVar1,param_1 + 0x51ac);
  return;
}