LCOV - code coverage report
Current view: top level - drivers/net/wireless/realtek/rtw88 - hci.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 54 98 55.1 %
Date: 2022-03-28 16:04:14 Functions: 1 4 25.0 %
Branches: 9 28 32.1 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
       2                 :            : /* Copyright(c) 2018-2019  Realtek Corporation
       3                 :            :  */
       4                 :            : 
       5                 :            : #ifndef __RTW_HCI_H__
       6                 :            : #define __RTW_HCI_H__
       7                 :            : 
       8                 :            : /* ops for PCI, USB and SDIO */
       9                 :            : struct rtw_hci_ops {
      10                 :            :         int (*tx)(struct rtw_dev *rtwdev,
      11                 :            :                   struct rtw_tx_pkt_info *pkt_info,
      12                 :            :                   struct sk_buff *skb);
      13                 :            :         int (*setup)(struct rtw_dev *rtwdev);
      14                 :            :         int (*start)(struct rtw_dev *rtwdev);
      15                 :            :         void (*stop)(struct rtw_dev *rtwdev);
      16                 :            :         void (*deep_ps)(struct rtw_dev *rtwdev, bool enter);
      17                 :            :         void (*link_ps)(struct rtw_dev *rtwdev, bool enter);
      18                 :            :         void (*interface_cfg)(struct rtw_dev *rtwdev);
      19                 :            : 
      20                 :            :         int (*write_data_rsvd_page)(struct rtw_dev *rtwdev, u8 *buf, u32 size);
      21                 :            :         int (*write_data_h2c)(struct rtw_dev *rtwdev, u8 *buf, u32 size);
      22                 :            : 
      23                 :            :         u8 (*read8)(struct rtw_dev *rtwdev, u32 addr);
      24                 :            :         u16 (*read16)(struct rtw_dev *rtwdev, u32 addr);
      25                 :            :         u32 (*read32)(struct rtw_dev *rtwdev, u32 addr);
      26                 :            :         void (*write8)(struct rtw_dev *rtwdev, u32 addr, u8 val);
      27                 :            :         void (*write16)(struct rtw_dev *rtwdev, u32 addr, u16 val);
      28                 :            :         void (*write32)(struct rtw_dev *rtwdev, u32 addr, u32 val);
      29                 :            : };
      30                 :            : 
      31                 :          0 : static inline int rtw_hci_tx(struct rtw_dev *rtwdev,
      32                 :            :                              struct rtw_tx_pkt_info *pkt_info,
      33                 :            :                              struct sk_buff *skb)
      34                 :            : {
      35                 :          0 :         return rtwdev->hci.ops->tx(rtwdev, pkt_info, skb);
      36                 :            : }
      37                 :            : 
      38                 :         22 : static inline int rtw_hci_setup(struct rtw_dev *rtwdev)
      39                 :            : {
      40                 :         22 :         return rtwdev->hci.ops->setup(rtwdev);
      41                 :            : }
      42                 :            : 
      43                 :          0 : static inline int rtw_hci_start(struct rtw_dev *rtwdev)
      44                 :            : {
      45                 :          0 :         return rtwdev->hci.ops->start(rtwdev);
      46                 :            : }
      47                 :            : 
      48                 :          9 : static inline void rtw_hci_stop(struct rtw_dev *rtwdev)
      49                 :            : {
      50                 :          9 :         rtwdev->hci.ops->stop(rtwdev);
      51                 :            : }
      52                 :            : 
      53                 :          0 : static inline void rtw_hci_deep_ps(struct rtw_dev *rtwdev, bool enter)
      54                 :            : {
      55                 :          0 :         rtwdev->hci.ops->deep_ps(rtwdev, enter);
      56                 :          0 : }
      57                 :            : 
      58                 :          0 : static inline void rtw_hci_link_ps(struct rtw_dev *rtwdev, bool enter)
      59                 :            : {
      60                 :          0 :         rtwdev->hci.ops->link_ps(rtwdev, enter);
      61                 :            : }
      62                 :            : 
      63                 :          0 : static inline void rtw_hci_interface_cfg(struct rtw_dev *rtwdev)
      64                 :            : {
      65                 :          0 :         rtwdev->hci.ops->interface_cfg(rtwdev);
      66                 :            : }
      67                 :            : 
      68                 :            : static inline int
      69                 :        380 : rtw_hci_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf, u32 size)
      70                 :            : {
      71                 :        380 :         return rtwdev->hci.ops->write_data_rsvd_page(rtwdev, buf, size);
      72                 :            : }
      73                 :            : 
      74                 :            : static inline int
      75                 :          0 : rtw_hci_write_data_h2c(struct rtw_dev *rtwdev, u8 *buf, u32 size)
      76                 :            : {
      77                 :          0 :         return rtwdev->hci.ops->write_data_h2c(rtwdev, buf, size);
      78                 :            : }
      79                 :            : 
      80                 :       1962 : static inline u8 rtw_read8(struct rtw_dev *rtwdev, u32 addr)
      81                 :            : {
      82                 :       1870 :         return rtwdev->hci.ops->read8(rtwdev, addr);
      83                 :            : }
      84                 :            : 
      85                 :         51 : static inline u16 rtw_read16(struct rtw_dev *rtwdev, u32 addr)
      86                 :            : {
      87                 :         51 :         return rtwdev->hci.ops->read16(rtwdev, addr);
      88                 :            : }
      89                 :            : 
      90                 :      20966 : static inline u32 rtw_read32(struct rtw_dev *rtwdev, u32 addr)
      91                 :            : {
      92                 :      18720 :         return rtwdev->hci.ops->read32(rtwdev, addr);
      93                 :            : }
      94                 :            : 
      95                 :       2548 : static inline void rtw_write8(struct rtw_dev *rtwdev, u32 addr, u8 val)
      96                 :            : {
      97                 :       2076 :         rtwdev->hci.ops->write8(rtwdev, addr, val);
      98                 :        799 : }
      99                 :            : 
     100                 :       1028 : static inline void rtw_write16(struct rtw_dev *rtwdev, u32 addr, u16 val)
     101                 :            : {
     102                 :       1028 :         rtwdev->hci.ops->write16(rtwdev, addr, val);
     103                 :         10 : }
     104                 :            : 
     105                 :      10923 : static inline void rtw_write32(struct rtw_dev *rtwdev, u32 addr, u32 val)
     106                 :            : {
     107                 :      10047 :         rtwdev->hci.ops->write32(rtwdev, addr, val);
     108                 :         50 : }
     109                 :            : 
     110                 :         51 : static inline void rtw_write8_set(struct rtw_dev *rtwdev, u32 addr, u8 bit)
     111                 :            : {
     112                 :         51 :         u8 val;
     113                 :            : 
     114                 :         51 :         val = rtw_read8(rtwdev, addr);
     115                 :         51 :         rtw_write8(rtwdev, addr, val | bit);
     116                 :         10 : }
     117                 :            : 
     118                 :          0 : static inline void rtw_write16_set(struct rtw_dev *rtwdev, u32 addr, u16 bit)
     119                 :            : {
     120                 :          0 :         u16 val;
     121                 :            : 
     122                 :          0 :         val = rtw_read16(rtwdev, addr);
     123                 :          0 :         rtw_write16(rtwdev, addr, val | bit);
     124                 :            : }
     125                 :            : 
     126                 :         66 : static inline void rtw_write32_set(struct rtw_dev *rtwdev, u32 addr, u32 bit)
     127                 :            : {
     128                 :         66 :         u32 val;
     129                 :            : 
     130                 :         66 :         val = rtw_read32(rtwdev, addr);
     131                 :         66 :         rtw_write32(rtwdev, addr, val | bit);
     132                 :         13 : }
     133                 :            : 
     134                 :         41 : static inline void rtw_write8_clr(struct rtw_dev *rtwdev, u32 addr, u8 bit)
     135                 :            : {
     136                 :         41 :         u8 val;
     137                 :            : 
     138                 :         41 :         val = rtw_read8(rtwdev, addr);
     139                 :         41 :         rtw_write8(rtwdev, addr, val & ~bit);
     140                 :         10 : }
     141                 :            : 
     142                 :            : static inline void rtw_write16_clr(struct rtw_dev *rtwdev, u32 addr, u16 bit)
     143                 :            : {
     144                 :            :         u16 val;
     145                 :            : 
     146                 :            :         val = rtw_read16(rtwdev, addr);
     147                 :            :         rtw_write16(rtwdev, addr, val & ~bit);
     148                 :            : }
     149                 :            : 
     150                 :          0 : static inline void rtw_write32_clr(struct rtw_dev *rtwdev, u32 addr, u32 bit)
     151                 :            : {
     152                 :          0 :         u32 val;
     153                 :            : 
     154                 :          0 :         val = rtw_read32(rtwdev, addr);
     155                 :          0 :         rtw_write32(rtwdev, addr, val & ~bit);
     156                 :          0 : }
     157                 :            : 
     158                 :            : static inline u32
     159                 :          0 : rtw_read_rf(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,
     160                 :            :             u32 addr, u32 mask)
     161                 :            : {
     162                 :          0 :         unsigned long flags;
     163                 :          0 :         u32 val;
     164                 :            : 
     165                 :          0 :         spin_lock_irqsave(&rtwdev->rf_lock, flags);
     166                 :          0 :         val = rtwdev->chip->ops->read_rf(rtwdev, rf_path, addr, mask);
     167                 :          0 :         spin_unlock_irqrestore(&rtwdev->rf_lock, flags);
     168                 :            : 
     169                 :          0 :         return val;
     170                 :            : }
     171                 :            : 
     172                 :            : static inline void
     173                 :          0 : rtw_write_rf(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,
     174                 :            :              u32 addr, u32 mask, u32 data)
     175                 :            : {
     176                 :          0 :         unsigned long flags;
     177                 :            : 
     178                 :          0 :         spin_lock_irqsave(&rtwdev->rf_lock, flags);
     179                 :          0 :         rtwdev->chip->ops->write_rf(rtwdev, rf_path, addr, mask, data);
     180                 :          0 :         spin_unlock_irqrestore(&rtwdev->rf_lock, flags);
     181                 :          0 : }
     182                 :            : 
     183                 :            : static inline u32
     184                 :       2171 : rtw_read32_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask)
     185                 :            : {
     186                 :       2171 :         u32 shift = __ffs(mask);
     187                 :       2171 :         u32 orig;
     188                 :       2171 :         u32 ret;
     189                 :            : 
     190                 :       2171 :         orig = rtw_read32(rtwdev, addr);
     191                 :       2171 :         ret = (orig & mask) >> shift;
     192                 :            : 
     193   [ +  +  #  #  :       2171 :         return ret;
                   #  # ]
     194                 :            : }
     195                 :            : 
     196                 :            : static inline void
     197                 :          9 : rtw_write32_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
     198                 :            : {
     199         [ -  + ]:          9 :         u32 shift = __ffs(mask);
     200                 :          9 :         u32 orig;
     201                 :          9 :         u32 set;
     202                 :            : 
     203         [ -  + ]:          9 :         WARN(addr & 0x3, "should be 4-byte aligned, addr = 0x%08x\n", addr);
     204                 :            : 
     205                 :          9 :         orig = rtw_read32(rtwdev, addr);
     206                 :          9 :         set = (orig & ~mask) | ((data << shift) & mask);
     207                 :          9 :         rtw_write32(rtwdev, addr, set);
     208                 :          9 : }
     209                 :            : 
     210                 :            : static inline void
     211                 :          0 : rtw_write8_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u8 data)
     212                 :            : {
     213                 :          0 :         u32 shift;
     214                 :          0 :         u8 orig, set;
     215                 :            : 
     216                 :          0 :         mask &= 0xff;
     217                 :          0 :         shift = __ffs(mask);
     218                 :            : 
     219                 :          0 :         orig = rtw_read8(rtwdev, addr);
     220                 :          0 :         set = (orig & ~mask) | ((data << shift) & mask);
     221                 :          0 :         rtw_write8(rtwdev, addr, set);
     222                 :          0 : }
     223                 :            : 
     224                 :        450 : static inline enum rtw_hci_type rtw_hci_type(struct rtw_dev *rtwdev)
     225                 :            : {
     226   [ +  -  -  -  :        450 :         return rtwdev->hci.type;
          -  -  -  +  -  
          +  -  +  -  -  
             -  +  -  - ]
     227                 :            : }
     228                 :            : 
     229                 :            : #endif

Generated by: LCOV version 1.14