178 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
 | 
						|
 * All rights reserved
 | 
						|
 * www.brocade.com
 | 
						|
 *
 | 
						|
 * Linux driver for Brocade Fibre Channel Host Bus Adapter.
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute it and/or modify it
 | 
						|
 * under the terms of the GNU General Public License (GPL) Version 2 as
 | 
						|
 * published by the Free Software Foundation
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful, but
 | 
						|
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
 * General Public License for more details.
 | 
						|
 */
 | 
						|
#ifndef __BFA_H__
 | 
						|
#define __BFA_H__
 | 
						|
 | 
						|
#include <bfa_os_inc.h>
 | 
						|
#include <cs/bfa_debug.h>
 | 
						|
#include <cs/bfa_q.h>
 | 
						|
#include <cs/bfa_trc.h>
 | 
						|
#include <cs/bfa_log.h>
 | 
						|
#include <cs/bfa_plog.h>
 | 
						|
#include <defs/bfa_defs_status.h>
 | 
						|
#include <defs/bfa_defs_ioc.h>
 | 
						|
#include <defs/bfa_defs_iocfc.h>
 | 
						|
#include <aen/bfa_aen.h>
 | 
						|
#include <bfi/bfi.h>
 | 
						|
 | 
						|
struct bfa_s;
 | 
						|
#include <bfa_intr_priv.h>
 | 
						|
 | 
						|
struct bfa_pcidev_s;
 | 
						|
 | 
						|
/**
 | 
						|
 * PCI devices supported by the current BFA
 | 
						|
 */
 | 
						|
struct bfa_pciid_s {
 | 
						|
	u16        device_id;
 | 
						|
	u16        vendor_id;
 | 
						|
};
 | 
						|
 | 
						|
extern char     bfa_version[];
 | 
						|
 | 
						|
/**
 | 
						|
 * BFA Power Mgmt Commands
 | 
						|
 */
 | 
						|
enum bfa_pm_cmd {
 | 
						|
	BFA_PM_CTL_D0 = 0,
 | 
						|
	BFA_PM_CTL_D1 = 1,
 | 
						|
	BFA_PM_CTL_D2 = 2,
 | 
						|
	BFA_PM_CTL_D3 = 3,
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * BFA memory resources
 | 
						|
 */
 | 
						|
enum bfa_mem_type {
 | 
						|
	BFA_MEM_TYPE_KVA = 1,	/*! Kernel Virtual Memory *(non-dma-able) */
 | 
						|
	BFA_MEM_TYPE_DMA = 2,	/*! DMA-able memory */
 | 
						|
	BFA_MEM_TYPE_MAX = BFA_MEM_TYPE_DMA,
 | 
						|
};
 | 
						|
 | 
						|
struct bfa_mem_elem_s {
 | 
						|
	enum bfa_mem_type mem_type;	/*  see enum bfa_mem_type 	*/
 | 
						|
	u32        mem_len;	/*  Total Length in Bytes	*/
 | 
						|
	u8       	*kva;		/*  kernel virtual address	*/
 | 
						|
	u64        dma;		/*  dma address if DMA memory	*/
 | 
						|
	u8       	*kva_curp;	/*  kva allocation cursor	*/
 | 
						|
	u64        dma_curp;	/*  dma allocation cursor	*/
 | 
						|
};
 | 
						|
 | 
						|
struct bfa_meminfo_s {
 | 
						|
	struct bfa_mem_elem_s meminfo[BFA_MEM_TYPE_MAX];
 | 
						|
};
 | 
						|
#define bfa_meminfo_kva(_m)	\
 | 
						|
	(_m)->meminfo[BFA_MEM_TYPE_KVA - 1].kva_curp
 | 
						|
#define bfa_meminfo_dma_virt(_m)	\
 | 
						|
	(_m)->meminfo[BFA_MEM_TYPE_DMA - 1].kva_curp
 | 
						|
#define bfa_meminfo_dma_phys(_m)	\
 | 
						|
	(_m)->meminfo[BFA_MEM_TYPE_DMA - 1].dma_curp
 | 
						|
 | 
						|
/**
 | 
						|
 * Generic Scatter Gather Element used by driver
 | 
						|
 */
 | 
						|
struct bfa_sge_s {
 | 
						|
	u32        sg_len;
 | 
						|
	void           *sg_addr;
 | 
						|
};
 | 
						|
 | 
						|
#define bfa_sge_to_be(__sge) do {                                          \
 | 
						|
	((u32 *)(__sge))[0] = bfa_os_htonl(((u32 *)(__sge))[0]);      \
 | 
						|
	((u32 *)(__sge))[1] = bfa_os_htonl(((u32 *)(__sge))[1]);      \
 | 
						|
	((u32 *)(__sge))[2] = bfa_os_htonl(((u32 *)(__sge))[2]);      \
 | 
						|
} while (0)
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 * bfa stats interfaces
 | 
						|
 */
 | 
						|
#define bfa_stats(_mod, _stats)	(_mod)->stats._stats ++
 | 
						|
 | 
						|
#define bfa_ioc_get_stats(__bfa, __ioc_stats)	\
 | 
						|
	bfa_ioc_fetch_stats(&(__bfa)->ioc, __ioc_stats)
 | 
						|
