device: avoid casting away const from config_info pointer

The driver-specific config_info structure referenced from the device
structure is marked const.  Some drivers fail to preserve that
qualifier when casting the pointer to the driver-specific structure,
violating MISRA 11.8.

Changes produced by scripts/coccinelle/const_config_info.cocci.

Some changes proposed by the script are not included because they
reveal mutation of state through the const pointer, though the
code works as long as the driver-specific object is defined without
the const qualifier.

Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
This commit is contained in:
Peter Bigot 2020-05-12 07:14:53 -05:00 committed by Carles Cufí
commit 4f16b419e8
18 changed files with 41 additions and 41 deletions

View file

@ -389,8 +389,8 @@ static void adc_stm32_isr(void *arg)
{
struct device *dev = (struct device *)arg;
struct adc_stm32_data *data = (struct adc_stm32_data *)dev->driver_data;
struct adc_stm32_cfg *config =
(struct adc_stm32_cfg *)dev->config_info;
const struct adc_stm32_cfg *config =
(const struct adc_stm32_cfg *)dev->config_info;
ADC_TypeDef *adc = config->base;
*data->buffer++ = LL_ADC_REG_ReadConversionData32(adc);
@ -449,8 +449,8 @@ static int adc_stm32_check_acq_time(u16_t acq_time)
static void adc_stm32_setup_speed(struct device *dev, u8_t id,
u8_t acq_time_index)
{
struct adc_stm32_cfg *config =
(struct adc_stm32_cfg *)dev->config_info;
const struct adc_stm32_cfg *config =
(const struct adc_stm32_cfg *)dev->config_info;
ADC_TypeDef *adc = config->base;
#if defined(CONFIG_SOC_SERIES_STM32F0X) || defined(CONFIG_SOC_SERIES_STM32L0X)
@ -522,8 +522,8 @@ static int adc_stm32_channel_setup(struct device *dev,
!defined(CONFIG_SOC_SERIES_STM32L1X)
static void adc_stm32_calib(struct device *dev)
{
struct adc_stm32_cfg *config =
(struct adc_stm32_cfg *)dev->config_info;
const struct adc_stm32_cfg *config =
(const struct adc_stm32_cfg *)dev->config_info;
ADC_TypeDef *adc = config->base;
#if defined(CONFIG_SOC_SERIES_STM32F3X) || \

View file

@ -20,7 +20,7 @@ extern "C" {
#define MPXXDTYY_MAX_PDM_FREQ 3250000 /* 3.25MHz */
#define DEV_CFG(dev) \
((struct mpxxdtyy_config *const)(dev)->config_info)
((const struct mpxxdtyy_config *const)(dev)->config_info)
#define DEV_DATA(dev) \
((struct mpxxdtyy_data *const)(dev)->driver_data)

View file

@ -41,7 +41,7 @@ struct counter_gecko_data {
#define DEV_NAME(dev) ((dev)->name)
#define DEV_CFG(dev) \
((struct counter_gecko_config * const)(dev)->config_info)
((const struct counter_gecko_config * const)(dev)->config_info)
#define DEV_DATA(dev) \
((struct counter_gecko_data *const)(dev)->driver_data)

View file

@ -104,7 +104,7 @@ static inline void sleep(u32_t sleep_in_ms)
*******************************************/
void glcd_print(struct device *port, char *data, u32_t size)
{
const struct glcd_driver * const rom = (struct glcd_driver *)
const struct glcd_driver * const rom = (const struct glcd_driver *)
port->config_info;
struct glcd_data *dev = port->driver_data;
u8_t buf[] = { GLCD_CMD_SET_CGRAM_ADDR, 0 };
@ -119,7 +119,7 @@ void glcd_print(struct device *port, char *data, u32_t size)
void glcd_cursor_pos_set(struct device *port, u8_t col, u8_t row)
{
const struct glcd_driver * const rom = (struct glcd_driver *)
const struct glcd_driver * const rom = (const struct glcd_driver *)
port->config_info;
struct glcd_data *dev = port->driver_data;
@ -140,7 +140,7 @@ void glcd_cursor_pos_set(struct device *port, u8_t col, u8_t row)
void glcd_clear(struct device *port)
{
const struct glcd_driver * const rom = (struct glcd_driver *)
const struct glcd_driver * const rom = (const struct glcd_driver *)
port->config_info;
struct glcd_data *dev = port->driver_data;
u8_t clear[] = { 0, GLCD_CMD_SCREEN_CLEAR };
@ -153,7 +153,7 @@ void glcd_clear(struct device *port)
void glcd_display_state_set(struct device *port, u8_t opt)
{
const struct glcd_driver * const rom = (struct glcd_driver *)
const struct glcd_driver * const rom = (const struct glcd_driver *)
port->config_info;
struct glcd_data *dev = port->driver_data;
u8_t data[] = { 0, 0 };

View file

@ -32,7 +32,7 @@ struct entropy_stm32_rng_dev_data {
((struct entropy_stm32_rng_dev_data *)(dev)->driver_data)
#define DEV_CFG(dev) \
((struct entropy_stm32_rng_dev_cfg *)(dev)->config_info)
((const struct entropy_stm32_rng_dev_cfg *)(dev)->config_info)
static void entropy_stm32_rng_reset(RNG_TypeDef *rng)
{
@ -144,7 +144,7 @@ static int entropy_stm32_rng_get_entropy(struct device *dev, u8_t *buffer,
static int entropy_stm32_rng_init(struct device *dev)
{
struct entropy_stm32_rng_dev_data *dev_data;
struct entropy_stm32_rng_dev_cfg *dev_cfg;
const struct entropy_stm32_rng_dev_cfg *dev_cfg;
int res;
__ASSERT_NO_MSG(dev != NULL);

View file

@ -96,7 +96,7 @@ struct eth_gecko_dev_data {
#define DEV_NAME(dev) ((dev)->name)
#define DEV_CFG(dev) \
((struct eth_gecko_dev_cfg *)(dev)->config_info)
((const struct eth_gecko_dev_cfg *)(dev)->config_info)
#define DEV_DATA(dev) \
((struct eth_gecko_dev_data *)(dev)->driver_data)

View file

@ -272,7 +272,7 @@ static void eth_stellaris_isr(void *arg)
static void eth_stellaris_init(struct net_if *iface)
{
struct device *dev = net_if_get_device(iface);
struct eth_stellaris_config *dev_conf = DEV_CFG(dev);
const struct eth_stellaris_config *dev_conf = DEV_CFG(dev);
struct eth_stellaris_runtime *dev_data = DEV_DATA(dev);
dev_data->iface = iface;

View file

@ -11,7 +11,7 @@
#define DEV_DATA(dev) \
((struct eth_stellaris_runtime *)(dev)->driver_data)
#define DEV_CFG(dev) \
((struct eth_stellaris_config *const)(dev)->config_info)
((const struct eth_stellaris_config *const)(dev)->config_info)
/*
* Register mapping
*/

View file

@ -370,7 +370,7 @@ static void generate_mac(u8_t *mac_addr)
static int eth_initialize(struct device *dev)
{
struct eth_stm32_hal_dev_data *dev_data;
struct eth_stm32_hal_dev_cfg *cfg;
const struct eth_stm32_hal_dev_cfg *cfg;
ETH_HandleTypeDef *heth;
u8_t hal_ret;
int ret = 0;

View file

@ -45,7 +45,7 @@ struct eth_stm32_hal_dev_data {
};
#define DEV_CFG(dev) \
((struct eth_stm32_hal_dev_cfg *)(dev)->config_info)
((const struct eth_stm32_hal_dev_cfg *)(dev)->config_info)
#define DEV_DATA(dev) \
((struct eth_stm32_hal_dev_data *)(dev)->driver_data)

View file

@ -58,7 +58,7 @@ static struct nrf5_802154_data nrf5_data;
((struct nrf5_802154_data * const)(dev)->driver_data)
#define NRF5_802154_CFG(dev) \
((struct nrf5_802154_config * const)(dev)->config_info)
((const struct nrf5_802154_config * const)(dev)->config_info)
static void nrf5_get_eui64(u8_t *mac)
{

View file

@ -26,7 +26,7 @@ LOG_MODULE_REGISTER(neural_net);
#define DEV_NAME(dev) ((dev)->name)
#define DEV_CFG(dev) \
((struct intel_gna_config *const)(dev)->config_info)
((const struct intel_gna_config *const)(dev)->config_info)
#define DEV_DATA(dev) \
((struct intel_gna_data *const)(dev)->driver_data)
@ -221,7 +221,7 @@ static int intel_gna_initialize(struct device *dev)
static int intel_gna_configure(struct device *dev, struct gna_config *cfg)
{
struct intel_gna_config *const dev_cfg = DEV_CFG(dev);
const struct intel_gna_config *const dev_cfg = DEV_CFG(dev);
struct intel_gna_data *const gna = DEV_DATA(dev);
volatile struct intel_gna_regs *regs = gna->regs;

View file

@ -73,7 +73,7 @@ struct pwm_dw_config {
static inline int pwm_dw_timer_base_addr(struct device *dev, u32_t timer)
{
const struct pwm_dw_config * const cfg =
(struct pwm_dw_config *)dev->config_info;
(const struct pwm_dw_config *)dev->config_info;
return (cfg->addr + (timer * REG_OFFSET));
}
@ -89,7 +89,7 @@ static inline int pwm_dw_timer_base_addr(struct device *dev, u32_t timer)
static inline int pwm_dw_timer_ldcnt2_addr(struct device *dev, u32_t timer)
{
const struct pwm_dw_config * const cfg =
(struct pwm_dw_config *)dev->config_info;
(const struct pwm_dw_config *)dev->config_info;
return (cfg->addr + REG_TMR_LOAD_CNT2 + (timer * REG_OFFSET_LOAD_CNT2));
}
@ -144,7 +144,7 @@ static int pwm_dw_pin_set_cycles(struct device *dev,
u32_t pulse_cycles, pwm_flags_t flags)
{
const struct pwm_dw_config * const cfg =
(struct pwm_dw_config *)dev->config_info;
(const struct pwm_dw_config *)dev->config_info;
int i;
u32_t on, off;

View file

@ -320,7 +320,7 @@ static int pwm_led_esp32_pin_set_cycles(struct device *dev,
int timer;
int ret;
const struct pwm_led_esp32_config * const config =
(struct pwm_led_esp32_config *) dev->config_info;
(const struct pwm_led_esp32_config *) dev->config_info;
ARG_UNUSED(period_cycles);
@ -373,7 +373,7 @@ static int pwm_led_esp32_get_cycles_per_sec(struct device *dev, u32_t pwm,
int timer;
int speed_mode;
config = (struct pwm_led_esp32_config *) dev->config_info;
config = (const struct pwm_led_esp32_config *) dev->config_info;
channel = pwm_led_esp32_get_gpio_config(pwm, config->ch_cfg);
if (channel < 0) {

View file

@ -92,7 +92,7 @@ static int pwm_nrf5_sw_pin_set(struct device *dev, u32_t pwm,
u32_t period_cycles, u32_t pulse_cycles,
pwm_flags_t flags)
{
struct pwm_config *config;
const struct pwm_config *config;
NRF_TIMER_Type *timer;
struct pwm_data *data;
u8_t ppi_index;
@ -100,7 +100,7 @@ static int pwm_nrf5_sw_pin_set(struct device *dev, u32_t pwm,
u16_t div;
u32_t ret;
config = (struct pwm_config *)dev->config_info;
config = (const struct pwm_config *)dev->config_info;
timer = config->timer;
data = dev->driver_data;
@ -216,9 +216,9 @@ pin_set_pwm_off:
static int pwm_nrf5_sw_get_cycles_per_sec(struct device *dev, u32_t pwm,
u64_t *cycles)
{
struct pwm_config *config;
const struct pwm_config *config;
config = (struct pwm_config *)dev->config_info;
config = (const struct pwm_config *)dev->config_info;
/* HF timer frequency is derived from 16MHz source with a prescaler */
*cycles = 16000000UL / BIT(config->prescaler);
@ -233,10 +233,10 @@ static const struct pwm_driver_api pwm_nrf5_sw_drv_api_funcs = {
static int pwm_nrf5_sw_init(struct device *dev)
{
struct pwm_config *config;
const struct pwm_config *config;
NRF_TIMER_Type *timer;
config = (struct pwm_config *)dev->config_info;
config = (const struct pwm_config *)dev->config_info;
timer = config->timer;
/* setup HF timer */

View file

@ -36,7 +36,7 @@ struct wdt_gecko_data {
#define DEV_DATA(dev) \
((struct wdt_gecko_data *)(dev)->driver_data)
#define DEV_CFG(dev) \
((struct wdt_gecko_cfg *)(dev)->config_info)
((const struct wdt_gecko_cfg *)(dev)->config_info)
static u32_t wdt_gecko_get_timeout_from_persel(int perSel)
{

View file

@ -211,7 +211,7 @@ __syscall bool counter_is_counting_up(const struct device *dev);
static inline bool z_impl_counter_is_counting_up(const struct device *dev)
{
const struct counter_config_info *config =
(struct counter_config_info *)dev->config_info;
(const struct counter_config_info *)dev->config_info;
return config->flags & COUNTER_CONFIG_INFO_COUNT_UP;
}
@ -228,7 +228,7 @@ __syscall u8_t counter_get_num_of_channels(const struct device *dev);
static inline u8_t z_impl_counter_get_num_of_channels(const struct device *dev)
{
const struct counter_config_info *config =
(struct counter_config_info *)dev->config_info;
(const struct counter_config_info *)dev->config_info;
return config->channels;
}
@ -246,7 +246,7 @@ __syscall u32_t counter_get_frequency(const struct device *dev);
static inline u32_t z_impl_counter_get_frequency(const struct device *dev)
{
const struct counter_config_info *config =
(struct counter_config_info *)dev->config_info;
(const struct counter_config_info *)dev->config_info;
return config->freq;
}
@ -265,7 +265,7 @@ static inline u32_t z_impl_counter_us_to_ticks(const struct device *dev,
u64_t us)
{
const struct counter_config_info *config =
(struct counter_config_info *)dev->config_info;
(const struct counter_config_info *)dev->config_info;
u64_t ticks = (us * config->freq) / USEC_PER_SEC;
return (ticks > (u64_t)UINT32_MAX) ? UINT32_MAX : ticks;
@ -285,7 +285,7 @@ static inline u64_t z_impl_counter_ticks_to_us(const struct device *dev,
u32_t ticks)
{
const struct counter_config_info *config =
(struct counter_config_info *)dev->config_info;
(const struct counter_config_info *)dev->config_info;
return ((u64_t)ticks * USEC_PER_SEC) / config->freq;
}
@ -302,7 +302,7 @@ __syscall u32_t counter_get_max_top_value(const struct device *dev);
static inline u32_t z_impl_counter_get_max_top_value(const struct device *dev)
{
const struct counter_config_info *config =
(struct counter_config_info *)dev->config_info;
(const struct counter_config_info *)dev->config_info;
return config->max_top_value;
}

View file

@ -1220,7 +1220,7 @@ static inline struct test_gpio_data *to_data(struct device *dev)
static inline const struct test_gpio_info *to_info(struct device *dev)
{
return (struct test_gpio_info *)dev->config_info;
return (const struct test_gpio_info *)dev->config_info;
}
static void test_devices(void)