2009-09-24 04:46:15 +04:00
/*
2010-09-15 22:50:55 +04:00
* Copyright ( c ) 2005 - 2010 Brocade Communications Systems , Inc .
2009-09-24 04:46:15 +04:00
* 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_IOC_H__
# define __BFA_IOC_H__
2010-12-10 06:12:32 +03:00
# include "bfad_drv.h"
2010-09-15 22:50:55 +04:00
# include "bfa_cs.h"
# include "bfi.h"
2010-12-10 06:08:43 +03:00
# define BFA_DBG_FWTRC_ENTS (BFI_IOC_TRC_ENTS)
# define BFA_DBG_FWTRC_LEN \
( BFA_DBG_FWTRC_ENTS * sizeof ( struct bfa_trc_s ) + \
( sizeof ( struct bfa_trc_mod_s ) - \
BFA_TRC_MAX * sizeof ( struct bfa_trc_s ) ) )
2010-10-19 04:15:55 +04:00
/*
2010-09-15 22:50:55 +04:00
* BFA timer declarations
*/
typedef void ( * bfa_timer_cbfn_t ) ( void * ) ;
2010-10-19 04:15:55 +04:00
/*
2010-09-15 22:50:55 +04:00
* BFA timer data structure
*/
struct bfa_timer_s {
struct list_head qe ;
bfa_timer_cbfn_t timercb ;
void * arg ;
2010-10-19 04:15:55 +04:00
int timeout ; /* in millisecs */
2010-09-15 22:50:55 +04:00
} ;
2010-10-19 04:15:55 +04:00
/*
2010-09-15 22:50:55 +04:00
* Timer module structure
*/
struct bfa_timer_mod_s {
struct list_head timer_q ;
} ;
2010-10-19 04:15:55 +04:00
# define BFA_TIMER_FREQ 200 /* specified in millisecs */
2010-09-15 22:50:55 +04:00
void bfa_timer_beat ( struct bfa_timer_mod_s * mod ) ;
void bfa_timer_begin ( struct bfa_timer_mod_s * mod , struct bfa_timer_s * timer ,
bfa_timer_cbfn_t timercb , void * arg ,
unsigned int timeout ) ;
void bfa_timer_stop ( struct bfa_timer_s * timer ) ;
2010-10-19 04:15:55 +04:00
/*
2010-09-15 22:50:55 +04:00
* Generic Scatter Gather Element used by driver
*/
struct bfa_sge_s {
u32 sg_len ;
void * sg_addr ;
} ;
# define bfa_sge_word_swap(__sge) do { \
2010-10-19 04:12:29 +04:00
( ( u32 * ) ( __sge ) ) [ 0 ] = swab32 ( ( ( u32 * ) ( __sge ) ) [ 0 ] ) ; \
( ( u32 * ) ( __sge ) ) [ 1 ] = swab32 ( ( ( u32 * ) ( __sge ) ) [ 1 ] ) ; \
( ( u32 * ) ( __sge ) ) [ 2 ] = swab32 ( ( ( u32 * ) ( __sge ) ) [ 2 ] ) ; \
2010-09-15 22:50:55 +04:00
} while ( 0 )
# define bfa_swap_words(_x) ( \
( ( _x ) < < 32 ) | ( ( _x ) > > 32 ) )
2010-12-10 06:12:32 +03:00
# ifdef __BIG_ENDIAN
2010-09-15 22:50:55 +04:00
# define bfa_sge_to_be(_x)
# define bfa_sge_to_le(_x) bfa_sge_word_swap(_x)
# define bfa_sgaddr_le(_x) bfa_swap_words(_x)
# else
# define bfa_sge_to_be(_x) bfa_sge_word_swap(_x)
# define bfa_sge_to_le(_x)
# define bfa_sgaddr_le(_x) (_x)
# endif
2009-09-24 04:46:15 +04:00
2010-10-19 04:15:55 +04:00
/*
2009-09-24 04:46:15 +04:00
* PCI device information required by IOC
*/
struct bfa_pcidev_s {
2010-09-15 22:50:55 +04:00
int pci_slot ;
u8 pci_func ;
2010-10-19 04:15:55 +04:00
u16 device_id ;
2011-06-25 07:22:28 +04:00
u16 ssid ;
2010-10-19 04:15:55 +04:00
void __iomem * pci_bar_kva ;
2009-09-24 04:46:15 +04:00
} ;
2010-10-19 04:15:55 +04:00
/*
2009-09-24 04:46:15 +04:00
* Structure used to remember the DMA - able memory block ' s KVA and Physical
* Address
*/
struct bfa_dma_s {
2010-09-15 22:50:55 +04:00
void * kva ; /* ! Kernel virtual address */
u64 pa ; /* ! Physical address */
2009-09-24 04:46:15 +04:00
} ;
# define BFA_DMA_ALIGN_SZ 256
# define BFA_ROUNDUP(_l, _s) (((_l) + ((_s) - 1)) & ~((_s) - 1))
2010-10-19 04:15:55 +04:00
/*
2010-09-15 22:50:55 +04:00
* smem size for Crossbow and Catapult
*/
# define BFI_SMEM_CB_SIZE 0x200000U /* ! 2MB for crossbow */
# define BFI_SMEM_CT_SIZE 0x280000U /* ! 2.5MB for catapult */
2009-09-24 04:46:15 +04:00
# define bfa_dma_be_addr_set(dma_addr, pa) \
__bfa_dma_be_addr_set ( & dma_addr , ( u64 ) pa )
static inline void
__bfa_dma_be_addr_set ( union bfi_addr_u * dma_addr , u64 pa )
{
2010-11-30 05:26:32 +03:00
dma_addr - > a32 . addr_lo = cpu_to_be32 ( pa ) ;
2010-12-10 06:12:32 +03:00
dma_addr - > a32 . addr_hi = cpu_to_be32 ( pa > > 32 ) ;
2009-09-24 04:46:15 +04:00
}
2011-06-14 02:39:36 +04:00
# define bfa_alen_set(__alen, __len, __pa) \
__bfa_alen_set ( __alen , __len , ( u64 ) __pa )
static inline void
__bfa_alen_set ( struct bfi_alen_s * alen , u32 len , u64 pa )
{
alen - > al_len = cpu_to_be32 ( len ) ;
bfa_dma_be_addr_set ( alen - > al_addr , pa ) ;
}
2009-09-24 04:46:15 +04:00
struct bfa_ioc_regs_s {
2010-10-19 04:12:29 +04:00
void __iomem * hfn_mbox_cmd ;
void __iomem * hfn_mbox ;
void __iomem * lpu_mbox_cmd ;
void __iomem * lpu_mbox ;
2011-06-14 02:52:40 +04:00
void __iomem * lpu_read_stat ;
2010-10-19 04:12:29 +04:00
void __iomem * pss_ctl_reg ;
void __iomem * pss_err_status_reg ;
void __iomem * app_pll_fast_ctl_reg ;
void __iomem * app_pll_slow_ctl_reg ;
void __iomem * ioc_sem_reg ;
void __iomem * ioc_usage_sem_reg ;
void __iomem * ioc_init_sem_reg ;
void __iomem * ioc_usage_reg ;
void __iomem * host_page_num_fn ;
void __iomem * heartbeat ;
void __iomem * ioc_fwstate ;
2010-12-14 03:17:11 +03:00
void __iomem * alt_ioc_fwstate ;
2010-10-19 04:12:29 +04:00
void __iomem * ll_halt ;
2010-12-14 03:17:11 +03:00
void __iomem * alt_ll_halt ;
2010-10-19 04:12:29 +04:00
void __iomem * err_set ;
2010-12-14 03:17:11 +03:00
void __iomem * ioc_fail_sync ;
2010-10-19 04:12:29 +04:00
void __iomem * shirq_isr_next ;
void __iomem * shirq_msk_next ;
void __iomem * smem_page_start ;
2009-09-24 04:46:15 +04:00
u32 smem_pg0 ;
} ;
2010-10-19 04:12:29 +04:00
# define bfa_mem_read(_raddr, _off) swab32(readl(((_raddr) + (_off))))
2009-09-24 04:46:15 +04:00
# define bfa_mem_write(_raddr, _off, _val) \
2010-10-19 04:12:29 +04:00
writel ( swab32 ( ( _val ) ) , ( ( _raddr ) + ( _off ) ) )
2010-10-19 04:15:55 +04:00
/*
2009-09-24 04:46:15 +04:00
* IOC Mailbox structures
*/
struct bfa_mbox_cmd_s {
2010-09-15 22:50:55 +04:00
struct list_head qe ;
2009-09-24 04:46:15 +04:00
u32 msg [ BFI_IOC_MSGSZ ] ;
} ;
2010-10-19 04:15:55 +04:00
/*
2009-09-24 04:46:15 +04:00
* IOC mailbox module
*/
typedef void ( * bfa_ioc_mbox_mcfunc_t ) ( void * cbarg , struct bfi_mbmsg_s * m ) ;
struct bfa_ioc_mbox_mod_s {
2010-09-15 22:50:55 +04:00
struct list_head cmd_q ; /* pending mbox queue */
int nmclass ; /* number of handlers */
2009-09-24 04:46:15 +04:00
struct {
bfa_ioc_mbox_mcfunc_t cbfn ; /* message handlers */
void * cbarg ;
} mbhdlr [ BFI_MC_MAX ] ;
} ;
2010-10-19 04:15:55 +04:00
/*
2009-09-24 04:46:15 +04:00
* IOC callback function interfaces
*/
typedef void ( * bfa_ioc_enable_cbfn_t ) ( void * bfa , enum bfa_status status ) ;
typedef void ( * bfa_ioc_disable_cbfn_t ) ( void * bfa ) ;
typedef void ( * bfa_ioc_hbfail_cbfn_t ) ( void * bfa ) ;
typedef void ( * bfa_ioc_reset_cbfn_t ) ( void * bfa ) ;
struct bfa_ioc_cbfn_s {
bfa_ioc_enable_cbfn_t enable_cbfn ;
bfa_ioc_disable_cbfn_t disable_cbfn ;
bfa_ioc_hbfail_cbfn_t hbfail_cbfn ;
bfa_ioc_reset_cbfn_t reset_cbfn ;
} ;
2010-10-19 04:15:55 +04:00
/*
2011-06-14 02:42:10 +04:00
* IOC event notification mechanism .
2009-09-24 04:46:15 +04:00
*/
2011-06-14 02:42:10 +04:00
enum bfa_ioc_event_e {
BFA_IOC_E_ENABLED = 1 ,
BFA_IOC_E_DISABLED = 2 ,
BFA_IOC_E_FAILED = 3 ,
} ;
typedef void ( * bfa_ioc_notify_cbfn_t ) ( void * , enum bfa_ioc_event_e ) ;
struct bfa_ioc_notify_s {
2009-09-24 04:46:15 +04:00
struct list_head qe ;
2011-06-14 02:42:10 +04:00
bfa_ioc_notify_cbfn_t cbfn ;
2009-09-24 04:46:15 +04:00
void * cbarg ;
} ;
2010-10-19 04:15:55 +04:00
/*
2011-06-14 02:42:10 +04:00
* Initialize a IOC event notification structure
2009-09-24 04:46:15 +04:00
*/
2011-06-14 02:42:10 +04:00
# define bfa_ioc_notify_init(__notify, __cbfn, __cbarg) do { \
2009-09-24 04:46:15 +04:00
( __notify ) - > cbfn = ( __cbfn ) ; \
( __notify ) - > cbarg = ( __cbarg ) ; \
} while ( 0 )
2010-09-15 22:50:55 +04:00
struct bfa_iocpf_s {
bfa_fsm_t fsm ;
struct bfa_ioc_s * ioc ;
2011-06-14 02:52:12 +04:00
bfa_boolean_t fw_mismatch_notified ;
2010-09-15 22:50:55 +04:00
bfa_boolean_t auto_recover ;
2011-06-14 02:52:12 +04:00
u32 poll_time ;
2010-09-15 22:50:55 +04:00
} ;
2009-09-24 04:46:15 +04:00
struct bfa_ioc_s {
bfa_fsm_t fsm ;
struct bfa_s * bfa ;
struct bfa_pcidev_s pcidev ;
2010-09-15 22:50:55 +04:00
struct bfa_timer_mod_s * timer_mod ;
struct bfa_timer_s ioc_timer ;
struct bfa_timer_s sem_timer ;
struct bfa_timer_s hb_timer ;
2009-09-24 04:46:15 +04:00
u32 hb_count ;
2011-06-14 02:42:10 +04:00
struct list_head notify_q ;
2009-09-24 04:46:15 +04:00
void * dbg_fwsave ;
int dbg_fwsave_len ;
bfa_boolean_t dbg_fwsave_once ;
2011-06-14 02:42:10 +04:00
enum bfi_pcifn_class clscode ;
2010-09-15 22:50:55 +04:00
struct bfa_ioc_regs_s ioc_regs ;
2009-09-24 04:46:15 +04:00
struct bfa_trc_mod_s * trcmod ;
struct bfa_ioc_drv_stats_s stats ;
bfa_boolean_t fcmode ;
bfa_boolean_t pllinit ;
2010-09-15 22:50:55 +04:00
bfa_boolean_t stats_busy ; /* outstanding stats */
2009-09-24 04:46:15 +04:00
u8 port_id ;
struct bfa_dma_s attr_dma ;
struct bfi_ioc_attr_s * attr ;
struct bfa_ioc_cbfn_s * cbfn ;
struct bfa_ioc_mbox_mod_s mbox_mod ;
2010-09-15 22:50:55 +04:00
struct bfa_ioc_hwif_s * ioc_hwif ;
struct bfa_iocpf_s iocpf ;
2011-06-14 02:50:35 +04:00
enum bfi_asic_gen asic_gen ;
enum bfi_asic_mode asic_mode ;
enum bfi_port_mode port0_mode ;
enum bfi_port_mode port1_mode ;
2011-06-25 07:22:28 +04:00
enum bfa_mode_s port_mode ;
u8 ad_cap_bm ; /* adapter cap bit mask */
u8 port_mode_cfg ; /* config port mode */
2010-03-06 06:34:20 +03:00
} ;
struct bfa_ioc_hwif_s {
2011-06-14 02:50:35 +04:00
bfa_status_t ( * ioc_pll_init ) ( void __iomem * rb , enum bfi_asic_mode m ) ;
2010-09-15 22:50:55 +04:00
bfa_boolean_t ( * ioc_firmware_lock ) ( struct bfa_ioc_s * ioc ) ;
void ( * ioc_firmware_unlock ) ( struct bfa_ioc_s * ioc ) ;
void ( * ioc_reg_init ) ( struct bfa_ioc_s * ioc ) ;
void ( * ioc_map_port ) ( struct bfa_ioc_s * ioc ) ;
void ( * ioc_isr_mode_set ) ( struct bfa_ioc_s * ioc ,
bfa_boolean_t msix ) ;
2010-12-14 03:17:11 +03:00
void ( * ioc_notify_fail ) ( struct bfa_ioc_s * ioc ) ;
2010-09-15 22:50:55 +04:00
void ( * ioc_ownership_reset ) ( struct bfa_ioc_s * ioc ) ;
2011-04-13 22:45:53 +04:00
bfa_boolean_t ( * ioc_sync_start ) ( struct bfa_ioc_s * ioc ) ;
2010-12-14 03:17:11 +03:00
void ( * ioc_sync_join ) ( struct bfa_ioc_s * ioc ) ;
void ( * ioc_sync_leave ) ( struct bfa_ioc_s * ioc ) ;
void ( * ioc_sync_ack ) ( struct bfa_ioc_s * ioc ) ;
bfa_boolean_t ( * ioc_sync_complete ) ( struct bfa_ioc_s * ioc ) ;
2011-06-14 02:52:40 +04:00
bfa_boolean_t ( * ioc_lpu_read_stat ) ( struct bfa_ioc_s * ioc ) ;
2009-09-24 04:46:15 +04:00
} ;
2011-06-25 07:22:28 +04:00
/*
* ASIC block configurtion related
*/
typedef void ( * bfa_ablk_cbfn_t ) ( void * , enum bfa_status ) ;
struct bfa_ablk_s {
struct bfa_ioc_s * ioc ;
struct bfa_ablk_cfg_s * cfg ;
u16 * pcifn ;
struct bfa_dma_s dma_addr ;
bfa_boolean_t busy ;
struct bfa_mbox_cmd_s mb ;
bfa_ablk_cbfn_t cbfn ;
void * cbarg ;
struct bfa_ioc_notify_s ioc_notify ;
} ;
2009-09-25 23:29:54 +04:00
# define bfa_ioc_pcifn(__ioc) ((__ioc)->pcidev.pci_func)
# define bfa_ioc_devid(__ioc) ((__ioc)->pcidev.device_id)
# define bfa_ioc_bar0(__ioc) ((__ioc)->pcidev.pci_bar_kva)
2009-09-24 04:46:15 +04:00
# define bfa_ioc_portid(__ioc) ((__ioc)->port_id)
2011-06-14 02:50:35 +04:00
# define bfa_ioc_asic_gen(__ioc) ((__ioc)->asic_gen)
# define bfa_ioc_is_cna(__ioc) \
2011-06-14 02:54:31 +04:00
( ( bfa_ioc_get_type ( __ioc ) = = BFA_IOC_TYPE_FCoE ) | | \
( bfa_ioc_get_type ( __ioc ) = = BFA_IOC_TYPE_LL ) )
2009-09-24 04:46:15 +04:00
# define bfa_ioc_fetch_stats(__ioc, __stats) \
2009-09-25 23:29:54 +04:00
( ( ( __stats ) - > drv_stats ) = ( __ioc ) - > stats )
2009-09-24 04:46:15 +04:00
# define bfa_ioc_clr_stats(__ioc) \
2010-10-19 04:08:54 +04:00
memset ( & ( __ioc ) - > stats , 0 , sizeof ( ( __ioc ) - > stats ) )
2009-09-25 23:29:54 +04:00
# define bfa_ioc_maxfrsize(__ioc) ((__ioc)->attr->maxfrsize)
# define bfa_ioc_rx_bbcredit(__ioc) ((__ioc)->attr->rx_bbcredit)
2009-09-24 04:46:15 +04:00
# define bfa_ioc_speed_sup(__ioc) \
BFI_ADAPTER_GETP ( SPEED , ( __ioc ) - > attr - > adapter_prop )
2010-09-15 22:50:55 +04:00
# define bfa_ioc_get_nports(__ioc) \
2010-03-06 06:34:20 +03:00
BFI_ADAPTER_GETP ( NPORTS , ( __ioc ) - > attr - > adapter_prop )
2010-09-15 22:50:55 +04:00
# define bfa_ioc_stats(_ioc, _stats) ((_ioc)->stats._stats++)
# define BFA_IOC_FWIMG_MINSZ (16 * 1024)
2011-06-14 02:50:35 +04:00
# define BFA_IOC_FW_SMEM_SIZE(__ioc) \
( ( bfa_ioc_asic_gen ( __ioc ) = = BFI_ASIC_GEN_CB ) \
? BFI_SMEM_CB_SIZE : BFI_SMEM_CT_SIZE )
2010-09-15 22:50:55 +04:00
# define BFA_IOC_FLASH_CHUNK_NO(off) (off / BFI_FLASH_CHUNK_SZ_WORDS)
# define BFA_IOC_FLASH_OFFSET_IN_CHUNK(off) (off % BFI_FLASH_CHUNK_SZ_WORDS)
2010-03-06 06:34:20 +03:00
# define BFA_IOC_FLASH_CHUNK_ADDR(chunkno) (chunkno * BFI_FLASH_CHUNK_SZ_WORDS)
2009-09-24 04:46:15 +04:00
2010-10-19 04:15:55 +04:00
/*
2009-09-24 04:46:15 +04:00
* IOC mailbox interface
*/
void bfa_ioc_mbox_queue ( struct bfa_ioc_s * ioc , struct bfa_mbox_cmd_s * cmd ) ;
void bfa_ioc_mbox_register ( struct bfa_ioc_s * ioc ,
bfa_ioc_mbox_mcfunc_t * mcfuncs ) ;
void bfa_ioc_mbox_isr ( struct bfa_ioc_s * ioc ) ;
void bfa_ioc_mbox_send ( struct bfa_ioc_s * ioc , void * ioc_msg , int len ) ;
2011-06-14 02:50:35 +04:00
bfa_boolean_t bfa_ioc_msgget ( struct bfa_ioc_s * ioc , void * mbmsg ) ;
2009-09-24 04:46:15 +04:00
void bfa_ioc_mbox_regisr ( struct bfa_ioc_s * ioc , enum bfi_mclass mc ,
bfa_ioc_mbox_mcfunc_t cbfn , void * cbarg ) ;
2010-10-19 04:15:55 +04:00
/*
2009-09-24 04:46:15 +04:00
* IOC interfaces
*/
2010-09-15 22:50:55 +04:00
# define bfa_ioc_pll_init_asic(__ioc) \
( ( __ioc ) - > ioc_hwif - > ioc_pll_init ( ( __ioc ) - > pcidev . pci_bar_kva , \
2011-06-14 02:50:35 +04:00
( __ioc ) - > asic_mode ) )
2010-09-15 22:50:55 +04:00
bfa_status_t bfa_ioc_pll_init ( struct bfa_ioc_s * ioc ) ;
2011-06-14 02:50:35 +04:00
bfa_status_t bfa_ioc_cb_pll_init ( void __iomem * rb , enum bfi_asic_mode mode ) ;
bfa_status_t bfa_ioc_ct_pll_init ( void __iomem * rb , enum bfi_asic_mode mode ) ;
bfa_status_t bfa_ioc_ct2_pll_init ( void __iomem * rb , enum bfi_asic_mode mode ) ;
2010-09-15 22:50:55 +04:00
2011-06-14 02:50:35 +04:00
# define bfa_ioc_isr_mode_set(__ioc, __msix) do { \
if ( ( __ioc ) - > ioc_hwif - > ioc_isr_mode_set ) \
( ( __ioc ) - > ioc_hwif - > ioc_isr_mode_set ( __ioc , __msix ) ) ; \
} while ( 0 )
2010-09-15 22:50:55 +04:00
# define bfa_ioc_ownership_reset(__ioc) \
2010-03-06 06:34:20 +03:00
( ( __ioc ) - > ioc_hwif - > ioc_ownership_reset ( __ioc ) )
2011-06-25 07:23:38 +04:00
# define bfa_ioc_get_fcmode(__ioc) ((__ioc)->fcmode)
2011-06-14 02:52:40 +04:00
# define bfa_ioc_lpu_read_stat(__ioc) do { \
if ( ( __ioc ) - > ioc_hwif - > ioc_lpu_read_stat ) \
( ( __ioc ) - > ioc_hwif - > ioc_lpu_read_stat ( __ioc ) ) ; \
} while ( 0 )
2010-09-15 22:50:55 +04:00
2010-03-06 06:34:20 +03:00
void bfa_ioc_set_cb_hwif ( struct bfa_ioc_s * ioc ) ;
2011-06-14 02:50:35 +04:00
void bfa_ioc_set_ct_hwif ( struct bfa_ioc_s * ioc ) ;
void bfa_ioc_set_ct2_hwif ( struct bfa_ioc_s * ioc ) ;
void bfa_ioc_ct2_poweron ( struct bfa_ioc_s * ioc ) ;
2010-09-15 22:50:55 +04:00
2009-09-24 04:46:15 +04:00
void bfa_ioc_attach ( struct bfa_ioc_s * ioc , void * bfa ,
2010-09-15 22:50:55 +04:00
struct bfa_ioc_cbfn_s * cbfn , struct bfa_timer_mod_s * timer_mod ) ;
void bfa_ioc_auto_recover ( bfa_boolean_t auto_recover ) ;
2009-09-24 04:46:15 +04:00
void bfa_ioc_detach ( struct bfa_ioc_s * ioc ) ;
void bfa_ioc_pci_init ( struct bfa_ioc_s * ioc , struct bfa_pcidev_s * pcidev ,
2011-06-14 02:42:10 +04:00
enum bfi_pcifn_class clscode ) ;
2009-09-24 04:46:15 +04:00
void bfa_ioc_mem_claim ( struct bfa_ioc_s * ioc , u8 * dm_kva , u64 dm_pa ) ;
void bfa_ioc_enable ( struct bfa_ioc_s * ioc ) ;
void bfa_ioc_disable ( struct bfa_ioc_s * ioc ) ;
bfa_boolean_t bfa_ioc_intx_claim ( struct bfa_ioc_s * ioc ) ;
2010-09-15 22:50:55 +04:00
void bfa_ioc_boot ( struct bfa_ioc_s * ioc , u32 boot_type ,
2011-06-14 02:50:35 +04:00
u32 boot_env ) ;
2009-09-24 04:46:15 +04:00
void bfa_ioc_isr ( struct bfa_ioc_s * ioc , struct bfi_mbmsg_s * msg ) ;
void bfa_ioc_error_isr ( struct bfa_ioc_s * ioc ) ;
bfa_boolean_t bfa_ioc_is_operational ( struct bfa_ioc_s * ioc ) ;
2010-09-15 22:50:55 +04:00
bfa_boolean_t bfa_ioc_is_initialized ( struct bfa_ioc_s * ioc ) ;
2009-09-24 04:46:15 +04:00
bfa_boolean_t bfa_ioc_is_disabled ( struct bfa_ioc_s * ioc ) ;
2011-06-25 07:23:19 +04:00
bfa_boolean_t bfa_ioc_is_acq_addr ( struct bfa_ioc_s * ioc ) ;
2009-09-24 04:46:15 +04:00
bfa_boolean_t bfa_ioc_fw_mismatch ( struct bfa_ioc_s * ioc ) ;
bfa_boolean_t bfa_ioc_adapter_is_disabled ( struct bfa_ioc_s * ioc ) ;
2010-12-14 03:17:11 +03:00
void bfa_ioc_reset_fwstate ( struct bfa_ioc_s * ioc ) ;
2010-03-06 06:37:57 +03:00
enum bfa_ioc_type_e bfa_ioc_get_type ( struct bfa_ioc_s * ioc ) ;
void bfa_ioc_get_adapter_serial_num ( struct bfa_ioc_s * ioc , char * serial_num ) ;
void bfa_ioc_get_adapter_fw_ver ( struct bfa_ioc_s * ioc , char * fw_ver ) ;
void bfa_ioc_get_adapter_optrom_ver ( struct bfa_ioc_s * ioc , char * optrom_ver ) ;
void bfa_ioc_get_adapter_model ( struct bfa_ioc_s * ioc , char * model ) ;
void bfa_ioc_get_adapter_manufacturer ( struct bfa_ioc_s * ioc ,
2010-09-15 22:50:55 +04:00
char * manufacturer ) ;
2010-03-06 06:37:57 +03:00
void bfa_ioc_get_pci_chip_rev ( struct bfa_ioc_s * ioc , char * chip_rev ) ;
enum bfa_ioc_state bfa_ioc_get_state ( struct bfa_ioc_s * ioc ) ;
2009-09-24 04:46:15 +04:00
void bfa_ioc_get_attr ( struct bfa_ioc_s * ioc , struct bfa_ioc_attr_s * ioc_attr ) ;
void bfa_ioc_get_adapter_attr ( struct bfa_ioc_s * ioc ,
struct bfa_adapter_attr_s * ad_attr ) ;
void bfa_ioc_debug_memclaim ( struct bfa_ioc_s * ioc , void * dbg_fwsave ) ;
bfa_status_t bfa_ioc_debug_fwsave ( struct bfa_ioc_s * ioc , void * trcdata ,
int * trclen ) ;
bfa_status_t bfa_ioc_debug_fwtrc ( struct bfa_ioc_s * ioc , void * trcdata ,
int * trclen ) ;
2010-09-15 22:50:55 +04:00
bfa_status_t bfa_ioc_debug_fwcore ( struct bfa_ioc_s * ioc , void * buf ,
u32 * offset , int * buflen ) ;
2010-10-19 04:12:29 +04:00
bfa_boolean_t bfa_ioc_sem_get ( void __iomem * sem_reg ) ;
2010-03-06 06:34:20 +03:00
void bfa_ioc_fwver_get ( struct bfa_ioc_s * ioc ,
struct bfi_ioc_image_hdr_s * fwhdr ) ;
bfa_boolean_t bfa_ioc_fwver_cmp ( struct bfa_ioc_s * ioc ,
struct bfi_ioc_image_hdr_s * fwhdr ) ;
2010-09-15 22:50:55 +04:00
bfa_status_t bfa_ioc_fw_stats_get ( struct bfa_ioc_s * ioc , void * stats ) ;
bfa_status_t bfa_ioc_fw_stats_clear ( struct bfa_ioc_s * ioc ) ;
2009-09-24 04:46:15 +04:00
2011-06-25 07:22:28 +04:00
/*
* asic block configuration related APIs
*/
u32 bfa_ablk_meminfo ( void ) ;
void bfa_ablk_memclaim ( struct bfa_ablk_s * ablk , u8 * dma_kva , u64 dma_pa ) ;
void bfa_ablk_attach ( struct bfa_ablk_s * ablk , struct bfa_ioc_s * ioc ) ;
bfa_status_t bfa_ablk_query ( struct bfa_ablk_s * ablk ,
struct bfa_ablk_cfg_s * ablk_cfg ,
bfa_ablk_cbfn_t cbfn , void * cbarg ) ;
bfa_status_t bfa_ablk_adapter_config ( struct bfa_ablk_s * ablk ,
enum bfa_mode_s mode , int max_pf , int max_vf ,
bfa_ablk_cbfn_t cbfn , void * cbarg ) ;
bfa_status_t bfa_ablk_port_config ( struct bfa_ablk_s * ablk , int port ,
enum bfa_mode_s mode , int max_pf , int max_vf ,
bfa_ablk_cbfn_t cbfn , void * cbarg ) ;
bfa_status_t bfa_ablk_pf_create ( struct bfa_ablk_s * ablk , u16 * pcifn ,
u8 port , enum bfi_pcifn_class personality , int bw ,
bfa_ablk_cbfn_t cbfn , void * cbarg ) ;
bfa_status_t bfa_ablk_pf_delete ( struct bfa_ablk_s * ablk , int pcifn ,
bfa_ablk_cbfn_t cbfn , void * cbarg ) ;
bfa_status_t bfa_ablk_pf_update ( struct bfa_ablk_s * ablk , int pcifn , int bw ,
bfa_ablk_cbfn_t cbfn , void * cbarg ) ;
bfa_status_t bfa_ablk_optrom_en ( struct bfa_ablk_s * ablk ,
bfa_ablk_cbfn_t cbfn , void * cbarg ) ;
bfa_status_t bfa_ablk_optrom_dis ( struct bfa_ablk_s * ablk ,
bfa_ablk_cbfn_t cbfn , void * cbarg ) ;
2009-09-24 04:46:15 +04:00
/*
* bfa mfg wwn API functions
*/
mac_t bfa_ioc_get_mac ( struct bfa_ioc_s * ioc ) ;
2010-07-09 06:48:12 +04:00
mac_t bfa_ioc_get_mfg_mac ( struct bfa_ioc_s * ioc ) ;
2009-09-24 04:46:15 +04:00
2010-09-15 22:50:55 +04:00
/*
* F / W Image Size & Chunk
*/
2011-06-14 02:50:35 +04:00
extern u32 bfi_image_cb_size ;
extern u32 bfi_image_ct_size ;
extern u32 bfi_image_ct2_size ;
extern u32 * bfi_image_cb ;
extern u32 * bfi_image_ct ;
extern u32 * bfi_image_ct2 ;
2010-09-15 22:50:55 +04:00
static inline u32 *
2011-06-14 02:50:35 +04:00
bfi_image_cb_get_chunk ( u32 off )
{
return ( u32 * ) ( bfi_image_cb + off ) ;
}
2010-09-15 22:50:55 +04:00
static inline u32 *
2011-06-14 02:50:35 +04:00
bfi_image_ct_get_chunk ( u32 off )
{
return ( u32 * ) ( bfi_image_ct + off ) ;
}
2009-09-24 04:46:15 +04:00
2010-09-15 22:50:55 +04:00
static inline u32 *
2011-06-14 02:50:35 +04:00
bfi_image_ct2_get_chunk ( u32 off )
{
return ( u32 * ) ( bfi_image_ct2 + off ) ;
}
2010-09-15 22:50:55 +04:00
static inline u32 *
2011-06-14 02:50:35 +04:00
bfa_cb_image_get_chunk ( enum bfi_asic_gen asic_gen , u32 off )
2010-09-15 22:50:55 +04:00
{
2011-06-14 02:50:35 +04:00
switch ( asic_gen ) {
case BFI_ASIC_GEN_CB :
return bfi_image_cb_get_chunk ( off ) ;
break ;
case BFI_ASIC_GEN_CT :
return bfi_image_ct_get_chunk ( off ) ;
break ;
case BFI_ASIC_GEN_CT2 :
return bfi_image_ct2_get_chunk ( off ) ;
break ;
default :
return NULL ;
2010-09-15 22:50:55 +04:00
}
}
static inline u32
2011-06-14 02:50:35 +04:00
bfa_cb_image_get_size ( enum bfi_asic_gen asic_gen )
2010-09-15 22:50:55 +04:00
{
2011-06-14 02:50:35 +04:00
switch ( asic_gen ) {
case BFI_ASIC_GEN_CB :
return bfi_image_cb_size ;
break ;
case BFI_ASIC_GEN_CT :
return bfi_image_ct_size ;
break ;
case BFI_ASIC_GEN_CT2 :
return bfi_image_ct2_size ;
break ;
default :
return 0 ;
2010-09-15 22:50:55 +04:00
}
}
2010-10-19 04:15:55 +04:00
/*
2010-09-15 22:50:55 +04:00
* CNA TRCMOD declaration
*/
/*
* ! ! ! Only append to the enums defined here to avoid any versioning
* ! ! ! needed between trace utility and driver version
*/
enum {
BFA_TRC_CNA_PORT = 1 ,
BFA_TRC_CNA_IOC = 2 ,
BFA_TRC_CNA_IOC_CB = 3 ,
BFA_TRC_CNA_IOC_CT = 4 ,
} ;
# endif /* __BFA_IOC_H__ */