| .. | .. |
|---|
| 281 | 281 | struct ath9k_htc_rx { |
|---|
| 282 | 282 | struct list_head rxbuf; |
|---|
| 283 | 283 | spinlock_t rxbuflock; |
|---|
| 284 | + bool initialized; |
|---|
| 284 | 285 | }; |
|---|
| 285 | 286 | |
|---|
| 286 | 287 | #define ATH9K_HTC_TX_CLEANUP_INTERVAL 50 /* ms */ |
|---|
| .. | .. |
|---|
| 305 | 306 | DECLARE_BITMAP(tx_slot, MAX_TX_BUF_NUM); |
|---|
| 306 | 307 | struct timer_list cleanup_timer; |
|---|
| 307 | 308 | spinlock_t tx_lock; |
|---|
| 309 | + bool initialized; |
|---|
| 308 | 310 | }; |
|---|
| 309 | 311 | |
|---|
| 310 | 312 | struct ath9k_htc_tx_ctl { |
|---|
| .. | .. |
|---|
| 325 | 327 | } |
|---|
| 326 | 328 | |
|---|
| 327 | 329 | #ifdef CONFIG_ATH9K_HTC_DEBUGFS |
|---|
| 330 | +#define __STAT_SAFE(hif_dev, expr) do { ((hif_dev)->htc_handle->drv_priv ? (expr) : 0); } while (0) |
|---|
| 331 | +#define CAB_STAT_INC(priv) do { ((priv)->debug.tx_stats.cab_queued++); } while (0) |
|---|
| 332 | +#define TX_QSTAT_INC(priv, q) do { ((priv)->debug.tx_stats.queue_stats[q]++); } while (0) |
|---|
| 328 | 333 | |
|---|
| 329 | | -#define TX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c++) |
|---|
| 330 | | -#define TX_STAT_ADD(c, a) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c += a) |
|---|
| 331 | | -#define RX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.skbrx_stats.c++) |
|---|
| 332 | | -#define RX_STAT_ADD(c, a) (hif_dev->htc_handle->drv_priv->debug.skbrx_stats.c += a) |
|---|
| 333 | | -#define CAB_STAT_INC priv->debug.tx_stats.cab_queued++ |
|---|
| 334 | | - |
|---|
| 335 | | -#define TX_QSTAT_INC(q) (priv->debug.tx_stats.queue_stats[q]++) |
|---|
| 334 | +#define TX_STAT_INC(hif_dev, c) \ |
|---|
| 335 | + __STAT_SAFE((hif_dev), (hif_dev)->htc_handle->drv_priv->debug.tx_stats.c++) |
|---|
| 336 | +#define TX_STAT_ADD(hif_dev, c, a) \ |
|---|
| 337 | + __STAT_SAFE((hif_dev), (hif_dev)->htc_handle->drv_priv->debug.tx_stats.c += a) |
|---|
| 338 | +#define RX_STAT_INC(hif_dev, c) \ |
|---|
| 339 | + __STAT_SAFE((hif_dev), (hif_dev)->htc_handle->drv_priv->debug.skbrx_stats.c++) |
|---|
| 340 | +#define RX_STAT_ADD(hif_dev, c, a) \ |
|---|
| 341 | + __STAT_SAFE((hif_dev), (hif_dev)->htc_handle->drv_priv->debug.skbrx_stats.c += a) |
|---|
| 336 | 342 | |
|---|
| 337 | 343 | void ath9k_htc_err_stat_rx(struct ath9k_htc_priv *priv, |
|---|
| 338 | 344 | struct ath_rx_status *rs); |
|---|
| .. | .. |
|---|
| 372 | 378 | struct ethtool_stats *stats, u64 *data); |
|---|
| 373 | 379 | #else |
|---|
| 374 | 380 | |
|---|
| 375 | | -#define TX_STAT_INC(c) do { } while (0) |
|---|
| 376 | | -#define TX_STAT_ADD(c, a) do { } while (0) |
|---|
| 377 | | -#define RX_STAT_INC(c) do { } while (0) |
|---|
| 378 | | -#define RX_STAT_ADD(c, a) do { } while (0) |
|---|
| 379 | | -#define CAB_STAT_INC do { } while (0) |
|---|
| 381 | +#define TX_STAT_INC(hif_dev, c) do { } while (0) |
|---|
| 382 | +#define TX_STAT_ADD(hif_dev, c, a) do { } while (0) |
|---|
| 383 | +#define RX_STAT_INC(hif_dev, c) do { } while (0) |
|---|
| 384 | +#define RX_STAT_ADD(hif_dev, c, a) do { } while (0) |
|---|
| 380 | 385 | |
|---|
| 381 | | -#define TX_QSTAT_INC(c) do { } while (0) |
|---|
| 386 | +#define CAB_STAT_INC(priv) |
|---|
| 387 | +#define TX_QSTAT_INC(priv, c) |
|---|
| 382 | 388 | |
|---|
| 383 | 389 | static inline void ath9k_htc_err_stat_rx(struct ath9k_htc_priv *priv, |
|---|
| 384 | 390 | struct ath_rx_status *rs) |
|---|
| .. | .. |
|---|
| 583 | 589 | void ath9k_htc_tx_clear_slot(struct ath9k_htc_priv *priv, int slot); |
|---|
| 584 | 590 | void ath9k_htc_tx_drain(struct ath9k_htc_priv *priv); |
|---|
| 585 | 591 | void ath9k_htc_txstatus(struct ath9k_htc_priv *priv, void *wmi_event); |
|---|
| 586 | | -void ath9k_tx_failed_tasklet(unsigned long data); |
|---|
| 592 | +void ath9k_tx_failed_tasklet(struct tasklet_struct *t); |
|---|
| 587 | 593 | void ath9k_htc_tx_cleanup_timer(struct timer_list *t); |
|---|
| 588 | 594 | bool ath9k_htc_csa_is_finished(struct ath9k_htc_priv *priv); |
|---|
| 589 | 595 | |
|---|
| 590 | 596 | int ath9k_rx_init(struct ath9k_htc_priv *priv); |
|---|
| 591 | 597 | void ath9k_rx_cleanup(struct ath9k_htc_priv *priv); |
|---|
| 592 | 598 | void ath9k_host_rx_init(struct ath9k_htc_priv *priv); |
|---|
| 593 | | -void ath9k_rx_tasklet(unsigned long data); |
|---|
| 599 | +void ath9k_rx_tasklet(struct tasklet_struct *t); |
|---|
| 594 | 600 | u32 ath9k_htc_calcrxfilter(struct ath9k_htc_priv *priv); |
|---|
| 595 | 601 | |
|---|
| 596 | 602 | void ath9k_htc_ps_wakeup(struct ath9k_htc_priv *priv); |
|---|