1*042d53a7SEvalZero /*
2*042d53a7SEvalZero * Licensed to the Apache Software Foundation (ASF) under one
3*042d53a7SEvalZero * or more contributor license agreements. See the NOTICE file
4*042d53a7SEvalZero * distributed with this work for additional information
5*042d53a7SEvalZero * regarding copyright ownership. The ASF licenses this file
6*042d53a7SEvalZero * to you under the Apache License, Version 2.0 (the
7*042d53a7SEvalZero * "License"); you may not use this file except in compliance
8*042d53a7SEvalZero * with the License. You may obtain a copy of the License at
9*042d53a7SEvalZero *
10*042d53a7SEvalZero * http://www.apache.org/licenses/LICENSE-2.0
11*042d53a7SEvalZero *
12*042d53a7SEvalZero * Unless required by applicable law or agreed to in writing,
13*042d53a7SEvalZero * software distributed under the License is distributed on an
14*042d53a7SEvalZero * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15*042d53a7SEvalZero * KIND, either express or implied. See the License for the
16*042d53a7SEvalZero * specific language governing permissions and limitations
17*042d53a7SEvalZero * under the License.
18*042d53a7SEvalZero */
19*042d53a7SEvalZero
20*042d53a7SEvalZero #include <stdint.h>
21*042d53a7SEvalZero #include <assert.h>
22*042d53a7SEvalZero #include <string.h>
23*042d53a7SEvalZero #include "syscfg/syscfg.h"
24*042d53a7SEvalZero #include "os/os.h"
25*042d53a7SEvalZero #include "nimble/ble.h"
26*042d53a7SEvalZero #include "nimble/nimble_opt.h"
27*042d53a7SEvalZero #include "controller/ble_hw.h"
28*042d53a7SEvalZero
29*042d53a7SEvalZero /* Total number of white list elements supported by nrf52 */
30*042d53a7SEvalZero #define BLE_HW_WHITE_LIST_SIZE (0)
31*042d53a7SEvalZero
32*042d53a7SEvalZero /* We use this to keep track of which entries are set to valid addresses */
33*042d53a7SEvalZero static uint8_t g_ble_hw_whitelist_mask;
34*042d53a7SEvalZero
35*042d53a7SEvalZero /* Returns public device address or -1 if not present */
36*042d53a7SEvalZero int
ble_hw_get_public_addr(ble_addr_t * addr)37*042d53a7SEvalZero ble_hw_get_public_addr(ble_addr_t *addr)
38*042d53a7SEvalZero {
39*042d53a7SEvalZero return -1;
40*042d53a7SEvalZero }
41*042d53a7SEvalZero
42*042d53a7SEvalZero /* Returns random static address or -1 if not present */
43*042d53a7SEvalZero int
ble_hw_get_static_addr(ble_addr_t * addr)44*042d53a7SEvalZero ble_hw_get_static_addr(ble_addr_t *addr)
45*042d53a7SEvalZero {
46*042d53a7SEvalZero return -1;
47*042d53a7SEvalZero }
48*042d53a7SEvalZero
49*042d53a7SEvalZero /**
50*042d53a7SEvalZero * Clear the whitelist
51*042d53a7SEvalZero *
52*042d53a7SEvalZero * @return int
53*042d53a7SEvalZero */
54*042d53a7SEvalZero void
ble_hw_whitelist_clear(void)55*042d53a7SEvalZero ble_hw_whitelist_clear(void)
56*042d53a7SEvalZero {
57*042d53a7SEvalZero g_ble_hw_whitelist_mask = 0;
58*042d53a7SEvalZero }
59*042d53a7SEvalZero
60*042d53a7SEvalZero /**
61*042d53a7SEvalZero * Add a device to the hw whitelist
62*042d53a7SEvalZero *
63*042d53a7SEvalZero * @param addr
64*042d53a7SEvalZero * @param addr_type
65*042d53a7SEvalZero *
66*042d53a7SEvalZero * @return int 0: success, BLE error code otherwise
67*042d53a7SEvalZero */
68*042d53a7SEvalZero int
ble_hw_whitelist_add(uint8_t * addr,uint8_t addr_type)69*042d53a7SEvalZero ble_hw_whitelist_add(uint8_t *addr, uint8_t addr_type)
70*042d53a7SEvalZero {
71*042d53a7SEvalZero return BLE_ERR_MEM_CAPACITY;
72*042d53a7SEvalZero }
73*042d53a7SEvalZero
74*042d53a7SEvalZero /**
75*042d53a7SEvalZero * Remove a device from the hw whitelist
76*042d53a7SEvalZero *
77*042d53a7SEvalZero * @param addr
78*042d53a7SEvalZero * @param addr_type
79*042d53a7SEvalZero *
80*042d53a7SEvalZero */
81*042d53a7SEvalZero void
ble_hw_whitelist_rmv(uint8_t * addr,uint8_t addr_type)82*042d53a7SEvalZero ble_hw_whitelist_rmv(uint8_t *addr, uint8_t addr_type)
83*042d53a7SEvalZero {
84*042d53a7SEvalZero return;
85*042d53a7SEvalZero }
86*042d53a7SEvalZero
87*042d53a7SEvalZero /**
88*042d53a7SEvalZero * Returns the size of the whitelist in HW
89*042d53a7SEvalZero *
90*042d53a7SEvalZero * @return int Number of devices allowed in whitelist
91*042d53a7SEvalZero */
92*042d53a7SEvalZero uint8_t
ble_hw_whitelist_size(void)93*042d53a7SEvalZero ble_hw_whitelist_size(void)
94*042d53a7SEvalZero {
95*042d53a7SEvalZero return BLE_HW_WHITE_LIST_SIZE;
96*042d53a7SEvalZero }
97*042d53a7SEvalZero
98*042d53a7SEvalZero /**
99*042d53a7SEvalZero * Enable the whitelisted devices
100*042d53a7SEvalZero */
101*042d53a7SEvalZero void
ble_hw_whitelist_enable(void)102*042d53a7SEvalZero ble_hw_whitelist_enable(void)
103*042d53a7SEvalZero {
104*042d53a7SEvalZero return;
105*042d53a7SEvalZero }
106*042d53a7SEvalZero
107*042d53a7SEvalZero /**
108*042d53a7SEvalZero * Disables the whitelisted devices
109*042d53a7SEvalZero */
110*042d53a7SEvalZero void
ble_hw_whitelist_disable(void)111*042d53a7SEvalZero ble_hw_whitelist_disable(void)
112*042d53a7SEvalZero {
113*042d53a7SEvalZero return;
114*042d53a7SEvalZero }
115*042d53a7SEvalZero
116*042d53a7SEvalZero /**
117*042d53a7SEvalZero * Boolean function which returns true ('1') if there is a match on the
118*042d53a7SEvalZero * whitelist.
119*042d53a7SEvalZero *
120*042d53a7SEvalZero * @return int
121*042d53a7SEvalZero */
122*042d53a7SEvalZero int
ble_hw_whitelist_match(void)123*042d53a7SEvalZero ble_hw_whitelist_match(void)
124*042d53a7SEvalZero {
125*042d53a7SEvalZero return 0;
126*042d53a7SEvalZero }
127*042d53a7SEvalZero
128*042d53a7SEvalZero /* Encrypt data */
129*042d53a7SEvalZero int
ble_hw_encrypt_block(struct ble_encryption_block * ecb)130*042d53a7SEvalZero ble_hw_encrypt_block(struct ble_encryption_block *ecb)
131*042d53a7SEvalZero {
132*042d53a7SEvalZero return -1;
133*042d53a7SEvalZero }
134*042d53a7SEvalZero
135*042d53a7SEvalZero /**
136*042d53a7SEvalZero * Initialize the random number generator
137*042d53a7SEvalZero *
138*042d53a7SEvalZero * @param cb
139*042d53a7SEvalZero * @param bias
140*042d53a7SEvalZero *
141*042d53a7SEvalZero * @return int
142*042d53a7SEvalZero */
143*042d53a7SEvalZero int
ble_hw_rng_init(ble_rng_isr_cb_t cb,int bias)144*042d53a7SEvalZero ble_hw_rng_init(ble_rng_isr_cb_t cb, int bias)
145*042d53a7SEvalZero {
146*042d53a7SEvalZero return -1;
147*042d53a7SEvalZero }
148*042d53a7SEvalZero
149*042d53a7SEvalZero /**
150*042d53a7SEvalZero * Start the random number generator
151*042d53a7SEvalZero *
152*042d53a7SEvalZero * @return int
153*042d53a7SEvalZero */
154*042d53a7SEvalZero int
ble_hw_rng_start(void)155*042d53a7SEvalZero ble_hw_rng_start(void)
156*042d53a7SEvalZero {
157*042d53a7SEvalZero return -1;
158*042d53a7SEvalZero }
159*042d53a7SEvalZero
160*042d53a7SEvalZero /**
161*042d53a7SEvalZero * Stop the random generator
162*042d53a7SEvalZero *
163*042d53a7SEvalZero * @return int
164*042d53a7SEvalZero */
165*042d53a7SEvalZero int
ble_hw_rng_stop(void)166*042d53a7SEvalZero ble_hw_rng_stop(void)
167*042d53a7SEvalZero {
168*042d53a7SEvalZero return -1;
169*042d53a7SEvalZero }
170*042d53a7SEvalZero
171*042d53a7SEvalZero /**
172*042d53a7SEvalZero * Read the random number generator.
173*042d53a7SEvalZero *
174*042d53a7SEvalZero * @return uint8_t
175*042d53a7SEvalZero */
176*042d53a7SEvalZero uint8_t
ble_hw_rng_read(void)177*042d53a7SEvalZero ble_hw_rng_read(void)
178*042d53a7SEvalZero {
179*042d53a7SEvalZero return 0;
180*042d53a7SEvalZero }
181*042d53a7SEvalZero
182*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY) == 1)
183*042d53a7SEvalZero /**
184*042d53a7SEvalZero * Clear the resolving list
185*042d53a7SEvalZero *
186*042d53a7SEvalZero * @return int
187*042d53a7SEvalZero */
188*042d53a7SEvalZero void
ble_hw_resolv_list_clear(void)189*042d53a7SEvalZero ble_hw_resolv_list_clear(void)
190*042d53a7SEvalZero {
191*042d53a7SEvalZero }
192*042d53a7SEvalZero
193*042d53a7SEvalZero /**
194*042d53a7SEvalZero * Add a device to the hw resolving list
195*042d53a7SEvalZero *
196*042d53a7SEvalZero * @param irk Pointer to IRK to add
197*042d53a7SEvalZero *
198*042d53a7SEvalZero * @return int 0: success, BLE error code otherwise
199*042d53a7SEvalZero */
200*042d53a7SEvalZero int
ble_hw_resolv_list_add(uint8_t * irk)201*042d53a7SEvalZero ble_hw_resolv_list_add(uint8_t *irk)
202*042d53a7SEvalZero {
203*042d53a7SEvalZero return BLE_ERR_MEM_CAPACITY;
204*042d53a7SEvalZero }
205*042d53a7SEvalZero
206*042d53a7SEvalZero /**
207*042d53a7SEvalZero * Remove a device from the hw resolving list
208*042d53a7SEvalZero *
209*042d53a7SEvalZero * @param index Index of IRK to remove
210*042d53a7SEvalZero */
211*042d53a7SEvalZero void
ble_hw_resolv_list_rmv(int index)212*042d53a7SEvalZero ble_hw_resolv_list_rmv(int index)
213*042d53a7SEvalZero {
214*042d53a7SEvalZero }
215*042d53a7SEvalZero
216*042d53a7SEvalZero /**
217*042d53a7SEvalZero * Returns the size of the resolving list. NOTE: this returns the maximum
218*042d53a7SEvalZero * allowable entries in the HW. Configuration options may limit this.
219*042d53a7SEvalZero *
220*042d53a7SEvalZero * @return int Number of devices allowed in resolving list
221*042d53a7SEvalZero */
222*042d53a7SEvalZero uint8_t
ble_hw_resolv_list_size(void)223*042d53a7SEvalZero ble_hw_resolv_list_size(void)
224*042d53a7SEvalZero {
225*042d53a7SEvalZero return 0;
226*042d53a7SEvalZero }
227*042d53a7SEvalZero
228*042d53a7SEvalZero /**
229*042d53a7SEvalZero * Called to determine if the address received was resolved.
230*042d53a7SEvalZero *
231*042d53a7SEvalZero * @return int Negative values indicate unresolved address; positive values
232*042d53a7SEvalZero * indicate index in resolving list of resolved address.
233*042d53a7SEvalZero */
234*042d53a7SEvalZero int
ble_hw_resolv_list_match(void)235*042d53a7SEvalZero ble_hw_resolv_list_match(void)
236*042d53a7SEvalZero {
237*042d53a7SEvalZero return -1;
238*042d53a7SEvalZero }
239*042d53a7SEvalZero #endif
240