void RT28xx_UpdateBeaconToAsic(int param_1,int param_2,uint param_3,uint param_4)

{
  byte bVar1;
  char cVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint *puVar7;
  byte *pbVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  
  if (((param_2 < (int)(uint)*(byte *)(param_1 + 0x51aa)) && (param_2 < 0x10)) &&
     (*(char *)(param_1 + 0x16964) == '\x01')) {
    iVar3 = param_1 + param_2 * 0x1140;
    uVar12 = (uint)*(byte *)(iVar3 + 0x551b);
    uVar11 = (uint)*(byte *)(iVar3 + 0x62e9);
    iVar3 = BeaconTransmitRequired(param_1,param_2,param_1 + param_2 * 0x1140 + 0x51ac);
    uVar9 = Status;
    if (iVar3 == 0) {
      uVar10 = 0;
      if (*(char *)(param_1 + 0xad) == '\x01') {
        Status = Status & 0xfffffffe;
        uVar10 = uVar9 & 1;
        *(undefined1 *)(param_1 + 0x5154) = 1;
        if (*(char *)(param_1 + 0xec) == '\0') {
          *(uint *)(*(int *)(param_1 + 0xdc) + 0x400) =
               *(uint *)(*(int *)(param_1 + 0xdc) + 0x400) | 0x80000;
        }
      }
      iVar3 = 0;
      cVar2 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      while( true ) {
        if (cVar2 == '\0') {
          *(undefined4 *)
           (*(int *)(param_1 + 0xdc) +
           iVar3 + (uint)*(ushort *)(param_1 + (uVar11 + 0x28b4) * 2 + 4)) = 0;
        }
        iVar3 = iVar3 + 4;
        if (iVar3 == 0x10) break;
        cVar2 = *(char *)(param_1 + 0xec)   //possible issue identified - semgrep
      }
      if (*(char *)(param_1 + 0xad) != '\x01') {
        return;
      }
      *(undefined1 *)(param_1 + 0x5154) = 0;
      if (*(char *)(param_1 + 0xec) == '\0') {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x400) =
             *(uint *)(*(int *)(param_1 + 0xdc) + 0x400) & 0xfff7ffff;
      }
    }
    else {
      uVar10 = 0;
      if (*(char *)(param_1 + 0xad) == '\x01') {
        Status = Status & 0xfffffffe;
        uVar10 = uVar9 & 1;
        *(undefined1 *)(param_1 + 0x5154) = 1;
        if (*(char *)(param_1 + 0xec) == '\0') {
          *(uint *)(*(int *)(param_1 + 0xdc) + 0x400) =
               *(uint *)(*(int *)(param_1 + 0xdc) + 0x400) | 0x80000;
        }
      }
      iVar3 = 0;
      bVar1 = *(byte *)(param_1 + 0x5156);
      pbVar8 = (byte *)(param_1 + 0x5155);
      while( true ) {
        if (*(char *)(param_1 + 0xec) == '\0') {
          *(uint *)(*(int *)(param_1 + 0xdc) +
                   iVar3 + (uint)*(ushort *)(param_1 + (uVar11 + 0x28b4) * 2 + 4)) =
               (uint)bVar1 * 0x100 + (uint)pbVar8[2] * 0x10000 + (uint)*pbVar8 +
               (uint)pbVar8[3] * 0x1000000;
        }
        iVar3 = iVar3 + 4;
        if (iVar3 == 0x10) break;
        bVar1 = pbVar8[5];
        pbVar8 = pbVar8 + 4;
      }
      iVar3 = param_2 * 0x1140 + param_1 + 0x5720;
      pbVar8 = (byte *)(iVar3 + uVar12);
      uVar9 = uVar12 + 2;
      for (; uVar12 < uVar9; uVar12 = uVar12 + 1) {
        uVar4 = *(ushort *)(param_1 + (uVar11 + 0x28b4) * 2 + 4) + 0x10 + uVar12;
        uVar5 = uVar4 & 3;
        puVar7 = (uint *)(*(int *)(param_1 + 0xdc) + (uVar4 - uVar5));
        iVar6 = uVar5 << 3;
        *puVar7 = *puVar7 & ~(0xff << iVar6) | (uint)*pbVar8 << iVar6;
        pbVar8 = pbVar8 + 1;
      }
      if (param_4 < param_3) {
        pbVar8 = (byte *)(iVar3 + param_4);
        for (; param_4 < param_3; param_4 = param_4 + 1) {
          uVar9 = *(ushort *)(param_1 + (uVar11 + 0x28b4) * 2 + 4) + 0x10 + param_4;
          uVar12 = uVar9 & 3;
          puVar7 = (uint *)(*(int *)(param_1 + 0xdc) + (uVar9 - uVar12));
          iVar3 = uVar12 << 3;
          *puVar7 = *puVar7 & ~(0xff << iVar3) | (uint)*pbVar8 << iVar3;
          pbVar8 = pbVar8 + 1;
        }
        cVar2 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
      else {
        cVar2 = *(char *)(param_1 + 0xad)   //possible issue identified - semgrep
      }
      if (cVar2 != '\x01') {
        return;
      }
      *(undefined1 *)(param_1 + 0x5154) = 0;
      if (*(char *)(param_1 + 0xec) == '\0') {
        *(uint *)(*(int *)(param_1 + 0xdc) + 0x400) =
             *(uint *)(*(int *)(param_1 + 0xdc) + 0x400) & 0xfff7ffff;
      }
    }
    Status = Status & 0xfffffffe;
    if (uVar10 != 0) {
      Status = Status | 1;
    }
  }
  else if (RTDebugLevel != 0) {
    printk("%s() : No valid Interface be found.\n","RT28xx_UpdateBeaconToAsic");
    return;
  }
  return;
}