mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-01 13:10:43 +00:00
40 lines
1.8 KiB
C
40 lines
1.8 KiB
C
#pragma once
|
|
|
|
#if MG_ENABLE_TCPIP && \
|
|
(defined(MG_ENABLE_DRIVER_CYW_SDIO) && MG_ENABLE_DRIVER_CYW_SDIO)
|
|
|
|
// Specific chip/card driver --> SDIO driver --> HAL --> SDIO hw controller
|
|
|
|
// API with HAL for hardware controller
|
|
// - Provide a function to init the controller (external)
|
|
// - Provide these functions:
|
|
struct mg_tcpip_sdio {
|
|
void *sdio; // Opaque SDIO bus descriptor
|
|
void (*cfg)(void *, uint8_t); // select operating parameters
|
|
// SDIO transaction: send cmd with a possible 1-byte read or write
|
|
bool (*txn)(void *, uint8_t cmd, uint32_t arg, uint32_t *r);
|
|
// SDIO extended transaction: write or read len bytes, using blksz blocks
|
|
bool (*xfr)(void *, bool write, uint32_t arg, uint16_t blksz, uint32_t *,
|
|
uint32_t len, uint32_t *r);
|
|
};
|
|
|
|
// API with driver (e.g.: cyw.c)
|
|
// Once the hardware controller has been initialized:
|
|
// - Init card: selects the card, sets F0 block size, sets bus width and speed
|
|
bool mg_sdio_init(struct mg_tcpip_sdio *sdio);
|
|
// - Enable other possible functions (F1 to F7)
|
|
bool mg_sdio_enable_f(struct mg_tcpip_sdio *sdio, unsigned int f);
|
|
// - Wait for them to be ready
|
|
bool mg_sdio_waitready_f(struct mg_tcpip_sdio *sdio, unsigned int f);
|
|
// - Set their transfer block length
|
|
bool mg_sdio_set_blksz(struct mg_tcpip_sdio *sdio, unsigned int f,
|
|
uint16_t blksz);
|
|
// - Transfer data to/from a function (abstracts from transaction type)
|
|
// - Requesting a read transfer > blocksize means block transfer will be used.
|
|
// - Drivers must have room to accomodate a whole block transfer, see sdio.c
|
|
// - Transfers of > 1 byte --> (uint32_t *) data. 1-byte --> (uint8_t *) data
|
|
bool mg_sdio_transfer(struct mg_tcpip_sdio *sdio, bool write, unsigned int f,
|
|
uint32_t addr, void *data, uint32_t len);
|
|
|
|
#endif
|