]>
Commit | Line | Data |
---|---|---|
895427bd JS |
1 | /******************************************************************* |
2 | * This file is part of the Emulex Linux Device Driver for * | |
3 | * Fibre Channel Host Bus Adapters. * | |
4 | * Copyright (C) 2004-2016 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 | #define LPFC_NVME_MIN_SEGS 16 | |
23 | #define LPFC_NVME_DEFAULT_SEGS 66 /* 256K IOs - 64 + 2 */ | |
24 | #define LPFC_NVME_MAX_SEGS 510 | |
25 | #define LPFC_NVMET_MIN_POSTBUF 16 | |
26 | #define LPFC_NVMET_DEFAULT_POSTBUF 1024 | |
27 | #define LPFC_NVMET_MAX_POSTBUF 4096 | |
28 | #define LPFC_NVME_WQSIZE 256 | |
29 | ||
30 | #define LPFC_NVME_ERSP_LEN 0x20 | |
31 | ||
01649561 JS |
32 | struct lpfc_nvme_qhandle { |
33 | uint32_t index; /* WQ index to use */ | |
34 | uint32_t qidx; /* queue index passed to create */ | |
35 | uint32_t cpu_id; /* current cpu id at time of create */ | |
36 | }; | |
37 | ||
895427bd JS |
38 | /* Declare nvme-based local and remote port definitions. */ |
39 | struct lpfc_nvme_lport { | |
40 | struct lpfc_vport *vport; | |
41 | struct list_head rport_list; | |
42 | struct completion lport_unreg_done; | |
43 | /* Add sttats counters here */ | |
44 | }; | |
45 | ||
46 | struct lpfc_nvme_rport { | |
47 | struct list_head list; | |
48 | struct lpfc_nvme_lport *lport; | |
49 | struct nvme_fc_remote_port *remoteport; | |
50 | struct lpfc_nodelist *ndlp; | |
51 | struct completion rport_unreg_done; | |
52 | }; | |
53 | ||
54 | struct lpfc_nvme_buf { | |
55 | struct list_head list; | |
56 | struct nvmefc_fcp_req *nvmeCmd; | |
57 | struct lpfc_nvme_rport *nrport; | |
58 | ||
59 | uint32_t timeout; | |
60 | ||
61 | uint16_t flags; /* TBD convert exch_busy to flags */ | |
62 | #define LPFC_SBUF_XBUSY 0x1 /* SLI4 hba reported XB on WCQE cmpl */ | |
63 | uint16_t exch_busy; /* SLI4 hba reported XB on complete WCQE */ | |
64 | uint16_t status; /* From IOCB Word 7- ulpStatus */ | |
65 | uint16_t cpu; | |
66 | uint16_t qidx; | |
67 | uint16_t sqid; | |
68 | uint32_t result; /* From IOCB Word 4. */ | |
69 | ||
70 | uint32_t seg_cnt; /* Number of scatter-gather segments returned by | |
71 | * dma_map_sg. The driver needs this for calls | |
72 | * to dma_unmap_sg. | |
73 | */ | |
74 | dma_addr_t nonsg_phys; /* Non scatter-gather physical address. */ | |
75 | ||
76 | /* | |
77 | * data and dma_handle are the kernel virtual and bus address of the | |
78 | * dma-able buffer containing the fcp_cmd, fcp_rsp and a scatter | |
79 | * gather bde list that supports the sg_tablesize value. | |
80 | */ | |
81 | void *data; | |
82 | dma_addr_t dma_handle; | |
83 | ||
84 | struct sli4_sge *nvme_sgl; | |
85 | dma_addr_t dma_phys_sgl; | |
86 | ||
87 | /* cur_iocbq has phys of the dma-able buffer. | |
88 | * Iotag is in here | |
89 | */ | |
90 | struct lpfc_iocbq cur_iocbq; | |
91 | ||
92 | wait_queue_head_t *waitq; | |
93 | unsigned long start_time; | |
94 | }; |