The spi_funcs_t structure is a table of pointers to functions that you can provide for your hardware-specific low-level module. The high-level code calls these functions.
typedef struct { size_t size; /* size of this structure */ void* (*init)( void *hdl, char *options ); void (*fini)( void *hdl ); int (*drvinfo)( void *hdl, spi_drvinfo_t *info ); int (*devinfo)( void *hdl, uint32_t device, spi_devinfo_t *info ); int (*setcfg)( void *hdl, uint16_t device, spi_cfg_t *cfg ); void* (*xfer)( void *hdl, uint32_t device, uint8_t *buf, int *len ); int (*dma_xfer)( void *hdl, uint32_t device, spi_dma_paddr_t *paddr, int len ); } spi_funcs_t;
There has to be a function table entry in the low-level module, and it has to be named spi_drv_entry. High-level code looks for this symbol name to find the function table for the low-level module.