/*
 * 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.
 */

/**
 * Contains base driver definitions.
 */

/**
 *  bfa_drv.h Linux driver data structures.
 */

#ifndef __BFAD_DRV_H__
#define __BFAD_DRV_H__

#include "bfa_os_inc.h"

#include <bfa.h>
#include <bfa_svc.h>
#include <fcs/bfa_fcs.h>
#include <defs/bfa_defs_pci.h>
#include <defs/bfa_defs_port.h>
#include <defs/bfa_defs_rport.h>
#include <fcs/bfa_fcs_rport.h>
#include <defs/bfa_defs_vport.h>
#include <fcs/bfa_fcs_vport.h>

#include <cs/bfa_plog.h>
#include "aen/bfa_aen.h"
#include <log/bfa_log_linux.h>

#define BFAD_DRIVER_NAME        "bfa"
#ifdef BFA_DRIVER_VERSION
#define BFAD_DRIVER_VERSION    BFA_DRIVER_VERSION
#else
#define BFAD_DRIVER_VERSION    "2.1.2.1"
#endif


#define BFAD_IRQ_FLAGS IRQF_SHARED

/*
 * BFAD flags
 */
#define BFAD_MSIX_ON				0x00000001
#define BFAD_HAL_INIT_DONE			0x00000002
#define BFAD_DRV_INIT_DONE			0x00000004
#define BFAD_CFG_PPORT_DONE			0x00000008
#define BFAD_HAL_START_DONE			0x00000010
#define BFAD_PORT_ONLINE			0x00000020
#define BFAD_RPORT_ONLINE			0x00000040
#define BFAD_FCS_INIT_DONE                      0x00000080
#define BFAD_HAL_INIT_FAIL                      0x00000100
#define BFAD_FC4_PROBE_DONE                     0x00000200
#define BFAD_PORT_DELETE			0x00000001

/*
 * BFAD related definition
 */
#define SCSI_SCAN_DELAY		HZ
#define BFAD_STOP_TIMEOUT	30
#define BFAD_SUSPEND_TIMEOUT	BFAD_STOP_TIMEOUT

/*
 * BFAD configuration parameter default values
 */
#define BFAD_LUN_QUEUE_DEPTH 		32
#define BFAD_IO_MAX_SGE 		SG_ALL

#define bfad_isr_t irq_handler_t

#define MAX_MSIX_ENTRY 22

struct bfad_msix_s {
	struct bfad_s *bfad;
	struct msix_entry msix;
};

enum bfad_port_pvb_type {
	BFAD_PORT_PHYS_BASE = 0,
	BFAD_PORT_PHYS_VPORT = 1,
	BFAD_PORT_VF_BASE = 2,
	BFAD_PORT_VF_VPORT = 3,
};

/*
 * PORT data structure
 */
struct bfad_port_s {
	struct list_head list_entry;
	struct bfad_s         *bfad;
	struct bfa_fcs_port_s *fcs_port;
	u32        roles;
	s32         flags;
	u32        supported_fc4s;
	u8		ipfc_flags;
	enum bfad_port_pvb_type pvb_type;
	struct bfad_im_port_s *im_port;	/* IM specific data */
	struct bfad_tm_port_s *tm_port;	/* TM specific data */
	struct bfad_ipfc_port_s *ipfc_port;	/* IPFC specific data */
};

/*
 * VPORT data structure
 */
struct bfad_vport_s {
	struct bfad_port_s     drv_port;
	struct bfa_fcs_vport_s fcs_vport;
	struct completion *comp_del;
};

/*
 * VF data structure
 */
struct bfad_vf_s {
	bfa_fcs_vf_t    fcs_vf;
	struct bfad_port_s    base_port;	/* base port for vf */
	struct bfad_s   *bfad;
};

struct bfad_cfg_param_s {
	u32        rport_del_timeout;
	u32        ioc_queue_depth;
	u32        lun_queue_depth;
	u32        io_max_sge;
	u32        binding_method;
};

union bfad_tmp_buf {
	/* From struct bfa_adapter_attr_s */
	char            manufacturer[BFA_ADAPTER_MFG_NAME_LEN];
	char            serial_num[BFA_ADAPTER_SERIAL_NUM_LEN];
	char            model[BFA_ADAPTER_MODEL_NAME_LEN];
	char            fw_ver[BFA_VERSION_LEN];
	char            optrom_ver[BFA_VERSION_LEN];

	/* From struct bfa_ioc_pci_attr_s */
	u8         chip_rev[BFA_IOC_CHIP_REV_LEN];  /*  chip revision */
};

/*
 * BFAD (PCI function) data structure
 */
