ath9k: remove unneeded calculation of minimal calibration power
[linux-2.6/next.git] / drivers / scsi / bfa / vfapi.c
blob391a4790bebd4e33f46129a3eb2aaa92689a013c
1 /*
2 * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
3 * All rights reserved
4 * www.brocade.com
6 * Linux driver for Brocade Fibre Channel Host Bus Adapter.
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License (GPL) Version 2 as
10 * published by the Free Software Foundation
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
18 /**
19 * vfapi.c Fabric module implementation.
22 #include "fcs_fabric.h"
23 #include "fcs_trcmod.h"
25 BFA_TRC_FILE(FCS, VFAPI);
27 /**
28 * fcs_vf_api virtual fabrics API
31 /**
32 * Enable VF mode.
34 * @param[in] fcs fcs module instance
35 * @param[in] vf_id default vf_id of port, FC_VF_ID_NULL
36 * to use standard default vf_id of 1.
38 * @retval BFA_STATUS_OK vf mode is enabled
39 * @retval BFA_STATUS_BUSY Port is active. Port must be disabled
40 * before VF mode can be enabled.
42 bfa_status_t
43 bfa_fcs_vf_mode_enable(struct bfa_fcs_s *fcs, u16 vf_id)
45 return BFA_STATUS_OK;
48 /**
49 * Disable VF mode.
51 * @param[in] fcs fcs module instance
53 * @retval BFA_STATUS_OK vf mode is disabled
54 * @retval BFA_STATUS_BUSY VFs are present and being used. All
55 * VFs must be deleted before disabling
56 * VF mode.
58 bfa_status_t
59 bfa_fcs_vf_mode_disable(struct bfa_fcs_s *fcs)
61 return BFA_STATUS_OK;
64 /**
65 * Create a new VF instance.
67 * A new VF is created using the given VF configuration. A VF is identified
68 * by VF id. No duplicate VF creation is allowed with the same VF id. Once
69 * a VF is created, VF is automatically started after link initialization
70 * and EVFP exchange is completed.
72 * param[in] vf - FCS vf data structure. Memory is
73 * allocated by caller (driver)
74 * param[in] fcs - FCS module
75 * param[in] vf_cfg - VF configuration
76 * param[in] vf_drv - Opaque handle back to the driver's
77 * virtual vf structure
79 * retval BFA_STATUS_OK VF creation is successful
80 * retval BFA_STATUS_FAILED VF creation failed
81 * retval BFA_STATUS_EEXIST A VF exists with the given vf_id
83 bfa_status_t
84 bfa_fcs_vf_create(bfa_fcs_vf_t *vf, struct bfa_fcs_s *fcs, u16 vf_id,
85 struct bfa_port_cfg_s *port_cfg, struct bfad_vf_s *vf_drv)
87 bfa_trc(fcs, vf_id);
88 return BFA_STATUS_OK;
91 /**
92 * Use this function to delete a BFA VF object. VF object should
93 * be stopped before this function call.
95 * param[in] vf - pointer to bfa_vf_t.
97 * retval BFA_STATUS_OK On vf deletion success
98 * retval BFA_STATUS_BUSY VF is not in a stopped state
99 * retval BFA_STATUS_INPROGRESS VF deletion in in progress
101 bfa_status_t
102 bfa_fcs_vf_delete(bfa_fcs_vf_t *vf)
104 bfa_trc(vf->fcs, vf->vf_id);
105 return BFA_STATUS_OK;
109 * Start participation in VF. This triggers login to the virtual fabric.
111 * param[in] vf - pointer to bfa_vf_t.
113 * return None
115 void
116 bfa_fcs_vf_start(bfa_fcs_vf_t *vf)
118 bfa_trc(vf->fcs, vf->vf_id);
122 * Logout with the virtual fabric.
124 * param[in] vf - pointer to bfa_vf_t.
126 * retval BFA_STATUS_OK On success.
127 * retval BFA_STATUS_INPROGRESS VF is being stopped.
129 bfa_status_t
130 bfa_fcs_vf_stop(bfa_fcs_vf_t *vf)
132 bfa_trc(vf->fcs, vf->vf_id);
133 return BFA_STATUS_OK;
137 * Returns attributes of the given VF.
139 * param[in] vf pointer to bfa_vf_t.
140 * param[out] vf_attr vf attributes returned
142 * return None
144 void
145 bfa_fcs_vf_get_attr(bfa_fcs_vf_t *vf, struct bfa_vf_attr_s *vf_attr)
147 bfa_trc(vf->fcs, vf->vf_id);
151 * Return statistics associated with the given vf.
153 * param[in] vf pointer to bfa_vf_t.
154 * param[out] vf_stats vf statistics returned
156 * @return None
158 void
159 bfa_fcs_vf_get_stats(bfa_fcs_vf_t *vf, struct bfa_vf_stats_s *vf_stats)
161 bfa_os_memcpy(vf_stats, &vf->stats, sizeof(struct bfa_vf_stats_s));
162 return;
165 void
167 * clear statistics associated with the given vf.
169 * param[in] vf pointer to bfa_vf_t.
171 * @return None
173 bfa_fcs_vf_clear_stats(bfa_fcs_vf_t *vf)
175 bfa_os_memset(&vf->stats, 0, sizeof(struct bfa_vf_stats_s));
176 return;
180 * Returns FCS vf structure for a given vf_id.
182 * param[in] vf_id - VF_ID
184 * return
185 * If lookup succeeds, retuns fcs vf object, otherwise returns NULL
187 bfa_fcs_vf_t *
188 bfa_fcs_vf_lookup(struct bfa_fcs_s *fcs, u16 vf_id)
190 bfa_trc(fcs, vf_id);
191 if (vf_id == FC_VF_ID_NULL)
192 return &fcs->fabric;
195 * @todo vf support
198 return NULL;
202 * Returns driver VF structure for a given FCS vf.
204 * param[in] vf - pointer to bfa_vf_t
206 * return Driver VF structure
208 struct bfad_vf_s *
209 bfa_fcs_vf_get_drv_vf(bfa_fcs_vf_t *vf)
211 bfa_assert(vf);
212 bfa_trc(vf->fcs, vf->vf_id);
213 return vf->vf_drv;
217 * Return the list of VFs configured.
219 * param[in] fcs fcs module instance
220 * param[out] vf_ids returned list of vf_ids
221 * param[in,out] nvfs in:size of vf_ids array,
222 * out:total elements present,
223 * actual elements returned is limited by the size
225 * return Driver VF structure
227 void
228 bfa_fcs_vf_list(struct bfa_fcs_s *fcs, u16 *vf_ids, int *nvfs)
230 bfa_trc(fcs, *nvfs);
234 * Return the list of all VFs visible from fabric.
236 * param[in] fcs fcs module instance
237 * param[out] vf_ids returned list of vf_ids
238 * param[in,out] nvfs in:size of vf_ids array,
239 * out:total elements present,
240 * actual elements returned is limited by the size
242 * return Driver VF structure
244 void
245 bfa_fcs_vf_list_all(struct bfa_fcs_s *fcs, u16 *vf_ids, int *nvfs)
247 bfa_trc(fcs, *nvfs);
251 * Return the list of local logical ports present in the given VF.
253 * param[in] vf vf for which logical ports are returned
254 * param[out] lpwwn returned logical port wwn list
255 * param[in,out] nlports in:size of lpwwn list;
256 * out:total elements present,
257 * actual elements returned is limited by the size
260 void
261 bfa_fcs_vf_get_ports(bfa_fcs_vf_t *vf, wwn_t lpwwn[], int *nlports)
263 struct list_head *qe;
264 struct bfa_fcs_vport_s *vport;
265 int i;
266 struct bfa_fcs_s *fcs;
268 if (vf == NULL || lpwwn == NULL || *nlports == 0)
269 return;
271 fcs = vf->fcs;
273 bfa_trc(fcs, vf->vf_id);
274 bfa_trc(fcs, (u32) *nlports);
276 i = 0;
277 lpwwn[i++] = vf->bport.port_cfg.pwwn;
279 list_for_each(qe, &vf->vport_q) {
280 if (i >= *nlports)
281 break;
283 vport = (struct bfa_fcs_vport_s *) qe;
284 lpwwn[i++] = vport->lport.port_cfg.pwwn;
287 bfa_trc(fcs, i);
288 *nlports = i;
289 return;