1a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati/*
2a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
3a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * All rights reserved
4a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * www.brocade.com
5a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati *
6a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * Linux driver for Brocade Fibre Channel Host Bus Adapter.
7a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati *
8a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * This program is free software; you can redistribute it and/or modify it
9a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * under the terms of the GNU General Public License (GPL) Version 2 as
10a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * published by the Free Software Foundation
11a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati *
12a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * This program is distributed in the hope that it will be useful, but
13a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * WITHOUT ANY WARRANTY; without even the implied warranty of
14a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * General Public License for more details.
16a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
17a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
18a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#ifndef __BFA_PORT_H__
19a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define __BFA_PORT_H__
20a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
21a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_defs_svc.h"
22a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_ioc.h"
23a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_cs.h"
24a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
25a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatitypedef void (*bfa_port_stats_cbfn_t) (void *dev, bfa_status_t status);
26a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatitypedef void (*bfa_port_endis_cbfn_t) (void *dev, bfa_status_t status);
27a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
28a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatistruct bfa_port_s {
29a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void				*dev;
30a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_ioc_s		*ioc;
31a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_trc_mod_s		*trcmod;
32a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	u32			msgtag;
33a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_boolean_t			stats_busy;
34a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_mbox_cmd_s		stats_mb;
35a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_port_stats_cbfn_t		stats_cbfn;
36a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void				*stats_cbarg;
37a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_status_t			stats_status;
38a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	u32			stats_reset_time;
39a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	union bfa_port_stats_u		*stats;
40a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_dma_s		stats_dma;
41a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_boolean_t			endis_pending;
42a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_mbox_cmd_s		endis_mb;
43a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_port_endis_cbfn_t		endis_cbfn;
44a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void				*endis_cbarg;
45a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_status_t			endis_status;
46d37779f8d98a1d7c5ba904982958167d988f01ddKrishna Gudipati	struct bfa_ioc_notify_s		ioc_notify;
4743ffdf4dfb827babcdca5345a76031598a985dc8Krishna Gudipati	bfa_boolean_t			pbc_disabled;
48e353546e447feb838db2d1b23bac23cb90755993Krishna Gudipati	bfa_boolean_t			dport_enabled;
494507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati	struct bfa_mem_dma_s		port_dma;
50a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati};
51a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
524507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati#define BFA_MEM_PORT_DMA(__bfa)		(&((__bfa)->modules.port.port_dma))
534507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati
54a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid	     bfa_port_attach(struct bfa_port_s *port, struct bfa_ioc_s *ioc,
55a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				void *dev, struct bfa_trc_mod_s *trcmod);
56d37779f8d98a1d7c5ba904982958167d988f01ddKrishna Gudipativoid	bfa_port_notify(void *arg, enum bfa_ioc_event_e event);
57a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
58a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatibfa_status_t bfa_port_get_stats(struct bfa_port_s *port,
59a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				 union bfa_port_stats_u *stats,
60a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				 bfa_port_stats_cbfn_t cbfn, void *cbarg);
61a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatibfa_status_t bfa_port_clear_stats(struct bfa_port_s *port,
62a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				   bfa_port_stats_cbfn_t cbfn, void *cbarg);
63a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatibfa_status_t bfa_port_enable(struct bfa_port_s *port,
64a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati			      bfa_port_endis_cbfn_t cbfn, void *cbarg);
65a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatibfa_status_t bfa_port_disable(struct bfa_port_s *port,
66a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati			       bfa_port_endis_cbfn_t cbfn, void *cbarg);
67a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatiu32     bfa_port_meminfo(void);
68a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid	     bfa_port_mem_claim(struct bfa_port_s *port,
69a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				 u8 *dma_kva, u64 dma_pa);
70e353546e447feb838db2d1b23bac23cb90755993Krishna Gudipativoid	bfa_port_set_dportenabled(struct bfa_port_s *port,
71e353546e447feb838db2d1b23bac23cb90755993Krishna Gudipati				  bfa_boolean_t enabled);
72148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati
73148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati/*
74148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati * CEE declaration
75148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati */
76148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatitypedef void (*bfa_cee_get_attr_cbfn_t) (void *dev, bfa_status_t status);
77148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatitypedef void (*bfa_cee_get_stats_cbfn_t) (void *dev, bfa_status_t status);
78148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatitypedef void (*bfa_cee_reset_stats_cbfn_t) (void *dev, bfa_status_t status);
79148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati
80148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatistruct bfa_cee_cbfn_s {
81148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	bfa_cee_get_attr_cbfn_t		get_attr_cbfn;
82148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	void				*get_attr_cbarg;
83148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	bfa_cee_get_stats_cbfn_t	get_stats_cbfn;
84148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	void				*get_stats_cbarg;
85148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	bfa_cee_reset_stats_cbfn_t	reset_stats_cbfn;
86148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	void				*reset_stats_cbarg;
87148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati};
88148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati
89148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatistruct bfa_cee_s {
90148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	void *dev;
91148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	bfa_boolean_t		get_attr_pending;
92148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	bfa_boolean_t		get_stats_pending;
93148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	bfa_boolean_t		reset_stats_pending;
94148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	bfa_status_t		get_attr_status;
95148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	bfa_status_t		get_stats_status;
96148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	bfa_status_t		reset_stats_status;
97148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_cee_cbfn_s	cbfn;
98148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_ioc_notify_s	ioc_notify;
99148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_trc_mod_s	*trcmod;
100148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_cee_attr_s	*attr;
101148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_cee_stats_s	*stats;
102148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_dma_s	attr_dma;
103148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_dma_s	stats_dma;
104148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_ioc_s	*ioc;
105148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_mbox_cmd_s	get_cfg_mb;
106148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_mbox_cmd_s	get_stats_mb;
107148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_mbox_cmd_s	reset_stats_mb;
108148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_mem_dma_s	cee_dma;
109148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati};
110148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati
111148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati#define BFA_MEM_CEE_DMA(__bfa)	(&((__bfa)->modules.cee.cee_dma))
112148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati
113148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatiu32	bfa_cee_meminfo(void);
114148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipativoid	bfa_cee_mem_claim(struct bfa_cee_s *cee, u8 *dma_kva, u64 dma_pa);
115148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipativoid	bfa_cee_attach(struct bfa_cee_s *cee,
116148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati			struct bfa_ioc_s *ioc, void *dev);
117148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatibfa_status_t	bfa_cee_get_attr(struct bfa_cee_s *cee,
118148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati				struct bfa_cee_attr_s *attr,
119148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati				bfa_cee_get_attr_cbfn_t cbfn, void *cbarg);
120148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatibfa_status_t	bfa_cee_get_stats(struct bfa_cee_s *cee,
121148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati				struct bfa_cee_stats_s *stats,
122148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati				bfa_cee_get_stats_cbfn_t cbfn, void *cbarg);
123148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipatibfa_status_t	bfa_cee_reset_stats(struct bfa_cee_s *cee,
124148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati				bfa_cee_reset_stats_cbfn_t cbfn, void *cbarg);
125148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati
126a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#endif	/* __BFA_PORT_H__ */
127