/***************************************************************************** (c) Cambridge Silicon Radio Limited 2011 All rights reserved and confidential information of CSR Refer to LICENSE.txt included with this source for details on the license terms. *****************************************************************************/ /* * --------------------------------------------------------------------------- * FILE: csr_wifi_hip_xbv.h * * PURPOSE: * Definitions and declarations for code to read XBV files - the UniFi * firmware download file format. * * --------------------------------------------------------------------------- */ #ifndef __XBV_H__ #define __XBV_H__ #ifndef CSR_WIFI_XBV_TEST /* Driver includes */ #include "csr_wifi_hip_unifi.h" #endif struct VMEQ { u32 addr; u16 mask; u16 value; }; struct VAND { u32 first; u32 count; }; struct VERS { u32 num_vand; }; struct FWDL { u32 dl_addr; u32 dl_size; u32 dl_offset; }; struct FWOV { u32 dl_size; u32 dl_offset; }; struct PTDL { u32 dl_size; u32 dl_offset; }; #define MAX_VMEQ 64 #define MAX_VAND 64 #define MAX_FWDL 256 #define MAX_PTDL 256 /* An XBV1 file can either contain firmware or patches (at the * moment). The 'mode' member of the xbv1_t structure tells us which * one is the case. */ typedef enum { xbv_unknown, xbv_firmware, xbv_patch } xbv_mode; typedef struct { xbv_mode mode; /* Parts of a Firmware XBV1 */ struct VMEQ vmeq[MAX_VMEQ]; u32 num_vmeq; struct VAND vand[MAX_VAND]; struct VERS vers; u32 slut_addr; /* F/W download image, possibly more than one part */ struct FWDL fwdl[MAX_FWDL]; s16 num_fwdl; /* F/W overlay image, add r not used */ struct FWOV fwov; /* Parts of a Patch XBV1 */ u32 build_id; struct PTDL ptdl[MAX_PTDL]; s16 num_ptdl; } xbv1_t; typedef s32 (*fwreadfn_t)(void *ospriv, void *dlpriv, u32 offset, void *buf, u32 len); CsrResult xbv1_parse(card_t *card, fwreadfn_t readfn, void *dlpriv, xbv1_t *fwinfo); s32 xbv1_read_slut(card_t *card, fwreadfn_t readfn, void *dlpriv, xbv1_t *fwinfo, symbol_t *slut, u32 slut_len); void* xbv_to_patch(card_t *card, fwreadfn_t readfn, const void *fw_buf, const xbv1_t *fwinfo, u32 *size); #endif /* __XBV_H__ */