linux/drivers/net/ethernet/brocade/bna/bfa_ioc.h

/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Linux network driver for QLogic BR-series Converged Network Adapter.
 */
/*
 * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
 * Copyright (c) 2014-2015 QLogic Corporation
 * All rights reserved
 * www.qlogic.com
 */

#ifndef __BFA_IOC_H__
#define __BFA_IOC_H__

#include "bfa_cs.h"
#include "bfi.h"
#include "cna.h"

#define BFA_IOC_TOV
#define BFA_IOC_HWSEM_TOV
#define BFA_IOC_HB_TOV
#define BFA_IOC_POLL_TOV
#define BNA_DBG_FWTRC_LEN

/* PCI device information required by IOC */
struct bfa_pcidev {};

/* Structure used to remember the DMA-able memory block's KVA and Physical
 * Address
 */
struct bfa_dma {};

#define BFA_DMA_ALIGN_SZ

/* smem size for Crossbow and Catapult */
#define BFI_SMEM_CB_SIZE
#define BFI_SMEM_CT_SIZE

/* BFA dma address assignment macro. (big endian format) */
#define bfa_dma_be_addr_set(dma_addr, pa)
static inline void
__bfa_dma_be_addr_set(union bfi_addr_u *dma_addr, u64 pa)
{}

#define bfa_alen_set(__alen, __len, __pa)

static inline void
__bfa_alen_set(struct bfi_alen *alen, u32 len, u64 pa)
{}

struct bfa_ioc_regs {};

/* IOC Mailbox structures */
bfa_mbox_cmd_cbfn_t;
struct bfa_mbox_cmd {};

/* IOC mailbox module */
bfa_ioc_mbox_mcfunc_t;
struct bfa_ioc_mbox_mod {};

/* IOC callback function interfaces */
bfa_ioc_enable_cbfn_t;
bfa_ioc_disable_cbfn_t;
bfa_ioc_hbfail_cbfn_t;
bfa_ioc_reset_cbfn_t;
struct bfa_ioc_cbfn {};

/* IOC event notification mechanism. */
enum bfa_ioc_event {};

bfa_ioc_notify_cbfn_t;

struct bfa_ioc_notify {};

/* Initialize a IOC event notification structure */
#define bfa_ioc_notify_init(__notify, __cbfn, __cbarg)

enum iocpf_event;

struct bfa_iocpf {};

enum ioc_event;

struct bfa_ioc {};

struct bfa_ioc_hwif {};

#define bfa_ioc_pcifn(__ioc)
#define bfa_ioc_devid(__ioc)
#define bfa_ioc_bar0(__ioc)
#define bfa_ioc_portid(__ioc)
#define bfa_ioc_asic_gen(__ioc)
#define bfa_ioc_is_default(__ioc)
#define bfa_ioc_speed_sup(__ioc)
#define bfa_ioc_get_nports(__ioc)

#define bfa_ioc_stats(_ioc, _stats)
#define bfa_ioc_stats_hb_count(_ioc, _hb_count)
#define BFA_IOC_FWIMG_MINSZ
#define BFA_IOC_FW_SMEM_SIZE(__ioc)
#define BFA_IOC_FLASH_CHUNK_NO(off)
#define BFA_IOC_FLASH_OFFSET_IN_CHUNK(off)
#define BFA_IOC_FLASH_CHUNK_ADDR(chunkno)

/* IOC mailbox interface */
bool bfa_nw_ioc_mbox_queue(struct bfa_ioc *ioc,
			struct bfa_mbox_cmd *cmd,
			bfa_mbox_cmd_cbfn_t cbfn, void *cbarg);
void bfa_nw_ioc_mbox_isr(struct bfa_ioc *ioc);
void bfa_nw_ioc_mbox_regisr(struct bfa_ioc *ioc, enum bfi_mclass mc,
		bfa_ioc_mbox_mcfunc_t cbfn, void *cbarg);

/* IOC interfaces */

#define bfa_ioc_pll_init_asic(__ioc)

#define bfa_ioc_lpu_read_stat(__ioc)

void bfa_nw_ioc_set_ct_hwif(struct bfa_ioc *ioc);
void bfa_nw_ioc_set_ct2_hwif(struct bfa_ioc *ioc);
void bfa_nw_ioc_ct2_poweron(struct bfa_ioc *ioc);

