1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
/*****************************************************************************
(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__ */
|