#include struct sdma_firmware_header { uint32_t magic; /* "SDMA" */ uint32_t version_major; /* increased whenever layout of struct sdma_script_start_addrs changes */ uint32_t version_minor; /* firmware version */ uint32_t script_addrs_start; /* offset of struct sdma_script_start_addrs in this image */ uint32_t num_script_addrs; /* Number of script addresses in this image */ uint32_t ram_code_start; /* offset of SDMA ram image in this firmware image */ uint32_t ram_code_size; /* size of SDMA ram image */ }; /* * This describes the start addresses of the different entries * in the binary image. This structure is assumed to only grow * but never change its format. Whenever this structure grows * version_major above is counted up, thus it's possible to * combine newer versions of this structure with older kernels * and vice versa. */ struct sdma_script_start_addrs { uint32_t ap_2_ap_addr; uint32_t ap_2_bp_addr; uint32_t ap_2_ap_fixed_addr; uint32_t bp_2_ap_addr; uint32_t loopback_on_dsp_side_addr; uint32_t mcu_interrupt_only_addr; uint32_t firi_2_per_addr; uint32_t firi_2_mcu_addr; uint32_t per_2_firi_addr; uint32_t mcu_2_firi_addr; uint32_t uart_2_per_addr; uint32_t uart_2_mcu_addr; uint32_t per_2_app_addr; uint32_t mcu_2_app_addr; uint32_t per_2_per_addr; uint32_t uartsh_2_per_addr; uint32_t uartsh_2_mcu_addr; uint32_t per_2_shp_addr; uint32_t mcu_2_shp_addr; uint32_t ata_2_mcu_addr; uint32_t mcu_2_ata_addr; uint32_t app_2_per_addr; uint32_t app_2_mcu_addr; uint32_t shp_2_per_addr; uint32_t shp_2_mcu_addr; uint32_t mshc_2_mcu_addr; uint32_t mcu_2_mshc_addr; uint32_t spdif_2_mcu_addr; uint32_t mcu_2_spdif_addr; uint32_t asrc_2_mcu_addr; uint32_t ext_mem_2_ipu_addr; uint32_t descrambler_addr; uint32_t dptc_dvfs_addr; uint32_t utra_addr; uint32_t ram_code_start_addr; }; struct sdma_firmware { const struct sdma_script_start_addrs *addr; const unsigned short *blob; int blob_size; int version; char *name; }; extern struct sdma_firmware sdma_imx25_to1; extern struct sdma_firmware sdma_imx31_to1; extern struct sdma_firmware sdma_imx31_to2; extern struct sdma_firmware sdma_imx35_to1; extern struct sdma_firmware sdma_imx35_to2; extern struct sdma_firmware sdma_imx51_to2; extern struct sdma_firmware sdma_imx51; extern struct sdma_firmware sdma_imx53; #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) #define SDMA_FIRMWARE_MAGIC 0x414d4453 /* "SDMA" */