struct bfad_s {
	struct list_head list_entry;
	struct bfa_s       bfa;
	struct bfa_fcs_s       bfa_fcs;
	struct pci_dev *pcidev;
	const char *pci_name;
	struct bfa_pcidev_s hal_pcidev;
	struct bfa_ioc_pci_attr_s pci_attr;
	unsigned long   pci_bar0_map;
	void __iomem   *pci_bar0_kva;
	struct completion comp;
	struct completion suspend;
	struct completion disable_comp;
	bfa_boolean_t   disable_active;
	struct bfad_port_s     pport;	/* physical port of the BFAD */
	struct bfa_meminfo_s meminfo;
	struct bfa_iocfc_cfg_s   ioc_cfg;
	u32        inst_no;	/* BFAD instance number */
	u32        bfad_flags;
	spinlock_t      bfad_lock;
	struct task_struct *bfad_tsk;
	struct bfad_cfg_param_s cfg_data;
	struct bfad_msix_s msix_tab[MAX_MSIX_ENTRY];
	int             nvec;
	char            adapter_name[BFA_ADAPTER_SYM_NAME_LEN];
	char            port_name[BFA_ADAPTER_SYM_NAME_LEN];
	struct timer_list hal_tmo;
	unsigned long   hs_start;
	struct bfad_im_s *im;		/* IM specific data */
	struct bfad_tm_s *tm;		/* TM specific data */
	struct bfad_ipfc_s *ipfc;	/* IPFC specific data */
	struct bfa_log_mod_s   log_data;
	struct bfa_trc_mod_s  *trcmod;
	struct bfa_log_mod_s  *logmod;
	struct bfa_aen_s      *aen;
	struct bfa_aen_s       aen_buf;
	void		*file_map[BFA_AEN_MAX_APP];
	struct bfa_plog_s      plog_buf;
	int             ref_count;
	bfa_boolean_t	ipfc_enabled;
	union bfad_tmp_buf tmp_buf;
	struct fc_host_statistics link_stats;
};

/*
 * RPORT data structure
 */
struct bfad_rport_s {
	struct bfa_fcs_rport_s fcs_rport;
};

struct bfad_buf_info {
	void           *virt;
	dma_addr_t      phys;
	u32        size;
};

struct bfad_fcxp {
	struct bfad_port_s    *port;
	struct bfa_rport_s *bfa_rport;
	bfa_status_t    req_status;
	u16        tag;
	u16        rsp_len;
	u16        rsp_maxlen;
	u8         use_ireqbuf;
	u8         use_irspbuf;
	u32        num_req_sgles;
	u32        num_rsp_sgles;
	struct fchs_s          fchs;
	void           *reqbuf_info;
	void           *rspbuf_info;
	struct bfa_sge_s  *req_sge;
	struct bfa_sge_s  *rsp_sge;
	fcxp_send_cb_t  send_cbfn;
	void           *send_cbarg;
	void           *bfa_fcxp;
	struct completion comp;
};

struct bfad_hal_comp {
	bfa_status_t    status;
	struct completion comp;
};

/*
 * Macro to obtain the immediate lower power
 * of two for the integer.
 */
#define nextLowerInt(x)                         	\
do {                                            	\
	int j;                                  	\
	(*x)--;    		                	\
	for (j = 1; j < (sizeof(int) * 8); j <<= 1)     \
		(*x) = (*x) | (*x) >> j;        	\
	(*x)++;                  	        	\
	(*x) = (*x) >> 1;                       	\
} while (0)


bfa_status_t    bfad_vport_create(struct bfad_s *bfad, u16 vf_id,
				  struct bfa_port_cfg_s *port_cfg);
bfa_status_t    bfad_vf_create(struct bfad_s *bfad, u16 vf_id,
			       struct bfa_port_cfg_s *port_cfg);
bfa_status_t    bfad_cfg_pport(struct bfad_s *bfad, enum bfa_port_role role);
bfa_status_t    bfad_drv_init(struct bfad_s *bfad);
bfa_status_t	bfad_start_ops(struct bfad_s *bfad);
void            bfad_drv_start(struct bfad_s *bfad);
void            bfad_uncfg_pport(struct bfad_s *bfad);
void            bfad_drv_stop(struct bfad_s *bfad);
void            bfad_remove_intr(struct bfad_s *bfad);
void            bfad_hal_mem_release(struct bfad_s *bfad);
void            bfad_hcb_comp(void *arg, bfa_status_t status);

int             bfad_setup_intr(struct bfad_s *bfad);
void            bfad_remove_intr(struct bfad_s *bfad);

void		bfad_update_hal_cfg(struct bfa_iocfc_cfg_s *bfa_cfg);
bfa_status_t	bfad_hal_mem_alloc(struct bfad_s *bfad);
void		bfad_bfa_tmo(unsigned long data);
void		bfad_init_timer(struct bfad_s *bfad);
int		bfad_pci_init(struct pci_dev *pdev, struct bfad_s *bfad);
void		bfad_pci_uninit(struct pci_dev *pdev, struct bfad_s *bfad);
void		bfad_fcs_port_cfg(struct bfad_s *bfad);
void		bfad_drv_uninit(struct bfad_s *bfad);
void		bfad_drv_log_level_set(struct bfad_s *bfad);
bfa_status_t	bfad_fc4_module_init(void);
void		bfad_fc4_module_exit(void);
int		bfad_worker (void *ptr);

void bfad_pci_remove(struct pci_dev *pdev);
int bfad_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pid);
void bfad_os_rport_online_wait(struct bfad_s *bfad);
int bfad_os_get_linkup_delay(struct bfad_s *bfad);
int bfad_install_msix_handler(struct bfad_s *bfad);

extern struct idr bfad_im_port_index;
extern struct list_head bfad_list;
extern int bfa_lun_queue_depth;
extern int bfad_supported_fc4s;
extern int bfa_linkup_delay;

#endif /* __BFAD_DRV_H__ */
