162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/* Atlantic Network Driver
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 2014-2019 aQuantia Corporation
562306a36Sopenharmony_ci * Copyright (C) 2019-2020 Marvell International Ltd.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/* File aq_vec.h: Definition of common structures for vector of Rx and Tx rings.
962306a36Sopenharmony_ci * Declaration of functions for Rx and Tx rings.
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#ifndef AQ_VEC_H
1362306a36Sopenharmony_ci#define AQ_VEC_H
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include "aq_common.h"
1662306a36Sopenharmony_ci#include "aq_nic.h"
1762306a36Sopenharmony_ci#include "aq_ring.h"
1862306a36Sopenharmony_ci#include "aq_hw.h"
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#include <linux/irqreturn.h>
2162306a36Sopenharmony_ci#include <linux/filter.h>
2262306a36Sopenharmony_ci#include <linux/netdevice.h>
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistruct aq_hw_s;
2562306a36Sopenharmony_cistruct aq_hw_ops;
2662306a36Sopenharmony_cistruct aq_nic_s;
2762306a36Sopenharmony_cistruct aq_nic_cfg_s;
2862306a36Sopenharmony_cistruct aq_ring_stats_rx_s;
2962306a36Sopenharmony_cistruct aq_ring_stats_tx_s;
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciirqreturn_t aq_vec_isr(int irq, void *private);
3262306a36Sopenharmony_ciirqreturn_t aq_vec_isr_legacy(int irq, void *private);
3362306a36Sopenharmony_cistruct aq_vec_s *aq_vec_alloc(struct aq_nic_s *aq_nic, unsigned int idx,
3462306a36Sopenharmony_ci			      struct aq_nic_cfg_s *aq_nic_cfg);
3562306a36Sopenharmony_ciint aq_vec_ring_alloc(struct aq_vec_s *self, struct aq_nic_s *aq_nic,
3662306a36Sopenharmony_ci		      unsigned int idx, struct aq_nic_cfg_s *aq_nic_cfg);
3762306a36Sopenharmony_ciint aq_vec_init(struct aq_vec_s *self, const struct aq_hw_ops *aq_hw_ops,
3862306a36Sopenharmony_ci		struct aq_hw_s *aq_hw);
3962306a36Sopenharmony_civoid aq_vec_deinit(struct aq_vec_s *self);
4062306a36Sopenharmony_civoid aq_vec_free(struct aq_vec_s *self);
4162306a36Sopenharmony_civoid aq_vec_ring_free(struct aq_vec_s *self);
4262306a36Sopenharmony_ciint aq_vec_start(struct aq_vec_s *self);
4362306a36Sopenharmony_civoid aq_vec_stop(struct aq_vec_s *self);
4462306a36Sopenharmony_cicpumask_t *aq_vec_get_affinity_mask(struct aq_vec_s *self);
4562306a36Sopenharmony_cibool aq_vec_is_valid_tc(struct aq_vec_s *self, const unsigned int tc);
4662306a36Sopenharmony_ciunsigned int aq_vec_get_sw_stats(struct aq_vec_s *self, const unsigned int tc, u64 *data);
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci#endif /* AQ_VEC_H */
49