Skip to content

Commit b42234a

Browse files
committed
[crypto, drivers, tests] Refactor crypto API to use StartOp/Process/EndOp pattern. Add null checks to all drivers
1 parent a1823e3 commit b42234a

37 files changed

Lines changed: 827 additions & 616 deletions

boards/stm32wb55xx_nucleo/board.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -237,22 +237,10 @@ whal_Rng g_whalRng = {
237237
};
238238

239239
/* Crypto */
240-
static const whal_Crypto_OpFunc cryptoOps[BOARD_CRYPTO_OP_COUNT] = {
241-
[BOARD_CRYPTO_AES_ECB] = whal_Stm32wbAes_AesEcb,
242-
[BOARD_CRYPTO_AES_CBC] = whal_Stm32wbAes_AesCbc,
243-
[BOARD_CRYPTO_AES_CTR] = whal_Stm32wbAes_AesCtr,
244-
[BOARD_CRYPTO_AES_GCM] = whal_Stm32wbAes_AesGcm,
245-
[BOARD_CRYPTO_AES_GMAC] = whal_Stm32wbAes_AesGmac,
246-
[BOARD_CRYPTO_AES_CCM] = whal_Stm32wbAes_AesCcm,
247-
};
248-
249240
whal_Crypto g_whalCrypto = {
250241
.regmap = { WHAL_STM32WB55_AES1_REGMAP },
251242
/* .driver: direct API mapping */
252243

253-
.ops = cryptoOps,
254-
.opsCount = BOARD_CRYPTO_OP_COUNT,
255-
256244
.cfg = &(whal_Stm32wbAes_Cfg) {
257245
.timeout = &g_whalTimeout,
258246
},

boards/stm32wb55xx_nucleo/board.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,6 @@ enum {
4141
#define BOARD_FLASH_TEST_ADDR 0x0807F000
4242
#define BOARD_FLASH_SECTOR_SZ 0x1000
4343

44-
enum {
45-
BOARD_CRYPTO_AES_ECB,
46-
BOARD_CRYPTO_AES_CBC,
47-
BOARD_CRYPTO_AES_CTR,
48-
BOARD_CRYPTO_AES_GCM,
49-
BOARD_CRYPTO_AES_GMAC,
50-
BOARD_CRYPTO_AES_CCM,
51-
BOARD_CRYPTO_OP_COUNT,
52-
};
5344

5445
whal_Error Board_Init(void);
5546
whal_Error Board_Deinit(void);

docs/getting_started.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ operation completed. The error codes are:
230230
| `WHAL_ENOTREADY` | Resource is busy or not yet available |
231231
| `WHAL_EHARDWARE` | Hardware error (e.g., RNG entropy failure) |
232232
| `WHAL_ETIMEOUT` | Operation timed out waiting for hardware |
233-
| `WHAL_ENOTIMPL` | Operation not implemented by this driver |
233+
| `WHAL_ENOTSUP` | Operation not implemented by this driver |
234234

235235
## Optimizing for Size
236236

@@ -281,7 +281,7 @@ static const whal_GpioDriver myGpioDriver = {
281281
.Init = whal_Stm32wbGpio_Init,
282282
.Deinit = whal_Stm32wbGpio_Deinit,
283283
.Set = whal_Stm32wbGpio_Set,
284-
/* Get left as NULL — calls return WHAL_ENOTIMPL, saves pulling in that code */
284+
/* Get left as NULL — calls return WHAL_ENOTSUP, saves pulling in that code */
285285
};
286286

287287
whal_Gpio g_whalGpio = {

docs/writing_a_driver.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -515,10 +515,10 @@ transfer. The buffer must remain valid until the transfer completes. The
515515
driver signals completion through a platform-specific mechanism.
516516

517517
Drivers that do not support async should set SendAsync to NULL in the vtable.
518-
The dispatch layer returns WHAL_ENOTIMPL when the caller tries to use any
518+
The dispatch layer returns WHAL_ENOTSUP when the caller tries to use any
519519
NULL vtable entry (or when the driver pointer itself is NULL). When direct
520520
API mapping is active, polled drivers provide stub implementations that
521-
return WHAL_ENOTIMPL directly.
521+
return WHAL_ENOTSUP directly.
522522

523523
### RecvAsync
524524

@@ -527,8 +527,8 @@ transfer. The buffer must remain valid until the transfer completes.
527527

528528
The async variants are optional — a driver vtable only needs to populate
529529
them if the platform supports non-blocking transfers. Polled-only drivers
530-
leave these NULL (the dispatch layer returns WHAL_ENOTIMPL) or provide
531-
stubs returning WHAL_ENOTIMPL (direct API mapping).
530+
leave these NULL (the dispatch layer returns WHAL_ENOTSUP) or provide
531+
stubs returning WHAL_ENOTSUP (direct API mapping).
532532

533533
---
534534

src/block/block.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ inline whal_Error whal_Block_Init(whal_Block *blockDev)
77
if (!blockDev)
88
return WHAL_EINVAL;
99
if (!blockDev->driver || !blockDev->driver->Init)
10-
return WHAL_ENOTIMPL;
10+
return WHAL_ENOTSUP;
1111

1212
return blockDev->driver->Init(blockDev);
1313
}
@@ -17,7 +17,7 @@ inline whal_Error whal_Block_Deinit(whal_Block *blockDev)
1717
if (!blockDev)
1818
return WHAL_EINVAL;
1919
if (!blockDev->driver || !blockDev->driver->Deinit)
20-
return WHAL_ENOTIMPL;
20+
return WHAL_ENOTSUP;
2121

2222
return blockDev->driver->Deinit(blockDev);
2323
}
@@ -28,7 +28,7 @@ inline whal_Error whal_Block_Read(whal_Block *blockDev, uint32_t block,
2828
if (!blockDev || !data)
2929
return WHAL_EINVAL;
3030
if (!blockDev->driver || !blockDev->driver->Read)
31-
return WHAL_ENOTIMPL;
31+
return WHAL_ENOTSUP;
3232

3333
return blockDev->driver->Read(blockDev, block, data, blockCount);
3434
}
@@ -39,7 +39,7 @@ inline whal_Error whal_Block_Write(whal_Block *blockDev, uint32_t block,
3939
if (!blockDev || !data)
4040
return WHAL_EINVAL;
4141
if (!blockDev->driver || !blockDev->driver->Write)
42-
return WHAL_ENOTIMPL;
42+
return WHAL_ENOTSUP;
4343

4444
return blockDev->driver->Write(blockDev, block, data, blockCount);
4545
}
@@ -50,7 +50,7 @@ inline whal_Error whal_Block_Erase(whal_Block *blockDev, uint32_t block,
5050
if (!blockDev)
5151
return WHAL_EINVAL;
5252
if (!blockDev->driver || !blockDev->driver->Erase)
53-
return WHAL_ENOTIMPL;
53+
return WHAL_ENOTSUP;
5454

5555
return blockDev->driver->Erase(blockDev, block, blockCount);
5656
}

src/clock/clock.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ inline whal_Error whal_Clock_Init(whal_Clock *clkDev)
66
if (!clkDev)
77
return WHAL_EINVAL;
88
if (!clkDev->driver || !clkDev->driver->Init)
9-
return WHAL_ENOTIMPL;
9+
return WHAL_ENOTSUP;
1010

1111
return clkDev->driver->Init(clkDev);
1212
}
@@ -16,27 +16,27 @@ inline whal_Error whal_Clock_Deinit(whal_Clock *clkDev)
1616
if (!clkDev)
1717
return WHAL_EINVAL;
1818
if (!clkDev->driver || !clkDev->driver->Deinit)
19-
return WHAL_ENOTIMPL;
19+
return WHAL_ENOTSUP;
2020

