398978f7df
The current codebase makes use of the zero-length array language extension to the C90 standard, but the preferred mechanism to declare variable-length types such as these ones is a flexible array member[1][2], introduced in C99: struct foo { int stuff; struct boo array[]; }; By making use of the mechanism above, we will get a compiler warning in case the flexible array does not occur last in the structure, which will help us prevent some kind of undefined behavior bugs from being inadvertently introduced[3] to the codebase from now on. Also, notice that, dynamic memory allocations won't be affected by this change: "Flexible array members have incomplete type, and so the sizeof operator may not be applied. As a quirk of the original implementation of zero-length arrays, sizeof evaluates to zero."[1] This issue was found with the help of Coccinelle. [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html [2] https://github.com/KSPP/linux/issues/21 [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour") Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/20200225003408.GA28675@embeddedor
42 lines
921 B
C
42 lines
921 B
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* This file is part of wl1271
|
|
*
|
|
* Copyright (C) 2008-2009 Nokia Corporation
|
|
*
|
|
* Contact: Luciano Coelho <luciano.coelho@nokia.com>
|
|
*/
|
|
|
|
#ifndef __BOOT_H__
|
|
#define __BOOT_H__
|
|
|
|
#include "wlcore.h"
|
|
|
|
int wlcore_boot_upload_firmware(struct wl1271 *wl);
|
|
int wlcore_boot_upload_nvs(struct wl1271 *wl);
|
|
int wlcore_boot_run_firmware(struct wl1271 *wl);
|
|
|
|
#define WL1271_NO_SUBBANDS 8
|
|
#define WL1271_NO_POWER_LEVELS 4
|
|
#define WL1271_FW_VERSION_MAX_LEN 20
|
|
|
|
struct wl1271_static_data {
|
|
u8 mac_address[ETH_ALEN];
|
|
u8 padding[2];
|
|
u8 fw_version[WL1271_FW_VERSION_MAX_LEN];
|
|
u32 hw_version;
|
|
u8 tx_power_table[WL1271_NO_SUBBANDS][WL1271_NO_POWER_LEVELS];
|
|
u8 priv[];
|
|
};
|
|
|
|
/* number of times we try to read the INIT interrupt */
|
|
#define INIT_LOOP 20000
|
|
|
|
/* delay between retries */
|
|
#define INIT_LOOP_DELAY 50
|
|
|
|
#define WU_COUNTER_PAUSE_VAL 0x3FF
|
|
#define WELP_ARM_COMMAND_VAL 0x4
|
|
|
|
#endif
|