diff options
Diffstat (limited to 'drivers/scsi/csiostor/csio_init.h')
-rw-r--r-- | drivers/scsi/csiostor/csio_init.h | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/drivers/scsi/csiostor/csio_init.h b/drivers/scsi/csiostor/csio_init.h new file mode 100644 index 000000000000..0838fd7ec9c7 --- /dev/null +++ b/drivers/scsi/csiostor/csio_init.h | |||
@@ -0,0 +1,158 @@ | |||
1 | /* | ||
2 | * This file is part of the Chelsio FCoE driver for Linux. | ||
3 | * | ||
4 | * Copyright (c) 2008-2012 Chelsio Communications, Inc. All rights reserved. | ||
5 | * | ||
6 | * This software is available to you under a choice of one of two | ||
7 | * licenses. You may choose to be licensed under the terms of the GNU | ||
8 | * General Public License (GPL) Version 2, available from the file | ||
9 | * COPYING in the main directory of this source tree, or the | ||
10 | * OpenIB.org BSD license below: | ||
11 | * | ||
12 | * Redistribution and use in source and binary forms, with or | ||
13 | * without modification, are permitted provided that the following | ||
14 | * conditions are met: | ||
15 | * | ||
16 | * - Redistributions of source code must retain the above | ||
17 | * copyright notice, this list of conditions and the following | ||
18 | * disclaimer. | ||
19 | * | ||
20 | * - Redistributions in binary form must reproduce the above | ||
21 | * copyright notice, this list of conditions and the following | ||
22 | * disclaimer in the documentation and/or other materials | ||
23 | * provided with the distribution. | ||
24 | * | ||
25 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
26 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
27 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
28 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | ||
29 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
30 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||
31 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
32 | * SOFTWARE. | ||
33 | */ | ||
34 | |||
35 | #ifndef __CSIO_INIT_H__ | ||
36 | #define __CSIO_INIT_H__ | ||
37 | |||
38 | #include <linux/pci.h> | ||
39 | #include <linux/if_ether.h> | ||
40 | #include <scsi/scsi.h> | ||
41 | #include <scsi/scsi_device.h> | ||
42 | #include <scsi/scsi_host.h> | ||
43 | #include <scsi/scsi_transport_fc.h> | ||
44 | |||
45 | #include "csio_scsi.h" | ||
46 | #include "csio_lnode.h" | ||
47 | #include "csio_rnode.h" | ||
48 | #include "csio_hw.h" | ||
49 | |||
50 | #define CSIO_DRV_AUTHOR "Chelsio Communications" | ||
51 | #define CSIO_DRV_LICENSE "Dual BSD/GPL" | ||
52 | #define CSIO_DRV_DESC "Chelsio FCoE driver" | ||
53 | #define CSIO_DRV_VERSION "1.0.0" | ||
54 | |||
55 | #define CSIO_DEVICE(devid, idx) \ | ||
56 | { PCI_VENDOR_ID_CHELSIO, (devid), PCI_ANY_ID, PCI_ANY_ID, 0, 0, (idx) } | ||
57 | |||
58 | #define CSIO_IS_T4_FPGA(_dev) (((_dev) == CSIO_DEVID_PE10K) ||\ | ||
59 | ((_dev) == CSIO_DEVID_PE10K_PF1)) | ||
60 | |||
61 | /* FCoE device IDs */ | ||
62 | #define CSIO_DEVID_PE10K 0xA000 | ||
63 | #define CSIO_DEVID_PE10K_PF1 0xA001 | ||
64 | #define CSIO_DEVID_T440DBG_FCOE 0x4600 | ||
65 | #define CSIO_DEVID_T420CR_FCOE 0x4601 | ||
66 | #define CSIO_DEVID_T422CR_FCOE 0x4602 | ||
67 | #define CSIO_DEVID_T440CR_FCOE 0x4603 | ||
68 | #define CSIO_DEVID_T420BCH_FCOE 0x4604 | ||
69 | #define CSIO_DEVID_T440BCH_FCOE 0x4605 | ||
70 | #define CSIO_DEVID_T440CH_FCOE 0x4606 | ||
71 | #define CSIO_DEVID_T420SO_FCOE 0x4607 | ||
72 | #define CSIO_DEVID_T420CX_FCOE 0x4608 | ||
73 | #define CSIO_DEVID_T420BT_FCOE 0x4609 | ||
74 | #define CSIO_DEVID_T404BT_FCOE 0x460A | ||
75 | #define CSIO_DEVID_B420_FCOE 0x460B | ||
76 | #define CSIO_DEVID_B404_FCOE 0x460C | ||
77 | #define CSIO_DEVID_T480CR_FCOE 0x460D | ||
78 | #define CSIO_DEVID_T440LPCR_FCOE 0x460E | ||
79 | |||
80 | extern struct fc_function_template csio_fc_transport_funcs; | ||
81 | extern struct fc_function_template csio_fc_transport_vport_funcs; | ||
82 | |||
83 | void csio_fchost_attr_init(struct csio_lnode *); | ||
84 | |||
85 | /* INTx handlers */ | ||
86 | void csio_scsi_intx_handler(struct csio_hw *, void *, uint32_t, | ||
87 | struct csio_fl_dma_buf *, void *); | ||
88 | |||
89 | void csio_fwevt_intx_handler(struct csio_hw *, void *, uint32_t, | ||
90 | struct csio_fl_dma_buf *, void *); | ||
91 | |||
92 | /* Common os lnode APIs */ | ||
93 | void csio_lnodes_block_request(struct csio_hw *); | ||
94 | void csio_lnodes_unblock_request(struct csio_hw *); | ||
95 | void csio_lnodes_block_by_port(struct csio_hw *, uint8_t); | ||
96 | void csio_lnodes_unblock_by_port(struct csio_hw *, uint8_t); | ||
97 | |||
98 | struct csio_lnode *csio_shost_init(struct csio_hw *, struct device *, bool, | ||
99 | struct csio_lnode *); | ||
100 | void csio_shost_exit(struct csio_lnode *); | ||
101 | void csio_lnodes_exit(struct csio_hw *, bool); | ||
102 | |||
103 | static inline struct Scsi_Host * | ||
104 | csio_ln_to_shost(struct csio_lnode *ln) | ||
105 | { | ||
106 | return container_of((void *)ln, struct Scsi_Host, hostdata[0]); | ||
107 | } | ||
108 | |||
109 | /* SCSI -- locking version of get/put ioreqs */ | ||
110 | static inline struct csio_ioreq * | ||
111 | csio_get_scsi_ioreq_lock(struct csio_hw *hw, struct csio_scsim *scsim) | ||
112 | { | ||
113 | struct csio_ioreq *ioreq; | ||
114 | unsigned long flags; | ||
115 | |||
116 | spin_lock_irqsave(&scsim->freelist_lock, flags); | ||
117 | ioreq = csio_get_scsi_ioreq(scsim); | ||
118 | spin_unlock_irqrestore(&scsim->freelist_lock, flags); | ||
119 | |||
120 | return ioreq; | ||
121 | } | ||
122 | |||
123 | static inline void | ||
124 | csio_put_scsi_ioreq_lock(struct csio_hw *hw, struct csio_scsim *scsim, | ||
125 | struct csio_ioreq *ioreq) | ||
126 | { | ||
127 | unsigned long flags; | ||
128 | |||
129 | spin_lock_irqsave(&scsim->freelist_lock, flags); | ||
130 | csio_put_scsi_ioreq(scsim, ioreq); | ||
131 | spin_unlock_irqrestore(&scsim->freelist_lock, flags); | ||
132 | } | ||
133 | |||
134 | /* Called in interrupt context */ | ||
135 | static inline void | ||
136 | csio_put_scsi_ioreq_list_lock(struct csio_hw *hw, struct csio_scsim *scsim, | ||
137 | struct list_head *reqlist, int n) | ||
138 | { | ||
139 | unsigned long flags; | ||
140 | |||
141 | spin_lock_irqsave(&scsim->freelist_lock, flags); | ||
142 | csio_put_scsi_ioreq_list(scsim, reqlist, n); | ||
143 | spin_unlock_irqrestore(&scsim->freelist_lock, flags); | ||
144 | } | ||
145 | |||
146 | /* Called in interrupt context */ | ||
147 | static inline void | ||
148 | csio_put_scsi_ddp_list_lock(struct csio_hw *hw, struct csio_scsim *scsim, | ||
149 | struct list_head *reqlist, int n) | ||
150 | { | ||
151 | unsigned long flags; | ||
152 | |||
153 | spin_lock_irqsave(&hw->lock, flags); | ||
154 | csio_put_scsi_ddp_list(scsim, reqlist, n); | ||
155 | spin_unlock_irqrestore(&hw->lock, flags); | ||
156 | } | ||
157 | |||
158 | #endif /* ifndef __CSIO_INIT_H__ */ | ||