123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
- #include <linux/module.h>
- #include <linux/netdevice.h>
- #include <linux/rcupdate.h>
- #include "rmnet_map.h"
- #include "rmnet_private.h"
- #include "qmi_rmnet.h"
- #include "rmnet_offload_state.h"
- #include "rmnet_offload_engine.h"
- MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");
- #define DATARMNET1f03ff7987 (0xd2d+202-0xdf7)
- static struct DATARMNET70f3b87b5d*DATARMNETe05748b000;static void
- DATARMNETac9c8c14b1(void){struct rmnet_port*DATARMNETf0d9de7e2f=
- DATARMNETe05748b000->DATARMNET403589239f;struct DATARMNET74bb35b8f2*
- DATARMNET87b015f76f;qmi_rmnet_ps_ind_deregister(DATARMNETf0d9de7e2f,&
- DATARMNETe05748b000->DATARMNET341393eda2);DATARMNET87b015f76f=&
- DATARMNETe05748b000->DATARMNETa9f2b2f677;if(DATARMNET87b015f76f->
- DATARMNETc2832b8f85)rmnet_map_dl_ind_deregister(DATARMNETf0d9de7e2f,&
- DATARMNET87b015f76f->DATARMNET8633ae8f1e);}static void DATARMNET345f805b34(void)
- {LIST_HEAD(DATARMNET6f9bfa17e6);if(!DATARMNETe05748b000)return;
- DATARMNETac9c8c14b1();DATARMNETba38823a2f();DATARMNET560e127137();
- synchronize_rcu();DATARMNETae70636c90(&DATARMNET6f9bfa17e6);DATARMNETb98b78b8e3(
- );kfree(DATARMNETe05748b000);DATARMNETe05748b000=NULL;}static int
- DATARMNETd68e3594a7(void){struct rmnet_port*DATARMNETf0d9de7e2f=
- DATARMNETe05748b000->DATARMNET403589239f;struct qmi_rmnet_ps_ind*
- DATARMNETbc78d7fd3c;struct DATARMNET74bb35b8f2*DATARMNET87b015f76f;struct
- rmnet_map_dl_ind*DATARMNET8633ae8f1e;int DATARMNETb14e52a504=DATARMNET0529bb9c4e
- ;DATARMNETbc78d7fd3c=&DATARMNETe05748b000->DATARMNET341393eda2;
- DATARMNETbc78d7fd3c->ps_on_handler=DATARMNET9292bebdd3;DATARMNETbc78d7fd3c->
- ps_off_handler=DATARMNETb7e47d7254;if(qmi_rmnet_ps_ind_register(
- DATARMNETf0d9de7e2f,DATARMNETbc78d7fd3c)){DATARMNETb14e52a504=
- DATARMNET8e1c5c09f8;pr_warn(
- "\x25\x73\x28\x29\x3a\x20\x50\x53\x20\x43\x42\x20\x72\x65\x67\x69\x73\x74\x72\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
- ,__func__);}if(DATARMNETf0d9de7e2f->data_format&
- RMNET_INGRESS_FORMAT_DL_MARKER_V2){DATARMNET87b015f76f=&DATARMNETe05748b000->
- DATARMNETa9f2b2f677;DATARMNET8633ae8f1e=&DATARMNET87b015f76f->
- DATARMNET8633ae8f1e;DATARMNET8633ae8f1e->priority=DATARMNET1f03ff7987;
- DATARMNET8633ae8f1e->dl_hdr_handler_v2=DATARMNET95e1703026;DATARMNET8633ae8f1e->
- dl_trl_handler_v2=DATARMNETc9dd320f49;if(rmnet_map_dl_ind_register(
- DATARMNETf0d9de7e2f,DATARMNET8633ae8f1e)){DATARMNETb14e52a504=
- DATARMNET8e1c5c09f8;pr_warn(
- "\x25\x73\x28\x29\x3a\x20\x44\x4c\x20\x43\x42\x20\x72\x65\x67\x69\x73\x74\x72\x61\x74\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
- ,__func__);}else{DATARMNET87b015f76f->DATARMNETc2832b8f85=true;}}
- DATARMNETd4230b6bfe();return DATARMNETb14e52a504;}static int DATARMNET9f53d54812
- (struct rmnet_port*DATARMNETf0d9de7e2f){int DATARMNETb14e52a504;
- DATARMNETe05748b000=kzalloc(sizeof(*DATARMNETe05748b000),GFP_KERNEL);if(!
- DATARMNETe05748b000){pr_err(
- "\x25\x73\x28\x29\x3a\x20\x52\x65\x73\x6f\x75\x72\x63\x65\x20\x61\x6c\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
- ,__func__);return DATARMNETb881657565;}DATARMNETe05748b000->DATARMNET403589239f=
- DATARMNETf0d9de7e2f;DATARMNETb14e52a504=DATARMNETdbcaf01255();if(
- DATARMNETb14e52a504<(0xd2d+202-0xdf7))goto DATARMNET1d7e728ddf;
- DATARMNETb14e52a504=DATARMNETd68e3594a7();if(DATARMNETb14e52a504!=
- DATARMNET0529bb9c4e){pr_warn(
- "\x25\x73\x28\x29\x3a\x20\x43\x61\x6c\x6c\x62\x61\x63\x6b\x20\x72\x65\x67\x69\x73\x74\x72\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
- ,__func__);}DATARMNETe05748b000->DATARMNETcb2b3ae8e4=(0xd26+209-0xdf6);
- DATARMNET818b960147();return DATARMNETb14e52a504;DATARMNET1d7e728ddf:kfree(
- DATARMNETe05748b000);DATARMNETe05748b000=NULL;return DATARMNETb14e52a504;}static
- int DATARMNET7dec24813e(struct notifier_block*DATARMNET272c159b3c,unsigned long
- DATARMNET4abd997295,void*DATARMNET3f254bae11){struct net_device*
- DATARMNET00dcb79bc4=netdev_notifier_info_to_dev(DATARMNET3f254bae11);struct
- rmnet_port*DATARMNETf0d9de7e2f;struct rmnet_priv*DATARMNETe823dcf978;int
- DATARMNETb14e52a504;(void)DATARMNET272c159b3c;if(!DATARMNET00dcb79bc4||strncmp(
- DATARMNET00dcb79bc4->name,"\x72\x6d\x6e\x65\x74\x5f\x64\x61\x74\x61",
- (0xd27+224-0xdfd)))goto DATARMNETaabe3a05f8;switch(DATARMNET4abd997295){case
- NETDEV_REGISTER:if(DATARMNETe05748b000){DATARMNETe05748b000->DATARMNETcb2b3ae8e4
- ++;goto DATARMNETaabe3a05f8;}DATARMNETe823dcf978=netdev_priv(DATARMNET00dcb79bc4
- );DATARMNETf0d9de7e2f=rmnet_get_port(DATARMNETe823dcf978->real_dev);if(!
- DATARMNETf0d9de7e2f){pr_err(
- "\x25\x73\x28\x29\x3a\x20\x49\x6e\x76\x61\x6c\x69\x64\x20\x72\x6d\x6e\x65\x74\x20\x63\x6f\x6e\x66\x69\x67\x75\x72\x61\x74\x69\x6f\x6e\x20\x6f\x6e\x20\x25\x73" "\n"
- ,__func__,DATARMNET00dcb79bc4->name);goto DATARMNETaabe3a05f8;}pr_info(
- "\x25\x73\x28\x29\x3a\x20\x49\x6e\x69\x74\x69\x61\x6c\x69\x7a\x69\x6e\x67\x20\x6f\x6e\x20\x64\x65\x76\x69\x63\x65\x20\x25\x73" "\n"
- ,__func__,DATARMNET00dcb79bc4->name);DATARMNETb14e52a504=DATARMNET9f53d54812(
- DATARMNETf0d9de7e2f);if(DATARMNETb14e52a504==DATARMNETb881657565){pr_err(
- "\x25\x73\x28\x29\x3a\x20\x49\x6e\x69\x74\x69\x61\x6c\x69\x7a\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
- ,__func__);goto DATARMNETaabe3a05f8;}break;case NETDEV_UNREGISTER:if(!
- DATARMNETe05748b000)goto DATARMNETaabe3a05f8;if(--DATARMNETe05748b000->
- DATARMNETcb2b3ae8e4)goto DATARMNETaabe3a05f8;pr_info(
- "\x25\x73\x28\x29\x3a\x20\x55\x6e\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x69\x6e\x67\x20\x6f\x6e\x20\x64\x65\x76\x69\x63\x65\x20\x25\x73" "\n"
- ,__func__,DATARMNET00dcb79bc4->name);DATARMNET345f805b34();break;}
- DATARMNETaabe3a05f8:return NOTIFY_DONE;}static struct notifier_block
- DATARMNETcae9c64c41={.notifier_call=DATARMNET7dec24813e,.priority=
- (0xd26+209-0xdf6),};static int __init DATARMNETb1c42acd9c(void){pr_info(
- "\x25\x73\x28\x29\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x6f\x66\x66\x6c\x6f\x61\x64\x20\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x69\x6e\x67" "\n"
- ,__func__);return register_netdevice_notifier(&DATARMNETcae9c64c41);}static void
- __exit DATARMNET0f6d85e415(void){pr_info(
- "\x25\x73\x28\x29\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x6f\x66\x66\x6c\x6f\x61\x64\x20\x65\x78\x69\x74\x69\x6e\x67" "\n"
- ,__func__);unregister_netdevice_notifier(&DATARMNETcae9c64c41);}struct
- DATARMNET70f3b87b5d*DATARMNETc2a630b113(void){return DATARMNETe05748b000;}
- module_init(DATARMNETb1c42acd9c);module_exit(DATARMNET0f6d85e415);
|