Skip to content

Commit d874df5

Browse files
Rajesh Borundiadavem330
authored andcommitted
qlcnic: Fix endianess issue in FW dump template header
Firmware dump template header is read from adapter using readl() which swaps the data. So, adjust structure element on the boundary of 32bit dword. Signed-off-by: Rajesh Borundia <[email protected]> Signed-off-by: Shahed Shaikh <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 26acc71 commit d874df5

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,48 +47,83 @@ struct qlcnic_common_entry_hdr {
4747
u32 type;
4848
u32 offset;
4949
u32 cap_size;
50+
#if defined(__LITTLE_ENDIAN)
5051
u8 mask;
5152
u8 rsvd[2];
5253
u8 flags;
54+
#else
55+
u8 flags;
56+
u8 rsvd[2];
57+
u8 mask;
58+
#endif
5359
} __packed;
5460

5561
struct __crb {
5662
u32 addr;
63+
#if defined(__LITTLE_ENDIAN)
5764
u8 stride;
5865
u8 rsvd1[3];
66+
#else
67+
u8 rsvd1[3];
68+
u8 stride;
69+
#endif
5970
u32 data_size;
6071
u32 no_ops;
6172
u32 rsvd2[4];
6273
} __packed;
6374

6475
struct __ctrl {
6576
u32 addr;
77+
#if defined(__LITTLE_ENDIAN)
6678
u8 stride;
6779
u8 index_a;
6880
u16 timeout;
81+
#else
82+
u16 timeout;
83+
u8 index_a;
84+
u8 stride;
85+
#endif
6986
u32 data_size;
7087
u32 no_ops;
88+
#if defined(__LITTLE_ENDIAN)
7189
u8 opcode;
7290
u8 index_v;
7391
u8 shl_val;
7492
u8 shr_val;
93+
#else
94+
u8 shr_val;
95+
u8 shl_val;
96+
u8 index_v;
97+
u8 opcode;
98+
#endif
7599
u32 val1;
76100
u32 val2;
77101
u32 val3;
78102
} __packed;
79103

80104
struct __cache {
81105
u32 addr;
106+
#if defined(__LITTLE_ENDIAN)
82107
u16 stride;
83108
u16 init_tag_val;
109+
#else
110+
u16 init_tag_val;
111+
u16 stride;
112+
#endif
84113
u32 size;
85114
u32 no_ops;
86115
u32 ctrl_addr;
87116
u32 ctrl_val;
88117
u32 read_addr;
118+
#if defined(__LITTLE_ENDIAN)
89119
u8 read_addr_stride;
90120
u8 read_addr_num;
91121
u8 rsvd1[2];
122+
#else
123+
u8 rsvd1[2];
124+
u8 read_addr_num;
125+
u8 read_addr_stride;
126+
#endif
92127
} __packed;
93128

94129
struct __ocm {
@@ -122,23 +157,39 @@ struct __mux {
122157

123158
struct __queue {
124159
u32 sel_addr;
160+
#if defined(__LITTLE_ENDIAN)
125161
u16 stride;
126162
u8 rsvd[2];
163+
#else
164+
u8 rsvd[2];
165+
u16 stride;
166+
#endif
127167
u32 size;
128168
u32 no_ops;
129169
u8 rsvd2[8];
130170
u32 read_addr;
171+
#if defined(__LITTLE_ENDIAN)
131172
u8 read_addr_stride;
132173
u8 read_addr_cnt;
133174
u8 rsvd3[2];
175+
#else
176+
u8 rsvd3[2];
177+
u8 read_addr_cnt;
178+
u8 read_addr_stride;
179+
#endif
134180
} __packed;
135181

136182
struct __pollrd {
137183
u32 sel_addr;
138184
u32 read_addr;
139185
u32 sel_val;
186+
#if defined(__LITTLE_ENDIAN)
140187
u16 sel_val_stride;
141188
u16 no_ops;
189+
#else
190+
u16 no_ops;
191+
u16 sel_val_stride;
192+
#endif
142193
u32 poll_wait;
143194
u32 poll_mask;
144195
u32 data_size;
@@ -153,9 +204,15 @@ struct __mux2 {
153204
u32 no_ops;
154205
u32 sel_val_mask;
155206
u32 read_addr;
207+
#if defined(__LITTLE_ENDIAN)
156208
u8 sel_val_stride;
157209
u8 data_size;
158210
u8 rsvd[2];
211+
#else
212+
u8 rsvd[2];
213+
u8 data_size;
214+
u8 sel_val_stride;
215+
#endif
159216
} __packed;
160217

161218
struct __pollrdmwr {

0 commit comments

Comments
 (0)