Kaynağa Gözat

Merge 1188c232e7293af1fff7abf099326df5edef8465 on remote branch

Change-Id: Ie4499874d57d154a6f100161f062b954727b790b
Linux Build Service Account 1 yıl önce
ebeveyn
işleme
71177504b0
5 değiştirilmiş dosya ile 92 ekleme ve 68 silme
  1. 13 12
      aps/rmnet_aps_main.c
  2. 3 1
      mem/Android.mk
  3. 24 21
      mem/rmnet_mem_main.c
  4. 47 32
      offload/rmnet_offload_main.c
  5. 5 2
      wlan/Android.mk

+ 13 - 12
aps/rmnet_aps_main.c

@@ -23,12 +23,12 @@
 #include "rmnet_qmap.h"
 #include "rmnet_aps.h"
 #include "rmnet_aps_genl.h"
-static char*verinfo[]={"\x38\x64\x65\x64\x63\x37\x31\x38",
-"\x36\x35\x35\x33\x39\x62\x38\x34","\x65\x32\x31\x38\x66\x34\x35\x31",
-"\x33\x32\x61\x36\x65\x62\x61\x39","\x36\x39\x30\x35\x35\x36\x38\x65",
-"\x37\x34\x31\x35\x39\x32\x31\x63","\x39\x66\x36\x36\x38\x31\x62\x34"};
-module_param_array(verinfo,charp,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
-verinfo,
+static char*verinfo[]={"\x62\x30\x37\x39\x65\x62\x37\x61",
+"\x38\x64\x65\x64\x63\x37\x31\x38","\x36\x35\x35\x33\x39\x62\x38\x34",
+"\x65\x32\x31\x38\x66\x34\x35\x31","\x33\x32\x61\x36\x65\x62\x61\x39",
+"\x36\x39\x30\x35\x35\x36\x38\x65","\x37\x34\x31\x35\x39\x32\x31\x63",
+"\x39\x66\x36\x36\x38\x31\x62\x34"};module_param_array(verinfo,charp,NULL,
+(0xcb7+5769-0x221c));MODULE_PARM_DESC(verinfo,
 "\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
 );
 #define DATARMNET63ff5c35c2 (0xd26+209-0xdf6)
@@ -150,12 +150,13 @@ DATARMNET06d2413ad2=DATARMNET86f1f2cdc9->protocol;DATARMNET203a7a0136->saddr[
 (0xd2d+202-0xdf7)]=DATARMNET86f1f2cdc9->daddr;DATARMNET203a7a0136->tos=
 DATARMNET86f1f2cdc9->tos;}else if((data[(0xd2d+202-0xdf7)]&(0xbf7+4405-0x1c3c))
 ==(0xeb7+726-0x112d)){struct ipv6hdr*DATARMNETbf55123e5b,DATARMNET9df40d3f99;
-__be16 frag_off;u8 nexthdr;DATARMNETbf55123e5b=rmnet_frag_header_ptr(
-DATARMNET9d1b321642,(0xd2d+202-0xdf7),sizeof(*DATARMNETbf55123e5b),&
-DATARMNET9df40d3f99);if(unlikely(!DATARMNETbf55123e5b))return-EINVAL;nexthdr=
-DATARMNETbf55123e5b->nexthdr;DATARMNETb65c469a15=rmnet_frag_ipv6_skip_exthdr(
-DATARMNET9d1b321642,sizeof(*DATARMNETbf55123e5b),&nexthdr,&frag_off);if(unlikely
-(DATARMNETb65c469a15<(0xd2d+202-0xdf7)))return-EFAULT;if(unlikely(frag_off)){
+__be16 frag_off;u8 nexthdr;bool DATARMNET4ea088426f;DATARMNETbf55123e5b=
+rmnet_frag_header_ptr(DATARMNET9d1b321642,(0xd2d+202-0xdf7),sizeof(*
+DATARMNETbf55123e5b),&DATARMNET9df40d3f99);if(unlikely(!DATARMNETbf55123e5b))
+return-EINVAL;nexthdr=DATARMNETbf55123e5b->nexthdr;DATARMNETb65c469a15=
+rmnet_frag_ipv6_skip_exthdr(DATARMNET9d1b321642,sizeof(*DATARMNETbf55123e5b),&
+nexthdr,&frag_off,&DATARMNET4ea088426f);if(unlikely(DATARMNETb65c469a15<
+(0xd2d+202-0xdf7)))return-EFAULT;if(unlikely(frag_off||DATARMNET4ea088426f)){
 DATARMNET203a7a0136->DATARMNETe419bc836d=(0xd26+209-0xdf6);DATARMNET203a7a0136->
 DATARMNETd43be7664c=!(frag_off&htons(IP6_OFFSET));}DATARMNET203a7a0136->
 DATARMNET9d758b8e5b=(0xd03+244-0xdf1);DATARMNET203a7a0136->DATARMNET06d2413ad2=

+ 3 - 1
mem/Android.mk

@@ -17,7 +17,9 @@ LOCAL_CLANG :=true
 LOCAL_MODULE := rmnet_mem.ko
 LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
 
-DLKM_DIR := $(TOP)/device/qcom/common/dlkm
+BOARD_COMMON_DIR ?= device/qcom/common
+
+DLKM_DIR := $(TOP)/$(BOARD_COMMON_DIR)/dlkm
 
 include $(DLKM_DIR)/Build_external_kernelmodule.mk
 

+ 24 - 21
mem/rmnet_mem_main.c

@@ -70,27 +70,30 @@ mem_slot->mem_head);put_page(mem_slot->addr);static_pool_size[mem_slot->order]--
 ;kfree(mem_slot);}}spin_unlock_irqrestore(&rmnet_mem_lock,flags);}struct page*
 rmnet_mem_get_pages_entry(gfp_t gfp_mask,unsigned int order,int*code,int*
 pageorder,unsigned id){unsigned long flags;struct mem_info*mem_page;struct page*
-page=NULL;int i=(0xd2d+202-0xdf7);int j=(0xd2d+202-0xdf7);spin_lock_irqsave(&
-rmnet_mem_lock,flags);if(order<POOL_LEN){rmnet_mem_id_req[id]++;
-rmnet_mem_order_requests[order]++;for(j=order;j>(0xd2d+202-0xdf7)&&j<POOL_LEN;j
-++){do{mem_page=list_first_entry_or_null(&rmnet_mem_pool[j],struct mem_info,
-mem_head);if(!mem_page){break;}if(page_ref_count(mem_page->addr)==
-(0xd26+209-0xdf6)){rmnet_mem_id_recycled[j]++;page=mem_page->addr;page_ref_inc(
-mem_page->addr);list_rotate_left(&rmnet_mem_pool[j]);break;}list_rotate_left(&
-rmnet_mem_pool[j]);i++;}while(i<=(0xd0a+237-0xdf2));if(page&&pageorder){*
-pageorder=j;break;}i=(0xd2d+202-0xdf7);}}if(!page){DATARMNETfb2a1a4560[id]++;if(
-order<(0xd18+223-0xdf4)){page=__dev_alloc_pages(GFP_ATOMIC,order);if(page){if(
-static_pool_size[order]<max_pool_size[order]&&pool_unbound_feature[order]){
-rmnet_mem_add_page(page,order);page_ref_inc(page);}if(pageorder){*pageorder=
-order;}}}else{if(static_pool_size[order]<max_pool_size[order]&&
-pool_unbound_feature[order]){page=__dev_alloc_pages(GFP_ATOMIC,order);if(page){
-rmnet_mem_add_page(page,order);page_ref_inc(page);}if(pageorder){*pageorder=
-order;}}}}spin_unlock_irqrestore(&rmnet_mem_lock,flags);if(pageorder&&code&&page
-){if(*pageorder==order)*code=RMNET_MEM_SUCCESS;else if(*pageorder>order)*code=
-RMNET_MEM_UPGRADE;else if(*pageorder<order)*code=RMNET_MEM_DOWNGRADE;}else if(
-pageorder&&code){*code=RMNET_MEM_FAIL;*pageorder=(0xd2d+202-0xdf7);}return page;
-}EXPORT_SYMBOL(rmnet_mem_get_pages_entry);void rmnet_mem_put_page_entry(struct 
-page*page){put_page(page);}EXPORT_SYMBOL(rmnet_mem_put_page_entry);static void 
+page=NULL;int i=(0xd2d+202-0xdf7);int j=(0xd2d+202-0xdf7);int 
+DATARMNET8224a106d8=(0xd2d+202-0xdf7);spin_lock_irqsave(&rmnet_mem_lock,flags);
+if(order<POOL_LEN){rmnet_mem_id_req[id]++;rmnet_mem_order_requests[order]++;for(
+j=order;j>(0xd2d+202-0xdf7)&&j<POOL_LEN;j++){do{mem_page=
+list_first_entry_or_null(&rmnet_mem_pool[j],struct mem_info,mem_head);if(!
+mem_page){break;}if(page_ref_count(mem_page->addr)==(0xd26+209-0xdf6)){
+rmnet_mem_id_recycled[j]++;page=mem_page->addr;page_ref_inc(mem_page->addr);
+list_rotate_left(&rmnet_mem_pool[j]);break;}list_rotate_left(&rmnet_mem_pool[j])
+;i++;}while(i<=(0xd0a+237-0xdf2));if(page&&pageorder){*pageorder=j;break;}i=
+(0xd2d+202-0xdf7);}}if(static_pool_size[order]<max_pool_size[order]&&
+pool_unbound_feature[order]){DATARMNET8224a106d8=(0xd26+209-0xdf6);}else 
+spin_unlock_irqrestore(&rmnet_mem_lock,flags);if(!page){DATARMNETfb2a1a4560[id]
+++;if(order<(0xd18+223-0xdf4)){page=__dev_alloc_pages((DATARMNET8224a106d8)?
+GFP_ATOMIC:gfp_mask,order);if(page){if(DATARMNET8224a106d8){rmnet_mem_add_page(
+page,order);page_ref_inc(page);}if(pageorder){*pageorder=order;}}}else{if(
+DATARMNET8224a106d8){page=__dev_alloc_pages((DATARMNET8224a106d8)?GFP_ATOMIC:
+gfp_mask,order);if(page){rmnet_mem_add_page(page,order);page_ref_inc(page);}if(
+pageorder){*pageorder=order;}}}}if(DATARMNET8224a106d8)spin_unlock_irqrestore(&
+rmnet_mem_lock,flags);if(pageorder&&code&&page){if(*pageorder==order)*code=
+RMNET_MEM_SUCCESS;else if(*pageorder>order)*code=RMNET_MEM_UPGRADE;else if(*
+pageorder<order)*code=RMNET_MEM_DOWNGRADE;}else if(pageorder&&code){*code=
+RMNET_MEM_FAIL;*pageorder=(0xd2d+202-0xdf7);}return page;}EXPORT_SYMBOL(
+rmnet_mem_get_pages_entry);void rmnet_mem_put_page_entry(struct page*page){
+put_page(page);}EXPORT_SYMBOL(rmnet_mem_put_page_entry);static void 
 mem_update_pool_work(struct work_struct*work){int i;for(i=(0xd2d+202-0xdf7);i<
 POOL_LEN;i++){local_bh_disable();rmnet_mem_adjust(target_static_pool_size[i],i);
 if(i==POOL_NOTIF){rmnet_mem_mode_notify(target_static_pool_size[i]);}

+ 47 - 32
offload/rmnet_offload_main.c

@@ -1,5 +1,5 @@
 /* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023, 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
@@ -23,10 +23,11 @@
 #include "rmnet_offload_state.h"
 #include "rmnet_offload_engine.h"
 #include "rmnet_offload_stats.h"
-static char*verinfo[]={"\x65\x32\x31\x38\x66\x34\x35\x31",
-"\x32\x61\x34\x34\x66\x36\x62\x65","\x37\x34\x31\x35\x39\x32\x31\x63",
-"\x34\x31\x32\x39\x36\x62\x30\x39"};module_param_array(verinfo,charp,NULL,
-(0xcb7+5769-0x221c));MODULE_PARM_DESC(verinfo,
+static char*verinfo[]={"\x63\x38\x61\x63\x61\x66\x38\x35",
+"\x65\x32\x31\x38\x66\x34\x35\x31","\x32\x61\x34\x34\x66\x36\x62\x65",
+"\x37\x34\x31\x35\x39\x32\x31\x63","\x34\x31\x32\x39\x36\x62\x30\x39"};
+module_param_array(verinfo,charp,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+verinfo,
 "\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
 );static DEFINE_SPINLOCK(DATARMNET0b5e447f18);static u32 DATARMNETcb7325e02d(
 struct DATARMNETd812bcdbb5*DATARMNET458b70e7e5){struct DATARMNET4287f07234*
@@ -67,6 +68,7 @@ DATARMNET5affe290b8;u16 DATARMNETdaa9248df1;DATARMNET5affe290b8=
 DATARMNET9d1b321642->len;DATARMNET458b70e7e5->DATARMNET3eb91ee54d=true;if(
 unlikely(!(DATARMNET9d1b321642->dev->features&NETIF_F_RXCSUM))){goto 
 DATARMNETaabe3a05f8;}if(DATARMNET9d1b321642->hdrs_valid){struct 
+DATARMNET0b82084e89*DATARMNET75be5f3406,DATARMNETc82d2f4e16;struct 
 DATARMNETd2991e8952*DATARMNET2e7cc88971,DATARMNETd1ff6cd568;DATARMNET8814564ab9
 ->DATARMNET388842c721=DATARMNET9d1b321642->ip_proto;DATARMNET8814564ab9->
 DATARMNET4ca5ac9de1=DATARMNET9d1b321642->ip_len;DATARMNET8814564ab9->
@@ -92,13 +94,25 @@ sizeof(DATARMNETbf55123e5b->DATARMNET31202449fc));memcpy(&DATARMNET8814564ab9->
 DATARMNET45ec858bc5[(0xd2d+202-0xdf7)],&DATARMNETbf55123e5b->DATARMNETc657c0a139
 [(0xd2d+202-0xdf7)],sizeof(DATARMNETbf55123e5b->DATARMNETc657c0a139));
 DATARMNET8814564ab9->DATARMNETabd58f7f89=DATARMNETbf55123e5b->
-DATARMNET0687f7ecdc;}DATARMNET2e7cc88971=rmnet_frag_header_ptr(
+DATARMNET0687f7ecdc;if(DATARMNET8814564ab9->DATARMNET4ca5ac9de1>sizeof(*
+DATARMNETbf55123e5b)){int DATARMNET0afb05821a;__be16 DATARMNET833503918f;bool 
+DATARMNETcd214ed34c;u8 DATARMNET615595a09c=DATARMNETbf55123e5b->
+DATARMNET7244bfdc4f;DATARMNET0afb05821a=rmnet_frag_ipv6_skip_exthdr(
+DATARMNET9d1b321642,sizeof(*DATARMNETbf55123e5b),&DATARMNET615595a09c,&
+DATARMNET833503918f,&DATARMNETcd214ed34c);if(DATARMNET0afb05821a<
+(0xd2d+202-0xdf7)||DATARMNET833503918f||DATARMNETcd214ed34c){if(
+DATARMNET615595a09c==DATARMNET5b166167a8)DATARMNET8814564ab9->
+DATARMNET4ca5ac9de1+=(0xd35+210-0xdff);DATARMNETa00cda79d0(DATARMNET807e4dad18);
+goto DATARMNETaabe3a05f8;}}}DATARMNET75be5f3406=rmnet_frag_header_ptr(
 DATARMNET9d1b321642,DATARMNET8814564ab9->DATARMNET4ca5ac9de1,sizeof(*
-DATARMNET2e7cc88971),&DATARMNETd1ff6cd568);if(!DATARMNET2e7cc88971)goto 
-DATARMNETaabe3a05f8;DATARMNET8814564ab9->DATARMNETa60d2ae3f6=DATARMNET2e7cc88971
-->DATARMNET6acbeeebb1;DATARMNET8814564ab9->DATARMNET5e7452ec23=
-DATARMNET2e7cc88971->DATARMNET29b8c05d14;if(DATARMNET8814564ab9->
-DATARMNET7fa8b2acbf==DATARMNETfd5c3d30e5){__be32 DATARMNET0849981c7c;if(
+DATARMNET75be5f3406),&DATARMNETc82d2f4e16);if(!DATARMNET75be5f3406)goto 
+DATARMNETaabe3a05f8;DATARMNET8814564ab9->DATARMNETa60d2ae3f6=DATARMNET75be5f3406
+->DATARMNET1b1c406ae9;DATARMNET8814564ab9->DATARMNET5e7452ec23=
+DATARMNET75be5f3406->DATARMNETdf0e8545ee;if(DATARMNET8814564ab9->
+DATARMNET7fa8b2acbf==DATARMNETfd5c3d30e5){__be32 DATARMNET0849981c7c;
+DATARMNET2e7cc88971=rmnet_frag_header_ptr(DATARMNET9d1b321642,
+DATARMNET8814564ab9->DATARMNET4ca5ac9de1,sizeof(*DATARMNET2e7cc88971),&
+DATARMNETd1ff6cd568);if(!DATARMNET2e7cc88971)goto DATARMNETaabe3a05f8;if(
 DATARMNET9d1b321642->tcp_seq_set)DATARMNET0849981c7c=DATARMNET9d1b321642->
 tcp_seq;else DATARMNET0849981c7c=DATARMNET2e7cc88971->DATARMNETb3e70104e0;
 DATARMNET8814564ab9->DATARMNETbc28a5970f=ntohl(DATARMNET0849981c7c);}
@@ -129,29 +143,30 @@ DATARMNET8e175ac02d);DATARMNET458b70e7e5->DATARMNET8f59f5a745=
 DATARMNETdaa9248df1!=DATARMNET5affe290b8;}else if(DATARMNET8814564ab9->
 DATARMNET388842c721==(0xd03+244-0xdf1)){struct DATARMNET64bb8f616e*
 DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;int DATARMNET0549c61885;__be16 
-DATARMNET833503918f;u8 DATARMNET3f56a2bcf4;DATARMNETbf55123e5b=
-rmnet_frag_header_ptr(DATARMNET9d1b321642,(0xd2d+202-0xdf7),sizeof(*
-DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)goto 
+DATARMNET833503918f;bool DATARMNETcd214ed34c;u8 DATARMNET3f56a2bcf4;
+DATARMNETbf55123e5b=rmnet_frag_header_ptr(DATARMNET9d1b321642,(0xd2d+202-0xdf7),
+sizeof(*DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)goto 
 DATARMNETaabe3a05f8;DATARMNET3f56a2bcf4=DATARMNETbf55123e5b->DATARMNET7244bfdc4f
 ;DATARMNET0549c61885=rmnet_frag_ipv6_skip_exthdr(DATARMNET9d1b321642,sizeof(*
-DATARMNETbf55123e5b),&DATARMNET3f56a2bcf4,&DATARMNET833503918f);if(
-DATARMNET0549c61885<(0xd2d+202-0xdf7)){goto DATARMNETaabe3a05f8;}
-DATARMNET8814564ab9->DATARMNET4ca5ac9de1=(u16)DATARMNET0549c61885;
-DATARMNET8814564ab9->DATARMNET7fa8b2acbf=DATARMNET3f56a2bcf4;memcpy(&
-DATARMNET8814564ab9->DATARMNET949c2754de[(0xd2d+202-0xdf7)],&DATARMNETbf55123e5b
-->DATARMNET31202449fc[(0xd2d+202-0xdf7)],sizeof(DATARMNETbf55123e5b->
-DATARMNET31202449fc));memcpy(&DATARMNET8814564ab9->DATARMNET45ec858bc5[
-(0xd2d+202-0xdf7)],&DATARMNETbf55123e5b->DATARMNETc657c0a139[(0xd2d+202-0xdf7)],
-sizeof(DATARMNETbf55123e5b->DATARMNETc657c0a139));DATARMNET8814564ab9->
-DATARMNETabd58f7f89=DATARMNETbf55123e5b->DATARMNET0687f7ecdc;if(
-DATARMNET833503918f){if(DATARMNET8814564ab9->DATARMNET7fa8b2acbf==
-DATARMNET5b166167a8)DATARMNET8814564ab9->DATARMNET4ca5ac9de1+=(0xd35+210-0xdff);
-DATARMNETa00cda79d0(DATARMNET807e4dad18);goto DATARMNETaabe3a05f8;}
-DATARMNETdaa9248df1=ntohs(DATARMNETbf55123e5b->DATARMNETaa340485c5)+sizeof(*
-DATARMNETbf55123e5b);DATARMNET458b70e7e5->DATARMNET8f59f5a745=
-DATARMNETdaa9248df1!=DATARMNET5affe290b8;}else{return true;}if(
-DATARMNET8814564ab9->DATARMNET7fa8b2acbf==DATARMNETfd5c3d30e5){struct 
-DATARMNETd2991e8952*DATARMNET2e7cc88971,DATARMNETd1ff6cd568;DATARMNET2e7cc88971=
+DATARMNETbf55123e5b),&DATARMNET3f56a2bcf4,&DATARMNET833503918f,&
+DATARMNETcd214ed34c);if(DATARMNET0549c61885<(0xd2d+202-0xdf7)){goto 
+DATARMNETaabe3a05f8;}DATARMNET8814564ab9->DATARMNET4ca5ac9de1=(u16)
+DATARMNET0549c61885;DATARMNET8814564ab9->DATARMNET7fa8b2acbf=DATARMNET3f56a2bcf4
+;memcpy(&DATARMNET8814564ab9->DATARMNET949c2754de[(0xd2d+202-0xdf7)],&
+DATARMNETbf55123e5b->DATARMNET31202449fc[(0xd2d+202-0xdf7)],sizeof(
+DATARMNETbf55123e5b->DATARMNET31202449fc));memcpy(&DATARMNET8814564ab9->
+DATARMNET45ec858bc5[(0xd2d+202-0xdf7)],&DATARMNETbf55123e5b->DATARMNETc657c0a139
+[(0xd2d+202-0xdf7)],sizeof(DATARMNETbf55123e5b->DATARMNETc657c0a139));
+DATARMNET8814564ab9->DATARMNETabd58f7f89=DATARMNETbf55123e5b->
+DATARMNET0687f7ecdc;if(DATARMNET833503918f||DATARMNETcd214ed34c){if(
+DATARMNET8814564ab9->DATARMNET7fa8b2acbf==DATARMNET5b166167a8)
+DATARMNET8814564ab9->DATARMNET4ca5ac9de1+=(0xd35+210-0xdff);DATARMNETa00cda79d0(
+DATARMNET807e4dad18);goto DATARMNETaabe3a05f8;}DATARMNETdaa9248df1=ntohs(
+DATARMNETbf55123e5b->DATARMNETaa340485c5)+sizeof(*DATARMNETbf55123e5b);
+DATARMNET458b70e7e5->DATARMNET8f59f5a745=DATARMNETdaa9248df1!=
+DATARMNET5affe290b8;}else{return true;}if(DATARMNET8814564ab9->
+DATARMNET7fa8b2acbf==DATARMNETfd5c3d30e5){struct DATARMNETd2991e8952*
+DATARMNET2e7cc88971,DATARMNETd1ff6cd568;DATARMNET2e7cc88971=
 rmnet_frag_header_ptr(DATARMNET9d1b321642,DATARMNET8814564ab9->
 DATARMNET4ca5ac9de1,sizeof(*DATARMNET2e7cc88971),&DATARMNETd1ff6cd568);if(!
 DATARMNET2e7cc88971)goto DATARMNETaabe3a05f8;DATARMNET8814564ab9->

+ 5 - 2
wlan/Android.mk

@@ -18,10 +18,13 @@ LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
 LOCAL_MODULE := rmnet_wlan.ko
 LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
 
+BOARD_OPENSOURCE_DIR ?= vendor/qcom/opensource
+BOARD_COMMON_DIR ?= device/qcom/common
+
 #path from build top to the core directory
 DATARMNET_CORE_PATH := datarmnet/core
-RMNET_CORE_PATH := vendor/qcom/opensource/$(DATARMNET_CORE_PATH)
-DLKM_DIR := $(TOP)/device/qcom/common/dlkm
+RMNET_CORE_PATH := $(BOARD_OPENSOURCE_DIR)/$(DATARMNET_CORE_PATH)
+DLKM_DIR := $(TOP)/$(BOARD_COMMON_DIR)/dlkm
 #absolute path to the build directory. Can't use $(TOP) here since
 #that resolves to ., and we pass this to Kbuild, where . is different
 RMNET_CORE_INC_DIR := $(abspath $(RMNET_CORE_PATH))