On Tue, 2019-08-20 at 18:47 +0300, Kalle Valo wrote:
>
> +static const struct service_to_pipe target_service_to_ce_map_wlan[] = {
> + {
> + __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
> + __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
> + __cpu_to_le32(3),
> + },
this might be nicer as C99 initializers as well? It's a struct of some
sort, after all.
> + { /* must be last */
> + __cpu_to_le32(0),
> + __cpu_to_le32(0),
> + __cpu_to_le32(0),
> + },
You don't need endian conversion for 0, even sparse will not complain,
but I'd argue it should anyway be something like
{ /* terminator entry */ }
since that's why it's there I guess?
> +#define ATH11K_TX_RING_MASK_3 0x0
You have a LOT of masks here that are 0, that seems odd?
> +/* enum ext_irq_num - irq nubers that can be used by external modules
typo ("numbers")
> +inline u32 ath11k_ahb_read32(struct ath11k_base *ab, u32 offset)
> +{
> + return ioread32(ab->mem + offset);
> +}
> +
> +inline void ath11k_ahb_write32(struct ath11k_base *ab, u32 offset, u32 value)
> +{
> + iowrite32(value, ab->mem + offset);
> +}
Just "inline" doesn't seem to make that much sense? If it's only used
here then I guess it should be static, otherwise not inline? Or maybe
you want it to be inlined *in this file* but available out-of-line
otherwise? I'm not sure that actually is guaranteed to work right in C?
> + val = ath11k_ahb_read32(ab, CE_HOST_IE_ADDRESS);
> + val |= BIT(ce_id);
> + ath11k_ahb_write32(ab, CE_HOST_IE_ADDRESS, val);
You could perhaps benefit from ath11k_ahb_setbit32() or something like
that, this repeats a few times?
> + if (__le32_to_cpu(ce_config->pipedir) & PIPEDIR_OUT) {
> + val = ath11k_ahb_read32(ab, CE_HOST_IE_ADDRESS);
> + val &= ~BIT(ce_id);
> + ath11k_ahb_write32(ab, CE_HOST_IE_ADDRESS, val);
and clearbit32() maybe. Dunno, I saw only 3 instances of each here I
guess, but still, feels repetitive.
> +int ath11k_ahb_start(struct ath11k_base *ab)
> +{
> + ath11k_ahb_ce_irqs_enable(ab);
> + ath11k_ce_rx_post_buf(ab);
> +
> + /* Bring up other components as appropriate */
Hmm. What would be appropriate? It's not really doing anything else?
> +void ath11k_ahb_stop(struct ath11k_base *ab)
> +{
> + if (!test_bit(ATH11K_FLAG_CRASH_FLUSH, &ab->dev_flags))
> + ath11k_ahb_ce_irqs_disable(ab);
> + ath11k_ahb_sync_ce_irqs(ab);
> + ath11k_ahb_kill_tasklets(ab);
> + del_timer_sync(&ab->rx_replenish_retry);
> + ath11k_ce_cleanup_pipes(ab);
> + /* Shutdown other components as appropriate */
likewise, it's not doing anything else?
johannes