cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hif.h (3581B)


      1/* SPDX-License-Identifier: BSD-3-Clause-Clear */
      2/*
      3 * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
      4 */
      5
      6#ifndef _HIF_H_
      7#define _HIF_H_
      8
      9#include "core.h"
     10
     11struct ath11k_hif_ops {
     12	u32 (*read32)(struct ath11k_base *sc, u32 address);
     13	void (*write32)(struct ath11k_base *sc, u32 address, u32 data);
     14	void (*irq_enable)(struct ath11k_base *sc);
     15	void (*irq_disable)(struct ath11k_base *sc);
     16	int (*start)(struct ath11k_base *sc);
     17	void (*stop)(struct ath11k_base *sc);
     18	int (*power_up)(struct ath11k_base *sc);
     19	void (*power_down)(struct ath11k_base *sc);
     20	int (*suspend)(struct ath11k_base *ab);
     21	int (*resume)(struct ath11k_base *ab);
     22	int (*map_service_to_pipe)(struct ath11k_base *sc, u16 service_id,
     23				   u8 *ul_pipe, u8 *dl_pipe);
     24	int (*get_user_msi_vector)(struct ath11k_base *ab, char *user_name,
     25				   int *num_vectors, u32 *user_base_data,
     26				   u32 *base_vector);
     27	void (*get_msi_address)(struct ath11k_base *ab, u32 *msi_addr_lo,
     28				u32 *msi_addr_hi);
     29	void (*ce_irq_enable)(struct ath11k_base *ab);
     30	void (*ce_irq_disable)(struct ath11k_base *ab);
     31	void (*get_ce_msi_idx)(struct ath11k_base *ab, u32 ce_id, u32 *msi_idx);
     32};
     33
     34static inline void ath11k_hif_ce_irq_enable(struct ath11k_base *ab)
     35{
     36	if (ab->hif.ops->ce_irq_enable)
     37		ab->hif.ops->ce_irq_enable(ab);
     38}
     39
     40static inline void ath11k_hif_ce_irq_disable(struct ath11k_base *ab)
     41{
     42	if (ab->hif.ops->ce_irq_disable)
     43		ab->hif.ops->ce_irq_disable(ab);
     44}
     45
     46static inline int ath11k_hif_start(struct ath11k_base *sc)
     47{
     48	return sc->hif.ops->start(sc);
     49}
     50
     51static inline void ath11k_hif_stop(struct ath11k_base *sc)
     52{
     53	sc->hif.ops->stop(sc);
     54}
     55
     56static inline void ath11k_hif_irq_enable(struct ath11k_base *sc)
     57{
     58	sc->hif.ops->irq_enable(sc);
     59}
     60
     61static inline void ath11k_hif_irq_disable(struct ath11k_base *sc)
     62{
     63	sc->hif.ops->irq_disable(sc);
     64}
     65
     66static inline int ath11k_hif_power_up(struct ath11k_base *sc)
     67{
     68	return sc->hif.ops->power_up(sc);
     69}
     70
     71static inline void ath11k_hif_power_down(struct ath11k_base *sc)
     72{
     73	sc->hif.ops->power_down(sc);
     74}
     75
     76static inline int ath11k_hif_suspend(struct ath11k_base *ab)
     77{
     78	if (ab->hif.ops->suspend)
     79		return ab->hif.ops->suspend(ab);
     80
     81	return 0;
     82}
     83
     84static inline int ath11k_hif_resume(struct ath11k_base *ab)
     85{
     86	if (ab->hif.ops->resume)
     87		return ab->hif.ops->resume(ab);
     88
     89	return 0;
     90}
     91
     92static inline u32 ath11k_hif_read32(struct ath11k_base *sc, u32 address)
     93{
     94	return sc->hif.ops->read32(sc, address);
     95}
     96
     97static inline void ath11k_hif_write32(struct ath11k_base *sc, u32 address, u32 data)
     98{
     99	sc->hif.ops->write32(sc, address, data);
    100}
    101
    102static inline int ath11k_hif_map_service_to_pipe(struct ath11k_base *sc, u16 service_id,
    103						 u8 *ul_pipe, u8 *dl_pipe)
    104{
    105	return sc->hif.ops->map_service_to_pipe(sc, service_id, ul_pipe, dl_pipe);
    106}
    107
    108static inline int ath11k_get_user_msi_vector(struct ath11k_base *ab, char *user_name,
    109					     int *num_vectors, u32 *user_base_data,
    110					     u32 *base_vector)
    111{
    112	if (!ab->hif.ops->get_user_msi_vector)
    113		return -EOPNOTSUPP;
    114
    115	return ab->hif.ops->get_user_msi_vector(ab, user_name, num_vectors,
    116						user_base_data,
    117						base_vector);
    118}
    119
    120static inline void ath11k_get_msi_address(struct ath11k_base *ab, u32 *msi_addr_lo,
    121					  u32 *msi_addr_hi)
    122{
    123	if (!ab->hif.ops->get_msi_address)
    124		return;
    125
    126	ab->hif.ops->get_msi_address(ab, msi_addr_lo, msi_addr_hi);
    127}
    128
    129static inline void ath11k_get_ce_msi_idx(struct ath11k_base *ab, u32 ce_id,
    130					 u32 *msi_data_idx)
    131{
    132	if (ab->hif.ops->get_ce_msi_idx)
    133		ab->hif.ops->get_ce_msi_idx(ab, ce_id, msi_data_idx);
    134	else
    135		*msi_data_idx = ce_id;
    136}
    137#endif /* _HIF_H_ */