typedef unsigned char undefined; typedef unsigned char bool; typedef unsigned char byte; typedef unsigned int dword; typedef unsigned int uint; typedef unsigned long ulong; typedef unsigned char undefined1; typedef unsigned short undefined2; typedef unsigned int undefined4; typedef unsigned short word; typedef struct Elf32_Rel Elf32_Rel, *PElf32_Rel; struct Elf32_Rel { dword r_offset; // location to apply the relocation action dword r_info; // the symbol table index and the type of relocation }; typedef struct Elf32_Sym Elf32_Sym, *PElf32_Sym; struct Elf32_Sym { dword st_name; dword st_value; dword st_size; byte st_info; byte st_other; word st_shndx; }; typedef struct GnuBuildId GnuBuildId, *PGnuBuildId; struct GnuBuildId { dword namesz; // Length of name field dword descsz; // Length of description field dword type; // Vendor specific type char name[4]; // Vendor name byte hash[20]; }; typedef struct Elf32_Shdr Elf32_Shdr, *PElf32_Shdr; typedef enum Elf_SectionHeaderType_ARM { SHT_NULL=0, SHT_PROGBITS=1, SHT_SYMTAB=2, SHT_STRTAB=3, SHT_RELA=4, SHT_HASH=5, SHT_DYNAMIC=6, SHT_NOTE=7, SHT_NOBITS=8, SHT_REL=9, SHT_SHLIB=10, SHT_DYNSYM=11, SHT_INIT_ARRAY=14, SHT_FINI_ARRAY=15, SHT_PREINIT_ARRAY=16, SHT_GROUP=17, SHT_SYMTAB_SHNDX=18, SHT_ANDROID_REL=1610612737, SHT_ANDROID_RELA=1610612738, SHT_GNU_ATTRIBUTES=1879048181, SHT_GNU_HASH=1879048182, SHT_GNU_LIBLIST=1879048183, SHT_CHECKSUM=1879048184, SHT_SUNW_move=1879048186, SHT_SUNW_COMDAT=1879048187, SHT_SUNW_syminfo=1879048188, SHT_GNU_verdef=1879048189, SHT_GNU_verneed=1879048190, SHT_GNU_versym=1879048191, SHT_ARM_EXIDX=1879048193, SHT_ARM_PREEMPTMAP=1879048194, SHT_ARM_ATTRIBUTES=1879048195, SHT_ARM_DEBUGOVERLAY=1879048196, SHT_ARM_OVERLAYSECTION=1879048197 } Elf_SectionHeaderType_ARM; struct Elf32_Shdr { dword sh_name; enum Elf_SectionHeaderType_ARM sh_type; dword sh_flags; dword sh_addr; dword sh_offset; dword sh_size; dword sh_link; dword sh_info; dword sh_addralign; dword sh_entsize; }; typedef struct Elf32_Ehdr Elf32_Ehdr, *PElf32_Ehdr; struct Elf32_Ehdr { byte e_ident_magic_num; char e_ident_magic_str[3]; byte e_ident_class; byte e_ident_data; byte e_ident_version; byte e_ident_osabi; byte e_ident_abiversion; byte e_ident_pad[7]; word e_type; word e_machine; dword e_version; dword e_entry; dword e_phoff; dword e_shoff; dword e_flags; word e_ehsize; word e_phentsize; word e_phnum; word e_shentsize; word e_shnum; word e_shstrndx; }; typedef ulong size_t; byte *DAT_0001ce10; undefined1 .LANCHOR0; undefined .LC1; undefined .LC0; int DAT_0001ce10; undefined .LC2; undefined .LC3; undefined .LC4; undefined1[512] __this_module; int DAT_0001ce38; undefined whnat_remove; undefined .LC6; undefined .LC19; undefined .LC12; undefined DAT_00018c60; undefined .LC18; undefined .LC10; undefined .LC8; undefined .LC17; undefined .LC9; undefined DAT_0001ce44; undefined .LC16; undefined .LC5; undefined .LC15; undefined .LC11; undefined .LC7; undefined .LC26; undefined .LC25; undefined .LC24; undefined .LC23; undefined .LC22; undefined .LC21; undefined .LC20; undefined .LC27; undefined .LC28; undefined .LC92; undefined .LC78; undefined .LC63; undefined .LC55; undefined .LC50; undefined .LC39; undefined .LC96; undefined .LC129; undefined .LC120; undefined .LC107; undefined .LC154; undefined .LC160; undefined arm_dma_ops; undefined .LC14; undefined .LC13; undefined4 mem_map; undefined .LC29; undefined .LC33; undefined DAT_0001d104; undefined .LC36; undefined .LC34; undefined .LC35; undefined .LC37; undefined .LC32; undefined .LC30; undefined4 glb_ring_ctrl_desc; undefined .LC38; undefined .LC31; undefined .LC40; undefined glb_var_whnat_fbuf; undefined .LC47; undefined .LC42; undefined .LC41; undefined .LC43; undefined glb_wed_buf_res; undefined .LC45; undefined .LC44; undefined .LC46; undefined .LC48; undefined .LC49; undefined .LC51; undefined .LC65; undefined .LC64; undefined .LC62; undefined .LC60; undefined .LC59; undefined .LC58; undefined .LC57; undefined .LC56; undefined .LC54; undefined .LC53; undefined .LC52; undefined .LC61; undefined .LC67; undefined .LC70; undefined .LC68; undefined .LC108; undefined .LC106; undefined .LC105; undefined .LC104; undefined .LC103; undefined .LC102; undefined .LC101; undefined .LC100; undefined .LC109; undefined4 glb_wdma_rx_ring_ctrl; undefined wdma_proc_show; undefined wed_proc_show; undefined whnat_proc_ctrl_show; undefined whnat_proc_rx_show; undefined whnat_proc_tx_show; undefined whnat_proc_cfg_show; undefined whnat_proc_cr_show; undefined whnat_proc_state_show; undefined whnat_proc_trace_show; undefined *PTR___this_module_000190d8; undefined *PTR___this_module_00019144; undefined *PTR___this_module_000191b0; undefined *PTR___this_module_0001921c; undefined *PTR___this_module_00019288; undefined *PTR___this_module_000192f4; undefined *PTR___this_module_00019360; undefined *PTR___this_module_000193cc; undefined *PTR___this_module_00019438; undefined .LANCHOR0; undefined4 DAT_000194a8; undefined4 ra_sw_nat_hook_tx; undefined whnat_hal_io_write; undefined whnat_hal_io_read; undefined wed_ser_task; undefined4 DAT_0001ce38; undefined .LC172; undefined .LANCHOR2; undefined .LC173; undefined .LC174; undefined .LC175; undefined4 whnat_probe(int param_1) { int iVar1; undefined4 extraout_r2; undefined4 extraout_r3; byte *pbVar2; byte *pbVar3; if (_LANCHOR0 != '\0') { pbVar2 = DAT_0001ce10; do { if ((*(int *)(pbVar2 + 0x1ac) == 0) && (*(int *)(pbVar2 + 0x2c) != 0)) { *(int *)(pbVar2 + 0x1ac) = param_1; if (pbVar2 != (byte *)0x0) { pbVar3 = pbVar2 + 0xb8; wifi_cap_get((int *)(pbVar2 + 4)); *(byte **)(pbVar2 + 0x1a8) = pbVar2; wed_init(param_1,(uint)*pbVar2,(int *)pbVar3); wed_entry_proc_init((int)pbVar2,(int)pbVar3); *(byte **)(pbVar2 + 0xb4) = pbVar2; wdma_init(param_1,(uint)*pbVar2,(int *)(pbVar2 + 0x88)); wdma_entry_proc_init((int)pbVar2,(int)(pbVar2 + 0x88)); wifi_chip_probe((int *)(pbVar2 + 4),*(undefined4 *)(pbVar2 + 0xc0),extraout_r2,extraout_r3 ); whnat_hal_pdma_mask_set((int)pbVar3,**(undefined4 **)(pbVar2 + 0x24)); whnat_hal_pcie_map(pbVar2); iVar1 = whnat_log_get(); if (iVar1 < 2) { return 0; } printk(&_LC1,"whnat_probe"); return 0; } break; } pbVar2 = pbVar2 + 0x1d0; } while (pbVar2 != DAT_0001ce10 + ((byte)(_LANCHOR0 - 1) + 1) * 0x1d0); } iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC0,"whnat_probe"); } return 0xffffffff; } undefined4 whnat_remove(int param_1) { int *piVar1; int iVar2; int iVar3; if (_LANCHOR0 != '\0') { iVar3 = DAT_0001ce10; if (param_1 != *(int *)(DAT_0001ce10 + 0x1ac)) { iVar2 = DAT_0001ce10; do { iVar3 = iVar2 + 0x1d0; if (iVar3 == DAT_0001ce10 + ((byte)(_LANCHOR0 - 1) + 1) * 0x1d0) goto LAB_000101a8; piVar1 = (int *)(iVar2 + 0x37c); iVar2 = iVar3; } while (param_1 != *piVar1); } if (iVar3 != 0) { wifi_chip_remove((int *)(iVar3 + 4)); wdma_entry_proc_exit(iVar3,iVar3 + 0x88); wdma_exit(param_1,(int *)(iVar3 + 0x88)); wed_entry_proc_exit(iVar3,iVar3 + 0xb8); wed_exit(param_1,(int *)(iVar3 + 0xb8)); *(undefined4 *)(iVar3 + 0x1ac) = 0; iVar3 = whnat_log_get(); if (iVar3 < 0) { return 0; } printk(&_LC3,"whnat_remove"); return 0; } } LAB_000101a8: iVar3 = whnat_log_get(); if (iVar3 < 1) { return 0xffffffff; } printk(&_LC2,"whnat_remove"); return 0xffffffff; } void whnat_driver_exit(int param_1) { byte *pbVar1; int iVar2; byte *pbVar3; int iVar4; if (_LANCHOR0 == '\0') { return; } pbVar3 = DAT_0001ce10; if (*(int *)(DAT_0001ce10 + 4) == 0 || param_1 != *(int *)(DAT_0001ce10 + 4)) { pbVar1 = DAT_0001ce10 + 0x1d0; do { pbVar3 = pbVar1; if (pbVar3 == DAT_0001ce10 + ((byte)(_LANCHOR0 - 1) + 1) * 0x1d0) { return; } iVar2 = *(int *)(pbVar3 + 4); iVar4 = iVar2; if (iVar2 != 0) { iVar4 = 1; } if (param_1 != iVar2) { iVar4 = 0; } pbVar1 = pbVar3 + 0x1d0; } while (iVar4 == 0); } if (pbVar3 != (byte *)0x0) { platform_driver_unregister(pbVar3 + 0x2c); pbVar3[4] = 0; pbVar3[5] = 0; pbVar3[6] = 0; pbVar3[7] = 0; __memzero(pbVar3 + 0x2c,0x5c); whnat_entry_proc_exit(0x1ce0c,pbVar3); iVar4 = whnat_log_get(); if (iVar4 < 0) { return; } printk(&_LC4,"whnat_driver_exit"); return; } return; } undefined4 whnat_handle(undefined4 param_1,undefined4 *param_2,int *param_3) { byte *pbVar1; bool bVar2; char cVar3; int iVar4; int iVar5; uint uVar6; undefined4 uVar7; undefined4 *puVar8; byte *pbVar9; byte *pbVar10; uint uVar11; undefined4 *puVar12; uint local_1c [2]; switch(param_1) { case 0: iVar4 = whnat_log_get(); if (1 < iVar4) { printk(&_LC5,"whnat_ring_init",param_2); } if (_LANCHOR0 != 0) { pbVar9 = DAT_0001ce10; if (*(undefined4 **)(DAT_0001ce10 + 4) == (undefined4 *)0x0 || param_2 != *(undefined4 **)(DAT_0001ce10 + 4)) { pbVar10 = DAT_0001ce10; do { pbVar9 = pbVar10 + 0x1d0; if (pbVar9 == DAT_0001ce10 + ((byte)(_LANCHOR0 - 1) + 1) * 0x1d0) goto LAB_000104b0; puVar12 = *(undefined4 **)(pbVar10 + 0x1d4); puVar8 = puVar12; if (puVar12 != (undefined4 *)0x0) { puVar8 = (undefined4 *)0x1; } if (param_2 != puVar12) { puVar8 = (undefined4 *)0x0; } pbVar10 = pbVar9; } while (puVar8 == (undefined4 *)0x0); } if (pbVar9 != (byte *)0x0) { iVar4 = whnat_log_get(); if (1 < iVar4) { printk(&_LC7,"whnat_ring_init",pbVar9,*pbVar9); } whnat_hal_wed_init((int)pbVar9); whnat_hal_wdma_init((char *)pbVar9); whnat_hal_wdma_ring_init((int)pbVar9); whnat_hal_wpdma_ring_init((int)pbVar9); whnat_hal_int_ctrl((int)pbVar9,2,1); whnat_hal_eint_init((int)pbVar9); whnat_hal_eint_ctrl((int)pbVar9,1); if (pbVar9[0x1b0] == 0) { return 0; } wifi_chip_cr_mirror_set((int *)(pbVar9 + 4),1); whnat_hal_cr_mirror_set((char *)pbVar9,1); return 0; } } LAB_000104b0: iVar4 = whnat_log_get(); if (1 < iVar4) { printk(&_LC6,"whnat_ring_init",param_2); } break; case 1: iVar4 = whnat_log_get(); if (-1 < iVar4) { printk(&_LC5,"whnat_ring_exit",param_2); } if (_LANCHOR0 != 0) { pbVar9 = DAT_0001ce10; if (*(undefined4 **)(DAT_0001ce10 + 4) == (undefined4 *)0x0 || param_2 != *(undefined4 **)(DAT_0001ce10 + 4)) { pbVar10 = DAT_0001ce10; do { pbVar9 = pbVar10 + 0x1d0; if (pbVar9 == DAT_0001ce10 + ((byte)(_LANCHOR0 - 1) + 1) * 0x1d0) goto LAB_000105a8; puVar12 = *(undefined4 **)(pbVar10 + 0x1d4); puVar8 = puVar12; if (puVar12 != (undefined4 *)0x0) { puVar8 = (undefined4 *)0x1; } if (param_2 != puVar12) { puVar8 = (undefined4 *)0x0; } pbVar10 = pbVar9; } while (puVar8 == (undefined4 *)0x0); } if (pbVar9 != (byte *)0x0) { if (pbVar9[0x1b0] != 0) { wifi_chip_cr_mirror_set((int *)(pbVar9 + 4),0); whnat_hal_cr_mirror_set((char *)pbVar9,0); } wifi_tx_tuple_reset(); whnat_hal_dma_ctrl((int)pbVar9,0); whnat_hal_eint_ctrl((int)pbVar9,0); whnat_hal_int_ctrl((int)pbVar9,2,0); whnat_hal_hw_reset((int)pbVar9,2); return 0; } } LAB_000105a8: iVar4 = whnat_log_get(); if (0 < iVar4) { printk(&_LC6,"whnat_ring_exit",param_2); } break; default: iVar4 = whnat_log_get(); if (0 < iVar4) { printk(&_LC19,"whnat_handle",param_1); } break; case 4: iVar4 = whnat_log_get(); if (1 < iVar4) { printk(&_LC5,"whnat_wlan_tx",param_2); } if (_LANCHOR0 != 0) { pbVar9 = DAT_0001ce10; if (*(undefined4 **)(DAT_0001ce10 + 4) == (undefined4 *)0x0 || param_2 != *(undefined4 **)(DAT_0001ce10 + 4)) { pbVar10 = DAT_0001ce10; do { pbVar9 = pbVar10 + 0x1d0; if (pbVar9 == DAT_0001ce10 + ((byte)(_LANCHOR0 - 1) + 1) * 0x1d0) { return 0; } puVar12 = *(undefined4 **)(pbVar10 + 0x1d4); puVar8 = puVar12; if (puVar12 != (undefined4 *)0x0) { puVar8 = (undefined4 *)0x1; } if (param_2 != puVar12) { puVar8 = (undefined4 *)0x0; } pbVar10 = pbVar9; } while (puVar8 == (undefined4 *)0x0); } if ((pbVar9 != (byte *)0x0) && (bVar2 = wifi_hw_tx_allow(param_2,(int)param_3), bVar2)) { wifi_tx_tuple_add(pbVar9,(int)param_3); } } break; case 6: iVar4 = wifi_chip_id_get((int)param_2); if (iVar4 == 0x7915 || iVar4 == 0x7615) { iVar5 = whnat_log_get(); if (-1 < iVar5) { printk(&_LC8,"whnat_cap_support",iVar4); } cVar3 = wifi_whnat_en_get((int)param_2); if (cVar3 == '\0') { iVar4 = whnat_log_get(); if (-1 < iVar4) { printk(&_LC10,"whnat_driver_init"); } } else { uVar6 = wifi_slot_get(param_2); if (_LANCHOR0 != 0) { if (uVar6 == DAT_0001ce10[1]) { uVar11 = 0; pbVar10 = DAT_0001ce10; } else { uVar11 = 0; pbVar9 = DAT_0001ce10; do { pbVar10 = pbVar9 + 0x1d0; uVar11 = uVar11 + 1; if (uVar11 == _LANCHOR0) goto LAB_000108bc; pbVar1 = pbVar9 + 0x1d1; pbVar9 = pbVar10; } while (uVar6 != *pbVar1); } *(undefined4 **)(pbVar10 + 4) = param_2; iVar4 = whnat_log_get(); if (-1 < iVar4) { printk(&_LC11,"whnat_entry_acquire",uVar11,*pbVar10); } iVar4 = DAT_0001ce38; if (pbVar10 != (byte *)0x0) { DAT_0001ce38 = DAT_0001ce38 + 1; snprintf(&DAT_0001ce44,0x40,"%s%d","whnat_dev",iVar4); pbVar10[0x2c] = 0; pbVar10[0x2d] = 0; pbVar10[0x2e] = 1; pbVar10[0x2f] = 0; *(code **)(pbVar10 + 0x30) = whnat_remove; *(undefined **)(pbVar10 + 0x58) = &DAT_00018c60; *(undefined **)(pbVar10 + 0x40) = &DAT_0001ce44; *(undefined1 **)(pbVar10 + 0x48) = __this_module; whnat_entry_proc_init(0x1ce0c,pbVar10); __platform_driver_register(pbVar10 + 0x2c,__this_module); return 0; } } LAB_000108bc: iVar4 = whnat_log_get(); if (-1 < iVar4) { printk(&_LC12,"whnat_driver_init",param_2); } } } else { iVar4 = whnat_log_get(); if (0 < iVar4) { printk(&_LC9,"whnat_driver_init"); } } wifi_whnat_en_set((int)param_2,0); break; case 7: whnat_driver_exit((int)param_2); return 0; case 8: local_1c[0] = 0; iVar4 = whnat_log_get(); if (2 < iVar4) { printk(&_LC5,"whnat_isr_handler",param_2); } if (_LANCHOR0 != 0) { pbVar9 = DAT_0001ce10; if (*(undefined4 **)(DAT_0001ce10 + 4) == (undefined4 *)0x0 || param_2 != *(undefined4 **)(DAT_0001ce10 + 4)) { pbVar10 = DAT_0001ce10; do { pbVar9 = pbVar10 + 0x1d0; if (pbVar9 == DAT_0001ce10 + ((byte)(_LANCHOR0 - 1) + 1) * 0x1d0) { return 0; } puVar12 = *(undefined4 **)(pbVar10 + 0x1d4); puVar8 = puVar12; if (puVar12 != (undefined4 *)0x0) { puVar8 = (undefined4 *)0x1; } if (param_2 != puVar12) { puVar8 = (undefined4 *)0x0; } pbVar10 = pbVar9; } while (puVar8 == (undefined4 *)0x0); } if (pbVar9 != (byte *)0x0) { whnat_hal_eint_ctrl((int)pbVar9,0); whnat_hal_eint_stat_get((int)pbVar9,local_1c); wed_eint_handle(pbVar9 + 0xb8,local_1c[0]); whnat_hal_eint_ctrl((int)pbVar9,1); } } break; case 9: iVar4 = whnat_log_get(); if (2 < iVar4) { printk(&_LC5,"whnat_dma_handler",param_2); } if (_LANCHOR0 != 0) { pbVar9 = DAT_0001ce10; if (*(undefined4 **)(DAT_0001ce10 + 4) == (undefined4 *)0x0 || param_2 != *(undefined4 **)(DAT_0001ce10 + 4)) { pbVar10 = DAT_0001ce10; do { pbVar9 = pbVar10 + 0x1d0; if (pbVar9 == DAT_0001ce10 + ((byte)(_LANCHOR0 - 1) + 1) * 0x1d0) { return 0; } puVar12 = *(undefined4 **)(pbVar10 + 0x1d4); puVar8 = puVar12; if (puVar12 != (undefined4 *)0x0) { puVar8 = (undefined4 *)0x1; } if (param_2 != puVar12) { puVar8 = (undefined4 *)0x0; } pbVar10 = pbVar9; } while (puVar8 == (undefined4 *)0x0); } if (pbVar9 != (byte *)0x0) { wifi_dma_cfg_wrapper(*param_3,(undefined1 *)local_1c); iVar4 = whnat_log_get(); if (2 < iVar4) { printk(&_LC15,"whnat_dma_handler",local_1c[0] & 0xff); } whnat_hal_dma_ctrl((int)pbVar9,local_1c[0] & 0xff); } } break; case 10: iVar4 = whnat_log_get(); if (2 < iVar4) { printk(&_LC5,"whnat_ser_handler",param_2); } if (_LANCHOR0 != 0) { pbVar9 = DAT_0001ce10; if (*(undefined4 **)(DAT_0001ce10 + 4) == (undefined4 *)0x0 || param_2 != *(undefined4 **)(DAT_0001ce10 + 4)) { pbVar10 = DAT_0001ce10; do { pbVar9 = pbVar10 + 0x1d0; if (pbVar9 == DAT_0001ce10 + ((byte)(_LANCHOR0 - 1) + 1) * 0x1d0) { return 0; } puVar12 = *(undefined4 **)(pbVar10 + 0x1d4); puVar8 = puVar12; if (puVar12 != (undefined4 *)0x0) { puVar8 = (undefined4 *)0x1; } if (param_2 != puVar12) { puVar8 = (undefined4 *)0x0; } pbVar10 = pbVar9; } while (puVar8 == (undefined4 *)0x0); } if (pbVar9 != (byte *)0x0) { iVar4 = whnat_log_get(); if (-1 < iVar4) { uVar7 = wifi_ser_status(param_3); printk(&_LC16,"whnat_ser_handler",uVar7); } iVar4 = wifi_ser_status(param_3); if (iVar4 == 1) { wifi_tx_tuple_reset(); wed_ring_reset((int *)(pbVar9 + 0xb8)); iVar4 = whnat_hal_hw_reset((int)pbVar9,0); if (iVar4 < 0) { iVar4 = whnat_log_get(); if (1 < iVar4) { printk(&_LC17,"whnat_ser_handler"); } whnat_hal_hw_reset((int)pbVar9,1); } } else if (iVar4 == 0) { if (pbVar9[0x1b0] != 0) { wifi_chip_cr_mirror_set((int *)(pbVar9 + 4),0); whnat_hal_cr_mirror_set((char *)pbVar9,0); } whnat_hal_eint_ctrl((int)pbVar9,0); whnat_hal_int_ctrl((int)pbVar9,1,0); } else if (iVar4 == 3) { whnat_hal_int_ctrl((int)pbVar9,2,1); } else { iVar4 = whnat_log_get(); if (1 < iVar4) { uVar7 = wifi_ser_status(param_3); printk(&_LC18,"whnat_ser_handler",uVar7); } } } } } return 0; } void whnat_proc_handle(undefined1 *param_1) { int iVar1; iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC20,*param_1); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC21,*(undefined4 *)(param_1 + 4)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC22,*(undefined4 *)(param_1 + 0x28)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC23,*(undefined4 *)(param_1 + 0x1ac)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC24,param_1 + 0x2c); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC25,param_1 + 0x88); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC26,param_1 + 0xb8); } iVar1 = whnat_log_get(); if (iVar1 < 0) { return; } iVar1 = whnat_log_get(); printk(&_LC27,iVar1); return; } void whnat_dump_cfg(int param_1) { int iVar1; undefined4 extraout_r3; undefined4 extraout_r3_00; undefined4 extraout_r3_01; undefined4 extraout_r3_02; undefined4 extraout_r3_03; undefined4 extraout_r3_04; undefined4 extraout_r3_05; undefined4 extraout_r3_06; undefined4 extraout_r3_07; undefined4 extraout_r3_08; undefined4 extraout_r3_09; undefined4 extraout_r3_10; undefined4 extraout_r3_11; undefined4 extraout_r3_12; undefined4 extraout_r3_13; undefined4 extraout_r3_14; undefined4 extraout_r3_15; undefined4 extraout_r3_16; undefined4 extraout_r3_17; undefined4 extraout_r3_18; undefined4 extraout_r3_19; undefined4 extraout_r3_20; undefined4 extraout_r3_21; undefined4 extraout_r3_22; undefined4 extraout_r3_23; undefined4 extraout_r3_24; undefined4 extraout_r3_25; undefined4 extraout_r3_26; undefined4 extraout_r3_27; undefined4 extraout_r3_28; undefined4 extraout_r3_29; undefined4 extraout_r3_30; undefined4 extraout_r3_31; undefined4 extraout_r3_32; undefined4 extraout_r3_33; undefined4 extraout_r3_34; undefined4 extraout_r3_35; undefined4 extraout_r3_36; undefined4 extraout_r3_37; undefined4 extraout_r3_38; undefined4 extraout_r3_39; undefined4 extraout_r3_40; undefined4 extraout_r3_41; undefined4 extraout_r3_42; undefined4 extraout_r3_43; undefined4 extraout_r3_44; undefined4 extraout_r3_45; undefined4 extraout_r3_46; undefined4 extraout_r3_47; undefined4 extraout_r3_48; undefined4 extraout_r3_49; undefined4 extraout_r3_50; undefined4 extraout_r3_51; undefined4 extraout_r3_52; undefined4 extraout_r3_53; undefined4 extraout_r3_54; undefined4 extraout_r3_55; undefined4 extraout_r3_56; undefined4 extraout_r3_57; undefined4 uVar2; undefined4 extraout_r3_58; undefined4 extraout_r3_59; undefined4 extraout_r3_60; undefined4 extraout_r3_61; undefined4 extraout_r3_62; undefined4 extraout_r3_63; undefined4 extraout_r3_64; undefined4 extraout_r3_65; undefined4 extraout_r3_66; int iVar3; int iVar4; int iVar5; iVar3 = param_1 + 0xb8; iVar5 = param_1 + 4; iVar4 = param_1 + 0x88; iVar1 = whnat_log_get(); uVar2 = extraout_r3; if (-1 < iVar1) { printk(&_LC28); uVar2 = extraout_r3_60; } dump_wed_value(iVar3,"WED_REV",0,uVar2); dump_wed_value(iVar3,"WED_CTRL",0xc,extraout_r3_00); dump_wed_value(iVar3,"WED_CTRL2",0x1c,extraout_r3_01); dump_wed_value(iVar3,"WED_EX_INT_STA",0x20,extraout_r3_02); dump_wed_value(iVar3,"WED_EX_INT_MSK",0x28,extraout_r3_03); dump_wed_value(iVar3,"WED_ST",0x60,extraout_r3_04); dump_wed_value(iVar3,"WED_GLO_CFG",0x208,extraout_r3_05); dump_wed_value(iVar3,"WED_INT_STA",0x200,extraout_r3_06); dump_wed_value(iVar3,"WED_INT_MSK",0x204,extraout_r3_07); dump_wed_value(iVar3,"WED_AXI_CTRL",0x10,extraout_r3_08); iVar1 = whnat_log_get(); uVar2 = extraout_r3_09; if (-1 < iVar1) { printk(&_LC39); uVar2 = extraout_r3_66; } dump_wed_value(iVar3,"WED_BM_ST",0x6c,uVar2); dump_wed_value(iVar3,"WED_TX_BM_BASE",0x84,extraout_r3_10); dump_wed_value(iVar3,"WED_TX_BM_CTRL",0x80,extraout_r3_11); dump_wed_value(iVar3,"WED_TX_BM_TKID",0x88,extraout_r3_12); dump_wed_value(iVar3,"WED_TX_BM_STS",0x90,extraout_r3_13); dump_wed_value(iVar3,"WED_TX_BM_DYN_TH",0xa0,extraout_r3_14); dump_wed_value(iVar3,"WED_TX_BM_INTF",0x9c,extraout_r3_15); dump_wed_value(iVar3,"WED_TX_BM_RECYC",0xa8,extraout_r3_16); dump_wed_value(iVar3,"WED_TX_FREE_TO_TX_BM_TKID_MIB",0x1c0,extraout_r3_17); dump_wed_value(iVar3,"WED_TX_BM_TO_WDMA_RX_DRV_TKID_MIB",0x1c4,extraout_r3_18); iVar1 = whnat_log_get(); uVar2 = extraout_r3_19; if (-1 < iVar1) { printk(&_LC50); uVar2 = extraout_r3_65; } dump_wed_value(iVar3,"WED_PCIE_CFG_BASE",0x560,uVar2); dump_wed_value(iVar3,"WED_PCIE_OFST",0x564,extraout_r3_20); dump_wed_value(iVar3,"WED_PCIE_INTS_TRIG",0x570,extraout_r3_21); dump_wed_value(iVar3,"WED_PCIE_INT_CTRL",0x57c,extraout_r3_22); iVar1 = whnat_log_get(); uVar2 = extraout_r3_23; if (-1 < iVar1) { printk(&_LC55); uVar2 = extraout_r3_64; } dump_wed_value(iVar3,"WED_WPDMA_ST",100,uVar2); dump_wed_value(iVar3,"WED_WPDMA_INT_STA_REC",0x500,extraout_r3_24); dump_wed_value(iVar3,"WED_WPDMA_GLO_CFG",0x508,extraout_r3_25); dump_wed_value(iVar3,"WED_WPDMA_CFG_BASE",0x580,extraout_r3_26); dump_wed_value(iVar3,"WED_WPDMA_OFST0",0x584,extraout_r3_27); dump_wed_value(iVar3,"WED_WPDMA_OFST1",0x588,extraout_r3_28); dump_wed_value(iVar3,"WED_WPDAM_CTRL",0x518,extraout_r3_29); iVar1 = whnat_log_get(); uVar2 = extraout_r3_30; if (-1 < iVar1) { printk(&_LC63); uVar2 = extraout_r3_63; } dump_wed_value(iVar3,"WED_WDMA_ST",0x68,uVar2); dump_wed_value(iVar3,"WED_WDMA_INFO",0xa00,extraout_r3_31); dump_wed_value(iVar3,"WED_WDMA_GLO_CFG",0xa04,extraout_r3_32); dump_wed_value(iVar3,"WED_WDMA_RST_IDX",0xa08,extraout_r3_33); dump_wed_value(iVar3,"WED_WDMA_LOAD_DRV_IDX",0xa10,extraout_r3_34); dump_wed_value(iVar3,"WED_WDMA_LOAD_CRX_IDX",0xa14,extraout_r3_35); dump_wed_value(iVar3,"WED_WDMA_SPR",0xa1c,extraout_r3_36); dump_wed_value(iVar3,"WED_WDMA_INT_STA_REC",0xa20,extraout_r3_37); dump_wed_value(iVar3,"WED_WDMA_INT_TRIG",0xa28,extraout_r3_38); dump_wed_value(iVar3,"WED_WDMA_INT_CTRL",0xa2c,extraout_r3_39); dump_wed_value(iVar3,"WED_WDMA_INT_CLR",0xa24,extraout_r3_40); dump_wed_value(iVar3,"WED_WDMA_CFG_BASE",0xaa0,extraout_r3_41); dump_wed_value(iVar3,"WED_WDMA_OFST0",0xaa4,extraout_r3_42); dump_wed_value(iVar3,"WED_WDMA_OFST1",0xaa8,extraout_r3_43); iVar1 = whnat_log_get(); uVar2 = extraout_r3_44; if (-1 < iVar1) { printk(&_LC78); uVar2 = extraout_r3_62; } dump_wdma_value(iVar4,"WDMA_GLO_CFG",0x204,uVar2); dump_wdma_value(iVar4,"WDMA_INT_MSK",0x228,extraout_r3_45); dump_wdma_value(iVar4,"WDMA_INT_STA",0x220,extraout_r3_46); dump_wdma_value(iVar4,"WDMA_INFO",0x200,extraout_r3_47); dump_wdma_value(iVar4,"WDMA_DELAY_INT_CFG",0x20c,extraout_r3_48); dump_wdma_value(iVar4,"WDMA_FREEQ_THRES",0x210,extraout_r3_49); dump_wdma_value(iVar4,"WDMA_INT_STS_GRP0",0x240,extraout_r3_50); dump_wdma_value(iVar4,"WDMA_INT_STS_GRP1",0x244,extraout_r3_51); dump_wdma_value(iVar4,"WDMA_INT_STS_GRP2",0x248,extraout_r3_52); dump_wdma_value(iVar4,"WDMA_INT_GRP1",0x250,extraout_r3_53); dump_wdma_value(iVar4,"WDMA_INT_GRP2",0x254,extraout_r3_54); dump_wdma_value(iVar4,"WDMA_SCH_Q01_CFG",0x280,extraout_r3_55); dump_wdma_value(iVar4,"WDMA_SCH_Q23_CFG",0x284,extraout_r3_56); iVar1 = whnat_log_get(); uVar2 = extraout_r3_57; if (-1 < iVar1) { printk(&_LC92); uVar2 = extraout_r3_61; } dump_wifi_value(iVar5,"WPDMA_GLO_CFG",0xd5208,uVar2); dump_wifi_value(iVar5,"WPDMA_INT_MSK",0xd7204,extraout_r3_58); dump_wifi_value(iVar5,"WPDMA_INT_STA",0xd7200,extraout_r3_59); return; } void whnat_dump_txinfo(int param_1) { int iVar1; undefined4 extraout_r3; undefined4 extraout_r3_00; undefined4 extraout_r3_01; undefined4 extraout_r3_02; undefined4 extraout_r3_03; undefined4 extraout_r3_04; undefined4 extraout_r3_05; undefined4 extraout_r3_06; undefined4 extraout_r3_07; undefined4 extraout_r3_08; undefined4 extraout_r3_09; undefined4 extraout_r3_10; undefined4 extraout_r3_11; undefined4 extraout_r3_12; undefined4 extraout_r3_13; undefined4 extraout_r3_14; undefined4 extraout_r3_15; undefined4 extraout_r3_16; undefined4 extraout_r3_17; undefined4 extraout_r3_18; undefined4 extraout_r3_19; undefined4 extraout_r3_20; undefined4 extraout_r3_21; undefined4 extraout_r3_22; undefined4 extraout_r3_23; undefined4 extraout_r3_24; undefined4 extraout_r3_25; undefined4 extraout_r3_26; undefined4 extraout_r3_27; undefined4 extraout_r3_28; undefined4 extraout_r3_29; undefined4 extraout_r3_30; undefined4 extraout_r3_31; undefined4 extraout_r3_32; undefined4 extraout_r3_33; undefined4 extraout_r3_34; undefined4 extraout_r3_35; undefined4 extraout_r3_36; undefined4 extraout_r3_37; undefined4 extraout_r3_38; undefined4 extraout_r3_39; undefined4 extraout_r3_40; undefined4 extraout_r3_41; undefined4 extraout_r3_42; undefined4 extraout_r3_43; undefined4 extraout_r3_44; undefined4 extraout_r3_45; undefined4 uVar2; undefined4 extraout_r3_46; undefined4 extraout_r3_47; undefined4 extraout_r3_48; undefined4 extraout_r3_49; undefined4 extraout_r3_50; undefined4 extraout_r3_51; undefined4 extraout_r3_52; undefined4 extraout_r3_53; undefined4 extraout_r3_54; undefined4 extraout_r3_55; undefined4 extraout_r3_56; undefined4 extraout_r3_57; int iVar3; int iVar4; int iVar5; iVar3 = param_1 + 0xb8; iVar5 = param_1 + 4; iVar4 = param_1 + 0x88; iVar1 = whnat_log_get(); uVar2 = extraout_r3; if (-1 < iVar1) { printk(&_LC96); uVar2 = extraout_r3_53; } dump_wed_value(iVar3,"WED_TX0_MIB",0x2a0,uVar2); dump_wed_value(iVar3,"WED_TX1_MIB",0x2a4,extraout_r3_00); dump_wed_value(iVar3,"WED_TX0_BASE",0x300,extraout_r3_01); dump_wed_value(iVar3,"WED_TX0_CNT",0x304,extraout_r3_02); dump_wed_value(iVar3,"WED_TX0_CIDX",0x308,extraout_r3_03); dump_wed_value(iVar3,"WED_TX0_DIDX",0x30c,extraout_r3_04); dump_wed_value(iVar3,"WED_TX1_BASE",0x310,extraout_r3_05); dump_wed_value(iVar3,"WED_TX1_CNT",0x314,extraout_r3_06); dump_wed_value(iVar3,"WED_TX1_CIDX",0x318,extraout_r3_07); dump_wed_value(iVar3,"WED_TX1_DIDX",0x31c,extraout_r3_08); iVar1 = whnat_log_get(); uVar2 = extraout_r3_09; if (-1 < iVar1) { printk(&_LC107); uVar2 = extraout_r3_57; } dump_wed_value(iVar3,"WED_WPDMA_TX0_MIB",0x5a0,uVar2); dump_wed_value(iVar3,"WED_WPDMA_TX0_BASE",0x600,extraout_r3_10); dump_wed_value(iVar3,"WED_WPDMA_TX0_CNT",0x604,extraout_r3_11); dump_wed_value(iVar3,"WED_WPDMA_TX0_CIDX",0x608,extraout_r3_12); dump_wed_value(iVar3,"WED_WPDMA_TX0_DIDX",0x60c,extraout_r3_13); dump_wed_value(iVar3,"WED_WPDMA_TX0_COHERENT_MIB",0x5d0,extraout_r3_14); dump_wed_value(iVar3,"WED_WPDMA_TX1_MIB",0x5a4,extraout_r3_15); dump_wed_value(iVar3,"WED_WPDMA_TX1_BASE",0x610,extraout_r3_16); dump_wed_value(iVar3,"WED_WPDMA_TX1_CNT",0x614,extraout_r3_17); dump_wed_value(iVar3,"WED_WPDMA_TX1_CIDX",0x618,extraout_r3_18); dump_wed_value(iVar3,"WED_WPDMA_TX1_DIDX",0x61c,extraout_r3_19); dump_wed_value(iVar3,"WED_WPDMA_TX1_COHERENT_MIB",0x5d4,extraout_r3_20); iVar1 = whnat_log_get(); uVar2 = extraout_r3_21; if (-1 < iVar1) { printk(&_LC120); uVar2 = extraout_r3_56; } dump_wifi_value(iVar5,"WPDMA_TX0_BASE",0xd7300,uVar2); dump_wifi_value(iVar5,"WPDMA_TX0_CNT",0xd7304,extraout_r3_22); dump_wifi_value(iVar5,"WPDMA_TX0_CRX_IDX",0xd7308,extraout_r3_23); dump_wifi_value(iVar5,"WPDMA_TX0_DRX_IDX",0xd730c,extraout_r3_24); dump_wifi_value(iVar5,"WPDMA_TX1_BASE",0xd7310,extraout_r3_25); dump_wifi_value(iVar5,"WPDMA_TX1_CNT",0xd7314,extraout_r3_26); dump_wifi_value(iVar5,"WPDMA_TX1_CRX_IDX",0xd7318,extraout_r3_27); dump_wifi_value(iVar5,"WPDMA_TX1_DRX_IDX",0xd731c,extraout_r3_28); iVar1 = whnat_log_get(); uVar2 = extraout_r3_29; if (-1 < iVar1) { printk(&_LC129); uVar2 = extraout_r3_55; } dump_wed_value(iVar3,"WED_WDMA_RX0_MIB",0xae0,uVar2); dump_wed_value(iVar3,"WED_WDMA_RX0_BASE",0x900,extraout_r3_30); dump_wed_value(iVar3,"WED_WDMA_RX0_CNT",0x904,extraout_r3_31); dump_wed_value(iVar3,"WED_WDMA_RX0_CRX_IDX",0x908,extraout_r3_32); dump_wed_value(iVar3,"WED_WDMA_RX0_DRX_IDX",0x90c,extraout_r3_33); dump_wed_value(iVar3,"WED_WDMA_RX0_THRES_CFG",0x940,extraout_r3_34); dump_wed_value(iVar3,"WED_WDMA_RX0_RECYCLE_MIB",0xae8,extraout_r3_35); dump_wed_value(iVar3,"WED_WDMA_RX0_PROCESSED_MIB",0xaf0,extraout_r3_36); dump_wed_value(iVar3,"WED_WDMA_RX1_MIB",0xae4,extraout_r3_37); dump_wed_value(iVar3,"WED_WDMA_RX1_BASE",0x910,extraout_r3_38); dump_wed_value(iVar3,"WED_WDMA_RX1_CNT",0x914,extraout_r3_39); dump_wed_value(iVar3,"WED_WDMA_RX1_CRX_IDX",0x918,extraout_r3_40); dump_wed_value(iVar3,"WED_WDMA_RX1_DRX_IDX",0x91c,extraout_r3_41); dump_wed_value(iVar3,"WED_WDMA_RX1_THRES_CFG",0x944,extraout_r3_42); dump_wed_value(iVar3,"WED_WDMA_RX1_RECYCLE_MIB",0xaec,extraout_r3_43); dump_wed_value(iVar3,"WED_WDMA_RX1_PROCESSED_MIB",0xaf4,extraout_r3_44); iVar1 = whnat_log_get(); uVar2 = extraout_r3_45; if (-1 < iVar1) { printk(&_LC129); uVar2 = extraout_r3_54; } dump_wdma_value(iVar4,"WDMA_RX_BASE_PTR_0",0x100,uVar2); dump_wdma_value(iVar4,"WDMA_RX_MAX_CNT_0",0x104,extraout_r3_46); dump_wdma_value(iVar4,"WDMA_RX_CRX_IDX_0",0x108,extraout_r3_47); dump_wdma_value(iVar4,"WDMA_RX_DRX_IDX_0",0x10c,extraout_r3_48); dump_wdma_value(iVar4,"WDMA_RX_BASE_PTR_1",0x110,extraout_r3_49); dump_wdma_value(iVar4,"WDMA_RX_MAX_CNT_1",0x114,extraout_r3_50); dump_wdma_value(iVar4,"WDMA_RX_CRX_IDX_1",0x118,extraout_r3_51); dump_wdma_value(iVar4,"WDMA_RX_DRX_IDX_1",0x11c,extraout_r3_52); return; } void whnat_dump_rxinfo(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { int iVar1; undefined4 extraout_r3; undefined4 extraout_r3_00; undefined4 extraout_r3_01; undefined4 extraout_r3_02; undefined4 extraout_r3_03; undefined4 extraout_r3_04; undefined4 extraout_r3_05; undefined4 extraout_r3_06; undefined4 extraout_r3_07; undefined4 extraout_r3_08; undefined4 extraout_r3_09; undefined4 extraout_r3_10; undefined4 extraout_r3_11; undefined4 uVar2; undefined4 extraout_r3_12; undefined4 extraout_r3_13; undefined4 extraout_r3_14; undefined4 extraout_r3_15; undefined4 extraout_r3_16; int iVar3; int iVar4; iVar3 = param_1 + 0xb8; iVar4 = param_1 + 4; iVar1 = whnat_log_get(); uVar2 = extraout_r3; if (-1 < iVar1) { printk(&_LC154); uVar2 = extraout_r3_14; } dump_wed_value(iVar3,"WED_RX1_MIB",0x2e4,uVar2); dump_wed_value(iVar3,"WED_RX1_BASE",0x410,extraout_r3_00); dump_wed_value(iVar3,"WED_RX1_CNT",0x414,extraout_r3_01); dump_wed_value(iVar3,"WED_RX1_CIDX",0x418,extraout_r3_02); dump_wed_value(iVar3,"WED_RX1_DIDX",0x41c,extraout_r3_03); iVar1 = whnat_log_get(); uVar2 = extraout_r3_04; if (-1 < iVar1) { printk(&_LC160); uVar2 = extraout_r3_16; } dump_wed_value(iVar3,"WED_WPDMA_RX1_MIB",0x5e4,uVar2); dump_wed_value(iVar3,"WED_WPDMA_RX1_BASE",0x710,extraout_r3_05); dump_wed_value(iVar3,"WED_WPDMA_RX1_CNT",0x714,extraout_r3_06); dump_wed_value(iVar3,"WED_WPDMA_RX1_CIDX",0x718,extraout_r3_07); dump_wed_value(iVar3,"WED_WPDMA_RX1_DIDX",0x71c,extraout_r3_08); dump_wed_value(iVar3,"WED_WPDMA_RX1_COHERENT_MIB",0x5f0,extraout_r3_09); dump_wed_value(iVar3,"WED_WPDMA_RX1_EXTC_FREE_TKID_MIB",0x5f8,extraout_r3_10); iVar1 = whnat_log_get(); uVar2 = extraout_r3_11; if (-1 < iVar1) { printk(&_LC160); uVar2 = extraout_r3_15; } dump_wifi_value(iVar4,"WPDMA_RX1_BASE",0xd7410,uVar2); dump_wifi_value(iVar4,"WPDMA_RX1_CNT",0xd7414,extraout_r3_12); dump_wifi_value(iVar4,"WPDMA_RX1_CRX_IDX",0xd7418,extraout_r3_13); dump_wifi_value(iVar4,"WPDMA_RX1_DRX_IDX",0xd741c,param_4); return; } int whnat_entry_search(int param_1) { int iVar1; int iVar2; int iVar3; if (_LANCHOR0 == '\0') { return 0; } if (*(int *)(DAT_0001ce10 + 4) == 0 || *(int *)(DAT_0001ce10 + 4) != param_1) { iVar1 = DAT_0001ce10; do { iVar2 = iVar1 + 0x1d0; if (iVar2 == DAT_0001ce10 + ((byte)(_LANCHOR0 - 1) + 1) * 0x1d0) { return 0; } iVar1 = *(int *)(iVar1 + 0x1d4); iVar3 = iVar1; if (iVar1 != 0) { iVar3 = 1; } if (iVar1 != param_1) { iVar3 = 0; } iVar1 = iVar2; } while (iVar3 == 0); return iVar2; } return DAT_0001ce10; } int whnat_entry_search_by_hw_ctrl(int param_1) { int iVar1; uint uVar2; if (_LANCHOR0 != 0) { uVar2 = 0; do { iVar1 = *(int *)(DAT_0001ce10 + uVar2 * 0x1d0 + 4); if ((iVar1 != 0) && (iVar1 = wifi_get_hw_ctrl(iVar1), param_1 == iVar1)) { return DAT_0001ce10 + uVar2 * 0x1d0; } uVar2 = uVar2 + 1 & 0xff; } while (uVar2 < _LANCHOR0); } return 0; } undefined1 * whnat_ctrl_get(void) { return &_LANCHOR0; } int whnat_log_get(void) { return (int)_LANCHOR0; } void whnat_log_set(undefined1 param_1) { _LANCHOR0 = param_1; return; } void whnat_dma_buf_free(int param_1,int *param_2) { if (param_1 == 0) { return; } if (param_2[1] == 0) { return; } if (*param_2 == 0) { __memzero(param_2,0x14); return; } __memzero(); __memzero(param_2,0x14); return; } int whnat_dma_buf_alloc(int param_1,int *param_2,int param_3) { int iVar1; undefined4 *puVar2; int iVar3; int local_20; int local_1c [2]; iVar3 = param_1 + 0x10; *param_2 = param_3; if ((iVar3 == 0) || (puVar2 = *(undefined4 **)(param_1 + 0x134), puVar2 == (undefined4 *)0x0)) { puVar2 = (undefined4 *)&arm_dma_ops; } iVar1 = dma_alloc_from_coherent(iVar3,param_3,&local_20,local_1c); if (iVar1 == 0) { if ((code *)*puVar2 == (code *)0x0) goto LAB_00011ca4; local_1c[0] = (*(code *)*puVar2)(iVar3,param_3,&local_20,0x24000c0,0); } if (local_1c[0] != 0) { param_2[1] = local_1c[0]; if (param_3 == 0) { local_1c[0] = 0; } param_2[4] = local_20; if (param_3 != 0) { __memzero(local_1c[0],param_3); return 0; } return local_1c[0]; } LAB_00011ca4: if ('\0' < _LANCHOR0) { printk(&_LC0,param_3); } return -1; } void whnat_dump_dmabuf(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { if (_LANCHOR0 < '\0') { return; } printk(&_LC1,param_1 + 4); if (_LANCHOR0 < '\0') { return; } printk(&_LC2,param_1[1]); if (_LANCHOR0 < '\0') { return; } printk(&_LC3,*param_1); return; } void whnat_dump_dmacb(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { if (_LANCHOR0 < '\0') { return; } printk(&_LC4,param_1 + 2); if (_LANCHOR0 < '\0') { return; } printk(&_LC5,param_1[1]); if (_LANCHOR0 < '\0') { return; } printk(&_LC6,*param_1); if (_LANCHOR0 < '\0') { return; } printk(&_LC7,param_1[3]); if (_LANCHOR0 < '\0') { return; } printk(&_LC8,*(undefined2 *)(param_1 + 5)); return; } void whnat_dump_raw(undefined4 param_1,int param_2,uint param_3) { size_t sVar1; uint uVar2; byte *pbVar3; char local_218 [516]; local_218[0] = '\0'; local_218[1] = '\0'; local_218[2] = '\0'; local_218[3] = '\0'; memset(local_218 + 4,0,0x1fc); if (_LANCHOR0 < '\0') { if (param_3 == 0) { return; } } else { printk(&_LC9,param_1,param_2,param_3); if (param_3 == 0) goto LAB_00011ea4; } uVar2 = 0; pbVar3 = (byte *)(param_2 + -1); sVar1 = 0; do { if ((uVar2 & 0xf) == 0) { sprintf(local_218 + sVar1,"\n0x%04x : ",uVar2); sVar1 = strlen(local_218); } pbVar3 = pbVar3 + 1; sprintf(local_218 + sVar1,"%02x ",(uint)*pbVar3); uVar2 = uVar2 + 1; sVar1 = strlen(local_218); } while (uVar2 < param_3); LAB_00011ea4: if (-1 < _LANCHOR0) { printk(&_LC12,local_218); } return; } void whnat_str_tol(void) { simple_strtol(); return; } void FUN_00011ecc(undefined4 *param_1) { int iVar1; undefined4 extraout_r1; undefined4 extraout_r1_00; undefined4 uVar2; undefined4 extraout_r1_01; undefined4 extraout_r1_02; undefined4 extraout_r2; undefined4 extraout_r2_00; undefined4 uVar3; undefined4 extraout_r2_01; undefined4 extraout_r2_02; undefined4 extraout_r3; undefined4 extraout_r3_00; undefined4 uVar4; undefined4 extraout_r3_01; undefined4 extraout_r3_02; iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC0,*param_1); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC1,param_1[7]); } iVar1 = whnat_log_get(); uVar2 = extraout_r1; uVar3 = extraout_r2; uVar4 = extraout_r3; if (-1 < iVar1) { printk(&_LC2); uVar2 = extraout_r1_02; uVar3 = extraout_r2_02; uVar4 = extraout_r3_02; } whnat_dump_dmabuf(param_1 + 0xd,uVar2,uVar3,uVar4); iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC3,param_1[4]); } iVar1 = whnat_log_get(); uVar2 = extraout_r1_00; uVar3 = extraout_r2_00; uVar4 = extraout_r3_00; if (-1 < iVar1) { printk(&_LC4); uVar2 = extraout_r1_01; uVar3 = extraout_r2_01; uVar4 = extraout_r3_01; } whnat_dump_dmabuf(param_1 + 8,uVar2,uVar3,uVar4); iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC5,param_1[5]); } iVar1 = whnat_log_get(); if (iVar1 < 0) { return; } printk(&_LC6,param_1[6]); return; } void dump_token_info(int param_1,int param_2) { int iVar1; int *piVar2; int *piVar3; int iVar4; piVar3 = (int *)(param_1 + 0x48); piVar2 = (int *)*piVar3; iVar4 = *(int *)(param_1 + 4); if (piVar2 == piVar3) { return; } do { while (piVar2[-0xb] != param_2 + iVar4) { piVar2 = (int *)*piVar2; if (piVar2 == piVar3) { return; } } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC7,piVar2[-0xb]); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC8,piVar2[-9]); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC9,piVar2 + -6); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC10,piVar2[-3]); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC11,piVar2[-10]); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC12,piVar2[-1]); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC13,piVar2 + -7); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC14,piVar2[-4]); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC15,piVar2[-8]); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC16,piVar2 + -5); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC17,piVar2[-2]); } whnat_dump_raw("WED_TX_DMAD",piVar2[-3],piVar2[-9]); whnat_dump_raw("WED_TX_BM",piVar2[-2],piVar2[-8]); piVar2 = (int *)*piVar2; } while (piVar2 != piVar3); return; } void dump_wed_value(int param_1,undefined4 param_2,int param_3,undefined4 param_4) { int iVar1; undefined4 uVar2; uVar2 = *(undefined4 *)(param_3 + *(int *)(param_1 + 4)); DataSynchronizationBarrier(0xf); iVar1 = whnat_log_get(); if (iVar1 < 0) { return; } printk(&_LC20,param_2,uVar2,param_4); return; } int alloc_dma_tx_pkt(int param_1,undefined4 param_2,uint *param_3,undefined4 *param_4) { int iVar1; int iVar2; undefined4 uVar3; uint uVar4; uint extraout_r12; uint uVar5; undefined *puVar6; iVar1 = __netdev_alloc_skb(0,param_2,0x2080020); if (iVar1 == 0) { iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC21,"alloc_dma_tx_pkt",param_2); } *param_3 = 0; *param_4 = 0; } else { iVar2 = param_1 + 0x10; uVar4 = *(uint *)(iVar1 + 0x1e4); uVar5 = extraout_r12; if (iVar2 == 0) { uVar5 = 0xd0c0; } *param_3 = uVar4; if (iVar2 == 0) { puVar6 = (undefined *)(uVar5 & 0xffff | 0x10000); } else { puVar6 = *(undefined **)(param_1 + 0x134); if (*(undefined **)(param_1 + 0x134) == (undefined *)0x0) { puVar6 = &arm_dma_ops; } } uVar3 = (**(code **)(puVar6 + 0x10)) (iVar2,mem_map + (uVar4 + 0x40000000 >> 0xc) * 0x20,uVar4 & 0xfff,param_2,1,0) ; *param_4 = uVar3; } return iVar1; } undefined4 free_dma_tx_pkt(int param_1,int param_2,undefined4 param_3,undefined4 param_4) { undefined4 uVar1; undefined *puVar2; if (param_2 == 0) { uVar1 = 0xffffffff; } else { if (param_1 + 0x10 == 0) { puVar2 = &arm_dma_ops; } else { puVar2 = *(undefined **)(param_1 + 0x134); if (*(undefined **)(param_1 + 0x134) == (undefined *)0x0) { puVar2 = &arm_dma_ops; } } if (*(code **)(puVar2 + 0x14) != (code *)0x0) { (**(code **)(puVar2 + 0x14))(param_1 + 0x10,param_3,param_4,2,0); } __dev_kfree_skb_any(param_2,1); uVar1 = 0; } return uVar1; } void FUN_00012324(int *param_1,int param_2) { undefined4 *puVar1; puVar1 = *(undefined4 **)(param_2 + 4); if (*(int *)(param_2 + 0xc) != 0) { free_dma_tx_pkt(*param_1,*(int *)(param_2 + 0xc),*puVar1, (uint)*(byte *)((int)puVar1 + 6) | (*(byte *)((int)puVar1 + 7) & 0x3f) << 8); } *(undefined4 *)(param_2 + 0xc) = 0; __memzero(param_2,0x18); return; } void FUN_00012370(int *param_1,int param_2) { int iVar1; uint uVar2; int iVar3; int iVar4; int iVar5; if (*(int *)(param_2 + 0x50) != 0) { uVar2 = 0; do { iVar1 = *(int *)(param_2 + 0x5c); iVar3 = uVar2 * 0xc024 + *(int *)(param_2 + 0x60); iVar4 = iVar3; do { iVar5 = iVar4 + 0x18; FUN_00012324(param_1,iVar4); iVar4 = iVar5; } while (iVar5 != iVar3 + 0xc000); whnat_dma_buf_free(*param_1,(int *)(iVar1 + uVar2 * 0x14)); uVar2 = uVar2 + 1 & 0xff; } while (uVar2 < *(uint *)(param_2 + 0x50)); } kfree(*(undefined4 *)(param_2 + 0x60)); kfree(*(undefined4 *)(param_2 + 0x5c)); return; } void FUN_000123fc(int *param_1,int param_2,uint param_3,undefined4 param_4) { bool bVar1; int iVar2; int *piVar3; int *piVar4; int *piVar5; int *piVar6; int iVar7; piVar6 = (int *)(param_2 + 0x48); piVar4 = (int *)*piVar6; iVar7 = *param_1; piVar5 = (int *)*piVar4; if (piVar4 == piVar6) { return; } do { if ((uint)(piVar4[-0xb] - *(int *)(param_2 + 4)) < param_3) { free_dma_tx_pkt(iVar7,piVar4[-1],piVar4[-7],piVar4[-10]); iVar2 = *piVar4; piVar3 = (int *)piVar4[1]; *(int **)(iVar2 + 4) = piVar3; *piVar3 = iVar2; *piVar4 = 0x100; piVar4[1] = 0x200; __memzero(piVar4 + -0xb,0x34,iVar2,0x200,param_4); kfree(piVar4 + -0xb); piVar3 = (int *)*piVar5; } else { piVar3 = (int *)*piVar5; } bVar1 = piVar6 != piVar5; piVar4 = piVar5; piVar5 = piVar3; } while (bVar1); return; } void FUN_000124a8(int *param_1,int param_2) { int iVar1; iVar1 = *param_1; if (*(int *)(param_2 + 0x38) == 0) { return; } FUN_000123fc(param_1,param_2,*(uint *)(param_2 + 0x1c),*(int *)(param_2 + 0x38)); whnat_dma_buf_free(iVar1,(int *)(param_2 + 0x34)); iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC22,"token_info_exit"); } if (*(int *)(param_2 + 0x20) == 0) { __memzero(param_2 + 0x20,0x14); return; } __memzero(*(undefined4 *)(param_2 + 0x24)); __memzero(param_2 + 0x20,0x14); return; } void wed_exit(int param_1,int *param_2) { wed_ser_exit((int)param_2); FUN_00012370(param_2,(int)(param_2 + 0x22)); FUN_000124a8(param_2,(int)(param_2 + 0x22)); devm_iounmap(param_1 + 0x10,param_2[1]); __memzero(param_2,0xf4); return; } uint wed_num_get(void) { undefined4 uVar1; int iVar2; uint uVar3; uint local_14 [2]; uVar3 = 0; local_14[0] = 0; uVar1 = of_find_compatible_node(0,0,"en751221,wed"); iVar2 = of_property_read_u32_index(uVar1,"wed_num",0,local_14); if (iVar2 == 0) { uVar3 = local_14[0] & 0xff; } else { iVar2 = whnat_log_get(); if (iVar2 < 1) { uVar3 = 0; } else { printk(&_LC25,"wed_num_get"); } } return uVar3; } uint wed_slot_map_get(int param_1) { undefined4 uVar1; int iVar2; uint local_14 [2]; local_14[0] = 0; uVar1 = of_find_compatible_node(0,0,"en751221,wed"); iVar2 = of_property_read_u32_index(uVar1,"pci_slot_map",param_1,local_14); if (iVar2 != 0) { iVar2 = whnat_log_get(); if (-1 < iVar2) { printk(&_LC27,"wed_slot_map_get"); } iVar2 = whnat_log_get(); if (-1 < iVar2) { printk(&_LC28,"wed_slot_map_get"); } if (param_1 == 0) { local_14[0] = 1; } else { local_14[0] = 2; } } iVar2 = whnat_log_get(); if (-1 < iVar2) { printk(&_LC29,"wed_slot_map_get",local_14[0],param_1); } return local_14[0] & 0xff; } // WARNING: Globals starting with '_' overlap smaller symbols at the same address undefined4 wed_ring_init(int *param_1) { int iVar1; int iVar2; uint uVar3; uint uVar4; int iVar5; int *piVar6; undefined4 *puVar7; int *piVar8; undefined4 uVar9; uint uVar10; iVar5 = *(int *)(param_1[0x3c] + 0x14); param_1[0x37] = 0x800; param_1[0x38] = 0x10; param_1[0x36] = iVar5; iVar1 = whnat_log_get(); iVar5 = iVar5 * 0x14; if (-1 < iVar1) { printk(&_LC30,"wed_tx_ring_init",0x325,iVar5); } iVar1 = __kmalloc(iVar5,0x24000c0); param_1[0x39] = iVar1; if (iVar5 != 0) { __memzero(iVar1,iVar5); iVar1 = param_1[0x39]; } if (iVar1 == 0) { iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC31,"wed_tx_ring_init"); } } else { iVar1 = param_1[0x36]; iVar5 = whnat_log_get(); iVar1 = iVar1 * 0xc024; if (-1 < iVar5) { printk(&_LC32,"wed_tx_ring_init",0x330,iVar1,0xc024,param_1[0x36]); } iVar5 = __kmalloc(iVar1,0x24000c0); param_1[0x3a] = iVar5; if (iVar1 != 0) { __memzero(iVar5,iVar1); iVar5 = param_1[0x3a]; } if (iVar5 == 0) { iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC33,"wed_tx_ring_init"); } } else { if (param_1[0x36] == 0) { LAB_00012904: uVar9 = 0; goto LAB_000128e4; } piVar8 = (int *)param_1[0x39]; uVar10 = 0; iVar1 = param_1[0x38] * param_1[0x37]; do { piVar6 = (int *)(&glb_ring_ctrl_desc)[uVar10]; if (piVar6 == (int *)0x0) { iVar2 = kmem_cache_alloc(_DAT_0001d104,0x24000c0); (&glb_ring_ctrl_desc)[uVar10] = iVar2; if (iVar2 == 0) { iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC35,"tx_ring_init",0x14); } goto LAB_000128c8; } __memzero(iVar2,0x14); iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC36,"tx_ring_init",uVar10,iVar1); } iVar2 = whnat_dma_buf_alloc(*param_1,(int *)(&glb_ring_ctrl_desc)[uVar10],iVar1); if (iVar2 < 0) { iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC37,"tx_ring_init",iVar1); } goto LAB_000128c8; } piVar6 = (int *)(&glb_ring_ctrl_desc)[uVar10]; } iVar1 = *piVar6; *piVar8 = iVar1; piVar8[1] = *(int *)((&glb_ring_ctrl_desc)[uVar10] + 4); piVar8[4] = *(int *)((&glb_ring_ctrl_desc)[uVar10] + 0x10); if (iVar1 != 0) { __memzero(); } iVar1 = (uVar10 + 0x30) * 0x10; iVar2 = whnat_wifi_cr_get(0,iVar1); *(int *)(iVar5 + 0xc014) = iVar2; iVar2 = whnat_wifi_cr_get(0,iVar1 + 4); *(int *)(iVar5 + 0xc020) = iVar2; iVar2 = whnat_wifi_cr_get(0,iVar1 + 8); *(int *)(iVar5 + 0xc018) = iVar2; iVar1 = whnat_wifi_cr_get(0,iVar1 + 0xc); *(int *)(iVar5 + 0xc01c) = iVar1; uVar3 = param_1[0x37]; if (uVar3 != 0) { uVar4 = 0; puVar7 = (undefined4 *)(iVar5 + 0xc); do { *puVar7 = 0; iVar5 = uVar4 * 0x10; puVar7[-3] = 0x10; uVar4 = uVar4 + 1; iVar1 = piVar8[1] + iVar5; puVar7[-2] = iVar1; puVar7[-1] = iVar5 + piVar8[4]; *(byte *)(iVar1 + 7) = *(byte *)(iVar1 + 7) | 0x80; uVar3 = param_1[0x37]; puVar7 = puVar7 + 6; } while (uVar4 < uVar3); } uVar10 = uVar10 + 1; if ((uint)param_1[0x36] <= uVar10) goto LAB_00012904; iVar5 = uVar10 * 0xc024 + param_1[0x3a]; piVar8 = (int *)(param_1[0x39] + uVar10 * 0x14); iVar1 = param_1[0x38] * uVar3; } while (uVar10 != 2); iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC34,2); } LAB_000128c8: iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC38,"wed_tx_ring_init"); } } } FUN_00012370(param_1,(int)(param_1 + 0x22)); uVar9 = 0xffffffff; LAB_000128e4: iVar5 = whnat_log_get(); if (-1 < iVar5) { printk(&_LC39,"wed_ring_init",uVar9); } return uVar9; } undefined4 wed_ring_reset(int *param_1) { int iVar1; uint uVar2; uint uVar3; int iVar4; undefined4 *puVar5; uint uVar6; int iVar7; uVar2 = param_1[0x36]; if (uVar2 != 0) { uVar3 = param_1[0x37]; uVar6 = 0; do { iVar7 = param_1[0x39] + (uVar6 & 0xff) * 0x14; if (uVar3 != 0) { uVar2 = 0; puVar5 = (undefined4 *)((uVar6 & 0xff) * 0xc024 + param_1[0x3a]); do { if (puVar5[3] != 0) { FUN_00012324(param_1,(int)puVar5); } puVar5[3] = 0; iVar1 = uVar2 * 0x10; *puVar5 = 0x10; uVar2 = uVar2 + 1; iVar4 = *(int *)(iVar7 + 4) + iVar1; puVar5[1] = iVar4; puVar5[2] = iVar1 + *(int *)(iVar7 + 0x10); *(byte *)(iVar4 + 7) = *(byte *)(iVar4 + 7) | 0x80; uVar3 = param_1[0x37]; puVar5 = puVar5 + 6; } while (uVar2 < uVar3); uVar2 = param_1[0x36]; } uVar6 = uVar6 + 1; } while (uVar6 < uVar2); } iVar7 = whnat_log_get(); if (-1 < iVar7) { printk(&_LC40,"wed_ring_reset",0); } return 0; } void wed_ring_exit(int *param_1) { FUN_00012370(param_1,(int)(param_1 + 0x22)); return; } void wed_token_buf_exit(int *param_1) { FUN_000124a8(param_1,(int)(param_1 + 0x22)); return; } // WARNING: Globals starting with '_' overlap smaller symbols at the same address undefined4 wed_token_buf_init(int *param_1) { byte bVar1; ushort uVar2; int *piVar3; undefined4 uVar4; int iVar5; int *piVar6; undefined4 *puVar7; undefined4 extraout_r3; int *piVar8; undefined4 extraout_r3_00; undefined4 extraout_r3_01; undefined4 extraout_r3_02; undefined4 extraout_r3_03; byte *pbVar9; uint uVar10; int iVar11; int iVar12; int *piVar13; uint uVar14; pbVar9 = (byte *)param_1[0x3c]; piVar13 = param_1 + 0x22; iVar11 = *(int *)(pbVar9 + 0x1c) - *(int *)(pbVar9 + 0x20); param_1[0x22] = iVar11; param_1[0x23] = *(int *)(pbVar9 + 0x20); iVar5 = *(int *)(pbVar9 + 0x1c); param_1[0x25] = iVar11; param_1[0x29] = iVar11; param_1[0x24] = iVar5 + -1; param_1[0x26] = 0x10; param_1[0x27] = 0x80; param_1[0x28] = 0x76c; uVar14 = (uint)*pbVar9; if (1 < uVar14) { iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC34,*pbVar9); } goto LAB_00012dc8; } if (*(int *)(&glb_wed_buf_res + uVar14 * 4) == 0) { uVar4 = kmem_cache_alloc(_DAT_0001d104,0x24000c0); *(undefined4 *)(&glb_wed_buf_res + uVar14 * 4) = uVar4; if (*(int *)(&glb_wed_buf_res + (uint)*pbVar9 * 4) == 0) { iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC41,"token_info_init",*pbVar9,0x14); } goto LAB_00012dc8; } __memzero(*(int *)(&glb_wed_buf_res + (uint)*pbVar9 * 4),0x14); iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC42,"token_info_init",iVar11 * 0x10); } iVar5 = whnat_dma_buf_alloc(*param_1,*(int **)(&glb_wed_buf_res + (uint)*pbVar9 * 4), iVar11 * 0x10); if (-1 < iVar5) { uVar14 = (uint)*pbVar9; goto LAB_00012c28; } LAB_00013074: iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC43,"token_info_init"); } } else { LAB_00012c28: iVar5 = **(int **)(&glb_wed_buf_res + uVar14 * 4); param_1[0x2f] = iVar5; param_1[0x30] = *(int *)(*(int *)(&glb_wed_buf_res + (uint)*pbVar9 * 4) + 4); param_1[0x33] = *(int *)(*(int *)(&glb_wed_buf_res + (uint)*pbVar9 * 4) + 0x10); if (iVar5 != 0) { __memzero(); } bVar1 = *pbVar9; piVar6 = *(int **)(&glb_var_whnat_fbuf + (uint)bVar1 * 4); if (piVar6 == (int *)0x0) { uVar4 = kmem_cache_alloc(_DAT_0001d104,0x24000c0); *(undefined4 *)(&glb_var_whnat_fbuf + (uint)bVar1 * 4) = uVar4; if (*(int *)(&glb_var_whnat_fbuf + (uint)*pbVar9 * 4) == 0) { iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC44,"token_info_init",*pbVar9,0x14); } goto LAB_00012dc8; } __memzero(*(int *)(&glb_var_whnat_fbuf + (uint)*pbVar9 * 4),0x14); iVar12 = param_1[0x22]; iVar11 = param_1[0x27]; iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC45,*pbVar9,iVar11 * iVar12); } iVar5 = whnat_dma_buf_alloc(*param_1,*(int **)(&glb_var_whnat_fbuf + (uint)*pbVar9 * 4), iVar11 * iVar12); if (iVar5 < 0) goto LAB_00013074; piVar6 = *(int **)(&glb_var_whnat_fbuf + (uint)*pbVar9 * 4); } iVar5 = *piVar6; param_1[0x2a] = iVar5; param_1[0x2e] = *(int *)(*(int *)(&glb_var_whnat_fbuf + (uint)*pbVar9 * 4) + 0x10); param_1[0x2b] = *(int *)(*(int *)(&glb_var_whnat_fbuf + (uint)*pbVar9 * 4) + 4); if (iVar5 != 0) { __memzero(); } piVar6 = param_1 + 0x34; param_1[0x34] = (int)piVar6; param_1[0x35] = (int)piVar6; uVar14 = param_1[0x29]; iVar5 = whnat_log_get(); if (-1 < iVar5) { printk(&_LC46,uVar14 * 0x34,uVar14,0x34,param_1[0x28]); } if (uVar14 == 0) { LAB_00012dfc: piVar3 = (int *)param_1[0x34]; uVar14 = param_1[0x29]; do { if (piVar6 == piVar3) { return 0; } while( true ) { if ((uint)param_1[0x24] < (uint)piVar3[-0xb]) { iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC50,"token_buf_init",piVar3[-0xb],param_1[0x24]); } goto LAB_00012dd4; } if (uVar14 <= (uint)(piVar3[-0xb] - param_1[0x23])) break; piVar8 = (int *)piVar3[-3]; *piVar8 = piVar3[-5]; uVar2 = *(ushort *)(piVar3 + -8); *(char *)((int)piVar8 + 6) = (char)uVar2; *(byte *)((int)piVar8 + 7) = *(byte *)((int)piVar8 + 7) & 0xc0 | (byte)(((uint)uVar2 << 0x12) >> 0x1a); uVar10 = piVar3[-7]; piVar8[2] = uVar10; uVar2 = *(ushort *)(piVar3 + -10); *(byte *)((int)piVar8 + 7) = *(byte *)((int)piVar8 + 7) & 0x3f; *(char *)(piVar8 + 1) = (char)uVar2; *(byte *)((int)piVar8 + 5) = *(byte *)((int)piVar8 + 5) & 0x40 | (byte)(((uint)uVar2 << 0x12) >> 0x1a) | 0x40; wifi_fbuf_init((uint *)piVar3[-2],uVar10,(short)piVar3[-0xb]); piVar3 = (int *)*piVar3; if (piVar6 == piVar3) { return 0; } } piVar3 = (int *)*piVar3; } while( true ); } uVar10 = param_1[0x22]; if (uVar10 != 0) { uVar10 = 0; do { piVar3 = (int *)kmem_cache_alloc(_DAT_0001d104,0x24000c0); if (piVar3 == (int *)0x0) { iVar5 = whnat_log_get(); uVar4 = extraout_r3; if (0 < iVar5) { printk(&_LC48,"token_info_alloc",uVar10); uVar4 = extraout_r3_03; } goto LAB_00012db8; } __memzero(piVar3,0x34); *piVar3 = uVar10 + param_1[0x23]; iVar5 = param_1[0x28]; piVar3[1] = iVar5; iVar5 = alloc_dma_tx_pkt(*param_1,iVar5,(uint *)(piVar3 + 7),piVar3 + 4); piVar3[10] = iVar5; if (iVar5 == 0) { iVar5 = whnat_log_get(); if (0 < iVar5) { printk(&_LC49,"token_info_alloc",uVar10); } kfree(piVar3); uVar4 = extraout_r3_02; goto LAB_00012db8; } iVar5 = param_1[0x26] * uVar10; piVar3[2] = param_1[0x26]; piVar3[5] = iVar5 + param_1[0x33]; piVar3[8] = param_1[0x30] + iVar5; iVar5 = param_1[0x27] * uVar10; piVar3[3] = param_1[0x27]; uVar10 = uVar10 + 1; piVar3[6] = iVar5 + param_1[0x2e]; piVar3[9] = param_1[0x2b] + iVar5; puVar7 = (undefined4 *)param_1[0x35]; param_1[0x35] = (int)(piVar3 + 0xb); piVar3[0xb] = (int)piVar6; piVar3[0xc] = (int)puVar7; *puVar7 = piVar3 + 0xb; if (uVar10 == uVar14) goto LAB_00012dfc; } while (uVar10 < (uint)param_1[0x22]); } iVar5 = whnat_log_get(); uVar4 = extraout_r3_00; if (0 < iVar5) { printk(&_LC47,"token_info_alloc",uVar10,0,uVar14); uVar4 = extraout_r3_01; } LAB_00012db8: FUN_000123fc(param_1,(int)piVar13,uVar14,uVar4); } LAB_00012dc8: FUN_000124a8(param_1,(int)piVar13); LAB_00012dd4: FUN_000124a8(param_1,(int)piVar13); return 0xffffffff; } undefined4 wed_init(int param_1,undefined4 param_2,int *param_3) { int *piVar1; int iVar2; int iVar3; int iVar4; piVar1 = (int *)platform_get_resource(param_1,0x200,param_2); iVar2 = platform_get_irq(param_1,param_2); iVar3 = devm_ioremap(param_1 + 0x10,*piVar1,(piVar1[1] + 1) - *piVar1); iVar4 = whnat_log_get(); if (-1 < iVar4) { printk(&_LC51,"wed_init",param_2,iVar2,iVar3); } param_3[1] = iVar3; *param_3 = param_1; param_3[2] = iVar2; wed_ring_init(param_3); wed_token_buf_init(param_3); wed_ser_init((int)param_3); return 0; } void dump_wed_basic(int param_1) { int iVar1; undefined4 extraout_r1; undefined4 uVar2; undefined4 extraout_r1_00; undefined4 extraout_r2; undefined4 uVar3; undefined4 extraout_r2_00; undefined4 extraout_r3; undefined4 uVar4; undefined4 extraout_r3_00; uint uVar5; int iVar6; iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC52,*(undefined4 *)(param_1 + 4)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC53,*(undefined4 *)(param_1 + 8)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC54); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC55); } FUN_00011ecc((undefined4 *)(param_1 + 0x88)); iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC56); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC57,*(undefined4 *)(param_1 + 0xe0)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC58,*(undefined4 *)(param_1 + 0xd8)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC59,*(undefined4 *)(param_1 + 0xdc)); } iVar1 = whnat_log_get(); uVar2 = extraout_r1; uVar3 = extraout_r2; uVar4 = extraout_r3; if (-1 < iVar1) { printk(&_LC60); uVar2 = extraout_r1_00; uVar3 = extraout_r2_00; uVar4 = extraout_r3_00; } whnat_dump_dmabuf(*(undefined4 **)(param_1 + 0xe4),uVar2,uVar3,uVar4); if (*(int *)(param_1 + 0xd8) == 0) { return; } uVar5 = 0; do { iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC61,uVar5); } iVar6 = uVar5 * 0xc024 + *(int *)(param_1 + 0xe8); iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC62,*(undefined4 *)(iVar6 + 0xc014)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC63,*(undefined4 *)(iVar6 + 0xc018)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC64,*(undefined4 *)(iVar6 + 0xc01c)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC65,*(undefined4 *)(iVar6 + 0xc020)); } uVar5 = uVar5 + 1 & 0xff; } while (uVar5 < *(uint *)(param_1 + 0xd8)); return; } void wed_proc_handle(int param_1,undefined4 param_2,char *param_3) { char *pcVar1; uint uVar2; uint uVar3; int iVar4; undefined4 extraout_r1; undefined4 uVar5; undefined4 extraout_r1_00; undefined4 extraout_r2; undefined4 uVar6; undefined4 extraout_r2_00; undefined4 extraout_r3; undefined4 uVar7; undefined4 extraout_r3_00; undefined4 extraout_r3_01; undefined4 extraout_r3_02; undefined4 extraout_r3_03; undefined4 extraout_r3_04; undefined4 extraout_r3_05; undefined4 extraout_r3_06; undefined4 extraout_r3_07; undefined4 extraout_r3_08; undefined4 extraout_r3_09; undefined4 extraout_r3_10; undefined4 extraout_r3_11; undefined4 extraout_r3_12; undefined4 extraout_r3_13; undefined4 extraout_r3_14; undefined4 extraout_r3_15; undefined4 extraout_r3_16; undefined4 extraout_r3_17; undefined4 extraout_r3_18; undefined4 extraout_r3_19; undefined4 extraout_r3_20; undefined4 extraout_r3_21; undefined4 extraout_r3_22; undefined4 extraout_r3_23; undefined4 extraout_r3_24; undefined4 extraout_r3_25; undefined4 extraout_r3_26; undefined4 extraout_r3_27; undefined4 extraout_r3_28; undefined4 extraout_r3_29; undefined4 extraout_r3_30; undefined4 extraout_r3_31; int iVar8; int iVar9; undefined4 *puVar10; char *local_24; uint local_20; undefined1 auStack_1c [8]; local_24 = param_3; switch(param_2) { case 0: dump_wed_basic(param_1); return; case 1: FUN_00011ecc((undefined4 *)(param_1 + 0x88)); return; case 2: strsep(&local_24," "); pcVar1 = strsep(&local_24," "); local_20 = whnat_str_tol(pcVar1,auStack_1c,0x10); dump_token_info(param_1 + 0x88,local_20); return; case 3: strsep(&local_24," "); pcVar1 = strsep(&local_24," "); uVar2 = whnat_str_tol(pcVar1,auStack_1c,10); uVar2 = uVar2 & 0xff; pcVar1 = strsep(&local_24," "); uVar3 = whnat_str_tol(pcVar1,auStack_1c,0x10); iVar9 = *(int *)(param_1 + 0xf0); iVar8 = uVar2 * 0xc024 + *(int *)(param_1 + 0xe8); local_20 = uVar3; iVar4 = whnat_log_get(); if (-1 < iVar4) { printk(&_LC67,uVar2,uVar3); } wifi_dump_tx_ring_info((int *)(iVar9 + 4),uVar2,uVar3); iVar4 = whnat_log_get(); uVar5 = extraout_r1; uVar6 = extraout_r2; uVar7 = extraout_r3; if (-1 < iVar4) { printk(&_LC68,uVar2,uVar3); uVar5 = extraout_r1_00; uVar6 = extraout_r2_00; uVar7 = extraout_r3_31; } puVar10 = (undefined4 *)(iVar8 + uVar3 * 0x18); whnat_dump_dmacb(puVar10,uVar5,uVar6,uVar7); whnat_dump_raw("WPDMA_TX_RING",puVar10[1],*(uint *)(iVar8 + uVar3 * 0x18)); break; case 5: iVar4 = whnat_log_get(); uVar5 = extraout_r3_00; if (-1 < iVar4) { printk(&_LC70); uVar5 = extraout_r3_30; } dump_wed_value(param_1,"WED_IRQ_MON",0x50,uVar5); dump_wed_value(param_1,"WED_TX_BM_VB_FREE_0_31",0xb0,extraout_r3_01); dump_wed_value(param_1,"WED_TX_BM_VB_FREE_32_63",0xb4,extraout_r3_02); dump_wed_value(param_1,"WED_TX_BM_VB_USED_0_31",0xb8,extraout_r3_03); dump_wed_value(param_1,"WED_TX_BM_VB_USED_32_63",0xbc,extraout_r3_04); dump_wed_value(param_1,"WED_WDMA_INT_MON",0xa3c,extraout_r3_05); dump_wed_value(param_1,"WED_WPDMA_INT_CLR",0x528,extraout_r3_06); dump_wed_value(param_1,"WED_WPDMA_INT_CTRL",0x520,extraout_r3_07); dump_wed_value(param_1,"WED_WPDMA_INT_MSK",0x524,extraout_r3_08); dump_wed_value(param_1,"WED_WPDMA_INT_MON",0x52c,extraout_r3_09); dump_wed_value(param_1,"WED_WPDMA_SPR",0x53c,extraout_r3_10); dump_wed_value(param_1,"WED_PCIE_INTM_REC",0x578,extraout_r3_11); dump_wed_value(param_1,"WED_PCIE_INT_CTRL",0x57c,extraout_r3_12); dump_wed_value(param_1,"WED_TXD_DW0",0x100,extraout_r3_13); dump_wed_value(param_1,"WED_TXD_DW1",0x104,extraout_r3_14); dump_wed_value(param_1,"WED_TXD_DW2",0x108,extraout_r3_15); dump_wed_value(param_1,"WED_TXD_DW3",0x10c,extraout_r3_16); dump_wed_value(param_1,"WED_TXD_DW4",0x110,extraout_r3_17); dump_wed_value(param_1,"WED_TXD_DW5",0x114,extraout_r3_18); dump_wed_value(param_1,"WED_TXD_DW6",0x118,extraout_r3_19); dump_wed_value(param_1,"WED_TXD_DW7",0x11c,extraout_r3_20); dump_wed_value(param_1,"WED_TXP_DW0",0x120,extraout_r3_21); dump_wed_value(param_1,"WED_TXP_DW1",0x124,extraout_r3_22); dump_wed_value(param_1,"WED_DBG_CTRL",0xbc0,extraout_r3_23); dump_wed_value(param_1,"WED_DBG_PRB0",0xbd0,extraout_r3_24); dump_wed_value(param_1,"WED_DBG_PRB1",0xbd4,extraout_r3_25); dump_wed_value(param_1,"WED_DBG_PRB2",0xbd8,extraout_r3_26); dump_wed_value(param_1,"WED_DBG_PRB3",0xbdc,extraout_r3_27); dump_wed_value(param_1,"WED_TX_COHERENT_MIB",0x2d0,extraout_r3_28); dump_wed_value(param_1,"WED_TXP_DW0",0x120,extraout_r3_29); return; case 8: whnat_hal_bfm_freecnt(param_1,&local_20); return; case 9: case 10: whnat_hal_hw_reset(*(int *)(param_1 + 0xf0),0); return; } return; } void wed_eint_handle(undefined4 param_1,uint param_2) { int iVar1; if (((param_2 & 1) != 0) && (iVar1 = whnat_log_get(), 0 < iVar1)) { printk(&_LC100,"wed_eint_handle"); } if (((param_2 & 2) != 0) && (iVar1 = whnat_log_get(), 0 < iVar1)) { printk(&_LC101,"wed_eint_handle"); } if (((param_2 & 0x400000) != 0) && (iVar1 = whnat_log_get(), 0 < iVar1)) { printk(&_LC102,"wed_eint_handle"); } if (((param_2 & 0x200000) != 0) && (iVar1 = whnat_log_get(), 0 < iVar1)) { printk(&_LC103,"wed_eint_handle"); } if (((param_2 & 0x80000) != 0) && (iVar1 = whnat_log_get(), 0 < iVar1)) { printk(&_LC104,"wed_eint_handle"); } if (((param_2 & 0x40000) != 0) && (iVar1 = whnat_log_get(), 2 < iVar1)) { printk(&_LC105,"wed_eint_handle"); } if (((param_2 & 0x20000) != 0) && (iVar1 = whnat_log_get(), 0 < iVar1)) { printk(&_LC106,"wed_eint_handle"); } if (((param_2 & 0x10000) != 0) && (iVar1 = whnat_log_get(), 0 < iVar1)) { printk(&_LC107,"wed_eint_handle"); } if (((param_2 & 0x10) != 0) && (iVar1 = whnat_log_get(), 0 < iVar1)) { printk(&_LC108,"wed_eint_handle"); } if ((param_2 & 0x100000) == 0) { return; } iVar1 = whnat_log_get(); if (iVar1 < 1) { return; } printk(&_LC109,"wed_eint_handle"); return; } void FUN_000139e0(int *param_1,uint *param_2) { uint uVar1; uint uVar2; if (*param_2 != 0) { uVar2 = 0; do { uVar1 = uVar2 & 0xff; uVar2 = uVar2 + 1; whnat_dma_buf_free(*param_1,(int *)(param_2[3] + uVar1 * 0x14)); } while (uVar2 < *param_2); } if (param_2[4] != 0) { kfree(); } if (param_2[3] != 0) { kfree(); } __memzero(param_2,0x14); return; } // WARNING: Globals starting with '_' overlap smaller symbols at the same address undefined4 FUN_00013a54(int *param_1,uint *param_2) { undefined4 *puVar1; int iVar2; uint uVar3; int iVar4; uint uVar5; int iVar6; uint uVar7; uint uVar8; iVar2 = param_1[0xb]; param_2[2] = 0x10; uVar3 = *(uint *)(iVar2 + 0x14); param_2[1] = 0x400; *param_2 = uVar3; iVar2 = uVar3 * 0x14; uVar3 = __kmalloc(iVar2,0x24000c0); param_2[3] = uVar3; if (iVar2 != 0) { __memzero(uVar3,iVar2); uVar3 = param_2[3]; } if (uVar3 != 0) { iVar2 = *param_2 * 0xc024; uVar3 = __kmalloc(iVar2,0x24000c0); param_2[4] = uVar3; if (iVar2 != 0) { __memzero(uVar3,iVar2); uVar3 = param_2[4]; } if (uVar3 != 0) { if (*param_2 == 0) { return 0; } uVar5 = param_2[1]; uVar7 = 0; while( true ) { iVar6 = uVar7 * 0xc024 + uVar3; iVar2 = uVar7 * 0x10; uVar8 = param_2[3]; uVar3 = param_2[2]; *(int *)(iVar6 + 0xc014) = iVar2 + 0x100; *(int *)(iVar6 + 0xc020) = iVar2 + 0x104; *(int *)(iVar6 + 0xc018) = iVar2 + 0x108; *(int *)(iVar6 + 0xc01c) = iVar2 + 0x10c; if (uVar7 == 2) break; if ((&glb_wdma_rx_ring_ctrl)[uVar7] == 0) { iVar2 = kmem_cache_alloc(_DAT_0001d104,0x24000c0); (&glb_wdma_rx_ring_ctrl)[uVar7] = iVar2; if (iVar2 == 0) { iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC1,"rx_ring_init",uVar7,0x14); } goto LAB_00013b58; } __memzero(iVar2,0x14); iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC2,"rx_ring_init",uVar7,uVar3 * uVar5); } iVar2 = whnat_dma_buf_alloc(*param_1,(int *)(&glb_wdma_rx_ring_ctrl)[uVar7],uVar3 * uVar5) ; if (iVar2 < 0) { iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC3,"rx_ring_init"); } goto LAB_00013b58; } } iVar4 = uVar8 + uVar7 * 0x14; iVar2 = *(int *)(&glb_wdma_rx_ring_ctrl)[uVar7]; *(int *)(uVar8 + uVar7 * 0x14) = iVar2; *(undefined4 *)(iVar4 + 4) = *(undefined4 *)((&glb_wdma_rx_ring_ctrl)[uVar7] + 4); *(undefined4 *)(iVar4 + 0x10) = *(undefined4 *)((&glb_wdma_rx_ring_ctrl)[uVar7] + 0x10); if (iVar2 != 0) { __memzero(); } uVar5 = param_2[1]; if (uVar5 != 0) { uVar3 = 0; puVar1 = (undefined4 *)(iVar6 + 0xc); do { *puVar1 = 0; iVar2 = uVar3 * 0x10; puVar1[-3] = 0x10; uVar3 = uVar3 + 1; iVar6 = *(int *)(iVar4 + 4) + iVar2; puVar1[-2] = iVar6; puVar1[-1] = iVar2 + *(int *)(iVar4 + 0x10); *(byte *)(iVar6 + 7) = *(byte *)(iVar6 + 7) | 0x80; uVar5 = param_2[1]; puVar1 = puVar1 + 6; } while (uVar3 < uVar5); } uVar7 = uVar7 + 1; if (*param_2 <= uVar7) { return 0; } uVar3 = param_2[4]; } iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC0,2); } } } LAB_00013b58: iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC4,"wdma_rx_ring_init"); } FUN_000139e0(param_1,param_2); return 0xffffffff; } undefined4 wdma_init(int param_1,int param_2,int *param_3) { int iVar1; int iVar2; int *piVar3; undefined4 local_1c; local_1c = 0; local_1c = of_find_compatible_node(0,0,"en751221,wdma"); iVar1 = whnat_log_get(); if (1 < iVar1) { printk(&_LC6,"wdma_init",&local_1c); } iVar1 = of_iomap(local_1c,param_2); *param_3 = param_1; param_3[1] = iVar1; iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC7,"wdma_init",param_2,param_3[1]); } piVar3 = param_3 + 1; iVar1 = 0; do { iVar2 = irq_of_parse_and_map(local_1c,(param_2 * 3 & 0xffU) + iVar1 & 0xff); piVar3 = piVar3 + 1; *piVar3 = iVar2; iVar2 = whnat_log_get(); if (-1 < iVar2) { printk(&_LC8,"wdma_init",param_2,iVar1,*piVar3); } iVar1 = iVar1 + 1; } while (iVar1 != 3); __memzero(param_3 + 5,0x14); FUN_00013a54(param_3,(uint *)(param_3 + 5)); return 0; } undefined4 wdma_exit(undefined4 param_1,int *param_2) { if (param_2 != (int *)0x0) { FUN_000139e0(param_2,(uint *)(param_2 + 5)); iounmap(param_2[1]); __memzero(param_2,0x30); return 0; } return 0; } undefined4 wdma_ring_init(int *param_1) { FUN_00013a54(param_1,(uint *)(param_1 + 5)); return 0; } void wdma_ring_exit(int *param_1) { FUN_000139e0(param_1,(uint *)(param_1 + 5)); return; } void dump_wdma_value(int param_1,undefined4 param_2,int param_3,undefined4 param_4) { int iVar1; undefined4 uVar2; uVar2 = *(undefined4 *)(param_3 + *(int *)(param_1 + 4)); DataSynchronizationBarrier(0xf); iVar1 = whnat_log_get(); if (iVar1 < 0) { return; } printk(&_LC9,param_2,uVar2,param_4); return; } void wdma_proc_handle(undefined4 *param_1,int param_2,char *param_3) { char *pcVar1; uint uVar2; int iVar3; int iVar4; undefined4 extraout_r1; undefined4 extraout_r1_00; undefined4 uVar5; undefined4 extraout_r1_01; undefined4 extraout_r1_02; undefined4 extraout_r2; undefined4 extraout_r2_00; undefined4 uVar6; undefined4 extraout_r2_01; undefined4 extraout_r2_02; undefined4 extraout_r3; undefined4 extraout_r3_00; undefined4 uVar7; undefined4 extraout_r3_01; undefined4 extraout_r3_02; int iVar8; undefined4 *puVar9; int iVar10; char *local_24 [2]; undefined1 auStack_1c [4]; local_24[0] = param_3; if (param_2 == 0) { iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC10,param_1[1]); } iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC11,param_1[2],param_1[3],param_1[4]); } iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC12,*param_1); } iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC13,param_1[10]); } iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC14,param_1[5]); } iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC15,param_1[6]); } iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC16,param_1[7]); } if (param_1[5] != 0) { iVar4 = 0; iVar3 = 0; uVar2 = 0; do { uVar2 = uVar2 + 1; iVar10 = param_1[9] + iVar3; iVar8 = whnat_log_get(); iVar3 = iVar3 + 0xc024; if (-1 < iVar8) { printk(&_LC17,*(undefined4 *)(iVar10 + 0xc014)); } iVar8 = whnat_log_get(); if (-1 < iVar8) { printk(&_LC18,*(undefined4 *)(iVar10 + 0xc020)); } iVar8 = whnat_log_get(); if (-1 < iVar8) { printk(&_LC19,*(undefined4 *)(iVar10 + 0xc018)); } iVar8 = whnat_log_get(); uVar5 = extraout_r1_00; uVar6 = extraout_r2_00; uVar7 = extraout_r3_00; if (-1 < iVar8) { printk(&_LC20,*(undefined4 *)(iVar10 + 0xc01c)); uVar5 = extraout_r1_01; uVar6 = extraout_r2_01; uVar7 = extraout_r3_01; } puVar9 = (undefined4 *)(param_1[8] + iVar4); iVar4 = iVar4 + 0x14; whnat_dump_dmabuf(puVar9,uVar5,uVar6,uVar7); } while (uVar2 < (uint)param_1[5]); return; } } else if (param_2 == 1) { strsep(local_24," "); pcVar1 = strsep(local_24," "); uVar2 = whnat_str_tol(pcVar1,auStack_1c,10); pcVar1 = strsep(local_24," "); iVar3 = whnat_str_tol(pcVar1,auStack_1c,0x10); iVar8 = (uVar2 & 0xff) * 0xc024 + param_1[9]; iVar4 = whnat_log_get(); uVar5 = extraout_r1; uVar6 = extraout_r2; uVar7 = extraout_r3; if (-1 < iVar4) { printk(&_LC22,uVar2 & 0xff,iVar3); uVar5 = extraout_r1_02; uVar6 = extraout_r2_02; uVar7 = extraout_r3_02; } puVar9 = (undefined4 *)(iVar8 + iVar3 * 0x18); whnat_dump_dmacb(puVar9,uVar5,uVar6,uVar7); whnat_dump_raw("WDMA_RX_RING",puVar9[1],*(uint *)(iVar8 + iVar3 * 0x18)); } return; } undefined4 wdma_proc_show(int param_1) { int iVar1; undefined4 uVar2; uVar2 = *(undefined4 *)(param_1 + 0x54); iVar1 = whnat_log_get(); if (2 < iVar1) { printk(&_LC0,uVar2); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC1); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC2); } return 0; } undefined4 wed_proc_show(int param_1) { int iVar1; undefined4 uVar2; uVar2 = *(undefined4 *)(param_1 + 0x54); iVar1 = whnat_log_get(); if (2 < iVar1) { printk(&_LC3,uVar2); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC4); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC5); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC6); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC7); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC8); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC9); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC10); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC11); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC12); } return 0; } undefined4 whnat_proc_ctrl_show(int param_1) { int iVar1; char *pcVar2; int iVar3; iVar3 = *(int *)(param_1 + 0x54); iVar1 = whnat_log_get(); if (-1 < iVar1) { pcVar2 = "TRUE"; if (*(char *)(iVar3 + 0x1b1) == '\0') { pcVar2 = "FALSE"; } printk(&_LC15,pcVar2); } iVar1 = whnat_log_get(); if (-1 < iVar1) { pcVar2 = "TRUE"; if (*(char *)(iVar3 + 0x1b0) == '\0') { pcVar2 = "FALSE"; } printk(&_LC16,pcVar2); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC17); } return 0; } undefined4 whnat_proc_cr_show(int param_1) { int iVar1; int iVar2; iVar2 = *(int *)(param_1 + 0x54); iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC18,*(undefined4 *)(iVar2 + 0xbc)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC19,*(undefined4 *)(iVar2 + 0x8c)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC20,*(undefined4 *)(iVar2 + 0x28)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC21); } return 0; } undefined4 whnat_proc_trace_show(int param_1) { int iVar1; int iVar2; iVar2 = *(int *)(param_1 + 0x54); iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC22); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC23,*(undefined1 *)(iVar2 + 0x20)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC24,*(undefined4 *)(iVar2 + 0x1c)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC25,*(undefined4 *)(iVar2 + 0x24)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC26,*(undefined4 *)(iVar2 + 0x28)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC27); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC28); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC29); } return 0; } void wdma_proc_open(undefined4 param_1,int param_2) { undefined4 uVar1; uVar1 = PDE_DATA(*(undefined4 *)(param_2 + 0x10)); single_open(param_2,wdma_proc_show,uVar1); return; } void wed_proc_open(undefined4 param_1,int param_2) { undefined4 uVar1; uVar1 = PDE_DATA(*(undefined4 *)(param_2 + 0x10)); single_open(param_2,wed_proc_show,uVar1); return; } void whnat_proc_ctrl_open(undefined4 param_1,int param_2) { undefined4 uVar1; uVar1 = PDE_DATA(*(undefined4 *)(param_2 + 0x10)); single_open(param_2,whnat_proc_ctrl_show,uVar1); return; } void whnat_proc_rx_open(undefined4 param_1,int param_2) { undefined4 uVar1; uVar1 = PDE_DATA(*(undefined4 *)(param_2 + 0x10)); single_open(param_2,whnat_proc_rx_show,uVar1); return; } void whnat_proc_tx_open(undefined4 param_1,int param_2) { undefined4 uVar1; uVar1 = PDE_DATA(*(undefined4 *)(param_2 + 0x10)); single_open(param_2,whnat_proc_tx_show,uVar1); return; } void whnat_proc_cfg_open(undefined4 param_1,int param_2) { undefined4 uVar1; uVar1 = PDE_DATA(*(undefined4 *)(param_2 + 0x10)); single_open(param_2,whnat_proc_cfg_show,uVar1); return; } void whnat_proc_cr_open(undefined4 param_1,int param_2) { undefined4 uVar1; uVar1 = PDE_DATA(*(undefined4 *)(param_2 + 0x10)); single_open(param_2,whnat_proc_cr_show,uVar1); return; } void whnat_proc_state_open(undefined4 param_1,int param_2) { undefined4 uVar1; uVar1 = PDE_DATA(*(undefined4 *)(param_2 + 0x10)); single_open(param_2,whnat_proc_state_show,uVar1); return; } void whnat_proc_trace_open(undefined4 param_1,int param_2) { undefined4 uVar1; uVar1 = PDE_DATA(*(undefined4 *)(param_2 + 0x10)); single_open(param_2,whnat_proc_trace_show,uVar1); return; } uint wdma_proc_write(int param_1,uint param_2,uint param_3) { char cVar1; undefined4 *puVar2; int iVar3; uint uVar4; uint uVar5; bool bVar6; undefined1 auStack_60 [4]; undefined1 auStack_5c [4]; char acStack_58 [64]; puVar2 = (undefined4 *)PDE_DATA(*(undefined4 *)(param_1 + 0x10)); if (param_2 != 0) { uVar4 = *(uint *)(((uint)auStack_60 & 0xffffc000) + 8); bVar6 = CARRY4(param_2,param_3); if (!bVar6) { bVar6 = uVar4 < param_2 + param_3 || (param_2 + param_3) - uVar4 < (uint)bVar6; } if (!bVar6) { uVar4 = 0; } if (uVar4 == 0) { uVar5 = coproc_movefrom_Domain_Access_Control(); uVar4 = uVar5 & 0xfffffff3 | 4; coproc_moveto_Domain_Access_Control(uVar4); InstructionSynchronizationBarrier(0xf); iVar3 = arm_copy_from_user(acStack_58,param_2,param_3,uVar4); coproc_moveto_Domain_Access_Control(uVar5); InstructionSynchronizationBarrier(0xf); if (iVar3 != 0) { return param_3; } } else if (param_3 != 0) { __memzero(acStack_58,param_3); return param_3; } cVar1 = whnat_str_tol(acStack_58,auStack_5c,10); iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC30,"wdma_proc_write",(int)cVar1); } wdma_proc_handle(puVar2,(int)cVar1,acStack_58); } return param_3; } uint wed_proc_write(int param_1,uint param_2,uint param_3) { char cVar1; int iVar2; int iVar3; uint uVar4; uint uVar5; bool bVar6; undefined1 auStack_60 [4]; undefined1 auStack_5c [4]; char acStack_58 [64]; iVar2 = PDE_DATA(*(undefined4 *)(param_1 + 0x10)); if (param_2 != 0) { uVar4 = *(uint *)(((uint)auStack_60 & 0xffffc000) + 8); bVar6 = CARRY4(param_2,param_3); if (!bVar6) { bVar6 = uVar4 < param_2 + param_3 || (param_2 + param_3) - uVar4 < (uint)bVar6; } if (!bVar6) { uVar4 = 0; } if (uVar4 == 0) { uVar5 = coproc_movefrom_Domain_Access_Control(); uVar4 = uVar5 & 0xfffffff3 | 4; coproc_moveto_Domain_Access_Control(uVar4); InstructionSynchronizationBarrier(0xf); iVar3 = arm_copy_from_user(acStack_58,param_2,param_3,uVar4); coproc_moveto_Domain_Access_Control(uVar5); InstructionSynchronizationBarrier(0xf); if (iVar3 != 0) { return param_3; } } else if (param_3 != 0) { __memzero(acStack_58,param_3); return param_3; } cVar1 = whnat_str_tol(acStack_58,auStack_5c,10); iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC30,"wed_proc_write",(int)cVar1); } wed_proc_handle(iVar2,(int)cVar1,acStack_58); } return param_3; } uint whnat_proc_ctrl_write(int param_1,uint param_2,uint param_3) { char cVar1; byte bVar2; int iVar3; char *pcVar4; uint uVar5; int iVar6; uint uVar7; bool bVar8; undefined1 auStack_60 [4]; char *local_5c; char acStack_58 [64]; local_5c = acStack_58; iVar3 = PDE_DATA(*(undefined4 *)(param_1 + 0x10)); if (param_2 != 0) { uVar5 = *(uint *)(((uint)auStack_60 & 0xffffc000) + 8); bVar8 = CARRY4(param_2,param_3); if (!bVar8) { bVar8 = uVar5 < param_2 + param_3 || (param_2 + param_3) - uVar5 < (uint)bVar8; } if (!bVar8) { uVar5 = 0; } if (uVar5 == 0) { uVar7 = coproc_movefrom_Domain_Access_Control(); uVar5 = uVar7 & 0xfffffff3 | 4; coproc_moveto_Domain_Access_Control(uVar5); InstructionSynchronizationBarrier(0xf); iVar6 = arm_copy_from_user(acStack_58,param_2,param_3,uVar5); coproc_moveto_Domain_Access_Control(uVar7); InstructionSynchronizationBarrier(0xf); if (iVar6 != 0) { return param_3; } } else if (param_3 != 0) { __memzero(acStack_58,param_3); return param_3; } pcVar4 = strsep(&local_5c," "); cVar1 = whnat_str_tol(pcVar4,auStack_60,10); pcVar4 = strsep(&local_5c," "); iVar6 = (int)cVar1; bVar2 = whnat_str_tol(pcVar4,auStack_60,10); uVar5 = (uint)bVar2; if (iVar6 == 0) { if (uVar5 != *(byte *)(iVar3 + 0x1b1)) { *(byte *)(iVar3 + 0x1b1) = bVar2; } } else if (iVar6 == 1) { if (uVar5 != *(byte *)(iVar3 + 0x1b0)) { wifi_chip_cr_mirror_set((int *)(iVar3 + 4),uVar5); *(byte *)(iVar3 + 0x1b0) = bVar2; } } else { iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC32,"whnat_proc_ctrl_handle",iVar6); } } iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC33,"whnat_proc_ctrl_write",iVar6,(int)(char)bVar2); } } return param_3; } undefined4 whnat_proc_rx_show(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { whnat_dump_rxinfo(*(int *)(param_1 + 0x54),param_2,param_3,param_4); return 0; } undefined4 whnat_proc_tx_show(int param_1) { whnat_dump_txinfo(*(int *)(param_1 + 0x54)); return 0; } undefined4 whnat_proc_cfg_show(int param_1) { whnat_dump_cfg(*(int *)(param_1 + 0x54)); return 0; } uint whnat_proc_cr_write(int param_1,uint param_2,uint param_3) { char cVar1; char cVar2; int iVar3; char *pcVar4; int iVar5; uint uVar6; uint uVar7; bool bVar8; undefined1 auStack_64 [4]; char *local_60; undefined4 local_5c; char acStack_58 [64]; local_5c = 0; local_60 = acStack_58; iVar3 = PDE_DATA(*(undefined4 *)(param_1 + 0x10)); if (param_2 != 0) { uVar6 = *(uint *)(((uint)&stack0xffffff90 & 0xffffc000) + 8); bVar8 = CARRY4(param_2,param_3); if (!bVar8) { bVar8 = uVar6 < param_2 + param_3 || (param_2 + param_3) - uVar6 < (uint)bVar8; } if (!bVar8) { uVar6 = 0; } if (uVar6 == 0) { uVar7 = coproc_movefrom_Domain_Access_Control(); uVar6 = uVar7 & 0xfffffff3 | 4; coproc_moveto_Domain_Access_Control(uVar6); InstructionSynchronizationBarrier(0xf); iVar5 = arm_copy_from_user(acStack_58,param_2,param_3,uVar6); coproc_moveto_Domain_Access_Control(uVar7); InstructionSynchronizationBarrier(0xf); if (iVar5 != 0) { return param_3; } } else if (param_3 != 0) { __memzero(acStack_58,param_3); return param_3; } pcVar4 = strsep(&local_60," "); cVar1 = whnat_str_tol(pcVar4,auStack_64,10); pcVar4 = strsep(&local_60," "); cVar2 = whnat_str_tol(pcVar4,auStack_64,10); pcVar4 = strsep(&local_60," "); iVar5 = whnat_str_tol(pcVar4,auStack_64,0x10); if (cVar2 != '\0') { pcVar4 = strsep(&local_60," "); local_5c = whnat_str_tol(pcVar4,auStack_64,0x10); } whnat_hal_cr_handle(iVar3,(int)cVar1,(int)cVar2,iVar5,&local_5c); iVar3 = whnat_log_get(); if (-1 < iVar3) { printk(&_LC34,"whnat_proc_cr_write",(int)cVar1,(int)cVar2); } } return param_3; } undefined4 whnat_proc_state_show(int param_1) { int iVar1; whnat_proc_handle(*(undefined1 **)(param_1 + 0x54)); iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC35); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC36); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC37); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC38); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC39); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC40); } return 0; } uint whnat_proc_state_write(int param_1,uint param_2,uint param_3) { char cVar1; int iVar2; uint uVar3; int iVar4; uint uVar5; bool bVar6; undefined1 auStack_60 [4]; undefined1 auStack_5c [4]; undefined1 auStack_58 [64]; iVar2 = PDE_DATA(*(undefined4 *)(param_1 + 0x10)); if (param_2 != 0) { uVar3 = *(uint *)(((uint)auStack_60 & 0xffffc000) + 8); bVar6 = CARRY4(param_2,param_3); if (!bVar6) { bVar6 = uVar3 < param_2 + param_3 || (param_2 + param_3) - uVar3 < (uint)bVar6; } if (!bVar6) { uVar3 = 0; } if (uVar3 == 0) { uVar5 = coproc_movefrom_Domain_Access_Control(); uVar3 = uVar5 & 0xfffffff3 | 4; coproc_moveto_Domain_Access_Control(uVar3); InstructionSynchronizationBarrier(0xf); iVar4 = arm_copy_from_user(auStack_58,param_2,param_3,uVar3); coproc_moveto_Domain_Access_Control(uVar5); InstructionSynchronizationBarrier(0xf); if (iVar4 != 0) { return param_3; } } else if (param_3 != 0) { __memzero(auStack_58,param_3); return param_3; } cVar1 = whnat_str_tol(auStack_58,auStack_5c,10); iVar4 = (int)cVar1; if (iVar4 == 10) { whnat_hal_ser_trigger(iVar2); } else if (iVar4 == 0xb) { wed_ser_dump(iVar2 + 0xb8); } else { iVar2 = whnat_log_get(); if (-1 < iVar2) { printk(&_LC41,"whnat_proc_state_write",iVar4); } whnat_log_set(cVar1); } } return param_3; } uint whnat_proc_trace_write(int param_1,uint param_2,uint param_3) { char cVar1; undefined1 uVar2; int iVar3; char *pcVar4; int iVar5; undefined4 uVar6; uint uVar7; int iVar8; uint uVar9; bool bVar10; undefined1 auStack_60 [4]; char *local_5c; char acStack_58 [64]; local_5c = acStack_58; iVar3 = PDE_DATA(*(undefined4 *)(param_1 + 0x10)); if (param_2 != 0) { uVar7 = *(uint *)(((uint)auStack_60 & 0xffffc000) + 8); bVar10 = CARRY4(param_2,param_3); if (!bVar10) { bVar10 = uVar7 < param_2 + param_3 || (param_2 + param_3) - uVar7 < (uint)bVar10; } if (!bVar10) { uVar7 = 0; } if (uVar7 == 0) { uVar9 = coproc_movefrom_Domain_Access_Control(); uVar7 = uVar9 & 0xfffffff3 | 4; coproc_moveto_Domain_Access_Control(uVar7); InstructionSynchronizationBarrier(0xf); iVar8 = arm_copy_from_user(acStack_58,param_2,param_3,uVar7); coproc_moveto_Domain_Access_Control(uVar9); InstructionSynchronizationBarrier(0xf); if (iVar8 != 0) { return param_3; } } else if (param_3 != 0) { __memzero(acStack_58,param_3); return param_3; } pcVar4 = strsep(&local_5c," "); cVar1 = whnat_str_tol(pcVar4,auStack_60,10); pcVar4 = strsep(&local_5c," "); iVar8 = (int)cVar1; if (iVar8 == 1) { uVar6 = whnat_str_tol(pcVar4,auStack_60,0x10); *(undefined4 *)(iVar3 + 0x24) = uVar6; } else if (iVar8 == 2) { uVar6 = whnat_str_tol(pcVar4,auStack_60,0x10); *(undefined4 *)(iVar3 + 0x28) = uVar6; } else if (iVar8 == 0) { uVar2 = whnat_str_tol(pcVar4,auStack_60,10); *(undefined1 *)(iVar3 + 0x21) = uVar2; } iVar5 = whnat_log_get(); if (-1 < iVar5) { printk(&_LC42,iVar8); } iVar8 = whnat_log_get(); if (-1 < iVar8) { printk(&_LC43,*(undefined1 *)(iVar3 + 0x21)); } iVar8 = whnat_log_get(); if (-1 < iVar8) { printk(&_LC44,*(undefined4 *)(iVar3 + 0x24)); } iVar8 = whnat_log_get(); if (-1 < iVar8) { printk(&_LC45,*(undefined4 *)(iVar3 + 0x28)); } whnat_hal_trace_set((int *)(iVar3 + 0x1c)); } return param_3; } undefined4 wdma_entry_proc_init(int param_1,int param_2) { int iVar1; undefined4 uVar2; iVar1 = proc_create_data(&_LC46,0,*(undefined4 *)(param_1 + 0x1b4),&PTR___this_module_000190d8, param_2); if (iVar1 == 0) { iVar1 = whnat_log_get(); if (iVar1 < 1) { uVar2 = 0xffffffff; } else { printk(&_LC47,&_LC46); uVar2 = 0xffffffff; } } else { *(int *)(param_2 + 0x28) = iVar1; iVar1 = whnat_log_get(); if (iVar1 < 2) { uVar2 = 0; } else { printk(&_LC48,&_LC46); uVar2 = 0; } } return uVar2; } void wdma_entry_proc_exit(int param_1,int param_2) { if (*(int *)(param_1 + 0x1b4) == 0 || *(int *)(param_2 + 0x28) == 0) { return; } remove_proc_entry(&_LC46,*(int *)(param_1 + 0x1b4)); return; } undefined4 wed_entry_proc_init(int param_1,int param_2) { int iVar1; undefined4 uVar2; iVar1 = proc_create_data(&_LC49,0,*(undefined4 *)(param_1 + 0x1b4),&PTR___this_module_00019144, param_2); if (iVar1 == 0) { iVar1 = whnat_log_get(); if (iVar1 < 1) { uVar2 = 0xffffffff; } else { printk(&_LC47,&_LC49); uVar2 = 0xffffffff; } } else { *(int *)(param_2 + 0xec) = iVar1; iVar1 = whnat_log_get(); if (iVar1 < 0) { uVar2 = 0; } else { printk(&_LC50,&_LC49); uVar2 = 0; } } return uVar2; } void wed_entry_proc_exit(int param_1,int param_2) { if (*(int *)(param_1 + 0x1b4) == 0 || *(int *)(param_2 + 0xec) == 0) { return; } remove_proc_entry(&_LC49,*(int *)(param_1 + 0x1b4)); return; } undefined4 whnat_entry_proc_init(int param_1,byte *param_2) { undefined4 uVar1; int iVar2; undefined4 uVar3; char local_50 [64]; uVar3 = *(undefined4 *)(param_1 + 0x30); local_50[0] = '\0'; local_50[1] = '\0'; local_50[2] = '\0'; local_50[3] = '\0'; memset(local_50 + 4,0,0x3c); snprintf(local_50,0x40,"%s%d","whnat",(uint)*param_2); uVar1 = proc_mkdir(local_50,uVar3); *(undefined4 *)(param_2 + 0x1b4) = uVar1; iVar2 = proc_create_data(&_LC53,0,uVar1,&PTR___this_module_000191b0,param_2); if (iVar2 == 0) { iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC54,&_LC53); } } else { *(int *)(param_2 + 0x1b8) = iVar2; iVar2 = proc_create_data(&_LC55,0,*(undefined4 *)(param_2 + 0x1b4),&PTR___this_module_0001921c, param_2); if (iVar2 == 0) { iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC54,&_LC55); } } else { *(int *)(param_2 + 0x1bc) = iVar2; iVar2 = proc_create_data(&_LC56,0,*(undefined4 *)(param_2 + 0x1b4),&PTR___this_module_00019288 ,param_2); if (iVar2 == 0) { iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC54,&_LC56); } } else { *(int *)(param_2 + 0x1c0) = iVar2; iVar2 = proc_create_data(&_LC57,0,*(undefined4 *)(param_2 + 0x1b4), &PTR___this_module_000192f4,param_2); if (iVar2 == 0) { iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC54,&_LC57); } } else { *(int *)(param_2 + 0x1c4) = iVar2; iVar2 = proc_create_data(&_LC58,0,*(undefined4 *)(param_2 + 0x1b4), &PTR___this_module_00019360,param_2); if (iVar2 == 0) { iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC54,&_LC58); } } else { *(int *)(param_2 + 0x1c8) = iVar2; iVar2 = proc_create_data(&_LC59,0,*(undefined4 *)(param_2 + 0x1b4), &PTR___this_module_000193cc,param_2); if (iVar2 != 0) { *(int *)(param_2 + 0x1cc) = iVar2; iVar2 = whnat_log_get(); if (1 < iVar2) { printk(&_LC50,local_50); return 0; } return 0; } iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC54,&_LC59); } remove_proc_entry(&_LC58,*(undefined4 *)(param_2 + 0x1b4)); } } remove_proc_entry(&_LC57,*(undefined4 *)(param_2 + 0x1b4)); } remove_proc_entry(&_LC55,*(undefined4 *)(param_2 + 0x1b4)); } remove_proc_entry(&_LC53,*(undefined4 *)(param_2 + 0x1b4)); } remove_proc_entry(local_50,uVar3); return 0xffffffff; } void whnat_entry_proc_exit(int param_1,byte *param_2) { int iVar1; undefined4 uVar2; char local_58 [68]; uVar2 = *(undefined4 *)(param_1 + 0x30); iVar1 = *(int *)(param_2 + 0x1b4); local_58[0] = '\0'; local_58[1] = '\0'; local_58[2] = '\0'; local_58[3] = '\0'; memset(local_58 + 4,0,0x3c); if (*(int *)(param_2 + 0x1c0) != 0) { remove_proc_entry(&_LC56,iVar1); param_2[0x1c0] = 0; param_2[0x1c1] = 0; param_2[0x1c2] = 0; param_2[0x1c3] = 0; } if (*(int *)(param_2 + 0x1c4) != 0) { remove_proc_entry(&_LC57,iVar1); param_2[0x1c4] = 0; param_2[0x1c5] = 0; param_2[0x1c6] = 0; param_2[0x1c7] = 0; } if (*(int *)(param_2 + 0x1c8) != 0) { remove_proc_entry(&_LC58,iVar1); param_2[0x1c8] = 0; param_2[0x1c9] = 0; param_2[0x1ca] = 0; param_2[0x1cb] = 0; } if (*(int *)(param_2 + 0x1bc) != 0) { remove_proc_entry(&_LC55,iVar1); param_2[0x1bc] = 0; param_2[0x1bd] = 0; param_2[0x1be] = 0; param_2[0x1bf] = 0; } if (*(int *)(param_2 + 0x1b8) != 0) { remove_proc_entry(&_LC53,iVar1); param_2[0x1b8] = 0; param_2[0x1b9] = 0; param_2[0x1ba] = 0; param_2[0x1bb] = 0; } if (*(int *)(param_2 + 0x1cc) != 0) { remove_proc_entry(&_LC59,iVar1); param_2[0x1cc] = 0; param_2[0x1cd] = 0; param_2[0x1ce] = 0; param_2[0x1cf] = 0; } snprintf(local_58,0x40,"%s%d","whnat",(uint)*param_2); if (iVar1 != 0) { remove_proc_entry(local_58,uVar2); param_2[0x1b4] = 0; param_2[0x1b5] = 0; param_2[0x1b6] = 0; param_2[0x1b7] = 0; } return; } undefined4 whnat_ctrl_proc_init(int param_1) { int iVar1; undefined4 uVar2; iVar1 = proc_mkdir("whnat_ctrl",0); if (iVar1 == 0) { iVar1 = whnat_log_get(); if (iVar1 < 1) { uVar2 = 0xffffffff; } else { printk(&_LC54,"whnat_ctrl"); uVar2 = 0xffffffff; } } else { *(int *)(param_1 + 0x30) = iVar1; iVar1 = proc_create_data("tracer",0,iVar1,&PTR___this_module_00019438,param_1); if (iVar1 == 0) { remove_proc_entry("whnat_ctrl",*(undefined4 *)(param_1 + 0x30)); return 0; } *(int *)(param_1 + 0x34) = iVar1; iVar1 = whnat_log_get(); if (iVar1 < 0) { uVar2 = 0; } else { printk(&_LC50,"whnat_ctrl"); uVar2 = 0; } } return uVar2; } void whnat_ctrl_proc_exit(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { if (*(int *)(param_1 + 0x30) == 0) { return; } remove_proc_entry("tracer"); remove_proc_entry("whnat_ctrl",0); return; } void whnat_hal_bfm_freecnt(int param_1,uint *param_2) { uint uVar1; size_t sVar2; uint uVar3; int iVar4; uint uVar5; int iVar6; uint uVar7; uint uVar8; uint uVar9; uint uVar10; char local_128 [260]; local_128[0] = '\0'; local_128[1] = '\0'; local_128[2] = '\0'; local_128[3] = '\0'; memset(local_128 + 4,0,0xfc); uVar9 = *(uint *)(param_1 + 0xa4) & 0x1f; uVar8 = *(uint *)(param_1 + 0xa4) >> 5; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 4) + 0xbc0) = 0x10000000; uVar10 = 0; iVar6 = 0; do { uVar7 = uVar10 & 3; iVar4 = (uVar10 + 0x300) * 4; if (uVar7 == 0) { sprintf(local_128,"%08x:\t",iVar4); } uVar5 = *(uint *)(iVar4 + *(int *)(param_1 + 4)); DataSynchronizationBarrier(0xf); if (uVar10 < uVar8) { uVar3 = 0; do { uVar1 = uVar3 & 0xff; uVar3 = uVar3 + 1; if ((uVar5 & 1 << uVar1) != 0) { iVar6 = iVar6 + 1; } } while (uVar3 != 0x20); } else if ((uVar10 == uVar8) && (uVar9 != 0)) { uVar3 = 0; do { uVar1 = uVar3 & 0xff; uVar3 = uVar3 + 1; if ((uVar5 & 1 << uVar1) != 0) { iVar6 = iVar6 + 1; } } while (uVar3 != uVar9); } uVar10 = uVar10 + 1; sVar2 = strlen(local_128); sprintf(local_128 + sVar2,"%08x\t",uVar5); if (uVar7 == 3) { iVar4 = whnat_log_get(); if (-1 < iVar4) { printk(&_LC2,local_128); } __memzero(local_128,0x100); } } while (uVar10 != 0x100); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 4); *(undefined4 *)(iVar4 + 0xbc0) = 0x14; uVar8 = *(uint *)(iVar4 + 0xbd4); DataSynchronizationBarrier(0xf); iVar4 = whnat_log_get(); if (-1 < iVar4) { printk(&_LC3,iVar6,uVar8 >> 0x10,uVar8 & 0xffff,*(undefined4 *)(param_1 + 0xa4)); } *param_2 = uVar8 >> 0x10; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 4) + 0xbc0) = 0; return; } void whnat_hal_bfm_free(int param_1) { int iVar1; int iVar2; uint uVar3; uint uVar4; uint uVar5; uVar4 = *(uint *)(*(int *)(param_1 + 4) + 0x80); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar2 = *(int *)(param_1 + 4); *(uint *)(iVar2 + 0x80) = uVar4 | 0x10000000; DataSynchronizationBarrier(0xf); if ((*(uint *)(iVar2 + 0x60) & 0xff00) != 0) { iVar2 = 0; do { DataSynchronizationBarrier(0xf); iVar2 = iVar2 + 1; } while (iVar2 != 100 && (*(uint *)(*(int *)(param_1 + 4) + 0x60) & 0xff00) != 0); } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 4) + 0xbc0) = 0x10000000; uVar5 = *(uint *)(param_1 + 0xa4) & 0x1f; uVar4 = *(uint *)(param_1 + 0xa4) >> 5; if (uVar4 == 0) { iVar2 = 0; } else { iVar1 = 0xc00; do { iVar2 = iVar1; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(iVar2 + *(int *)(param_1 + 4)) = 0xffffffff; iVar1 = iVar2 + 4; } while (iVar2 + 4 != (uVar4 + 0x300) * 4); } if (uVar5 == 0) { uVar4 = 0; } else { uVar4 = 0; uVar3 = 0; do { uVar3 = uVar3 + 1; uVar4 = uVar4 | 1 << uVar5; } while (uVar3 != uVar5); } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 4) + 4 + iVar2) = uVar4; DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar2 = *(int *)(param_1 + 4); *(undefined4 *)(iVar2 + 0xbc0) = 0; uVar4 = *(uint *)(iVar2 + 0x80); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 4) + 0x80) = uVar4 & 0xefffffff; return; } int whnat_wifi_cr_get(int param_1,int param_2) { int *piVar1; int iVar2; piVar1 = (int *)&_LANCHOR0; iVar2 = 0xd7200; while ((piVar1[1] != param_2 || ((char)piVar1[2] != param_1))) { piVar1 = piVar1 + 3; iVar2 = *piVar1; if (iVar2 == 0) { iVar2 = whnat_log_get(); if (0 < iVar2) { printk(&_LC4,"whnat_wifi_cr_get",param_2,param_1); } return 0; } } return iVar2; } undefined4 whnat_cr_search(int param_1) { int *piVar1; undefined *puVar2; int iVar3; if (param_1 == 0xd7200) { iVar3 = 0; } else { iVar3 = 0; puVar2 = &_LANCHOR0; do { piVar1 = (int *)(puVar2 + 0xc); iVar3 = iVar3 + 1; puVar2 = puVar2 + 0xc; if (*piVar1 == 0) { iVar3 = whnat_log_get(); if (2 < iVar3) { printk(&_LC5,"whnat_cr_search",param_1); } return 0; } } while (*piVar1 != param_1); } return (&DAT_000194a8)[iVar3 * 3]; } void whnat_hal_cr_handle(int param_1,int param_2,int param_3,int param_4,undefined4 *param_5) { int iVar1; if (param_2 == 1) { if (param_3 == 0) { iVar1 = *(int *)(param_1 + 0x8c); goto LAB_00015ae0; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0x8c); } else if (param_2 == 2) { if (param_3 == 0) { iVar1 = *(int *)(param_1 + 0x28); goto LAB_00015ae0; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0x28); } else { if (param_2 != 0) { return; } if (param_3 == 0) { iVar1 = *(int *)(param_1 + 0xbc); LAB_00015ae0: DataSynchronizationBarrier(0xf); *param_5 = *(undefined4 *)(param_4 + iVar1); return; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); } *(undefined4 *)(param_4 + iVar1) = *param_5; return; } void whnat_hal_cr_mirror_set(char *param_1,int param_2) { undefined1 *puVar1; uint uVar2; int iVar3; puVar1 = whnat_ctrl_get(); if (*param_1 == '\0') { iVar3 = 0; } else { iVar3 = 4; } DataSynchronizationBarrier(0xf); if (param_2 == 0) { uVar2 = *(uint *)(iVar3 + *(int *)(puVar1 + 8)) & 0xffe | *(uint *)(param_1 + 0x10) & 0xfffff000 ; } else { uVar2 = *(uint *)(iVar3 + *(int *)(puVar1 + 8)) & 0xfff | *(uint *)(param_1 + 0x10) & 0xfffff000 | 1; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(iVar3 + *(int *)(puVar1 + 8)) = uVar2; return; } void whnat_hal_int_ctrl(int param_1,int param_2,int param_3) { int iVar1; uint uVar2; undefined4 uVar3; uVar2 = *(uint *)(*(int *)(param_1 + 0xbc) + 0xc); DataSynchronizationBarrier(0xf); if (param_2 == 1) { if (param_3 == 0) { uVar2 = uVar2 & 0xfffffffb; } else { uVar2 = uVar2 | 4; } } else if (param_2 == 0) { if (param_3 == 0) { uVar2 = uVar2 & 0xfffffffe; } else { uVar2 = uVar2 | 1; } } else if (param_2 == 2) { if (param_3 == 0) { uVar2 = uVar2 & 0xfffffffa; } else { uVar2 = uVar2 | 5; } } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0xc) = uVar2; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x570) = 0x10000; if (param_3 == 0) { uVar3 = 0; } else { uVar3 = 0x32; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar1 + 0x504) = uVar3; uVar2 = *(uint *)(iVar1 + 0x520); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0x520) = uVar2 | 0x200000; if (param_3 == 0) { uVar3 = 0; } else { uVar3 = 0x30000; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar1 + 0xa28) = uVar3; uVar2 = *(uint *)(iVar1 + 0xa2c); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0xa2c) = uVar2 & 0xfffcffff; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x8c) + 0x228) = uVar3; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x8c) + 0x254) = uVar3; if ((param_3 != 0) && (*(undefined4 **)(param_1 + 0x24) != (undefined4 *)0x0)) { uVar3 = **(undefined4 **)(param_1 + 0x24); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x524) = uVar3; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x28) + 0xd7204) = **(undefined4 **)(param_1 + 0x24); return; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x524) = 0; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x28) + 0xd7204) = 0; return; } void whnat_hal_eint_init(int param_1) { *(undefined4 *)(param_1 + 0xc4) = 0x6f0013; return; } void whnat_hal_eint_ctrl(int param_1,int param_2) { undefined4 uVar1; if (param_2 == 0) { uVar1 = 0; } else { uVar1 = *(undefined4 *)(param_1 + 0xc4); } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x28) = uVar1; DataSynchronizationBarrier(0xf); return; } void whnat_hal_eint_stat_get(int param_1,undefined4 *param_2) { DataSynchronizationBarrier(0xf); *param_2 = *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x20); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x20) = *param_2; return; } void whnat_hal_dma_ctrl(int param_1,int param_2) { int iVar1; uint uVar2; uint uVar3; uint uVar4; DataSynchronizationBarrier(0xf); uVar3 = *(uint *)(*(int *)(param_1 + 0xbc) + 0x208) & 0xfffffffa; DataSynchronizationBarrier(0xf); uVar2 = *(uint *)(*(int *)(param_1 + 0xbc) + 0x508) & 0xfffffffa; DataSynchronizationBarrier(0xf); uVar4 = *(uint *)(*(int *)(param_1 + 0xbc) + 0xa04) & 0xfffffffa; if (param_2 == 2) { iVar1 = whnat_log_get(); if (1 < iVar1) { printk(&_LC8,"wed_dma_ctrl","ENABLE"); } uVar3 = uVar3 | 4; uVar2 = uVar2 | 4; } else if (param_2 == 3) { iVar1 = whnat_log_get(); if (1 < iVar1) { printk(&_LC9,"wed_dma_ctrl","ENABLE"); } uVar3 = uVar3 | 5; uVar2 = uVar2 | 5; uVar4 = uVar4 | 4; } else if (param_2 == 1) { iVar1 = whnat_log_get(); if (1 < iVar1) { printk(&_LC6,"wed_dma_ctrl","ENABLE"); } uVar3 = uVar3 | 1; uVar2 = uVar2 | 1; uVar4 = uVar4 | 4; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0x208) = uVar3; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0xa04) = uVar4; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0x508) = uVar2; return; } void whnat_hal_wed_init(int param_1) { uint uVar1; uVar1 = *(uint *)(*(int *)(param_1 + 0xbc) + 0xa04); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0xa04) = uVar1 & 0xfc7fdfcf | 0x210020; return; } undefined4 whnat_hal_io_read(int param_1,int param_2,undefined4 *param_3) { int iVar1; int iVar2; iVar1 = whnat_entry_search_by_hw_ctrl(param_1); if ((iVar1 != 0) && (iVar2 = whnat_cr_search(param_2), iVar2 != 0)) { DataSynchronizationBarrier(0xf); *param_3 = *(undefined4 *)(iVar2 + *(int *)(iVar1 + 0xbc)); iVar1 = whnat_log_get(); if (iVar1 < 3) { return 0; } printk(&_LC10,"whnat_hal_io_read",param_2,*param_3); return 0; } return 0xffffffff; } undefined4 whnat_hal_io_write(int param_1,int param_2,undefined4 param_3,undefined4 param_4) { int iVar1; int iVar2; iVar1 = whnat_entry_search_by_hw_ctrl(param_1); if ((iVar1 != 0) && (iVar2 = whnat_cr_search(param_2), iVar2 != 0)) { DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(iVar2 + *(int *)(iVar1 + 0xbc)) = param_3; iVar1 = whnat_log_get(); if (iVar1 < 3) { return 0; } printk(&_LC11,"whnat_hal_io_write",param_2,param_3,param_4); return 0; } return 0xffffffff; } void whnat_hal_wdma_init(char *param_1) { int iVar1; undefined4 uVar2; uint uVar3; uVar3 = *(uint *)(*(int *)(param_1 + 0x8c) + 0x204); DataSynchronizationBarrier(0xf); iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC12,"wdma_dma_ctrl",uVar3); } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0x8c) + 0x204) = uVar3 | 0x1c000000; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0xaa0) = 0x1fa00000; printk("=========whnat_hal_wdma_init :ECNT WED_WDMA_CFG_BASE = %x \n"); uVar2 = 0x66046620; if (*param_1 == '\0') { uVar2 = 0x62046220; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0xaa4) = uVar2; uVar2 = 0x65006400; if (*param_1 == '\0') { uVar2 = 0x61006000; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0xaa8) = uVar2; return; } void whnat_hal_wdma_ring_init(int param_1) { int iVar1; int iVar2; int iVar3; uint uVar4; if (*(int *)(param_1 + 0x9c) != 0) { iVar3 = 0; uVar4 = 0; do { iVar2 = *(int *)(param_1 + 0xac); iVar1 = whnat_log_get(); iVar2 = iVar2 + iVar3; if (1 < iVar1) { printk(&_LC14,"whnat_hal_wdma_ring_init",uVar4); } iVar1 = whnat_log_get(); if (1 < iVar1) { printk(&_LC15,"whnat_hal_wdma_ring_init",param_1 + 0xb8,param_1 + 0x88, *(undefined4 *)(iVar2 + 0xc014),*(undefined4 *)(iVar2 + 0x10), *(undefined4 *)(iVar2 + 0xc020),*(undefined4 *)(param_1 + 0xa0), *(undefined4 *)(iVar2 + 0xc018),0); } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(iVar2 + 0xc014) + *(int *)(param_1 + 0x8c)) = *(undefined4 *)(iVar2 + 8); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(iVar2 + 0xc020) + *(int *)(param_1 + 0x8c)) = *(undefined4 *)(param_1 + 0xa0); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(iVar2 + 0xc018) + *(int *)(param_1 + 0x8c)) = 0; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(uVar4 * 0x10 + *(int *)(param_1 + 0xbc) + 0x900) = *(undefined4 *)(iVar2 + 8); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(uVar4 * 0x10 + *(int *)(param_1 + 0xbc) + 0x904) = *(undefined4 *)(param_1 + 0xa0); uVar4 = uVar4 + 1; iVar3 = iVar3 + 0xc024; } while (uVar4 < *(uint *)(param_1 + 0x9c)); } return; } void whnat_hal_wpdma_ring_init(int param_1) { int iVar1; undefined4 uVar2; uint uVar3; int iVar4; int iVar5; uint uVar6; if (*(int *)(param_1 + 400) == 0) { iVar1 = *(int *)(param_1 + 0xbc); } else { iVar5 = 0; uVar6 = 0; do { iVar4 = *(int *)(param_1 + 0x1a0); iVar1 = whnat_log_get(); iVar4 = iVar4 + iVar5; if (1 < iVar1) { printk(&_LC14,"whnat_hal_wpdma_ring_init",uVar6); } iVar1 = whnat_log_get(); if (1 < iVar1) { printk(&_LC16,"whnat_hal_wpdma_ring_init",param_1 + 0xb8,param_1 + 4, *(undefined4 *)(iVar4 + 0xc014),*(undefined4 *)(iVar4 + 8), *(undefined4 *)(iVar4 + 0xc020),*(undefined4 *)(param_1 + 0x194), *(undefined4 *)(iVar4 + 0xc018),0); } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(iVar4 + 0xc014) + *(int *)(param_1 + 0x28)) = *(undefined4 *)(iVar4 + 8); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(iVar4 + 0xc020) + *(int *)(param_1 + 0x28)) = *(undefined4 *)(param_1 + 0x194); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(iVar4 + 0xc018) + *(int *)(param_1 + 0x28)) = 0; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + *(int *)(iVar4 + 0xc014) + -0xd6d00) = *(undefined4 *)(iVar4 + 8); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + *(int *)(iVar4 + 0xc020) + -0xd6d00) = *(undefined4 *)(param_1 + 0x194); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar1 + *(int *)(iVar4 + 0xc018) + -0xd6d00) = 0; uVar6 = uVar6 + 1; iVar5 = iVar5 + 0xc024; } while (uVar6 < *(uint *)(param_1 + 400)); } uVar2 = *(undefined4 *)(iVar1 + 0x410); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x710) = uVar2; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x28) + 0xd7410) = uVar2; uVar2 = *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x414); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x714) = uVar2; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x28) + 0xd7414) = uVar2; uVar2 = *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x418); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x718) = uVar2; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x28) + 0xd7418) = uVar2; uVar6 = *(uint *)(param_1 + 0x15c); uVar3 = *(uint *)(param_1 + 0x194); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0x80) = uVar6 >> 7 | 0x10000000 | (uVar3 >> 8) << 0x10; uVar2 = *(undefined4 *)(param_1 + 0x184); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x84) = uVar2; iVar1 = *(int *)(param_1 + 0x148); uVar6 = *(uint *)(param_1 + 0x144); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0x88) = uVar6 | iVar1 << 0x10; uVar6 = *(uint *)(param_1 + 0x158); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0x8c) = uVar6 & 0x3fff; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0xa0) = 0x7f0001; DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar1 + 8) = 1; uVar6 = 0; while( true ) { iVar5 = *(int *)(iVar1 + 8); DataSynchronizationBarrier(0xf); uVar6 = uVar6 + 1; iVar1 = iVar5; if (iVar5 != 0) { iVar1 = 1; } if (99 < uVar6) { iVar1 = 0; } if (iVar1 == 0) break; iVar1 = *(int *)(param_1 + 0xbc); } if ((99 < uVar6) && (iVar1 = whnat_log_get(), 0 < iVar1)) { printk(&_LC17,"whnat_hal_bfm_init",8,iVar5,uVar6); } uVar6 = *(uint *)(*(int *)(param_1 + 0xbc) + 0xc); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xc) = uVar6 | 0x500; uVar6 = *(uint *)(iVar1 + 0x80); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0x80) = uVar6 & 0xefffffff; return; } void whnat_hal_hif_init(int *param_1) { int iVar1; undefined4 uVar2; uint uVar3; undefined4 uVar4; uint uVar5; uVar4 = *(undefined4 *)(*param_1 + 8); DataSynchronizationBarrier(0xf); uVar2 = *(undefined4 *)(*param_1 + 0xc); DataSynchronizationBarrier(0xf); iVar1 = whnat_log_get(); if (1 < iVar1) { printk(&_LC18,"whnat_hal_hif_init",uVar4,uVar2); } uVar5 = param_1[3]; uVar3 = param_1[4] & 0xfffff000U | 2; iVar1 = whnat_log_get(); if (1 < iVar1) { printk(&_LC19,"whnat_hal_hif_init",uVar5 & 0xfffff000,uVar3); } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)*param_1 = uVar5 & 0xfffff000; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*param_1 + 4) = uVar3; return; } void whnat_hal_trace_set(int *param_1) { undefined4 uVar1; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(int *)(*param_1 + 0xc) = param_1[2]; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(int *)(*param_1 + 0xc) = param_1[3]; if (*(char *)((int)param_1 + 5) == '\0') { uVar1 = 0; } else { uVar1 = 0x49; } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)*param_1 = uVar1; return; } undefined4 whnat_hal_hw_reset(int param_1,uint param_2) { int iVar1; uint *puVar2; uint uVar3; int iVar4; if (1 < param_2) { if (param_2 != 2) { return 0; } uVar3 = *(uint *)(*(int *)(param_1 + 0x8c) + 0x204); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0x8c); *(uint *)(iVar1 + 0x204) = uVar3 & 0xfffffffb; DataSynchronizationBarrier(0xf); if ((*(uint *)(iVar1 + 0x204) & 8) == 0) { LAB_00016778: DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x8c) + 0x208) = 0x30000; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x8c) + 0x208) = 0; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x8c) + 0x108) = 0; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x8c) + 0x118) = 0; } else { iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0x8c) + 0x204) & 8) == 0) { if (iVar1 != 100) goto LAB_00016778; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wdma_agt_dis_ck",0x204,3); } } DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar1 + 8) = 0x80000000; uVar3 = 0; while( true ) { iVar4 = *(int *)(iVar1 + 8); DataSynchronizationBarrier(0xf); uVar3 = uVar3 + 1; iVar1 = iVar4; if (iVar4 != 0) { iVar1 = 1; } if (99 < uVar3) { iVar1 = 0; } if (iVar1 == 0) break; iVar1 = *(int *)(param_1 + 0xbc); } if (uVar3 < 100) { return 0; } iVar1 = whnat_log_get(); if (iVar1 < 1) { return 0; } printk(&_LC17,"reset_all",8,iVar4,uVar3); return 0; } uVar3 = *(uint *)(*(int *)(param_1 + 0xbc) + 0x208); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0x208) = uVar3 & 0xfffffffe; DataSynchronizationBarrier(0xf); if ((*(uint *)(iVar1 + 0x208) & 2) != 0) { iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0xbc) + 0x208) & 2) == 0) { if (iVar1 != 100) goto LAB_00016884; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wed_agt_dis_ck",0x208,1); } iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC21,"reset_tx_traffic",0xffffffff); } goto LAB_00017090; } LAB_00016884: if (param_2 == 0) { DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x20c) = 3; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x20c) = 0; } else { DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar4 + 8) = 0x1000; iVar1 = 0; while( true ) { iVar4 = *(int *)(iVar4 + 8); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if (iVar4 == 0) break; if (iVar1 == 100) goto LAB_000170a8; iVar4 = *(int *)(param_1 + 0xbc); } if (iVar1 == 100) { LAB_000170a8: iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC17,"reset_wed_tx_dma",8,iVar4,100); } } } iVar4 = *(int *)(param_1 + 0x1a8); uVar3 = *(uint *)(*(int *)(iVar4 + 0x8c) + 0x204); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(iVar4 + 0x8c); *(uint *)(iVar1 + 0x204) = uVar3 & 0xfffffffb; DataSynchronizationBarrier(0xf); if ((*(uint *)(iVar1 + 0x204) & 8) == 0) { LAB_00016940: uVar3 = *(uint *)(*(int *)(param_1 + 0xbc) + 0xa04); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); puVar2 = (uint *)(*(int *)(param_1 + 0xbc) + 0xa04); *puVar2 = uVar3 & 0xfffffffb | 0x2000; DataSynchronizationBarrier(0xf); if ((*puVar2 & 8) == 0) { LAB_000169b8: DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(iVar4 + 0x8c) + 0x208) = 0x30000; DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = 0; *(undefined4 *)(*(int *)(iVar4 + 0x8c) + 0x208) = 0; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(iVar4 + 0x8c) + 0x108) = 0; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(iVar4 + 0x8c) + 0x118) = 0; if (param_2 == 0) { DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0xa08) = 0x3030000; DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar1 + 0xa08) = 0; uVar3 = *(uint *)(iVar1 + 0xa04); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0xa04) = uVar3 | 0x4000000; DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xa04) = uVar3 & 0xfbffffff; } else { DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar4 + 0xc) = 0x30000; DataSynchronizationBarrier(0xf); if ((*(uint *)(iVar4 + 0xc) & 8) != 0) { do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0xbc) + 0xc) & 8) == 0) { if (iVar1 != 100) goto LAB_00016a60; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wed_agt_dis_ck",0xc,3); } goto LAB_00017114; } LAB_00016a60: DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar4 + 8) = 0x80000; iVar1 = 0; while( true ) { iVar4 = *(int *)(iVar4 + 8); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if (iVar4 == 0) break; if (iVar1 == 100) goto LAB_00017408; iVar4 = *(int *)(param_1 + 0xbc); } if (iVar1 == 100) { LAB_00017408: iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC17,"reset_wed_rx_drv",8,iVar4,100); } } DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar4 + 8) = 0x20000; iVar1 = 0; while( true ) { iVar4 = *(int *)(iVar4 + 8); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if (iVar4 == 0) break; if (iVar1 == 100) goto LAB_00017350; iVar4 = *(int *)(param_1 + 0xbc); } if (iVar1 == 100) { LAB_00017350: iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC17,"reset_wed_rx_drv",8,iVar4,100); iVar1 = *(int *)(param_1 + 0xbc); goto LAB_00016aec; } } iVar1 = *(int *)(param_1 + 0xbc); } LAB_00016aec: uVar3 = *(uint *)(iVar1 + 0xc); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xc) = uVar3 & 0xfffffbff; DataSynchronizationBarrier(0xf); if ((*(uint *)(iVar1 + 0xc) & 0x800) == 0) { LAB_00016b54: DataSynchronizationBarrier(0xf); if (*(uint *)(*(int *)(param_1 + 0xbc) + 0x9c) >> 0x10 == 0x40) { LAB_00016ba0: DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar4 + 8) = 0x10; iVar1 = 0; while( true ) { iVar4 = *(int *)(iVar4 + 8); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if (iVar4 == 0) break; if (iVar1 == 100) goto LAB_00017464; iVar4 = *(int *)(param_1 + 0xbc); } if (iVar1 == 100) { LAB_00017464: iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC17,"reset_wed_tx_bm",8,iVar4,100); } } uVar3 = *(uint *)(*(int *)(param_1 + 0xbc) + 0xc); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xc) = uVar3 & 0xfffffeff; DataSynchronizationBarrier(0xf); if ((*(uint *)(iVar1 + 0xc) & 0x200) == 0) { LAB_00016c50: DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar4 + 8) = 1; iVar1 = 0; while( true ) { iVar4 = *(int *)(iVar4 + 8); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if (iVar4 == 0) break; if (iVar1 == 100) goto LAB_000174ec; iVar4 = *(int *)(param_1 + 0xbc); } if (iVar1 == 100) { LAB_000174ec: iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC17,"reset_wed_tx_bm",8,iVar4,100); } } uVar3 = *(uint *)(*(int *)(param_1 + 0xbc) + 0x508); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); puVar2 = (uint *)(*(int *)(param_1 + 0xbc) + 0x508); *puVar2 = uVar3 & 0xfffffffe; DataSynchronizationBarrier(0xf); if ((*puVar2 & 2) == 0) { LAB_00016d08: if (param_2 == 0) { DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x50c) = 3; DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar1 + 0x50c) = 0; } else { uVar3 = *(uint *)(*(int *)(param_1 + 0xbc) + 0xc); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xc) = uVar3 & 0xfffffffe; DataSynchronizationBarrier(0xf); if ((*(uint *)(iVar1 + 0xc) & 2) != 0) { iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0xbc) + 0xc) & 2) == 0) { if (iVar1 != 100) goto LAB_00016d7c; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wed_agt_dis_ck",0xc,1); } goto LAB_00017114; } LAB_00016d7c: DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar4 + 8) = 0x800; iVar1 = 0; while( true ) { iVar4 = *(int *)(iVar4 + 8); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if (iVar4 == 0) break; if (iVar1 == 100) goto LAB_000174bc; iVar4 = *(int *)(param_1 + 0xbc); } if (iVar1 == 100) { LAB_000174bc: iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC17,"reset_wed_tx_drv",8,iVar4,100); } } DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar4 + 8) = 0x100; iVar1 = 0; while( true ) { iVar4 = *(int *)(iVar4 + 8); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if (iVar4 == 0) break; if (iVar1 == 100) goto LAB_000173d4; iVar4 = *(int *)(param_1 + 0xbc); } if (iVar1 == 100) { LAB_000173d4: iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC17,"reset_wed_tx_drv",8,iVar4,100); iVar1 = *(int *)(param_1 + 0xbc); goto LAB_00016e08; } } iVar1 = *(int *)(param_1 + 0xbc); } LAB_00016e08: uVar3 = *(uint *)(iVar1 + 0x508); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); puVar2 = (uint *)(*(int *)(param_1 + 0xbc) + 0x508); *puVar2 = uVar3 & 0xfffffffb; DataSynchronizationBarrier(0xf); if ((*puVar2 & 8) == 0) { LAB_00016e78: uVar3 = *(uint *)(*(int *)(param_1 + 0xbc) + 0x208); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0x208) = uVar3 & 0xfffffffb; DataSynchronizationBarrier(0xf); if ((*(uint *)(iVar1 + 0x208) & 8) == 0) { LAB_00016ee4: if (param_2 == 0) { DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x50c) = 0x20000; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x20c) = 0x20000; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x50c) = 0; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x20c) = 0; DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x418) = 0; } else { uVar3 = *(uint *)(*(int *)(param_1 + 0xbc) + 0xc); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xc) = uVar3 & 0xfffffffe; DataSynchronizationBarrier(0xf); if ((*(uint *)(iVar1 + 0xc) & 2) != 0) { iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0xbc) + 0xc) & 2) == 0) { if (iVar1 != 100) goto LAB_00016f58; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wed_agt_dis_ck",0xc,1); } goto LAB_00017250; } LAB_00016f58: DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar4 + 8) = 0x800; iVar1 = 0; while( true ) { iVar4 = *(int *)(iVar4 + 8); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if (iVar4 == 0) break; if (iVar1 == 100) goto LAB_00017320; iVar4 = *(int *)(param_1 + 0xbc); } if (iVar1 == 100) { LAB_00017320: iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC17,"reset_rx_traffic",8,iVar4,100); } } DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar4 = *(int *)(param_1 + 0xbc); *(undefined4 *)(iVar4 + 8) = 0x200; iVar1 = 0; while( true ) { iVar4 = *(int *)(iVar4 + 8); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if (iVar4 == 0) break; if (iVar1 == 100) goto LAB_000172f0; iVar4 = *(int *)(param_1 + 0xbc); } if (iVar1 == 100) { LAB_000172f0: iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC17,"reset_rx_traffic",8,iVar4,100); } } DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x418) = 0; } return 0; } iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0xbc) + 0x208) & 8) == 0) { if (iVar1 != 100) goto LAB_00016ee4; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wed_agt_dis_ck",0x208,3); } } else { iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0xbc) + 0x508) & 8) == 0) { if (iVar1 != 100) goto LAB_00016e78; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wed_agt_dis_ck",0x508,3); } } LAB_00017250: iVar1 = whnat_log_get(); if (iVar1 < 1) { return 0xffffffff; } printk(&_LC29,"whnat_hal_hw_reset",0xffffffff); return 0xffffffff; } iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0xbc) + 0x508) & 2) == 0) { if (iVar1 != 100) goto LAB_00016d08; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wed_agt_dis_ck",0x508,1); } goto LAB_00017114; } iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0xbc) + 0xc) & 0x200) == 0) { if (iVar1 != 100) goto LAB_00016c50; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wed_agt_dis_ck",0xc,9); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC26,"reset_wed_tx_bm"); } } else { iVar1 = 0; do { DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if (*(uint *)(*(int *)(param_1 + 0xbc) + 0x9c) >> 0x10 == 0x40) { if (iVar1 != 100) goto LAB_00016ba0; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC25,"reset_wed_tx_bm"); } } } else { iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0xbc) + 0xc) & 0x800) == 0) { if (iVar1 != 100) goto LAB_00016b54; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wed_agt_dis_ck",0xc,0xb); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC24,"reset_wed_tx_bm"); } } iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC27,"reset_tx_traffic",0xffffffff); } goto LAB_00017090; } iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(param_1 + 0xbc) + 0xa04) & 8) == 0) { if (iVar1 != 100) goto LAB_000169b8; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wed_agt_dis_ck",0xa04,3); } iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC22,"reset_wed_rx_drv"); } } else { iVar1 = 0; do { usleep_range(10000,15000); DataSynchronizationBarrier(0xf); iVar1 = iVar1 + 1; if ((*(uint *)(*(int *)(iVar4 + 0x8c) + 0x204) & 8) == 0) { if (iVar1 != 100) goto LAB_00016940; break; } } while (iVar1 != 100); iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC20,"wdma_agt_dis_ck",0x204,3); } } LAB_00017114: iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC23,"reset_tx_traffic",0xffffffff); } LAB_00017090: iVar1 = whnat_log_get(); if (iVar1 < 1) { return 0xffffffff; } printk(&_LC28,"whnat_hal_hw_reset",0xffffffff); return 0xffffffff; } void whnat_hal_hw_restore(int param_1) { int iVar1; uint uVar2; int iVar3; uVar2 = *(uint *)(*(int *)(param_1 + 0xbc) + 0x208); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0x208) = uVar2 | 4; uVar2 = *(uint *)(iVar1 + 0x508); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0x508) = uVar2 | 4; uVar2 = *(uint *)(iVar1 + 0xc); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xc) = uVar2 | 1; uVar2 = *(uint *)(iVar1 + 0x508); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0x508) = uVar2 | 1; uVar2 = *(uint *)(iVar1 + 0xc); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xc) = uVar2 | 1; uVar2 = *(uint *)(iVar1 + 0xc); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xc) = uVar2 | 0x100; uVar2 = *(uint *)(iVar1 + 0x80); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0x80) = uVar2 & 0xefffffff; uVar2 = *(uint *)(iVar1 + 0xc); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xc) = uVar2 | 0x400; iVar3 = *(int *)(param_1 + 0x1a8); uVar2 = *(uint *)(iVar1 + 0xa04); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0xa04) = uVar2 | 4; uVar2 = *(uint *)(*(int *)(iVar3 + 0x8c) + 0x204); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(iVar3 + 0x8c) + 0x204) = uVar2 | 4; uVar2 = *(uint *)(*(int *)(param_1 + 0xbc) + 0xc); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); iVar1 = *(int *)(param_1 + 0xbc); *(uint *)(iVar1 + 0xc) = uVar2 | 4; uVar2 = *(uint *)(iVar1 + 0x208); DataSynchronizationBarrier(0xf); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(uint *)(*(int *)(param_1 + 0xbc) + 0x208) = uVar2 | 1; return; } void whnat_hal_pcie_map(byte *param_1) { undefined1 *puVar1; undefined4 uVar2; puVar1 = whnat_ctrl_get(); uVar2 = *(undefined4 *)(puVar1 + (uint)*param_1 * 4 + 0xc); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x560) = uVar2; uVar2 = *(undefined4 *)(param_1 + 0x10); DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0xbc) + 0x580) = uVar2; return; } void whnat_hal_pdma_mask_set(int param_1,undefined4 param_2) { DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 4) + 0x524) = param_2; return; } void whnat_hal_ser_trigger(int param_1) { DataSynchronizationBarrier(0xe); arm_heavy_mb(); *(undefined4 *)(*(int *)(param_1 + 0x28) + 0x3108) = 4; return; } void whnat_hal_ser_update(int param_1,uint *param_2) { DataSynchronizationBarrier(0xf); *param_2 = (uint)(*(int *)(*(int *)(param_1 + 4) + 0x60) << 0x10) >> 0x18; DataSynchronizationBarrier(0xf); param_2[1] = *(uint *)(*(int *)(param_1 + 4) + 0x2a0); DataSynchronizationBarrier(0xf); param_2[2] = *(uint *)(*(int *)(param_1 + 4) + 0x2a4); DataSynchronizationBarrier(0xf); param_2[3] = *(uint *)(*(int *)(param_1 + 4) + 0x308); DataSynchronizationBarrier(0xf); param_2[5] = *(uint *)(*(int *)(param_1 + 4) + 0x318); DataSynchronizationBarrier(0xf); param_2[4] = *(uint *)(*(int *)(param_1 + 4) + 0x30c); DataSynchronizationBarrier(0xf); param_2[6] = *(uint *)(*(int *)(param_1 + 4) + 0x31c); DataSynchronizationBarrier(0xf); param_2[7] = *(uint *)(*(int *)(param_1 + 4) + 0x68) & 0xff; DataSynchronizationBarrier(0xf); param_2[8] = *(uint *)(*(int *)(param_1 + 4) + 0xae0); DataSynchronizationBarrier(0xf); param_2[9] = *(uint *)(*(int *)(param_1 + 4) + 0xae4); DataSynchronizationBarrier(0xf); param_2[10] = *(uint *)(*(int *)(param_1 + 4) + 0xae8); DataSynchronizationBarrier(0xf); param_2[0xb] = *(uint *)(*(int *)(param_1 + 4) + 0xaec); DataSynchronizationBarrier(0xf); param_2[0xc] = (uint)(*(int *)(*(int *)(param_1 + 4) + 100) << 0x10) >> 0x18; DataSynchronizationBarrier(0xf); param_2[0xd] = *(uint *)(*(int *)(param_1 + 4) + 0x5a0); DataSynchronizationBarrier(0xf); param_2[0xe] = *(uint *)(*(int *)(param_1 + 4) + 0x5a4); DataSynchronizationBarrier(0xf); param_2[0xf] = *(uint *)(*(int *)(param_1 + 4) + 0x90) & 0xffff; DataSynchronizationBarrier(0xf); param_2[0x10] = *(uint *)(*(int *)(param_1 + 4) + 0x1c0); DataSynchronizationBarrier(0xf); param_2[0x11] = *(uint *)(*(int *)(param_1 + 4) + 0x1c4); return; } void wifi_fbuf_init(uint *param_1,uint param_2,undefined2 param_3) { __memzero(param_1,0x20); __memzero(param_1 + 8,0x2c); *(undefined2 *)((int)param_1 + 0x22) = param_3; param_1[1] = param_1[1] & 0xfff3ffff | 0x80000000; param_1[10] = param_2; *param_1 = *param_1 | 0x20; *(undefined1 *)((int)param_1 + 0x27) = 1; *(undefined1 *)(param_1 + 8) = 0; *(undefined1 *)((int)param_1 + 0x21) = 0; *(undefined1 *)(param_1 + 0x10) = 0; *(undefined1 *)((int)param_1 + 0x41) = 0; return; } void wifi_tx_tuple_add(byte *param_1,int param_2) { ushort uVar1; int iVar2; int iVar3; uint uVar4; char cVar5; int *piVar6; uint uVar7; int iVar8; int iVar9; undefined4 local_30; ushort local_2c; undefined2 local_2a; int local_28; uint local_24; uint local_20; uint local_1c; __memzero(&local_30); __memzero(&local_28,0x10); local_28 = *(int *)(param_2 + 0xc); piVar6 = *(int **)(param_2 + 0x14); local_24 = (uint)*(byte *)(*(int *)(param_2 + 0x10) + 0xdcd); local_1c = (uint)*(byte *)(param_2 + 0x21); if ((piVar6 == (int *)0x0) || (((*piVar6 != 2 && (*piVar6 != 0x40001)) && ((char)piVar6[0xb5] == '\0')))) { local_20 = 0xff; } else { local_20 = (uint)*(ushort *)((int)piVar6 + 0x16e); } iVar2 = whnat_log_get(); if (1 < iVar2) { printk(&_LC0,*param_1,local_1c,local_20,local_24); } iVar2 = local_28; if (((param_1 != (byte *)0x0) && (ra_sw_nat_hook_tx != (code *)0x0)) && (param_1[0x1b1] != 0)) { local_30 = CONCAT31(local_30._1_3_,0x7f); uVar7 = local_1c & 1 | (*param_1 & 1) << 1; uVar4 = local_30 & 0xfffc1fff; local_2c = (ushort)local_24 & 0x3f | (ushort)((local_20 & 0xff) << 6); local_30._2_2_ = (undefined2)(uVar4 >> 0x10); local_30._0_2_ = CONCAT11((byte)((uVar7 << 0xd) >> 8) | (char)uVar7 + 6U,(char)uVar4); local_2a = 0x7615; iVar3 = (*ra_sw_nat_hook_tx)(local_28,&local_30,0x7615); if (iVar3 != 1) { *(undefined1 *)(param_2 + 0x94) = 1; } uVar1 = *(ushort *)(iVar2 + 0xa0); iVar8 = *(int *)(iVar2 + 0x1e0); iVar3 = whnat_log_get(); iVar9 = iVar8 + (uint)uVar1; if (1 < iVar3) { printk(&_LC1,"wifi_dump_skb",*param_1,local_1c,local_20,local_24); } if ((*(byte *)(iVar8 + (uint)uVar1) & 0xf0) == 0x40) { iVar3 = whnat_log_get(); if (1 < iVar3) { uVar4 = *(uint *)(iVar9 + 0xc); printk(&_LC2,"wifi_dump_skb",uVar4 & 0xff,(uVar4 << 0x10) >> 0x18,(uVar4 << 8) >> 0x18, uVar4 >> 0x18); } iVar3 = whnat_log_get(); if (1 < iVar3) { uVar4 = *(uint *)(iVar9 + 0x10); printk(&_LC3,"wifi_dump_skb",uVar4 & 0xff,(uVar4 << 0x10) >> 0x18,(uVar4 << 8) >> 0x18, uVar4 >> 0x18); } cVar5 = *(char *)(iVar9 + 9); if (cVar5 == '\x06') { iVar8 = *(int *)(iVar2 + 0x1e0); uVar1 = *(ushort *)(iVar2 + 0x9e); iVar3 = whnat_log_get(); if (1 < iVar3) { printk(&_LC4,"wifi_dump_skb",*(undefined2 *)(iVar8 + (uint)uVar1), *(undefined2 *)(iVar8 + (uint)uVar1 + 2)); } cVar5 = *(char *)(iVar9 + 9); } if (cVar5 == '\x11') { iVar3 = *(int *)(iVar2 + 0x1e0); uVar1 = *(ushort *)(iVar2 + 0x9e); iVar2 = whnat_log_get(); if (1 < iVar2) { printk(&_LC5,"wifi_dump_skb",*(undefined2 *)(iVar3 + (uint)uVar1), *(undefined2 *)(iVar3 + (uint)uVar1 + 2)); } } } } return; } bool wifi_hw_tx_allow(undefined4 param_1,int param_2) { int iVar1; if (*(int *)(param_2 + 0x10) != 0) { iVar1 = wlan_operate_get_frag_thld(); return iVar1 == 0x92a; } return false; } void wifi_dma_cfg_wrapper(int param_1,undefined1 *param_2) { if (param_1 == -1) { *param_2 = 0; return; } if (param_1 != 1) { if (param_1 == 2) { *param_2 = 3; return; } if (param_1 == 0) { *param_2 = 1; } return; } *param_2 = 2; return; } void wifi_tx_tuple_reset(void) { return; } undefined4 wifi_ser_status(undefined4 *param_1) { undefined4 uVar1; if (param_1 == (undefined4 *)0x0) { uVar1 = 0x10; } else { uVar1 = *param_1; } return uVar1; } void dump_wifi_value(int param_1,undefined4 param_2,int param_3,undefined4 param_4) { int iVar1; undefined4 uVar2; uVar2 = *(undefined4 *)(param_3 + *(int *)(param_1 + 0x24)); DataSynchronizationBarrier(0xf); iVar1 = whnat_log_get(); if (iVar1 < 0) { return; } printk(&_LC6,param_2,uVar2,param_4); return; } void wifi_dump_tx_ring_info(int *param_1,int param_2,int param_3) { int iVar1; int iVar2; int iVar3; int iVar4; iVar1 = param_3 * 0x24; iVar2 = hc_get_hif_ctrl(*(undefined4 *)(*param_1 + 0x8eafe0)); iVar3 = *(int *)(*(int *)(*(int *)(iVar2 + 8) + param_2 * 4) + 0xc); iVar2 = whnat_log_get(); iVar4 = iVar3 + iVar1; if (-1 < iVar2) { printk(&_LC7,iVar4 + 8); } iVar2 = whnat_log_get(); if (-1 < iVar2) { printk(&_LC8,*(undefined4 *)(iVar4 + 4)); } iVar2 = whnat_log_get(); if (-1 < iVar2) { printk(&_LC9,*(undefined4 *)(iVar3 + iVar1)); } iVar2 = whnat_log_get(); if (-1 < iVar2) { printk(&_LC10,*(undefined4 *)(iVar4 + 0xc)); } whnat_dump_raw("WED_TX_RING",*(int *)(iVar4 + 4),*(uint *)(iVar3 + iVar1)); return; } undefined4 wifi_chip_id_get(int param_1) { return *(undefined4 *)(param_1 + 0x33e324); } undefined1 wifi_whnat_en_get(int param_1) { return *(undefined1 *)(param_1 + 0x6de2e2); } void wifi_whnat_en_set(int param_1,undefined1 param_2) { *(undefined1 *)(param_1 + 0x6de2e2) = param_2; return; } undefined4 wifi_get_hw_ctrl(int param_1) { return *(undefined4 *)(param_1 + 0x8eafe0); } void wifi_chip_cr_mirror_set(int *param_1,int param_2) { int iVar1; code *pcVar2; iVar1 = hc_get_chip_ops(*(undefined4 *)(*param_1 + 0x8eafe0)); if (param_2 == 0) { pcVar2 = whnat_hal_io_write; *(code **)(iVar1 + 0x1cc) = whnat_hal_io_read; } else { pcVar2 = (code *)0x0; *(undefined4 *)(iVar1 + 0x1cc) = 0; } *(code **)(iVar1 + 0x1d0) = pcVar2; return; } void wifi_chip_remove(int *param_1) { int iVar1; int iVar2; int iVar3; iVar3 = **(int **)*param_1; iVar1 = hc_get_chip_ops(((undefined4 *)*param_1)[0x23abf8]); iVar2 = whnat_log_get(); if (-1 < iVar2) { printk(&_LC12,"wifi_chip_remove",*(undefined4 *)(iVar3 + 0x1e4),param_1[2]); } *(int *)(iVar3 + 0x1e4) = param_1[2]; param_1[2] = 0; *(undefined4 *)(iVar1 + 0x1cc) = 0; *(undefined4 *)(iVar1 + 0x1d0) = 0; param_1[9] = 0; param_1[8] = 0; return; } uint wifi_slot_get(undefined4 *param_1) { uint uVar1; int iVar2; int iVar3; iVar3 = *(int *)*param_1; iVar2 = *(int *)(iVar3 + 8); if (iVar2 == 0) { uVar1 = 1; } else { uVar1 = (uint)(*(int *)(*(int *)(iVar2 + 0x1c) + 0x1c) << 0x18) >> 0x1b; iVar2 = whnat_log_get(); if (-1 < iVar2) { iVar2 = *(int *)(iVar3 + 8); printk(&_LC13,"wifi_slot_get",iVar2 + 0x70,*(undefined4 *)(*(int *)(iVar2 + 0x1c) + 0x1c), uVar1); } } return uVar1; } void wifi_chip_probe(int *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { int iVar1; int iVar2; uint uVar3; undefined4 *puVar4; int iVar5; int iVar6; int iVar7; puVar4 = (undefined4 *)*param_1; iVar7 = puVar4[1]; iVar5 = *(int *)*puVar4; iVar1 = hc_get_hif_ctrl(puVar4[0x23abf8]); iVar6 = *(int *)(iVar1 + 0xa0); iVar2 = whnat_log_get(); if (-1 < iVar2) { printk(&_LC14,"wifi_chip_probe",*(undefined4 *)(iVar5 + 0x1e4),param_2,param_4); } param_1[2] = *(int *)(iVar5 + 0x1e4); *(undefined4 *)(iVar5 + 0x1e4) = param_2; *(undefined4 *)(iVar7 + 0x28) = param_2; *(undefined4 *)(iVar6 + 0xd4) = param_2; wifi_chip_cr_mirror_set(param_1,0); iVar1 = *(int *)(iVar1 + 0x84); param_1[8] = iVar6; param_1[9] = iVar1; uVar3 = wifi_slot_get((undefined4 *)*param_1); *(char *)(param_1 + 1) = (char)uVar3; uVar3 = *(uint *)(**(int **)*param_1 + 8); if (uVar3 != 0) { uVar3 = *(uint *)(**(int **)*param_1 + 0x1e8) | 0xd7000; } param_1[3] = uVar3; return; } uint wifi_wpdma_base_get(undefined4 *param_1) { uint uVar1; uVar1 = *(uint *)(*(int *)*param_1 + 8); if (uVar1 != 0) { uVar1 = *(uint *)(*(int *)*param_1 + 0x1e8) | 0xd7000; } return uVar1; } void wifi_cap_get(int *param_1) { char cVar1; int iVar2; uint uVar3; int iVar4; int iVar5; int iVar6; int iVar7; iVar6 = *param_1; iVar2 = hc_get_hif_ctrl(*(undefined4 *)(iVar6 + 0x8eafe0)); cVar1 = *(char *)(*(int *)(iVar2 + 0xa0) + 0x10); iVar2 = *(int *)(*(int *)(iVar2 + 0xa0) + 0xc4); if (cVar1 == '\0') { uVar3 = 0; iVar7 = 0; } else { uVar3 = 0; iVar7 = 0; iVar4 = iVar2; do { iVar5 = iVar4 + 0x18; if ((*(int *)(iVar4 + 0xc) == 0) && (iVar7 = iVar7 + 1, uVar3 < *(ushort *)(iVar4 + 8))) { uVar3 = (uint)*(ushort *)(iVar4 + 8); } iVar4 = iVar5; } while (iVar5 != iVar2 + ((byte)(cVar1 - 1) + 1) * 0x18); } param_1[4] = iVar7; param_1[5] = uVar3; iVar2 = hc_get_chip_tx_token_nums(*(undefined4 *)(iVar6 + 0x8eafe0)); param_1[6] = iVar2; iVar2 = hc_get_chip_sw_tx_token_nums(*(undefined4 *)(iVar6 + 0x8eafe0)); param_1[7] = iVar2; return; } undefined4 whnat_hif_init(int param_1) { *(undefined4 *)(param_1 + 4) = 0x1fa91000; *(undefined4 *)(param_1 + 8) = 0x1fa92000; *(undefined4 *)(param_1 + 0xc) = 0x20004000; *(undefined4 *)(param_1 + 0x10) = 0x20104000; return 0; } undefined4 whnat_hif_exit(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) { if (param_1 != 0) { __memzero(param_1,0x24,param_3,param_4,param_4); return 0; } return 0; } void wed_ser_err_cnt_wpdma_update(int param_1,int param_2) { if ((((*(int *)(param_1 + 0x34) == 0) && (*(int *)(param_2 + 0x30) == 0)) && (*(int *)(param_1 + 0x38) == *(int *)(param_2 + 0x34))) && (*(int *)(param_1 + 0x3c) == *(int *)(param_2 + 0x38))) { *(int *)(param_1 + 0x60) = *(int *)(param_1 + 0x60) + 1; return; } *(undefined4 *)(param_1 + 0x60) = 0; return; } void wed_ser_err_cnt_txdma_update(int param_1,int *param_2) { if (*(int *)(param_1 + 4) == 0xf) { if (((*param_2 == 0xf) && (*(int *)(param_1 + 8) == param_2[1])) && (*(int *)(param_1 + 0xc) == param_2[2])) goto LAB_00018220; } else if ((((*(int *)(param_1 + 4) == 0) && (*param_2 == 0)) && ((*(int *)(param_1 + 8) == param_2[1] && (*(int *)(param_1 + 0xc) == param_2[2])))) && ((param_2[3] != param_2[4] || (param_2[5] != param_2[6])))) { LAB_00018220: *(int *)(param_1 + 0x4c) = *(int *)(param_1 + 0x4c) + 1; return; } *(undefined4 *)(param_1 + 0x4c) = 0; return; } void wed_ser_err_cnt_wdma_update(int param_1,int param_2) { if (*(int *)(param_1 + 0x20) == 8) { if (*(int *)(param_2 + 0x1c) != 8) goto LAB_00018278; } else if ((*(int *)(param_1 + 0x20) != 5) || (*(int *)(param_2 + 0x1c) != 5)) goto LAB_00018278; if ((*(int *)(param_1 + 0x24) == *(int *)(param_2 + 0x20)) && (*(int *)(param_1 + 0x28) == *(int *)(param_2 + 0x24))) { *(int *)(param_1 + 0x54) = *(int *)(param_1 + 0x54) + 1; return; } LAB_00018278: *(undefined4 *)(param_1 + 0x54) = 0; return; } void wed_ser_err_cnt_bm_update(int param_1,int param_2) { if ((((*(int *)(param_1 + 0x20) == 9) && (*(int *)(param_2 + 0x1c) == 9)) && (*(int *)(param_1 + 0x24) == *(int *)(param_2 + 0x20))) && (((*(int *)(param_1 + 0x28) == *(int *)(param_2 + 0x24) && (*(int *)(param_2 + 0x3c) == 0)) && ((*(int *)(param_1 + 0x48) == *(int *)(param_2 + 0x44) && (*(int *)(param_1 + 0x44) == *(int *)(param_2 + 0x40))))))) { *(int *)(param_1 + 0x58) = *(int *)(param_1 + 0x58) + 1; return; } *(undefined4 *)(param_1 + 0x58) = 0; return; } void wed_ser_dump(int param_1) { int iVar1; iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC0); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC1,*(undefined4 *)(param_1 + 0x74)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC2,*(undefined4 *)(param_1 + 0x6c)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC3,*(undefined4 *)(param_1 + 0x60)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC4,*(undefined4 *)(param_1 + 0x78)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC5); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC6,*(undefined4 *)(param_1 + 0x5c)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC7,*(undefined4 *)(param_1 + 100)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC8,*(undefined4 *)(param_1 + 0x70)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC9,*(undefined4 *)(param_1 + 0x68)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC10,*(undefined4 *)(param_1 + 0x14)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC11,*(undefined4 *)(param_1 + 0x18)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC12,*(undefined4 *)(param_1 + 0x20)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC13,*(undefined4 *)(param_1 + 0x24)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC14,*(undefined4 *)(param_1 + 0x1c)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC15,*(undefined4 *)(param_1 + 0x28)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC16,*(undefined4 *)(param_1 + 0x2c)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC17,*(undefined4 *)(param_1 + 0x30)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC18,*(undefined4 *)(param_1 + 0x34)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC19,*(undefined4 *)(param_1 + 0x38)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC20,*(undefined4 *)(param_1 + 0x3c)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC21,*(undefined4 *)(param_1 + 0x40)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC22,*(undefined4 *)(param_1 + 0x44)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC23,*(undefined4 *)(param_1 + 0x48)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC23,*(undefined4 *)(param_1 + 0x4c)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC24,*(undefined4 *)(param_1 + 0x50)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC25,*(undefined4 *)(param_1 + 0x54)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC26,*(undefined4 *)(param_1 + 0x58)); } iVar1 = whnat_log_get(); if (iVar1 < 0) { return; } printk(&_LC27,*(int *)(param_1 + 0x58) - *(int *)(param_1 + 0x54)); return; } undefined4 wed_ser_task(int param_1) { int iVar1; uint auStack_58 [19]; while (iVar1 = kthread_should_stop(), iVar1 == 0) { __memzero(auStack_58,0x48); iVar1 = param_1 + 0x10; whnat_hal_ser_update(param_1,auStack_58); _raw_spin_lock(param_1 + 0x84); wed_ser_err_cnt_wpdma_update(iVar1,(int)auStack_58); wed_ser_err_cnt_txdma_update(iVar1,(int *)auStack_58); wed_ser_err_cnt_wdma_update(iVar1,(int)auStack_58); wed_ser_err_cnt_bm_update(iVar1,(int)auStack_58); memcpy((void *)(param_1 + 0x14),auStack_58,0x48); DataMemoryBarrier(0xb); *(short *)(param_1 + 0x84) = *(short *)(param_1 + 0x84) + 1; DataSynchronizationBarrier(10); SendEvent(); if (((*(uint *)(param_1 + 0x70) < 4) || (*(uint *)(param_1 + 0x5c) < 4)) || (*(uint *)(param_1 + 100) < 4)) { if (3 < *(uint *)(param_1 + 0x68)) { *(int *)(param_1 + 0x78) = *(int *)(param_1 + 0x78) + 1; iVar1 = whnat_log_get(); if (1 < iVar1) { printk(&_LC29,"wed_ser_check"); } } } else { *(int *)(param_1 + 0x74) = *(int *)(param_1 + 0x74) + 1; iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC28,"wed_ser_check"); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC30,"wed_ser_detect",*(undefined4 *)(param_1 + 8)); } if (*(char *)(param_1 + 0x80) == '\x01') { whnat_hal_ser_trigger(*(int *)(param_1 + 0xf0)); } else { wed_ser_dump(param_1); *(undefined4 *)(param_1 + 0x7c) = 1000; iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC31,"wed_ser_detect"); } } } msleep(*(undefined4 *)(param_1 + 0x7c)); } iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC32,"wed_ser_task",*(undefined4 *)(param_1 + 8)); } return 0; } undefined4 wed_ser_init(int param_1) { uint uVar1; char local_30 [36]; local_30[0] = '\0'; local_30[1] = '\0'; local_30[2] = '\0'; local_30[3] = '\0'; local_30[4] = '\0'; local_30[5] = '\0'; local_30[6] = '\0'; local_30[7] = '\0'; local_30[8] = '\0'; local_30[9] = '\0'; local_30[10] = '\0'; local_30[0xb] = '\0'; local_30[0xc] = '\0'; local_30[0xd] = '\0'; local_30[0xe] = '\0'; local_30[0xf] = '\0'; local_30[0x10] = '\0'; local_30[0x11] = '\0'; local_30[0x12] = '\0'; local_30[0x13] = '\0'; local_30[0x14] = '\0'; local_30[0x15] = '\0'; local_30[0x16] = '\0'; local_30[0x17] = '\0'; local_30[0x18] = '\0'; local_30[0x19] = '\0'; local_30[0x1a] = '\0'; local_30[0x1b] = '\0'; local_30[0x1c] = '\0'; local_30[0x1d] = '\0'; local_30[0x1e] = '\0'; local_30[0x1f] = '\0'; snprintf(local_30,0x20,"%s%d","wed_task",(uint)**(byte **)(param_1 + 0xf0)); uVar1 = kthread_create_on_node(wed_ser_task,param_1,0xffffffff,local_30); *(uint *)(param_1 + 0x10) = uVar1; if (uVar1 < 0xfffff001) { *(undefined4 *)(param_1 + 0x5c) = 0; *(undefined4 *)(param_1 + 0x60) = 0; *(undefined4 *)(param_1 + 100) = 0; *(undefined4 *)(param_1 + 0x6c) = 0; *(undefined4 *)(param_1 + 0x70) = 0; *(undefined4 *)(param_1 + 0x74) = 0; *(undefined4 *)(param_1 + 0x68) = 0; *(undefined4 *)(param_1 + 0x78) = 0; *(undefined1 *)(param_1 + 0x80) = 0; *(undefined4 *)(param_1 + 0x7c) = 100; __memzero(param_1 + 0x14,0x48); *(undefined4 *)(param_1 + 0x84) = 0; wake_up_process(*(undefined4 *)(param_1 + 0x10)); } else { *(undefined4 *)(param_1 + 0x10) = 0; } return 0; } void wed_ser_exit(int param_1) { kthread_stop(*(undefined4 *)(param_1 + 0x10)); *(undefined4 *)(param_1 + 0x84) = 0; __memzero(param_1 + 0x14,0x48); return; } undefined4 init_module(void) { int iVar1; uint uVar2; uint uVar3; uint uVar4; iVar1 = whnat_log_get(); if (-1 < iVar1) { printk(&_LC172,"whnat_module_init"); } __memzero(&_LANCHOR0,0x38); mt_wlan_hook_register(&_LANCHOR2); whnat_ctrl_proc_init(0x1ce0c); uVar2 = wed_num_get(); DAT_0001ce38 = 0; iVar1 = uVar2 * 0x1d0; _LANCHOR0 = (undefined1)uVar2; DAT_0001ce10 = __kmalloc(iVar1,0x24000c0); if (iVar1 != 0) { __memzero(DAT_0001ce10,iVar1); } if (DAT_0001ce10 == 0) { iVar1 = whnat_log_get(); if (0 < iVar1) { printk(&_LC173,"whnat_ctrl_init"); } } else { if (iVar1 != 0) { __memzero(DAT_0001ce10,iVar1); } uVar4 = 0; while( true ) { if (uVar2 <= (uVar4 & 0xff)) break; iVar1 = DAT_0001ce10 + uVar4 * 0x1d0; *(char *)(DAT_0001ce10 + uVar4 * 0x1d0) = (char)uVar4; *(undefined4 *)(iVar1 + 4) = 0; *(undefined4 *)(iVar1 + 0x28) = 0; *(undefined4 *)(iVar1 + 0x1ac) = 0; uVar3 = wed_slot_map_get(uVar4); *(char *)(iVar1 + 1) = (char)uVar3; __memzero(iVar1 + 0x1b0,2); *(undefined1 *)(iVar1 + 0x1b0) = 0; *(undefined1 *)(iVar1 + 0x1b1) = 1; uVar4 = uVar4 + 1; } } whnat_hif_init(0x1ce14); return 0; } void cleanup_module(void) { int iVar1; uint uVar2; undefined4 extraout_r1; undefined4 extraout_r1_00; undefined4 extraout_r1_01; undefined4 extraout_r1_02; undefined4 uVar3; undefined4 extraout_r2; undefined4 extraout_r2_00; undefined4 extraout_r2_01; undefined4 extraout_r2_02; undefined4 uVar4; undefined4 extraout_r3; undefined4 extraout_r3_00; undefined4 extraout_r3_01; undefined4 extraout_r3_02; undefined4 uVar5; uint uVar6; iVar1 = whnat_log_get(); uVar3 = extraout_r1; uVar4 = extraout_r2; uVar5 = extraout_r3; if (-1 < iVar1) { printk(&_LC174,"whnat_module_exit"); uVar3 = extraout_r1_00; uVar4 = extraout_r2_00; uVar5 = extraout_r3_00; } uVar6 = 0; whnat_hif_exit(0x1ce14,uVar3,uVar4,uVar5); uVar2 = wed_num_get(); _LANCHOR0 = (undefined1)uVar2; while ((uVar6 & 0xff) < uVar2) { iVar1 = uVar6 * 0x1d0; uVar6 = uVar6 + 1; iVar1 = *(int *)(iVar1 + DAT_0001ce10 + 4); if (iVar1 != 0) { whnat_driver_exit(iVar1); } } kfree(DAT_0001ce10); iVar1 = whnat_log_get(); uVar3 = extraout_r1_01; uVar4 = extraout_r2_01; uVar5 = extraout_r3_01; if (-1 < iVar1) { printk(&_LC175,"whnat_ctrl_exit"); uVar3 = extraout_r1_02; uVar4 = extraout_r2_02; uVar5 = extraout_r3_02; } whnat_ctrl_proc_exit(0x1ce0c,uVar3,uVar4,uVar5); mt_wlan_hook_unregister(&_LANCHOR2); return; }