2121
return clkDev->driver->Deinit(clkDev);
2222
}
2323

2424
inline whal_Error whal_Clock_Enable(whal_Clock *clkDev, const void *clk)
2525
{
26-
if (!clkDev)
26+
if (!clkDev || !clk)
2727
return WHAL_EINVAL;
2828
if (!clkDev->driver || !clkDev->driver->Enable)
29-
return WHAL_ENOTIMPL;
29+
return WHAL_ENOTSUP;
3030

3131
return clkDev->driver->Enable(clkDev, clk);
3232
}
3333

3434
inline whal_Error whal_Clock_Disable(whal_Clock *clkDev, const void *clk)
3535
{
36-
if (!clkDev)
36+
if (!clkDev || !clk)
3737
return WHAL_EINVAL;
3838
if (!clkDev->driver || !clkDev->driver->Disable)
39-
return WHAL_ENOTIMPL;
39+
return WHAL_ENOTSUP;
4040

4141
return clkDev->driver->Disable(clkDev, clk);
4242
}

src/clock/stm32wb_rcc.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,14 @@ whal_Error whal_Stm32wbRccMsi_Deinit(whal_Clock *clkDev)
258258

259259
whal_Error whal_Stm32wbRcc_Enable(whal_Clock *clkDev, const void *clk)
260260
{
261-
whal_Stm32wbRcc_Clk *stClk = (whal_Stm32wbRcc_Clk *)clk;
261+
whal_Stm32wbRcc_Clk *stClk;
262+
263+
if (!clkDev || !clk) {
264+
return WHAL_EINVAL;
265+
}
266+
267+
stClk = (whal_Stm32wbRcc_Clk *)clk;
262268

263-
/* Set the peripheral's enable bit in the appropriate RCC enable register */
264269
whal_Reg_Update(clkDev->regmap.base, stClk->regOffset, stClk->enableMask,
265270
whal_SetBits(stClk->enableMask, stClk->enablePos, 1));
266271

@@ -269,9 +274,14 @@ whal_Error whal_Stm32wbRcc_Enable(whal_Clock *clkDev, const void *clk)
269274

270275
whal_Error whal_Stm32wbRcc_Disable(whal_Clock *clkDev, const void *clk)
271276
{
272-
whal_Stm32wbRcc_Clk *stClk = (whal_Stm32wbRcc_Clk *)clk;
277+
whal_Stm32wbRcc_Clk *stClk;
278+
279+
if (!clkDev || !clk) {
280+
return WHAL_EINVAL;
281+
}
282+
283+
stClk = (whal_Stm32wbRcc_Clk *)clk;
273284

274-
/* Clear the peripheral's enable bit to gate its clock */
275285
whal_Reg_Update(clkDev->regmap.base, stClk->regOffset, stClk->enableMask,
276286
whal_SetBits(stClk->enableMask, stClk->enablePos, 0));
277287

src/crypto/crypto.c

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,54 @@
44
#ifndef WHAL_CFG_CRYPTO_API_MAPPING_STM32WB_AES
55
whal_Error whal_Crypto_Init(whal_Crypto *cryptoDev)
66
{
7-
if (!cryptoDev || !cryptoDev->driver || !cryptoDev->driver->Init) {
7+
if (!cryptoDev)
88
return WHAL_EINVAL;
9-
}
9+
if (!cryptoDev->driver || !cryptoDev->driver->Init)
10+
return WHAL_ENOTSUP;
1011

1112
return cryptoDev->driver->Init(cryptoDev);
1213
}
1314

1415
whal_Error whal_Crypto_Deinit(whal_Crypto *cryptoDev)
1516
{
16-
if (!cryptoDev || !cryptoDev->driver || !cryptoDev->driver->Deinit) {
17+
if (!cryptoDev)
1718
return WHAL_EINVAL;
18-
}
19+
if (!cryptoDev->driver || !cryptoDev->driver->Deinit)
20+
return WHAL_ENOTSUP;
1921

2022
return cryptoDev->driver->Deinit(cryptoDev);
2123
}
22-
#endif
2324

24-
whal_Error whal_Crypto_Op(whal_Crypto *cryptoDev, size_t op, void *opArgs)
25+
whal_Error whal_Crypto_StartOp(whal_Crypto *cryptoDev, size_t opId,
26+
void *opArgs)
27+
{
28+
if (!cryptoDev || !opArgs)
29+
return WHAL_EINVAL;
30+
if (!cryptoDev->driver || !cryptoDev->driver->StartOp)
31+
return WHAL_ENOTSUP;
32+
33+
return cryptoDev->driver->StartOp(cryptoDev, opId, opArgs);
34+
}
35+
36+
whal_Error whal_Crypto_Process(whal_Crypto *cryptoDev, size_t opId,
37+
void *opArgs)
2538
{
26-
if (!cryptoDev || !cryptoDev->ops || !opArgs) {
39+
if (!cryptoDev || !opArgs)
2740
return WHAL_EINVAL;
28-
}
41+
if (!cryptoDev->driver || !cryptoDev->driver->Process)
42+
return WHAL_ENOTSUP;
43+
44+
return cryptoDev->driver->Process(cryptoDev, opId, opArgs);
45+
}
2946

30-
if (op >= cryptoDev->opsCount || !cryptoDev->ops[op]) {
47+
whal_Error whal_Crypto_EndOp(whal_Crypto *cryptoDev, size_t opId,
48+
void *opArgs)
49+
{
50+
if (!cryptoDev || !opArgs)
3151
return WHAL_EINVAL;
32-
}
52+
if (!cryptoDev->driver || !cryptoDev->driver->EndOp)
53+
return WHAL_ENOTSUP;
3354

34-
return cryptoDev->ops[op](cryptoDev, opArgs);
55+
return cryptoDev->driver->EndOp(cryptoDev, opId, opArgs);
3556
}
57+
#endif

0 commit comments

Comments
 (0)