import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / misc / mediatek / dual_ccci / ccmni.c
1 /*****************************************************************************
2 *
3 * Filename:
4 * ---------
5 * ccmni.c
6 *
7 * Project:
8 * --------
9 *
10 *
11 * Description:
12 * ------------
13 *
14 *
15 * Author:
16 * -------
17 *
18 *
19 ****************************************************************************/
20 #include <ccci.h>
21 extern int ccmni_v1_init(int md_id);
22 extern void ccmni_v1_exit(int md_id);
23 extern int ccmni_v2_init(int md_id);
24 extern void ccmni_v2_exit(int md_id);
25 extern int ccmni_v1_ipo_h_restore(int md_id);
26 extern int ccmni_v2_ipo_h_restore(int md_id);
27
28
29 void *ccmni_ctl_block[MAX_MD_NUM];
30
31 static char mac_addr_table[MAX_MD_NUM*5][ETH_ALEN];
32 static int mac_addr_num = 0;
33
34
35 int is_mac_addr_duplicate(char *mac)
36 {
37 int i = 0, j;
38 int found = 0;
39
40 for(i=0; i<mac_addr_num; i++) {
41 if( strcmp(mac, mac_addr_table[i]) == 0 ) {
42 found = 1;
43 return !0;
44 }
45 }
46 if(!found) {
47 for(j=0; j<ETH_ALEN; j++)
48 mac_addr_table[i][j] = mac[j];
49 mac_addr_num++;
50 if(mac_addr_num >= (MAX_MD_NUM*5) )
51 mac_addr_num--;
52 }
53 return 0;
54 }
55
56 int ccmni_init(int md_id)
57 {
58 int ccmni_version = 0;
59
60 if(ccci_get_sub_module_cfg(md_id, "net", (char*)&ccmni_version, sizeof(int)) != sizeof(int)) {
61 CCCI_MSG_INF(md_id, "net", "[Error]get ccmni version fail\n");
62 return -1;
63 } else {
64 CCCI_MSG_INF(md_id, "net", "ccmni driver v%d\n", ccmni_version);
65 }
66
67 switch(ccmni_version)
68 {
69 case 1:
70 return ccmni_v1_init(md_id);
71 case 2:
72 return ccmni_v2_init(md_id);
73 default:
74 CCCI_MSG_INF(md_id, "net", "[Error]invalid CCMNI version: %d\n", ccmni_version);
75 return -1;
76 }
77 }
78
79
80 void ccmni_exit(int md_id)
81 {
82 int ccmni_version = 0;
83
84 if(ccci_get_sub_module_cfg(md_id, "net", (char*)&ccmni_version, sizeof(int)) != sizeof(int)) {
85 CCCI_MSG_INF(md_id, "net", "get ccmni version fail\n");
86 return;
87 }
88
89 switch(ccmni_version)
90 {
91 case 1:
92 return ccmni_v1_exit(md_id);
93 case 2:
94 return ccmni_v2_exit(md_id);
95 default:
96 CCCI_MSG_INF(md_id, "net", "[Error]invalid CCMNI version: %d\n", ccmni_version);
97 return;
98 }
99 }
100
101
102 int ccmni_ipo_h_restore(int md_id)
103 {
104 int ccmni_version = 0;
105
106 if(ccci_get_sub_module_cfg(md_id, "net", (char*)&ccmni_version, sizeof(int)) != sizeof(int)) {
107 CCCI_MSG("Get ccmni verion fail\n");
108 return -1;
109 }
110
111 switch(ccmni_version)
112 {
113 case 1:
114 return ccmni_v1_ipo_h_restore(md_id);
115 case 2:
116 return ccmni_v2_ipo_h_restore(md_id);
117 default:
118 CCCI_MSG("[Error]CCMNI not support version\n");
119 return -1;
120 }
121 }
122