LCOV - code coverage report
Current view: top level - drivers/net/wireless/ath/ath10k - hif.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 6 50 12.0 %
Date: 2022-03-28 15:32:58 Functions: 0 2 0.0 %
Branches: 0 24 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: ISC */
       2                 :            : /*
       3                 :            :  * Copyright (c) 2005-2011 Atheros Communications Inc.
       4                 :            :  * Copyright (c) 2011-2015,2017 Qualcomm Atheros, Inc.
       5                 :            :  */
       6                 :            : 
       7                 :            : #ifndef _HIF_H_
       8                 :            : #define _HIF_H_
       9                 :            : 
      10                 :            : #include <linux/kernel.h>
      11                 :            : #include "core.h"
      12                 :            : #include "bmi.h"
      13                 :            : #include "debug.h"
      14                 :            : 
      15                 :            : /* Types of fw logging mode */
      16                 :            : enum ath_dbg_mode {
      17                 :            :         ATH10K_ENABLE_FW_LOG_DIAG,
      18                 :            :         ATH10K_ENABLE_FW_LOG_CE,
      19                 :            : };
      20                 :            : 
      21                 :            : struct ath10k_hif_sg_item {
      22                 :            :         u16 transfer_id;
      23                 :            :         void *transfer_context; /* NULL = tx completion callback not called */
      24                 :            :         void *vaddr; /* for debugging mostly */
      25                 :            :         dma_addr_t paddr;
      26                 :            :         u16 len;
      27                 :            : };
      28                 :            : 
      29                 :            : struct ath10k_hif_ops {
      30                 :            :         /* send a scatter-gather list to the target */
      31                 :            :         int (*tx_sg)(struct ath10k *ar, u8 pipe_id,
      32                 :            :                      struct ath10k_hif_sg_item *items, int n_items);
      33                 :            : 
      34                 :            :         /* read firmware memory through the diagnose interface */
      35                 :            :         int (*diag_read)(struct ath10k *ar, u32 address, void *buf,
      36                 :            :                          size_t buf_len);
      37                 :            : 
      38                 :            :         int (*diag_write)(struct ath10k *ar, u32 address, const void *data,
      39                 :            :                           int nbytes);
      40                 :            :         /*
      41                 :            :          * API to handle HIF-specific BMI message exchanges, this API is
      42                 :            :          * synchronous and only allowed to be called from a context that
      43                 :            :          * can block (sleep)
      44                 :            :          */
      45                 :            :         int (*exchange_bmi_msg)(struct ath10k *ar,
      46                 :            :                                 void *request, u32 request_len,
      47                 :            :                                 void *response, u32 *response_len);
      48                 :            : 
      49                 :            :         /* Post BMI phase, after FW is loaded. Starts regular operation */
      50                 :            :         int (*start)(struct ath10k *ar);
      51                 :            : 
      52                 :            :         /* Clean up what start() did. This does not revert to BMI phase. If
      53                 :            :          * desired so, call power_down() and power_up()
      54                 :            :          */
      55                 :            :         void (*stop)(struct ath10k *ar);
      56                 :            : 
      57                 :            :         int (*swap_mailbox)(struct ath10k *ar);
      58                 :            : 
      59                 :            :         int (*map_service_to_pipe)(struct ath10k *ar, u16 service_id,
      60                 :            :                                    u8 *ul_pipe, u8 *dl_pipe);
      61                 :            : 
      62                 :            :         void (*get_default_pipe)(struct ath10k *ar, u8 *ul_pipe, u8 *dl_pipe);
      63                 :            : 
      64                 :            :         /*
      65                 :            :          * Check if prior sends have completed.
      66                 :            :          *
      67                 :            :          * Check whether the pipe in question has any completed
      68                 :            :          * sends that have not yet been processed.
      69                 :            :          * This function is only relevant for HIF pipes that are configured
      70                 :            :          * to be polled rather than interrupt-driven.
      71                 :            :          */
      72                 :            :         void (*send_complete_check)(struct ath10k *ar, u8 pipe_id, int force);
      73                 :            : 
      74                 :            :         u16 (*get_free_queue_number)(struct ath10k *ar, u8 pipe_id);
      75                 :            : 
      76                 :            :         u32 (*read32)(struct ath10k *ar, u32 address);
      77                 :            : 
      78                 :            :         void (*write32)(struct ath10k *ar, u32 address, u32 value);
      79                 :            : 
      80                 :            :         /* Power up the device and enter BMI transfer mode for FW download */
      81                 :            :         int (*power_up)(struct ath10k *ar, enum ath10k_firmware_mode fw_mode);
      82                 :            : 
      83                 :            :         /* Power down the device and free up resources. stop() must be called
      84                 :            :          * before this if start() was called earlier
      85                 :            :          */
      86                 :            :         void (*power_down)(struct ath10k *ar);
      87                 :            : 
      88                 :            :         int (*suspend)(struct ath10k *ar);
      89                 :            :         int (*resume)(struct ath10k *ar);
      90                 :            : 
      91                 :            :         /* fetch calibration data from target eeprom */
      92                 :            :         int (*fetch_cal_eeprom)(struct ath10k *ar, void **data,
      93                 :            :                                 size_t *data_len);
      94                 :            : 
      95                 :            :         int (*get_target_info)(struct ath10k *ar,
      96                 :            :                                struct bmi_target_info *target_info);
      97                 :            :         int (*set_target_log_mode)(struct ath10k *ar, u8 fw_log_mode);
      98                 :            : };
      99                 :            : 
     100                 :          0 : static inline int ath10k_hif_tx_sg(struct ath10k *ar, u8 pipe_id,
     101                 :            :                                    struct ath10k_hif_sg_item *items,
     102                 :            :                                    int n_items)
     103                 :            : {
     104                 :          0 :         return ar->hif.ops->tx_sg(ar, pipe_id, items, n_items);
     105                 :            : }
     106                 :            : 
     107                 :          0 : static inline int ath10k_hif_diag_read(struct ath10k *ar, u32 address, void *buf,
     108                 :            :                                        size_t buf_len)
     109                 :            : {
     110                 :          0 :         return ar->hif.ops->diag_read(ar, address, buf, buf_len);
     111                 :            : }
     112                 :            : 
     113                 :          0 : static inline int ath10k_hif_diag_write(struct ath10k *ar, u32 address,
     114                 :            :                                         const void *data, int nbytes)
     115                 :            : {
     116   [ #  #  #  #  :          0 :         if (!ar->hif.ops->diag_write)
             #  #  #  # ]
     117                 :            :                 return -EOPNOTSUPP;
     118                 :            : 
     119                 :          0 :         return ar->hif.ops->diag_write(ar, address, data, nbytes);
     120                 :            : }
     121                 :            : 
     122                 :          7 : static inline int ath10k_hif_exchange_bmi_msg(struct ath10k *ar,
     123                 :            :                                               void *request, u32 request_len,
     124                 :            :                                               void *response, u32 *response_len)
     125                 :            : {
     126                 :          7 :         return ar->hif.ops->exchange_bmi_msg(ar, request, request_len,
     127                 :            :                                              response, response_len);
     128                 :            : }
     129                 :            : 
     130                 :          0 : static inline int ath10k_hif_start(struct ath10k *ar)
     131                 :            : {
     132                 :          0 :         return ar->hif.ops->start(ar);
     133                 :            : }
     134                 :            : 
     135                 :          0 : static inline void ath10k_hif_stop(struct ath10k *ar)
     136                 :            : {
     137                 :          0 :         return ar->hif.ops->stop(ar);
     138                 :            : }
     139                 :            : 
     140                 :          0 : static inline int ath10k_hif_swap_mailbox(struct ath10k *ar)
     141                 :            : {
     142         [ #  # ]:          0 :         if (ar->hif.ops->swap_mailbox)
     143                 :          0 :                 return ar->hif.ops->swap_mailbox(ar);
     144                 :            :         return 0;
     145                 :            : }
     146                 :            : 
     147                 :          0 : static inline int ath10k_hif_map_service_to_pipe(struct ath10k *ar,
     148                 :            :                                                  u16 service_id,
     149                 :            :                                                  u8 *ul_pipe, u8 *dl_pipe)
     150                 :            : {
     151                 :          0 :         return ar->hif.ops->map_service_to_pipe(ar, service_id,
     152                 :            :                                                 ul_pipe, dl_pipe);
     153                 :            : }
     154                 :            : 
     155                 :            : static inline void ath10k_hif_get_default_pipe(struct ath10k *ar,
     156                 :            :                                                u8 *ul_pipe, u8 *dl_pipe)
     157                 :            : {
     158                 :            :         ar->hif.ops->get_default_pipe(ar, ul_pipe, dl_pipe);
     159                 :            : }
     160                 :            : 
     161                 :          0 : static inline void ath10k_hif_send_complete_check(struct ath10k *ar,
     162                 :            :                                                   u8 pipe_id, int force)
     163                 :            : {
     164                 :          0 :         ar->hif.ops->send_complete_check(ar, pipe_id, force);
     165                 :            : }
     166                 :            : 
     167                 :            : static inline u16 ath10k_hif_get_free_queue_number(struct ath10k *ar,
     168                 :            :                                                    u8 pipe_id)
     169                 :            : {
     170                 :            :         return ar->hif.ops->get_free_queue_number(ar, pipe_id);
     171                 :            : }
     172                 :            : 
     173                 :         25 : static inline int ath10k_hif_power_up(struct ath10k *ar,
     174                 :            :                                       enum ath10k_firmware_mode fw_mode)
     175                 :            : {
     176                 :         25 :         return ar->hif.ops->power_up(ar, fw_mode);
     177                 :            : }
     178                 :            : 
     179                 :          7 : static inline void ath10k_hif_power_down(struct ath10k *ar)
     180                 :            : {
     181                 :          7 :         ar->hif.ops->power_down(ar);
     182                 :          0 : }
     183                 :            : 
     184                 :          0 : static inline int ath10k_hif_suspend(struct ath10k *ar)
     185                 :            : {
     186         [ #  # ]:          0 :         if (!ar->hif.ops->suspend)
     187                 :            :                 return -EOPNOTSUPP;
     188                 :            : 
     189                 :          0 :         return ar->hif.ops->suspend(ar);
     190                 :            : }
     191                 :            : 
     192                 :          0 : static inline int ath10k_hif_resume(struct ath10k *ar)
     193                 :            : {
     194         [ #  # ]:          0 :         if (!ar->hif.ops->resume)
     195                 :            :                 return -EOPNOTSUPP;
     196                 :            : 
     197                 :          0 :         return ar->hif.ops->resume(ar);
     198                 :            : }
     199                 :            : 
     200                 :          0 : static inline u32 ath10k_hif_read32(struct ath10k *ar, u32 address)
     201                 :            : {
     202         [ #  # ]:          0 :         if (!ar->hif.ops->read32) {
     203                 :          0 :                 ath10k_warn(ar, "hif read32 not supported\n");
     204                 :          0 :                 return 0xdeaddead;
     205                 :            :         }
     206                 :            : 
     207                 :          0 :         return ar->hif.ops->read32(ar, address);
     208                 :            : }
     209                 :            : 
     210                 :          0 : static inline void ath10k_hif_write32(struct ath10k *ar,
     211                 :            :                                       u32 address, u32 data)
     212                 :            : {
     213         [ #  # ]:          0 :         if (!ar->hif.ops->write32) {
     214                 :          0 :                 ath10k_warn(ar, "hif write32 not supported\n");
     215                 :          0 :                 return;
     216                 :            :         }
     217                 :            : 
     218                 :          0 :         ar->hif.ops->write32(ar, address, data);
     219                 :            : }
     220                 :            : 
     221                 :          0 : static inline int ath10k_hif_fetch_cal_eeprom(struct ath10k *ar,
     222                 :            :                                               void **data,
     223                 :            :                                               size_t *data_len)
     224                 :            : {
     225         [ #  # ]:          0 :         if (!ar->hif.ops->fetch_cal_eeprom)
     226                 :            :                 return -EOPNOTSUPP;
     227                 :            : 
     228                 :          0 :         return ar->hif.ops->fetch_cal_eeprom(ar, data, data_len);
     229                 :            : }
     230                 :            : 
     231                 :          0 : static inline int ath10k_hif_get_target_info(struct ath10k *ar,
     232                 :            :                                              struct bmi_target_info *tgt_info)
     233                 :            : {
     234         [ #  # ]:          0 :         if (!ar->hif.ops->get_target_info)
     235                 :            :                 return -EOPNOTSUPP;
     236                 :            : 
     237                 :          0 :         return ar->hif.ops->get_target_info(ar, tgt_info);
     238                 :            : }
     239                 :            : 
     240                 :          0 : static inline int ath10k_hif_set_target_log_mode(struct ath10k *ar,
     241                 :            :                                                  u8 fw_log_mode)
     242                 :            : {
     243         [ #  # ]:          0 :         if (!ar->hif.ops->set_target_log_mode)
     244                 :            :                 return -EOPNOTSUPP;
     245                 :            : 
     246                 :          0 :         return ar->hif.ops->set_target_log_mode(ar, fw_log_mode);
     247                 :            : }
     248                 :            : #endif /* _HIF_H_ */

Generated by: LCOV version 1.14