Commit | Line | Data |
---|---|---|
92d7f7b0 JS |
1 | /******************************************************************* |
2 | * This file is part of the Emulex Linux Device Driver for * | |
3 | * Fibre Channel Host Bus Adapters. * | |
4 | * Copyright (C) 2004-2006 Emulex. All rights reserved. * | |
5 | * EMULEX and SLI are trademarks of Emulex. * | |
6 | * www.emulex.com * | |
7 | * Portions Copyright (C) 2004-2005 Christoph Hellwig * | |
8 | * * | |
9 | * This program is free software; you can redistribute it and/or * | |
10 | * modify it under the terms of version 2 of the GNU General * | |
11 | * Public License as published by the Free Software Foundation. * | |
12 | * This program is distributed in the hope that it will be useful. * | |
13 | * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * | |
14 | * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * | |
15 | * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE * | |
16 | * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD * | |
17 | * TO BE LEGALLY INVALID. See the GNU General Public License for * | |
18 | * more details, a copy of which can be found in the file COPYING * | |
19 | * included with this package. * | |
20 | *******************************************************************/ | |
21 | ||
22 | #ifndef _H_LPFC_VPORT | |
23 | #define _H_LPFC_VPORT | |
24 | ||
25 | /* API version values (each will be an individual bit) */ | |
26 | #define VPORT_API_VERSION_1 0x01 | |
27 | ||
28 | /* Values returned via lpfc_vport_getinfo() */ | |
29 | struct vport_info { | |
30 | ||
31 | uint32_t api_versions; | |
32 | uint8_t linktype; | |
33 | #define VPORT_TYPE_PHYSICAL 0 | |
34 | #define VPORT_TYPE_VIRTUAL 1 | |
35 | ||
36 | uint8_t state; | |
37 | #define VPORT_STATE_OFFLINE 0 | |
38 | #define VPORT_STATE_ACTIVE 1 | |
39 | #define VPORT_STATE_FAILED 2 | |
40 | ||
41 | uint8_t fail_reason; | |
42 | uint8_t prev_fail_reason; | |
43 | #define VPORT_FAIL_UNKNOWN 0 | |
44 | #define VPORT_FAIL_LINKDOWN 1 | |
45 | #define VPORT_FAIL_FAB_UNSUPPORTED 2 | |
46 | #define VPORT_FAIL_FAB_NORESOURCES 3 | |
47 | #define VPORT_FAIL_FAB_LOGOUT 4 | |
48 | #define VPORT_FAIL_ADAP_NORESOURCES 5 | |
49 | ||
50 | uint8_t node_name[8]; /* WWNN */ | |
51 | uint8_t port_name[8]; /* WWPN */ | |
52 | ||
53 | struct Scsi_Host *shost; | |
54 | ||
55 | /* Following values are valid only on physical links */ | |
56 | uint32_t vports_max; | |
57 | uint32_t vports_inuse; | |
58 | uint32_t rpi_max; | |
59 | uint32_t rpi_inuse; | |
60 | #define VPORT_CNT_INVALID 0xFFFFFFFF | |
61 | }; | |
62 | ||
63 | /* data used in link creation */ | |
64 | struct vport_data { | |
65 | uint32_t api_version; | |
66 | ||
67 | uint32_t options; | |
68 | #define VPORT_OPT_AUTORETRY 0x01 | |
69 | ||
70 | uint8_t node_name[8]; /* WWNN */ | |
71 | uint8_t port_name[8]; /* WWPN */ | |
72 | ||
73 | /* | |
74 | * Upon successful creation, vport_shost will point to the new Scsi_Host | |
75 | * structure for the new virtual link. | |
76 | */ | |
77 | struct Scsi_Host *vport_shost; | |
78 | }; | |
79 | ||
80 | /* API function return codes */ | |
81 | #define VPORT_OK 0 | |
82 | #define VPORT_ERROR -1 | |
83 | #define VPORT_INVAL -2 | |
84 | #define VPORT_NOMEM -3 | |
85 | #define VPORT_NORESOURCES -4 | |
86 | ||
87 | int lpfc_vport_create(struct fc_vport *, bool); | |
88 | int lpfc_vport_delete(struct fc_vport *); | |
89 | int lpfc_vport_getinfo(struct Scsi_Host *, struct vport_info *); | |
90 | int lpfc_vport_tgt_remove(struct Scsi_Host *, uint, uint); | |
549e55cd | 91 | struct lpfc_vport **lpfc_create_vport_work_array(struct lpfc_hba *); |
09372820 | 92 | void lpfc_destroy_vport_work_array(struct lpfc_hba *, struct lpfc_vport **); |
92d7f7b0 JS |
93 | |
94 | /* | |
95 | * queuecommand VPORT-specific return codes. Specified in the host byte code. | |
96 | * Returned when the virtual link has failed or is not active. | |
97 | */ | |
98 | #define DID_VPORT_ERROR 0x0f | |
99 | ||
100 | #define VPORT_INFO 0x1 | |
101 | #define VPORT_CREATE 0x2 | |
102 | #define VPORT_DELETE 0x4 | |
103 | ||
104 | struct vport_cmd_tag { | |
105 | uint32_t cmd; | |
106 | struct vport_data cdata; | |
107 | struct vport_info cinfo; | |
108 | void *vport; | |
109 | int vport_num; | |
110 | }; | |
111 | ||
112 | void lpfc_vport_set_state(struct lpfc_vport *vport, | |
113 | enum fc_vport_state new_state); | |
114 | ||
ea2151b4 JS |
115 | void lpfc_vport_reset_stat_data(struct lpfc_vport *); |
116 | void lpfc_alloc_bucket(struct lpfc_vport *); | |
117 | void lpfc_free_bucket(struct lpfc_vport *); | |
118 | ||
92d7f7b0 | 119 | #endif /* H_LPFC_VPORT */ |