void bfa_nw_ioc_attach(struct bfa_ioc *ioc, void *bfa,
		struct bfa_ioc_cbfn *cbfn);
void bfa_nw_ioc_auto_recover(bool auto_recover);
void bfa_nw_ioc_detach(struct bfa_ioc *ioc);
void bfa_nw_ioc_pci_init(struct bfa_ioc *ioc, struct bfa_pcidev *pcidev,
		enum bfi_pcifn_class clscode);
u32 bfa_nw_ioc_meminfo(void);
void bfa_nw_ioc_mem_claim(struct bfa_ioc *ioc,  u8 *dm_kva, u64 dm_pa);
void bfa_nw_ioc_enable(struct bfa_ioc *ioc);
void bfa_nw_ioc_disable(struct bfa_ioc *ioc);

void bfa_nw_ioc_error_isr(struct bfa_ioc *ioc);
bool bfa_nw_ioc_is_disabled(struct bfa_ioc *ioc);
bool bfa_nw_ioc_is_operational(struct bfa_ioc *ioc);
void bfa_nw_ioc_get_attr(struct bfa_ioc *ioc, struct bfa_ioc_attr *ioc_attr);
enum bfa_status bfa_nw_ioc_fwsig_invalidate(struct bfa_ioc *ioc);
void bfa_nw_ioc_notify_register(struct bfa_ioc *ioc,
	struct bfa_ioc_notify *notify);
bool bfa_nw_ioc_sem_get(void __iomem *sem_reg);
void bfa_nw_ioc_sem_release(void __iomem *sem_reg);
void bfa_nw_ioc_hw_sem_release(struct bfa_ioc *ioc);
void bfa_nw_ioc_fwver_get(struct bfa_ioc *ioc,
			struct bfi_ioc_image_hdr *fwhdr);
bool bfa_nw_ioc_fwver_cmp(struct bfa_ioc *ioc,
			struct bfi_ioc_image_hdr *fwhdr);
void bfa_nw_ioc_get_mac(struct bfa_ioc *ioc, u8 *mac);
void bfa_nw_ioc_debug_memclaim(struct bfa_ioc *ioc, void *dbg_fwsave);
int bfa_nw_ioc_debug_fwtrc(struct bfa_ioc *ioc, void *trcdata, int *trclen);
int bfa_nw_ioc_debug_fwsave(struct bfa_ioc *ioc, void *trcdata, int *trclen);

/*
 * Timeout APIs
 */
void bfa_nw_ioc_timeout(struct bfa_ioc *ioc);
void bfa_nw_ioc_hb_check(struct bfa_ioc *ioc);
void bfa_nw_iocpf_timeout(struct bfa_ioc *ioc);
void bfa_nw_iocpf_sem_timeout(struct bfa_ioc *ioc);

/*
 * F/W Image Size & Chunk
 */
u32 *bfa_cb_image_get_chunk(enum bfi_asic_gen asic_gen, u32 off);
u32 bfa_cb_image_get_size(enum bfi_asic_gen asic_gen);

/*
 *	Flash module specific
 */
bfa_cb_flash;

struct bfa_flash {};

enum bfa_status bfa_nw_flash_get_attr(struct bfa_flash *flash,
			struct bfa_flash_attr *attr,
			bfa_cb_flash cbfn, void *cbarg);
enum bfa_status bfa_nw_flash_update_part(struct bfa_flash *flash,
			u32 type, u8 instance, void *buf, u32 len, u32 offset,
			bfa_cb_flash cbfn, void *cbarg);
enum bfa_status bfa_nw_flash_read_part(struct bfa_flash *flash,
			u32 type, u8 instance, void *buf, u32 len, u32 offset,
			bfa_cb_flash cbfn, void *cbarg);
u32	bfa_nw_flash_meminfo(void);
void	bfa_nw_flash_attach(struct bfa_flash *flash,
			    struct bfa_ioc *ioc, void *dev);
void	bfa_nw_flash_memclaim(struct bfa_flash *flash, u8 *dm_kva, u64 dm_pa);

#endif /* __BFA_IOC_H__ */