James Smart | 92d7f7b | 2007-06-17 19:56:38 -0500 | [diff] [blame] | 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); |
James Smart | 549e55c | 2007-08-02 11:09:51 -0400 | [diff] [blame] | 91 | struct lpfc_vport **lpfc_create_vport_work_array(struct lpfc_hba *); |
| 92 | void lpfc_destroy_vport_work_array(struct lpfc_vport **); |
James Smart | 92d7f7b | 2007-06-17 19:56:38 -0500 | [diff] [blame] | 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 | |
| 115 | #endif /* H_LPFC_VPORT */ |