#define bfa_ioc_clear_stats(__bfa)	\
 | 
						|
	bfa_ioc_clr_stats(&(__bfa)->ioc)
 | 
						|
 | 
						|
/*
 | 
						|
 * bfa API functions
 | 
						|
 */
 | 
						|
void bfa_get_pciids(struct bfa_pciid_s **pciids, int *npciids);
 | 
						|
void bfa_cfg_get_default(struct bfa_iocfc_cfg_s *cfg);
 | 
						|
void bfa_cfg_get_min(struct bfa_iocfc_cfg_s *cfg);
 | 
						|
void bfa_cfg_get_meminfo(struct bfa_iocfc_cfg_s *cfg,
 | 
						|
			struct bfa_meminfo_s *meminfo);
 | 
						|
void bfa_attach(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg,
 | 
						|
			struct bfa_meminfo_s *meminfo,
 | 
						|
			struct bfa_pcidev_s *pcidev);
 | 
						|
void bfa_init_trc(struct bfa_s *bfa, struct bfa_trc_mod_s *trcmod);
 | 
						|
void bfa_init_log(struct bfa_s *bfa, struct bfa_log_mod_s *logmod);
 | 
						|
void bfa_init_aen(struct bfa_s *bfa, struct bfa_aen_s *aen);
 | 
						|
void bfa_init_plog(struct bfa_s *bfa, struct bfa_plog_s *plog);
 | 
						|
void bfa_detach(struct bfa_s *bfa);
 | 
						|
void bfa_init(struct bfa_s *bfa);
 | 
						|
void bfa_start(struct bfa_s *bfa);
 | 
						|
void bfa_stop(struct bfa_s *bfa);
 | 
						|
void bfa_attach_fcs(struct bfa_s *bfa);
 | 
						|
void bfa_cb_init(void *bfad, bfa_status_t status);
 | 
						|
void bfa_cb_stop(void *bfad, bfa_status_t status);
 | 
						|
void bfa_cb_updateq(void *bfad, bfa_status_t status);
 | 
						|
 | 
						|
bfa_boolean_t bfa_intx(struct bfa_s *bfa);
 | 
						|
void bfa_isr_enable(struct bfa_s *bfa);
 | 
						|
void bfa_isr_disable(struct bfa_s *bfa);
 | 
						|
void bfa_msix_getvecs(struct bfa_s *bfa, u32 *msix_vecs_bmap,
 | 
						|
			u32 *num_vecs, u32 *max_vec_bit);
 | 
						|
#define bfa_msix(__bfa, __vec) (__bfa)->msix.handler[__vec](__bfa, __vec)
 | 
						|
 | 
						|
void bfa_comp_deq(struct bfa_s *bfa, struct list_head *comp_q);
 | 
						|
void bfa_comp_process(struct bfa_s *bfa, struct list_head *comp_q);
 | 
						|
void bfa_comp_free(struct bfa_s *bfa, struct list_head *comp_q);
 | 
						|
 | 
						|
typedef void (*bfa_cb_ioc_t) (void *cbarg, enum bfa_status status);
 | 
						|
void bfa_iocfc_get_attr(struct bfa_s *bfa, struct bfa_iocfc_attr_s *attr);
 | 
						|
bfa_status_t bfa_iocfc_get_stats(struct bfa_s *bfa,
 | 
						|
			struct bfa_iocfc_stats_s *stats,
 | 
						|
			bfa_cb_ioc_t cbfn, void *cbarg);
 | 
						|
bfa_status_t bfa_iocfc_clear_stats(struct bfa_s *bfa,
 | 
						|
			bfa_cb_ioc_t cbfn, void *cbarg);
 | 
						|
void bfa_get_attr(struct bfa_s *bfa, struct bfa_ioc_attr_s *ioc_attr);
 | 
						|
 | 
						|
void bfa_adapter_get_attr(struct bfa_s *bfa,
 | 
						|
			struct bfa_adapter_attr_s *ad_attr);
 | 
						|
u64 bfa_adapter_get_id(struct bfa_s *bfa);
 | 
						|
 | 
						|
bfa_status_t bfa_iocfc_israttr_set(struct bfa_s *bfa,
 | 
						|
			struct bfa_iocfc_intr_attr_s *attr);
 | 
						|
 | 
						|
void bfa_iocfc_enable(struct bfa_s *bfa);
 | 
						|
void bfa_iocfc_disable(struct bfa_s *bfa);
 | 
						|
void bfa_ioc_auto_recover(bfa_boolean_t auto_recover);
 | 
						|
void bfa_cb_ioc_disable(void *bfad);
 | 
						|
void bfa_timer_tick(struct bfa_s *bfa);
 | 
						|
#define bfa_timer_start(_bfa, _timer, _timercb, _arg, _timeout)	\
 | 
						|
	bfa_timer_begin(&(_bfa)->timer_mod, _timer, _timercb, _arg, _timeout)
 | 
						|
 | 
						|
/*
 | 
						|
 * BFA debug API functions
 | 
						|
 */
 | 
						|
bfa_status_t bfa_debug_fwtrc(struct bfa_s *bfa, void *trcdata, int *trclen);
 | 
						|
bfa_status_t bfa_debug_fwsave(struct bfa_s *bfa, void *trcdata, int *trclen);
 | 
						|
 | 
						|
#include "bfa_priv.h"
 | 
						|
 | 
						|
#endif /* __BFA_H__ */
 |