diff options
Diffstat (limited to 'drivers/scsi/bfa/include')
102 files changed, 13857 insertions, 0 deletions
diff --git a/drivers/scsi/bfa/include/aen/bfa_aen.h b/drivers/scsi/bfa/include/aen/bfa_aen.h new file mode 100644 index 000000000000..da8cac093d3d --- /dev/null +++ b/drivers/scsi/bfa/include/aen/bfa_aen.h | |||
@@ -0,0 +1,92 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_AEN_H__ | ||
18 | #define __BFA_AEN_H__ | ||
19 | |||
20 | #include "defs/bfa_defs_aen.h" | ||
21 | |||
22 | #define BFA_AEN_MAX_ENTRY 512 | ||
23 | |||
24 | extern s32 bfa_aen_max_cfg_entry; | ||
25 | struct bfa_aen_s { | ||
26 | void *bfad; | ||
27 | s32 max_entry; | ||
28 | s32 write_index; | ||
29 | s32 read_index; | ||
30 | u32 bfad_num; | ||
31 | u32 seq_num; | ||
32 | void (*aen_cb_notify)(void *bfad); | ||
33 | void (*gettimeofday)(struct bfa_timeval_s *tv); | ||
34 | struct bfa_trc_mod_s *trcmod; | ||
35 | struct bfa_aen_entry_s list[BFA_AEN_MAX_ENTRY]; /* Must be the last */ | ||
36 | }; | ||
37 | |||
38 | |||
39 | /** | ||
40 | * Public APIs | ||
41 | */ | ||
42 | static inline void | ||
43 | bfa_aen_set_max_cfg_entry(int max_entry) | ||
44 | { | ||
45 | bfa_aen_max_cfg_entry = max_entry; | ||
46 | } | ||
47 | |||
48 | static inline s32 | ||
49 | bfa_aen_get_max_cfg_entry(void) | ||
50 | { | ||
51 | return bfa_aen_max_cfg_entry; | ||
52 | } | ||
53 | |||
54 | static inline s32 | ||
55 | bfa_aen_get_meminfo(void) | ||
56 | { | ||
57 | return (sizeof(struct bfa_aen_entry_s) * bfa_aen_get_max_cfg_entry()); | ||
58 | } | ||
59 | |||
60 | static inline s32 | ||
61 | bfa_aen_get_wi(struct bfa_aen_s *aen) | ||
62 | { | ||
63 | return aen->write_index; | ||
64 | } | ||
65 | |||
66 | static inline s32 | ||
67 | bfa_aen_get_ri(struct bfa_aen_s *aen) | ||
68 | { | ||
69 | return aen->read_index; | ||
70 | } | ||
71 | |||
72 | static inline s32 | ||
73 | bfa_aen_fetch_count(struct bfa_aen_s *aen, s32 read_index) | ||
74 | { | ||
75 | return ((aen->write_index + aen->max_entry) - read_index) | ||
76 | % aen->max_entry; | ||
77 | } | ||
78 | |||
79 | s32 bfa_aen_init(struct bfa_aen_s *aen, struct bfa_trc_mod_s *trcmod, | ||
80 | void *bfad, u32 inst_id, void (*aen_cb_notify)(void *), | ||
81 | void (*gettimeofday)(struct bfa_timeval_s *)); | ||
82 | |||
83 | s32 bfa_aen_post(struct bfa_aen_s *aen, enum bfa_aen_category aen_category, | ||
84 | int aen_type, union bfa_aen_data_u *aen_data); | ||
85 | |||
86 | s32 bfa_aen_fetch(struct bfa_aen_s *aen, struct bfa_aen_entry_s *aen_entry, | ||
87 | s32 entry_space, s32 rii, s32 *ri_arr, | ||
88 | s32 ri_arr_cnt); | ||
89 | |||
90 | s32 bfa_aen_get_inst(struct bfa_aen_s *aen); | ||
91 | |||
92 | #endif /* __BFA_AEN_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/aen/bfa_aen_adapter.h b/drivers/scsi/bfa/include/aen/bfa_aen_adapter.h new file mode 100644 index 000000000000..260d3ea1cab3 --- /dev/null +++ b/drivers/scsi/bfa/include/aen/bfa_aen_adapter.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* messages define for BFA_AEN_CAT_ADAPTER Module */ | ||
19 | #ifndef __bfa_aen_adapter_h__ | ||
20 | #define __bfa_aen_adapter_h__ | ||
21 | |||
22 | #include <cs/bfa_log.h> | ||
23 | #include <defs/bfa_defs_aen.h> | ||
24 | |||
25 | #define BFA_AEN_ADAPTER_ADD \ | ||
26 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_ADAPTER, BFA_ADAPTER_AEN_ADD) | ||
27 | #define BFA_AEN_ADAPTER_REMOVE \ | ||
28 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_ADAPTER, BFA_ADAPTER_AEN_REMOVE) | ||
29 | |||
30 | #endif | ||
31 | |||
diff --git a/drivers/scsi/bfa/include/aen/bfa_aen_audit.h b/drivers/scsi/bfa/include/aen/bfa_aen_audit.h new file mode 100644 index 000000000000..12cd7aab5d53 --- /dev/null +++ b/drivers/scsi/bfa/include/aen/bfa_aen_audit.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* messages define for BFA_AEN_CAT_AUDIT Module */ | ||
19 | #ifndef __bfa_aen_audit_h__ | ||
20 | #define __bfa_aen_audit_h__ | ||
21 | |||
22 | #include <cs/bfa_log.h> | ||
23 | #include <defs/bfa_defs_aen.h> | ||
24 | |||
25 | #define BFA_AEN_AUDIT_AUTH_ENABLE \ | ||
26 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_AUDIT, BFA_AUDIT_AEN_AUTH_ENABLE) | ||
27 | #define BFA_AEN_AUDIT_AUTH_DISABLE \ | ||
28 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_AUDIT, BFA_AUDIT_AEN_AUTH_DISABLE) | ||
29 | |||
30 | #endif | ||
31 | |||
diff --git a/drivers/scsi/bfa/include/aen/bfa_aen_ethport.h b/drivers/scsi/bfa/include/aen/bfa_aen_ethport.h new file mode 100644 index 000000000000..507d0b58d149 --- /dev/null +++ b/drivers/scsi/bfa/include/aen/bfa_aen_ethport.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* messages define for BFA_AEN_CAT_ETHPORT Module */ | ||
19 | #ifndef __bfa_aen_ethport_h__ | ||
20 | #define __bfa_aen_ethport_h__ | ||
21 | |||
22 | #include <cs/bfa_log.h> | ||
23 | #include <defs/bfa_defs_aen.h> | ||
24 | |||
25 | #define BFA_AEN_ETHPORT_LINKUP \ | ||
26 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_ETHPORT, BFA_ETHPORT_AEN_LINKUP) | ||
27 | #define BFA_AEN_ETHPORT_LINKDOWN \ | ||
28 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_ETHPORT, BFA_ETHPORT_AEN_LINKDOWN) | ||
29 | #define BFA_AEN_ETHPORT_ENABLE \ | ||
30 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_ETHPORT, BFA_ETHPORT_AEN_ENABLE) | ||
31 | #define BFA_AEN_ETHPORT_DISABLE \ | ||
32 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_ETHPORT, BFA_ETHPORT_AEN_DISABLE) | ||
33 | |||
34 | #endif | ||
35 | |||
diff --git a/drivers/scsi/bfa/include/aen/bfa_aen_ioc.h b/drivers/scsi/bfa/include/aen/bfa_aen_ioc.h new file mode 100644 index 000000000000..71378b446b69 --- /dev/null +++ b/drivers/scsi/bfa/include/aen/bfa_aen_ioc.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* messages define for BFA_AEN_CAT_IOC Module */ | ||
19 | #ifndef __bfa_aen_ioc_h__ | ||
20 | #define __bfa_aen_ioc_h__ | ||
21 | |||
22 | #include <cs/bfa_log.h> | ||
23 | #include <defs/bfa_defs_aen.h> | ||
24 | |||
25 | #define BFA_AEN_IOC_HBGOOD \ | ||
26 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_IOC, BFA_IOC_AEN_HBGOOD) | ||
27 | #define BFA_AEN_IOC_HBFAIL \ | ||
28 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_IOC, BFA_IOC_AEN_HBFAIL) | ||
29 | #define BFA_AEN_IOC_ENABLE \ | ||
30 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_IOC, BFA_IOC_AEN_ENABLE) | ||
31 | #define BFA_AEN_IOC_DISABLE \ | ||
32 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_IOC, BFA_IOC_AEN_DISABLE) | ||
33 | #define BFA_AEN_IOC_FWMISMATCH \ | ||
34 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_IOC, BFA_IOC_AEN_FWMISMATCH) | ||
35 | |||
36 | #endif | ||
37 | |||
diff --git a/drivers/scsi/bfa/include/aen/bfa_aen_itnim.h b/drivers/scsi/bfa/include/aen/bfa_aen_itnim.h new file mode 100644 index 000000000000..a7d8ddcfef99 --- /dev/null +++ b/drivers/scsi/bfa/include/aen/bfa_aen_itnim.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* messages define for BFA_AEN_CAT_ITNIM Module */ | ||
19 | #ifndef __bfa_aen_itnim_h__ | ||
20 | #define __bfa_aen_itnim_h__ | ||
21 | |||
22 | #include <cs/bfa_log.h> | ||
23 | #include <defs/bfa_defs_aen.h> | ||
24 | |||
25 | #define BFA_AEN_ITNIM_ONLINE \ | ||
26 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_ITNIM, BFA_ITNIM_AEN_ONLINE) | ||
27 | #define BFA_AEN_ITNIM_OFFLINE \ | ||
28 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_ITNIM, BFA_ITNIM_AEN_OFFLINE) | ||
29 | #define BFA_AEN_ITNIM_DISCONNECT \ | ||
30 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_ITNIM, BFA_ITNIM_AEN_DISCONNECT) | ||
31 | |||
32 | #endif | ||
33 | |||
diff --git a/drivers/scsi/bfa/include/aen/bfa_aen_lport.h b/drivers/scsi/bfa/include/aen/bfa_aen_lport.h new file mode 100644 index 000000000000..5a8ebb65193f --- /dev/null +++ b/drivers/scsi/bfa/include/aen/bfa_aen_lport.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* messages define for BFA_AEN_CAT_LPORT Module */ | ||
19 | #ifndef __bfa_aen_lport_h__ | ||
20 | #define __bfa_aen_lport_h__ | ||
21 | |||
22 | #include <cs/bfa_log.h> | ||
23 | #include <defs/bfa_defs_aen.h> | ||
24 | |||
25 | #define BFA_AEN_LPORT_NEW \ | ||
26 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_NEW) | ||
27 | #define BFA_AEN_LPORT_DELETE \ | ||
28 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_DELETE) | ||
29 | #define BFA_AEN_LPORT_ONLINE \ | ||
30 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_ONLINE) | ||
31 | #define BFA_AEN_LPORT_OFFLINE \ | ||
32 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_OFFLINE) | ||
33 | #define BFA_AEN_LPORT_DISCONNECT \ | ||
34 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_DISCONNECT) | ||
35 | #define BFA_AEN_LPORT_NEW_PROP \ | ||
36 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_NEW_PROP) | ||
37 | #define BFA_AEN_LPORT_DELETE_PROP \ | ||
38 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_DELETE_PROP) | ||
39 | #define BFA_AEN_LPORT_NEW_STANDARD \ | ||
40 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_NEW_STANDARD) | ||
41 | #define BFA_AEN_LPORT_DELETE_STANDARD \ | ||
42 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_DELETE_STANDARD) | ||
43 | #define BFA_AEN_LPORT_NPIV_DUP_WWN \ | ||
44 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_NPIV_DUP_WWN) | ||
45 | #define BFA_AEN_LPORT_NPIV_FABRIC_MAX \ | ||
46 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_NPIV_FABRIC_MAX) | ||
47 | #define BFA_AEN_LPORT_NPIV_UNKNOWN \ | ||
48 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_LPORT, BFA_LPORT_AEN_NPIV_UNKNOWN) | ||
49 | |||
50 | #endif | ||
51 | |||
diff --git a/drivers/scsi/bfa/include/aen/bfa_aen_port.h b/drivers/scsi/bfa/include/aen/bfa_aen_port.h new file mode 100644 index 000000000000..9add905a622d --- /dev/null +++ b/drivers/scsi/bfa/include/aen/bfa_aen_port.h | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* messages define for BFA_AEN_CAT_PORT Module */ | ||
19 | #ifndef __bfa_aen_port_h__ | ||
20 | #define __bfa_aen_port_h__ | ||
21 | |||
22 | #include <cs/bfa_log.h> | ||
23 | #include <defs/bfa_defs_aen.h> | ||
24 | |||
25 | #define BFA_AEN_PORT_ONLINE \ | ||
26 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_ONLINE) | ||
27 | #define BFA_AEN_PORT_OFFLINE \ | ||
28 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_OFFLINE) | ||
29 | #define BFA_AEN_PORT_RLIR \ | ||
30 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_RLIR) | ||
31 | #define BFA_AEN_PORT_SFP_INSERT \ | ||
32 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_SFP_INSERT) | ||
33 | #define BFA_AEN_PORT_SFP_REMOVE \ | ||
34 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_SFP_REMOVE) | ||
35 | #define BFA_AEN_PORT_SFP_POM \ | ||
36 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_SFP_POM) | ||
37 | #define BFA_AEN_PORT_ENABLE \ | ||
38 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_ENABLE) | ||
39 | #define BFA_AEN_PORT_DISABLE \ | ||
40 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_DISABLE) | ||
41 | #define BFA_AEN_PORT_AUTH_ON \ | ||
42 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_AUTH_ON) | ||
43 | #define BFA_AEN_PORT_AUTH_OFF \ | ||
44 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_AUTH_OFF) | ||
45 | #define BFA_AEN_PORT_DISCONNECT \ | ||
46 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_DISCONNECT) | ||
47 | #define BFA_AEN_PORT_QOS_NEG \ | ||
48 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_QOS_NEG) | ||
49 | #define BFA_AEN_PORT_FABRIC_NAME_CHANGE \ | ||
50 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_FABRIC_NAME_CHANGE) | ||
51 | #define BFA_AEN_PORT_SFP_ACCESS_ERROR \ | ||
52 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_SFP_ACCESS_ERROR) | ||
53 | #define BFA_AEN_PORT_SFP_UNSUPPORT \ | ||
54 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_PORT, BFA_PORT_AEN_SFP_UNSUPPORT) | ||
55 | |||
56 | #endif | ||
57 | |||
diff --git a/drivers/scsi/bfa/include/aen/bfa_aen_rport.h b/drivers/scsi/bfa/include/aen/bfa_aen_rport.h new file mode 100644 index 000000000000..7e4be1fd5e15 --- /dev/null +++ b/drivers/scsi/bfa/include/aen/bfa_aen_rport.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* messages define for BFA_AEN_CAT_RPORT Module */ | ||
19 | #ifndef __bfa_aen_rport_h__ | ||
20 | #define __bfa_aen_rport_h__ | ||
21 | |||
22 | #include <cs/bfa_log.h> | ||
23 | #include <defs/bfa_defs_aen.h> | ||
24 | |||
25 | #define BFA_AEN_RPORT_ONLINE \ | ||
26 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_RPORT, BFA_RPORT_AEN_ONLINE) | ||
27 | #define BFA_AEN_RPORT_OFFLINE \ | ||
28 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_RPORT, BFA_RPORT_AEN_OFFLINE) | ||
29 | #define BFA_AEN_RPORT_DISCONNECT \ | ||
30 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_RPORT, BFA_RPORT_AEN_DISCONNECT) | ||
31 | #define BFA_AEN_RPORT_QOS_PRIO \ | ||
32 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_RPORT, BFA_RPORT_AEN_QOS_PRIO) | ||
33 | #define BFA_AEN_RPORT_QOS_FLOWID \ | ||
34 | BFA_LOG_CREATE_ID(BFA_AEN_CAT_RPORT, BFA_RPORT_AEN_QOS_FLOWID) | ||
35 | |||
36 | #endif | ||
37 | |||
diff --git a/drivers/scsi/bfa/include/bfa.h b/drivers/scsi/bfa/include/bfa.h new file mode 100644 index 000000000000..64c1412c5703 --- /dev/null +++ b/drivers/scsi/bfa/include/bfa.h | |||
@@ -0,0 +1,177 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_H__ | ||
18 | #define __BFA_H__ | ||
19 | |||
20 | #include <bfa_os_inc.h> | ||
21 | #include <cs/bfa_debug.h> | ||
22 | #include <cs/bfa_q.h> | ||
23 | #include <cs/bfa_trc.h> | ||
24 | #include <cs/bfa_log.h> | ||
25 | #include <cs/bfa_plog.h> | ||
26 | #include <defs/bfa_defs_status.h> | ||
27 | #include <defs/bfa_defs_ioc.h> | ||
28 | #include <defs/bfa_defs_iocfc.h> | ||
29 | #include <aen/bfa_aen.h> | ||
30 | #include <bfi/bfi.h> | ||
31 | |||
32 | struct bfa_s; | ||
33 | #include <bfa_intr_priv.h> | ||
34 | |||
35 | struct bfa_pcidev_s; | ||
36 | |||
37 | /** | ||
38 | * PCI devices supported by the current BFA | ||
39 | */ | ||
40 | struct bfa_pciid_s { | ||
41 | u16 device_id; | ||
42 | u16 vendor_id; | ||
43 | }; | ||
44 | |||
45 | extern char bfa_version[]; | ||
46 | |||
47 | /** | ||
48 | * BFA Power Mgmt Commands | ||
49 | */ | ||
50 | enum bfa_pm_cmd { | ||
51 | BFA_PM_CTL_D0 = 0, | ||
52 | BFA_PM_CTL_D1 = 1, | ||
53 | BFA_PM_CTL_D2 = 2, | ||
54 | BFA_PM_CTL_D3 = 3, | ||
55 | }; | ||
56 | |||
57 | /** | ||
58 | * BFA memory resources | ||
59 | */ | ||
60 | enum bfa_mem_type { | ||
61 | BFA_MEM_TYPE_KVA = 1, /*! Kernel Virtual Memory *(non-dma-able) */ | ||
62 | BFA_MEM_TYPE_DMA = 2, /*! DMA-able memory */ | ||
63 | BFA_MEM_TYPE_MAX = BFA_MEM_TYPE_DMA, | ||
64 | }; | ||
65 | |||
66 | struct bfa_mem_elem_s { | ||
67 | enum bfa_mem_type mem_type; /* see enum bfa_mem_type */ | ||
68 | u32 mem_len; /* Total Length in Bytes */ | ||
69 | u8 *kva; /* kernel virtual address */ | ||
70 | u64 dma; /* dma address if DMA memory */ | ||
71 | u8 *kva_curp; /* kva allocation cursor */ | ||
72 | u64 dma_curp; /* dma allocation cursor */ | ||
73 | }; | ||
74 | |||
75 | struct bfa_meminfo_s { | ||
76 | struct bfa_mem_elem_s meminfo[BFA_MEM_TYPE_MAX]; | ||
77 | }; | ||
78 | #define bfa_meminfo_kva(_m) \ | ||
79 | (_m)->meminfo[BFA_MEM_TYPE_KVA - 1].kva_curp | ||
80 | #define bfa_meminfo_dma_virt(_m) \ | ||
81 | (_m)->meminfo[BFA_MEM_TYPE_DMA - 1].kva_curp | ||
82 | #define bfa_meminfo_dma_phys(_m) \ | ||
83 | (_m)->meminfo[BFA_MEM_TYPE_DMA - 1].dma_curp | ||
84 | |||
85 | /** | ||
86 | * Generic Scatter Gather Element used by driver | ||
87 | */ | ||
88 | struct bfa_sge_s { | ||
89 | u32 sg_len; | ||
90 | void *sg_addr; | ||
91 | }; | ||
92 | |||
93 | #define bfa_sge_to_be(__sge) do { \ | ||
94 | ((u32 *)(__sge))[0] = bfa_os_htonl(((u32 *)(__sge))[0]); \ | ||
95 | ((u32 *)(__sge))[1] = bfa_os_htonl(((u32 *)(__sge))[1]); \ | ||
96 | ((u32 *)(__sge))[2] = bfa_os_htonl(((u32 *)(__sge))[2]); \ | ||
97 | } while (0) | ||
98 | |||
99 | |||
100 | /* | ||
101 | * bfa stats interfaces | ||
102 | */ | ||
103 | #define bfa_stats(_mod, _stats) (_mod)->stats._stats ++ | ||
104 | |||
105 | #define bfa_ioc_get_stats(__bfa, __ioc_stats) \ | ||
106 | bfa_ioc_fetch_stats(&(__bfa)->ioc, __ioc_stats) | ||
107 | #define bfa_ioc_clear_stats(__bfa) \ | ||
108 | bfa_ioc_clr_stats(&(__bfa)->ioc) | ||
109 | |||
110 | /* | ||
111 | * bfa API functions | ||
112 | */ | ||
113 | void bfa_get_pciids(struct bfa_pciid_s **pciids, int *npciids); | ||
114 | void bfa_cfg_get_default(struct bfa_iocfc_cfg_s *cfg); | ||
115 | void bfa_cfg_get_min(struct bfa_iocfc_cfg_s *cfg); | ||
116 | void bfa_cfg_get_meminfo(struct bfa_iocfc_cfg_s *cfg, | ||
117 | struct bfa_meminfo_s *meminfo); | ||
118 | void bfa_attach(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg, | ||
119 | struct bfa_meminfo_s *meminfo, | ||
120 | struct bfa_pcidev_s *pcidev); | ||
121 | void bfa_init_trc(struct bfa_s *bfa, struct bfa_trc_mod_s *trcmod); | ||
122 | void bfa_init_log(struct bfa_s *bfa, struct bfa_log_mod_s *logmod); | ||
123 | void bfa_init_aen(struct bfa_s *bfa, struct bfa_aen_s *aen); | ||
124 | void bfa_init_plog(struct bfa_s *bfa, struct bfa_plog_s *plog); | ||
125 | void bfa_detach(struct bfa_s *bfa); | ||
126 | void bfa_init(struct bfa_s *bfa); | ||
127 | void bfa_start(struct bfa_s *bfa); | ||
128 | void bfa_stop(struct bfa_s *bfa); | ||
129 | void bfa_attach_fcs(struct bfa_s *bfa); | ||
130 | void bfa_cb_init(void *bfad, bfa_status_t status); | ||
131 | void bfa_cb_stop(void *bfad, bfa_status_t status); | ||
132 | void bfa_cb_updateq(void *bfad, bfa_status_t status); | ||
133 | |||
134 | bfa_boolean_t bfa_intx(struct bfa_s *bfa); | ||
135 | void bfa_isr_enable(struct bfa_s *bfa); | ||
136 | void bfa_isr_disable(struct bfa_s *bfa); | ||
137 | void bfa_msix_getvecs(struct bfa_s *bfa, u32 *msix_vecs_bmap, | ||
138 | u32 *num_vecs, u32 *max_vec_bit); | ||
139 | #define bfa_msix(__bfa, __vec) (__bfa)->msix.handler[__vec](__bfa, __vec) | ||
140 | |||
141 | void bfa_comp_deq(struct bfa_s *bfa, struct list_head *comp_q); | ||
142 | void bfa_comp_process(struct bfa_s *bfa, struct list_head *comp_q); | ||
143 | void bfa_comp_free(struct bfa_s *bfa, struct list_head *comp_q); | ||
144 | |||
145 | typedef void (*bfa_cb_ioc_t) (void *cbarg, enum bfa_status status); | ||
146 | void bfa_iocfc_get_attr(struct bfa_s *bfa, struct bfa_iocfc_attr_s *attr); | ||
147 | bfa_status_t bfa_iocfc_get_stats(struct bfa_s *bfa, | ||
148 | struct bfa_iocfc_stats_s *stats, | ||
149 | bfa_cb_ioc_t cbfn, void *cbarg); | ||
150 | bfa_status_t bfa_iocfc_clear_stats(struct bfa_s *bfa, | ||
151 | bfa_cb_ioc_t cbfn, void *cbarg); | ||
152 | void bfa_get_attr(struct bfa_s *bfa, struct bfa_ioc_attr_s *ioc_attr); | ||
153 | |||
154 | void bfa_adapter_get_attr(struct bfa_s *bfa, | ||
155 | struct bfa_adapter_attr_s *ad_attr); | ||
156 | u64 bfa_adapter_get_id(struct bfa_s *bfa); | ||
157 | |||
158 | bfa_status_t bfa_iocfc_israttr_set(struct bfa_s *bfa, | ||
159 | struct bfa_iocfc_intr_attr_s *attr); | ||
160 | |||
161 | void bfa_iocfc_enable(struct bfa_s *bfa); | ||
162 | void bfa_iocfc_disable(struct bfa_s *bfa); | ||
163 | void bfa_ioc_auto_recover(bfa_boolean_t auto_recover); | ||
164 | void bfa_cb_ioc_disable(void *bfad); | ||
165 | void bfa_timer_tick(struct bfa_s *bfa); | ||
166 | #define bfa_timer_start(_bfa, _timer, _timercb, _arg, _timeout) \ | ||
167 | bfa_timer_begin(&(_bfa)->timer_mod, _timer, _timercb, _arg, _timeout) | ||
168 | |||
169 | /* | ||
170 | * BFA debug API functions | ||
171 | */ | ||
172 | bfa_status_t bfa_debug_fwtrc(struct bfa_s *bfa, void *trcdata, int *trclen); | ||
173 | bfa_status_t bfa_debug_fwsave(struct bfa_s *bfa, void *trcdata, int *trclen); | ||
174 | |||
175 | #include "bfa_priv.h" | ||
176 | |||
177 | #endif /* __BFA_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/bfa_fcpim.h b/drivers/scsi/bfa/include/bfa_fcpim.h new file mode 100644 index 000000000000..04789795fa53 --- /dev/null +++ b/drivers/scsi/bfa/include/bfa_fcpim.h | |||
@@ -0,0 +1,159 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_FCPIM_H__ | ||
19 | #define __BFA_FCPIM_H__ | ||
20 | |||
21 | #include <bfa.h> | ||
22 | #include <bfa_svc.h> | ||
23 | #include <bfi/bfi_fcpim.h> | ||
24 | #include <defs/bfa_defs_fcpim.h> | ||
25 | |||
26 | /* | ||
27 | * forward declarations | ||
28 | */ | ||
29 | struct bfa_itnim_s; | ||
30 | struct bfa_ioim_s; | ||
31 | struct bfa_tskim_s; | ||
32 | struct bfad_ioim_s; | ||
33 | struct bfad_tskim_s; | ||
34 | |||
35 | /* | ||
36 | * bfa fcpim module API functions | ||
37 | */ | ||
38 | void bfa_fcpim_path_tov_set(struct bfa_s *bfa, u16 path_tov); | ||
39 | u16 bfa_fcpim_path_tov_get(struct bfa_s *bfa); | ||
40 | void bfa_fcpim_qdepth_set(struct bfa_s *bfa, u16 q_depth); | ||
41 | u16 bfa_fcpim_qdepth_get(struct bfa_s *bfa); | ||
42 | bfa_status_t bfa_fcpim_get_modstats(struct bfa_s *bfa, | ||
43 | struct bfa_fcpim_stats_s *modstats); | ||
44 | bfa_status_t bfa_fcpim_clr_modstats(struct bfa_s *bfa); | ||
45 | |||
46 | /* | ||
47 | * bfa itnim API functions | ||
48 | */ | ||
49 | struct bfa_itnim_s *bfa_itnim_create(struct bfa_s *bfa, | ||
50 | struct bfa_rport_s *rport, void *itnim); | ||
51 | void bfa_itnim_delete(struct bfa_itnim_s *itnim); | ||
52 | void bfa_itnim_online(struct bfa_itnim_s *itnim, | ||
53 | bfa_boolean_t seq_rec); | ||
54 | void bfa_itnim_offline(struct bfa_itnim_s *itnim); | ||
55 | void bfa_itnim_get_stats(struct bfa_itnim_s *itnim, | ||
56 | struct bfa_itnim_hal_stats_s *stats); | ||
57 | void bfa_itnim_clear_stats(struct bfa_itnim_s *itnim); | ||
58 | |||
59 | |||
60 | /** | ||
61 | * BFA completion callback for bfa_itnim_online(). | ||
62 | * | ||
63 | * @param[in] itnim FCS or driver itnim instance | ||
64 | * | ||
65 | * return None | ||
66 | */ | ||
67 | void bfa_cb_itnim_online(void *itnim); | ||
68 | |||
69 | /** | ||
70 | * BFA completion callback for bfa_itnim_offline(). | ||
71 | * | ||
72 | * @param[in] itnim FCS or driver itnim instance | ||
73 | * | ||
74 | * return None | ||
75 | */ | ||
76 | void bfa_cb_itnim_offline(void *itnim); | ||
77 | void bfa_cb_itnim_tov_begin(void *itnim); | ||
78 | void bfa_cb_itnim_tov(void *itnim); | ||
79 | |||
80 | /** | ||
81 | * BFA notification to FCS/driver for second level error recovery. | ||
82 | * | ||
83 | * Atleast one I/O request has timedout and target is unresponsive to | ||
84 | * repeated abort requests. Second level error recovery should be initiated | ||
85 | * by starting implicit logout and recovery procedures. | ||
86 | * | ||
87 | * @param[in] itnim FCS or driver itnim instance | ||
88 | * | ||
89 | * return None | ||
90 | */ | ||
91 | void bfa_cb_itnim_sler(void *itnim); | ||
92 | |||
93 | /* | ||
94 | * bfa ioim API functions | ||
95 | */ | ||
96 | struct bfa_ioim_s *bfa_ioim_alloc(struct bfa_s *bfa, | ||
97 | struct bfad_ioim_s *dio, | ||
98 | struct bfa_itnim_s *itnim, | ||
99 | u16 nsgles); | ||
100 | |||
101 | void bfa_ioim_free(struct bfa_ioim_s *ioim); | ||
102 | void bfa_ioim_start(struct bfa_ioim_s *ioim); | ||
103 | void bfa_ioim_abort(struct bfa_ioim_s *ioim); | ||
104 | void bfa_ioim_delayed_comp(struct bfa_ioim_s *ioim, | ||
105 | bfa_boolean_t iotov); | ||
106 | |||
107 | |||
108 | /** | ||
109 | * I/O completion notification. | ||
110 | * | ||
111 | * @param[in] dio driver IO structure | ||
112 | * @param[in] io_status IO completion status | ||
113 | * @param[in] scsi_status SCSI status returned by target | ||
114 | * @param[in] sns_len SCSI sense length, 0 if none | ||
115 | * @param[in] sns_info SCSI sense data, if any | ||
116 | * @param[in] residue Residual length | ||
117 | * | ||
118 | * @return None | ||
119 | */ | ||
120 | void bfa_cb_ioim_done(void *bfad, struct bfad_ioim_s *dio, | ||
121 | enum bfi_ioim_status io_status, | ||
122 | u8 scsi_status, int sns_len, | ||
123 | u8 *sns_info, s32 residue); | ||
124 | |||
125 | /** | ||
126 | * I/O good completion notification. | ||
127 | * | ||
128 | * @param[in] dio driver IO structure | ||
129 | * | ||
130 | * @return None | ||
131 | */ | ||
132 | void bfa_cb_ioim_good_comp(void *bfad, struct bfad_ioim_s *dio); | ||
133 | |||
134 | /** | ||
135 | * I/O abort completion notification | ||
136 | * | ||
137 | * @param[in] dio driver IO that was aborted | ||
138 | * | ||
139 | * @return None | ||
140 | */ | ||
141 | void bfa_cb_ioim_abort(void *bfad, struct bfad_ioim_s *dio); | ||
142 | void bfa_cb_ioim_resfree(void *hcb_bfad); | ||
143 | |||
144 | void bfa_cb_ioim_resfree(void *hcb_bfad); | ||
145 | |||
146 | /* | ||
147 | * bfa tskim API functions | ||
148 | */ | ||
149 | struct bfa_tskim_s *bfa_tskim_alloc(struct bfa_s *bfa, | ||
150 | struct bfad_tskim_s *dtsk); | ||
151 | void bfa_tskim_free(struct bfa_tskim_s *tskim); | ||
152 | void bfa_tskim_start(struct bfa_tskim_s *tskim, | ||
153 | struct bfa_itnim_s *itnim, lun_t lun, | ||
154 | enum fcp_tm_cmnd tm, u8 t_secs); | ||
155 | void bfa_cb_tskim_done(void *bfad, struct bfad_tskim_s *dtsk, | ||
156 | enum bfi_tskim_status tsk_status); | ||
157 | |||
158 | #endif /* __BFA_FCPIM_H__ */ | ||
159 | |||
diff --git a/drivers/scsi/bfa/include/bfa_fcptm.h b/drivers/scsi/bfa/include/bfa_fcptm.h new file mode 100644 index 000000000000..5f5ffe0bb1bb --- /dev/null +++ b/drivers/scsi/bfa/include/bfa_fcptm.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_FCPTM_H__ | ||
19 | #define __BFA_FCPTM_H__ | ||
20 | |||
21 | #include <bfa.h> | ||
22 | #include <bfa_svc.h> | ||
23 | #include <bfi/bfi_fcptm.h> | ||
24 | |||
25 | /* | ||
26 | * forward declarations | ||
27 | */ | ||
28 | struct bfa_tin_s; | ||
29 | struct bfa_iotm_s; | ||
30 | struct bfa_tsktm_s; | ||
31 | |||
32 | /* | ||
33 | * bfa fcptm module API functions | ||
34 | */ | ||
35 | void bfa_fcptm_path_tov_set(struct bfa_s *bfa, u16 path_tov); | ||
36 | u16 bfa_fcptm_path_tov_get(struct bfa_s *bfa); | ||
37 | void bfa_fcptm_qdepth_set(struct bfa_s *bfa, u16 q_depth); | ||
38 | u16 bfa_fcptm_qdepth_get(struct bfa_s *bfa); | ||
39 | |||
40 | /* | ||
41 | * bfa tin API functions | ||
42 | */ | ||
43 | void bfa_tin_get_stats(struct bfa_tin_s *tin, struct bfa_tin_stats_s *stats); | ||
44 | void bfa_tin_clear_stats(struct bfa_tin_s *tin); | ||
45 | |||
46 | #endif /* __BFA_FCPTM_H__ */ | ||
47 | |||
diff --git a/drivers/scsi/bfa/include/bfa_svc.h b/drivers/scsi/bfa/include/bfa_svc.h new file mode 100644 index 000000000000..0c80b74f72ef --- /dev/null +++ b/drivers/scsi/bfa/include/bfa_svc.h | |||
@@ -0,0 +1,324 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_SVC_H__ | ||
18 | #define __BFA_SVC_H__ | ||
19 | |||
20 | /* | ||
21 | * forward declarations | ||
22 | */ | ||
23 | struct bfa_fcxp_s; | ||
24 | |||
25 | #include <defs/bfa_defs_status.h> | ||
26 | #include <defs/bfa_defs_pport.h> | ||
27 | #include <defs/bfa_defs_rport.h> | ||
28 | #include <defs/bfa_defs_qos.h> | ||
29 | #include <cs/bfa_sm.h> | ||
30 | #include <bfa.h> | ||
31 | |||
32 | /** | ||
33 | * BFA rport information. | ||
34 | */ | ||
35 | struct bfa_rport_info_s { | ||
36 | u16 max_frmsz; /* max rcv pdu size */ | ||
37 | u32 pid : 24, /* remote port ID */ | ||
38 | lp_tag : 8; | ||
39 | u32 local_pid : 24, /* local port ID */ | ||
40 | cisc : 8; /* CIRO supported */ | ||
41 | u8 fc_class; /* supported FC classes. enum fc_cos */ | ||
42 | u8 vf_en; /* virtual fabric enable */ | ||
43 | u16 vf_id; /* virtual fabric ID */ | ||
44 | enum bfa_pport_speed speed; /* Rport's current speed */ | ||
45 | }; | ||
46 | |||
47 | /** | ||
48 | * BFA rport data structure | ||
49 | */ | ||
50 | struct bfa_rport_s { | ||
51 | struct list_head qe; /* queue element */ | ||
52 | bfa_sm_t sm; /* state machine */ | ||
53 | struct bfa_s *bfa; /* backpointer to BFA */ | ||
54 | void *rport_drv; /* fcs/driver rport object */ | ||
55 | u16 fw_handle; /* firmware rport handle */ | ||
56 | u16 rport_tag; /* BFA rport tag */ | ||
57 | struct bfa_rport_info_s rport_info; /* rport info from *fcs/driver */ | ||
58 | struct bfa_reqq_wait_s reqq_wait; /* to wait for room in reqq */ | ||
59 | struct bfa_cb_qe_s hcb_qe; /* BFA callback qelem */ | ||
60 | struct bfa_rport_hal_stats_s stats; /* BFA rport statistics */ | ||
61 | struct bfa_rport_qos_attr_s qos_attr; | ||
62 | union a { | ||
63 | bfa_status_t status; /* f/w status */ | ||
64 | void *fw_msg; /* QoS scn event */ | ||
65 | } event_arg; | ||
66 | }; | ||
67 | #define BFA_RPORT_FC_COS(_rport) ((_rport)->rport_info.fc_class) | ||
68 | |||
69 | /** | ||
70 | * Send completion callback. | ||
71 | */ | ||
72 | typedef void (*bfa_cb_fcxp_send_t) (void *bfad_fcxp, struct bfa_fcxp_s *fcxp, | ||
73 | void *cbarg, enum bfa_status req_status, | ||
74 | u32 rsp_len, u32 resid_len, | ||
75 | struct fchs_s *rsp_fchs); | ||
76 | |||
77 | /** | ||
78 | * BFA fcxp allocation (asynchronous) | ||
79 | */ | ||
80 | typedef void (*bfa_fcxp_alloc_cbfn_t) (void *cbarg, struct bfa_fcxp_s *fcxp); | ||
81 | |||
82 | struct bfa_fcxp_wqe_s { | ||
83 | struct list_head qe; | ||
84 | bfa_fcxp_alloc_cbfn_t alloc_cbfn; | ||
85 | void *alloc_cbarg; | ||
86 | }; | ||
87 | |||
88 | typedef u64 (*bfa_fcxp_get_sgaddr_t) (void *bfad_fcxp, int sgeid); | ||
89 | typedef u32 (*bfa_fcxp_get_sglen_t) (void *bfad_fcxp, int sgeid); | ||
90 | |||
91 | #define BFA_UF_BUFSZ (2 * 1024 + 256) | ||
92 | |||
93 | /** | ||
94 | * @todo private | ||
95 | */ | ||
96 | struct bfa_uf_buf_s { | ||
97 | u8 d[BFA_UF_BUFSZ]; | ||
98 | }; | ||
99 | |||
100 | |||
101 | struct bfa_uf_s { | ||
102 | struct list_head qe; /* queue element */ | ||
103 | struct bfa_s *bfa; /* bfa instance */ | ||
104 | u16 uf_tag; /* identifying tag f/w messages */ | ||
105 | u16 vf_id; | ||
106 | u16 src_rport_handle; | ||
107 | u16 rsvd; | ||
108 | u8 *data_ptr; | ||
109 | u16 data_len; /* actual receive length */ | ||
110 | u16 pb_len; /* posted buffer length */ | ||
111 | void *buf_kva; /* buffer virtual address */ | ||
112 | u64 buf_pa; /* buffer physical address */ | ||
113 | struct bfa_cb_qe_s hcb_qe; /* comp: BFA comp qelem */ | ||
114 | struct bfa_sge_s sges[BFI_SGE_INLINE_MAX]; | ||
115 | }; | ||
116 | |||
117 | typedef void (*bfa_cb_pport_t) (void *cbarg, enum bfa_status status); | ||
118 | |||
119 | /** | ||
120 | * bfa lport login/logout service interface | ||
121 | */ | ||
122 | struct bfa_lps_s { | ||
123 | struct list_head qe; /* queue element */ | ||
124 | struct bfa_s *bfa; /* parent bfa instance */ | ||
125 | bfa_sm_t sm; /* finite state machine */ | ||
126 | u8 lp_tag; /* lport tag */ | ||
127 | u8 reqq; /* lport request queue */ | ||
128 | u8 alpa; /* ALPA for loop topologies */ | ||
129 | u32 lp_pid; /* lport port ID */ | ||
130 | bfa_boolean_t fdisc; /* send FDISC instead of FLOGI*/ | ||
131 | bfa_boolean_t auth_en; /* enable authentication */ | ||
132 | bfa_boolean_t auth_req; /* authentication required */ | ||
133 | bfa_boolean_t npiv_en; /* NPIV is allowed by peer */ | ||
134 | bfa_boolean_t fport; /* attached peer is F_PORT */ | ||
135 | bfa_boolean_t brcd_switch;/* attached peer is brcd switch */ | ||
136 | bfa_status_t status; /* login status */ | ||
137 | u16 pdusz; /* max receive PDU size */ | ||
138 | u16 pr_bbcred; /* BB_CREDIT from peer */ | ||
139 | u8 lsrjt_rsn; /* LSRJT reason */ | ||
140 | u8 lsrjt_expl; /* LSRJT explanation */ | ||
141 | wwn_t pwwn; /* port wwn of lport */ | ||
142 | wwn_t nwwn; /* node wwn of lport */ | ||
143 | wwn_t pr_pwwn; /* port wwn of lport peer */ | ||
144 | wwn_t pr_nwwn; /* node wwn of lport peer */ | ||
145 | mac_t lp_mac; /* fpma/spma MAC for lport */ | ||
146 | mac_t fcf_mac; /* FCF MAC of lport */ | ||
147 | struct bfa_reqq_wait_s wqe; /* request wait queue element */ | ||
148 | void *uarg; /* user callback arg */ | ||
149 | struct bfa_cb_qe_s hcb_qe; /* comp: callback qelem */ | ||
150 | struct bfi_lps_login_rsp_s *loginrsp; | ||
151 | bfa_eproto_status_t ext_status; | ||
152 | }; | ||
153 | |||
154 | /* | ||
155 | * bfa pport API functions | ||
156 | */ | ||
157 | bfa_status_t bfa_pport_enable(struct bfa_s *bfa); | ||
158 | bfa_status_t bfa_pport_disable(struct bfa_s *bfa); | ||
159 | bfa_status_t bfa_pport_cfg_speed(struct bfa_s *bfa, | ||
160 | enum bfa_pport_speed speed); | ||
161 | enum bfa_pport_speed bfa_pport_get_speed(struct bfa_s *bfa); | ||
162 | bfa_status_t bfa_pport_cfg_topology(struct bfa_s *bfa, | ||
163 | enum bfa_pport_topology topo); | ||
164 | enum bfa_pport_topology bfa_pport_get_topology(struct bfa_s *bfa); | ||
165 | bfa_status_t bfa_pport_cfg_hardalpa(struct bfa_s *bfa, u8 alpa); | ||
166 | bfa_boolean_t bfa_pport_get_hardalpa(struct bfa_s *bfa, u8 *alpa); | ||
167 | u8 bfa_pport_get_myalpa(struct bfa_s *bfa); | ||
168 | bfa_status_t bfa_pport_clr_hardalpa(struct bfa_s *bfa); | ||
169 | bfa_status_t bfa_pport_cfg_maxfrsize(struct bfa_s *bfa, u16 maxsize); | ||
170 | u16 bfa_pport_get_maxfrsize(struct bfa_s *bfa); | ||
171 | u32 bfa_pport_mypid(struct bfa_s *bfa); | ||
172 | u8 bfa_pport_get_rx_bbcredit(struct bfa_s *bfa); | ||
173 | bfa_status_t bfa_pport_trunk_enable(struct bfa_s *bfa, u8 bitmap); | ||
174 | bfa_status_t bfa_pport_trunk_disable(struct bfa_s *bfa); | ||
175 | bfa_boolean_t bfa_pport_trunk_query(struct bfa_s *bfa, u32 *bitmap); | ||
176 | void bfa_pport_get_attr(struct bfa_s *bfa, struct bfa_pport_attr_s *attr); | ||
177 | wwn_t bfa_pport_get_wwn(struct bfa_s *bfa, bfa_boolean_t node); | ||
178 | bfa_status_t bfa_pport_get_stats(struct bfa_s *bfa, | ||
179 | union bfa_pport_stats_u *stats, | ||
180 | bfa_cb_pport_t cbfn, void *cbarg); | ||
181 | bfa_status_t bfa_pport_clear_stats(struct bfa_s *bfa, bfa_cb_pport_t cbfn, | ||
182 | void *cbarg); | ||
183 | void bfa_pport_event_register(struct bfa_s *bfa, | ||
184 | void (*event_cbfn) (void *cbarg, | ||
185 | bfa_pport_event_t event), void *event_cbarg); | ||
186 | bfa_boolean_t bfa_pport_is_disabled(struct bfa_s *bfa); | ||
187 | void bfa_pport_cfg_qos(struct bfa_s *bfa, bfa_boolean_t on_off); | ||
188 | void bfa_pport_cfg_ratelim(struct bfa_s *bfa, bfa_boolean_t on_off); | ||
189 | bfa_status_t bfa_pport_cfg_ratelim_speed(struct bfa_s *bfa, | ||
190 | enum bfa_pport_speed speed); | ||
191 | enum bfa_pport_speed bfa_pport_get_ratelim_speed(struct bfa_s *bfa); | ||
192 | |||
193 | void bfa_pport_set_tx_bbcredit(struct bfa_s *bfa, u16 tx_bbcredit); | ||
194 | void bfa_pport_busy(struct bfa_s *bfa, bfa_boolean_t status); | ||
195 | void bfa_pport_beacon(struct bfa_s *bfa, bfa_boolean_t beacon, | ||
196 | bfa_boolean_t link_e2e_beacon); | ||
197 | void bfa_cb_pport_event(void *cbarg, bfa_pport_event_t event); | ||
198 | void bfa_pport_qos_get_attr(struct bfa_s *bfa, struct bfa_qos_attr_s *qos_attr); | ||
199 | void bfa_pport_qos_get_vc_attr(struct bfa_s *bfa, | ||
200 | struct bfa_qos_vc_attr_s *qos_vc_attr); | ||
201 | bfa_status_t bfa_pport_get_qos_stats(struct bfa_s *bfa, | ||
202 | union bfa_pport_stats_u *stats, | ||
203 | bfa_cb_pport_t cbfn, void *cbarg); | ||
204 | bfa_status_t bfa_pport_clear_qos_stats(struct bfa_s *bfa, bfa_cb_pport_t cbfn, | ||
205 | void *cbarg); | ||
206 | bfa_boolean_t bfa_pport_is_ratelim(struct bfa_s *bfa); | ||
207 | bfa_boolean_t bfa_pport_is_linkup(struct bfa_s *bfa); | ||
208 | |||
209 | /* | ||
210 | * bfa rport API functions | ||
211 | */ | ||
212 | struct bfa_rport_s *bfa_rport_create(struct bfa_s *bfa, void *rport_drv); | ||
213 | void bfa_rport_delete(struct bfa_rport_s *rport); | ||
214 | void bfa_rport_online(struct bfa_rport_s *rport, | ||
215 | struct bfa_rport_info_s *rport_info); | ||
216 | void bfa_rport_offline(struct bfa_rport_s *rport); | ||
217 | void bfa_rport_speed(struct bfa_rport_s *rport, enum bfa_pport_speed speed); | ||
218 | void bfa_rport_get_stats(struct bfa_rport_s *rport, | ||
219 | struct bfa_rport_hal_stats_s *stats); | ||
220 | void bfa_rport_clear_stats(struct bfa_rport_s *rport); | ||
221 | void bfa_cb_rport_online(void *rport); | ||
222 | void bfa_cb_rport_offline(void *rport); | ||
223 | void bfa_cb_rport_qos_scn_flowid(void *rport, | ||
224 | struct bfa_rport_qos_attr_s old_qos_attr, | ||
225 | struct bfa_rport_qos_attr_s new_qos_attr); | ||
226 | void bfa_cb_rport_qos_scn_prio(void *rport, | ||
227 | struct bfa_rport_qos_attr_s old_qos_attr, | ||
228 | struct bfa_rport_qos_attr_s new_qos_attr); | ||
229 | void bfa_rport_get_qos_attr(struct bfa_rport_s *rport, | ||
230 | struct bfa_rport_qos_attr_s *qos_attr); | ||
231 | |||
232 | /* | ||
233 | * bfa fcxp API functions | ||
234 | */ | ||
235 | struct bfa_fcxp_s *bfa_fcxp_alloc(void *bfad_fcxp, struct bfa_s *bfa, | ||
236 | int nreq_sgles, int nrsp_sgles, | ||
237 | bfa_fcxp_get_sgaddr_t get_req_sga, | ||
238 | bfa_fcxp_get_sglen_t get_req_sglen, | ||
239 | bfa_fcxp_get_sgaddr_t get_rsp_sga, | ||
240 | bfa_fcxp_get_sglen_t get_rsp_sglen); | ||
241 | void bfa_fcxp_alloc_wait(struct bfa_s *bfa, struct bfa_fcxp_wqe_s *wqe, | ||
242 | bfa_fcxp_alloc_cbfn_t alloc_cbfn, void *cbarg); | ||
243 | void bfa_fcxp_walloc_cancel(struct bfa_s *bfa, | ||
244 | struct bfa_fcxp_wqe_s *wqe); | ||
245 | void bfa_fcxp_discard(struct bfa_fcxp_s *fcxp); | ||
246 | |||
247 | void *bfa_fcxp_get_reqbuf(struct bfa_fcxp_s *fcxp); | ||
248 | void *bfa_fcxp_get_rspbuf(struct bfa_fcxp_s *fcxp); | ||
249 | |||
250 | void bfa_fcxp_free(struct bfa_fcxp_s *fcxp); | ||
251 | |||
252 | void bfa_fcxp_send(struct bfa_fcxp_s *fcxp, | ||
253 | struct bfa_rport_s *rport, u16 vf_id, u8 lp_tag, | ||
254 | bfa_boolean_t cts, enum fc_cos cos, | ||
255 | u32 reqlen, struct fchs_s *fchs, | ||
256 | bfa_cb_fcxp_send_t cbfn, | ||
257 | void *cbarg, | ||
258 | u32 rsp_maxlen, u8 rsp_timeout); | ||
259 | bfa_status_t bfa_fcxp_abort(struct bfa_fcxp_s *fcxp); | ||
260 | u32 bfa_fcxp_get_reqbufsz(struct bfa_fcxp_s *fcxp); | ||
261 | u32 bfa_fcxp_get_maxrsp(struct bfa_s *bfa); | ||
262 | |||
263 | static inline void * | ||
264 | bfa_uf_get_frmbuf(struct bfa_uf_s *uf) | ||
265 | { | ||
266 | return uf->data_ptr; | ||
267 | } | ||
268 | |||
269 | static inline u16 | ||
270 | bfa_uf_get_frmlen(struct bfa_uf_s *uf) | ||
271 | { | ||
272 | return uf->data_len; | ||
273 | } | ||
274 | |||
275 | /** | ||
276 | * Callback prototype for unsolicited frame receive handler. | ||
277 | * | ||
278 | * @param[in] cbarg callback arg for receive handler | ||
279 | * @param[in] uf unsolicited frame descriptor | ||
280 | * | ||
281 | * @return None | ||
282 | */ | ||
283 | typedef void (*bfa_cb_uf_recv_t) (void *cbarg, struct bfa_uf_s *uf); | ||
284 | |||
285 | /* | ||
286 | * bfa uf API functions | ||
287 | */ | ||
288 | void bfa_uf_recv_register(struct bfa_s *bfa, bfa_cb_uf_recv_t ufrecv, | ||
289 | void *cbarg); | ||
290 | void bfa_uf_free(struct bfa_uf_s *uf); | ||
291 | |||
292 | /** | ||
293 | * bfa lport service api | ||
294 | */ | ||
295 | |||
296 | struct bfa_lps_s *bfa_lps_alloc(struct bfa_s *bfa); | ||
297 | void bfa_lps_delete(struct bfa_lps_s *lps); | ||
298 | void bfa_lps_discard(struct bfa_lps_s *lps); | ||
299 | void bfa_lps_flogi(struct bfa_lps_s *lps, void *uarg, u8 alpa, u16 pdusz, | ||
300 | wwn_t pwwn, wwn_t nwwn, bfa_boolean_t auth_en); | ||
301 | void bfa_lps_fdisc(struct bfa_lps_s *lps, void *uarg, u16 pdusz, wwn_t pwwn, | ||
302 | wwn_t nwwn); | ||
303 | void bfa_lps_flogo(struct bfa_lps_s *lps); | ||
304 | void bfa_lps_fdisclogo(struct bfa_lps_s *lps); | ||
305 | u8 bfa_lps_get_tag(struct bfa_lps_s *lps); | ||
306 | bfa_boolean_t bfa_lps_is_npiv_en(struct bfa_lps_s *lps); | ||
307 | bfa_boolean_t bfa_lps_is_fport(struct bfa_lps_s *lps); | ||
308 | bfa_boolean_t bfa_lps_is_brcd_fabric(struct bfa_lps_s *lps); | ||
309 | bfa_boolean_t bfa_lps_is_authreq(struct bfa_lps_s *lps); | ||
310 | bfa_eproto_status_t bfa_lps_get_extstatus(struct bfa_lps_s *lps); | ||
311 | u32 bfa_lps_get_pid(struct bfa_lps_s *lps); | ||
312 | u8 bfa_lps_get_tag_from_pid(struct bfa_s *bfa, u32 pid); | ||
313 | u16 bfa_lps_get_peer_bbcredit(struct bfa_lps_s *lps); | ||
314 | wwn_t bfa_lps_get_peer_pwwn(struct bfa_lps_s *lps); | ||
315 | wwn_t bfa_lps_get_peer_nwwn(struct bfa_lps_s *lps); | ||
316 | u8 bfa_lps_get_lsrjt_rsn(struct bfa_lps_s *lps); | ||
317 | u8 bfa_lps_get_lsrjt_expl(struct bfa_lps_s *lps); | ||
318 | void bfa_cb_lps_flogi_comp(void *bfad, void *uarg, bfa_status_t status); | ||
319 | void bfa_cb_lps_flogo_comp(void *bfad, void *uarg); | ||
320 | void bfa_cb_lps_fdisc_comp(void *bfad, void *uarg, bfa_status_t status); | ||
321 | void bfa_cb_lps_fdisclogo_comp(void *bfad, void *uarg); | ||
322 | |||
323 | #endif /* __BFA_SVC_H__ */ | ||
324 | |||
diff --git a/drivers/scsi/bfa/include/bfa_timer.h b/drivers/scsi/bfa/include/bfa_timer.h new file mode 100644 index 000000000000..e407103fa565 --- /dev/null +++ b/drivers/scsi/bfa/include/bfa_timer.h | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_TIMER_H__ | ||
18 | #define __BFA_TIMER_H__ | ||
19 | |||
20 | #include <bfa_os_inc.h> | ||
21 | #include <cs/bfa_q.h> | ||
22 | |||
23 | struct bfa_s; | ||
24 | |||
25 | typedef void (*bfa_timer_cbfn_t)(void *); | ||
26 | |||
27 | /** | ||
28 | * BFA timer data structure | ||
29 | */ | ||
30 | struct bfa_timer_s { | ||
31 | struct list_head qe; | ||
32 | bfa_timer_cbfn_t timercb; | ||
33 | void *arg; | ||
34 | int timeout; /**< in millisecs. */ | ||
35 | }; | ||
36 | |||
37 | /** | ||
38 | * Timer module structure | ||
39 | */ | ||
40 | struct bfa_timer_mod_s { | ||
41 | struct list_head timer_q; | ||
42 | }; | ||
43 | |||
44 | #define BFA_TIMER_FREQ 500 /**< specified in millisecs */ | ||
45 | |||
46 | void bfa_timer_beat(struct bfa_timer_mod_s *mod); | ||
47 | void bfa_timer_init(struct bfa_timer_mod_s *mod); | ||
48 | void bfa_timer_begin(struct bfa_timer_mod_s *mod, struct bfa_timer_s *timer, | ||
49 | bfa_timer_cbfn_t timercb, void *arg, | ||
50 | unsigned int timeout); | ||
51 | void bfa_timer_stop(struct bfa_timer_s *timer); | ||
52 | |||
53 | #endif /* __BFA_TIMER_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/bfi/bfi.h b/drivers/scsi/bfa/include/bfi/bfi.h new file mode 100644 index 000000000000..6cadfe0d4ba1 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi.h | |||
@@ -0,0 +1,174 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_H__ | ||
19 | #define __BFI_H__ | ||
20 | |||
21 | #include <bfa_os_inc.h> | ||
22 | #include <defs/bfa_defs_status.h> | ||
23 | |||
24 | #pragma pack(1) | ||
25 | |||
26 | /** | ||
27 | * Msg header common to all msgs | ||
28 | */ | ||
29 | struct bfi_mhdr_s { | ||
30 | u8 msg_class; /* @ref bfi_mclass_t */ | ||
31 | u8 msg_id; /* msg opcode with in the class */ | ||
32 | union { | ||
33 | struct { | ||
34 | u8 rsvd; | ||
35 | u8 lpu_id; /* msg destination */ | ||
36 | } h2i; | ||
37 | u16 i2htok; /* token in msgs to host */ | ||
38 | } mtag; | ||
39 | }; | ||
40 | |||
41 | #define bfi_h2i_set(_mh, _mc, _op, _lpuid) do { \ | ||
42 | (_mh).msg_class = (_mc); \ | ||
43 | (_mh).msg_id = (_op); \ | ||
44 | (_mh).mtag.h2i.lpu_id = (_lpuid); \ | ||
45 | } while (0) | ||
46 | |||
47 | #define bfi_i2h_set(_mh, _mc, _op, _i2htok) do { \ | ||
48 | (_mh).msg_class = (_mc); \ | ||
49 | (_mh).msg_id = (_op); \ | ||
50 | (_mh).mtag.i2htok = (_i2htok); \ | ||
51 | } while (0) | ||
52 | |||
53 | /* | ||
54 | * Message opcodes: 0-127 to firmware, 128-255 to host | ||
55 | */ | ||
56 | #define BFI_I2H_OPCODE_BASE 128 | ||
57 | #define BFA_I2HM(_x) ((_x) + BFI_I2H_OPCODE_BASE) | ||
58 | |||
59 | /** | ||
60 | **************************************************************************** | ||
61 | * | ||
62 | * Scatter Gather Element and Page definition | ||
63 | * | ||
64 | **************************************************************************** | ||
65 | */ | ||
66 | |||
67 | #define BFI_SGE_INLINE 1 | ||
68 | #define BFI_SGE_INLINE_MAX (BFI_SGE_INLINE + 1) | ||
69 | |||
70 | /** | ||
71 | * SG Flags | ||
72 | */ | ||
73 | enum { | ||
74 | BFI_SGE_DATA = 0, /* data address, not last */ | ||
75 | BFI_SGE_DATA_CPL = 1, /* data addr, last in current page */ | ||
76 | BFI_SGE_DATA_LAST = 3, /* data address, last */ | ||
77 | BFI_SGE_LINK = 2, /* link address */ | ||
78 | BFI_SGE_PGDLEN = 2, /* cumulative data length for page */ | ||
79 | }; | ||
80 | |||
81 | /** | ||
82 | * DMA addresses | ||
83 | */ | ||
84 | union bfi_addr_u { | ||
85 | struct { | ||
86 | u32 addr_lo; | ||
87 | u32 addr_hi; | ||
88 | } a32; | ||
89 | }; | ||
90 | |||
91 | /** | ||
92 | * Scatter Gather Element | ||
93 | */ | ||
94 | struct bfi_sge_s { | ||
95 | #ifdef __BIGENDIAN | ||
96 | u32 flags : 2, | ||
97 | rsvd : 2, | ||
98 | sg_len : 28; | ||
99 | #else | ||
100 | u32 sg_len : 28, | ||
101 | rsvd : 2, | ||
102 | flags : 2; | ||
103 | #endif | ||
104 | union bfi_addr_u sga; | ||
105 | }; | ||
106 | |||
107 | /** | ||
108 | * Scatter Gather Page | ||
109 | */ | ||
110 | #define BFI_SGPG_DATA_SGES 7 | ||
111 | #define BFI_SGPG_SGES_MAX (BFI_SGPG_DATA_SGES + 1) | ||
112 | #define BFI_SGPG_RSVD_WD_LEN 8 | ||
113 | struct bfi_sgpg_s { | ||
114 | struct bfi_sge_s sges[BFI_SGPG_SGES_MAX]; | ||
115 | u32 rsvd[BFI_SGPG_RSVD_WD_LEN]; | ||
116 | }; | ||
117 | |||
118 | /* | ||
119 | * Large Message structure - 128 Bytes size Msgs | ||
120 | */ | ||
121 | #define BFI_LMSG_SZ 128 | ||
122 | #define BFI_LMSG_PL_WSZ \ | ||
123 | ((BFI_LMSG_SZ - sizeof(struct bfi_mhdr_s)) / 4) | ||
124 | |||
125 | struct bfi_msg_s { | ||
126 | struct bfi_mhdr_s mhdr; | ||
127 | u32 pl[BFI_LMSG_PL_WSZ]; | ||
128 | }; | ||
129 | |||
130 | /** | ||
131 | * Mailbox message structure | ||
132 | */ | ||
133 | #define BFI_MBMSG_SZ 7 | ||
134 | struct bfi_mbmsg_s { | ||
135 | struct bfi_mhdr_s mh; | ||
136 | u32 pl[BFI_MBMSG_SZ]; | ||
137 | }; | ||
138 | |||
139 | /** | ||
140 | * Message Classes | ||
141 | */ | ||
142 | enum bfi_mclass { | ||
143 | BFI_MC_IOC = 1, /* IO Controller (IOC) */ | ||
144 | BFI_MC_DIAG = 2, /* Diagnostic Msgs */ | ||
145 | BFI_MC_FLASH = 3, /* Flash message class */ | ||
146 | BFI_MC_CEE = 4, | ||
147 | BFI_MC_FC_PORT = 5, /* FC port */ | ||
148 | BFI_MC_IOCFC = 6, /* FC - IO Controller (IOC) */ | ||
149 | BFI_MC_LL = 7, /* Link Layer */ | ||
150 | BFI_MC_UF = 8, /* Unsolicited frame receive */ | ||
151 | BFI_MC_FCXP = 9, /* FC Transport */ | ||
152 | BFI_MC_LPS = 10, /* lport fc login services */ | ||
153 | BFI_MC_RPORT = 11, /* Remote port */ | ||
154 | BFI_MC_ITNIM = 12, /* I-T nexus (Initiator mode) */ | ||
155 | BFI_MC_IOIM_READ = 13, /* read IO (Initiator mode) */ | ||
156 | BFI_MC_IOIM_WRITE = 14, /* write IO (Initiator mode) */ | ||
157 | BFI_MC_IOIM_IO = 15, /* IO (Initiator mode) */ | ||
158 | BFI_MC_IOIM = 16, /* IO (Initiator mode) */ | ||
159 | BFI_MC_IOIM_IOCOM = 17, /* good IO completion */ | ||
160 | BFI_MC_TSKIM = 18, /* Initiator Task management */ | ||
161 | BFI_MC_SBOOT = 19, /* SAN boot services */ | ||
162 | BFI_MC_IPFC = 20, /* IP over FC Msgs */ | ||
163 | BFI_MC_PORT = 21, /* Physical port */ | ||
164 | BFI_MC_MAX = 32 | ||
165 | }; | ||
166 | |||
167 | #define BFI_IOC_MAX_CQS 4 | ||
168 | #define BFI_IOC_MAX_CQS_ASIC 8 | ||
169 | #define BFI_IOC_MSGLEN_MAX 32 /* 32 bytes */ | ||
170 | |||
171 | #pragma pack() | ||
172 | |||
173 | #endif /* __BFI_H__ */ | ||
174 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_boot.h b/drivers/scsi/bfa/include/bfi/bfi_boot.h new file mode 100644 index 000000000000..5955afe7d108 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_boot.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | /* | ||
18 | * bfi_boot.h | ||
19 | */ | ||
20 | |||
21 | #ifndef __BFI_BOOT_H__ | ||
22 | #define __BFI_BOOT_H__ | ||
23 | |||
24 | #define BFI_BOOT_TYPE_OFF 8 | ||
25 | #define BFI_BOOT_PARAM_OFF 12 | ||
26 | |||
27 | #define BFI_BOOT_TYPE_NORMAL 0 /* param is device id */ | ||
28 | #define BFI_BOOT_TYPE_FLASH 1 | ||
29 | #define BFI_BOOT_TYPE_MEMTEST 2 | ||
30 | |||
31 | #define BFI_BOOT_MEMTEST_RES_ADDR 0x900 | ||
32 | #define BFI_BOOT_MEMTEST_RES_SIG 0xA0A1A2A3 | ||
33 | |||
34 | #endif | ||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_cbreg.h b/drivers/scsi/bfa/include/bfi/bfi_cbreg.h new file mode 100644 index 000000000000..b3bb52b565b1 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_cbreg.h | |||
@@ -0,0 +1,305 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* | ||
19 | * bfi_cbreg.h crossbow host block register definitions | ||
20 | * | ||
21 | * !!! Do not edit. Auto generated. !!! | ||
22 | */ | ||
23 | |||
24 | #ifndef __BFI_CBREG_H__ | ||
25 | #define __BFI_CBREG_H__ | ||
26 | |||
27 | |||
28 | #define HOSTFN0_INT_STATUS 0x00014000 | ||
29 | #define __HOSTFN0_INT_STATUS_LVL_MK 0x00f00000 | ||
30 | #define __HOSTFN0_INT_STATUS_LVL_SH 20 | ||
31 | #define __HOSTFN0_INT_STATUS_LVL(_v) ((_v) << __HOSTFN0_INT_STATUS_LVL_SH) | ||
32 | #define __HOSTFN0_INT_STATUS_P 0x000fffff | ||
33 | #define HOSTFN0_INT_MSK 0x00014004 | ||
34 | #define HOST_PAGE_NUM_FN0 0x00014008 | ||
35 | #define __HOST_PAGE_NUM_FN 0x000001ff | ||
36 | #define HOSTFN1_INT_STATUS 0x00014100 | ||
37 | #define __HOSTFN1_INT_STAT_LVL_MK 0x00f00000 | ||
38 | #define __HOSTFN1_INT_STAT_LVL_SH 20 | ||
39 | #define __HOSTFN1_INT_STAT_LVL(_v) ((_v) << __HOSTFN1_INT_STAT_LVL_SH) | ||
40 | #define __HOSTFN1_INT_STAT_P 0x000fffff | ||
41 | #define HOSTFN1_INT_MSK 0x00014104 | ||
42 | #define HOST_PAGE_NUM_FN1 0x00014108 | ||
43 | #define APP_PLL_400_CTL_REG 0x00014204 | ||
44 | #define __P_400_PLL_LOCK 0x80000000 | ||
45 | #define __APP_PLL_400_SRAM_USE_100MHZ 0x00100000 | ||
46 | #define __APP_PLL_400_RESET_TIMER_MK 0x000e0000 | ||
47 | #define __APP_PLL_400_RESET_TIMER_SH 17 | ||
48 | #define __APP_PLL_400_RESET_TIMER(_v) ((_v) << __APP_PLL_400_RESET_TIMER_SH) | ||
49 | #define __APP_PLL_400_LOGIC_SOFT_RESET 0x00010000 | ||
50 | #define __APP_PLL_400_CNTLMT0_1_MK 0x0000c000 | ||
51 | #define __APP_PLL_400_CNTLMT0_1_SH 14 | ||
52 | #define __APP_PLL_400_CNTLMT0_1(_v) ((_v) << __APP_PLL_400_CNTLMT0_1_SH) | ||
53 | #define __APP_PLL_400_JITLMT0_1_MK 0x00003000 | ||
54 | #define __APP_PLL_400_JITLMT0_1_SH 12 | ||
55 | #define __APP_PLL_400_JITLMT0_1(_v) ((_v) << __APP_PLL_400_JITLMT0_1_SH) | ||
56 | #define __APP_PLL_400_HREF 0x00000800 | ||
57 | #define __APP_PLL_400_HDIV 0x00000400 | ||
58 | #define __APP_PLL_400_P0_1_MK 0x00000300 | ||
59 | #define __APP_PLL_400_P0_1_SH 8 | ||
60 | #define __APP_PLL_400_P0_1(_v) ((_v) << __APP_PLL_400_P0_1_SH) | ||
61 | #define __APP_PLL_400_Z0_2_MK 0x000000e0 | ||
62 | #define __APP_PLL_400_Z0_2_SH 5 | ||
63 | #define __APP_PLL_400_Z0_2(_v) ((_v) << __APP_PLL_400_Z0_2_SH) | ||
64 | #define __APP_PLL_400_RSEL200500 0x00000010 | ||
65 | #define __APP_PLL_400_ENARST 0x00000008 | ||
66 | #define __APP_PLL_400_BYPASS 0x00000004 | ||
67 | #define __APP_PLL_400_LRESETN 0x00000002 | ||
68 | #define __APP_PLL_400_ENABLE 0x00000001 | ||
69 | #define APP_PLL_212_CTL_REG 0x00014208 | ||
70 | #define __P_212_PLL_LOCK 0x80000000 | ||
71 | #define __APP_PLL_212_RESET_TIMER_MK 0x000e0000 | ||
72 | #define __APP_PLL_212_RESET_TIMER_SH 17 | ||
73 | #define __APP_PLL_212_RESET_TIMER(_v) ((_v) << __APP_PLL_212_RESET_TIMER_SH) | ||
74 | #define __APP_PLL_212_LOGIC_SOFT_RESET 0x00010000 | ||
75 | #define __APP_PLL_212_CNTLMT0_1_MK 0x0000c000 | ||
76 | #define __APP_PLL_212_CNTLMT0_1_SH 14 | ||
77 | #define __APP_PLL_212_CNTLMT0_1(_v) ((_v) << __APP_PLL_212_CNTLMT0_1_SH) | ||
78 | #define __APP_PLL_212_JITLMT0_1_MK 0x00003000 | ||
79 | #define __APP_PLL_212_JITLMT0_1_SH 12 | ||
80 | #define __APP_PLL_212_JITLMT0_1(_v) ((_v) << __APP_PLL_212_JITLMT0_1_SH) | ||
81 | #define __APP_PLL_212_HREF 0x00000800 | ||
82 | #define __APP_PLL_212_HDIV 0x00000400 | ||
83 | #define __APP_PLL_212_P0_1_MK 0x00000300 | ||
84 | #define __APP_PLL_212_P0_1_SH 8 | ||
85 | #define __APP_PLL_212_P0_1(_v) ((_v) << __APP_PLL_212_P0_1_SH) | ||
86 | #define __APP_PLL_212_Z0_2_MK 0x000000e0 | ||
87 | #define __APP_PLL_212_Z0_2_SH 5 | ||
88 | #define __APP_PLL_212_Z0_2(_v) ((_v) << __APP_PLL_212_Z0_2_SH) | ||
89 | #define __APP_PLL_212_RSEL200500 0x00000010 | ||
90 | #define __APP_PLL_212_ENARST 0x00000008 | ||
91 | #define __APP_PLL_212_BYPASS 0x00000004 | ||
92 | #define __APP_PLL_212_LRESETN 0x00000002 | ||
93 | #define __APP_PLL_212_ENABLE 0x00000001 | ||
94 | #define HOST_SEM0_REG 0x00014230 | ||
95 | #define __HOST_SEMAPHORE 0x00000001 | ||
96 | #define HOST_SEM1_REG 0x00014234 | ||
97 | #define HOST_SEM2_REG 0x00014238 | ||
98 | #define HOST_SEM3_REG 0x0001423c | ||
99 | #define HOST_SEM0_INFO_REG 0x00014240 | ||
100 | #define HOST_SEM1_INFO_REG 0x00014244 | ||
101 | #define HOST_SEM2_INFO_REG 0x00014248 | ||
102 | #define HOST_SEM3_INFO_REG 0x0001424c | ||
103 | #define HOSTFN0_LPU0_CMD_STAT 0x00019000 | ||
104 | #define __HOSTFN0_LPU0_MBOX_INFO_MK 0xfffffffe | ||
105 | #define __HOSTFN0_LPU0_MBOX_INFO_SH 1 | ||
106 | #define __HOSTFN0_LPU0_MBOX_INFO(_v) ((_v) << __HOSTFN0_LPU0_MBOX_INFO_SH) | ||
107 | #define __HOSTFN0_LPU0_MBOX_CMD_STATUS 0x00000001 | ||
108 | #define LPU0_HOSTFN0_CMD_STAT 0x00019008 | ||
109 | #define __LPU0_HOSTFN0_MBOX_INFO_MK 0xfffffffe | ||
110 | #define __LPU0_HOSTFN0_MBOX_INFO_SH 1 | ||
111 | #define __LPU0_HOSTFN0_MBOX_INFO(_v) ((_v) << __LPU0_HOSTFN0_MBOX_INFO_SH) | ||
112 | #define __LPU0_HOSTFN0_MBOX_CMD_STATUS 0x00000001 | ||
113 | #define HOSTFN1_LPU1_CMD_STAT 0x00019014 | ||
114 | #define __HOSTFN1_LPU1_MBOX_INFO_MK 0xfffffffe | ||
115 | #define __HOSTFN1_LPU1_MBOX_INFO_SH 1 | ||
116 | #define __HOSTFN1_LPU1_MBOX_INFO(_v) ((_v) << __HOSTFN1_LPU1_MBOX_INFO_SH) | ||
117 | #define __HOSTFN1_LPU1_MBOX_CMD_STATUS 0x00000001 | ||
118 | #define LPU1_HOSTFN1_CMD_STAT 0x0001901c | ||
119 | #define __LPU1_HOSTFN1_MBOX_INFO_MK 0xfffffffe | ||
120 | #define __LPU1_HOSTFN1_MBOX_INFO_SH 1 | ||
121 | #define __LPU1_HOSTFN1_MBOX_INFO(_v) ((_v) << __LPU1_HOSTFN1_MBOX_INFO_SH) | ||
122 | #define __LPU1_HOSTFN1_MBOX_CMD_STATUS 0x00000001 | ||
123 | #define CPE_Q0_DEPTH 0x00010014 | ||
124 | #define CPE_Q0_PI 0x0001001c | ||
125 | #define CPE_Q0_CI 0x00010020 | ||
126 | #define CPE_Q1_DEPTH 0x00010034 | ||
127 | #define CPE_Q1_PI 0x0001003c | ||
128 | #define CPE_Q1_CI 0x00010040 | ||
129 | #define CPE_Q2_DEPTH 0x00010054 | ||
130 | #define CPE_Q2_PI 0x0001005c | ||
131 | #define CPE_Q2_CI 0x00010060 | ||
132 | #define CPE_Q3_DEPTH 0x00010074 | ||
133 | #define CPE_Q3_PI 0x0001007c | ||
134 | #define CPE_Q3_CI 0x00010080 | ||
135 | #define CPE_Q4_DEPTH 0x00010094 | ||
136 | #define CPE_Q4_PI 0x0001009c | ||
137 | #define CPE_Q4_CI 0x000100a0 | ||
138 | #define CPE_Q5_DEPTH 0x000100b4 | ||
139 | #define CPE_Q5_PI 0x000100bc | ||
140 | #define CPE_Q5_CI 0x000100c0 | ||
141 | #define CPE_Q6_DEPTH 0x000100d4 | ||
142 | #define CPE_Q6_PI 0x000100dc | ||
143 | #define CPE_Q6_CI 0x000100e0 | ||
144 | #define CPE_Q7_DEPTH 0x000100f4 | ||
145 | #define CPE_Q7_PI 0x000100fc | ||
146 | #define CPE_Q7_CI 0x00010100 | ||
147 | #define RME_Q0_DEPTH 0x00011014 | ||
148 | #define RME_Q0_PI 0x0001101c | ||
149 | #define RME_Q0_CI 0x00011020 | ||
150 | #define RME_Q1_DEPTH 0x00011034 | ||
151 | #define RME_Q1_PI 0x0001103c | ||
152 | #define RME_Q1_CI 0x00011040 | ||
153 | #define RME_Q2_DEPTH 0x00011054 | ||
154 | #define RME_Q2_PI 0x0001105c | ||
155 | #define RME_Q2_CI 0x00011060 | ||
156 | #define RME_Q3_DEPTH 0x00011074 | ||
157 | #define RME_Q3_PI 0x0001107c | ||
158 | #define RME_Q3_CI 0x00011080 | ||
159 | #define RME_Q4_DEPTH 0x00011094 | ||
160 | #define RME_Q4_PI 0x0001109c | ||
161 | #define RME_Q4_CI 0x000110a0 | ||
162 | #define RME_Q5_DEPTH 0x000110b4 | ||
163 | #define RME_Q5_PI 0x000110bc | ||
164 | #define RME_Q5_CI 0x000110c0 | ||
165 | #define RME_Q6_DEPTH 0x000110d4 | ||
166 | #define RME_Q6_PI 0x000110dc | ||
167 | #define RME_Q6_CI 0x000110e0 | ||
168 | #define RME_Q7_DEPTH 0x000110f4 | ||
169 | #define RME_Q7_PI 0x000110fc | ||
170 | #define RME_Q7_CI 0x00011100 | ||
171 | #define PSS_CTL_REG 0x00018800 | ||
172 | #define __PSS_I2C_CLK_DIV_MK 0x00030000 | ||
173 | #define __PSS_I2C_CLK_DIV_SH 16 | ||
174 | #define __PSS_I2C_CLK_DIV(_v) ((_v) << __PSS_I2C_CLK_DIV_SH) | ||
175 | #define __PSS_LMEM_INIT_DONE 0x00001000 | ||
176 | #define __PSS_LMEM_RESET 0x00000200 | ||
177 | #define __PSS_LMEM_INIT_EN 0x00000100 | ||
178 | #define __PSS_LPU1_RESET 0x00000002 | ||
179 | #define __PSS_LPU0_RESET 0x00000001 | ||
180 | |||
181 | |||
182 | /* | ||
183 | * These definitions are either in error/missing in spec. Its auto-generated | ||
184 | * from hard coded values in regparse.pl. | ||
185 | */ | ||
186 | #define __EMPHPOST_AT_4G_MK_FIX 0x0000001c | ||
187 | #define __EMPHPOST_AT_4G_SH_FIX 0x00000002 | ||
188 | #define __EMPHPRE_AT_4G_FIX 0x00000003 | ||
189 | #define __SFP_TXRATE_EN_FIX 0x00000100 | ||
190 | #define __SFP_RXRATE_EN_FIX 0x00000080 | ||
191 | |||
192 | |||
193 | /* | ||
194 | * These register definitions are auto-generated from hard coded values | ||
195 | * in regparse.pl. | ||
196 | */ | ||
197 | #define HOSTFN0_LPU_MBOX0_0 0x00019200 | ||
198 | #define HOSTFN1_LPU_MBOX0_8 0x00019260 | ||
199 | #define LPU_HOSTFN0_MBOX0_0 0x00019280 | ||
200 | #define LPU_HOSTFN1_MBOX0_8 0x000192e0 | ||
201 | |||
202 | |||
203 | /* | ||
204 | * These register mapping definitions are auto-generated from mapping tables | ||
205 | * in regparse.pl. | ||
206 | */ | ||
207 | #define BFA_IOC0_HBEAT_REG HOST_SEM0_INFO_REG | ||
208 | #define BFA_IOC0_STATE_REG HOST_SEM1_INFO_REG | ||
209 | #define BFA_IOC1_HBEAT_REG HOST_SEM2_INFO_REG | ||
210 | #define BFA_IOC1_STATE_REG HOST_SEM3_INFO_REG | ||
211 | #define BFA_FW_USE_COUNT HOST_SEM4_INFO_REG | ||
212 | |||
213 | #define CPE_Q_DEPTH(__n) \ | ||
214 | (CPE_Q0_DEPTH + (__n) * (CPE_Q1_DEPTH - CPE_Q0_DEPTH)) | ||
215 | #define CPE_Q_PI(__n) \ | ||
216 | (CPE_Q0_PI + (__n) * (CPE_Q1_PI - CPE_Q0_PI)) | ||
217 | #define CPE_Q_CI(__n) \ | ||
218 | (CPE_Q0_CI + (__n) * (CPE_Q1_CI - CPE_Q0_CI)) | ||
219 | #define RME_Q_DEPTH(__n) \ | ||
220 | (RME_Q0_DEPTH + (__n) * (RME_Q1_DEPTH - RME_Q0_DEPTH)) | ||
221 | #define RME_Q_PI(__n) \ | ||
222 | (RME_Q0_PI + (__n) * (RME_Q1_PI - RME_Q0_PI)) | ||
223 | #define RME_Q_CI(__n) \ | ||
224 | (RME_Q0_CI + (__n) * (RME_Q1_CI - RME_Q0_CI)) | ||
225 | |||
226 | #define CPE_Q_NUM(__fn, __q) (((__fn) << 2) + (__q)) | ||
227 | #define RME_Q_NUM(__fn, __q) (((__fn) << 2) + (__q)) | ||
228 | #define CPE_Q_MASK(__q) ((__q) & 0x3) | ||
229 | #define RME_Q_MASK(__q) ((__q) & 0x3) | ||
230 | |||
231 | |||
232 | /* | ||
233 | * PCI MSI-X vector defines | ||
234 | */ | ||
235 | enum { | ||
236 | BFA_MSIX_CPE_Q0 = 0, | ||
237 | BFA_MSIX_CPE_Q1 = 1, | ||
238 | BFA_MSIX_CPE_Q2 = 2, | ||
239 | BFA_MSIX_CPE_Q3 = 3, | ||
240 | BFA_MSIX_CPE_Q4 = 4, | ||
241 | BFA_MSIX_CPE_Q5 = 5, | ||
242 | BFA_MSIX_CPE_Q6 = 6, | ||
243 | BFA_MSIX_CPE_Q7 = 7, | ||
244 | BFA_MSIX_RME_Q0 = 8, | ||
245 | BFA_MSIX_RME_Q1 = 9, | ||
246 | BFA_MSIX_RME_Q2 = 10, | ||
247 | BFA_MSIX_RME_Q3 = 11, | ||
248 | BFA_MSIX_RME_Q4 = 12, | ||
249 | BFA_MSIX_RME_Q5 = 13, | ||
250 | BFA_MSIX_RME_Q6 = 14, | ||
251 | BFA_MSIX_RME_Q7 = 15, | ||
252 | BFA_MSIX_ERR_EMC = 16, | ||
253 | BFA_MSIX_ERR_LPU0 = 17, | ||
254 | BFA_MSIX_ERR_LPU1 = 18, | ||
255 | BFA_MSIX_ERR_PSS = 19, | ||
256 | BFA_MSIX_MBOX_LPU0 = 20, | ||
257 | BFA_MSIX_MBOX_LPU1 = 21, | ||
258 | BFA_MSIX_CB_MAX = 22, | ||
259 | }; | ||
260 | |||
261 | /* | ||
262 | * And corresponding host interrupt status bit field defines | ||
263 | */ | ||
264 | #define __HFN_INT_CPE_Q0 0x00000001U | ||
265 | #define __HFN_INT_CPE_Q1 0x00000002U | ||
266 | #define __HFN_INT_CPE_Q2 0x00000004U | ||
267 | #define __HFN_INT_CPE_Q3 0x00000008U | ||
268 | #define __HFN_INT_CPE_Q4 0x00000010U | ||
269 | #define __HFN_INT_CPE_Q5 0x00000020U | ||
270 | #define __HFN_INT_CPE_Q6 0x00000040U | ||
271 | #define __HFN_INT_CPE_Q7 0x00000080U | ||
272 | #define __HFN_INT_RME_Q0 0x00000100U | ||
273 | #define __HFN_INT_RME_Q1 0x00000200U | ||
274 | #define __HFN_INT_RME_Q2 0x00000400U | ||
275 | #define __HFN_INT_RME_Q3 0x00000800U | ||
276 | #define __HFN_INT_RME_Q4 0x00001000U | ||
277 | #define __HFN_INT_RME_Q5 0x00002000U | ||
278 | #define __HFN_INT_RME_Q6 0x00004000U | ||
279 | #define __HFN_INT_RME_Q7 0x00008000U | ||
280 | #define __HFN_INT_ERR_EMC 0x00010000U | ||
281 | #define __HFN_INT_ERR_LPU0 0x00020000U | ||
282 | #define __HFN_INT_ERR_LPU1 0x00040000U | ||
283 | #define __HFN_INT_ERR_PSS 0x00080000U | ||
284 | #define __HFN_INT_MBOX_LPU0 0x00100000U | ||
285 | #define __HFN_INT_MBOX_LPU1 0x00200000U | ||
286 | #define __HFN_INT_MBOX1_LPU0 0x00400000U | ||
287 | #define __HFN_INT_MBOX1_LPU1 0x00800000U | ||
288 | #define __HFN_INT_CPE_MASK 0x000000ffU | ||
289 | #define __HFN_INT_RME_MASK 0x0000ff00U | ||
290 | |||
291 | |||
292 | /* | ||
293 | * crossbow memory map. | ||
294 | */ | ||
295 | #define PSS_SMEM_PAGE_START 0x8000 | ||
296 | #define PSS_SMEM_PGNUM(_pg0, _ma) ((_pg0) + ((_ma) >> 15)) | ||
297 | #define PSS_SMEM_PGOFF(_ma) ((_ma) & 0x7fff) | ||
298 | |||
299 | /* | ||
300 | * End of crossbow memory map | ||
301 | */ | ||
302 | |||
303 | |||
304 | #endif /* __BFI_CBREG_H__ */ | ||
305 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_cee.h b/drivers/scsi/bfa/include/bfi/bfi_cee.h new file mode 100644 index 000000000000..0970596583ea --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_cee.h | |||
@@ -0,0 +1,119 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | /** | ||
18 | * Copyright (c) 2006-2009 Brocade Communications Systems, Inc. | ||
19 | * All rights reserved. | ||
20 | * | ||
21 | * bfi_dcbx.h BFI Interface (Mailbox commands and related structures) | ||
22 | * between host driver and DCBX/LLDP firmware module. | ||
23 | * | ||
24 | **/ | ||
25 | |||
26 | #ifndef __BFI_CEE_H__ | ||
27 | #define __BFI_CEE_H__ | ||
28 | |||
29 | #include <bfi/bfi.h> | ||
30 | |||
31 | #pragma pack(1) | ||
32 | |||
33 | |||
34 | enum bfi_cee_h2i_msgs_e { | ||
35 | BFI_CEE_H2I_GET_CFG_REQ = 1, | ||
36 | BFI_CEE_H2I_RESET_STATS = 2, | ||
37 | BFI_CEE_H2I_GET_STATS_REQ = 3, | ||
38 | }; | ||
39 | |||
40 | |||
41 | enum bfi_cee_i2h_msgs_e { | ||
42 | BFI_CEE_I2H_GET_CFG_RSP = BFA_I2HM(1), | ||
43 | BFI_CEE_I2H_RESET_STATS_RSP = BFA_I2HM(2), | ||
44 | BFI_CEE_I2H_GET_STATS_RSP = BFA_I2HM(3), | ||
45 | }; | ||
46 | |||
47 | |||
48 | /* Data structures */ | ||
49 | |||
50 | /* | ||
51 | * BFI_CEE_H2I_RESET_STATS | ||
52 | */ | ||
53 | struct bfi_lldp_reset_stats_s { | ||
54 | struct bfi_mhdr_s mh; | ||
55 | }; | ||
56 | |||
57 | /* | ||
58 | * BFI_CEE_H2I_RESET_STATS | ||
59 | */ | ||
60 | struct bfi_cee_reset_stats_s { | ||
61 | struct bfi_mhdr_s mh; | ||
62 | }; | ||
63 | |||
64 | /* | ||
65 | * BFI_CEE_H2I_GET_CFG_REQ | ||
66 | */ | ||
67 | struct bfi_cee_get_req_s { | ||
68 | struct bfi_mhdr_s mh; | ||
69 | union bfi_addr_u dma_addr; | ||
70 | }; | ||
71 | |||
72 | |||
73 | /* | ||
74 | * BFI_CEE_I2H_GET_CFG_RSP | ||
75 | */ | ||
76 | struct bfi_cee_get_rsp_s { | ||
77 | struct bfi_mhdr_s mh; | ||
78 | u8 cmd_status; | ||
79 | u8 rsvd[3]; | ||
80 | }; | ||
81 | |||
82 | /* | ||
83 | * BFI_CEE_H2I_GET_STATS_REQ | ||
84 | */ | ||
85 | struct bfi_cee_stats_req_s { | ||
86 | struct bfi_mhdr_s mh; | ||
87 | union bfi_addr_u dma_addr; | ||
88 | }; | ||
89 | |||
90 | |||
91 | /* | ||
92 | * BFI_CEE_I2H_GET_STATS_RSP | ||
93 | */ | ||
94 | struct bfi_cee_stats_rsp_s { | ||
95 | struct bfi_mhdr_s mh; | ||
96 | u8 cmd_status; | ||
97 | u8 rsvd[3]; | ||
98 | }; | ||
99 | |||
100 | |||
101 | |||
102 | union bfi_cee_h2i_msg_u { | ||
103 | struct bfi_mhdr_s mh; | ||
104 | struct bfi_cee_get_req_s get_req; | ||
105 | struct bfi_cee_stats_req_s stats_req; | ||
106 | }; | ||
107 | |||
108 | |||
109 | union bfi_cee_i2h_msg_u { | ||
110 | struct bfi_mhdr_s mh; | ||
111 | struct bfi_cee_get_rsp_s get_rsp; | ||
112 | struct bfi_cee_stats_rsp_s stats_rsp; | ||
113 | }; | ||
114 | |||
115 | #pragma pack() | ||
116 | |||
117 | |||
118 | #endif /* __BFI_CEE_H__ */ | ||
119 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_ctreg.h b/drivers/scsi/bfa/include/bfi/bfi_ctreg.h new file mode 100644 index 000000000000..d3caa58c0a0a --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_ctreg.h | |||
@@ -0,0 +1,611 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* | ||
19 | * bfi_ctreg.h catapult host block register definitions | ||
20 | * | ||
21 | * !!! Do not edit. Auto generated. !!! | ||
22 | */ | ||
23 | |||
24 | #ifndef __BFI_CTREG_H__ | ||
25 | #define __BFI_CTREG_H__ | ||
26 | |||
27 | |||
28 | #define HOSTFN0_LPU_MBOX0_0 0x00019200 | ||
29 | #define HOSTFN1_LPU_MBOX0_8 0x00019260 | ||
30 | #define LPU_HOSTFN0_MBOX0_0 0x00019280 | ||
31 | #define LPU_HOSTFN1_MBOX0_8 0x000192e0 | ||
32 | #define HOSTFN2_LPU_MBOX0_0 0x00019400 | ||
33 | #define HOSTFN3_LPU_MBOX0_8 0x00019460 | ||
34 | #define LPU_HOSTFN2_MBOX0_0 0x00019480 | ||
35 | #define LPU_HOSTFN3_MBOX0_8 0x000194e0 | ||
36 | #define HOSTFN0_INT_STATUS 0x00014000 | ||
37 | #define __HOSTFN0_HALT_OCCURRED 0x01000000 | ||
38 | #define __HOSTFN0_INT_STATUS_LVL_MK 0x00f00000 | ||
39 | #define __HOSTFN0_INT_STATUS_LVL_SH 20 | ||
40 | #define __HOSTFN0_INT_STATUS_LVL(_v) ((_v) << __HOSTFN0_INT_STATUS_LVL_SH) | ||
41 | #define __HOSTFN0_INT_STATUS_P_MK 0x000f0000 | ||
42 | #define __HOSTFN0_INT_STATUS_P_SH 16 | ||
43 | #define __HOSTFN0_INT_STATUS_P(_v) ((_v) << __HOSTFN0_INT_STATUS_P_SH) | ||
44 | #define __HOSTFN0_INT_STATUS_F 0x0000ffff | ||
45 | #define HOSTFN0_INT_MSK 0x00014004 | ||
46 | #define HOST_PAGE_NUM_FN0 0x00014008 | ||
47 | #define __HOST_PAGE_NUM_FN 0x000001ff | ||
48 | #define HOST_MSIX_ERR_INDEX_FN0 0x0001400c | ||
49 | #define __MSIX_ERR_INDEX_FN 0x000001ff | ||
50 | #define HOSTFN1_INT_STATUS 0x00014100 | ||
51 | #define __HOSTFN1_HALT_OCCURRED 0x01000000 | ||
52 | #define __HOSTFN1_INT_STATUS_LVL_MK 0x00f00000 | ||
53 | #define __HOSTFN1_INT_STATUS_LVL_SH 20 | ||
54 | #define __HOSTFN1_INT_STATUS_LVL(_v) ((_v) << __HOSTFN1_INT_STATUS_LVL_SH) | ||
55 | #define __HOSTFN1_INT_STATUS_P_MK 0x000f0000 | ||
56 | #define __HOSTFN1_INT_STATUS_P_SH 16 | ||
57 | #define __HOSTFN1_INT_STATUS_P(_v) ((_v) << __HOSTFN1_INT_STATUS_P_SH) | ||
58 | #define __HOSTFN1_INT_STATUS_F 0x0000ffff | ||
59 | #define HOSTFN1_INT_MSK 0x00014104 | ||
60 | #define HOST_PAGE_NUM_FN1 0x00014108 | ||
61 | #define HOST_MSIX_ERR_INDEX_FN1 0x0001410c | ||
62 | #define APP_PLL_425_CTL_REG 0x00014204 | ||
63 | #define __P_425_PLL_LOCK 0x80000000 | ||
64 | #define __APP_PLL_425_SRAM_USE_100MHZ 0x00100000 | ||
65 | #define __APP_PLL_425_RESET_TIMER_MK 0x000e0000 | ||
66 | #define __APP_PLL_425_RESET_TIMER_SH 17 | ||
67 | #define __APP_PLL_425_RESET_TIMER(_v) ((_v) << __APP_PLL_425_RESET_TIMER_SH) | ||
68 | #define __APP_PLL_425_LOGIC_SOFT_RESET 0x00010000 | ||
69 | #define __APP_PLL_425_CNTLMT0_1_MK 0x0000c000 | ||
70 | #define __APP_PLL_425_CNTLMT0_1_SH 14 | ||
71 | #define __APP_PLL_425_CNTLMT0_1(_v) ((_v) << __APP_PLL_425_CNTLMT0_1_SH) | ||
72 | #define __APP_PLL_425_JITLMT0_1_MK 0x00003000 | ||
73 | #define __APP_PLL_425_JITLMT0_1_SH 12 | ||
74 | #define __APP_PLL_425_JITLMT0_1(_v) ((_v) << __APP_PLL_425_JITLMT0_1_SH) | ||
75 | #define __APP_PLL_425_HREF 0x00000800 | ||
76 | #define __APP_PLL_425_HDIV 0x00000400 | ||
77 | #define __APP_PLL_425_P0_1_MK 0x00000300 | ||
78 | #define __APP_PLL_425_P0_1_SH 8 | ||
79 | #define __APP_PLL_425_P0_1(_v) ((_v) << __APP_PLL_425_P0_1_SH) | ||
80 | #define __APP_PLL_425_Z0_2_MK 0x000000e0 | ||
81 | #define __APP_PLL_425_Z0_2_SH 5 | ||
82 | #define __APP_PLL_425_Z0_2(_v) ((_v) << __APP_PLL_425_Z0_2_SH) | ||
83 | #define __APP_PLL_425_RSEL200500 0x00000010 | ||
84 | #define __APP_PLL_425_ENARST 0x00000008 | ||
85 | #define __APP_PLL_425_BYPASS 0x00000004 | ||
86 | #define __APP_PLL_425_LRESETN 0x00000002 | ||
87 | #define __APP_PLL_425_ENABLE 0x00000001 | ||
88 | #define APP_PLL_312_CTL_REG 0x00014208 | ||
89 | #define __P_312_PLL_LOCK 0x80000000 | ||
90 | #define __ENABLE_MAC_AHB_1 0x00800000 | ||
91 | #define __ENABLE_MAC_AHB_0 0x00400000 | ||
92 | #define __ENABLE_MAC_1 0x00200000 | ||
93 | #define __ENABLE_MAC_0 0x00100000 | ||
94 | #define __APP_PLL_312_RESET_TIMER_MK 0x000e0000 | ||
95 | #define __APP_PLL_312_RESET_TIMER_SH 17 | ||
96 | #define __APP_PLL_312_RESET_TIMER(_v) ((_v) << __APP_PLL_312_RESET_TIMER_SH) | ||
97 | #define __APP_PLL_312_LOGIC_SOFT_RESET 0x00010000 | ||
98 | #define __APP_PLL_312_CNTLMT0_1_MK 0x0000c000 | ||
99 | #define __APP_PLL_312_CNTLMT0_1_SH 14 | ||
100 | #define __APP_PLL_312_CNTLMT0_1(_v) ((_v) << __APP_PLL_312_CNTLMT0_1_SH) | ||
101 | #define __APP_PLL_312_JITLMT0_1_MK 0x00003000 | ||
102 | #define __APP_PLL_312_JITLMT0_1_SH 12 | ||
103 | #define __APP_PLL_312_JITLMT0_1(_v) ((_v) << __APP_PLL_312_JITLMT0_1_SH) | ||
104 | #define __APP_PLL_312_HREF 0x00000800 | ||
105 | #define __APP_PLL_312_HDIV 0x00000400 | ||
106 | #define __APP_PLL_312_P0_1_MK 0x00000300 | ||
107 | #define __APP_PLL_312_P0_1_SH 8 | ||
108 | #define __APP_PLL_312_P0_1(_v) ((_v) << __APP_PLL_312_P0_1_SH) | ||
109 | #define __APP_PLL_312_Z0_2_MK 0x000000e0 | ||
110 | #define __APP_PLL_312_Z0_2_SH 5 | ||
111 | #define __APP_PLL_312_Z0_2(_v) ((_v) << __APP_PLL_312_Z0_2_SH) | ||
112 | #define __APP_PLL_312_RSEL200500 0x00000010 | ||
113 | #define __APP_PLL_312_ENARST 0x00000008 | ||
114 | #define __APP_PLL_312_BYPASS 0x00000004 | ||
115 | #define __APP_PLL_312_LRESETN 0x00000002 | ||
116 | #define __APP_PLL_312_ENABLE 0x00000001 | ||
117 | #define MBIST_CTL_REG 0x00014220 | ||
118 | #define __EDRAM_BISTR_START 0x00000004 | ||
119 | #define __MBIST_RESET 0x00000002 | ||
120 | #define __MBIST_START 0x00000001 | ||
121 | #define MBIST_STAT_REG 0x00014224 | ||
122 | #define __EDRAM_BISTR_STATUS 0x00000008 | ||
123 | #define __EDRAM_BISTR_DONE 0x00000004 | ||
124 | #define __MEM_BIT_STATUS 0x00000002 | ||
125 | #define __MBIST_DONE 0x00000001 | ||
126 | #define HOST_SEM0_REG 0x00014230 | ||
127 | #define __HOST_SEMAPHORE 0x00000001 | ||
128 | #define HOST_SEM1_REG 0x00014234 | ||
129 | #define HOST_SEM2_REG 0x00014238 | ||
130 | #define HOST_SEM3_REG 0x0001423c | ||
131 | #define HOST_SEM0_INFO_REG 0x00014240 | ||
132 | #define HOST_SEM1_INFO_REG 0x00014244 | ||
133 | #define HOST_SEM2_INFO_REG 0x00014248 | ||
134 | #define HOST_SEM3_INFO_REG 0x0001424c | ||
135 | #define ETH_MAC_SER_REG 0x00014288 | ||
136 | #define __APP_EMS_CKBUFAMPIN 0x00000020 | ||
137 | #define __APP_EMS_REFCLKSEL 0x00000010 | ||
138 | #define __APP_EMS_CMLCKSEL 0x00000008 | ||
139 | #define __APP_EMS_REFCKBUFEN2 0x00000004 | ||
140 | #define __APP_EMS_REFCKBUFEN1 0x00000002 | ||
141 | #define __APP_EMS_CHANNEL_SEL 0x00000001 | ||
142 | #define HOSTFN2_INT_STATUS 0x00014300 | ||
143 | #define __HOSTFN2_HALT_OCCURRED 0x01000000 | ||
144 | #define __HOSTFN2_INT_STATUS_LVL_MK 0x00f00000 | ||
145 | #define __HOSTFN2_INT_STATUS_LVL_SH 20 | ||
146 | #define __HOSTFN2_INT_STATUS_LVL(_v) ((_v) << __HOSTFN2_INT_STATUS_LVL_SH) | ||
147 | #define __HOSTFN2_INT_STATUS_P_MK 0x000f0000 | ||
148 | #define __HOSTFN2_INT_STATUS_P_SH 16 | ||
149 | #define __HOSTFN2_INT_STATUS_P(_v) ((_v) << __HOSTFN2_INT_STATUS_P_SH) | ||
150 | #define __HOSTFN2_INT_STATUS_F 0x0000ffff | ||
151 | #define HOSTFN2_INT_MSK 0x00014304 | ||
152 | #define HOST_PAGE_NUM_FN2 0x00014308 | ||
153 | #define HOST_MSIX_ERR_INDEX_FN2 0x0001430c | ||
154 | #define HOSTFN3_INT_STATUS 0x00014400 | ||
155 | #define __HALT_OCCURRED 0x01000000 | ||
156 | #define __HOSTFN3_INT_STATUS_LVL_MK 0x00f00000 | ||
157 | #define __HOSTFN3_INT_STATUS_LVL_SH 20 | ||
158 | #define __HOSTFN3_INT_STATUS_LVL(_v) ((_v) << __HOSTFN3_INT_STATUS_LVL_SH) | ||
159 | #define __HOSTFN3_INT_STATUS_P_MK 0x000f0000 | ||
160 | #define __HOSTFN3_INT_STATUS_P_SH 16 | ||
161 | #define __HOSTFN3_INT_STATUS_P(_v) ((_v) << __HOSTFN3_INT_STATUS_P_SH) | ||
162 | #define __HOSTFN3_INT_STATUS_F 0x0000ffff | ||
163 | #define HOSTFN3_INT_MSK 0x00014404 | ||
164 | #define HOST_PAGE_NUM_FN3 0x00014408 | ||
165 | #define HOST_MSIX_ERR_INDEX_FN3 0x0001440c | ||
166 | #define FNC_ID_REG 0x00014600 | ||
167 | #define __FUNCTION_NUMBER 0x00000007 | ||
168 | #define FNC_PERS_REG 0x00014604 | ||
169 | #define __F3_FUNCTION_ACTIVE 0x80000000 | ||
170 | #define __F3_FUNCTION_MODE 0x40000000 | ||
171 | #define __F3_PORT_MAP_MK 0x30000000 | ||
172 | #define __F3_PORT_MAP_SH 28 | ||
173 | #define __F3_PORT_MAP(_v) ((_v) << __F3_PORT_MAP_SH) | ||
174 | #define __F3_VM_MODE 0x08000000 | ||
175 | #define __F3_INTX_STATUS_MK 0x07000000 | ||
176 | #define __F3_INTX_STATUS_SH 24 | ||
177 | #define __F3_INTX_STATUS(_v) ((_v) << __F3_INTX_STATUS_SH) | ||
178 | #define __F2_FUNCTION_ACTIVE 0x00800000 | ||
179 | #define __F2_FUNCTION_MODE 0x00400000 | ||
180 | #define __F2_PORT_MAP_MK 0x00300000 | ||
181 | #define __F2_PORT_MAP_SH 20 | ||
182 | #define __F2_PORT_MAP(_v) ((_v) << __F2_PORT_MAP_SH) | ||
183 | #define __F2_VM_MODE 0x00080000 | ||
184 | #define __F2_INTX_STATUS_MK 0x00070000 | ||
185 | #define __F2_INTX_STATUS_SH 16 | ||
186 | #define __F2_INTX_STATUS(_v) ((_v) << __F2_INTX_STATUS_SH) | ||
187 | #define __F1_FUNCTION_ACTIVE 0x00008000 | ||
188 | #define __F1_FUNCTION_MODE 0x00004000 | ||
189 | #define __F1_PORT_MAP_MK 0x00003000 | ||
190 | #define __F1_PORT_MAP_SH 12 | ||
191 | #define __F1_PORT_MAP(_v) ((_v) << __F1_PORT_MAP_SH) | ||
192 | #define __F1_VM_MODE 0x00000800 | ||
193 | #define __F1_INTX_STATUS_MK 0x00000700 | ||
194 | #define __F1_INTX_STATUS_SH 8 | ||
195 | #define __F1_INTX_STATUS(_v) ((_v) << __F1_INTX_STATUS_SH) | ||
196 | #define __F0_FUNCTION_ACTIVE 0x00000080 | ||
197 | #define __F0_FUNCTION_MODE 0x00000040 | ||
198 | #define __F0_PORT_MAP_MK 0x00000030 | ||
199 | #define __F0_PORT_MAP_SH 4 | ||
200 | #define __F0_PORT_MAP(_v) ((_v) << __F0_PORT_MAP_SH) | ||
201 | #define __F0_VM_MODE 0x00000008 | ||
202 | #define __F0_INTX_STATUS 0x00000007 | ||
203 | enum { | ||
204 | __F0_INTX_STATUS_MSIX = 0x0, | ||
205 | __F0_INTX_STATUS_INTA = 0x1, | ||
206 | __F0_INTX_STATUS_INTB = 0x2, | ||
207 | __F0_INTX_STATUS_INTC = 0x3, | ||
208 | __F0_INTX_STATUS_INTD = 0x4, | ||
209 | }; | ||
210 | #define OP_MODE 0x0001460c | ||
211 | #define __APP_ETH_CLK_LOWSPEED 0x00000004 | ||
212 | #define __GLOBAL_CORECLK_HALFSPEED 0x00000002 | ||
213 | #define __GLOBAL_FCOE_MODE 0x00000001 | ||
214 | #define HOST_SEM4_REG 0x00014610 | ||
215 | #define HOST_SEM5_REG 0x00014614 | ||
216 | #define HOST_SEM6_REG 0x00014618 | ||
217 | #define HOST_SEM7_REG 0x0001461c | ||
218 | #define HOST_SEM4_INFO_REG 0x00014620 | ||
219 | #define HOST_SEM5_INFO_REG 0x00014624 | ||
220 | #define HOST_SEM6_INFO_REG 0x00014628 | ||
221 | #define HOST_SEM7_INFO_REG 0x0001462c | ||
222 | #define HOSTFN0_LPU0_MBOX0_CMD_STAT 0x00019000 | ||
223 | #define __HOSTFN0_LPU0_MBOX0_INFO_MK 0xfffffffe | ||
224 | #define __HOSTFN0_LPU0_MBOX0_INFO_SH 1 | ||
225 | #define __HOSTFN0_LPU0_MBOX0_INFO(_v) ((_v) << __HOSTFN0_LPU0_MBOX0_INFO_SH) | ||
226 | #define __HOSTFN0_LPU0_MBOX0_CMD_STATUS 0x00000001 | ||
227 | #define HOSTFN0_LPU1_MBOX0_CMD_STAT 0x00019004 | ||
228 | #define __HOSTFN0_LPU1_MBOX0_INFO_MK 0xfffffffe | ||
229 | #define __HOSTFN0_LPU1_MBOX0_INFO_SH 1 | ||
230 | #define __HOSTFN0_LPU1_MBOX0_INFO(_v) ((_v) << __HOSTFN0_LPU1_MBOX0_INFO_SH) | ||
231 | #define __HOSTFN0_LPU1_MBOX0_CMD_STATUS 0x00000001 | ||
232 | #define LPU0_HOSTFN0_MBOX0_CMD_STAT 0x00019008 | ||
233 | #define __LPU0_HOSTFN0_MBOX0_INFO_MK 0xfffffffe | ||
234 | #define __LPU0_HOSTFN0_MBOX0_INFO_SH 1 | ||
235 | #define __LPU0_HOSTFN0_MBOX0_INFO(_v) ((_v) << __LPU0_HOSTFN0_MBOX0_INFO_SH) | ||
236 | #define __LPU0_HOSTFN0_MBOX0_CMD_STATUS 0x00000001 | ||
237 | #define LPU1_HOSTFN0_MBOX0_CMD_STAT 0x0001900c | ||
238 | #define __LPU1_HOSTFN0_MBOX0_INFO_MK 0xfffffffe | ||
239 | #define __LPU1_HOSTFN0_MBOX0_INFO_SH 1 | ||
240 | #define __LPU1_HOSTFN0_MBOX0_INFO(_v) ((_v) << __LPU1_HOSTFN0_MBOX0_INFO_SH) | ||
241 | #define __LPU1_HOSTFN0_MBOX0_CMD_STATUS 0x00000001 | ||
242 | #define HOSTFN1_LPU0_MBOX0_CMD_STAT 0x00019010 | ||
243 | #define __HOSTFN1_LPU0_MBOX0_INFO_MK 0xfffffffe | ||
244 | #define __HOSTFN1_LPU0_MBOX0_INFO_SH 1 | ||
245 | #define __HOSTFN1_LPU0_MBOX0_INFO(_v) ((_v) << __HOSTFN1_LPU0_MBOX0_INFO_SH) | ||
246 | #define __HOSTFN1_LPU0_MBOX0_CMD_STATUS 0x00000001 | ||
247 | #define HOSTFN1_LPU1_MBOX0_CMD_STAT 0x00019014 | ||
248 | #define __HOSTFN1_LPU1_MBOX0_INFO_MK 0xfffffffe | ||
249 | #define __HOSTFN1_LPU1_MBOX0_INFO_SH 1 | ||
250 | #define __HOSTFN1_LPU1_MBOX0_INFO(_v) ((_v) << __HOSTFN1_LPU1_MBOX0_INFO_SH) | ||
251 | #define __HOSTFN1_LPU1_MBOX0_CMD_STATUS 0x00000001 | ||
252 | #define LPU0_HOSTFN1_MBOX0_CMD_STAT 0x00019018 | ||
253 | #define __LPU0_HOSTFN1_MBOX0_INFO_MK 0xfffffffe | ||
254 | #define __LPU0_HOSTFN1_MBOX0_INFO_SH 1 | ||
255 | #define __LPU0_HOSTFN1_MBOX0_INFO(_v) ((_v) << __LPU0_HOSTFN1_MBOX0_INFO_SH) | ||
256 | #define __LPU0_HOSTFN1_MBOX0_CMD_STATUS 0x00000001 | ||
257 | #define LPU1_HOSTFN1_MBOX0_CMD_STAT 0x0001901c | ||
258 | #define __LPU1_HOSTFN1_MBOX0_INFO_MK 0xfffffffe | ||
259 | #define __LPU1_HOSTFN1_MBOX0_INFO_SH 1 | ||
260 | #define __LPU1_HOSTFN1_MBOX0_INFO(_v) ((_v) << __LPU1_HOSTFN1_MBOX0_INFO_SH) | ||
261 | #define __LPU1_HOSTFN1_MBOX0_CMD_STATUS 0x00000001 | ||
262 | #define HOSTFN2_LPU0_MBOX0_CMD_STAT 0x00019150 | ||
263 | #define __HOSTFN2_LPU0_MBOX0_INFO_MK 0xfffffffe | ||
264 | #define __HOSTFN2_LPU0_MBOX0_INFO_SH 1 | ||
265 | #define __HOSTFN2_LPU0_MBOX0_INFO(_v) ((_v) << __HOSTFN2_LPU0_MBOX0_INFO_SH) | ||
266 | #define __HOSTFN2_LPU0_MBOX0_CMD_STATUS 0x00000001 | ||
267 | #define HOSTFN2_LPU1_MBOX0_CMD_STAT 0x00019154 | ||
268 | #define __HOSTFN2_LPU1_MBOX0_INFO_MK 0xfffffffe | ||
269 | #define __HOSTFN2_LPU1_MBOX0_INFO_SH 1 | ||
270 | #define __HOSTFN2_LPU1_MBOX0_INFO(_v) ((_v) << __HOSTFN2_LPU1_MBOX0_INFO_SH) | ||
271 | #define __HOSTFN2_LPU1_MBOX0BOX0_CMD_STATUS 0x00000001 | ||
272 | #define LPU0_HOSTFN2_MBOX0_CMD_STAT 0x00019158 | ||
273 | #define __LPU0_HOSTFN2_MBOX0_INFO_MK 0xfffffffe | ||
274 | #define __LPU0_HOSTFN2_MBOX0_INFO_SH 1 | ||
275 | #define __LPU0_HOSTFN2_MBOX0_INFO(_v) ((_v) << __LPU0_HOSTFN2_MBOX0_INFO_SH) | ||
276 | #define __LPU0_HOSTFN2_MBOX0_CMD_STATUS 0x00000001 | ||
277 | #define LPU1_HOSTFN2_MBOX0_CMD_STAT 0x0001915c | ||
278 | #define __LPU1_HOSTFN2_MBOX0_INFO_MK 0xfffffffe | ||
279 | #define __LPU1_HOSTFN2_MBOX0_INFO_SH 1 | ||
280 | #define __LPU1_HOSTFN2_MBOX0_INFO(_v) ((_v) << __LPU1_HOSTFN2_MBOX0_INFO_SH) | ||
281 | #define __LPU1_HOSTFN2_MBOX0_CMD_STATUS 0x00000001 | ||
282 | #define HOSTFN3_LPU0_MBOX0_CMD_STAT 0x00019160 | ||
283 | #define __HOSTFN3_LPU0_MBOX0_INFO_MK 0xfffffffe | ||
284 | #define __HOSTFN3_LPU0_MBOX0_INFO_SH 1 | ||
285 | #define __HOSTFN3_LPU0_MBOX0_INFO(_v) ((_v) << __HOSTFN3_LPU0_MBOX0_INFO_SH) | ||
286 | #define __HOSTFN3_LPU0_MBOX0_CMD_STATUS 0x00000001 | ||
287 | #define HOSTFN3_LPU1_MBOX0_CMD_STAT 0x00019164 | ||
288 | #define __HOSTFN3_LPU1_MBOX0_INFO_MK 0xfffffffe | ||
289 | #define __HOSTFN3_LPU1_MBOX0_INFO_SH 1 | ||
290 | #define __HOSTFN3_LPU1_MBOX0_INFO(_v) ((_v) << __HOSTFN3_LPU1_MBOX0_INFO_SH) | ||
291 | #define __HOSTFN3_LPU1_MBOX0_CMD_STATUS 0x00000001 | ||
292 | #define LPU0_HOSTFN3_MBOX0_CMD_STAT 0x00019168 | ||
293 | #define __LPU0_HOSTFN3_MBOX0_INFO_MK 0xfffffffe | ||
294 | #define __LPU0_HOSTFN3_MBOX0_INFO_SH 1 | ||
295 | #define __LPU0_HOSTFN3_MBOX0_INFO(_v) ((_v) << __LPU0_HOSTFN3_MBOX0_INFO_SH) | ||
296 | #define __LPU0_HOSTFN3_MBOX0_CMD_STATUS 0x00000001 | ||
297 | #define LPU1_HOSTFN3_MBOX0_CMD_STAT 0x0001916c | ||
298 | #define __LPU1_HOSTFN3_MBOX0_INFO_MK 0xfffffffe | ||
299 | #define __LPU1_HOSTFN3_MBOX0_INFO_SH 1 | ||
300 | #define __LPU1_HOSTFN3_MBOX0_INFO(_v) ((_v) << __LPU1_HOSTFN3_MBOX0_INFO_SH) | ||
301 | #define __LPU1_HOSTFN3_MBOX0_CMD_STATUS 0x00000001 | ||
302 | #define FW_INIT_HALT_P0 0x000191ac | ||
303 | #define __FW_INIT_HALT_P 0x00000001 | ||
304 | #define FW_INIT_HALT_P1 0x000191bc | ||
305 | #define CPE_PI_PTR_Q0 0x00038000 | ||
306 | #define __CPE_PI_UNUSED_MK 0xffff0000 | ||
307 | #define __CPE_PI_UNUSED_SH 16 | ||
308 | #define __CPE_PI_UNUSED(_v) ((_v) << __CPE_PI_UNUSED_SH) | ||
309 | #define __CPE_PI_PTR 0x0000ffff | ||
310 | #define CPE_PI_PTR_Q1 0x00038040 | ||
311 | #define CPE_CI_PTR_Q0 0x00038004 | ||
312 | #define __CPE_CI_UNUSED_MK 0xffff0000 | ||
313 | #define __CPE_CI_UNUSED_SH 16 | ||
314 | #define __CPE_CI_UNUSED(_v) ((_v) << __CPE_CI_UNUSED_SH) | ||
315 | #define __CPE_CI_PTR 0x0000ffff | ||
316 | #define CPE_CI_PTR_Q1 0x00038044 | ||
317 | #define CPE_DEPTH_Q0 0x00038008 | ||
318 | #define __CPE_DEPTH_UNUSED_MK 0xf8000000 | ||
319 | #define __CPE_DEPTH_UNUSED_SH 27 | ||
320 | #define __CPE_DEPTH_UNUSED(_v) ((_v) << __CPE_DEPTH_UNUSED_SH) | ||
321 | #define __CPE_MSIX_VEC_INDEX_MK 0x07ff0000 | ||
322 | #define __CPE_MSIX_VEC_INDEX_SH 16 | ||
323 | #define __CPE_MSIX_VEC_INDEX(_v) ((_v) << __CPE_MSIX_VEC_INDEX_SH) | ||
324 | #define __CPE_DEPTH 0x0000ffff | ||
325 | #define CPE_DEPTH_Q1 0x00038048 | ||
326 | #define CPE_QCTRL_Q0 0x0003800c | ||
327 | #define __CPE_CTRL_UNUSED30_MK 0xfc000000 | ||
328 | #define __CPE_CTRL_UNUSED30_SH 26 | ||
329 | #define __CPE_CTRL_UNUSED30(_v) ((_v) << __CPE_CTRL_UNUSED30_SH) | ||
330 | #define __CPE_FUNC_INT_CTRL_MK 0x03000000 | ||
331 | #define __CPE_FUNC_INT_CTRL_SH 24 | ||
332 | #define __CPE_FUNC_INT_CTRL(_v) ((_v) << __CPE_FUNC_INT_CTRL_SH) | ||
333 | enum { | ||
334 | __CPE_FUNC_INT_CTRL_DISABLE = 0x0, | ||
335 | __CPE_FUNC_INT_CTRL_F2NF = 0x1, | ||
336 | __CPE_FUNC_INT_CTRL_3QUART = 0x2, | ||
337 | __CPE_FUNC_INT_CTRL_HALF = 0x3, | ||
338 | }; | ||
339 | #define __CPE_CTRL_UNUSED20_MK 0x00f00000 | ||
340 | #define __CPE_CTRL_UNUSED20_SH 20 | ||
341 | #define __CPE_CTRL_UNUSED20(_v) ((_v) << __CPE_CTRL_UNUSED20_SH) | ||
342 | #define __CPE_SCI_TH_MK 0x000f0000 | ||
343 | #define __CPE_SCI_TH_SH 16 | ||
344 | #define __CPE_SCI_TH(_v) ((_v) << __CPE_SCI_TH_SH) | ||
345 | #define __CPE_CTRL_UNUSED10_MK 0x0000c000 | ||
346 | #define __CPE_CTRL_UNUSED10_SH 14 | ||
347 | #define __CPE_CTRL_UNUSED10(_v) ((_v) << __CPE_CTRL_UNUSED10_SH) | ||
348 | #define __CPE_ACK_PENDING 0x00002000 | ||
349 | #define __CPE_CTRL_UNUSED40_MK 0x00001c00 | ||
350 | #define __CPE_CTRL_UNUSED40_SH 10 | ||
351 | #define __CPE_CTRL_UNUSED40(_v) ((_v) << __CPE_CTRL_UNUSED40_SH) | ||
352 | #define __CPE_PCIEID_MK 0x00000300 | ||
353 | #define __CPE_PCIEID_SH 8 | ||
354 | #define __CPE_PCIEID(_v) ((_v) << __CPE_PCIEID_SH) | ||
355 | #define __CPE_CTRL_UNUSED00_MK 0x000000fe | ||
356 | #define __CPE_CTRL_UNUSED00_SH 1 | ||
357 | #define __CPE_CTRL_UNUSED00(_v) ((_v) << __CPE_CTRL_UNUSED00_SH) | ||
358 | #define __CPE_ESIZE 0x00000001 | ||
359 | #define CPE_QCTRL_Q1 0x0003804c | ||
360 | #define __CPE_CTRL_UNUSED31_MK 0xfc000000 | ||
361 | #define __CPE_CTRL_UNUSED31_SH 26 | ||
362 | #define __CPE_CTRL_UNUSED31(_v) ((_v) << __CPE_CTRL_UNUSED31_SH) | ||
363 | #define __CPE_CTRL_UNUSED21_MK 0x00f00000 | ||
364 | #define __CPE_CTRL_UNUSED21_SH 20 | ||
365 | #define __CPE_CTRL_UNUSED21(_v) ((_v) << __CPE_CTRL_UNUSED21_SH) | ||
366 | #define __CPE_CTRL_UNUSED11_MK 0x0000c000 | ||
367 | #define __CPE_CTRL_UNUSED11_SH 14 | ||
368 | #define __CPE_CTRL_UNUSED11(_v) ((_v) << __CPE_CTRL_UNUSED11_SH) | ||
369 | #define __CPE_CTRL_UNUSED41_MK 0x00001c00 | ||
370 | #define __CPE_CTRL_UNUSED41_SH 10 | ||
371 | #define __CPE_CTRL_UNUSED41(_v) ((_v) << __CPE_CTRL_UNUSED41_SH) | ||
372 | #define __CPE_CTRL_UNUSED01_MK 0x000000fe | ||
373 | #define __CPE_CTRL_UNUSED01_SH 1 | ||
374 | #define __CPE_CTRL_UNUSED01(_v) ((_v) << __CPE_CTRL_UNUSED01_SH) | ||
375 | #define RME_PI_PTR_Q0 0x00038020 | ||
376 | #define __LATENCY_TIME_STAMP_MK 0xffff0000 | ||
377 | #define __LATENCY_TIME_STAMP_SH 16 | ||
378 | #define __LATENCY_TIME_STAMP(_v) ((_v) << __LATENCY_TIME_STAMP_SH) | ||
379 | #define __RME_PI_PTR 0x0000ffff | ||
380 | #define RME_PI_PTR_Q1 0x00038060 | ||
381 | #define RME_CI_PTR_Q0 0x00038024 | ||
382 | #define __DELAY_TIME_STAMP_MK 0xffff0000 | ||
383 | #define __DELAY_TIME_STAMP_SH 16 | ||
384 | #define __DELAY_TIME_STAMP(_v) ((_v) << __DELAY_TIME_STAMP_SH) | ||
385 | #define __RME_CI_PTR 0x0000ffff | ||
386 | #define RME_CI_PTR_Q1 0x00038064 | ||
387 | #define RME_DEPTH_Q0 0x00038028 | ||
388 | #define __RME_DEPTH_UNUSED_MK 0xf8000000 | ||
389 | #define __RME_DEPTH_UNUSED_SH 27 | ||
390 | #define __RME_DEPTH_UNUSED(_v) ((_v) << __RME_DEPTH_UNUSED_SH) | ||
391 | #define __RME_MSIX_VEC_INDEX_MK 0x07ff0000 | ||
392 | #define __RME_MSIX_VEC_INDEX_SH 16 | ||
393 | #define __RME_MSIX_VEC_INDEX(_v) ((_v) << __RME_MSIX_VEC_INDEX_SH) | ||
394 | #define __RME_DEPTH 0x0000ffff | ||
395 | #define RME_DEPTH_Q1 0x00038068 | ||
396 | #define RME_QCTRL_Q0 0x0003802c | ||
397 | #define __RME_INT_LATENCY_TIMER_MK 0xff000000 | ||
398 | #define __RME_INT_LATENCY_TIMER_SH 24 | ||
399 | #define __RME_INT_LATENCY_TIMER(_v) ((_v) << __RME_INT_LATENCY_TIMER_SH) | ||
400 | #define __RME_INT_DELAY_TIMER_MK 0x00ff0000 | ||
401 | #define __RME_INT_DELAY_TIMER_SH 16 | ||
402 | #define __RME_INT_DELAY_TIMER(_v) ((_v) << __RME_INT_DELAY_TIMER_SH) | ||
403 | #define __RME_INT_DELAY_DISABLE 0x00008000 | ||
404 | #define __RME_DLY_DELAY_DISABLE 0x00004000 | ||
405 | #define __RME_ACK_PENDING 0x00002000 | ||
406 | #define __RME_FULL_INTERRUPT_DISABLE 0x00001000 | ||
407 | #define __RME_CTRL_UNUSED10_MK 0x00000c00 | ||
408 | #define __RME_CTRL_UNUSED10_SH 10 | ||
409 | #define __RME_CTRL_UNUSED10(_v) ((_v) << __RME_CTRL_UNUSED10_SH) | ||
410 | #define __RME_PCIEID_MK 0x00000300 | ||
411 | #define __RME_PCIEID_SH 8 | ||
412 | #define __RME_PCIEID(_v) ((_v) << __RME_PCIEID_SH) | ||
413 | #define __RME_CTRL_UNUSED00_MK 0x000000fe | ||
414 | #define __RME_CTRL_UNUSED00_SH 1 | ||
415 | #define __RME_CTRL_UNUSED00(_v) ((_v) << __RME_CTRL_UNUSED00_SH) | ||
416 | #define __RME_ESIZE 0x00000001 | ||
417 | #define RME_QCTRL_Q1 0x0003806c | ||
418 | #define __RME_CTRL_UNUSED11_MK 0x00000c00 | ||
419 | #define __RME_CTRL_UNUSED11_SH 10 | ||
420 | #define __RME_CTRL_UNUSED11(_v) ((_v) << __RME_CTRL_UNUSED11_SH) | ||
421 | #define __RME_CTRL_UNUSED01_MK 0x000000fe | ||
422 | #define __RME_CTRL_UNUSED01_SH 1 | ||
423 | #define __RME_CTRL_UNUSED01(_v) ((_v) << __RME_CTRL_UNUSED01_SH) | ||
424 | #define PSS_CTL_REG 0x00018800 | ||
425 | #define __PSS_I2C_CLK_DIV_MK 0x007f0000 | ||
426 | #define __PSS_I2C_CLK_DIV_SH 16 | ||
427 | #define __PSS_I2C_CLK_DIV(_v) ((_v) << __PSS_I2C_CLK_DIV_SH) | ||
428 | #define __PSS_LMEM_INIT_DONE 0x00001000 | ||
429 | #define __PSS_LMEM_RESET 0x00000200 | ||
430 | #define __PSS_LMEM_INIT_EN 0x00000100 | ||
431 | #define __PSS_LPU1_RESET 0x00000002 | ||
432 | #define __PSS_LPU0_RESET 0x00000001 | ||
433 | #define HQM_QSET0_RXQ_DRBL_P0 0x00038000 | ||
434 | #define __RXQ0_ADD_VECTORS_P 0x80000000 | ||
435 | #define __RXQ0_STOP_P 0x40000000 | ||
436 | #define __RXQ0_PRD_PTR_P 0x0000ffff | ||
437 | #define HQM_QSET1_RXQ_DRBL_P0 0x00038080 | ||
438 | #define __RXQ1_ADD_VECTORS_P 0x80000000 | ||
439 | #define __RXQ1_STOP_P 0x40000000 | ||
440 | #define __RXQ1_PRD_PTR_P 0x0000ffff | ||
441 | #define HQM_QSET0_RXQ_DRBL_P1 0x0003c000 | ||
442 | #define HQM_QSET1_RXQ_DRBL_P1 0x0003c080 | ||
443 | #define HQM_QSET0_TXQ_DRBL_P0 0x00038020 | ||
444 | #define __TXQ0_ADD_VECTORS_P 0x80000000 | ||
445 | #define __TXQ0_STOP_P 0x40000000 | ||
446 | #define __TXQ0_PRD_PTR_P 0x0000ffff | ||
447 | #define HQM_QSET1_TXQ_DRBL_P0 0x000380a0 | ||
448 | #define __TXQ1_ADD_VECTORS_P 0x80000000 | ||
449 | #define __TXQ1_STOP_P 0x40000000 | ||
450 | #define __TXQ1_PRD_PTR_P 0x0000ffff | ||
451 | #define HQM_QSET0_TXQ_DRBL_P1 0x0003c020 | ||
452 | #define HQM_QSET1_TXQ_DRBL_P1 0x0003c0a0 | ||
453 | #define HQM_QSET0_IB_DRBL_1_P0 0x00038040 | ||
454 | #define __IB1_0_ACK_P 0x80000000 | ||
455 | #define __IB1_0_DISABLE_P 0x40000000 | ||
456 | #define __IB1_0_NUM_OF_ACKED_EVENTS_P 0x0000ffff | ||
457 | #define HQM_QSET1_IB_DRBL_1_P0 0x000380c0 | ||
458 | #define __IB1_1_ACK_P 0x80000000 | ||
459 | #define __IB1_1_DISABLE_P 0x40000000 | ||
460 | #define __IB1_1_NUM_OF_ACKED_EVENTS_P 0x0000ffff | ||
461 | #define HQM_QSET0_IB_DRBL_1_P1 0x0003c040 | ||
462 | #define HQM_QSET1_IB_DRBL_1_P1 0x0003c0c0 | ||
463 | #define HQM_QSET0_IB_DRBL_2_P0 0x00038060 | ||
464 | #define __IB2_0_ACK_P 0x80000000 | ||
465 | #define __IB2_0_DISABLE_P 0x40000000 | ||
466 | #define __IB2_0_NUM_OF_ACKED_EVENTS_P 0x0000ffff | ||
467 | #define HQM_QSET1_IB_DRBL_2_P0 0x000380e0 | ||
468 | #define __IB2_1_ACK_P 0x80000000 | ||
469 | #define __IB2_1_DISABLE_P 0x40000000 | ||
470 | #define __IB2_1_NUM_OF_ACKED_EVENTS_P 0x0000ffff | ||
471 | #define HQM_QSET0_IB_DRBL_2_P1 0x0003c060 | ||
472 | #define HQM_QSET1_IB_DRBL_2_P1 0x0003c0e0 | ||
473 | |||
474 | |||
475 | /* | ||
476 | * These definitions are either in error/missing in spec. Its auto-generated | ||
477 | * from hard coded values in regparse.pl. | ||
478 | */ | ||
479 | #define __EMPHPOST_AT_4G_MK_FIX 0x0000001c | ||
480 | #define __EMPHPOST_AT_4G_SH_FIX 0x00000002 | ||
481 | #define __EMPHPRE_AT_4G_FIX 0x00000003 | ||
482 | #define __SFP_TXRATE_EN_FIX 0x00000100 | ||
483 | #define __SFP_RXRATE_EN_FIX 0x00000080 | ||
484 | |||
485 | |||
486 | /* | ||
487 | * These register definitions are auto-generated from hard coded values | ||
488 | * in regparse.pl. | ||
489 | */ | ||
490 | |||
491 | |||
492 | /* | ||
493 | * These register mapping definitions are auto-generated from mapping tables | ||
494 | * in regparse.pl. | ||
495 | */ | ||
496 | #define BFA_IOC0_HBEAT_REG HOST_SEM0_INFO_REG | ||
497 | #define BFA_IOC0_STATE_REG HOST_SEM1_INFO_REG | ||
498 | #define BFA_IOC1_HBEAT_REG HOST_SEM2_INFO_REG | ||
499 | #define BFA_IOC1_STATE_REG HOST_SEM3_INFO_REG | ||
500 | #define BFA_FW_USE_COUNT HOST_SEM4_INFO_REG | ||
501 | |||
502 | #define CPE_DEPTH_Q(__n) \ | ||
503 | (CPE_DEPTH_Q0 + (__n) * (CPE_DEPTH_Q1 - CPE_DEPTH_Q0)) | ||
504 | #define CPE_QCTRL_Q(__n) \ | ||
505 | (CPE_QCTRL_Q0 + (__n) * (CPE_QCTRL_Q1 - CPE_QCTRL_Q0)) | ||
506 | #define CPE_PI_PTR_Q(__n) \ | ||
507 | (CPE_PI_PTR_Q0 + (__n) * (CPE_PI_PTR_Q1 - CPE_PI_PTR_Q0)) | ||
508 | #define CPE_CI_PTR_Q(__n) \ | ||
509 | (CPE_CI_PTR_Q0 + (__n) * (CPE_CI_PTR_Q1 - CPE_CI_PTR_Q0)) | ||
510 | #define RME_DEPTH_Q(__n) \ | ||
511 | (RME_DEPTH_Q0 + (__n) * (RME_DEPTH_Q1 - RME_DEPTH_Q0)) | ||
512 | #define RME_QCTRL_Q(__n) \ | ||
513 | (RME_QCTRL_Q0 + (__n) * (RME_QCTRL_Q1 - RME_QCTRL_Q0)) | ||
514 | #define RME_PI_PTR_Q(__n) \ | ||
515 | (RME_PI_PTR_Q0 + (__n) * (RME_PI_PTR_Q1 - RME_PI_PTR_Q0)) | ||
516 | #define RME_CI_PTR_Q(__n) \ | ||
517 | (RME_CI_PTR_Q0 + (__n) * (RME_CI_PTR_Q1 - RME_CI_PTR_Q0)) | ||
518 | #define HQM_QSET_RXQ_DRBL_P0(__n) \ | ||
519 | (HQM_QSET0_RXQ_DRBL_P0 + (__n) * (HQM_QSET1_RXQ_DRBL_P0 - \ | ||
520 | HQM_QSET0_RXQ_DRBL_P0)) | ||
521 | #define HQM_QSET_TXQ_DRBL_P0(__n) \ | ||
522 | (HQM_QSET0_TXQ_DRBL_P0 + (__n) * (HQM_QSET1_TXQ_DRBL_P0 - \ | ||
523 | HQM_QSET0_TXQ_DRBL_P0)) | ||
524 | #define HQM_QSET_IB_DRBL_1_P0(__n) \ | ||
525 | (HQM_QSET0_IB_DRBL_1_P0 + (__n) * (HQM_QSET1_IB_DRBL_1_P0 - \ | ||
526 | HQM_QSET0_IB_DRBL_1_P0)) | ||
527 | #define HQM_QSET_IB_DRBL_2_P0(__n) \ | ||
528 | (HQM_QSET0_IB_DRBL_2_P0 + (__n) * (HQM_QSET1_IB_DRBL_2_P0 - \ | ||
529 | HQM_QSET0_IB_DRBL_2_P0)) | ||
530 | #define HQM_QSET_RXQ_DRBL_P1(__n) \ | ||
531 | (HQM_QSET0_RXQ_DRBL_P1 + (__n) * (HQM_QSET1_RXQ_DRBL_P1 - \ | ||
532 | HQM_QSET0_RXQ_DRBL_P1)) | ||
533 | #define HQM_QSET_TXQ_DRBL_P1(__n) \ | ||
534 | (HQM_QSET0_TXQ_DRBL_P1 + (__n) * (HQM_QSET1_TXQ_DRBL_P1 - \ | ||
535 | HQM_QSET0_TXQ_DRBL_P1)) | ||
536 | #define HQM_QSET_IB_DRBL_1_P1(__n) \ | ||
537 | (HQM_QSET0_IB_DRBL_1_P1 + (__n) * (HQM_QSET1_IB_DRBL_1_P1 - \ | ||
538 | HQM_QSET0_IB_DRBL_1_P1)) | ||
539 | #define HQM_QSET_IB_DRBL_2_P1(__n) \ | ||
540 | (HQM_QSET0_IB_DRBL_2_P1 + (__n) * (HQM_QSET1_IB_DRBL_2_P1 - \ | ||
541 | HQM_QSET0_IB_DRBL_2_P1)) | ||
542 | |||
543 | #define CPE_Q_NUM(__fn, __q) (((__fn) << 2) + (__q)) | ||
544 | #define RME_Q_NUM(__fn, __q) (((__fn) << 2) + (__q)) | ||
545 | #define CPE_Q_MASK(__q) ((__q) & 0x3) | ||
546 | #define RME_Q_MASK(__q) ((__q) & 0x3) | ||
547 | |||
548 | |||
549 | /* | ||
550 | * PCI MSI-X vector defines | ||
551 | */ | ||
552 | enum { | ||
553 | BFA_MSIX_CPE_Q0 = 0, | ||
554 | BFA_MSIX_CPE_Q1 = 1, | ||
555 | BFA_MSIX_CPE_Q2 = 2, | ||
556 | BFA_MSIX_CPE_Q3 = 3, | ||
557 | BFA_MSIX_RME_Q0 = 4, | ||
558 | BFA_MSIX_RME_Q1 = 5, | ||
559 | BFA_MSIX_RME_Q2 = 6, | ||
560 | BFA_MSIX_RME_Q3 = 7, | ||
561 | BFA_MSIX_LPU_ERR = 8, | ||
562 | BFA_MSIX_CT_MAX = 9, | ||
563 | }; | ||
564 | |||
565 | /* | ||
566 | * And corresponding host interrupt status bit field defines | ||
567 | */ | ||
568 | #define __HFN_INT_CPE_Q0 0x00000001U | ||
569 | #define __HFN_INT_CPE_Q1 0x00000002U | ||
570 | #define __HFN_INT_CPE_Q2 0x00000004U | ||
571 | #define __HFN_INT_CPE_Q3 0x00000008U | ||
572 | #define __HFN_INT_CPE_Q4 0x00000010U | ||
573 | #define __HFN_INT_CPE_Q5 0x00000020U | ||
574 | #define __HFN_INT_CPE_Q6 0x00000040U | ||
575 | #define __HFN_INT_CPE_Q7 0x00000080U | ||
576 | #define __HFN_INT_RME_Q0 0x00000100U | ||
577 | #define __HFN_INT_RME_Q1 0x00000200U | ||
578 | #define __HFN_INT_RME_Q2 0x00000400U | ||
579 | #define __HFN_INT_RME_Q3 0x00000800U | ||
580 | #define __HFN_INT_RME_Q4 0x00001000U | ||
581 | #define __HFN_INT_RME_Q5 0x00002000U | ||
582 | #define __HFN_INT_RME_Q6 0x00004000U | ||
583 | #define __HFN_INT_RME_Q7 0x00008000U | ||
584 | #define __HFN_INT_ERR_EMC 0x00010000U | ||
585 | #define __HFN_INT_ERR_LPU0 0x00020000U | ||
586 | #define __HFN_INT_ERR_LPU1 0x00040000U | ||
587 | #define __HFN_INT_ERR_PSS 0x00080000U | ||
588 | #define __HFN_INT_MBOX_LPU0 0x00100000U | ||
589 | #define __HFN_INT_MBOX_LPU1 0x00200000U | ||
590 | #define __HFN_INT_MBOX1_LPU0 0x00400000U | ||
591 | #define __HFN_INT_MBOX1_LPU1 0x00800000U | ||
592 | #define __HFN_INT_CPE_MASK 0x000000ffU | ||
593 | #define __HFN_INT_RME_MASK 0x0000ff00U | ||
594 | |||
595 | |||
596 | /* | ||
597 | * catapult memory map. | ||
598 | */ | ||
599 | #define LL_PGN_HQM0 0x0096 | ||
600 | #define LL_PGN_HQM1 0x0097 | ||
601 | #define PSS_SMEM_PAGE_START 0x8000 | ||
602 | #define PSS_SMEM_PGNUM(_pg0, _ma) ((_pg0) + ((_ma) >> 15)) | ||
603 | #define PSS_SMEM_PGOFF(_ma) ((_ma) & 0x7fff) | ||
604 | |||
605 | /* | ||
606 | * End of catapult memory map | ||
607 | */ | ||
608 | |||
609 | |||
610 | #endif /* __BFI_CTREG_H__ */ | ||
611 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_fabric.h b/drivers/scsi/bfa/include/bfi/bfi_fabric.h new file mode 100644 index 000000000000..c0669ed41078 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_fabric.h | |||
@@ -0,0 +1,92 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_FABRIC_H__ | ||
19 | #define __BFI_FABRIC_H__ | ||
20 | |||
21 | #include <bfi/bfi.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | enum bfi_fabric_h2i_msgs { | ||
26 | BFI_FABRIC_H2I_CREATE_REQ = 1, | ||
27 | BFI_FABRIC_H2I_DELETE_REQ = 2, | ||
28 | BFI_FABRIC_H2I_SETAUTH = 3, | ||
29 | }; | ||
30 | |||
31 | enum bfi_fabric_i2h_msgs { | ||
32 | BFI_FABRIC_I2H_CREATE_RSP = BFA_I2HM(1), | ||
33 | BFI_FABRIC_I2H_DELETE_RSP = BFA_I2HM(2), | ||
34 | BFI_FABRIC_I2H_SETAUTH_RSP = BFA_I2HM(3), | ||
35 | BFI_FABRIC_I2H_ONLINE = BFA_I2HM(4), | ||
36 | BFI_FABRIC_I2H_OFFLINE = BFA_I2HM(5), | ||
37 | }; | ||
38 | |||
39 | struct bfi_fabric_create_req_s { | ||
40 | bfi_mhdr_t mh; /* common msg header */ | ||
41 | u8 vf_en; /* virtual fabric enable */ | ||
42 | u8 rsvd; | ||
43 | u16 vf_id; /* virtual fabric ID */ | ||
44 | wwn_t pwwn; /* port name */ | ||
45 | wwn_t nwwn; /* node name */ | ||
46 | }; | ||
47 | |||
48 | struct bfi_fabric_create_rsp_s { | ||
49 | bfi_mhdr_t mh; /* common msg header */ | ||
50 | u16 bfa_handle; /* host fabric handle */ | ||
51 | u8 status; /* fabric create status */ | ||
52 | u8 rsvd; | ||
53 | }; | ||
54 | |||
55 | struct bfi_fabric_delete_req_s { | ||
56 | bfi_mhdr_t mh; /* common msg header */ | ||
57 | u16 fw_handle; /* firmware fabric handle */ | ||
58 | u16 rsvd; | ||
59 | }; | ||
60 | |||
61 | struct bfi_fabric_delete_rsp_s { | ||
62 | bfi_mhdr_t mh; /* common msg header */ | ||
63 | u16 bfa_handle; /* host fabric handle */ | ||
64 | u8 status; /* fabric deletion status */ | ||
65 | u8 rsvd; | ||
66 | }; | ||
67 | |||
68 | #define BFI_FABRIC_AUTHSECRET_LEN 64 | ||
69 | struct bfi_fabric_setauth_req_s { | ||
70 | bfi_mhdr_t mh; /* common msg header */ | ||
71 | u16 fw_handle; /* f/w handle of fabric */ | ||
72 | u8 algorithm; | ||
73 | u8 group; | ||
74 | u8 secret[BFI_FABRIC_AUTHSECRET_LEN]; | ||
75 | }; | ||
76 | |||
77 | union bfi_fabric_h2i_msg_u { | ||
78 | bfi_msg_t *msg; | ||
79 | struct bfi_fabric_create_req_s *create_req; | ||
80 | struct bfi_fabric_delete_req_s *delete_req; | ||
81 | }; | ||
82 | |||
83 | union bfi_fabric_i2h_msg_u { | ||
84 | bfi_msg_t *msg; | ||
85 | struct bfi_fabric_create_rsp_s *create_rsp; | ||
86 | struct bfi_fabric_delete_rsp_s *delete_rsp; | ||
87 | }; | ||
88 | |||
89 | #pragma pack() | ||
90 | |||
91 | #endif /* __BFI_FABRIC_H__ */ | ||
92 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_fcpim.h b/drivers/scsi/bfa/include/bfi/bfi_fcpim.h new file mode 100644 index 000000000000..52c059fb4c3a --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_fcpim.h | |||
@@ -0,0 +1,301 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_FCPIM_H__ | ||
19 | #define __BFI_FCPIM_H__ | ||
20 | |||
21 | #include "bfi.h" | ||
22 | #include <protocol/fcp.h> | ||
23 | |||
24 | #pragma pack(1) | ||
25 | |||
26 | /* | ||
27 | * Initiator mode I-T nexus interface defines. | ||
28 | */ | ||
29 | |||
30 | enum bfi_itnim_h2i { | ||
31 | BFI_ITNIM_H2I_CREATE_REQ = 1, /* i-t nexus creation */ | ||
32 | BFI_ITNIM_H2I_DELETE_REQ = 2, /* i-t nexus deletion */ | ||
33 | }; | ||
34 | |||
35 | enum bfi_itnim_i2h { | ||
36 | BFI_ITNIM_I2H_CREATE_RSP = BFA_I2HM(1), | ||
37 | BFI_ITNIM_I2H_DELETE_RSP = BFA_I2HM(2), | ||
38 | BFI_ITNIM_I2H_SLER_EVENT = BFA_I2HM(3), | ||
39 | }; | ||
40 | |||
41 | struct bfi_itnim_create_req_s { | ||
42 | struct bfi_mhdr_s mh; /* common msg header */ | ||
43 | u16 fw_handle; /* f/w handle for itnim */ | ||
44 | u8 class; /* FC class for IO */ | ||
45 | u8 seq_rec; /* sequence recovery support */ | ||
46 | u8 msg_no; /* seq id of the msg */ | ||
47 | }; | ||
48 | |||
49 | struct bfi_itnim_create_rsp_s { | ||
50 | struct bfi_mhdr_s mh; /* common msg header */ | ||
51 | u16 bfa_handle; /* bfa handle for itnim */ | ||
52 | u8 status; /* fcp request status */ | ||
53 | u8 seq_id; /* seq id of the msg */ | ||
54 | }; | ||
55 | |||
56 | struct bfi_itnim_delete_req_s { | ||
57 | struct bfi_mhdr_s mh; /* common msg header */ | ||
58 | u16 fw_handle; /* f/w itnim handle */ | ||
59 | u8 seq_id; /* seq id of the msg */ | ||
60 | u8 rsvd; | ||
61 | }; | ||
62 | |||
63 | struct bfi_itnim_delete_rsp_s { | ||
64 | struct bfi_mhdr_s mh; /* common msg header */ | ||
65 | u16 bfa_handle; /* bfa handle for itnim */ | ||
66 | u8 status; /* fcp request status */ | ||
67 | u8 seq_id; /* seq id of the msg */ | ||
68 | }; | ||
69 | |||
70 | struct bfi_itnim_sler_event_s { | ||
71 | struct bfi_mhdr_s mh; /* common msg header */ | ||
72 | u16 bfa_handle; /* bfa handle for itnim */ | ||
73 | u16 rsvd; | ||
74 | }; | ||
75 | |||
76 | union bfi_itnim_h2i_msg_u { | ||
77 | struct bfi_itnim_create_req_s *create_req; | ||
78 | struct bfi_itnim_delete_req_s *delete_req; | ||
79 | struct bfi_msg_s *msg; | ||
80 | }; | ||
81 | |||
82 | union bfi_itnim_i2h_msg_u { | ||
83 | struct bfi_itnim_create_rsp_s *create_rsp; | ||
84 | struct bfi_itnim_delete_rsp_s *delete_rsp; | ||
85 | struct bfi_itnim_sler_event_s *sler_event; | ||
86 | struct bfi_msg_s *msg; | ||
87 | }; | ||
88 | |||
89 | /* | ||
90 | * Initiator mode IO interface defines. | ||
91 | */ | ||
92 | |||
93 | enum bfi_ioim_h2i { | ||
94 | BFI_IOIM_H2I_IOABORT_REQ = 1, /* IO abort request */ | ||
95 | BFI_IOIM_H2I_IOCLEANUP_REQ = 2, /* IO cleanup request */ | ||
96 | }; | ||
97 | |||
98 | enum bfi_ioim_i2h { | ||
99 | BFI_IOIM_I2H_IO_RSP = BFA_I2HM(1), /* non-fp IO response */ | ||
100 | BFI_IOIM_I2H_IOABORT_RSP = BFA_I2HM(2),/* ABORT rsp */ | ||
101 | }; | ||
102 | |||
103 | /** | ||
104 | * IO command DIF info | ||
105 | */ | ||
106 | struct bfi_ioim_dif_s { | ||
107 | u32 dif_info[4]; | ||
108 | }; | ||
109 | |||
110 | /** | ||
111 | * FCP IO messages overview | ||
112 | * | ||
113 | * @note | ||
114 | * - Max CDB length supported is 64 bytes. | ||
115 | * - SCSI Linked commands and SCSI bi-directional Commands not | ||
116 | * supported. | ||
117 | * | ||
118 | */ | ||
119 | struct bfi_ioim_req_s { | ||
120 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
121 | u16 io_tag; /* I/O tag */ | ||
122 | u16 rport_hdl; /* itnim/rport firmware handle */ | ||
123 | struct fcp_cmnd_s cmnd; /* IO request info */ | ||
124 | |||
125 | /** | ||
126 | * SG elements array within the IO request must be double word | ||
127 | * aligned. This aligment is required to optimize SGM setup for the IO. | ||
128 | */ | ||
129 | struct bfi_sge_s sges[BFI_SGE_INLINE_MAX]; | ||
130 | u8 io_timeout; | ||
131 | u8 dif_en; | ||
132 | u8 rsvd_a[2]; | ||
133 | struct bfi_ioim_dif_s dif; | ||
134 | }; | ||
135 | |||
136 | /** | ||
137 | * This table shows various IO status codes from firmware and their | ||
138 | * meaning. Host driver can use these status codes to further process | ||
139 | * IO completions. | ||
140 | * | ||
141 | * BFI_IOIM_STS_OK : IO completed with error free SCSI & | ||
142 | * transport status. | ||
143 | * - io-tag can be reused. | ||
144 | * | ||
145 | * BFA_IOIM_STS_SCSI_ERR : IO completed with scsi error. | ||
146 | * - io-tag can be reused. | ||
147 | * | ||
148 | * BFI_IOIM_STS_HOST_ABORTED : IO was aborted successfully due to | ||
149 | * host request. | ||
150 | * - io-tag cannot be reused yet. | ||
151 | * | ||
152 | * BFI_IOIM_STS_ABORTED : IO was aborted successfully | ||
153 | * internally by f/w. | ||
154 | * - io-tag cannot be reused yet. | ||
155 | * | ||
156 | * BFI_IOIM_STS_TIMEDOUT : IO timedout and ABTS/RRQ is happening | ||
157 | * in the firmware and | ||
158 | * - io-tag cannot be reused yet. | ||
159 | * | ||
160 | * BFI_IOIM_STS_SQER_NEEDED : Firmware could not recover the IO | ||
161 | * with sequence level error | ||
162 | * logic and hence host needs to retry | ||
163 | * this IO with a different IO tag | ||
164 | * - io-tag cannot be used yet. | ||
165 | * | ||
166 | * BFI_IOIM_STS_NEXUS_ABORT : Second Level Error Recovery from host | ||
167 | * is required because 2 consecutive ABTS | ||
168 | * timedout and host needs logout and | ||
169 | * re-login with the target | ||
170 | * - io-tag cannot be used yet. | ||
171 | * | ||
172 | * BFI_IOIM_STS_UNDERRUN : IO completed with SCSI status good, | ||
173 | * but the data tranferred is less than | ||
174 | * the fcp data length in the command. | ||
175 | * ex. SCSI INQUIRY where transferred | ||
176 | * data length and residue count in FCP | ||
177 | * response accounts for total fcp-dl | ||
178 | * - io-tag can be reused. | ||
179 | * | ||
180 | * BFI_IOIM_STS_OVERRUN : IO completed with SCSI status good, | ||
181 | * but the data transerred is more than | ||
182 | * fcp data length in the command. ex. | ||
183 | * TAPE IOs where blocks can of unequal | ||
184 | * lengths. | ||
185 | * - io-tag can be reused. | ||
186 | * | ||
187 | * BFI_IOIM_STS_RES_FREE : Firmware has completed using io-tag | ||
188 | * during abort process | ||
189 | * - io-tag can be reused. | ||
190 | * | ||
191 | * BFI_IOIM_STS_PROTO_ERR : Firmware detected a protocol error. | ||
192 | * ex target sent more data than | ||
193 | * requested, or there was data frame | ||
194 | * loss and other reasons | ||
195 | * - io-tag cannot be used yet. | ||
196 | * | ||
197 | * BFI_IOIM_STS_DIF_ERR : Firwmare detected DIF error. ex: DIF | ||
198 | * CRC err or Ref Tag err or App tag err. | ||
199 | * - io-tag can be reused. | ||
200 | * | ||
201 | * BFA_IOIM_STS_TSK_MGT_ABORT : IO was aborted because of Task | ||
202 | * Management command from the host | ||
203 | * - io-tag can be reused. | ||
204 | * | ||
205 | * BFI_IOIM_STS_UTAG : Firmware does not know about this | ||
206 | * io_tag. | ||
207 | * - io-tag can be reused. | ||
208 | */ | ||
209 | enum bfi_ioim_status { | ||
210 | BFI_IOIM_STS_OK = 0, | ||
211 | BFI_IOIM_STS_HOST_ABORTED = 1, | ||
212 | BFI_IOIM_STS_ABORTED = 2, | ||
213 | BFI_IOIM_STS_TIMEDOUT = 3, | ||
214 | BFI_IOIM_STS_RES_FREE = 4, | ||
215 | BFI_IOIM_STS_SQER_NEEDED = 5, | ||
216 | BFI_IOIM_STS_PROTO_ERR = 6, | ||
217 | BFI_IOIM_STS_UTAG = 7, | ||
218 | BFI_IOIM_STS_PATHTOV = 8, | ||
219 | }; | ||
220 | |||
221 | #define BFI_IOIM_SNSLEN (256) | ||
222 | /** | ||
223 | * I/O response message | ||
224 | */ | ||
225 | struct bfi_ioim_rsp_s { | ||
226 | struct bfi_mhdr_s mh; /* common msg header */ | ||
227 | u16 io_tag; /* completed IO tag */ | ||
228 | u16 bfa_rport_hndl; /* releated rport handle */ | ||
229 | u8 io_status; /* IO completion status */ | ||
230 | u8 reuse_io_tag; /* IO tag can be reused */ | ||
231 | u16 abort_tag; /* host abort request tag */ | ||
232 | u8 scsi_status; /* scsi status from target */ | ||
233 | u8 sns_len; /* scsi sense length */ | ||
234 | u8 resid_flags; /* IO residue flags */ | ||
235 | u8 rsvd_a; | ||
236 | u32 residue; /* IO residual length in bytes */ | ||
237 | u32 rsvd_b[3]; | ||
238 | }; | ||
239 | |||
240 | struct bfi_ioim_abort_req_s { | ||
241 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
242 | u16 io_tag; /* I/O tag */ | ||
243 | u16 abort_tag; /* unique request tag */ | ||
244 | }; | ||
245 | |||
246 | /* | ||
247 | * Initiator mode task management command interface defines. | ||
248 | */ | ||
249 | |||
250 | enum bfi_tskim_h2i { | ||
251 | BFI_TSKIM_H2I_TM_REQ = 1, /* task-mgmt command */ | ||
252 | BFI_TSKIM_H2I_ABORT_REQ = 2, /* task-mgmt command */ | ||
253 | }; | ||
254 | |||
255 | enum bfi_tskim_i2h { | ||
256 | BFI_TSKIM_I2H_TM_RSP = BFA_I2HM(1), | ||
257 | }; | ||
258 | |||
259 | struct bfi_tskim_req_s { | ||
260 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
261 | u16 tsk_tag; /* task management tag */ | ||
262 | u16 itn_fhdl; /* itn firmware handle */ | ||
263 | lun_t lun; /* LU number */ | ||
264 | u8 tm_flags; /* see fcp_tm_cmnd_t */ | ||
265 | u8 t_secs; /* Timeout value in seconds */ | ||
266 | u8 rsvd[2]; | ||
267 | }; | ||
268 | |||
269 | struct bfi_tskim_abortreq_s { | ||
270 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
271 | u16 tsk_tag; /* task management tag */ | ||
272 | u16 rsvd; | ||
273 | }; | ||
274 | |||
275 | enum bfi_tskim_status { | ||
276 | /* | ||
277 | * Following are FCP-4 spec defined status codes, | ||
278 | * **DO NOT CHANGE THEM ** | ||
279 | */ | ||
280 | BFI_TSKIM_STS_OK = 0, | ||
281 | BFI_TSKIM_STS_NOT_SUPP = 4, | ||
282 | BFI_TSKIM_STS_FAILED = 5, | ||
283 | |||
284 | /** | ||
285 | * Defined by BFA | ||
286 | */ | ||
287 | BFI_TSKIM_STS_TIMEOUT = 10, /* TM request timedout */ | ||
288 | BFI_TSKIM_STS_ABORTED = 11, /* Aborted on host request */ | ||
289 | }; | ||
290 | |||
291 | struct bfi_tskim_rsp_s { | ||
292 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
293 | u16 tsk_tag; /* task mgmt cmnd tag */ | ||
294 | u8 tsk_status; /* @ref bfi_tskim_status */ | ||
295 | u8 rsvd; | ||
296 | }; | ||
297 | |||
298 | #pragma pack() | ||
299 | |||
300 | #endif /* __BFI_FCPIM_H__ */ | ||
301 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_fcxp.h b/drivers/scsi/bfa/include/bfi/bfi_fcxp.h new file mode 100644 index 000000000000..e0e995a32828 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_fcxp.h | |||
@@ -0,0 +1,71 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_FCXP_H__ | ||
19 | #define __BFI_FCXP_H__ | ||
20 | |||
21 | #include "bfi.h" | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | enum bfi_fcxp_h2i { | ||
26 | BFI_FCXP_H2I_SEND_REQ = 1, | ||
27 | }; | ||
28 | |||
29 | enum bfi_fcxp_i2h { | ||
30 | BFI_FCXP_I2H_SEND_RSP = BFA_I2HM(1), | ||
31 | }; | ||
32 | |||
33 | #define BFA_FCXP_MAX_SGES 2 | ||
34 | |||
35 | /** | ||
36 | * FCXP send request structure | ||
37 | */ | ||
38 | struct bfi_fcxp_send_req_s { | ||
39 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
40 | u16 fcxp_tag; /* driver request tag */ | ||
41 | u16 max_frmsz; /* max send frame size */ | ||
42 | u16 vf_id; /* vsan tag if applicable */ | ||
43 | u16 rport_fw_hndl; /* FW Handle for the remote port */ | ||
44 | u8 class; /* FC class used for req/rsp */ | ||
45 | u8 rsp_timeout; /* timeout in secs, 0-no response */ | ||
46 | u8 cts; /* continue sequence */ | ||
47 | u8 lp_tag; /* lport tag */ | ||
48 | struct fchs_s fchs; /* request FC header structure */ | ||
49 | u32 req_len; /* request payload length */ | ||
50 | u32 rsp_maxlen; /* max response length expected */ | ||
51 | struct bfi_sge_s req_sge[BFA_FCXP_MAX_SGES]; /* request buf */ | ||
52 | struct bfi_sge_s rsp_sge[BFA_FCXP_MAX_SGES]; /* response buf */ | ||
53 | }; | ||
54 | |||
55 | /** | ||
56 | * FCXP send response structure | ||
57 | */ | ||
58 | struct bfi_fcxp_send_rsp_s { | ||
59 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
60 | u16 fcxp_tag; /* send request tag */ | ||
61 | u8 req_status; /* request status */ | ||
62 | u8 rsvd; | ||
63 | u32 rsp_len; /* actual response length */ | ||
64 | u32 residue_len; /* residual response length */ | ||
65 | struct fchs_s fchs; /* response FC header structure */ | ||
66 | }; | ||
67 | |||
68 | #pragma pack() | ||
69 | |||
70 | #endif /* __BFI_FCXP_H__ */ | ||
71 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_ioc.h b/drivers/scsi/bfa/include/bfi/bfi_ioc.h new file mode 100644 index 000000000000..026e9c06ae97 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_ioc.h | |||
@@ -0,0 +1,202 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_IOC_H__ | ||
19 | #define __BFI_IOC_H__ | ||
20 | |||
21 | #include "bfi.h" | ||
22 | #include <defs/bfa_defs_ioc.h> | ||
23 | |||
24 | #pragma pack(1) | ||
25 | |||
26 | enum bfi_ioc_h2i_msgs { | ||
27 | BFI_IOC_H2I_ENABLE_REQ = 1, | ||
28 | BFI_IOC_H2I_DISABLE_REQ = 2, | ||
29 | BFI_IOC_H2I_GETATTR_REQ = 3, | ||
30 | BFI_IOC_H2I_DBG_SYNC = 4, | ||
31 | BFI_IOC_H2I_DBG_DUMP = 5, | ||
32 | }; | ||
33 | |||
34 | enum bfi_ioc_i2h_msgs { | ||
35 | BFI_IOC_I2H_ENABLE_REPLY = BFA_I2HM(1), | ||
36 | BFI_IOC_I2H_DISABLE_REPLY = BFA_I2HM(2), | ||
37 | BFI_IOC_I2H_GETATTR_REPLY = BFA_I2HM(3), | ||
38 | BFI_IOC_I2H_READY_EVENT = BFA_I2HM(4), | ||
39 | BFI_IOC_I2H_HBEAT = BFA_I2HM(5), | ||
40 | }; | ||
41 | |||
42 | /** | ||
43 | * BFI_IOC_H2I_GETATTR_REQ message | ||
44 | */ | ||
45 | struct bfi_ioc_getattr_req_s { | ||
46 | struct bfi_mhdr_s mh; | ||
47 | union bfi_addr_u attr_addr; | ||
48 | }; | ||
49 | |||
50 | struct bfi_ioc_attr_s { | ||
51 | wwn_t mfg_wwn; | ||
52 | mac_t mfg_mac; | ||
53 | u16 rsvd_a; | ||
54 | char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)]; | ||
55 | u8 pcie_gen; | ||
56 | u8 pcie_lanes_orig; | ||
57 | u8 pcie_lanes; | ||
58 | u8 rx_bbcredit; /* receive buffer credits */ | ||
59 | u32 adapter_prop; /* adapter properties */ | ||
60 | u16 maxfrsize; /* max receive frame size */ | ||
61 | char asic_rev; | ||
62 | u8 rsvd_b; | ||
63 | char fw_version[BFA_VERSION_LEN]; | ||
64 | char optrom_version[BFA_VERSION_LEN]; | ||
65 | struct bfa_mfg_vpd_s vpd; | ||
66 | }; | ||
67 | |||
68 | /** | ||
69 | * BFI_IOC_I2H_GETATTR_REPLY message | ||
70 | */ | ||
71 | struct bfi_ioc_getattr_reply_s { | ||
72 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
73 | u8 status; /* cfg reply status */ | ||
74 | u8 rsvd[3]; | ||
75 | }; | ||
76 | |||
77 | /** | ||
78 | * Firmware memory page offsets | ||
79 | */ | ||
80 | #define BFI_IOC_SMEM_PG0_CB (0x40) | ||
81 | #define BFI_IOC_SMEM_PG0_CT (0x180) | ||
82 | |||
83 | /** | ||
84 | * Firmware trace offset | ||
85 | */ | ||
86 | #define BFI_IOC_TRC_OFF (0x4b00) | ||
87 | #define BFI_IOC_TRC_ENTS 256 | ||
88 | |||
89 | #define BFI_IOC_FW_SIGNATURE (0xbfadbfad) | ||
90 | #define BFI_IOC_MD5SUM_SZ 4 | ||
91 | struct bfi_ioc_image_hdr_s { | ||
92 | u32 signature; /* constant signature */ | ||
93 | u32 rsvd_a; | ||
94 | u32 exec; /* exec vector */ | ||
95 | u32 param; /* parameters */ | ||
96 | u32 rsvd_b[4]; | ||
97 | u32 md5sum[BFI_IOC_MD5SUM_SZ]; | ||
98 | }; | ||
99 | |||
100 | /** | ||
101 | * BFI_IOC_I2H_READY_EVENT message | ||
102 | */ | ||
103 | struct bfi_ioc_rdy_event_s { | ||
104 | struct bfi_mhdr_s mh; /* common msg header */ | ||
105 | u8 init_status; /* init event status */ | ||
106 | u8 rsvd[3]; | ||
107 | }; | ||
108 | |||
109 | struct bfi_ioc_hbeat_s { | ||
110 | struct bfi_mhdr_s mh; /* common msg header */ | ||
111 | u32 hb_count; /* current heart beat count */ | ||
112 | }; | ||
113 | |||
114 | /** | ||
115 | * IOC hardware/firmware state | ||
116 | */ | ||
117 | enum bfi_ioc_state { | ||
118 | BFI_IOC_UNINIT = 0, /* not initialized */ | ||
119 | BFI_IOC_INITING = 1, /* h/w is being initialized */ | ||
120 | BFI_IOC_HWINIT = 2, /* h/w is initialized */ | ||
121 | BFI_IOC_CFG = 3, /* IOC configuration in progress */ | ||
122 | BFI_IOC_OP = 4, /* IOC is operational */ | ||
123 | BFI_IOC_DISABLING = 5, /* IOC is being disabled */ | ||
124 | BFI_IOC_DISABLED = 6, /* IOC is disabled */ | ||
125 | BFI_IOC_CFG_DISABLED = 7, /* IOC is being disabled;transient */ | ||
126 | BFI_IOC_HBFAIL = 8, /* IOC heart-beat failure */ | ||
127 | BFI_IOC_MEMTEST = 9, /* IOC is doing memtest */ | ||
128 | }; | ||
129 | |||
130 | #define BFI_IOC_ENDIAN_SIG 0x12345678 | ||
131 | |||
132 | enum { | ||
133 | BFI_ADAPTER_TYPE_FC = 0x01, /* FC adapters */ | ||
134 | BFI_ADAPTER_TYPE_MK = 0x0f0000, /* adapter type mask */ | ||
135 | BFI_ADAPTER_TYPE_SH = 16, /* adapter type shift */ | ||
136 | BFI_ADAPTER_NPORTS_MK = 0xff00, /* number of ports mask */ | ||
137 | BFI_ADAPTER_NPORTS_SH = 8, /* number of ports shift */ | ||
138 | BFI_ADAPTER_SPEED_MK = 0xff, /* adapter speed mask */ | ||
139 | BFI_ADAPTER_SPEED_SH = 0, /* adapter speed shift */ | ||
140 | BFI_ADAPTER_PROTO = 0x100000, /* prototype adapaters */ | ||
141 | BFI_ADAPTER_TTV = 0x200000, /* TTV debug capable */ | ||
142 | BFI_ADAPTER_UNSUPP = 0x400000, /* unknown adapter type */ | ||
143 | }; | ||
144 | |||
145 | #define BFI_ADAPTER_GETP(__prop,__adap_prop) \ | ||
146 | (((__adap_prop) & BFI_ADAPTER_ ## __prop ## _MK) >> \ | ||
147 | BFI_ADAPTER_ ## __prop ## _SH) | ||
148 | #define BFI_ADAPTER_SETP(__prop, __val) \ | ||
149 | ((__val) << BFI_ADAPTER_ ## __prop ## _SH) | ||
150 | #define BFI_ADAPTER_IS_PROTO(__adap_type) \ | ||
151 | ((__adap_type) & BFI_ADAPTER_PROTO) | ||
152 | #define BFI_ADAPTER_IS_TTV(__adap_type) \ | ||
153 | ((__adap_type) & BFI_ADAPTER_TTV) | ||
154 | #define BFI_ADAPTER_IS_UNSUPP(__adap_type) \ | ||
155 | ((__adap_type) & BFI_ADAPTER_UNSUPP) | ||
156 | #define BFI_ADAPTER_IS_SPECIAL(__adap_type) \ | ||
157 | ((__adap_type) & (BFI_ADAPTER_TTV | BFI_ADAPTER_PROTO | \ | ||
158 | BFI_ADAPTER_UNSUPP)) | ||
159 | |||
160 | /** | ||
161 | * BFI_IOC_H2I_ENABLE_REQ & BFI_IOC_H2I_DISABLE_REQ messages | ||
162 | */ | ||
163 | struct bfi_ioc_ctrl_req_s { | ||
164 | struct bfi_mhdr_s mh; | ||
165 | u8 ioc_class; | ||
166 | u8 rsvd[3]; | ||
167 | }; | ||
168 | |||
169 | /** | ||
170 | * BFI_IOC_I2H_ENABLE_REPLY & BFI_IOC_I2H_DISABLE_REPLY messages | ||
171 | */ | ||
172 | struct bfi_ioc_ctrl_reply_s { | ||
173 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
174 | u8 status; /* enable/disable status */ | ||
175 | u8 rsvd[3]; | ||
176 | }; | ||
177 | |||
178 | #define BFI_IOC_MSGSZ 8 | ||
179 | /** | ||
180 | * H2I Messages | ||
181 | */ | ||
182 | union bfi_ioc_h2i_msg_u { | ||
183 | struct bfi_mhdr_s mh; | ||
184 | struct bfi_ioc_ctrl_req_s enable_req; | ||
185 | struct bfi_ioc_ctrl_req_s disable_req; | ||
186 | struct bfi_ioc_getattr_req_s getattr_req; | ||
187 | u32 mboxmsg[BFI_IOC_MSGSZ]; | ||
188 | }; | ||
189 | |||
190 | /** | ||
191 | * I2H Messages | ||
192 | */ | ||
193 | union bfi_ioc_i2h_msg_u { | ||
194 | struct bfi_mhdr_s mh; | ||
195 | struct bfi_ioc_rdy_event_s rdy_event; | ||
196 | u32 mboxmsg[BFI_IOC_MSGSZ]; | ||
197 | }; | ||
198 | |||
199 | #pragma pack() | ||
200 | |||
201 | #endif /* __BFI_IOC_H__ */ | ||
202 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_iocfc.h b/drivers/scsi/bfa/include/bfi/bfi_iocfc.h new file mode 100644 index 000000000000..c3760df72575 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_iocfc.h | |||
@@ -0,0 +1,177 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_IOCFC_H__ | ||
19 | #define __BFI_IOCFC_H__ | ||
20 | |||
21 | #include "bfi.h" | ||
22 | #include <defs/bfa_defs_ioc.h> | ||
23 | #include <defs/bfa_defs_iocfc.h> | ||
24 | #include <defs/bfa_defs_boot.h> | ||
25 | |||
26 | #pragma pack(1) | ||
27 | |||
28 | enum bfi_iocfc_h2i_msgs { | ||
29 | BFI_IOCFC_H2I_CFG_REQ = 1, | ||
30 | BFI_IOCFC_H2I_GET_STATS_REQ = 2, | ||
31 | BFI_IOCFC_H2I_CLEAR_STATS_REQ = 3, | ||
32 | BFI_IOCFC_H2I_SET_INTR_REQ = 4, | ||
33 | BFI_IOCFC_H2I_UPDATEQ_REQ = 5, | ||
34 | }; | ||
35 | |||
36 | enum bfi_iocfc_i2h_msgs { | ||
37 | BFI_IOCFC_I2H_CFG_REPLY = BFA_I2HM(1), | ||
38 | BFI_IOCFC_I2H_GET_STATS_RSP = BFA_I2HM(2), | ||
39 | BFI_IOCFC_I2H_CLEAR_STATS_RSP = BFA_I2HM(3), | ||
40 | BFI_IOCFC_I2H_UPDATEQ_RSP = BFA_I2HM(5), | ||
41 | }; | ||
42 | |||
43 | struct bfi_iocfc_cfg_s { | ||
44 | u8 num_cqs; /* Number of CQs to be used */ | ||
45 | u8 sense_buf_len; /* SCSI sense length */ | ||
46 | u8 trunk_enabled; /* port trunking enabled */ | ||
47 | u8 trunk_ports; /* trunk ports bit map */ | ||
48 | u32 endian_sig; /* endian signature of host */ | ||
49 | |||
50 | /** | ||
51 | * Request and response circular queue base addresses, size and | ||
52 | * shadow index pointers. | ||
53 | */ | ||
54 | union bfi_addr_u req_cq_ba[BFI_IOC_MAX_CQS]; | ||
55 | union bfi_addr_u req_shadow_ci[BFI_IOC_MAX_CQS]; | ||
56 | u16 req_cq_elems[BFI_IOC_MAX_CQS]; | ||
57 | union bfi_addr_u rsp_cq_ba[BFI_IOC_MAX_CQS]; | ||
58 | union bfi_addr_u rsp_shadow_pi[BFI_IOC_MAX_CQS]; | ||
59 | u16 rsp_cq_elems[BFI_IOC_MAX_CQS]; | ||
60 | |||
61 | union bfi_addr_u stats_addr; /* DMA-able address for stats */ | ||
62 | union bfi_addr_u cfgrsp_addr; /* config response dma address */ | ||
63 | union bfi_addr_u ioim_snsbase; /* IO sense buffer base address */ | ||
64 | struct bfa_iocfc_intr_attr_s intr_attr; /* IOC interrupt attributes */ | ||
65 | }; | ||
66 | |||
67 | /** | ||
68 | * Boot target wwn information for this port. This contains either the stored | ||
69 | * or discovered boot target port wwns for the port. | ||
70 | */ | ||
71 | struct bfi_iocfc_bootwwns { | ||
72 | wwn_t wwn[BFA_BOOT_BOOTLUN_MAX]; | ||
73 | u8 nwwns; | ||
74 | u8 rsvd[7]; | ||
75 | }; | ||
76 | |||
77 | struct bfi_iocfc_cfgrsp_s { | ||
78 | struct bfa_iocfc_fwcfg_s fwcfg; | ||
79 | struct bfa_iocfc_intr_attr_s intr_attr; | ||
80 | struct bfi_iocfc_bootwwns bootwwns; | ||
81 | }; | ||
82 | |||
83 | /** | ||
84 | * BFI_IOCFC_H2I_CFG_REQ message | ||
85 | */ | ||
86 | struct bfi_iocfc_cfg_req_s { | ||
87 | struct bfi_mhdr_s mh; | ||
88 | union bfi_addr_u ioc_cfg_dma_addr; | ||
89 | }; | ||
90 | |||
91 | /** | ||
92 | * BFI_IOCFC_I2H_CFG_REPLY message | ||
93 | */ | ||
94 | struct bfi_iocfc_cfg_reply_s { | ||
95 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
96 | u8 cfg_success; /* cfg reply status */ | ||
97 | u8 lpu_bm; /* LPUs assigned for this IOC */ | ||
98 | u8 rsvd[2]; | ||
99 | }; | ||
100 | |||
101 | /** | ||
102 | * BFI_IOCFC_H2I_GET_STATS_REQ & BFI_IOCFC_H2I_CLEAR_STATS_REQ messages | ||
103 | */ | ||
104 | struct bfi_iocfc_stats_req_s { | ||
105 | struct bfi_mhdr_s mh; /* msg header */ | ||
106 | u32 msgtag; /* msgtag for reply */ | ||
107 | }; | ||
108 | |||
109 | /** | ||
110 | * BFI_IOCFC_I2H_GET_STATS_RSP & BFI_IOCFC_I2H_CLEAR_STATS_RSP messages | ||
111 | */ | ||
112 | struct bfi_iocfc_stats_rsp_s { | ||
113 | struct bfi_mhdr_s mh; /* common msg header */ | ||
114 | u8 status; /* reply status */ | ||
115 | u8 rsvd[3]; | ||
116 | u32 msgtag; /* msgtag for reply */ | ||
117 | }; | ||
118 | |||
119 | /** | ||
120 | * BFI_IOCFC_H2I_SET_INTR_REQ message | ||
121 | */ | ||
122 | struct bfi_iocfc_set_intr_req_s { | ||
123 | struct bfi_mhdr_s mh; /* common msg header */ | ||
124 | u8 coalesce; /* enable intr coalescing*/ | ||
125 | u8 rsvd[3]; | ||
126 | u16 delay; /* delay timer 0..1125us */ | ||
127 | u16 latency; /* latency timer 0..225us */ | ||
128 | }; | ||
129 | |||
130 | /** | ||
131 | * BFI_IOCFC_H2I_UPDATEQ_REQ message | ||
132 | */ | ||
133 | struct bfi_iocfc_updateq_req_s { | ||
134 | struct bfi_mhdr_s mh; /* common msg header */ | ||
135 | u32 reqq_ba; /* reqq base addr */ | ||
136 | u32 rspq_ba; /* rspq base addr */ | ||
137 | u32 reqq_sci; /* reqq shadow ci */ | ||
138 | u32 rspq_spi; /* rspq shadow pi */ | ||
139 | }; | ||
140 | |||
141 | /** | ||
142 | * BFI_IOCFC_I2H_UPDATEQ_RSP message | ||
143 | */ | ||
144 | struct bfi_iocfc_updateq_rsp_s { | ||
145 | struct bfi_mhdr_s mh; /* common msg header */ | ||
146 | u8 status; /* updateq status */ | ||
147 | u8 rsvd[3]; | ||
148 | }; | ||
149 | |||
150 | /** | ||
151 | * H2I Messages | ||
152 | */ | ||
153 | union bfi_iocfc_h2i_msg_u { | ||
154 | struct bfi_mhdr_s mh; | ||
155 | struct bfi_iocfc_cfg_req_s cfg_req; | ||
156 | struct bfi_iocfc_stats_req_s stats_get; | ||
157 | struct bfi_iocfc_stats_req_s stats_clr; | ||
158 | struct bfi_iocfc_updateq_req_s updateq_req; | ||
159 | u32 mboxmsg[BFI_IOC_MSGSZ]; | ||
160 | }; | ||
161 | |||
162 | /** | ||
163 | * I2H Messages | ||
164 | */ | ||
165 | union bfi_iocfc_i2h_msg_u { | ||
166 | struct bfi_mhdr_s mh; | ||
167 | struct bfi_iocfc_cfg_reply_s cfg_reply; | ||
168 | struct bfi_iocfc_stats_rsp_s stats_get_rsp; | ||
169 | struct bfi_iocfc_stats_rsp_s stats_clr_rsp; | ||
170 | struct bfi_iocfc_updateq_rsp_s updateq_rsp; | ||
171 | u32 mboxmsg[BFI_IOC_MSGSZ]; | ||
172 | }; | ||
173 | |||
174 | #pragma pack() | ||
175 | |||
176 | #endif /* __BFI_IOCFC_H__ */ | ||
177 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_lport.h b/drivers/scsi/bfa/include/bfi/bfi_lport.h new file mode 100644 index 000000000000..29010614bac9 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_lport.h | |||
@@ -0,0 +1,89 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_LPORT_H__ | ||
19 | #define __BFI_LPORT_H__ | ||
20 | |||
21 | #include <bfi/bfi.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | enum bfi_lport_h2i_msgs { | ||
26 | BFI_LPORT_H2I_CREATE_REQ = 1, | ||
27 | BFI_LPORT_H2I_DELETE_REQ = 2, | ||
28 | }; | ||
29 | |||
30 | enum bfi_lport_i2h_msgs { | ||
31 | BFI_LPORT_I2H_CREATE_RSP = BFA_I2HM(1), | ||
32 | BFI_LPORT_I2H_DELETE_RSP = BFA_I2HM(2), | ||
33 | BFI_LPORT_I2H_ONLINE = BFA_I2HM(3), | ||
34 | BFI_LPORT_I2H_OFFLINE = BFA_I2HM(4), | ||
35 | }; | ||
36 | |||
37 | #define BFI_LPORT_MAX_SYNNAME 64 | ||
38 | |||
39 | enum bfi_lport_role_e { | ||
40 | BFI_LPORT_ROLE_FCPIM = 1, | ||
41 | BFI_LPORT_ROLE_FCPTM = 2, | ||
42 | BFI_LPORT_ROLE_IPFC = 4, | ||
43 | }; | ||
44 | |||
45 | struct bfi_lport_create_req_s { | ||
46 | bfi_mhdr_t mh; /* common msg header */ | ||
47 | u16 fabric_fwhdl; /* parent fabric instance */ | ||
48 | u8 roles; /* lport FC-4 roles */ | ||
49 | u8 rsvd; | ||
50 | wwn_t pwwn; /* port name */ | ||
51 | wwn_t nwwn; /* node name */ | ||
52 | u8 symname[BFI_LPORT_MAX_SYNNAME]; | ||
53 | }; | ||
54 | |||
55 | struct bfi_lport_create_rsp_s { | ||
56 | bfi_mhdr_t mh; /* common msg header */ | ||
57 | u8 status; /* lport creation status */ | ||
58 | u8 rsvd[3]; | ||
59 | }; | ||
60 | |||
61 | struct bfi_lport_delete_req_s { | ||
62 | bfi_mhdr_t mh; /* common msg header */ | ||
63 | u16 fw_handle; /* firmware lport handle */ | ||
64 | u16 rsvd; | ||
65 | }; | ||
66 | |||
67 | struct bfi_lport_delete_rsp_s { | ||
68 | bfi_mhdr_t mh; /* common msg header */ | ||
69 | u16 bfa_handle; /* host lport handle */ | ||
70 | u8 status; /* lport deletion status */ | ||
71 | u8 rsvd; | ||
72 | }; | ||
73 | |||
74 | union bfi_lport_h2i_msg_u { | ||
75 | bfi_msg_t *msg; | ||
76 | struct bfi_lport_create_req_s *create_req; | ||
77 | struct bfi_lport_delete_req_s *delete_req; | ||
78 | }; | ||
79 | |||
80 | union bfi_lport_i2h_msg_u { | ||
81 | bfi_msg_t *msg; | ||
82 | struct bfi_lport_create_rsp_s *create_rsp; | ||
83 | struct bfi_lport_delete_rsp_s *delete_rsp; | ||
84 | }; | ||
85 | |||
86 | #pragma pack() | ||
87 | |||
88 | #endif /* __BFI_LPORT_H__ */ | ||
89 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_lps.h b/drivers/scsi/bfa/include/bfi/bfi_lps.h new file mode 100644 index 000000000000..414b0e30f6ef --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_lps.h | |||
@@ -0,0 +1,96 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_LPS_H__ | ||
19 | #define __BFI_LPS_H__ | ||
20 | |||
21 | #include <bfi/bfi.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | enum bfi_lps_h2i_msgs { | ||
26 | BFI_LPS_H2I_LOGIN_REQ = 1, | ||
27 | BFI_LPS_H2I_LOGOUT_REQ = 2, | ||
28 | }; | ||
29 | |||
30 | enum bfi_lps_i2h_msgs { | ||
31 | BFI_LPS_H2I_LOGIN_RSP = BFA_I2HM(1), | ||
32 | BFI_LPS_H2I_LOGOUT_RSP = BFA_I2HM(2), | ||
33 | }; | ||
34 | |||
35 | struct bfi_lps_login_req_s { | ||
36 | struct bfi_mhdr_s mh; /* common msg header */ | ||
37 | u8 lp_tag; | ||
38 | u8 alpa; | ||
39 | u16 pdu_size; | ||
40 | wwn_t pwwn; | ||
41 | wwn_t nwwn; | ||
42 | u8 fdisc; | ||
43 | u8 auth_en; | ||
44 | u8 rsvd[2]; | ||
45 | }; | ||
46 | |||
47 | struct bfi_lps_login_rsp_s { | ||
48 | struct bfi_mhdr_s mh; /* common msg header */ | ||
49 | u8 lp_tag; | ||
50 | u8 status; | ||
51 | u8 lsrjt_rsn; | ||
52 | u8 lsrjt_expl; | ||
53 | wwn_t port_name; | ||
54 | wwn_t node_name; | ||
55 | u16 bb_credit; | ||
56 | u8 f_port; | ||
57 | u8 npiv_en; | ||
58 | u32 lp_pid : 24; | ||
59 | u32 auth_req : 8; | ||
60 | mac_t lp_mac; | ||
61 | mac_t fcf_mac; | ||
62 | u8 ext_status; | ||
63 | u8 brcd_switch;/* attached peer is brcd switch */ | ||
64 | }; | ||
65 | |||
66 | struct bfi_lps_logout_req_s { | ||
67 | struct bfi_mhdr_s mh; /* common msg header */ | ||
68 | u8 lp_tag; | ||
69 | u8 rsvd[3]; | ||
70 | wwn_t port_name; | ||
71 | }; | ||
72 | |||
73 | struct bfi_lps_logout_rsp_s { | ||
74 | struct bfi_mhdr_s mh; /* common msg header */ | ||
75 | u8 lp_tag; | ||
76 | u8 status; | ||
77 | u8 rsvd[2]; | ||
78 | }; | ||
79 | |||
80 | union bfi_lps_h2i_msg_u { | ||
81 | struct bfi_mhdr_s *msg; | ||
82 | struct bfi_lps_login_req_s *login_req; | ||
83 | struct bfi_lps_logout_req_s *logout_req; | ||
84 | }; | ||
85 | |||
86 | union bfi_lps_i2h_msg_u { | ||
87 | struct bfi_msg_s *msg; | ||
88 | struct bfi_lps_login_rsp_s *login_rsp; | ||
89 | struct bfi_lps_logout_rsp_s *logout_rsp; | ||
90 | }; | ||
91 | |||
92 | #pragma pack() | ||
93 | |||
94 | #endif /* __BFI_LPS_H__ */ | ||
95 | |||
96 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_port.h b/drivers/scsi/bfa/include/bfi/bfi_port.h new file mode 100644 index 000000000000..3ec3bea110ba --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_port.h | |||
@@ -0,0 +1,115 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFI_PORT_H__ | ||
18 | #define __BFI_PORT_H__ | ||
19 | |||
20 | #include <bfi/bfi.h> | ||
21 | #include <defs/bfa_defs_pport.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | enum bfi_port_h2i { | ||
26 | BFI_PORT_H2I_ENABLE_REQ = (1), | ||
27 | BFI_PORT_H2I_DISABLE_REQ = (2), | ||
28 | BFI_PORT_H2I_GET_STATS_REQ = (3), | ||
29 | BFI_PORT_H2I_CLEAR_STATS_REQ = (4), | ||
30 | }; | ||
31 | |||
32 | enum bfi_port_i2h { | ||
33 | BFI_PORT_I2H_ENABLE_RSP = BFA_I2HM(1), | ||
34 | BFI_PORT_I2H_DISABLE_RSP = BFA_I2HM(2), | ||
35 | BFI_PORT_I2H_GET_STATS_RSP = BFA_I2HM(3), | ||
36 | BFI_PORT_I2H_CLEAR_STATS_RSP = BFA_I2HM(4), | ||
37 | }; | ||
38 | |||
39 | /** | ||
40 | * Generic REQ type | ||
41 | */ | ||
42 | struct bfi_port_generic_req_s { | ||
43 | struct bfi_mhdr_s mh; /* msg header */ | ||
44 | u32 msgtag; /* msgtag for reply */ | ||
45 | u32 rsvd; | ||
46 | }; | ||
47 | |||
48 | /** | ||
49 | * Generic RSP type | ||
50 | */ | ||
51 | struct bfi_port_generic_rsp_s { | ||
52 | struct bfi_mhdr_s mh; /* common msg header */ | ||
53 | u8 status; /* port enable status */ | ||
54 | u8 rsvd[3]; | ||
55 | u32 msgtag; /* msgtag for reply */ | ||
56 | }; | ||
57 | |||
58 | /** | ||
59 | * @todo | ||
60 | * BFI_PORT_H2I_ENABLE_REQ | ||
61 | */ | ||
62 | |||
63 | /** | ||
64 | * @todo | ||
65 | * BFI_PORT_I2H_ENABLE_RSP | ||
66 | */ | ||
67 | |||
68 | /** | ||
69 | * BFI_PORT_H2I_DISABLE_REQ | ||
70 | */ | ||
71 | |||
72 | /** | ||
73 | * BFI_PORT_I2H_DISABLE_RSP | ||
74 | */ | ||
75 | |||
76 | /** | ||
77 | * BFI_PORT_H2I_GET_STATS_REQ | ||
78 | */ | ||
79 | struct bfi_port_get_stats_req_s { | ||
80 | struct bfi_mhdr_s mh; /* common msg header */ | ||
81 | union bfi_addr_u dma_addr; | ||
82 | }; | ||
83 | |||
84 | /** | ||
85 | * BFI_PORT_I2H_GET_STATS_RSP | ||
86 | */ | ||
87 | |||
88 | /** | ||
89 | * BFI_PORT_H2I_CLEAR_STATS_REQ | ||
90 | */ | ||
91 | |||
92 | /** | ||
93 | * BFI_PORT_I2H_CLEAR_STATS_RSP | ||
94 | */ | ||
95 | |||
96 | union bfi_port_h2i_msg_u { | ||
97 | struct bfi_mhdr_s mh; | ||
98 | struct bfi_port_generic_req_s enable_req; | ||
99 | struct bfi_port_generic_req_s disable_req; | ||
100 | struct bfi_port_get_stats_req_s getstats_req; | ||
101 | struct bfi_port_generic_req_s clearstats_req; | ||
102 | }; | ||
103 | |||
104 | union bfi_port_i2h_msg_u { | ||
105 | struct bfi_mhdr_s mh; | ||
106 | struct bfi_port_generic_rsp_s enable_rsp; | ||
107 | struct bfi_port_generic_rsp_s disable_rsp; | ||
108 | struct bfi_port_generic_rsp_s getstats_rsp; | ||
109 | struct bfi_port_generic_rsp_s clearstats_rsp; | ||
110 | }; | ||
111 | |||
112 | #pragma pack() | ||
113 | |||
114 | #endif /* __BFI_PORT_H__ */ | ||
115 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_pport.h b/drivers/scsi/bfa/include/bfi/bfi_pport.h new file mode 100644 index 000000000000..c96d246851af --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_pport.h | |||
@@ -0,0 +1,184 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFI_PPORT_H__ | ||
18 | #define __BFI_PPORT_H__ | ||
19 | |||
20 | #include <bfi/bfi.h> | ||
21 | #include <defs/bfa_defs_pport.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | enum bfi_pport_h2i { | ||
26 | BFI_PPORT_H2I_ENABLE_REQ = (1), | ||
27 | BFI_PPORT_H2I_DISABLE_REQ = (2), | ||
28 | BFI_PPORT_H2I_GET_STATS_REQ = (3), | ||
29 | BFI_PPORT_H2I_CLEAR_STATS_REQ = (4), | ||
30 | BFI_PPORT_H2I_SET_SVC_PARAMS_REQ = (5), | ||
31 | BFI_PPORT_H2I_ENABLE_RX_VF_TAG_REQ = (6), | ||
32 | BFI_PPORT_H2I_ENABLE_TX_VF_TAG_REQ = (7), | ||
33 | BFI_PPORT_H2I_GET_QOS_STATS_REQ = (8), | ||
34 | BFI_PPORT_H2I_CLEAR_QOS_STATS_REQ = (9), | ||
35 | }; | ||
36 | |||
37 | enum bfi_pport_i2h { | ||
38 | BFI_PPORT_I2H_ENABLE_RSP = BFA_I2HM(1), | ||
39 | BFI_PPORT_I2H_DISABLE_RSP = BFA_I2HM(2), | ||
40 | BFI_PPORT_I2H_GET_STATS_RSP = BFA_I2HM(3), | ||
41 | BFI_PPORT_I2H_CLEAR_STATS_RSP = BFA_I2HM(4), | ||
42 | BFI_PPORT_I2H_SET_SVC_PARAMS_RSP = BFA_I2HM(5), | ||
43 | BFI_PPORT_I2H_ENABLE_RX_VF_TAG_RSP = BFA_I2HM(6), | ||
44 | BFI_PPORT_I2H_ENABLE_TX_VF_TAG_RSP = BFA_I2HM(7), | ||
45 | BFI_PPORT_I2H_EVENT = BFA_I2HM(8), | ||
46 | BFI_PPORT_I2H_GET_QOS_STATS_RSP = BFA_I2HM(9), | ||
47 | BFI_PPORT_I2H_CLEAR_QOS_STATS_RSP = BFA_I2HM(10), | ||
48 | }; | ||
49 | |||
50 | /** | ||
51 | * Generic REQ type | ||
52 | */ | ||
53 | struct bfi_pport_generic_req_s { | ||
54 | struct bfi_mhdr_s mh; /* msg header */ | ||
55 | u32 msgtag; /* msgtag for reply */ | ||
56 | }; | ||
57 | |||
58 | /** | ||
59 | * Generic RSP type | ||
60 | */ | ||
61 | struct bfi_pport_generic_rsp_s { | ||
62 | struct bfi_mhdr_s mh; /* common msg header */ | ||
63 | u8 status; /* port enable status */ | ||
64 | u8 rsvd[3]; | ||
65 | u32 msgtag; /* msgtag for reply */ | ||
66 | }; | ||
67 | |||
68 | /** | ||
69 | * BFI_PPORT_H2I_ENABLE_REQ | ||
70 | */ | ||
71 | struct bfi_pport_enable_req_s { | ||
72 | struct bfi_mhdr_s mh; /* msg header */ | ||
73 | u32 rsvd1; | ||
74 | wwn_t nwwn; /* node wwn of physical port */ | ||
75 | wwn_t pwwn; /* port wwn of physical port */ | ||
76 | struct bfa_pport_cfg_s port_cfg; /* port configuration */ | ||
77 | union bfi_addr_u stats_dma_addr; /* DMA address for stats */ | ||
78 | u32 msgtag; /* msgtag for reply */ | ||
79 | u32 rsvd2; | ||
80 | }; | ||
81 | |||
82 | /** | ||
83 | * BFI_PPORT_I2H_ENABLE_RSP | ||
84 | */ | ||
85 | #define bfi_pport_enable_rsp_t struct bfi_pport_generic_rsp_s | ||
86 | |||
87 | /** | ||
88 | * BFI_PPORT_H2I_DISABLE_REQ | ||
89 | */ | ||
90 | #define bfi_pport_disable_req_t struct bfi_pport_generic_req_s | ||
91 | |||
92 | /** | ||
93 | * BFI_PPORT_I2H_DISABLE_RSP | ||
94 | */ | ||
95 | #define bfi_pport_disable_rsp_t struct bfi_pport_generic_rsp_s | ||
96 | |||
97 | /** | ||
98 | * BFI_PPORT_H2I_GET_STATS_REQ | ||
99 | */ | ||
100 | #define bfi_pport_get_stats_req_t struct bfi_pport_generic_req_s | ||
101 | |||
102 | /** | ||
103 | * BFI_PPORT_I2H_GET_STATS_RSP | ||
104 | */ | ||
105 | #define bfi_pport_get_stats_rsp_t struct bfi_pport_generic_rsp_s | ||
106 | |||
107 | /** | ||
108 | * BFI_PPORT_H2I_CLEAR_STATS_REQ | ||
109 | */ | ||
110 | #define bfi_pport_clear_stats_req_t struct bfi_pport_generic_req_s | ||
111 | |||
112 | /** | ||
113 | * BFI_PPORT_I2H_CLEAR_STATS_RSP | ||
114 | */ | ||
115 | #define bfi_pport_clear_stats_rsp_t struct bfi_pport_generic_rsp_s | ||
116 | |||
117 | /** | ||
118 | * BFI_PPORT_H2I_GET_QOS_STATS_REQ | ||
119 | */ | ||
120 | #define bfi_pport_get_qos_stats_req_t struct bfi_pport_generic_req_s | ||
121 | |||
122 | /** | ||
123 | * BFI_PPORT_H2I_GET_QOS_STATS_RSP | ||
124 | */ | ||
125 | #define bfi_pport_get_qos_stats_rsp_t struct bfi_pport_generic_rsp_s | ||
126 | |||
127 | /** | ||
128 | * BFI_PPORT_H2I_CLEAR_QOS_STATS_REQ | ||
129 | */ | ||
130 | #define bfi_pport_clear_qos_stats_req_t struct bfi_pport_generic_req_s | ||
131 | |||
132 | /** | ||
133 | * BFI_PPORT_H2I_CLEAR_QOS_STATS_RSP | ||
134 | */ | ||
135 | #define bfi_pport_clear_qos_stats_rsp_t struct bfi_pport_generic_rsp_s | ||
136 | |||
137 | /** | ||
138 | * BFI_PPORT_H2I_SET_SVC_PARAMS_REQ | ||
139 | */ | ||
140 | struct bfi_pport_set_svc_params_req_s { | ||
141 | struct bfi_mhdr_s mh; /* msg header */ | ||
142 | u16 tx_bbcredit; /* Tx credits */ | ||
143 | u16 rsvd; | ||
144 | }; | ||
145 | |||
146 | /** | ||
147 | * BFI_PPORT_I2H_SET_SVC_PARAMS_RSP | ||
148 | */ | ||
149 | |||
150 | /** | ||
151 | * BFI_PPORT_I2H_EVENT | ||
152 | */ | ||
153 | struct bfi_pport_event_s { | ||
154 | struct bfi_mhdr_s mh; /* common msg header */ | ||
155 | struct bfa_pport_link_s link_state; | ||
156 | }; | ||
157 | |||
158 | union bfi_pport_h2i_msg_u { | ||
159 | struct bfi_mhdr_s *mhdr; | ||
160 | struct bfi_pport_enable_req_s *penable; | ||
161 | struct bfi_pport_generic_req_s *pdisable; | ||
162 | struct bfi_pport_generic_req_s *pgetstats; | ||
163 | struct bfi_pport_generic_req_s *pclearstats; | ||
164 | struct bfi_pport_set_svc_params_req_s *psetsvcparams; | ||
165 | struct bfi_pport_get_qos_stats_req_s *pgetqosstats; | ||
166 | struct bfi_pport_generic_req_s *pclearqosstats; | ||
167 | }; | ||
168 | |||
169 | union bfi_pport_i2h_msg_u { | ||
170 | struct bfi_msg_s *msg; | ||
171 | struct bfi_pport_generic_rsp_s *enable_rsp; | ||
172 | struct bfi_pport_disable_rsp_s *disable_rsp; | ||
173 | struct bfi_pport_generic_rsp_s *getstats_rsp; | ||
174 | struct bfi_pport_clear_stats_rsp_s *clearstats_rsp; | ||
175 | struct bfi_pport_set_svc_params_rsp_s *setsvcparasm_rsp; | ||
176 | struct bfi_pport_get_qos_stats_rsp_s *getqosstats_rsp; | ||
177 | struct bfi_pport_clear_qos_stats_rsp_s *clearqosstats_rsp; | ||
178 | struct bfi_pport_event_s *event; | ||
179 | }; | ||
180 | |||
181 | #pragma pack() | ||
182 | |||
183 | #endif /* __BFI_PPORT_H__ */ | ||
184 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_rport.h b/drivers/scsi/bfa/include/bfi/bfi_rport.h new file mode 100644 index 000000000000..3520f55f09d7 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_rport.h | |||
@@ -0,0 +1,104 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_RPORT_H__ | ||
19 | #define __BFI_RPORT_H__ | ||
20 | |||
21 | #include <bfi/bfi.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | enum bfi_rport_h2i_msgs { | ||
26 | BFI_RPORT_H2I_CREATE_REQ = 1, | ||
27 | BFI_RPORT_H2I_DELETE_REQ = 2, | ||
28 | BFI_RPORT_H2I_SET_SPEED_REQ = 3, | ||
29 | }; | ||
30 | |||
31 | enum bfi_rport_i2h_msgs { | ||
32 | BFI_RPORT_I2H_CREATE_RSP = BFA_I2HM(1), | ||
33 | BFI_RPORT_I2H_DELETE_RSP = BFA_I2HM(2), | ||
34 | BFI_RPORT_I2H_QOS_SCN = BFA_I2HM(3), | ||
35 | }; | ||
36 | |||
37 | struct bfi_rport_create_req_s { | ||
38 | struct bfi_mhdr_s mh; /* common msg header */ | ||
39 | u16 bfa_handle; /* host rport handle */ | ||
40 | u16 max_frmsz; /* max rcv pdu size */ | ||
41 | u32 pid : 24, /* remote port ID */ | ||
42 | lp_tag : 8; /* local port tag */ | ||
43 | u32 local_pid : 24, /* local port ID */ | ||
44 | cisc : 8; | ||
45 | u8 fc_class; /* supported FC classes */ | ||
46 | u8 vf_en; /* virtual fabric enable */ | ||
47 | u16 vf_id; /* virtual fabric ID */ | ||
48 | }; | ||
49 | |||
50 | struct bfi_rport_create_rsp_s { | ||
51 | struct bfi_mhdr_s mh; /* common msg header */ | ||
52 | u8 status; /* rport creation status */ | ||
53 | u8 rsvd[3]; | ||
54 | u16 bfa_handle; /* host rport handle */ | ||
55 | u16 fw_handle; /* firmware rport handle */ | ||
56 | struct bfa_rport_qos_attr_s qos_attr; /* QoS Attributes */ | ||
57 | }; | ||
58 | |||
59 | struct bfa_rport_speed_req_s { | ||
60 | struct bfi_mhdr_s mh; /* common msg header */ | ||
61 | u16 fw_handle; /* firmware rport handle */ | ||
62 | u8 speed; /*! rport's speed via RPSC */ | ||
63 | u8 rsvd; | ||
64 | }; | ||
65 | |||
66 | struct bfi_rport_delete_req_s { | ||
67 | struct bfi_mhdr_s mh; /* common msg header */ | ||
68 | u16 fw_handle; /* firmware rport handle */ | ||
69 | u16 rsvd; | ||
70 | }; | ||
71 | |||
72 | struct bfi_rport_delete_rsp_s { | ||
73 | struct bfi_mhdr_s mh; /* common msg header */ | ||
74 | u16 bfa_handle; /* host rport handle */ | ||
75 | u8 status; /* rport deletion status */ | ||
76 | u8 rsvd; | ||
77 | }; | ||
78 | |||
79 | struct bfi_rport_qos_scn_s { | ||
80 | struct bfi_mhdr_s mh; /* common msg header */ | ||
81 | u16 bfa_handle; /* host rport handle */ | ||
82 | u16 rsvd; | ||
83 | struct bfa_rport_qos_attr_s old_qos_attr; /* Old QoS Attributes */ | ||
84 | struct bfa_rport_qos_attr_s new_qos_attr; /* New QoS Attributes */ | ||
85 | }; | ||
86 | |||
87 | union bfi_rport_h2i_msg_u { | ||
88 | struct bfi_msg_s *msg; | ||
89 | struct bfi_rport_create_req_s *create_req; | ||
90 | struct bfi_rport_delete_req_s *delete_req; | ||
91 | struct bfi_rport_speed_req_s *speed_req; | ||
92 | }; | ||
93 | |||
94 | union bfi_rport_i2h_msg_u { | ||
95 | struct bfi_msg_s *msg; | ||
96 | struct bfi_rport_create_rsp_s *create_rsp; | ||
97 | struct bfi_rport_delete_rsp_s *delete_rsp; | ||
98 | struct bfi_rport_qos_scn_s *qos_scn_evt; | ||
99 | }; | ||
100 | |||
101 | #pragma pack() | ||
102 | |||
103 | #endif /* __BFI_RPORT_H__ */ | ||
104 | |||
diff --git a/drivers/scsi/bfa/include/bfi/bfi_uf.h b/drivers/scsi/bfa/include/bfi/bfi_uf.h new file mode 100644 index 000000000000..f328a9e7e622 --- /dev/null +++ b/drivers/scsi/bfa/include/bfi/bfi_uf.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFI_UF_H__ | ||
19 | #define __BFI_UF_H__ | ||
20 | |||
21 | #include "bfi.h" | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | enum bfi_uf_h2i { | ||
26 | BFI_UF_H2I_BUF_POST = 1, | ||
27 | }; | ||
28 | |||
29 | enum bfi_uf_i2h { | ||
30 | BFI_UF_I2H_FRM_RCVD = BFA_I2HM(1), | ||
31 | }; | ||
32 | |||
33 | #define BFA_UF_MAX_SGES 2 | ||
34 | |||
35 | struct bfi_uf_buf_post_s { | ||
36 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
37 | u16 buf_tag; /* buffer tag */ | ||
38 | u16 buf_len; /* total buffer length */ | ||
39 | struct bfi_sge_s sge[BFA_UF_MAX_SGES]; /* buffer DMA SGEs */ | ||
40 | }; | ||
41 | |||
42 | struct bfi_uf_frm_rcvd_s { | ||
43 | struct bfi_mhdr_s mh; /* Common msg header */ | ||
44 | u16 buf_tag; /* buffer tag */ | ||
45 | u16 rsvd; | ||
46 | u16 frm_len; /* received frame length */ | ||
47 | u16 xfr_len; /* tranferred length */ | ||
48 | }; | ||
49 | |||
50 | #pragma pack() | ||
51 | |||
52 | #endif /* __BFI_UF_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/cna/bfa_cna_trcmod.h b/drivers/scsi/bfa/include/cna/bfa_cna_trcmod.h new file mode 100644 index 000000000000..43ba7064e81a --- /dev/null +++ b/drivers/scsi/bfa/include/cna/bfa_cna_trcmod.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_cna_trcmod.h CNA trace modules | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_CNA_TRCMOD_H__ | ||
23 | #define __BFA_CNA_TRCMOD_H__ | ||
24 | |||
25 | #include <cs/bfa_trc.h> | ||
26 | |||
27 | /* | ||
28 | * !!! Only append to the enums defined here to avoid any versioning | ||
29 | * !!! needed between trace utility and driver version | ||
30 | */ | ||
31 | enum { | ||
32 | BFA_TRC_CNA_CEE = 1, | ||
33 | BFA_TRC_CNA_PORT = 2, | ||
34 | }; | ||
35 | |||
36 | #endif /* __BFA_CNA_TRCMOD_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/cna/cee/bfa_cee.h b/drivers/scsi/bfa/include/cna/cee/bfa_cee.h new file mode 100644 index 000000000000..77f297f68046 --- /dev/null +++ b/drivers/scsi/bfa/include/cna/cee/bfa_cee.h | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_CEE_H__ | ||
19 | #define __BFA_CEE_H__ | ||
20 | |||
21 | #include <defs/bfa_defs_cee.h> | ||
22 | #include <bfa_ioc.h> | ||
23 | #include <cs/bfa_trc.h> | ||
24 | #include <cs/bfa_log.h> | ||
25 | |||
26 | typedef void (*bfa_cee_get_attr_cbfn_t) (void *dev, bfa_status_t status); | ||
27 | typedef void (*bfa_cee_get_stats_cbfn_t) (void *dev, bfa_status_t status); | ||
28 | typedef void (*bfa_cee_reset_stats_cbfn_t) (void *dev, bfa_status_t status); | ||
29 | typedef void (*bfa_cee_hbfail_cbfn_t) (void *dev, bfa_status_t status); | ||
30 | |||
31 | struct bfa_cee_cbfn_s { | ||
32 | bfa_cee_get_attr_cbfn_t get_attr_cbfn; | ||
33 | void *get_attr_cbarg; | ||
34 | bfa_cee_get_stats_cbfn_t get_stats_cbfn; | ||
35 | void *get_stats_cbarg; | ||
36 | bfa_cee_reset_stats_cbfn_t reset_stats_cbfn; | ||
37 | void *reset_stats_cbarg; | ||
38 | }; | ||
39 | |||
40 | struct bfa_cee_s { | ||
41 | void *dev; | ||
42 | bfa_boolean_t get_attr_pending; | ||
43 | bfa_boolean_t get_stats_pending; | ||
44 | bfa_boolean_t reset_stats_pending; | ||
45 | bfa_status_t get_attr_status; | ||
46 | bfa_status_t get_stats_status; | ||
47 | bfa_status_t reset_stats_status; | ||
48 | struct bfa_cee_cbfn_s cbfn; | ||
49 | struct bfa_ioc_hbfail_notify_s hbfail; | ||
50 | struct bfa_trc_mod_s *trcmod; | ||
51 | struct bfa_log_mod_s *logmod; | ||
52 | struct bfa_cee_attr_s *attr; | ||
53 | struct bfa_cee_stats_s *stats; | ||
54 | struct bfa_dma_s attr_dma; | ||
55 | struct bfa_dma_s stats_dma; | ||
56 | struct bfa_ioc_s *ioc; | ||
57 | struct bfa_mbox_cmd_s get_cfg_mb; | ||
58 | struct bfa_mbox_cmd_s get_stats_mb; | ||
59 | struct bfa_mbox_cmd_s reset_stats_mb; | ||
60 | }; | ||
61 | |||
62 | u32 bfa_cee_meminfo(void); | ||
63 | void bfa_cee_mem_claim(struct bfa_cee_s *cee, u8 *dma_kva, | ||
64 | u64 dma_pa); | ||
65 | void bfa_cee_attach(struct bfa_cee_s *cee, struct bfa_ioc_s *ioc, void *dev, | ||
66 | struct bfa_trc_mod_s *trcmod, | ||
67 | struct bfa_log_mod_s *logmod); | ||
68 | void bfa_cee_detach(struct bfa_cee_s *cee); | ||
69 | bfa_status_t bfa_cee_get_attr(struct bfa_cee_s *cee, | ||
70 | struct bfa_cee_attr_s *attr, | ||
71 | bfa_cee_get_attr_cbfn_t cbfn, void *cbarg); | ||
72 | bfa_status_t bfa_cee_get_stats(struct bfa_cee_s *cee, | ||
73 | struct bfa_cee_stats_s *stats, | ||
74 | bfa_cee_get_stats_cbfn_t cbfn, void *cbarg); | ||
75 | bfa_status_t bfa_cee_reset_stats(struct bfa_cee_s *cee, | ||
76 | bfa_cee_reset_stats_cbfn_t cbfn, void *cbarg); | ||
77 | #endif /* __BFA_CEE_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/cna/port/bfa_port.h b/drivers/scsi/bfa/include/cna/port/bfa_port.h new file mode 100644 index 000000000000..7cbf17d3141b --- /dev/null +++ b/drivers/scsi/bfa/include/cna/port/bfa_port.h | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_PORT_H__ | ||
19 | #define __BFA_PORT_H__ | ||
20 | |||
21 | #include <defs/bfa_defs_port.h> | ||
22 | #include <bfa_ioc.h> | ||
23 | #include <cs/bfa_trc.h> | ||
24 | #include <cs/bfa_log.h> | ||
25 | |||
26 | typedef void (*bfa_port_stats_cbfn_t) (void *dev, bfa_status_t status); | ||
27 | typedef void (*bfa_port_endis_cbfn_t) (void *dev, bfa_status_t status); | ||
28 | |||
29 | struct bfa_port_s { | ||
30 | void *dev; | ||
31 | struct bfa_ioc_s *ioc; | ||
32 | struct bfa_trc_mod_s *trcmod; | ||
33 | struct bfa_log_mod_s *logmod; | ||
34 | u32 msgtag; | ||
35 | bfa_boolean_t stats_busy; | ||
36 | struct bfa_mbox_cmd_s stats_mb; | ||
37 | bfa_port_stats_cbfn_t stats_cbfn; | ||
38 | void *stats_cbarg; | ||
39 | bfa_status_t stats_status; | ||
40 | union bfa_pport_stats_u *stats; | ||
41 | struct bfa_dma_s stats_dma; | ||
42 | bfa_boolean_t endis_pending; | ||
43 | struct bfa_mbox_cmd_s endis_mb; | ||
44 | bfa_port_endis_cbfn_t endis_cbfn; | ||
45 | void *endis_cbarg; | ||
46 | bfa_status_t endis_status; | ||
47 | struct bfa_ioc_hbfail_notify_s hbfail; | ||
48 | }; | ||
49 | |||
50 | void bfa_port_attach(struct bfa_port_s *port, struct bfa_ioc_s *ioc, | ||
51 | void *dev, struct bfa_trc_mod_s *trcmod, | ||
52 | struct bfa_log_mod_s *logmod); | ||
53 | void bfa_port_detach(struct bfa_port_s *port); | ||
54 | void bfa_port_hbfail(void *arg); | ||
55 | |||
56 | bfa_status_t bfa_port_get_stats(struct bfa_port_s *port, | ||
57 | union bfa_pport_stats_u *stats, | ||
58 | bfa_port_stats_cbfn_t cbfn, void *cbarg); | ||
59 | bfa_status_t bfa_port_clear_stats(struct bfa_port_s *port, | ||
60 | bfa_port_stats_cbfn_t cbfn, void *cbarg); | ||
61 | bfa_status_t bfa_port_enable(struct bfa_port_s *port, | ||
62 | bfa_port_endis_cbfn_t cbfn, void *cbarg); | ||
63 | bfa_status_t bfa_port_disable(struct bfa_port_s *port, | ||
64 | bfa_port_endis_cbfn_t cbfn, void *cbarg); | ||
65 | u32 bfa_port_meminfo(void); | ||
66 | void bfa_port_mem_claim(struct bfa_port_s *port, u8 *dma_kva, | ||
67 | u64 dma_pa); | ||
68 | |||
69 | #endif /* __BFA_PORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/cna/pstats/ethport_defs.h b/drivers/scsi/bfa/include/cna/pstats/ethport_defs.h new file mode 100644 index 000000000000..1563ee512218 --- /dev/null +++ b/drivers/scsi/bfa/include/cna/pstats/ethport_defs.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved. | ||
4 | * | ||
5 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License (GPL) Version 2 as | ||
9 | * published by the Free Software Foundation | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, but | ||
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | * General Public License for more details. | ||
15 | */ | ||
16 | |||
17 | #ifndef __ETHPORT_DEFS_H__ | ||
18 | #define __ETHPORT_DEFS_H__ | ||
19 | |||
20 | struct bnad_drv_stats { | ||
21 | u64 netif_queue_stop; | ||
22 | u64 netif_queue_wakeup; | ||
23 | u64 tso4; | ||
24 | u64 tso6; | ||
25 | u64 tso_err; | ||
26 | u64 tcpcsum_offload; | ||
27 | u64 udpcsum_offload; | ||
28 | u64 csum_help; | ||
29 | u64 csum_help_err; | ||
30 | |||
31 | u64 hw_stats_updates; | ||
32 | u64 netif_rx_schedule; | ||
33 | u64 netif_rx_complete; | ||
34 | u64 netif_rx_dropped; | ||
35 | }; | ||
36 | #endif | ||
diff --git a/drivers/scsi/bfa/include/cna/pstats/phyport_defs.h b/drivers/scsi/bfa/include/cna/pstats/phyport_defs.h new file mode 100644 index 000000000000..eb7548030d0f --- /dev/null +++ b/drivers/scsi/bfa/include/cna/pstats/phyport_defs.h | |||
@@ -0,0 +1,218 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved. | ||
4 | * | ||
5 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License (GPL) Version 2 as | ||
9 | * published by the Free Software Foundation | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, but | ||
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | * General Public License for more details. | ||
15 | */ | ||
16 | |||
17 | #ifndef __PHYPORT_DEFS_H__ | ||
18 | #define __PHYPORT_DEFS_H__ | ||
19 | |||
20 | #define BNA_TXF_ID_MAX 64 | ||
21 | #define BNA_RXF_ID_MAX 64 | ||
22 | |||
23 | /* | ||
24 | * Statistics | ||
25 | */ | ||
26 | |||
27 | /* | ||
28 | * TxF Frame Statistics | ||
29 | */ | ||
30 | struct bna_stats_txf { | ||
31 | u64 ucast_octets; | ||
32 | u64 ucast; | ||
33 | u64 ucast_vlan; | ||
34 | |||
35 | u64 mcast_octets; | ||
36 | u64 mcast; | ||
37 | u64 mcast_vlan; | ||
38 | |||
39 | u64 bcast_octets; | ||
40 | u64 bcast; | ||
41 | u64 bcast_vlan; | ||
42 | |||
43 | u64 errors; | ||
44 | u64 filter_vlan; /* frames filtered due to VLAN */ | ||
45 | u64 filter_mac_sa; /* frames filtered due to SA check */ | ||
46 | }; | ||
47 | |||
48 | /* | ||
49 | * RxF Frame Statistics | ||
50 | */ | ||
51 | struct bna_stats_rxf { | ||
52 | u64 ucast_octets; | ||
53 | u64 ucast; | ||
54 | u64 ucast_vlan; | ||
55 | |||
56 | u64 mcast_octets; | ||
57 | u64 mcast; | ||
58 | u64 mcast_vlan; | ||
59 | |||
60 | u64 bcast_octets; | ||
61 | u64 bcast; | ||
62 | u64 bcast_vlan; | ||
63 | u64 frame_drops; | ||
64 | }; | ||
65 | |||
66 | /* | ||
67 | * FC Tx Frame Statistics | ||
68 | */ | ||
69 | struct bna_stats_fc_tx { | ||
70 | u64 txf_ucast_octets; | ||
71 | u64 txf_ucast; | ||
72 | u64 txf_ucast_vlan; | ||
73 | |||
74 | u64 txf_mcast_octets; | ||
75 | u64 txf_mcast; | ||
76 | u64 txf_mcast_vlan; | ||
77 | |||
78 | u64 txf_bcast_octets; | ||
79 | u64 txf_bcast; | ||
80 | u64 txf_bcast_vlan; | ||
81 | |||
82 | u64 txf_parity_errors; | ||
83 | u64 txf_timeout; | ||
84 | u64 txf_fid_parity_errors; | ||
85 | }; | ||
86 | |||
87 | /* | ||
88 | * FC Rx Frame Statistics | ||
89 | */ | ||
90 | struct bna_stats_fc_rx { | ||
91 | u64 rxf_ucast_octets; | ||
92 | u64 rxf_ucast; | ||
93 | u64 rxf_ucast_vlan; | ||
94 | |||
95 | u64 rxf_mcast_octets; | ||
96 | u64 rxf_mcast; | ||
97 | u64 rxf_mcast_vlan; | ||
98 | |||
99 | u64 rxf_bcast_octets; | ||
100 | u64 rxf_bcast; | ||
101 | u64 rxf_bcast_vlan; | ||
102 | }; | ||
103 | |||
104 | /* | ||
105 | * RAD Frame Statistics | ||
106 | */ | ||
107 | struct cna_stats_rad { | ||
108 | u64 rx_frames; | ||
109 | u64 rx_octets; | ||
110 | u64 rx_vlan_frames; | ||
111 | |||
112 | u64 rx_ucast; | ||
113 | u64 rx_ucast_octets; | ||
114 | u64 rx_ucast_vlan; | ||
115 | |||
116 | u64 rx_mcast; | ||
117 | u64 rx_mcast_octets; | ||
118 | u64 rx_mcast_vlan; | ||
119 | |||
120 | u64 rx_bcast; | ||
121 | u64 rx_bcast_octets; | ||
122 | u64 rx_bcast_vlan; | ||
123 | |||
124 | u64 rx_drops; | ||
125 | }; | ||
126 | |||
127 | /* | ||
128 | * BPC Tx Registers | ||
129 | */ | ||
130 | struct cna_stats_bpc_tx { | ||
131 | u64 tx_pause[8]; | ||
132 | u64 tx_zero_pause[8]; /* Pause cancellation */ | ||
133 | u64 tx_first_pause[8]; /* Pause initiation rather | ||
134 | *than retention */ | ||
135 | }; | ||
136 | |||
137 | /* | ||
138 | * BPC Rx Registers | ||
139 | */ | ||
140 | struct cna_stats_bpc_rx { | ||
141 | u64 rx_pause[8]; | ||
142 | u64 rx_zero_pause[8]; /* Pause cancellation */ | ||
143 | u64 rx_first_pause[8]; /* Pause initiation rather | ||
144 | *than retention */ | ||
145 | }; | ||
146 | |||
147 | /* | ||
148 | * MAC Rx Statistics | ||
149 | */ | ||
150 | struct cna_stats_mac_rx { | ||
151 | u64 frame_64; /* both rx and tx counter */ | ||
152 | u64 frame_65_127; /* both rx and tx counter */ | ||
153 | u64 frame_128_255; /* both rx and tx counter */ | ||
154 | u64 frame_256_511; /* both rx and tx counter */ | ||
155 | u64 frame_512_1023; /* both rx and tx counter */ | ||
156 | u64 frame_1024_1518; /* both rx and tx counter */ | ||
157 | u64 frame_1518_1522; /* both rx and tx counter */ | ||
158 | u64 rx_bytes; | ||
159 | u64 rx_packets; | ||
160 | u64 rx_fcs_error; | ||
161 | u64 rx_multicast; | ||
162 | u64 rx_broadcast; | ||
163 | u64 rx_control_frames; | ||
164 | u64 rx_pause; | ||
165 | u64 rx_unknown_opcode; | ||
166 | u64 rx_alignment_error; | ||
167 | u64 rx_frame_length_error; | ||
168 | u64 rx_code_error; | ||
169 | u64 rx_carrier_sense_error; | ||
170 | u64 rx_undersize; | ||
171 | u64 rx_oversize; | ||
172 | u64 rx_fragments; | ||
173 | u64 rx_jabber; | ||
174 | u64 rx_drop; | ||
175 | }; | ||
176 | |||
177 | /* | ||
178 | * MAC Tx Statistics | ||
179 | */ | ||
180 | struct cna_stats_mac_tx { | ||
181 | u64 tx_bytes; | ||
182 | u64 tx_packets; | ||
183 | u64 tx_multicast; | ||
184 | u64 tx_broadcast; | ||
185 | u64 tx_pause; | ||
186 | u64 tx_deferral; | ||
187 | u64 tx_excessive_deferral; | ||
188 | u64 tx_single_collision; | ||
189 | u64 tx_muliple_collision; | ||
190 | u64 tx_late_collision; | ||
191 | u64 tx_excessive_collision; | ||
192 | u64 tx_total_collision; | ||
193 | u64 tx_pause_honored; | ||
194 | u64 tx_drop; | ||
195 | u64 tx_jabber; | ||
196 | u64 tx_fcs_error; | ||
197 | u64 tx_control_frame; | ||
198 | u64 tx_oversize; | ||
199 | u64 tx_undersize; | ||
200 | u64 tx_fragments; | ||
201 | }; | ||
202 | |||
203 | /* | ||
204 | * Complete statistics | ||
205 | */ | ||
206 | struct bna_stats { | ||
207 | struct cna_stats_mac_rx mac_rx_stats; | ||
208 | struct cna_stats_bpc_rx bpc_rx_stats; | ||
209 | struct cna_stats_rad rad_stats; | ||
210 | struct bna_stats_fc_rx fc_rx_stats; | ||
211 | struct cna_stats_mac_tx mac_tx_stats; | ||
212 | struct cna_stats_bpc_tx bpc_tx_stats; | ||
213 | struct bna_stats_fc_tx fc_tx_stats; | ||
214 | struct bna_stats_rxf rxf_stats[BNA_TXF_ID_MAX]; | ||
215 | struct bna_stats_txf txf_stats[BNA_RXF_ID_MAX]; | ||
216 | }; | ||
217 | |||
218 | #endif | ||
diff --git a/drivers/scsi/bfa/include/cs/bfa_checksum.h b/drivers/scsi/bfa/include/cs/bfa_checksum.h new file mode 100644 index 000000000000..af8c1d533ba8 --- /dev/null +++ b/drivers/scsi/bfa/include/cs/bfa_checksum.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_checksum.h BFA checksum utilities | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_CHECKSUM_H__ | ||
23 | #define __BFA_CHECKSUM_H__ | ||
24 | |||
25 | static inline u32 | ||
26 | bfa_checksum_u32(u32 *buf, int sz) | ||
27 | { | ||
28 | int i, m = sz >> 2; | ||
29 | u32 sum = 0; | ||
30 | |||
31 | for (i = 0; i < m; i++) | ||
32 | sum ^= buf[i]; | ||
33 | |||
34 | return (sum); | ||
35 | } | ||
36 | |||
37 | static inline u16 | ||
38 | bfa_checksum_u16(u16 *buf, int sz) | ||
39 | { | ||
40 | int i, m = sz >> 1; | ||
41 | u16 sum = 0; | ||
42 | |||
43 | for (i = 0; i < m; i++) | ||
44 | sum ^= buf[i]; | ||
45 | |||
46 | return (sum); | ||
47 | } | ||
48 | |||
49 | static inline u8 | ||
50 | bfa_checksum_u8(u8 *buf, int sz) | ||
51 | { | ||
52 | int i; | ||
53 | u8 sum = 0; | ||
54 | |||
55 | for (i = 0; i < sz; i++) | ||
56 | sum ^= buf[i]; | ||
57 | |||
58 | return (sum); | ||
59 | } | ||
60 | #endif | ||
diff --git a/drivers/scsi/bfa/include/cs/bfa_debug.h b/drivers/scsi/bfa/include/cs/bfa_debug.h new file mode 100644 index 000000000000..441be86b1b0f --- /dev/null +++ b/drivers/scsi/bfa/include/cs/bfa_debug.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_debug.h BFA debug interfaces | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_DEBUG_H__ | ||
23 | #define __BFA_DEBUG_H__ | ||
24 | |||
25 | #define bfa_assert(__cond) do { \ | ||
26 | if (!(__cond)) \ | ||
27 | bfa_panic(__LINE__, __FILE__, #__cond); \ | ||
28 | } while (0) | ||
29 | |||
30 | #define bfa_sm_fault(__mod, __event) do { \ | ||
31 | bfa_sm_panic((__mod)->logm, __LINE__, __FILE__, __event); \ | ||
32 | } while (0) | ||
33 | |||
34 | #ifndef BFA_PERF_BUILD | ||
35 | #define bfa_assert_fp(__cond) bfa_assert(__cond) | ||
36 | #else | ||
37 | #define bfa_assert_fp(__cond) | ||
38 | #endif | ||
39 | |||
40 | struct bfa_log_mod_s; | ||
41 | void bfa_panic(int line, char *file, char *panicstr); | ||
42 | void bfa_sm_panic(struct bfa_log_mod_s *logm, int line, char *file, int event); | ||
43 | |||
44 | #endif /* __BFA_DEBUG_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/cs/bfa_log.h b/drivers/scsi/bfa/include/cs/bfa_log.h new file mode 100644 index 000000000000..761cbe22130a --- /dev/null +++ b/drivers/scsi/bfa/include/cs/bfa_log.h | |||
@@ -0,0 +1,184 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_log.h BFA log library data structure and function definition | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_LOG_H__ | ||
23 | #define __BFA_LOG_H__ | ||
24 | |||
25 | #include <bfa_os_inc.h> | ||
26 | #include <defs/bfa_defs_status.h> | ||
27 | #include <defs/bfa_defs_aen.h> | ||
28 | |||
29 | /* | ||
30 | * BFA log module definition | ||
31 | * | ||
32 | * To create a new module id: | ||
33 | * Add a #define at the end of the list below. Select a value for your | ||
34 | * definition so that it is one (1) greater than the previous | ||
35 | * definition. Modify the definition of BFA_LOG_MODULE_ID_MAX to become | ||
36 | * your new definition. | ||
37 | * Should have no gaps in between the values because this is used in arrays. | ||
38 | * IMPORTANT: AEN_IDs must be at the begining, otherwise update bfa_defs_aen.h | ||
39 | */ | ||
40 | |||
41 | enum bfa_log_module_id { | ||
42 | BFA_LOG_UNUSED_ID = 0, | ||
43 | |||
44 | /* AEN defs begin */ | ||
45 | BFA_LOG_AEN_MIN = BFA_LOG_UNUSED_ID, | ||
46 | |||
47 | BFA_LOG_AEN_ID_ADAPTER = BFA_LOG_AEN_MIN + BFA_AEN_CAT_ADAPTER,/* 1 */ | ||
48 | BFA_LOG_AEN_ID_PORT = BFA_LOG_AEN_MIN + BFA_AEN_CAT_PORT, /* 2 */ | ||
49 | BFA_LOG_AEN_ID_LPORT = BFA_LOG_AEN_MIN + BFA_AEN_CAT_LPORT, /* 3 */ | ||
50 | BFA_LOG_AEN_ID_RPORT = BFA_LOG_AEN_MIN + BFA_AEN_CAT_RPORT, /* 4 */ | ||
51 | BFA_LOG_AEN_ID_ITNIM = BFA_LOG_AEN_MIN + BFA_AEN_CAT_ITNIM, /* 5 */ | ||
52 | BFA_LOG_AEN_ID_TIN = BFA_LOG_AEN_MIN + BFA_AEN_CAT_TIN, /* 6 */ | ||
53 | BFA_LOG_AEN_ID_IPFC = BFA_LOG_AEN_MIN + BFA_AEN_CAT_IPFC, /* 7 */ | ||
54 | BFA_LOG_AEN_ID_AUDIT = BFA_LOG_AEN_MIN + BFA_AEN_CAT_AUDIT, /* 8 */ | ||
55 | BFA_LOG_AEN_ID_IOC = BFA_LOG_AEN_MIN + BFA_AEN_CAT_IOC, /* 9 */ | ||
56 | BFA_LOG_AEN_ID_ETHPORT = BFA_LOG_AEN_MIN + BFA_AEN_CAT_ETHPORT,/* 10 */ | ||
57 | |||
58 | BFA_LOG_AEN_MAX = BFA_LOG_AEN_ID_ETHPORT, | ||
59 | /* AEN defs end */ | ||
60 | |||
61 | BFA_LOG_MODULE_ID_MIN = BFA_LOG_AEN_MAX, | ||
62 | |||
63 | BFA_LOG_FW_ID = BFA_LOG_MODULE_ID_MIN + 1, | ||
64 | BFA_LOG_HAL_ID = BFA_LOG_MODULE_ID_MIN + 2, | ||
65 | BFA_LOG_FCS_ID = BFA_LOG_MODULE_ID_MIN + 3, | ||
66 | BFA_LOG_WDRV_ID = BFA_LOG_MODULE_ID_MIN + 4, | ||
67 | BFA_LOG_LINUX_ID = BFA_LOG_MODULE_ID_MIN + 5, | ||
68 | BFA_LOG_SOLARIS_ID = BFA_LOG_MODULE_ID_MIN + 6, | ||
69 | |||
70 | BFA_LOG_MODULE_ID_MAX = BFA_LOG_SOLARIS_ID, | ||
71 | |||
72 | /* Not part of any arrays */ | ||
73 | BFA_LOG_MODULE_ID_ALL = BFA_LOG_MODULE_ID_MAX + 1, | ||
74 | BFA_LOG_AEN_ALL = BFA_LOG_MODULE_ID_MAX + 2, | ||
75 | BFA_LOG_DRV_ALL = BFA_LOG_MODULE_ID_MAX + 3, | ||
76 | }; | ||
77 | |||
78 | /* | ||
79 | * BFA log catalog name | ||
80 | */ | ||
81 | #define BFA_LOG_CAT_NAME "BFA" | ||
82 | |||
83 | /* | ||
84 | * bfa log severity values | ||
85 | */ | ||
86 | enum bfa_log_severity { | ||
87 | BFA_LOG_INVALID = 0, | ||
88 | BFA_LOG_CRITICAL = 1, | ||
89 | BFA_LOG_ERROR = 2, | ||
90 | BFA_LOG_WARNING = 3, | ||
91 | BFA_LOG_INFO = 4, | ||
92 | BFA_LOG_NONE = 5, | ||
93 | BFA_LOG_LEVEL_MAX = BFA_LOG_NONE | ||
94 | }; | ||
95 | |||
96 | #define BFA_LOG_MODID_OFFSET 16 | ||
97 | |||
98 | |||
99 | struct bfa_log_msgdef_s { | ||
100 | u32 msg_id; /* message id */ | ||
101 | int attributes; /* attributes */ | ||
102 | int severity; /* severity level */ | ||
103 | char *msg_value; | ||
104 | /* msg string */ | ||
105 | char *message; | ||
106 | /* msg format string */ | ||
107 | int arg_type; /* argument type */ | ||
108 | int arg_num; /* number of argument */ | ||
109 | }; | ||
110 | |||
111 | /* | ||
112 | * supported argument type | ||
113 | */ | ||
114 | enum bfa_log_arg_type { | ||
115 | BFA_LOG_S = 0, /* string */ | ||
116 | BFA_LOG_D, /* decimal */ | ||
117 | BFA_LOG_I, /* integer */ | ||
118 | BFA_LOG_O, /* oct number */ | ||
119 | BFA_LOG_U, /* unsigned integer */ | ||
120 | BFA_LOG_X, /* hex number */ | ||
121 | BFA_LOG_F, /* floating */ | ||
122 | BFA_LOG_C, /* character */ | ||
123 | BFA_LOG_L, /* double */ | ||
124 | BFA_LOG_P /* pointer */ | ||
125 | }; | ||
126 | |||
127 | #define BFA_LOG_ARG_TYPE 2 | ||
128 | #define BFA_LOG_ARG0 (0 * BFA_LOG_ARG_TYPE) | ||
129 | #define BFA_LOG_ARG1 (1 * BFA_LOG_ARG_TYPE) | ||
130 | #define BFA_LOG_ARG2 (2 * BFA_LOG_ARG_TYPE) | ||
131 | #define BFA_LOG_ARG3 (3 * BFA_LOG_ARG_TYPE) | ||
132 | |||
133 | #define BFA_LOG_GET_MOD_ID(msgid) ((msgid >> BFA_LOG_MODID_OFFSET) & 0xff) | ||
134 | #define BFA_LOG_GET_MSG_IDX(msgid) (msgid & 0xffff) | ||
135 | #define BFA_LOG_GET_MSG_ID(msgdef) ((msgdef)->msg_id) | ||
136 | #define BFA_LOG_GET_MSG_FMT_STRING(msgdef) ((msgdef)->message) | ||
137 | #define BFA_LOG_GET_SEVERITY(msgdef) ((msgdef)->severity) | ||
138 | |||
139 | /* | ||
140 | * Event attributes | ||
141 | */ | ||
142 | #define BFA_LOG_ATTR_NONE 0 | ||
143 | #define BFA_LOG_ATTR_AUDIT 1 | ||
144 | #define BFA_LOG_ATTR_LOG 2 | ||
145 | #define BFA_LOG_ATTR_FFDC 4 | ||
146 | |||
147 | #define BFA_LOG_CREATE_ID(msw, lsw) \ | ||
148 | (((u32)msw << BFA_LOG_MODID_OFFSET) | lsw) | ||
149 | |||
150 | struct bfa_log_mod_s; | ||
151 | |||
152 | /** | ||
153 | * callback function | ||
154 | */ | ||
155 | typedef void (*bfa_log_cb_t)(struct bfa_log_mod_s *log_mod, u32 msg_id, | ||
156 | const char *format, ...); | ||
157 | |||
158 | |||
159 | struct bfa_log_mod_s { | ||
160 | char instance_info[16]; /* instance info */ | ||
161 | int log_level[BFA_LOG_MODULE_ID_MAX + 1]; | ||
162 | /* log level for modules */ | ||
163 | bfa_log_cb_t cbfn; /* callback function */ | ||
164 | }; | ||
165 | |||
166 | extern int bfa_log_init(struct bfa_log_mod_s *log_mod, | ||
167 | char *instance_name, bfa_log_cb_t cbfn); | ||
168 | extern int bfa_log(struct bfa_log_mod_s *log_mod, u32 msg_id, ...); | ||
169 | extern bfa_status_t bfa_log_set_level(struct bfa_log_mod_s *log_mod, | ||
170 | int mod_id, enum bfa_log_severity log_level); | ||
171 | extern bfa_status_t bfa_log_set_level_all(struct bfa_log_mod_s *log_mod, | ||
172 | enum bfa_log_severity log_level); | ||
173 | extern bfa_status_t bfa_log_set_level_aen(struct bfa_log_mod_s *log_mod, | ||
174 | enum bfa_log_severity log_level); | ||
175 | extern enum bfa_log_severity bfa_log_get_level(struct bfa_log_mod_s *log_mod, | ||
176 | int mod_id); | ||
177 | extern enum bfa_log_severity bfa_log_get_msg_level( | ||
178 | struct bfa_log_mod_s *log_mod, u32 msg_id); | ||
179 | /* | ||
180 | * array of messages generated from xml files | ||
181 | */ | ||
182 | extern struct bfa_log_msgdef_s bfa_log_msg_array[]; | ||
183 | |||
184 | #endif | ||
diff --git a/drivers/scsi/bfa/include/cs/bfa_perf.h b/drivers/scsi/bfa/include/cs/bfa_perf.h new file mode 100644 index 000000000000..45aa5f978ff5 --- /dev/null +++ b/drivers/scsi/bfa/include/cs/bfa_perf.h | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFAD_PERF_H__ | ||
18 | #define __BFAD_PERF_H__ | ||
19 | |||
20 | #ifdef BFAD_PERF_BUILD | ||
21 | |||
22 | #undef bfa_trc | ||
23 | #undef bfa_trc32 | ||
24 | #undef bfa_assert | ||
25 | #undef BFA_TRC_FILE | ||
26 | |||
27 | #define bfa_trc(_trcp, _data) | ||
28 | #define bfa_trc32(_trcp, _data) | ||
29 | #define bfa_assert(__cond) | ||
30 | #define BFA_TRC_FILE(__mod, __submod) | ||
31 | |||
32 | #endif | ||
33 | |||
34 | #endif /* __BFAD_PERF_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/cs/bfa_plog.h b/drivers/scsi/bfa/include/cs/bfa_plog.h new file mode 100644 index 000000000000..670f86e5fc6e --- /dev/null +++ b/drivers/scsi/bfa/include/cs/bfa_plog.h | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_PORTLOG_H__ | ||
18 | #define __BFA_PORTLOG_H__ | ||
19 | |||
20 | #include "protocol/fc.h" | ||
21 | #include <defs/bfa_defs_types.h> | ||
22 | |||
23 | #define BFA_PL_NLOG_ENTS 256 | ||
24 | #define BFA_PL_LOG_REC_INCR(_x) ((_x)++, (_x) %= BFA_PL_NLOG_ENTS) | ||
25 | |||
26 | #define BFA_PL_STRING_LOG_SZ 32 /* number of chars in string log */ | ||
27 | #define BFA_PL_INT_LOG_SZ 8 /* number of integers in the integer log */ | ||
28 | |||
29 | enum bfa_plog_log_type { | ||
30 | BFA_PL_LOG_TYPE_INVALID = 0, | ||
31 | BFA_PL_LOG_TYPE_INT = 1, | ||
32 | BFA_PL_LOG_TYPE_STRING = 2, | ||
33 | }; | ||
34 | |||
35 | /* | ||
36 | * the (fixed size) record format for each entry in the portlog | ||
37 | */ | ||
38 | struct bfa_plog_rec_s { | ||
39 | u32 tv; /* Filled by the portlog driver when the * | ||
40 | * entry is added to the circular log. */ | ||
41 | u8 port; /* Source port that logged this entry. CM | ||
42 | * entities will use 0xFF */ | ||
43 | u8 mid; /* Integer value to be used by all entities * | ||
44 | * while logging. The module id to string * | ||
45 | * conversion will be done by BFAL. See | ||
46 | * enum bfa_plog_mid */ | ||
47 | u8 eid; /* indicates Rx, Tx, IOCTL, etc. See | ||
48 | * enum bfa_plog_eid */ | ||
49 | u8 log_type; /* indicates string log or integer log. | ||
50 | * see bfa_plog_log_type_t */ | ||
51 | u8 log_num_ints; | ||
52 | /* | ||
53 | * interpreted only if log_type is INT_LOG. indicates number of | ||
54 | * integers in the int_log[] (0-PL_INT_LOG_SZ). | ||
55 | */ | ||
56 | u8 rsvd; | ||
57 | u16 misc; /* can be used to indicate fc frame length, | ||
58 | *etc.. */ | ||
59 | union { | ||
60 | char string_log[BFA_PL_STRING_LOG_SZ]; | ||
61 | u32 int_log[BFA_PL_INT_LOG_SZ]; | ||
62 | } log_entry; | ||
63 | |||
64 | }; | ||
65 | |||
66 | /* | ||
67 | * the following #defines will be used by the logging entities to indicate | ||
68 | * their module id. BFAL will convert the integer value to string format | ||
69 | * | ||
70 | * process to be used while changing the following #defines: | ||
71 | * - Always add new entries at the end | ||
72 | * - define corresponding string in BFAL | ||
73 | * - Do not remove any entry or rearrange the order. | ||
74 | */ | ||
75 | enum bfa_plog_mid { | ||
76 | BFA_PL_MID_INVALID = 0, | ||
77 | BFA_PL_MID_DEBUG = 1, | ||
78 | BFA_PL_MID_DRVR = 2, | ||
79 | BFA_PL_MID_HAL = 3, | ||
80 | BFA_PL_MID_HAL_FCXP = 4, | ||
81 | BFA_PL_MID_HAL_UF = 5, | ||
82 | BFA_PL_MID_FCS = 6, | ||
83 | BFA_PL_MID_MAX = 7 | ||
84 | }; | ||
85 | |||
86 | #define BFA_PL_MID_STRLEN 8 | ||
87 | struct bfa_plog_mid_strings_s { | ||
88 | char m_str[BFA_PL_MID_STRLEN]; | ||
89 | }; | ||
90 | |||
91 | /* | ||
92 | * the following #defines will be used by the logging entities to indicate | ||
93 | * their event type. BFAL will convert the integer value to string format | ||
94 | * | ||
95 | * process to be used while changing the following #defines: | ||
96 | * - Always add new entries at the end | ||
97 | * - define corresponding string in BFAL | ||
98 | * - Do not remove any entry or rearrange the order. | ||
99 | */ | ||
100 | enum bfa_plog_eid { | ||
101 | BFA_PL_EID_INVALID = 0, | ||
102 | BFA_PL_EID_IOC_DISABLE = 1, | ||
103 | BFA_PL_EID_IOC_ENABLE = 2, | ||
104 | BFA_PL_EID_PORT_DISABLE = 3, | ||
105 | BFA_PL_EID_PORT_ENABLE = 4, | ||
106 | BFA_PL_EID_PORT_ST_CHANGE = 5, | ||
107 | BFA_PL_EID_TX = 6, | ||
108 | BFA_PL_EID_TX_ACK1 = 7, | ||
109 | BFA_PL_EID_TX_RJT = 8, | ||
110 | BFA_PL_EID_TX_BSY = 9, | ||
111 | BFA_PL_EID_RX = 10, | ||
112 | BFA_PL_EID_RX_ACK1 = 11, | ||
113 | BFA_PL_EID_RX_RJT = 12, | ||
114 | BFA_PL_EID_RX_BSY = 13, | ||
115 | BFA_PL_EID_CT_IN = 14, | ||
116 | BFA_PL_EID_CT_OUT = 15, | ||
117 | BFA_PL_EID_DRIVER_START = 16, | ||
118 | BFA_PL_EID_RSCN = 17, | ||
119 | BFA_PL_EID_DEBUG = 18, | ||
120 | BFA_PL_EID_MISC = 19, | ||
121 | BFA_PL_EID_MAX = 20 | ||
122 | }; | ||
123 | |||
124 | #define BFA_PL_ENAME_STRLEN 8 | ||
125 | struct bfa_plog_eid_strings_s { | ||
126 | char e_str[BFA_PL_ENAME_STRLEN]; | ||
127 | }; | ||
128 | |||
129 | #define BFA_PL_SIG_LEN 8 | ||
130 | #define BFA_PL_SIG_STR "12pl123" | ||
131 | |||
132 | /* | ||
133 | * per port circular log buffer | ||
134 | */ | ||
135 | struct bfa_plog_s { | ||
136 | char plog_sig[BFA_PL_SIG_LEN]; /* Start signature */ | ||
137 | u8 plog_enabled; | ||
138 | u8 rsvd[7]; | ||
139 | u32 ticks; | ||
140 | u16 head; | ||
141 | u16 tail; | ||
142 | struct bfa_plog_rec_s plog_recs[BFA_PL_NLOG_ENTS]; | ||
143 | }; | ||
144 | |||
145 | void bfa_plog_init(struct bfa_plog_s *plog); | ||
146 | void bfa_plog_str(struct bfa_plog_s *plog, enum bfa_plog_mid mid, | ||
147 | enum bfa_plog_eid event, u16 misc, char *log_str); | ||
148 | void bfa_plog_intarr(struct bfa_plog_s *plog, enum bfa_plog_mid mid, | ||
149 | enum bfa_plog_eid event, u16 misc, | ||
150 | u32 *intarr, u32 num_ints); | ||
151 | void bfa_plog_fchdr(struct bfa_plog_s *plog, enum bfa_plog_mid mid, | ||
152 | enum bfa_plog_eid event, u16 misc, | ||
153 | struct fchs_s *fchdr); | ||
154 | void bfa_plog_fchdr_and_pl(struct bfa_plog_s *plog, enum bfa_plog_mid mid, | ||
155 | enum bfa_plog_eid event, u16 misc, | ||
156 | struct fchs_s *fchdr, u32 pld_w0); | ||
157 | void bfa_plog_clear(struct bfa_plog_s *plog); | ||
158 | void bfa_plog_enable(struct bfa_plog_s *plog); | ||
159 | void bfa_plog_disable(struct bfa_plog_s *plog); | ||
160 | bfa_boolean_t bfa_plog_get_setting(struct bfa_plog_s *plog); | ||
161 | |||
162 | #endif /* __BFA_PORTLOG_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/cs/bfa_q.h b/drivers/scsi/bfa/include/cs/bfa_q.h new file mode 100644 index 000000000000..ea895facedbc --- /dev/null +++ b/drivers/scsi/bfa/include/cs/bfa_q.h | |||
@@ -0,0 +1,81 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_q.h Circular queue definitions. | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_Q_H__ | ||
23 | #define __BFA_Q_H__ | ||
24 | |||
25 | #define bfa_q_first(_q) ((void *)(((struct list_head *) (_q))->next)) | ||
26 | #define bfa_q_next(_qe) (((struct list_head *) (_qe))->next) | ||
27 | #define bfa_q_prev(_qe) (((struct list_head *) (_qe))->prev) | ||
28 | |||
29 | /* | ||
30 | * bfa_q_qe_init - to initialize a queue element | ||
31 | */ | ||
32 | #define bfa_q_qe_init(_qe) { \ | ||
33 | bfa_q_next(_qe) = (struct list_head *) NULL; \ | ||
34 | bfa_q_prev(_qe) = (struct list_head *) NULL; \ | ||
35 | } | ||
36 | |||
37 | /* | ||
38 | * bfa_q_deq - dequeue an element from head of the queue | ||
39 | */ | ||
40 | #define bfa_q_deq(_q, _qe) { \ | ||
41 | if (!list_empty(_q)) { \ | ||
42 | (*((struct list_head **) (_qe))) = bfa_q_next(_q); \ | ||
43 | bfa_q_prev(bfa_q_next(*((struct list_head **) _qe))) = \ | ||
44 | (struct list_head *) (_q); \ | ||
45 | bfa_q_next(_q) = bfa_q_next(*((struct list_head **) _qe)); \ | ||
46 | BFA_Q_DBG_INIT(*((struct list_head **) _qe)); \ | ||
47 | } else { \ | ||
48 | *((struct list_head **) (_qe)) = (struct list_head *) NULL; \ | ||
49 | } \ | ||
50 | } | ||
51 | |||
52 | /* | ||
53 | * bfa_q_deq_tail - dequeue an element from tail of the queue | ||
54 | */ | ||
55 | #define bfa_q_deq_tail(_q, _qe) { \ | ||
56 | if (!list_empty(_q)) { \ | ||
57 | *((struct list_head **) (_qe)) = bfa_q_prev(_q); \ | ||
58 | bfa_q_next(bfa_q_prev(*((struct list_head **) _qe))) = \ | ||
59 | (struct list_head *) (_q); \ | ||
60 | bfa_q_prev(_q) = bfa_q_prev(*(struct list_head **) _qe); \ | ||
61 | BFA_Q_DBG_INIT(*((struct list_head **) _qe)); \ | ||
62 | } else { \ | ||
63 | *((struct list_head **) (_qe)) = (struct list_head *) NULL; \ | ||
64 | } \ | ||
65 | } | ||
66 | |||
67 | /* | ||
68 | * #ifdef BFA_DEBUG (Using bfa_assert to check for debug_build is not | ||
69 | * consistent across modules) | ||
70 | */ | ||
71 | #ifndef BFA_PERF_BUILD | ||
72 | #define BFA_Q_DBG_INIT(_qe) bfa_q_qe_init(_qe) | ||
73 | #else | ||
74 | #define BFA_Q_DBG_INIT(_qe) | ||
75 | #endif | ||
76 | |||
77 | #define bfa_q_is_on_q(_q, _qe) \ | ||
78 | bfa_q_is_on_q_func(_q, (struct list_head *)(_qe)) | ||
79 | extern int bfa_q_is_on_q_func(struct list_head *q, struct list_head *qe); | ||
80 | |||
81 | #endif | ||
diff --git a/drivers/scsi/bfa/include/cs/bfa_sm.h b/drivers/scsi/bfa/include/cs/bfa_sm.h new file mode 100644 index 000000000000..9877066680a6 --- /dev/null +++ b/drivers/scsi/bfa/include/cs/bfa_sm.h | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfasm.h State machine defines | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_SM_H__ | ||
23 | #define __BFA_SM_H__ | ||
24 | |||
25 | typedef void (*bfa_sm_t)(void *sm, int event); | ||
26 | |||
27 | #define bfa_sm_set_state(_sm, _state) (_sm)->sm = (bfa_sm_t)(_state) | ||
28 | #define bfa_sm_send_event(_sm, _event) (_sm)->sm((_sm), (_event)) | ||
29 | #define bfa_sm_get_state(_sm) ((_sm)->sm) | ||
30 | #define bfa_sm_cmp_state(_sm, _state) ((_sm)->sm == (bfa_sm_t)(_state)) | ||
31 | |||
32 | /** | ||
33 | * For converting from state machine function to state encoding. | ||
34 | */ | ||
35 | struct bfa_sm_table_s { | ||
36 | bfa_sm_t sm; /* state machine function */ | ||
37 | int state; /* state machine encoding */ | ||
38 | char *name; /* state name for display */ | ||
39 | }; | ||
40 | #define BFA_SM(_sm) ((bfa_sm_t)(_sm)) | ||
41 | |||
42 | int bfa_sm_to_state(struct bfa_sm_table_s *smt, bfa_sm_t sm); | ||
43 | |||
44 | /** | ||
45 | * State machine with entry actions. | ||
46 | */ | ||
47 | typedef void (*bfa_fsm_t)(void *fsm, int event); | ||
48 | |||
49 | /** | ||
50 | * oc - object class eg. bfa_ioc | ||
51 | * st - state, eg. reset | ||
52 | * otype - object type, eg. struct bfa_ioc_s | ||
53 | * etype - object type, eg. enum ioc_event | ||
54 | */ | ||
55 | #define bfa_fsm_state_decl(oc, st, otype, etype) \ | ||
56 | static void oc ## _sm_ ## st(otype * fsm, etype event); \ | ||
57 | static void oc ## _sm_ ## st ## _entry(otype * fsm) | ||
58 | |||
59 | #define bfa_fsm_set_state(_fsm, _state) do { \ | ||
60 | (_fsm)->fsm = (bfa_fsm_t)(_state); \ | ||
61 | _state ## _entry(_fsm); \ | ||
62 | } while (0) | ||
63 | |||
64 | #define bfa_fsm_send_event(_fsm, _event) \ | ||
65 | (_fsm)->fsm((_fsm), (_event)) | ||
66 | #define bfa_fsm_cmp_state(_fsm, _state) \ | ||
67 | ((_fsm)->fsm == (bfa_fsm_t)(_state)) | ||
68 | |||
69 | #endif | ||
diff --git a/drivers/scsi/bfa/include/cs/bfa_trc.h b/drivers/scsi/bfa/include/cs/bfa_trc.h new file mode 100644 index 000000000000..3e743928c74c --- /dev/null +++ b/drivers/scsi/bfa/include/cs/bfa_trc.h | |||
@@ -0,0 +1,176 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_TRC_H__ | ||
18 | #define __BFA_TRC_H__ | ||
19 | |||
20 | #include <bfa_os_inc.h> | ||
21 | |||
22 | #ifndef BFA_TRC_MAX | ||
23 | #define BFA_TRC_MAX (4 * 1024) | ||
24 | #endif | ||
25 | |||
26 | #ifndef BFA_TRC_TS | ||
27 | #define BFA_TRC_TS(_trcm) ((_trcm)->ticks ++) | ||
28 | #endif | ||
29 | |||
30 | struct bfa_trc_s { | ||
31 | #ifdef __BIGENDIAN | ||
32 | u16 fileno; | ||
33 | u16 line; | ||
34 | #else | ||
35 | u16 line; | ||
36 | u16 fileno; | ||
37 | #endif | ||
38 | u32 timestamp; | ||
39 | union { | ||
40 | struct { | ||
41 | u32 rsvd; | ||
42 | u32 u32; | ||
43 | } u32; | ||
44 | u64 u64; | ||
45 | } data; | ||
46 | }; | ||
47 | |||
48 | |||
49 | struct bfa_trc_mod_s { | ||
50 | u32 head; | ||
51 | u32 tail; | ||
52 | u32 ntrc; | ||
53 | u32 stopped; | ||
54 | u32 ticks; | ||
55 | u32 rsvd[3]; | ||
56 | struct bfa_trc_s trc[BFA_TRC_MAX]; | ||
57 | }; | ||
58 | |||
59 | |||
60 | enum { | ||
61 | BFA_TRC_FW = 1, /* firmware modules */ | ||
62 | BFA_TRC_HAL = 2, /* BFA modules */ | ||
63 | BFA_TRC_FCS = 3, /* BFA FCS modules */ | ||
64 | BFA_TRC_LDRV = 4, /* Linux driver modules */ | ||
65 | BFA_TRC_SDRV = 5, /* Solaris driver modules */ | ||
66 | BFA_TRC_VDRV = 6, /* vmware driver modules */ | ||
67 | BFA_TRC_WDRV = 7, /* windows driver modules */ | ||
68 | BFA_TRC_AEN = 8, /* AEN module */ | ||
69 | BFA_TRC_BIOS = 9, /* bios driver modules */ | ||
70 | BFA_TRC_EFI = 10, /* EFI driver modules */ | ||
71 | BNA_TRC_WDRV = 11, /* BNA windows driver modules */ | ||
72 | BNA_TRC_VDRV = 12, /* BNA vmware driver modules */ | ||
73 | BNA_TRC_SDRV = 13, /* BNA Solaris driver modules */ | ||
74 | BNA_TRC_LDRV = 14, /* BNA Linux driver modules */ | ||
75 | BNA_TRC_HAL = 15, /* BNA modules */ | ||
76 | BFA_TRC_CNA = 16, /* Common modules */ | ||
77 | BNA_TRC_IMDRV = 17 /* BNA windows intermediate driver modules */ | ||
78 | }; | ||
79 | #define BFA_TRC_MOD_SH 10 | ||
80 | #define BFA_TRC_MOD(__mod) ((BFA_TRC_ ## __mod) << BFA_TRC_MOD_SH) | ||
81 | |||
82 | /** | ||
83 | * Define a new tracing file (module). Module should match one defined above. | ||
84 | */ | ||
85 | #define BFA_TRC_FILE(__mod, __submod) \ | ||
86 | static int __trc_fileno = ((BFA_TRC_ ## __mod ## _ ## __submod) | \ | ||
87 | BFA_TRC_MOD(__mod)) | ||
88 | |||
89 | |||
90 | #define bfa_trc32(_trcp, _data) \ | ||
91 | __bfa_trc((_trcp)->trcmod, __trc_fileno, __LINE__, (u32)_data) | ||
92 | |||
93 | |||
94 | #ifndef BFA_BOOT_BUILD | ||
95 | #define bfa_trc(_trcp, _data) \ | ||
96 | __bfa_trc((_trcp)->trcmod, __trc_fileno, __LINE__, (u64)_data) | ||
97 | #else | ||
98 | void bfa_boot_trc(struct bfa_trc_mod_s *trcmod, u16 fileno, | ||
99 | u16 line, u32 data); | ||
100 | #define bfa_trc(_trcp, _data) \ | ||
101 | bfa_boot_trc((_trcp)->trcmod, __trc_fileno, __LINE__, (u32)_data) | ||
102 | #endif | ||
103 | |||
104 | |||
105 | static inline void | ||
106 | bfa_trc_init(struct bfa_trc_mod_s *trcm) | ||
107 | { | ||
108 | trcm->head = trcm->tail = trcm->stopped = 0; | ||
109 | trcm->ntrc = BFA_TRC_MAX; | ||
110 | } | ||
111 | |||
112 | |||
113 | static inline void | ||
114 | bfa_trc_stop(struct bfa_trc_mod_s *trcm) | ||
115 | { | ||
116 | trcm->stopped = 1; | ||
117 | } | ||
118 | |||
119 | #ifdef FWTRC | ||
120 | extern void dc_flush(void *data); | ||
121 | #else | ||
122 | #define dc_flush(data) | ||
123 | #endif | ||
124 | |||
125 | |||
126 | static inline void | ||
127 | __bfa_trc(struct bfa_trc_mod_s *trcm, int fileno, int line, u64 data) | ||
128 | { | ||
129 | int tail = trcm->tail; | ||
130 | struct bfa_trc_s *trc = &trcm->trc[tail]; | ||
131 | |||
132 | if (trcm->stopped) | ||
133 | return; | ||
134 | |||
135 | trc->fileno = (u16) fileno; | ||
136 | trc->line = (u16) line; | ||
137 | trc->data.u64 = data; | ||
138 | trc->timestamp = BFA_TRC_TS(trcm); | ||
139 | dc_flush(trc); | ||
140 | |||
141 | trcm->tail = (trcm->tail + 1) & (BFA_TRC_MAX - 1); | ||
142 | if (trcm->tail == trcm->head) | ||
143 | trcm->head = (trcm->head + 1) & (BFA_TRC_MAX - 1); | ||
144 | dc_flush(trcm); | ||
145 | } | ||
146 | |||
147 | |||
148 | static inline void | ||
149 | __bfa_trc32(struct bfa_trc_mod_s *trcm, int fileno, int line, u32 data) | ||
150 | { | ||
151 | int tail = trcm->tail; | ||
152 | struct bfa_trc_s *trc = &trcm->trc[tail]; | ||
153 | |||
154 | if (trcm->stopped) | ||
155 | return; | ||
156 | |||
157 | trc->fileno = (u16) fileno; | ||
158 | trc->line = (u16) line; | ||
159 | trc->data.u32.u32 = data; | ||
160 | trc->timestamp = BFA_TRC_TS(trcm); | ||
161 | dc_flush(trc); | ||
162 | |||
163 | trcm->tail = (trcm->tail + 1) & (BFA_TRC_MAX - 1); | ||
164 | if (trcm->tail == trcm->head) | ||
165 | trcm->head = (trcm->head + 1) & (BFA_TRC_MAX - 1); | ||
166 | dc_flush(trcm); | ||
167 | } | ||
168 | |||
169 | #ifndef BFA_PERF_BUILD | ||
170 | #define bfa_trc_fp(_trcp, _data) bfa_trc(_trcp, _data) | ||
171 | #else | ||
172 | #define bfa_trc_fp(_trcp, _data) | ||
173 | #endif | ||
174 | |||
175 | #endif /* __BFA_TRC_H__ */ | ||
176 | |||
diff --git a/drivers/scsi/bfa/include/cs/bfa_wc.h b/drivers/scsi/bfa/include/cs/bfa_wc.h new file mode 100644 index 000000000000..0460bd4fc7c4 --- /dev/null +++ b/drivers/scsi/bfa/include/cs/bfa_wc.h | |||
@@ -0,0 +1,68 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_wc.h Generic wait counter. | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_WC_H__ | ||
23 | #define __BFA_WC_H__ | ||
24 | |||
25 | typedef void (*bfa_wc_resume_t) (void *cbarg); | ||
26 | |||
27 | struct bfa_wc_s { | ||
28 | bfa_wc_resume_t wc_resume; | ||
29 | void *wc_cbarg; | ||
30 | int wc_count; | ||
31 | }; | ||
32 | |||
33 | static inline void | ||
34 | bfa_wc_up(struct bfa_wc_s *wc) | ||
35 | { | ||
36 | wc->wc_count++; | ||
37 | } | ||
38 | |||
39 | static inline void | ||
40 | bfa_wc_down(struct bfa_wc_s *wc) | ||
41 | { | ||
42 | wc->wc_count--; | ||
43 | if (wc->wc_count == 0) | ||
44 | wc->wc_resume(wc->wc_cbarg); | ||
45 | } | ||
46 | |||
47 | /** | ||
48 | * Initialize a waiting counter. | ||
49 | */ | ||
50 | static inline void | ||
51 | bfa_wc_init(struct bfa_wc_s *wc, bfa_wc_resume_t wc_resume, void *wc_cbarg) | ||
52 | { | ||
53 | wc->wc_resume = wc_resume; | ||
54 | wc->wc_cbarg = wc_cbarg; | ||
55 | wc->wc_count = 0; | ||
56 | bfa_wc_up(wc); | ||
57 | } | ||
58 | |||
59 | /** | ||
60 | * Wait for counter to reach zero | ||
61 | */ | ||
62 | static inline void | ||
63 | bfa_wc_wait(struct bfa_wc_s *wc) | ||
64 | { | ||
65 | bfa_wc_down(wc); | ||
66 | } | ||
67 | |||
68 | #endif | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_adapter.h b/drivers/scsi/bfa/include/defs/bfa_defs_adapter.h new file mode 100644 index 000000000000..8c208fc8e329 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_adapter.h | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_DEFS_ADAPTER_H__ | ||
18 | #define __BFA_DEFS_ADAPTER_H__ | ||
19 | |||
20 | #include <protocol/types.h> | ||
21 | #include <defs/bfa_defs_version.h> | ||
22 | #include <defs/bfa_defs_mfg.h> | ||
23 | |||
24 | /** | ||
25 | * BFA adapter level attributes. | ||
26 | */ | ||
27 | enum { | ||
28 | BFA_ADAPTER_SERIAL_NUM_LEN = STRSZ(BFA_MFG_SERIALNUM_SIZE), | ||
29 | /* | ||
30 | *!< adapter serial num length | ||
31 | */ | ||
32 | BFA_ADAPTER_MODEL_NAME_LEN = 16, /* model name length */ | ||
33 | BFA_ADAPTER_MODEL_DESCR_LEN = 128, /* model description length */ | ||
34 | BFA_ADAPTER_MFG_NAME_LEN = 8, /* manufacturer name length */ | ||
35 | BFA_ADAPTER_SYM_NAME_LEN = 64, /* adapter symbolic name length */ | ||
36 | BFA_ADAPTER_OS_TYPE_LEN = 64, /* adapter os type length */ | ||
37 | }; | ||
38 | |||
39 | struct bfa_adapter_attr_s { | ||
40 | char manufacturer[BFA_ADAPTER_MFG_NAME_LEN]; | ||
41 | char serial_num[BFA_ADAPTER_SERIAL_NUM_LEN]; | ||
42 | u32 rsvd1; | ||
43 | char model[BFA_ADAPTER_MODEL_NAME_LEN]; | ||
44 | char model_descr[BFA_ADAPTER_MODEL_DESCR_LEN]; | ||
45 | wwn_t pwwn; | ||
46 | char node_symname[FC_SYMNAME_MAX]; | ||
47 | char hw_ver[BFA_VERSION_LEN]; | ||
48 | char fw_ver[BFA_VERSION_LEN]; | ||
49 | char optrom_ver[BFA_VERSION_LEN]; | ||
50 | char os_type[BFA_ADAPTER_OS_TYPE_LEN]; | ||
51 | struct bfa_mfg_vpd_s vpd; | ||
52 | struct mac_s mac; | ||
53 | |||
54 | u8 nports; | ||
55 | u8 max_speed; | ||
56 | u8 prototype; | ||
57 | char asic_rev; | ||
58 | |||
59 | u8 pcie_gen; | ||
60 | u8 pcie_lanes_orig; | ||
61 | u8 pcie_lanes; | ||
62 | u8 cna_capable; | ||
63 | }; | ||
64 | |||
65 | /** | ||
66 | * BFA adapter level events | ||
67 | * Arguments below are in BFAL context from Mgmt | ||
68 | * BFA_PORT_AEN_ADD: [in]: None [out]: serial_num, pwwn, nports | ||
69 | * BFA_PORT_AEN_REMOVE: [in]: pwwn [out]: serial_num, pwwn, nports | ||
70 | */ | ||
71 | enum bfa_adapter_aen_event { | ||
72 | BFA_ADAPTER_AEN_ADD = 1, /* New Adapter found event */ | ||
73 | BFA_ADAPTER_AEN_REMOVE = 2, /* Adapter removed event */ | ||
74 | }; | ||
75 | |||
76 | struct bfa_adapter_aen_data_s { | ||
77 | char serial_num[BFA_ADAPTER_SERIAL_NUM_LEN]; | ||
78 | u32 nports; /* Number of NPorts */ | ||
79 | wwn_t pwwn; /* WWN of one of its physical port */ | ||
80 | }; | ||
81 | |||
82 | #endif /* __BFA_DEFS_ADAPTER_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_aen.h b/drivers/scsi/bfa/include/defs/bfa_defs_aen.h new file mode 100644 index 000000000000..4c81a613db3d --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_aen.h | |||
@@ -0,0 +1,73 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_AEN_H__ | ||
19 | #define __BFA_DEFS_AEN_H__ | ||
20 | |||
21 | #include <defs/bfa_defs_types.h> | ||
22 | #include <defs/bfa_defs_ioc.h> | ||
23 | #include <defs/bfa_defs_adapter.h> | ||
24 | #include <defs/bfa_defs_port.h> | ||
25 | #include <defs/bfa_defs_lport.h> | ||
26 | #include <defs/bfa_defs_rport.h> | ||
27 | #include <defs/bfa_defs_itnim.h> | ||
28 | #include <defs/bfa_defs_tin.h> | ||
29 | #include <defs/bfa_defs_ipfc.h> | ||
30 | #include <defs/bfa_defs_audit.h> | ||
31 | #include <defs/bfa_defs_ethport.h> | ||
32 | |||
33 | enum bfa_aen_category { | ||
34 | BFA_AEN_CAT_ADAPTER = 1, | ||
35 | BFA_AEN_CAT_PORT = 2, | ||
36 | BFA_AEN_CAT_LPORT = 3, | ||
37 | BFA_AEN_CAT_RPORT = 4, | ||
38 | BFA_AEN_CAT_ITNIM = 5, | ||
39 | BFA_AEN_CAT_TIN = 6, | ||
40 | BFA_AEN_CAT_IPFC = 7, | ||
41 | BFA_AEN_CAT_AUDIT = 8, | ||
42 | BFA_AEN_CAT_IOC = 9, | ||
43 | BFA_AEN_CAT_ETHPORT = 10, | ||
44 | BFA_AEN_MAX_CAT = 10 | ||
45 | }; | ||
46 | |||
47 | #pragma pack(1) | ||
48 | union bfa_aen_data_u { | ||
49 | struct bfa_adapter_aen_data_s adapter; | ||
50 | struct bfa_port_aen_data_s port; | ||
51 | struct bfa_lport_aen_data_s lport; | ||
52 | struct bfa_rport_aen_data_s rport; | ||
53 | struct bfa_itnim_aen_data_s itnim; | ||
54 | struct bfa_audit_aen_data_s audit; | ||
55 | struct bfa_ioc_aen_data_s ioc; | ||
56 | struct bfa_ethport_aen_data_s ethport; | ||
57 | }; | ||
58 | |||
59 | struct bfa_aen_entry_s { | ||
60 | enum bfa_aen_category aen_category; | ||
61 | int aen_type; | ||
62 | union bfa_aen_data_u aen_data; | ||
63 | struct bfa_timeval_s aen_tv; | ||
64 | s32 seq_num; | ||
65 | s32 bfad_num; | ||
66 | s32 rsvd[1]; | ||
67 | }; | ||
68 | |||
69 | #pragma pack() | ||
70 | |||
71 | #define bfa_aen_event_t int | ||
72 | |||
73 | #endif /* __BFA_DEFS_AEN_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_audit.h b/drivers/scsi/bfa/include/defs/bfa_defs_audit.h new file mode 100644 index 000000000000..8e3a962bf20c --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_audit.h | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_AUDIT_H__ | ||
19 | #define __BFA_DEFS_AUDIT_H__ | ||
20 | |||
21 | #include <bfa_os_inc.h> | ||
22 | |||
23 | /** | ||
24 | * BFA audit events | ||
25 | */ | ||
26 | enum bfa_audit_aen_event { | ||
27 | BFA_AUDIT_AEN_AUTH_ENABLE = 1, | ||
28 | BFA_AUDIT_AEN_AUTH_DISABLE = 2, | ||
29 | }; | ||
30 | |||
31 | /** | ||
32 | * audit event data | ||
33 | */ | ||
34 | struct bfa_audit_aen_data_s { | ||
35 | wwn_t pwwn; | ||
36 | }; | ||
37 | |||
38 | #endif /* __BFA_DEFS_AUDIT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_auth.h b/drivers/scsi/bfa/include/defs/bfa_defs_auth.h new file mode 100644 index 000000000000..dd19c83aba58 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_auth.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_DEFS_AUTH_H__ | ||
18 | #define __BFA_DEFS_AUTH_H__ | ||
19 | |||
20 | #include <defs/bfa_defs_types.h> | ||
21 | |||
22 | #define PUBLIC_KEY 15409 | ||
23 | #define PRIVATE_KEY 19009 | ||
24 | #define KEY_LEN 32399 | ||
25 | #define BFA_AUTH_SECRET_STRING_LEN 256 | ||
26 | #define BFA_AUTH_FAIL_TIMEOUT 0xFF | ||
27 | |||
28 | /** | ||
29 | * Authentication status | ||
30 | */ | ||
31 | enum bfa_auth_status { | ||
32 | BFA_AUTH_STATUS_NONE = 0, /* no authentication */ | ||
33 | BFA_AUTH_UNINIT = 1, /* state - uninit */ | ||
34 | BFA_AUTH_NEG_SEND = 2, /* state - negotiate send */ | ||
35 | BFA_AUTH_CHAL_WAIT = 3, /* state - challenge wait */ | ||
36 | BFA_AUTH_NEG_RETRY = 4, /* state - negotiate retry */ | ||
37 | BFA_AUTH_REPLY_SEND = 5, /* state - reply send */ | ||
38 | BFA_AUTH_STATUS_WAIT = 6, /* state - status wait */ | ||
39 | BFA_AUTH_SUCCESS = 7, /* state - success */ | ||
40 | BFA_AUTH_FAILED = 8, /* state - failed */ | ||
41 | BFA_AUTH_STATUS_UNKNOWN = 9, /* authentication status unknown */ | ||
42 | }; | ||
43 | |||
44 | struct auth_proto_stats_s { | ||
45 | u32 auth_rjts; | ||
46 | u32 auth_negs; | ||
47 | u32 auth_dones; | ||
48 | |||
49 | u32 dhchap_challenges; | ||
50 | u32 dhchap_replies; | ||
51 | u32 dhchap_successes; | ||
52 | }; | ||
53 | |||
54 | /** | ||
55 | * Authentication related statistics | ||
56 | */ | ||
57 | struct bfa_auth_stats_s { | ||
58 | u32 auth_failures; /* authentication failures */ | ||
59 | u32 auth_successes; /* authentication successes*/ | ||
60 | struct auth_proto_stats_s auth_rx_stats; /* Rx protocol stats */ | ||
61 | struct auth_proto_stats_s auth_tx_stats; /* Tx protocol stats */ | ||
62 | }; | ||
63 | |||
64 | /** | ||
65 | * Authentication hash function algorithms | ||
66 | */ | ||
67 | enum bfa_auth_algo { | ||
68 | BFA_AUTH_ALGO_MD5 = 1, /* Message-Digest algorithm 5 */ | ||
69 | BFA_AUTH_ALGO_SHA1 = 2, /* Secure Hash Algorithm 1 */ | ||
70 | BFA_AUTH_ALGO_MS = 3, /* MD5, then SHA-1 */ | ||
71 | BFA_AUTH_ALGO_SM = 4, /* SHA-1, then MD5 */ | ||
72 | }; | ||
73 | |||
74 | /** | ||
75 | * DH Groups | ||
76 | * | ||
77 | * Current value could be combination of one or more of the following values | ||
78 | */ | ||
79 | enum bfa_auth_group { | ||
80 | BFA_AUTH_GROUP_DHNULL = 0, /* DH NULL (value == 0) */ | ||
81 | BFA_AUTH_GROUP_DH768 = 1, /* DH group 768 (value == 1) */ | ||
82 | BFA_AUTH_GROUP_DH1024 = 2, /* DH group 1024 (value == 2) */ | ||
83 | BFA_AUTH_GROUP_DH1280 = 4, /* DH group 1280 (value == 3) */ | ||
84 | BFA_AUTH_GROUP_DH1536 = 8, /* DH group 1536 (value == 4) */ | ||
85 | |||
86 | BFA_AUTH_GROUP_ALL = 256 /* Use default DH group order | ||
87 | * 0, 1, 2, 3, 4 */ | ||
88 | }; | ||
89 | |||
90 | /** | ||
91 | * Authentication secret sources | ||
92 | */ | ||
93 | enum bfa_auth_secretsource { | ||
94 | BFA_AUTH_SECSRC_LOCAL = 1, /* locally configured */ | ||
95 | BFA_AUTH_SECSRC_RADIUS = 2, /* use radius server */ | ||
96 | BFA_AUTH_SECSRC_TACACS = 3, /* TACACS server */ | ||
97 | }; | ||
98 | |||
99 | /** | ||
100 | * Authentication attributes | ||
101 | */ | ||
102 | struct bfa_auth_attr_s { | ||
103 | enum bfa_auth_status status; | ||
104 | enum bfa_auth_algo algo; | ||
105 | enum bfa_auth_group dh_grp; | ||
106 | u16 rjt_code; | ||
107 | u16 rjt_code_exp; | ||
108 | u8 secret_set; | ||
109 | u8 resv[7]; | ||
110 | }; | ||
111 | |||
112 | #endif /* __BFA_DEFS_AUTH_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_boot.h b/drivers/scsi/bfa/include/defs/bfa_defs_boot.h new file mode 100644 index 000000000000..6f4aa5283545 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_boot.h | |||
@@ -0,0 +1,71 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_BOOT_H__ | ||
19 | #define __BFA_DEFS_BOOT_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | #include <defs/bfa_defs_types.h> | ||
23 | #include <defs/bfa_defs_pport.h> | ||
24 | |||
25 | enum { | ||
26 | BFA_BOOT_BOOTLUN_MAX = 4, /* maximum boot lun per IOC */ | ||
27 | }; | ||
28 | |||
29 | #define BOOT_CFG_REV1 1 | ||
30 | |||
31 | /** | ||
32 | * Boot options setting. Boot options setting determines from where | ||
33 | * to get the boot lun information | ||
34 | */ | ||
35 | enum bfa_boot_bootopt { | ||
36 | BFA_BOOT_AUTO_DISCOVER = 0, /* Boot from blun provided by fabric */ | ||
37 | BFA_BOOT_STORED_BLUN = 1, /* Boot from bluns stored in flash */ | ||
38 | BFA_BOOT_FIRST_LUN = 2, /* Boot from first discovered blun */ | ||
39 | }; | ||
40 | |||
41 | /** | ||
42 | * Boot lun information. | ||
43 | */ | ||
44 | struct bfa_boot_bootlun_s { | ||
45 | wwn_t pwwn; /* port wwn of target */ | ||
46 | lun_t lun; /* 64-bit lun */ | ||
47 | }; | ||
48 | |||
49 | /** | ||
50 | * BOOT boot configuraton | ||
51 | */ | ||
52 | struct bfa_boot_cfg_s { | ||
53 | u8 version; | ||
54 | u8 rsvd1; | ||
55 | u16 chksum; | ||
56 | |||
57 | u8 enable; /* enable/disable SAN boot */ | ||
58 | u8 speed; /* boot speed settings */ | ||
59 | u8 topology; /* boot topology setting */ | ||
60 | u8 bootopt; /* bfa_boot_bootopt_t */ | ||
61 | |||
62 | u32 nbluns; /* number of boot luns */ | ||
63 | |||
64 | u32 rsvd2; | ||
65 | |||
66 | struct bfa_boot_bootlun_s blun[BFA_BOOT_BOOTLUN_MAX]; | ||
67 | struct bfa_boot_bootlun_s blun_disc[BFA_BOOT_BOOTLUN_MAX]; | ||
68 | }; | ||
69 | |||
70 | |||
71 | #endif /* __BFA_DEFS_BOOT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_cee.h b/drivers/scsi/bfa/include/defs/bfa_defs_cee.h new file mode 100644 index 000000000000..520a22f52dd1 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_cee.h | |||
@@ -0,0 +1,159 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * bfa_defs_cee.h Interface declarations between host based | ||
7 | * BFAL and DCBX/LLDP module in Firmware | ||
8 | * | ||
9 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or modify it | ||
12 | * under the terms of the GNU General Public License (GPL) Version 2 as | ||
13 | * published by the Free Software Foundation | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, but | ||
16 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
18 | * General Public License for more details. | ||
19 | */ | ||
20 | #ifndef __BFA_DEFS_CEE_H__ | ||
21 | #define __BFA_DEFS_CEE_H__ | ||
22 | |||
23 | #include <defs/bfa_defs_types.h> | ||
24 | #include <defs/bfa_defs_pport.h> | ||
25 | #include <protocol/types.h> | ||
26 | |||
27 | #pragma pack(1) | ||
28 | |||
29 | #define BFA_CEE_LLDP_MAX_STRING_LEN (128) | ||
30 | |||
31 | |||
32 | /* FIXME: this is coming from the protocol spec. Can the host & apps share the | ||
33 | protocol .h files ? | ||
34 | */ | ||
35 | #define BFA_CEE_LLDP_SYS_CAP_OTHER 0x0001 | ||
36 | #define BFA_CEE_LLDP_SYS_CAP_REPEATER 0x0002 | ||
37 | #define BFA_CEE_LLDP_SYS_CAP_MAC_BRIDGE 0x0004 | ||
38 | #define BFA_CEE_LLDP_SYS_CAP_WLAN_AP 0x0008 | ||
39 | #define BFA_CEE_LLDP_SYS_CAP_ROUTER 0x0010 | ||
40 | #define BFA_CEE_LLDP_SYS_CAP_TELEPHONE 0x0020 | ||
41 | #define BFA_CEE_LLDP_SYS_CAP_DOCSIS_CD 0x0040 | ||
42 | #define BFA_CEE_LLDP_SYS_CAP_STATION 0x0080 | ||
43 | #define BFA_CEE_LLDP_SYS_CAP_CVLAN 0x0100 | ||
44 | #define BFA_CEE_LLDP_SYS_CAP_SVLAN 0x0200 | ||
45 | #define BFA_CEE_LLDP_SYS_CAP_TPMR 0x0400 | ||
46 | |||
47 | |||
48 | /* LLDP string type */ | ||
49 | struct bfa_cee_lldp_str_s { | ||
50 | u8 sub_type; | ||
51 | u8 len; | ||
52 | u8 rsvd[2]; | ||
53 | u8 value[BFA_CEE_LLDP_MAX_STRING_LEN]; | ||
54 | }; | ||
55 | |||
56 | |||
57 | /* LLDP paramters */ | ||
58 | struct bfa_cee_lldp_cfg_s { | ||
59 | struct bfa_cee_lldp_str_s chassis_id; | ||
60 | struct bfa_cee_lldp_str_s port_id; | ||
61 | struct bfa_cee_lldp_str_s port_desc; | ||
62 | struct bfa_cee_lldp_str_s sys_name; | ||
63 | struct bfa_cee_lldp_str_s sys_desc; | ||
64 | struct bfa_cee_lldp_str_s mgmt_addr; | ||
65 | u16 time_to_interval; | ||
66 | u16 enabled_system_cap; | ||
67 | }; | ||
68 | |||
69 | enum bfa_cee_dcbx_version_e { | ||
70 | DCBX_PROTOCOL_PRECEE = 1, | ||
71 | DCBX_PROTOCOL_CEE = 2, | ||
72 | }; | ||
73 | |||
74 | enum bfa_cee_lls_e { | ||
75 | CEE_LLS_DOWN_NO_TLV = 0, /* LLS is down because the TLV not sent by | ||
76 | * the peer */ | ||
77 | CEE_LLS_DOWN = 1, /* LLS is down as advertised by the peer */ | ||
78 | CEE_LLS_UP = 2, | ||
79 | }; | ||
80 | |||
81 | /* CEE/DCBX parameters */ | ||
82 | struct bfa_cee_dcbx_cfg_s { | ||
83 | u8 pgid[8]; | ||
84 | u8 pg_percentage[8]; | ||
85 | u8 pfc_enabled; /* bitmap of priorties with PFC enabled */ | ||
86 | u8 fcoe_user_priority; /* bitmap of priorities used for FcoE | ||
87 | * traffic */ | ||
88 | u8 dcbx_version; /* operating version:CEE or preCEE */ | ||
89 | u8 lls_fcoe; /* FCoE Logical Link Status */ | ||
90 | u8 lls_lan; /* LAN Logical Link Status */ | ||
91 | u8 rsvd[3]; | ||
92 | }; | ||
93 | |||
94 | /* CEE status */ | ||
95 | /* Making this to tri-state for the benefit of port list command */ | ||
96 | enum bfa_cee_status_e { | ||
97 | CEE_PHY_DOWN = 0, | ||
98 | CEE_PHY_UP = 1, | ||
99 | CEE_UP = 2, | ||
100 | }; | ||
101 | |||
102 | /* CEE Query */ | ||
103 | struct bfa_cee_attr_s { | ||
104 | u8 cee_status; | ||
105 | u8 error_reason; | ||
106 | struct bfa_cee_lldp_cfg_s lldp_remote; | ||
107 | struct bfa_cee_dcbx_cfg_s dcbx_remote; | ||
108 | mac_t src_mac; | ||
109 | u8 link_speed; | ||
110 | u8 filler[3]; | ||
111 | }; | ||
112 | |||
113 | |||
114 | |||
115 | |||
116 | /* LLDP/DCBX/CEE Statistics */ | ||
117 | |||
118 | struct bfa_cee_lldp_stats_s { | ||
119 | u32 frames_transmitted; | ||
120 | u32 frames_aged_out; | ||
121 | u32 frames_discarded; | ||
122 | u32 frames_in_error; | ||
123 | u32 frames_rcvd; | ||
124 | u32 tlvs_discarded; | ||
125 | u32 tlvs_unrecognized; | ||
126 | }; | ||
127 | |||
128 | struct bfa_cee_dcbx_stats_s { | ||
129 | u32 subtlvs_unrecognized; | ||
130 | u32 negotiation_failed; | ||
131 | u32 remote_cfg_changed; | ||
132 | u32 tlvs_received; | ||
133 | u32 tlvs_invalid; | ||
134 | u32 seqno; | ||
135 | u32 ackno; | ||
136 | u32 recvd_seqno; | ||
137 | u32 recvd_ackno; | ||
138 | }; | ||
139 | |||
140 | struct bfa_cee_cfg_stats_s { | ||
141 | u32 cee_status_down; | ||
142 | u32 cee_status_up; | ||
143 | u32 cee_hw_cfg_changed; | ||
144 | u32 recvd_invalid_cfg; | ||
145 | }; | ||
146 | |||
147 | |||
148 | struct bfa_cee_stats_s { | ||
149 | struct bfa_cee_lldp_stats_s lldp_stats; | ||
150 | struct bfa_cee_dcbx_stats_s dcbx_stats; | ||
151 | struct bfa_cee_cfg_stats_s cfg_stats; | ||
152 | }; | ||
153 | |||
154 | #pragma pack() | ||
155 | |||
156 | |||
157 | #endif /* __BFA_DEFS_CEE_H__ */ | ||
158 | |||
159 | |||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_driver.h b/drivers/scsi/bfa/include/defs/bfa_defs_driver.h new file mode 100644 index 000000000000..57049805762b --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_driver.h | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_DRIVER_H__ | ||
19 | #define __BFA_DEFS_DRIVER_H__ | ||
20 | |||
21 | /** | ||
22 | * Driver statistics | ||
23 | */ | ||
24 | u16 tm_io_abort; | ||
25 | u16 tm_io_abort_comp; | ||
26 | u16 tm_lun_reset; | ||
27 | u16 tm_lun_reset_comp; | ||
28 | u16 tm_target_reset; | ||
29 | u16 tm_bus_reset; | ||
30 | u16 ioc_restart; /* IOC restart count */ | ||
31 | u16 io_pending; /* outstanding io count per-IOC */ | ||
32 | u64 control_req; | ||
33 | u64 input_req; | ||
34 | u64 output_req; | ||
35 | u64 input_words; | ||
36 | u64 output_words; | ||
37 | } bfa_driver_stats_t; | ||
38 | |||
39 | |||
40 | #endif /* __BFA_DEFS_DRIVER_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_ethport.h b/drivers/scsi/bfa/include/defs/bfa_defs_ethport.h new file mode 100644 index 000000000000..79f9b3e146f7 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_ethport.h | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_ETHPORT_H__ | ||
19 | #define __BFA_DEFS_ETHPORT_H__ | ||
20 | |||
21 | #include <defs/bfa_defs_status.h> | ||
22 | #include <protocol/types.h> | ||
23 | #include <cna/pstats/phyport_defs.h> | ||
24 | #include <cna/pstats/ethport_defs.h> | ||
25 | |||
26 | struct bna_tx_info_s { | ||
27 | u32 miniport_state; | ||
28 | u32 adapter_state; | ||
29 | u64 tx_count; | ||
30 | u64 tx_wi; | ||
31 | u64 tx_sg; | ||
32 | u64 tx_tcp_chksum; | ||
33 | u64 tx_udp_chksum; | ||
34 | u64 tx_ip_chksum; | ||
35 | u64 tx_lsov1; | ||
36 | u64 tx_lsov2; | ||
37 | u64 tx_max_sg_len ; | ||
38 | }; | ||
39 | |||
40 | struct bna_rx_queue_info_s { | ||
41 | u16 q_id ; | ||
42 | u16 buf_size ; | ||
43 | u16 buf_count ; | ||
44 | u16 rsvd ; | ||
45 | u64 rx_count ; | ||
46 | u64 rx_dropped ; | ||
47 | u64 rx_unsupported ; | ||
48 | u64 rx_internal_err ; | ||
49 | u64 rss_count ; | ||
50 | u64 vlan_count ; | ||
51 | u64 rx_tcp_chksum ; | ||
52 | u64 rx_udp_chksum ; | ||
53 | u64 rx_ip_chksum ; | ||
54 | u64 rx_hds ; | ||
55 | }; | ||
56 | |||
57 | struct bna_rx_q_set_s { | ||
58 | u16 q_set_type; | ||
59 | u32 miniport_state; | ||
60 | u32 adapter_state; | ||
61 | struct bna_rx_queue_info_s rx_queue[2]; | ||
62 | }; | ||
63 | |||
64 | struct bna_port_stats_s { | ||
65 | struct bna_tx_info_s tx_stats; | ||
66 | u16 qset_count ; | ||
67 | struct bna_rx_q_set_s rx_qset[8]; | ||
68 | }; | ||
69 | |||
70 | struct bfa_ethport_stats_s { | ||
71 | struct bna_stats_txf txf_stats[1]; | ||
72 | struct bna_stats_rxf rxf_stats[1]; | ||
73 | struct bnad_drv_stats drv_stats; | ||
74 | }; | ||
75 | |||
76 | /** | ||
77 | * Ethernet port events | ||
78 | * Arguments below are in BFAL context from Mgmt | ||
79 | * BFA_PORT_AEN_ETH_LINKUP: [in]: mac [out]: mac | ||
80 | * BFA_PORT_AEN_ETH_LINKDOWN: [in]: mac [out]: mac | ||
81 | * BFA_PORT_AEN_ETH_ENABLE: [in]: mac [out]: mac | ||
82 | * BFA_PORT_AEN_ETH_DISABLE: [in]: mac [out]: mac | ||
83 | * | ||
84 | */ | ||
85 | enum bfa_ethport_aen_event { | ||
86 | BFA_ETHPORT_AEN_LINKUP = 1, /* Base Port Ethernet link up event */ | ||
87 | BFA_ETHPORT_AEN_LINKDOWN = 2, /* Base Port Ethernet link down event */ | ||
88 | BFA_ETHPORT_AEN_ENABLE = 3, /* Base Port Ethernet link enable event */ | ||
89 | BFA_ETHPORT_AEN_DISABLE = 4, /* Base Port Ethernet link disable | ||
90 | * event */ | ||
91 | }; | ||
92 | |||
93 | struct bfa_ethport_aen_data_s { | ||
94 | mac_t mac; /* MAC address of the physical port */ | ||
95 | }; | ||
96 | |||
97 | |||
98 | #endif /* __BFA_DEFS_ETHPORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_fcpim.h b/drivers/scsi/bfa/include/defs/bfa_defs_fcpim.h new file mode 100644 index 000000000000..c08f4f5026ac --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_fcpim.h | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_DEFS_FCPIM_H__ | ||
18 | #define __BFA_DEFS_FCPIM_H__ | ||
19 | |||
20 | struct bfa_fcpim_stats_s { | ||
21 | u32 total_ios; /* Total IO count */ | ||
22 | u32 qresumes; /* IO waiting for CQ space */ | ||
23 | u32 no_iotags; /* NO IO contexts */ | ||
24 | u32 io_aborts; /* IO abort requests */ | ||
25 | u32 no_tskims; /* NO task management contexts */ | ||
26 | u32 iocomp_ok; /* IO completions with OK status */ | ||
27 | u32 iocomp_underrun; /* IO underrun (good) */ | ||
28 | u32 iocomp_overrun; /* IO overrun (good) */ | ||
29 | u32 iocomp_aborted; /* Aborted IO requests */ | ||
30 | u32 iocomp_timedout; /* IO timeouts */ | ||
31 | u32 iocom_nexus_abort; /* IO selection timeouts */ | ||
32 | u32 iocom_proto_err; /* IO protocol errors */ | ||
33 | u32 iocom_dif_err; /* IO SBC-3 protection errors */ | ||
34 | u32 iocom_tm_abort; /* IO aborted by TM requests */ | ||
35 | u32 iocom_sqer_needed; /* IO retry for SQ error | ||
36 | *recovery */ | ||
37 | u32 iocom_res_free; /* Delayed freeing of IO resources */ | ||
38 | u32 iocomp_scsierr; /* IO with non-good SCSI status */ | ||
39 | u32 iocom_hostabrts; /* Host IO abort requests */ | ||
40 | u32 iocom_utags; /* IO comp with unknown tags */ | ||
41 | u32 io_cleanups; /* IO implicitly aborted */ | ||
42 | u32 io_tmaborts; /* IO aborted due to TM commands */ | ||
43 | u32 rsvd; | ||
44 | }; | ||
45 | #endif /*__BFA_DEFS_FCPIM_H__*/ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_im_common.h b/drivers/scsi/bfa/include/defs/bfa_defs_im_common.h new file mode 100644 index 000000000000..9ccf53bef65a --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_im_common.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_IM_COMMON_H__ | ||
19 | #define __BFA_DEFS_IM_COMMON_H__ | ||
20 | |||
21 | #define BFA_ADAPTER_NAME_LEN 256 | ||
22 | #define BFA_ADAPTER_GUID_LEN 256 | ||
23 | #define RESERVED_VLAN_NAME L"PORT VLAN" | ||
24 | #define PASSTHRU_VLAN_NAME L"PASSTHRU VLAN" | ||
25 | |||
26 | u64 tx_pkt_cnt; | ||
27 | u64 rx_pkt_cnt; | ||
28 | u32 duration; | ||
29 | u8 status; | ||
30 | } bfa_im_stats_t, *pbfa_im_stats_t; | ||
31 | |||
32 | #endif /* __BFA_DEFS_IM_COMMON_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_im_team.h b/drivers/scsi/bfa/include/defs/bfa_defs_im_team.h new file mode 100644 index 000000000000..a486a7eb81d6 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_im_team.h | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_IM_TEAM_H__ | ||
19 | #define __BFA_DEFS_IM_TEAM_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | |||
23 | #define BFA_TEAM_MAX_PORTS 8 | ||
24 | #define BFA_TEAM_NAME_LEN 256 | ||
25 | #define BFA_MAX_NUM_TEAMS 16 | ||
26 | #define BFA_TEAM_INVALID_DELAY -1 | ||
27 | |||
28 | BFA_LACP_RATE_SLOW = 1, | ||
29 | BFA_LACP_RATE_FAST | ||
30 | } bfa_im_lacp_rate_t; | ||
31 | |||
32 | BFA_TEAM_MODE_FAIL_OVER = 1, | ||
33 | BFA_TEAM_MODE_FAIL_BACK, | ||
34 | BFA_TEAM_MODE_LACP, | ||
35 | BFA_TEAM_MODE_NONE | ||
36 | } bfa_im_team_mode_t; | ||
37 | |||
38 | BFA_XMIT_POLICY_L2 = 1, | ||
39 | BFA_XMIT_POLICY_L3_L4 | ||
40 | } bfa_im_xmit_policy_t; | ||
41 | |||
42 | bfa_im_team_mode_t team_mode; | ||
43 | bfa_im_lacp_rate_t lacp_rate; | ||
44 | bfa_im_xmit_policy_t xmit_policy; | ||
45 | int delay; | ||
46 | wchar_t primary[BFA_ADAPTER_NAME_LEN]; | ||
47 | wchar_t preferred_primary[BFA_ADAPTER_NAME_LEN]; | ||
48 | mac_t mac; | ||
49 | u16 num_ports; | ||
50 | u16 num_vlans; | ||
51 | u16 vlan_list[BFA_MAX_VLANS_PER_PORT]; | ||
52 | wchar_t team_guid_list[BFA_TEAM_MAX_PORTS][BFA_ADAPTER_GUID_LEN]; | ||
53 | wchar_t ioc_name_list[BFA_TEAM_MAX_PORTS][BFA_ADAPTER_NAME_LEN]; | ||
54 | } bfa_im_team_attr_t; | ||
55 | |||
56 | wchar_t team_name[BFA_TEAM_NAME_LEN]; | ||
57 | bfa_im_xmit_policy_t xmit_policy; | ||
58 | int delay; | ||
59 | wchar_t primary[BFA_ADAPTER_NAME_LEN]; | ||
60 | wchar_t preferred_primary[BFA_ADAPTER_NAME_LEN]; | ||
61 | } bfa_im_team_edit_t, *pbfa_im_team_edit_t; | ||
62 | |||
63 | wchar_t team_name[BFA_TEAM_NAME_LEN]; | ||
64 | bfa_im_team_mode_t team_mode; | ||
65 | mac_t mac; | ||
66 | } bfa_im_team_info_t; | ||
67 | |||
68 | bfa_im_team_info_t team_info[BFA_MAX_NUM_TEAMS]; | ||
69 | u16 num_teams; | ||
70 | } bfa_im_team_list_t, *pbfa_im_team_list_t; | ||
71 | |||
72 | #endif /* __BFA_DEFS_IM_TEAM_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_ioc.h b/drivers/scsi/bfa/include/defs/bfa_defs_ioc.h new file mode 100644 index 000000000000..b1d532da3a9d --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_ioc.h | |||
@@ -0,0 +1,152 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_IOC_H__ | ||
19 | #define __BFA_DEFS_IOC_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | #include <defs/bfa_defs_types.h> | ||
23 | #include <defs/bfa_defs_version.h> | ||
24 | #include <defs/bfa_defs_adapter.h> | ||
25 | #include <defs/bfa_defs_pm.h> | ||
26 | |||
27 | enum { | ||
28 | BFA_IOC_DRIVER_LEN = 16, | ||
29 | BFA_IOC_CHIP_REV_LEN = 8, | ||
30 | }; | ||
31 | |||
32 | /** | ||
33 | * Driver and firmware versions. | ||
34 | */ | ||
35 | struct bfa_ioc_driver_attr_s { | ||
36 | char driver[BFA_IOC_DRIVER_LEN]; /* driver name */ | ||
37 | char driver_ver[BFA_VERSION_LEN]; /* driver version */ | ||
38 | char fw_ver[BFA_VERSION_LEN]; /* firmware version*/ | ||
39 | char bios_ver[BFA_VERSION_LEN]; /* bios version */ | ||
40 | char efi_ver[BFA_VERSION_LEN]; /* EFI version */ | ||
41 | char ob_ver[BFA_VERSION_LEN]; /* openboot version*/ | ||
42 | }; | ||
43 | |||
44 | /** | ||
45 | * IOC PCI device attributes | ||
46 | */ | ||
47 | struct bfa_ioc_pci_attr_s { | ||
48 | u16 vendor_id; /* PCI vendor ID */ | ||
49 | u16 device_id; /* PCI device ID */ | ||
50 | u16 ssid; /* subsystem ID */ | ||
51 | u16 ssvid; /* subsystem vendor ID */ | ||
52 | u32 pcifn; /* PCI device function */ | ||
53 | u32 rsvd; /* padding */ | ||
54 | u8 chip_rev[BFA_IOC_CHIP_REV_LEN]; /* chip revision */ | ||
55 | }; | ||
56 | |||
57 | /** | ||
58 | * IOC states | ||
59 | */ | ||
60 | enum bfa_ioc_state { | ||
61 | BFA_IOC_RESET = 1, /* IOC is in reset state */ | ||
62 | BFA_IOC_SEMWAIT = 2, /* Waiting for IOC hardware semaphore */ | ||
63 | BFA_IOC_HWINIT = 3, /* IOC hardware is being initialized */ | ||
64 | BFA_IOC_GETATTR = 4, /* IOC is being configured */ | ||
65 | BFA_IOC_OPERATIONAL = 5, /* IOC is operational */ | ||
66 | BFA_IOC_INITFAIL = 6, /* IOC hardware failure */ | ||
67 | BFA_IOC_HBFAIL = 7, /* IOC heart-beat failure */ | ||
68 | BFA_IOC_DISABLING = 8, /* IOC is being disabled */ | ||
69 | BFA_IOC_DISABLED = 9, /* IOC is disabled */ | ||
70 | BFA_IOC_FWMISMATCH = 10, /* IOC firmware different from drivers */ | ||
71 | }; | ||
72 | |||
73 | /** | ||
74 | * IOC firmware stats | ||
75 | */ | ||
76 | struct bfa_fw_ioc_stats_s { | ||
77 | u32 hb_count; | ||
78 | u32 cfg_reqs; | ||
79 | u32 enable_reqs; | ||
80 | u32 disable_reqs; | ||
81 | u32 stats_reqs; | ||
82 | u32 clrstats_reqs; | ||
83 | u32 unknown_reqs; | ||
84 | u32 ic_reqs; /* interrupt coalesce reqs */ | ||
85 | }; | ||
86 | |||
87 | /** | ||
88 | * IOC driver stats | ||
89 | */ | ||
90 | struct bfa_ioc_drv_stats_s { | ||
91 | u32 ioc_isrs; | ||
92 | u32 ioc_enables; | ||
93 | u32 ioc_disables; | ||
94 | u32 ioc_hbfails; | ||
95 | u32 ioc_boots; | ||
96 | u32 stats_tmos; | ||
97 | u32 hb_count; | ||
98 | u32 disable_reqs; | ||
99 | u32 enable_reqs; | ||
100 | u32 disable_replies; | ||
101 | u32 enable_replies; | ||
102 | }; | ||
103 | |||
104 | /** | ||
105 | * IOC statistics | ||
106 | */ | ||
107 | struct bfa_ioc_stats_s { | ||
108 | struct bfa_ioc_drv_stats_s drv_stats; /* driver IOC stats */ | ||
109 | struct bfa_fw_ioc_stats_s fw_stats; /* firmware IOC stats */ | ||
110 | }; | ||
111 | |||
112 | |||
113 | enum bfa_ioc_type_e { | ||
114 | BFA_IOC_TYPE_FC = 1, | ||
115 | BFA_IOC_TYPE_FCoE = 2, | ||
116 | BFA_IOC_TYPE_LL = 3, | ||
117 | }; | ||
118 | |||
119 | /** | ||
120 | * IOC attributes returned in queries | ||
121 | */ | ||
122 | struct bfa_ioc_attr_s { | ||
123 | enum bfa_ioc_type_e ioc_type; | ||
124 | enum bfa_ioc_state state; /* IOC state */ | ||
125 | struct bfa_adapter_attr_s adapter_attr; /* HBA attributes */ | ||
126 | struct bfa_ioc_driver_attr_s driver_attr; /* driver attr */ | ||
127 | struct bfa_ioc_pci_attr_s pci_attr; | ||
128 | u8 port_id; /* port number */ | ||
129 | }; | ||
130 | |||
131 | /** | ||
132 | * BFA IOC level events | ||
133 | */ | ||
134 | enum bfa_ioc_aen_event { | ||
135 | BFA_IOC_AEN_HBGOOD = 1, /* Heart Beat restore event */ | ||
136 | BFA_IOC_AEN_HBFAIL = 2, /* Heart Beat failure event */ | ||
137 | BFA_IOC_AEN_ENABLE = 3, /* IOC enabled event */ | ||
138 | BFA_IOC_AEN_DISABLE = 4, /* IOC disabled event */ | ||
139 | BFA_IOC_AEN_FWMISMATCH = 5, /* IOC firmware mismatch */ | ||
140 | }; | ||
141 | |||
142 | /** | ||
143 | * BFA IOC level event data, now just a place holder | ||
144 | */ | ||
145 | struct bfa_ioc_aen_data_s { | ||
146 | enum bfa_ioc_type_e ioc_type; | ||
147 | wwn_t pwwn; | ||
148 | mac_t mac; | ||
149 | }; | ||
150 | |||
151 | #endif /* __BFA_DEFS_IOC_H__ */ | ||
152 | |||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_iocfc.h b/drivers/scsi/bfa/include/defs/bfa_defs_iocfc.h new file mode 100644 index 000000000000..d76bcbd9820f --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_iocfc.h | |||
@@ -0,0 +1,310 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_IOCFC_H__ | ||
19 | #define __BFA_DEFS_IOCFC_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | #include <defs/bfa_defs_types.h> | ||
23 | #include <defs/bfa_defs_version.h> | ||
24 | #include <defs/bfa_defs_adapter.h> | ||
25 | #include <defs/bfa_defs_pm.h> | ||
26 | |||
27 | #define BFA_IOCFC_INTR_DELAY 1125 | ||
28 | #define BFA_IOCFC_INTR_LATENCY 225 | ||
29 | |||
30 | /** | ||
31 | * Interrupt coalescing configuration. | ||
32 | */ | ||
33 | struct bfa_iocfc_intr_attr_s { | ||
34 | bfa_boolean_t coalesce; /* enable/disable coalescing */ | ||
35 | u16 latency; /* latency in microseconds */ | ||
36 | u16 delay; /* delay in microseconds */ | ||
37 | }; | ||
38 | |||
39 | /** | ||
40 | * IOC firmware configuraton | ||
41 | */ | ||
42 | struct bfa_iocfc_fwcfg_s { | ||
43 | u16 num_fabrics; /* number of fabrics */ | ||
44 | u16 num_lports; /* number of local lports */ | ||
45 | u16 num_rports; /* number of remote ports */ | ||
46 | u16 num_ioim_reqs; /* number of IO reqs */ | ||
47 | u16 num_tskim_reqs; /* task management requests */ | ||
48 | u16 num_iotm_reqs; /* number of TM IO reqs */ | ||
49 | u16 num_tsktm_reqs; /* TM task management requests*/ | ||
50 | u16 num_fcxp_reqs; /* unassisted FC exchanges */ | ||
51 | u16 num_uf_bufs; /* unsolicited recv buffers */ | ||
52 | u8 num_cqs; | ||
53 | u8 rsvd; | ||
54 | }; | ||
55 | |||
56 | struct bfa_iocfc_drvcfg_s { | ||
57 | u16 num_reqq_elems; /* number of req queue elements */ | ||
58 | u16 num_rspq_elems; /* number of rsp queue elements */ | ||
59 | u16 num_sgpgs; /* number of total SG pages */ | ||
60 | u16 num_sboot_tgts; /* number of SAN boot targets */ | ||
61 | u16 num_sboot_luns; /* number of SAN boot luns */ | ||
62 | u16 ioc_recover; /* IOC recovery mode */ | ||
63 | u16 min_cfg; /* minimum configuration */ | ||
64 | u16 path_tov; /* device path timeout */ | ||
65 | bfa_boolean_t delay_comp; /* delay completion of | ||
66 | failed inflight IOs */ | ||
67 | u32 rsvd; | ||
68 | }; | ||
69 | /** | ||
70 | * IOC configuration | ||
71 | */ | ||
72 | struct bfa_iocfc_cfg_s { | ||
73 | struct bfa_iocfc_fwcfg_s fwcfg; /* firmware side config */ | ||
74 | struct bfa_iocfc_drvcfg_s drvcfg; /* driver side config */ | ||
75 | }; | ||
76 | |||
77 | /** | ||
78 | * IOC firmware IO stats | ||
79 | */ | ||
80 | struct bfa_fw_io_stats_s { | ||
81 | u32 host_abort; /* IO aborted by host driver*/ | ||
82 | u32 host_cleanup; /* IO clean up by host driver */ | ||
83 | |||
84 | u32 fw_io_timeout; /* IOs timedout */ | ||
85 | u32 fw_frm_parse; /* frame parsed by f/w */ | ||
86 | u32 fw_frm_data; /* fcp_data frame parsed by f/w */ | ||
87 | u32 fw_frm_rsp; /* fcp_rsp frame parsed by f/w */ | ||
88 | u32 fw_frm_xfer_rdy; /* xfer_rdy frame parsed by f/w */ | ||
89 | u32 fw_frm_bls_acc; /* BLS ACC frame parsed by f/w */ | ||
90 | u32 fw_frm_tgt_abort; /* target ABTS parsed by f/w */ | ||
91 | u32 fw_frm_unknown; /* unknown parsed by f/w */ | ||
92 | u32 fw_data_dma; /* f/w DMA'ed the data frame */ | ||
93 | u32 fw_frm_drop; /* f/w drop the frame */ | ||
94 | |||
95 | u32 rec_timeout; /* FW rec timed out */ | ||
96 | u32 error_rec; /* FW sending rec on | ||
97 | * an error condition*/ | ||
98 | u32 wait_for_si; /* FW wait for SI */ | ||
99 | u32 rec_rsp_inval; /* REC rsp invalid */ | ||
100 | u32 seqr_io_abort; /* target does not know cmd so abort */ | ||
101 | u32 seqr_io_retry; /* SEQR failed so retry IO */ | ||
102 | |||
103 | u32 itn_cisc_upd_rsp; /* ITN cisc updated on fcp_rsp */ | ||
104 | u32 itn_cisc_upd_data; /* ITN cisc updated on fcp_data */ | ||
105 | u32 itn_cisc_upd_xfer_rdy; /* ITN cisc updated on fcp_data */ | ||
106 | |||
107 | u32 fcp_data_lost; /* fcp data lost */ | ||
108 | |||
109 | u32 ro_set_in_xfer_rdy; /* Target set RO in Xfer_rdy frame */ | ||
110 | u32 xfer_rdy_ooo_err; /* Out of order Xfer_rdy received */ | ||
111 | u32 xfer_rdy_unknown_err; /* unknown error in xfer_rdy frame */ | ||
112 | |||
113 | u32 io_abort_timeout; /* ABTS timedout */ | ||
114 | u32 sler_initiated; /* SLER initiated */ | ||
115 | |||
116 | u32 unexp_fcp_rsp; /* fcp response in wrong state */ | ||
117 | |||
118 | u32 fcp_rsp_under_run; /* fcp rsp IO underrun */ | ||
119 | u32 fcp_rsp_under_run_wr; /* fcp rsp IO underrun for write */ | ||
120 | u32 fcp_rsp_under_run_err; /* fcp rsp IO underrun error */ | ||
121 | u32 fcp_rsp_resid_inval; /* invalid residue */ | ||
122 | u32 fcp_rsp_over_run; /* fcp rsp IO overrun */ | ||
123 | u32 fcp_rsp_over_run_err; /* fcp rsp IO overrun error */ | ||
124 | u32 fcp_rsp_proto_err; /* protocol error in fcp rsp */ | ||
125 | u32 fcp_rsp_sense_err; /* error in sense info in fcp rsp */ | ||
126 | u32 fcp_conf_req; /* FCP conf requested */ | ||
127 | |||
128 | u32 tgt_aborted_io; /* target initiated abort */ | ||
129 | |||
130 | u32 ioh_edtov_timeout_event;/* IOH edtov timer popped */ | ||
131 | u32 ioh_fcp_rsp_excp_event; /* IOH FCP_RSP exception */ | ||
132 | u32 ioh_fcp_conf_event; /* IOH FCP_CONF */ | ||
133 | u32 ioh_mult_frm_rsp_event; /* IOH multi_frame FCP_RSP */ | ||
134 | u32 ioh_hit_class2_event; /* IOH hit class2 */ | ||
135 | u32 ioh_miss_other_event; /* IOH miss other */ | ||
136 | u32 ioh_seq_cnt_err_event; /* IOH seq cnt error */ | ||
137 | u32 ioh_len_err_event; /* IOH len error - fcp_dl != | ||
138 | * bytes xfered */ | ||
139 | u32 ioh_seq_len_err_event; /* IOH seq len error */ | ||
140 | u32 ioh_data_oor_event; /* Data out of range */ | ||
141 | u32 ioh_ro_ooo_event; /* Relative offset out of range */ | ||
142 | u32 ioh_cpu_owned_event; /* IOH hit -iost owned by f/w */ | ||
143 | u32 ioh_unexp_frame_event; /* unexpected frame recieved | ||
144 | * count */ | ||
145 | u32 ioh_err_int; /* IOH error int during data-phase | ||
146 | * for scsi write | ||
147 | */ | ||
148 | }; | ||
149 | |||
150 | /** | ||
151 | * IOC port firmware stats | ||
152 | */ | ||
153 | |||
154 | struct bfa_fw_port_fpg_stats_s { | ||
155 | u32 intr_evt; | ||
156 | u32 intr; | ||
157 | u32 intr_excess; | ||
158 | u32 intr_cause0; | ||
159 | u32 intr_other; | ||
160 | u32 intr_other_ign; | ||
161 | u32 sig_lost; | ||
162 | u32 sig_regained; | ||
163 | u32 sync_lost; | ||
164 | u32 sync_to; | ||
165 | u32 sync_regained; | ||
166 | u32 div2_overflow; | ||
167 | u32 div2_underflow; | ||
168 | u32 efifo_overflow; | ||
169 | u32 efifo_underflow; | ||
170 | u32 idle_rx; | ||
171 | u32 lrr_rx; | ||
172 | u32 lr_rx; | ||
173 | u32 ols_rx; | ||
174 | u32 nos_rx; | ||
175 | u32 lip_rx; | ||
176 | u32 arbf0_rx; | ||
177 | u32 mrk_rx; | ||
178 | u32 const_mrk_rx; | ||
179 | u32 prim_unknown; | ||
180 | u32 rsvd; | ||
181 | }; | ||
182 | |||
183 | |||
184 | struct bfa_fw_port_lksm_stats_s { | ||
185 | u32 hwsm_success; /* hwsm state machine success */ | ||
186 | u32 hwsm_fails; /* hwsm fails */ | ||
187 | u32 hwsm_wdtov; /* hwsm timed out */ | ||
188 | u32 swsm_success; /* swsm success */ | ||
189 | u32 swsm_fails; /* swsm fails */ | ||
190 | u32 swsm_wdtov; /* swsm timed out */ | ||
191 | u32 busybufs; /* link init failed due to busybuf */ | ||
192 | u32 buf_waits; /* bufwait state entries */ | ||
193 | u32 link_fails; /* link failures */ | ||
194 | u32 psp_errors; /* primitive sequence protocol errors */ | ||
195 | u32 lr_unexp; /* No. of times LR rx-ed unexpectedly */ | ||
196 | u32 lrr_unexp; /* No. of times LRR rx-ed unexpectedly */ | ||
197 | u32 lr_tx; /* No. of times LR tx started */ | ||
198 | u32 lrr_tx; /* No. of times LRR tx started */ | ||
199 | u32 ols_tx; /* No. of times OLS tx started */ | ||
200 | u32 nos_tx; /* No. of times NOS tx started */ | ||
201 | }; | ||
202 | |||
203 | |||
204 | struct bfa_fw_port_snsm_stats_s { | ||
205 | u32 hwsm_success; /* Successful hwsm terminations */ | ||
206 | u32 hwsm_fails; /* hwsm fail count */ | ||
207 | u32 hwsm_wdtov; /* hwsm timed out */ | ||
208 | u32 swsm_success; /* swsm success */ | ||
209 | u32 swsm_wdtov; /* swsm timed out */ | ||
210 | u32 error_resets; /* error resets initiated by upsm */ | ||
211 | u32 sync_lost; /* Sync loss count */ | ||
212 | u32 sig_lost; /* Signal loss count */ | ||
213 | }; | ||
214 | |||
215 | |||
216 | struct bfa_fw_port_physm_stats_s { | ||
217 | u32 module_inserts; /* Module insert count */ | ||
218 | u32 module_xtracts; /* Module extracts count */ | ||
219 | u32 module_invalids; /* Invalid module inserted count */ | ||
220 | u32 module_read_ign; /* Module validation status ignored */ | ||
221 | u32 laser_faults; /* Laser fault count */ | ||
222 | u32 rsvd; | ||
223 | }; | ||
224 | |||
225 | |||
226 | struct bfa_fw_fip_stats_s { | ||
227 | u32 disc_req; /* Discovery solicit requests */ | ||
228 | u32 disc_rsp; /* Discovery solicit response */ | ||
229 | u32 disc_err; /* Discovery advt. parse errors */ | ||
230 | u32 disc_unsol; /* Discovery unsolicited */ | ||
231 | u32 disc_timeouts; /* Discovery timeouts */ | ||
232 | u32 linksvc_unsupp; /* Unsupported link service req */ | ||
233 | u32 linksvc_err; /* Parse error in link service req */ | ||
234 | u32 logo_req; /* Number of FIP logos received */ | ||
235 | u32 clrvlink_req; /* Clear virtual link req */ | ||
236 | u32 op_unsupp; /* Unsupported FIP operation */ | ||
237 | u32 untagged; /* Untagged frames (ignored) */ | ||
238 | u32 rsvd; | ||
239 | }; | ||
240 | |||
241 | |||
242 | struct bfa_fw_lps_stats_s { | ||
243 | u32 mac_invalids; /* Invalid mac assigned */ | ||
244 | u32 rsvd; | ||
245 | }; | ||
246 | |||
247 | |||
248 | struct bfa_fw_fcoe_stats_s { | ||
249 | u32 cee_linkups; /* CEE link up count */ | ||
250 | u32 cee_linkdns; /* CEE link down count */ | ||
251 | u32 fip_linkups; /* FIP link up count */ | ||
252 | u32 fip_linkdns; /* FIP link up count */ | ||
253 | u32 fip_fails; /* FIP fail count */ | ||
254 | u32 mac_invalids; /* Invalid mac assigned */ | ||
255 | }; | ||
256 | |||
257 | /** | ||
258 | * IOC firmware FCoE port stats | ||
259 | */ | ||
260 | struct bfa_fw_fcoe_port_stats_s { | ||
261 | struct bfa_fw_fcoe_stats_s fcoe_stats; | ||
262 | struct bfa_fw_fip_stats_s fip_stats; | ||
263 | }; | ||
264 | |||
265 | /** | ||
266 | * IOC firmware FC port stats | ||
267 | */ | ||
268 | struct bfa_fw_fc_port_stats_s { | ||
269 | struct bfa_fw_port_fpg_stats_s fpg_stats; | ||
270 | struct bfa_fw_port_physm_stats_s physm_stats; | ||
271 | struct bfa_fw_port_snsm_stats_s snsm_stats; | ||
272 | struct bfa_fw_port_lksm_stats_s lksm_stats; | ||
273 | }; | ||
274 | |||
275 | /** | ||
276 | * IOC firmware FC port stats | ||
277 | */ | ||
278 | union bfa_fw_port_stats_s { | ||
279 | struct bfa_fw_fc_port_stats_s fc_stats; | ||
280 | struct bfa_fw_fcoe_port_stats_s fcoe_stats; | ||
281 | }; | ||
282 | |||
283 | /** | ||
284 | * IOC firmware stats | ||
285 | */ | ||
286 | struct bfa_fw_stats_s { | ||
287 | struct bfa_fw_ioc_stats_s ioc_stats; | ||
288 | struct bfa_fw_io_stats_s io_stats; | ||
289 | union bfa_fw_port_stats_s port_stats; | ||
290 | }; | ||
291 | |||
292 | /** | ||
293 | * IOC statistics | ||
294 | */ | ||
295 | struct bfa_iocfc_stats_s { | ||
296 | struct bfa_fw_stats_s fw_stats; /* firmware IOC stats */ | ||
297 | }; | ||
298 | |||
299 | /** | ||
300 | * IOC attributes returned in queries | ||
301 | */ | ||
302 | struct bfa_iocfc_attr_s { | ||
303 | struct bfa_iocfc_cfg_s config; /* IOCFC config */ | ||
304 | struct bfa_iocfc_intr_attr_s intr_attr; /* interrupt attr */ | ||
305 | }; | ||
306 | |||
307 | #define BFA_IOCFC_PATHTOV_MAX 60 | ||
308 | #define BFA_IOCFC_QDEPTH_MAX 2000 | ||
309 | |||
310 | #endif /* __BFA_DEFS_IOC_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_ipfc.h b/drivers/scsi/bfa/include/defs/bfa_defs_ipfc.h new file mode 100644 index 000000000000..7cb63ea98f38 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_ipfc.h | |||
@@ -0,0 +1,70 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_DEFS_IPFC_H__ | ||
18 | #define __BFA_DEFS_IPFC_H__ | ||
19 | |||
20 | #include <bfa_os_inc.h> | ||
21 | #include <protocol/types.h> | ||
22 | #include <defs/bfa_defs_types.h> | ||
23 | |||
24 | /** | ||
25 | * FCS ip remote port states | ||
26 | */ | ||
27 | enum bfa_iprp_state { | ||
28 | BFA_IPRP_UNINIT = 0, /* PORT is not yet initialized */ | ||
29 | BFA_IPRP_ONLINE = 1, /* process login is complete */ | ||
30 | BFA_IPRP_OFFLINE = 2, /* iprp is offline */ | ||
31 | }; | ||
32 | |||
33 | /** | ||
34 | * FCS remote port statistics | ||
35 | */ | ||
36 | struct bfa_iprp_stats_s { | ||
37 | u32 offlines; | ||
38 | u32 onlines; | ||
39 | u32 rscns; | ||
40 | u32 plogis; | ||
41 | u32 logos; | ||
42 | u32 plogi_timeouts; | ||
43 | u32 plogi_rejects; | ||
44 | }; | ||
45 | |||
46 | /** | ||
47 | * FCS iprp attribute returned in queries | ||
48 | */ | ||
49 | struct bfa_iprp_attr_s { | ||
50 | enum bfa_iprp_state state; | ||
51 | }; | ||
52 | |||
53 | struct bfa_ipfc_stats_s { | ||
54 | u32 arp_sent; | ||
55 | u32 arp_recv; | ||
56 | u32 arp_reply_sent; | ||
57 | u32 arp_reply_recv; | ||
58 | u32 farp_sent; | ||
59 | u32 farp_recv; | ||
60 | u32 farp_reply_sent; | ||
61 | u32 farp_reply_recv; | ||
62 | u32 farp_reject_sent; | ||
63 | u32 farp_reject_recv; | ||
64 | }; | ||
65 | |||
66 | struct bfa_ipfc_attr_s { | ||
67 | bfa_boolean_t enabled; | ||
68 | }; | ||
69 | |||
70 | #endif /* __BFA_DEFS_IPFC_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_itnim.h b/drivers/scsi/bfa/include/defs/bfa_defs_itnim.h new file mode 100644 index 000000000000..2ec769903d24 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_itnim.h | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_DEFS_ITNIM_H__ | ||
18 | #define __BFA_DEFS_ITNIM_H__ | ||
19 | |||
20 | #include <bfa_os_inc.h> | ||
21 | #include <protocol/types.h> | ||
22 | |||
23 | /** | ||
24 | * FCS itnim states | ||
25 | */ | ||
26 | enum bfa_itnim_state { | ||
27 | BFA_ITNIM_OFFLINE = 0, /* offline */ | ||
28 | BFA_ITNIM_PRLI_SEND = 1, /* prli send */ | ||
29 | BFA_ITNIM_PRLI_SENT = 2, /* prli sent */ | ||
30 | BFA_ITNIM_PRLI_RETRY = 3, /* prli retry */ | ||
31 | BFA_ITNIM_HCB_ONLINE = 4, /* online callback */ | ||
32 | BFA_ITNIM_ONLINE = 5, /* online */ | ||
33 | BFA_ITNIM_HCB_OFFLINE = 6, /* offline callback */ | ||
34 | BFA_ITNIM_INITIATIOR = 7, /* initiator */ | ||
35 | }; | ||
36 | |||
37 | struct bfa_itnim_hal_stats_s { | ||
38 | u32 onlines; /* ITN nexus onlines (PRLI done) */ | ||
39 | u32 offlines; /* ITN Nexus offlines */ | ||
40 | u32 creates; /* ITN create requests */ | ||
41 | u32 deletes; /* ITN delete requests */ | ||
42 | u32 create_comps; /* ITN create completions */ | ||
43 | u32 delete_comps; /* ITN delete completions */ | ||
44 | u32 sler_events; /* SLER (sequence level error | ||
45 | * recovery) events */ | ||
46 | u32 ioc_disabled; /* Num IOC disables */ | ||
47 | u32 cleanup_comps; /* ITN cleanup completions */ | ||
48 | u32 tm_cmnds; /* task management(TM) cmnds sent */ | ||
49 | u32 tm_fw_rsps; /* TM cmds firmware responses */ | ||
50 | u32 tm_success; /* TM successes */ | ||
51 | u32 tm_failures; /* TM failures */ | ||
52 | u32 tm_io_comps; /* TM IO completions */ | ||
53 | u32 tm_qresumes; /* TM queue resumes (after waiting | ||
54 | * for resources) | ||
55 | */ | ||
56 | u32 tm_iocdowns; /* TM cmnds affected by IOC down */ | ||
57 | u32 tm_cleanups; /* TM cleanups */ | ||
58 | u32 tm_cleanup_comps; | ||
59 | /* TM cleanup completions */ | ||
60 | u32 ios; /* IO requests */ | ||
61 | u32 io_comps; /* IO completions */ | ||
62 | u64 input_reqs; /* INPUT requests */ | ||
63 | u64 output_reqs; /* OUTPUT requests */ | ||
64 | }; | ||
65 | |||
66 | /** | ||
67 | * FCS remote port statistics | ||
68 | */ | ||
69 | struct bfa_itnim_stats_s { | ||
70 | u32 onlines; /* num rport online */ | ||
71 | u32 offlines; /* num rport offline */ | ||
72 | u32 prli_sent; /* num prli sent out */ | ||
73 | u32 fcxp_alloc_wait;/* num fcxp alloc waits */ | ||
74 | u32 prli_rsp_err; /* num prli rsp errors */ | ||
75 | u32 prli_rsp_acc; /* num prli rsp accepts */ | ||
76 | u32 initiator; /* rport is an initiator */ | ||
77 | u32 prli_rsp_parse_err; /* prli rsp parsing errors */ | ||
78 | u32 prli_rsp_rjt; /* num prli rsp rejects */ | ||
79 | u32 timeout; /* num timeouts detected */ | ||
80 | u32 sler; /* num sler notification from BFA */ | ||
81 | u32 rsvd; | ||
82 | struct bfa_itnim_hal_stats_s hal_stats; | ||
83 | }; | ||
84 | |||
85 | /** | ||
86 | * FCS itnim attributes returned in queries | ||
87 | */ | ||
88 | struct bfa_itnim_attr_s { | ||
89 | enum bfa_itnim_state state; /* FCS itnim state */ | ||
90 | u8 retry; /* data retransmision support */ | ||
91 | u8 task_retry_id; /* task retry ident support */ | ||
92 | u8 rec_support; /* REC supported */ | ||
93 | u8 conf_comp; /* confirmed completion supp */ | ||
94 | }; | ||
95 | |||
96 | /** | ||
97 | * BFA ITNIM events. | ||
98 | * Arguments below are in BFAL context from Mgmt | ||
99 | * BFA_ITNIM_AEN_NEW: [in]: None [out]: vf_id, lpwwn | ||
100 | * BFA_ITNIM_AEN_DELETE: [in]: vf_id, lpwwn, rpwwn (0 = all fcp4 targets), | ||
101 | * [out]: vf_id, ppwwn, lpwwn, rpwwn | ||
102 | * BFA_ITNIM_AEN_ONLINE: [in]: vf_id, lpwwn, rpwwn (0 = all fcp4 targets), | ||
103 | * [out]: vf_id, ppwwn, lpwwn, rpwwn | ||
104 | * BFA_ITNIM_AEN_OFFLINE: [in]: vf_id, lpwwn, rpwwn (0 = all fcp4 targets), | ||
105 | * [out]: vf_id, ppwwn, lpwwn, rpwwn | ||
106 | * BFA_ITNIM_AEN_DISCONNECT:[in]: vf_id, lpwwn, rpwwn (0 = all fcp4 targets), | ||
107 | * [out]: vf_id, ppwwn, lpwwn, rpwwn | ||
108 | */ | ||
109 | enum bfa_itnim_aen_event { | ||
110 | BFA_ITNIM_AEN_ONLINE = 1, /* Target online */ | ||
111 | BFA_ITNIM_AEN_OFFLINE = 2, /* Target offline */ | ||
112 | BFA_ITNIM_AEN_DISCONNECT = 3, /* Target disconnected */ | ||
113 | }; | ||
114 | |||
115 | /** | ||
116 | * BFA ITNIM event data structure. | ||
117 | */ | ||
118 | struct bfa_itnim_aen_data_s { | ||
119 | u16 vf_id; /* vf_id of the IT nexus */ | ||
120 | u16 rsvd[3]; | ||
121 | wwn_t ppwwn; /* WWN of its physical port */ | ||
122 | wwn_t lpwwn; /* WWN of logical port */ | ||
123 | wwn_t rpwwn; /* WWN of remote(target) port */ | ||
124 | }; | ||
125 | |||
126 | #endif /* __BFA_DEFS_ITNIM_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_led.h b/drivers/scsi/bfa/include/defs/bfa_defs_led.h new file mode 100644 index 000000000000..62039273264e --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_led.h | |||
@@ -0,0 +1,35 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_LED_H__ | ||
19 | #define __BFA_DEFS_LED_H__ | ||
20 | |||
21 | #define BFA_LED_MAX_NUM 3 | ||
22 | |||
23 | enum bfa_led_op { | ||
24 | BFA_LED_OFF = 0, | ||
25 | BFA_LED_ON = 1, | ||
26 | BFA_LED_FLICK = 2, | ||
27 | BFA_LED_BLINK = 3, | ||
28 | }; | ||
29 | |||
30 | enum bfa_led_color { | ||
31 | BFA_LED_GREEN = 0, | ||
32 | BFA_LED_AMBER = 1, | ||
33 | }; | ||
34 | |||
35 | #endif /* __BFA_DEFS_LED_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_lport.h b/drivers/scsi/bfa/include/defs/bfa_defs_lport.h new file mode 100644 index 000000000000..7359f82aacfc --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_lport.h | |||
@@ -0,0 +1,68 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_LPORT_H__ | ||
19 | #define __BFA_DEFS_LPORT_H__ | ||
20 | |||
21 | #include <defs/bfa_defs_types.h> | ||
22 | #include <defs/bfa_defs_port.h> | ||
23 | |||
24 | /** | ||
25 | * BFA AEN logical port events. | ||
26 | * Arguments below are in BFAL context from Mgmt | ||
27 | * BFA_LPORT_AEN_NEW: [in]: None [out]: vf_id, ppwwn, lpwwn, roles | ||
28 | * BFA_LPORT_AEN_DELETE: [in]: lpwwn [out]: vf_id, ppwwn. lpwwn, roles | ||
29 | * BFA_LPORT_AEN_ONLINE: [in]: lpwwn [out]: vf_id, ppwwn. lpwwn, roles | ||
30 | * BFA_LPORT_AEN_OFFLINE: [in]: lpwwn [out]: vf_id, ppwwn. lpwwn, roles | ||
31 | * BFA_LPORT_AEN_DISCONNECT:[in]: lpwwn [out]: vf_id, ppwwn. lpwwn, roles | ||
32 | * BFA_LPORT_AEN_NEW_PROP: [in]: None [out]: vf_id, ppwwn. lpwwn, roles | ||
33 | * BFA_LPORT_AEN_DELETE_PROP: [in]: lpwwn [out]: vf_id, ppwwn. lpwwn, roles | ||
34 | * BFA_LPORT_AEN_NEW_STANDARD: [in]: None [out]: vf_id, ppwwn. lpwwn, roles | ||
35 | * BFA_LPORT_AEN_DELETE_STANDARD: [in]: lpwwn [out]: vf_id, ppwwn. lpwwn, roles | ||
36 | * BFA_LPORT_AEN_NPIV_DUP_WWN: [in]: lpwwn [out]: vf_id, ppwwn. lpwwn, roles | ||
37 | * BFA_LPORT_AEN_NPIV_FABRIC_MAX: [in]: lpwwn [out]: vf_id, ppwwn. lpwwn, roles | ||
38 | * BFA_LPORT_AEN_NPIV_UNKNOWN: [in]: lpwwn [out]: vf_id, ppwwn. lpwwn, roles | ||
39 | */ | ||
40 | enum bfa_lport_aen_event { | ||
41 | BFA_LPORT_AEN_NEW = 1, /* LPort created event */ | ||
42 | BFA_LPORT_AEN_DELETE = 2, /* LPort deleted event */ | ||
43 | BFA_LPORT_AEN_ONLINE = 3, /* LPort online event */ | ||
44 | BFA_LPORT_AEN_OFFLINE = 4, /* LPort offline event */ | ||
45 | BFA_LPORT_AEN_DISCONNECT = 5, /* LPort disconnect event */ | ||
46 | BFA_LPORT_AEN_NEW_PROP = 6, /* VPort created event */ | ||
47 | BFA_LPORT_AEN_DELETE_PROP = 7, /* VPort deleted event */ | ||
48 | BFA_LPORT_AEN_NEW_STANDARD = 8, /* VPort created event */ | ||
49 | BFA_LPORT_AEN_DELETE_STANDARD = 9, /* VPort deleted event */ | ||
50 | BFA_LPORT_AEN_NPIV_DUP_WWN = 10, /* VPort configured with | ||
51 | * duplicate WWN event | ||
52 | */ | ||
53 | BFA_LPORT_AEN_NPIV_FABRIC_MAX = 11, /* Max NPIV in fabric/fport */ | ||
54 | BFA_LPORT_AEN_NPIV_UNKNOWN = 12, /* Unknown NPIV Error code event */ | ||
55 | }; | ||
56 | |||
57 | /** | ||
58 | * BFA AEN event data structure | ||
59 | */ | ||
60 | struct bfa_lport_aen_data_s { | ||
61 | u16 vf_id; /* vf_id of this logical port */ | ||
62 | u16 rsvd; | ||
63 | enum bfa_port_role roles; /* Logical port mode,IM/TM/IP etc */ | ||
64 | wwn_t ppwwn; /* WWN of its physical port */ | ||
65 | wwn_t lpwwn; /* WWN of this logical port */ | ||
66 | }; | ||
67 | |||
68 | #endif /* __BFA_DEFS_LPORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_mfg.h b/drivers/scsi/bfa/include/defs/bfa_defs_mfg.h new file mode 100644 index 000000000000..13fd4ab6aae2 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_mfg.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_DEFS_MFG_H__ | ||
18 | #define __BFA_DEFS_MFG_H__ | ||
19 | |||
20 | #include <bfa_os_inc.h> | ||
21 | |||
22 | /** | ||
23 | * Manufacturing block version | ||
24 | */ | ||
25 | #define BFA_MFG_VERSION 1 | ||
26 | |||
27 | /** | ||
28 | * Manufacturing block format | ||
29 | */ | ||
30 | #define BFA_MFG_SERIALNUM_SIZE 11 | ||
31 | #define BFA_MFG_PARTNUM_SIZE 14 | ||
32 | #define BFA_MFG_SUPPLIER_ID_SIZE 10 | ||
33 | #define BFA_MFG_SUPPLIER_PARTNUM_SIZE 20 | ||
34 | #define BFA_MFG_SUPPLIER_SERIALNUM_SIZE 20 | ||
35 | #define BFA_MFG_SUPPLIER_REVISION_SIZE 4 | ||
36 | #define STRSZ(_n) (((_n) + 4) & ~3) | ||
37 | |||
38 | /** | ||
39 | * VPD data length | ||
40 | */ | ||
41 | #define BFA_MFG_VPD_LEN 256 | ||
42 | |||
43 | /** | ||
44 | * All numerical fields are in big-endian format. | ||
45 | */ | ||
46 | struct bfa_mfg_vpd_s { | ||
47 | u8 version; /* vpd data version */ | ||
48 | u8 vpd_sig[3]; /* characters 'V', 'P', 'D' */ | ||
49 | u8 chksum; /* u8 checksum */ | ||
50 | u8 vendor; /* vendor */ | ||
51 | u8 len; /* vpd data length excluding header */ | ||
52 | u8 rsv; | ||
53 | u8 data[BFA_MFG_VPD_LEN]; /* vpd data */ | ||
54 | }; | ||
55 | |||
56 | #pragma pack(1) | ||
57 | |||
58 | #endif /* __BFA_DEFS_MFG_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_pci.h b/drivers/scsi/bfa/include/defs/bfa_defs_pci.h new file mode 100644 index 000000000000..c9b83321694b --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_pci.h | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_PCI_H__ | ||
19 | #define __BFA_DEFS_PCI_H__ | ||
20 | |||
21 | /** | ||
22 | * PCI device and vendor ID information | ||
23 | */ | ||
24 | enum { | ||
25 | BFA_PCI_VENDOR_ID_BROCADE = 0x1657, | ||
26 | BFA_PCI_DEVICE_ID_FC_8G2P = 0x13, | ||
27 | BFA_PCI_DEVICE_ID_FC_8G1P = 0x17, | ||
28 | BFA_PCI_DEVICE_ID_CT = 0x14, | ||
29 | }; | ||
30 | |||
31 | /** | ||
32 | * PCI sub-system device and vendor ID information | ||
33 | */ | ||
34 | enum { | ||
35 | BFA_PCI_FCOE_SSDEVICE_ID = 0x14, | ||
36 | }; | ||
37 | |||
38 | #define BFA_PCI_ACCESS_RANGES 1 /* Maximum number of device address ranges | ||
39 | * mapped through different BAR(s). */ | ||
40 | |||
41 | #endif /* __BFA_DEFS_PCI_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_pm.h b/drivers/scsi/bfa/include/defs/bfa_defs_pm.h new file mode 100644 index 000000000000..e8d6d959006e --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_pm.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_PM_H__ | ||
19 | #define __BFA_DEFS_PM_H__ | ||
20 | |||
21 | #include <bfa_os_inc.h> | ||
22 | |||
23 | /** | ||
24 | * BFA power management device states | ||
25 | */ | ||
26 | enum bfa_pm_ds { | ||
27 | BFA_PM_DS_D0 = 0, /* full power mode */ | ||
28 | BFA_PM_DS_D1 = 1, /* power save state 1 */ | ||
29 | BFA_PM_DS_D2 = 2, /* power save state 2 */ | ||
30 | BFA_PM_DS_D3 = 3, /* power off state */ | ||
31 | }; | ||
32 | |||
33 | #endif /* __BFA_DEFS_PM_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_pom.h b/drivers/scsi/bfa/include/defs/bfa_defs_pom.h new file mode 100644 index 000000000000..d9fa278472b7 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_pom.h | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_DEFS_POM_H__ | ||
18 | #define __BFA_DEFS_POM_H__ | ||
19 | |||
20 | #include <bfa_os_inc.h> | ||
21 | #include <defs/bfa_defs_types.h> | ||
22 | |||
23 | /** | ||
24 | * POM health status levels for each attributes. | ||
25 | */ | ||
26 | enum bfa_pom_entry_health { | ||
27 | BFA_POM_HEALTH_NOINFO = 1, /* no information */ | ||
28 | BFA_POM_HEALTH_NORMAL = 2, /* health is normal */ | ||
29 | BFA_POM_HEALTH_WARNING = 3, /* warning level */ | ||
30 | BFA_POM_HEALTH_ALARM = 4, /* alarming level */ | ||
31 | }; | ||
32 | |||
33 | /** | ||
34 | * Reading of temperature/voltage/current/power | ||
35 | */ | ||
36 | struct bfa_pom_entry_s { | ||
37 | enum bfa_pom_entry_health health; /* POM entry health */ | ||
38 | u32 curr_value; /* current value */ | ||
39 | u32 thr_warn_high; /* threshold warning high */ | ||
40 | u32 thr_warn_low; /* threshold warning low */ | ||
41 | u32 thr_alarm_low; /* threshold alaram low */ | ||
42 | u32 thr_alarm_high; /* threshold alarm high */ | ||
43 | }; | ||
44 | |||
45 | /** | ||
46 | * POM attributes | ||
47 | */ | ||
48 | struct bfa_pom_attr_s { | ||
49 | struct bfa_pom_entry_s temperature; /* centigrade */ | ||
50 | struct bfa_pom_entry_s voltage; /* volts */ | ||
51 | struct bfa_pom_entry_s curr; /* milli amps */ | ||
52 | struct bfa_pom_entry_s txpower; /* micro watts */ | ||
53 | struct bfa_pom_entry_s rxpower; /* micro watts */ | ||
54 | }; | ||
55 | |||
56 | #endif /* __BFA_DEFS_POM_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_port.h b/drivers/scsi/bfa/include/defs/bfa_defs_port.h new file mode 100644 index 000000000000..de0696c81bc4 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_port.h | |||
@@ -0,0 +1,245 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_PORT_H__ | ||
19 | #define __BFA_DEFS_PORT_H__ | ||
20 | |||
21 | #include <bfa_os_inc.h> | ||
22 | #include <protocol/types.h> | ||
23 | #include <defs/bfa_defs_pport.h> | ||
24 | #include <defs/bfa_defs_ioc.h> | ||
25 | |||
26 | #define BFA_FCS_FABRIC_IPADDR_SZ 16 | ||
27 | |||
28 | /** | ||
29 | * symbolic names for base port/virtual port | ||
30 | */ | ||
31 | #define BFA_SYMNAME_MAXLEN 128 /* vmware/windows uses 128 bytes */ | ||
32 | struct bfa_port_symname_s { | ||
33 | char symname[BFA_SYMNAME_MAXLEN]; | ||
34 | }; | ||
35 | |||
36 | /** | ||
37 | * Roles of FCS port: | ||
38 | * - FCP IM and FCP TM roles cannot be enabled together for a FCS port | ||
39 | * - Create multiple ports if both IM and TM functions required. | ||
40 | * - Atleast one role must be specified. | ||
41 | */ | ||
42 | enum bfa_port_role { | ||
43 | BFA_PORT_ROLE_FCP_IM = 0x01, /* FCP initiator role */ | ||
44 | BFA_PORT_ROLE_FCP_TM = 0x02, /* FCP target role */ | ||
45 | BFA_PORT_ROLE_FCP_IPFC = 0x04, /* IP over FC role */ | ||
46 | BFA_PORT_ROLE_FCP_MAX = BFA_PORT_ROLE_FCP_IPFC | BFA_PORT_ROLE_FCP_IM | ||
47 | }; | ||
48 | |||
49 | /** | ||
50 | * FCS port configuration. | ||
51 | */ | ||
52 | struct bfa_port_cfg_s { | ||
53 | wwn_t pwwn; /* port wwn */ | ||
54 | wwn_t nwwn; /* node wwn */ | ||
55 | struct bfa_port_symname_s sym_name; /* vm port symbolic name */ | ||
56 | enum bfa_port_role roles; /* FCS port roles */ | ||
57 | u32 rsvd; | ||
58 | u8 tag[16]; /* opaque tag from application */ | ||
59 | }; | ||
60 | |||
61 | /** | ||
62 | * FCS port states | ||
63 | */ | ||
64 | enum bfa_port_state { | ||
65 | BFA_PORT_UNINIT = 0, /* PORT is not yet initialized */ | ||
66 | BFA_PORT_FDISC = 1, /* FDISC is in progress */ | ||
67 | BFA_PORT_ONLINE = 2, /* login to fabric is complete */ | ||
68 | BFA_PORT_OFFLINE = 3, /* No login to fabric */ | ||
69 | }; | ||
70 | |||
71 | /** | ||
72 | * FCS port type. Required for VmWare. | ||
73 | */ | ||
74 | enum bfa_port_type { | ||
75 | BFA_PORT_TYPE_PHYSICAL = 0, | ||
76 | BFA_PORT_TYPE_VIRTUAL, | ||
77 | }; | ||
78 | |||
79 | /** | ||
80 | * FCS port offline reason. Required for VmWare. | ||
81 | */ | ||
82 | enum bfa_port_offline_reason { | ||
83 | BFA_PORT_OFFLINE_UNKNOWN = 0, | ||
84 | BFA_PORT_OFFLINE_LINKDOWN, | ||
85 | BFA_PORT_OFFLINE_FAB_UNSUPPORTED, /* NPIV not supported by the | ||
86 | * fabric */ | ||
87 | BFA_PORT_OFFLINE_FAB_NORESOURCES, | ||
88 | BFA_PORT_OFFLINE_FAB_LOGOUT, | ||
89 | }; | ||
90 | |||
91 | /** | ||
92 | * FCS lport info. Required for VmWare. | ||
93 | */ | ||
94 | struct bfa_port_info_s { | ||
95 | u8 port_type; /* bfa_port_type_t : physical or | ||
96 | * virtual */ | ||
97 | u8 port_state; /* one of bfa_port_state values */ | ||
98 | u8 offline_reason; /* one of bfa_port_offline_reason_t | ||
99 | * values */ | ||
100 | wwn_t port_wwn; | ||
101 | wwn_t node_wwn; | ||
102 | |||
103 | /* | ||
104 | * following 4 feilds are valid for Physical Ports only | ||
105 | */ | ||
106 | u32 max_vports_supp; /* Max supported vports */ | ||
107 | u32 num_vports_inuse; /* Num of in use vports */ | ||
108 | u32 max_rports_supp; /* Max supported rports */ | ||
109 | u32 num_rports_inuse; /* Num of doscovered rports */ | ||
110 | |||
111 | }; | ||
112 | |||
113 | /** | ||
114 | * FCS port statistics | ||
115 | */ | ||
116 | struct bfa_port_stats_s { | ||
117 | u32 ns_plogi_sent; | ||
118 | u32 ns_plogi_rsp_err; | ||
119 | u32 ns_plogi_acc_err; | ||
120 | u32 ns_plogi_accepts; | ||
121 | u32 ns_rejects; /* NS command rejects */ | ||
122 | u32 ns_plogi_unknown_rsp; | ||
123 | u32 ns_plogi_alloc_wait; | ||
124 | |||
125 | u32 ns_retries; /* NS command retries */ | ||
126 | u32 ns_timeouts; /* NS command timeouts */ | ||
127 | |||
128 | u32 ns_rspnid_sent; | ||
129 | u32 ns_rspnid_accepts; | ||
130 | u32 ns_rspnid_rsp_err; | ||
131 | u32 ns_rspnid_rejects; | ||
132 | u32 ns_rspnid_alloc_wait; | ||
133 | |||
134 | u32 ns_rftid_sent; | ||
135 | u32 ns_rftid_accepts; | ||
136 | u32 ns_rftid_rsp_err; | ||
137 | u32 ns_rftid_rejects; | ||
138 | u32 ns_rftid_alloc_wait; | ||
139 | |||
140 | u32 ns_rffid_sent; | ||
141 | u32 ns_rffid_accepts; | ||
142 | u32 ns_rffid_rsp_err; | ||
143 | u32 ns_rffid_rejects; | ||
144 | u32 ns_rffid_alloc_wait; | ||
145 | |||
146 | u32 ns_gidft_sent; | ||
147 | u32 ns_gidft_accepts; | ||
148 | u32 ns_gidft_rsp_err; | ||
149 | u32 ns_gidft_rejects; | ||
150 | u32 ns_gidft_unknown_rsp; | ||
151 | u32 ns_gidft_alloc_wait; | ||
152 | |||
153 | /* | ||
154 | * Mgmt Server stats | ||
155 | */ | ||
156 | u32 ms_retries; /* MS command retries */ | ||
157 | u32 ms_timeouts; /* MS command timeouts */ | ||
158 | u32 ms_plogi_sent; | ||
159 | u32 ms_plogi_rsp_err; | ||
160 | u32 ms_plogi_acc_err; | ||
161 | u32 ms_plogi_accepts; | ||
162 | u32 ms_rejects; /* NS command rejects */ | ||
163 | u32 ms_plogi_unknown_rsp; | ||
164 | u32 ms_plogi_alloc_wait; | ||
165 | |||
166 | u32 num_rscn; /* Num of RSCN received */ | ||
167 | u32 num_portid_rscn;/* Num portid format RSCN | ||
168 | * received */ | ||
169 | |||
170 | u32 uf_recvs; /* unsolicited recv frames */ | ||
171 | u32 uf_recv_drops; /* dropped received frames */ | ||
172 | |||
173 | u32 rsvd; /* padding for 64 bit alignment */ | ||
174 | }; | ||
175 | |||
176 | /** | ||
177 | * BFA port attribute returned in queries | ||
178 | */ | ||
179 | struct bfa_port_attr_s { | ||
180 | enum bfa_port_state state; /* port state */ | ||
181 | u32 pid; /* port ID */ | ||
182 | struct bfa_port_cfg_s port_cfg; /* port configuration */ | ||
183 | enum bfa_pport_type port_type; /* current topology */ | ||
184 | u32 loopback; /* cable is externally looped back */ | ||
185 | wwn_t fabric_name; /* attached switch's nwwn */ | ||
186 | u8 fabric_ip_addr[BFA_FCS_FABRIC_IPADDR_SZ]; /* attached | ||
187 | * fabric's ip addr */ | ||
188 | }; | ||
189 | |||
190 | /** | ||
191 | * BFA physical port Level events | ||
192 | * Arguments below are in BFAL context from Mgmt | ||
193 | * BFA_PORT_AEN_ONLINE: [in]: pwwn [out]: pwwn | ||
194 | * BFA_PORT_AEN_OFFLINE: [in]: pwwn [out]: pwwn | ||
195 | * BFA_PORT_AEN_RLIR: [in]: None [out]: pwwn, rlir_data, rlir_len | ||
196 | * BFA_PORT_AEN_SFP_INSERT: [in]: pwwn [out]: port_id, pwwn | ||
197 | * BFA_PORT_AEN_SFP_REMOVE: [in]: pwwn [out]: port_id, pwwn | ||
198 | * BFA_PORT_AEN_SFP_POM: [in]: pwwn [out]: level, port_id, pwwn | ||
199 | * BFA_PORT_AEN_ENABLE: [in]: pwwn [out]: pwwn | ||
200 | * BFA_PORT_AEN_DISABLE: [in]: pwwn [out]: pwwn | ||
201 | * BFA_PORT_AEN_AUTH_ON: [in]: pwwn [out]: pwwn | ||
202 | * BFA_PORT_AEN_AUTH_OFF: [in]: pwwn [out]: pwwn | ||
203 | * BFA_PORT_AEN_DISCONNECT: [in]: pwwn [out]: pwwn | ||
204 | * BFA_PORT_AEN_QOS_NEG: [in]: pwwn [out]: pwwn | ||
205 | * BFA_PORT_AEN_FABRIC_NAME_CHANGE: [in]: pwwn, [out]: pwwn, fwwn | ||
206 | * | ||
207 | */ | ||
208 | enum bfa_port_aen_event { | ||
209 | BFA_PORT_AEN_ONLINE = 1, /* Physical Port online event */ | ||
210 | BFA_PORT_AEN_OFFLINE = 2, /* Physical Port offline event */ | ||
211 | BFA_PORT_AEN_RLIR = 3, /* RLIR event, not supported */ | ||
212 | BFA_PORT_AEN_SFP_INSERT = 4, /* SFP inserted event */ | ||
213 | BFA_PORT_AEN_SFP_REMOVE = 5, /* SFP removed event */ | ||
214 | BFA_PORT_AEN_SFP_POM = 6, /* SFP POM event */ | ||
215 | BFA_PORT_AEN_ENABLE = 7, /* Physical Port enable event */ | ||
216 | BFA_PORT_AEN_DISABLE = 8, /* Physical Port disable event */ | ||
217 | BFA_PORT_AEN_AUTH_ON = 9, /* Physical Port auth success event */ | ||
218 | BFA_PORT_AEN_AUTH_OFF = 10, /* Physical Port auth fail event */ | ||
219 | BFA_PORT_AEN_DISCONNECT = 11, /* Physical Port disconnect event */ | ||
220 | BFA_PORT_AEN_QOS_NEG = 12, /* Base Port QOS negotiation event */ | ||
221 | BFA_PORT_AEN_FABRIC_NAME_CHANGE = 13, /* Fabric Name/WWN change | ||
222 | * event */ | ||
223 | BFA_PORT_AEN_SFP_ACCESS_ERROR = 14, /* SFP read error event */ | ||
224 | BFA_PORT_AEN_SFP_UNSUPPORT = 15, /* Unsupported SFP event */ | ||
225 | }; | ||
226 | |||
227 | enum bfa_port_aen_sfp_pom { | ||
228 | BFA_PORT_AEN_SFP_POM_GREEN = 1, /* Normal */ | ||
229 | BFA_PORT_AEN_SFP_POM_AMBER = 2, /* Warning */ | ||
230 | BFA_PORT_AEN_SFP_POM_RED = 3, /* Critical */ | ||
231 | BFA_PORT_AEN_SFP_POM_MAX = BFA_PORT_AEN_SFP_POM_RED | ||
232 | }; | ||
233 | |||
234 | struct bfa_port_aen_data_s { | ||
235 | enum bfa_ioc_type_e ioc_type; | ||
236 | wwn_t pwwn; /* WWN of the physical port */ | ||
237 | wwn_t fwwn; /* WWN of the fabric port */ | ||
238 | mac_t mac; /* MAC addres of the ethernet port, | ||
239 | * applicable to CNA port only */ | ||
240 | int phy_port_num; /*! For SFP related events */ | ||
241 | enum bfa_port_aen_sfp_pom level; /* Only transitions will | ||
242 | * be informed */ | ||
243 | }; | ||
244 | |||
245 | #endif /* __BFA_DEFS_PORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_pport.h b/drivers/scsi/bfa/include/defs/bfa_defs_pport.h new file mode 100644 index 000000000000..a000bc4e2d4a --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_pport.h | |||
@@ -0,0 +1,383 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_PPORT_H__ | ||
19 | #define __BFA_DEFS_PPORT_H__ | ||
20 | |||
21 | #include <bfa_os_inc.h> | ||
22 | #include <protocol/fc.h> | ||
23 | #include <defs/bfa_defs_types.h> | ||
24 | #include <defs/bfa_defs_qos.h> | ||
25 | #include <cna/pstats/phyport_defs.h> | ||
26 | |||
27 | /* Modify char* port_stt[] in bfal_port.c if a new state was added */ | ||
28 | enum bfa_pport_states { | ||
29 | BFA_PPORT_ST_UNINIT = 1, | ||
30 | BFA_PPORT_ST_ENABLING_QWAIT = 2, | ||
31 | BFA_PPORT_ST_ENABLING = 3, | ||
32 | BFA_PPORT_ST_LINKDOWN = 4, | ||
33 | BFA_PPORT_ST_LINKUP = 5, | ||
34 | BFA_PPORT_ST_DISABLING_QWAIT = 6, | ||
35 | BFA_PPORT_ST_DISABLING = 7, | ||
36 | BFA_PPORT_ST_DISABLED = 8, | ||
37 | BFA_PPORT_ST_STOPPED = 9, | ||
38 | BFA_PPORT_ST_IOCDOWN = 10, | ||
39 | BFA_PPORT_ST_IOCDIS = 11, | ||
40 | BFA_PPORT_ST_FWMISMATCH = 12, | ||
41 | BFA_PPORT_ST_MAX_STATE, | ||
42 | }; | ||
43 | |||
44 | /** | ||
45 | * Port speed settings. Each specific speed is a bit field. Use multiple | ||
46 | * bits to specify speeds to be selected for auto-negotiation. | ||
47 | */ | ||
48 | enum bfa_pport_speed { | ||
49 | BFA_PPORT_SPEED_UNKNOWN = 0, | ||
50 | BFA_PPORT_SPEED_1GBPS = 1, | ||
51 | BFA_PPORT_SPEED_2GBPS = 2, | ||
52 | BFA_PPORT_SPEED_4GBPS = 4, | ||
53 | BFA_PPORT_SPEED_8GBPS = 8, | ||
54 | BFA_PPORT_SPEED_10GBPS = 10, | ||
55 | BFA_PPORT_SPEED_AUTO = | ||
56 | (BFA_PPORT_SPEED_1GBPS | BFA_PPORT_SPEED_2GBPS | | ||
57 | BFA_PPORT_SPEED_4GBPS | BFA_PPORT_SPEED_8GBPS), | ||
58 | }; | ||
59 | |||
60 | /** | ||
61 | * Port operational type (in sync with SNIA port type). | ||
62 | */ | ||
63 | enum bfa_pport_type { | ||
64 | BFA_PPORT_TYPE_UNKNOWN = 1, /* port type is unkown */ | ||
65 | BFA_PPORT_TYPE_TRUNKED = 2, /* Trunked mode */ | ||
66 | BFA_PPORT_TYPE_NPORT = 5, /* P2P with switched fabric */ | ||
67 | BFA_PPORT_TYPE_NLPORT = 6, /* public loop */ | ||
68 | BFA_PPORT_TYPE_LPORT = 20, /* private loop */ | ||
69 | BFA_PPORT_TYPE_P2P = 21, /* P2P with no switched fabric */ | ||
70 | BFA_PPORT_TYPE_VPORT = 22, /* NPIV - virtual port */ | ||
71 | }; | ||
72 | |||
73 | /** | ||
74 | * Port topology setting. A port's topology and fabric login status | ||
75 | * determine its operational type. | ||
76 | */ | ||
77 | enum bfa_pport_topology { | ||
78 | BFA_PPORT_TOPOLOGY_NONE = 0, /* No valid topology */ | ||
79 | BFA_PPORT_TOPOLOGY_P2P = 1, /* P2P only */ | ||
80 | BFA_PPORT_TOPOLOGY_LOOP = 2, /* LOOP topology */ | ||
81 | BFA_PPORT_TOPOLOGY_AUTO = 3, /* auto topology selection */ | ||
82 | }; | ||
83 | |||
84 | /** | ||
85 | * Physical port loopback types. | ||
86 | */ | ||
87 | enum bfa_pport_opmode { | ||
88 | BFA_PPORT_OPMODE_NORMAL = 0x00, /* normal non-loopback mode */ | ||
89 | BFA_PPORT_OPMODE_LB_INT = 0x01, /* internal loop back */ | ||
90 | BFA_PPORT_OPMODE_LB_SLW = 0x02, /* serial link wrapback (serdes) */ | ||
91 | BFA_PPORT_OPMODE_LB_EXT = 0x04, /* external loop back (serdes) */ | ||
92 | BFA_PPORT_OPMODE_LB_CBL = 0x08, /* cabled loop back */ | ||
93 | BFA_PPORT_OPMODE_LB_NLINT = 0x20, /* NL_Port internal loopback */ | ||
94 | }; | ||
95 | |||
96 | #define BFA_PPORT_OPMODE_LB_HARD(_mode) \ | ||
97 | ((_mode == BFA_PPORT_OPMODE_LB_INT) || \ | ||
98 | (_mode == BFA_PPORT_OPMODE_LB_SLW) || \ | ||
99 | (_mode == BFA_PPORT_OPMODE_LB_EXT)) | ||
100 | |||
101 | /** | ||
102 | Port State (in sync with SNIA port state). | ||
103 | */ | ||
104 | enum bfa_pport_snia_state { | ||
105 | BFA_PPORT_STATE_UNKNOWN = 1, /* port is not initialized */ | ||
106 | BFA_PPORT_STATE_ONLINE = 2, /* port is ONLINE */ | ||
107 | BFA_PPORT_STATE_DISABLED = 3, /* port is disabled by user */ | ||
108 | BFA_PPORT_STATE_BYPASSED = 4, /* port is bypassed (in LOOP) */ | ||
109 | BFA_PPORT_STATE_DIAG = 5, /* port diagnostics is active */ | ||
110 | BFA_PPORT_STATE_LINKDOWN = 6, /* link is down */ | ||
111 | BFA_PPORT_STATE_LOOPBACK = 8, /* port is looped back */ | ||
112 | }; | ||
113 | |||
114 | /** | ||
115 | * Port link state | ||
116 | */ | ||
117 | enum bfa_pport_linkstate { | ||
118 | BFA_PPORT_LINKUP = 1, /* Physical port/Trunk link up */ | ||
119 | BFA_PPORT_LINKDOWN = 2, /* Physical port/Trunk link down */ | ||
120 | BFA_PPORT_TRUNK_LINKDOWN = 3, /* Trunk link down (new tmaster) */ | ||
121 | }; | ||
122 | |||
123 | /** | ||
124 | * Port link state event | ||
125 | */ | ||
126 | #define bfa_pport_event_t enum bfa_pport_linkstate | ||
127 | |||
128 | /** | ||
129 | * Port link state reason code | ||
130 | */ | ||
131 | enum bfa_pport_linkstate_rsn { | ||
132 | BFA_PPORT_LINKSTATE_RSN_NONE = 0, | ||
133 | BFA_PPORT_LINKSTATE_RSN_DISABLED = 1, | ||
134 | BFA_PPORT_LINKSTATE_RSN_RX_NOS = 2, | ||
135 | BFA_PPORT_LINKSTATE_RSN_RX_OLS = 3, | ||
136 | BFA_PPORT_LINKSTATE_RSN_RX_LIP = 4, | ||
137 | BFA_PPORT_LINKSTATE_RSN_RX_LIPF7 = 5, | ||
138 | BFA_PPORT_LINKSTATE_RSN_SFP_REMOVED = 6, | ||
139 | BFA_PPORT_LINKSTATE_RSN_PORT_FAULT = 7, | ||
140 | BFA_PPORT_LINKSTATE_RSN_RX_LOS = 8, | ||
141 | BFA_PPORT_LINKSTATE_RSN_LOCAL_FAULT = 9, | ||
142 | BFA_PPORT_LINKSTATE_RSN_REMOTE_FAULT = 10, | ||
143 | BFA_PPORT_LINKSTATE_RSN_TIMEOUT = 11, | ||
144 | |||
145 | |||
146 | |||
147 | /* CEE related reason codes/errors */ | ||
148 | CEE_LLDP_INFO_AGED_OUT = 20, | ||
149 | CEE_LLDP_SHUTDOWN_TLV_RCVD = 21, | ||
150 | CEE_PEER_NOT_ADVERTISE_DCBX = 22, | ||
151 | CEE_PEER_NOT_ADVERTISE_PG = 23, | ||
152 | CEE_PEER_NOT_ADVERTISE_PFC = 24, | ||
153 | CEE_PEER_NOT_ADVERTISE_FCOE = 25, | ||
154 | CEE_PG_NOT_COMPATIBLE = 26, | ||
155 | CEE_PFC_NOT_COMPATIBLE = 27, | ||
156 | CEE_FCOE_NOT_COMPATIBLE = 28, | ||
157 | CEE_BAD_PG_RCVD = 29, | ||
158 | CEE_BAD_BW_RCVD = 30, | ||
159 | CEE_BAD_PFC_RCVD = 31, | ||
160 | CEE_BAD_FCOE_PRI_RCVD = 32, | ||
161 | CEE_FCOE_PRI_PFC_OFF = 33, | ||
162 | CEE_DUP_CONTROL_TLV_RCVD = 34, | ||
163 | CEE_DUP_FEAT_TLV_RCVD = 35, | ||
164 | CEE_APPLY_NEW_CFG = 36, /* reason, not an error */ | ||
165 | CEE_PROTOCOL_INIT = 37, /* reason, not an error */ | ||
166 | CEE_PHY_LINK_DOWN = 38, | ||
167 | CEE_LLS_FCOE_ABSENT = 39, | ||
168 | CEE_LLS_FCOE_DOWN = 40 | ||
169 | }; | ||
170 | |||
171 | /** | ||
172 | * Default Target Rate Limiting Speed. | ||
173 | */ | ||
174 | #define BFA_PPORT_DEF_TRL_SPEED BFA_PPORT_SPEED_1GBPS | ||
175 | |||
176 | /** | ||
177 | * Physical port configuration | ||
178 | */ | ||
179 | struct bfa_pport_cfg_s { | ||
180 | u8 topology; /* bfa_pport_topology */ | ||
181 | u8 speed; /* enum bfa_pport_speed */ | ||
182 | u8 trunked; /* trunked or not */ | ||
183 | u8 qos_enabled; /* qos enabled or not */ | ||
184 | u8 trunk_ports; /* bitmap of trunked ports */ | ||
185 | u8 cfg_hardalpa; /* is hard alpa configured */ | ||
186 | u16 maxfrsize; /* maximum frame size */ | ||
187 | u8 hardalpa; /* configured hard alpa */ | ||
188 | u8 rx_bbcredit; /* receive buffer credits */ | ||
189 | u8 tx_bbcredit; /* transmit buffer credits */ | ||
190 | u8 ratelimit; /* ratelimit enabled or not */ | ||
191 | u8 trl_def_speed; /* ratelimit default speed */ | ||
192 | u8 rsvd[3]; | ||
193 | u16 path_tov; /* device path timeout */ | ||
194 | u16 q_depth; /* SCSI Queue depth */ | ||
195 | }; | ||
196 | |||
197 | /** | ||
198 | * Port attribute values. | ||
199 | */ | ||
200 | struct bfa_pport_attr_s { | ||
201 | /* | ||
202 | * Static fields | ||
203 | */ | ||
204 | wwn_t nwwn; /* node wwn */ | ||
205 | wwn_t pwwn; /* port wwn */ | ||
206 | enum fc_cos cos_supported; /* supported class of services */ | ||
207 | u32 rsvd; | ||
208 | struct fc_symname_s port_symname; /* port symbolic name */ | ||
209 | enum bfa_pport_speed speed_supported; /* supported speeds */ | ||
210 | bfa_boolean_t pbind_enabled; /* Will be set if Persistent binding | ||
211 | * enabled. Relevant only in Windows | ||
212 | */ | ||
213 | |||
214 | /* | ||
215 | * Configured values | ||
216 | */ | ||
217 | struct bfa_pport_cfg_s pport_cfg; /* pport cfg */ | ||
218 | |||
219 | /* | ||
220 | * Dynamic field - info from BFA | ||
221 | */ | ||
222 | enum bfa_pport_states port_state; /* current port state */ | ||
223 | enum bfa_pport_speed speed; /* current speed */ | ||
224 | enum bfa_pport_topology topology; /* current topology */ | ||
225 | bfa_boolean_t beacon; /* current beacon status */ | ||
226 | bfa_boolean_t link_e2e_beacon;/* set if link beacon on */ | ||
227 | bfa_boolean_t plog_enabled; /* set if portlog is enabled*/ | ||
228 | |||
229 | /* | ||
230 | * Dynamic field - info from FCS | ||
231 | */ | ||
232 | u32 pid; /* port ID */ | ||
233 | enum bfa_pport_type port_type; /* current topology */ | ||
234 | u32 loopback; /* external loopback */ | ||
235 | u32 rsvd1; | ||
236 | u32 rsvd2; /* padding for 64 bit */ | ||
237 | }; | ||
238 | |||
239 | /** | ||
240 | * FC Port statistics. | ||
241 | */ | ||
242 | struct bfa_pport_fc_stats_s { | ||
243 | u64 secs_reset; /* seconds since stats is reset */ | ||
244 | u64 tx_frames; /* transmitted frames */ | ||
245 | u64 tx_words; /* transmitted words */ | ||
246 | u64 rx_frames; /* received frames */ | ||
247 | u64 rx_words; /* received words */ | ||
248 | u64 lip_count; /* LIPs seen */ | ||
249 | u64 nos_count; /* NOS count */ | ||
250 | u64 error_frames; /* errored frames (sent?) */ | ||
251 | u64 dropped_frames; /* dropped frames */ | ||
252 | u64 link_failures; /* link failure count */ | ||
253 | u64 loss_of_syncs; /* loss of sync count */ | ||
254 | u64 loss_of_signals;/* loss of signal count */ | ||
255 | u64 primseq_errs; /* primitive sequence protocol */ | ||
256 | u64 bad_os_count; /* invalid ordered set */ | ||
257 | u64 err_enc_out; /* Encoding error outside frame */ | ||
258 | u64 invalid_crcs; /* frames received with invalid CRC*/ | ||
259 | u64 undersized_frm; /* undersized frames */ | ||
260 | u64 oversized_frm; /* oversized frames */ | ||
261 | u64 bad_eof_frm; /* frames with bad EOF */ | ||
262 | struct bfa_qos_stats_s qos_stats; /* QoS statistics */ | ||
263 | }; | ||
264 | |||
265 | /** | ||
266 | * Eth Port statistics. | ||
267 | */ | ||
268 | struct bfa_pport_eth_stats_s { | ||
269 | u64 secs_reset; /* seconds since stats is reset */ | ||
270 | u64 frame_64; /* both rx and tx counter */ | ||
271 | u64 frame_65_127; /* both rx and tx counter */ | ||
272 | u64 frame_128_255; /* both rx and tx counter */ | ||
273 | u64 frame_256_511; /* both rx and tx counter */ | ||
274 | u64 frame_512_1023; /* both rx and tx counter */ | ||
275 | u64 frame_1024_1518; /* both rx and tx counter */ | ||
276 | u64 frame_1519_1522; /* both rx and tx counter */ | ||
277 | |||
278 | u64 tx_bytes; | ||
279 | u64 tx_packets; | ||
280 | u64 tx_mcast_packets; | ||
281 | u64 tx_bcast_packets; | ||
282 | u64 tx_control_frame; | ||
283 | u64 tx_drop; | ||
284 | u64 tx_jabber; | ||
285 | u64 tx_fcs_error; | ||
286 | u64 tx_fragments; | ||
287 | |||
288 | u64 rx_bytes; | ||
289 | u64 rx_packets; | ||
290 | u64 rx_mcast_packets; | ||
291 | u64 rx_bcast_packets; | ||
292 | u64 rx_control_frames; | ||
293 | u64 rx_unknown_opcode; | ||
294 | u64 rx_drop; | ||
295 | u64 rx_jabber; | ||
296 | u64 rx_fcs_error; | ||
297 | u64 rx_alignment_error; | ||
298 | u64 rx_frame_length_error; | ||
299 | u64 rx_code_error; | ||
300 | u64 rx_fragments; | ||
301 | |||
302 | u64 rx_pause; /* BPC */ | ||
303 | u64 rx_zero_pause; /* BPC Pause cancellation */ | ||
304 | u64 tx_pause; /* BPC */ | ||
305 | u64 tx_zero_pause; /* BPC Pause cancellation */ | ||
306 | u64 rx_fcoe_pause; /* BPC */ | ||
307 | u64 rx_fcoe_zero_pause; /* BPC Pause cancellation */ | ||
308 | u64 tx_fcoe_pause; /* BPC */ | ||
309 | u64 tx_fcoe_zero_pause; /* BPC Pause cancellation */ | ||
310 | }; | ||
311 | |||
312 | /** | ||
313 | * Port statistics. | ||
314 | */ | ||
315 | union bfa_pport_stats_u { | ||
316 | struct bfa_pport_fc_stats_s fc; | ||
317 | struct bfa_pport_eth_stats_s eth; | ||
318 | }; | ||
319 | |||
320 | /** | ||
321 | * Port FCP mappings. | ||
322 | */ | ||
323 | struct bfa_pport_fcpmap_s { | ||
324 | char osdevname[256]; | ||
325 | u32 bus; | ||
326 | u32 target; | ||
327 | u32 oslun; | ||
328 | u32 fcid; | ||
329 | wwn_t nwwn; | ||
330 | wwn_t pwwn; | ||
331 | u64 fcplun; | ||
332 | char luid[256]; | ||
333 | }; | ||
334 | |||
335 | /** | ||
336 | * Port RNID info. | ||
337 | */ | ||
338 | struct bfa_pport_rnid_s { | ||
339 | wwn_t wwn; | ||
340 | u32 unittype; | ||
341 | u32 portid; | ||
342 | u32 attached_nodes_num; | ||
343 | u16 ip_version; | ||
344 | u16 udp_port; | ||
345 | u8 ipaddr[16]; | ||
346 | u16 rsvd; | ||
347 | u16 topologydiscoveryflags; | ||
348 | }; | ||
349 | |||
350 | /** | ||
351 | * Link state information | ||
352 | */ | ||
353 | struct bfa_pport_link_s { | ||
354 | u8 linkstate; /* Link state bfa_pport_linkstate */ | ||
355 | u8 linkstate_rsn; /* bfa_pport_linkstate_rsn_t */ | ||
356 | u8 topology; /* P2P/LOOP bfa_pport_topology */ | ||
357 | u8 speed; /* Link speed (1/2/4/8 G) */ | ||
358 | u32 linkstate_opt; /* Linkstate optional data (debug) */ | ||
359 | u8 trunked; /* Trunked or not (1 or 0) */ | ||
360 | u8 resvd[3]; | ||
361 | struct bfa_qos_attr_s qos_attr; /* QoS Attributes */ | ||
362 | struct bfa_qos_vc_attr_s qos_vc_attr; /* VC info from ELP */ | ||
363 | union { | ||
364 | struct { | ||
365 | u8 tmaster;/* Trunk Master or | ||
366 | * not (1 or 0) */ | ||
367 | u8 tlinks; /* Trunk links bitmap | ||
368 | * (linkup) */ | ||
369 | u8 resv1; /* Reserved */ | ||
370 | } trunk_info; | ||
371 | |||
372 | struct { | ||
373 | u8 myalpa; /* alpa claimed */ | ||
374 | u8 login_req; /* Login required or | ||
375 | * not (1 or 0) */ | ||
376 | u8 alpabm_val;/* alpa bitmap valid | ||
377 | * or not (1 or 0) */ | ||
378 | struct fc_alpabm_s alpabm; /* alpa bitmap */ | ||
379 | } loop_info; | ||
380 | } tl; | ||
381 | }; | ||
382 | |||
383 | #endif /* __BFA_DEFS_PPORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_qos.h b/drivers/scsi/bfa/include/defs/bfa_defs_qos.h new file mode 100644 index 000000000000..aadbacd1d2d7 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_qos.h | |||
@@ -0,0 +1,99 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_QOS_H__ | ||
19 | #define __BFA_DEFS_QOS_H__ | ||
20 | |||
21 | /** | ||
22 | * QoS states | ||
23 | */ | ||
24 | enum bfa_qos_state { | ||
25 | BFA_QOS_ONLINE = 1, /* QoS is online */ | ||
26 | BFA_QOS_OFFLINE = 2, /* QoS is offline */ | ||
27 | }; | ||
28 | |||
29 | |||
30 | /** | ||
31 | * QoS Priority levels. | ||
32 | */ | ||
33 | enum bfa_qos_priority { | ||
34 | BFA_QOS_UNKNOWN = 0, | ||
35 | BFA_QOS_HIGH = 1, /* QoS Priority Level High */ | ||
36 | BFA_QOS_MED = 2, /* QoS Priority Level Medium */ | ||
37 | BFA_QOS_LOW = 3, /* QoS Priority Level Low */ | ||
38 | }; | ||
39 | |||
40 | |||
41 | /** | ||
42 | * QoS bandwidth allocation for each priority level | ||
43 | */ | ||
44 | enum bfa_qos_bw_alloc { | ||
45 | BFA_QOS_BW_HIGH = 60, /* bandwidth allocation for High */ | ||
46 | BFA_QOS_BW_MED = 30, /* bandwidth allocation for Medium */ | ||
47 | BFA_QOS_BW_LOW = 10, /* bandwidth allocation for Low */ | ||
48 | }; | ||
49 | |||
50 | /** | ||
51 | * QoS attribute returned in QoS Query | ||
52 | */ | ||
53 | struct bfa_qos_attr_s { | ||
54 | enum bfa_qos_state state; /* QoS current state */ | ||
55 | u32 total_bb_cr; /* Total BB Credits */ | ||
56 | }; | ||
57 | |||
58 | /** | ||
59 | * These fields should be displayed only from the CLI. | ||
60 | * There will be a separate BFAL API (get_qos_vc_attr ?) | ||
61 | * to retrieve this. | ||
62 | * | ||
63 | */ | ||
64 | #define BFA_QOS_MAX_VC 16 | ||
65 | |||
66 | struct bfa_qos_vc_info_s { | ||
67 | u8 vc_credit; | ||
68 | u8 borrow_credit; | ||
69 | u8 priority; | ||
70 | u8 resvd; | ||
71 | }; | ||
72 | |||
73 | struct bfa_qos_vc_attr_s { | ||
74 | u16 total_vc_count; /* Total VC Count */ | ||
75 | u16 shared_credit; | ||
76 | u32 elp_opmode_flags; | ||
77 | struct bfa_qos_vc_info_s vc_info[BFA_QOS_MAX_VC]; /* as many as | ||
78 | * total_vc_count */ | ||
79 | }; | ||
80 | |||
81 | /** | ||
82 | * QoS statistics | ||
83 | */ | ||
84 | struct bfa_qos_stats_s { | ||
85 | u32 flogi_sent; /* QoS Flogi sent */ | ||
86 | u32 flogi_acc_recvd; /* QoS Flogi Acc received */ | ||
87 | u32 flogi_rjt_recvd; /* QoS Flogi rejects received */ | ||
88 | u32 flogi_retries; /* QoS Flogi retries */ | ||
89 | |||
90 | u32 elp_recvd; /* QoS ELP received */ | ||
91 | u32 elp_accepted; /* QoS ELP Accepted */ | ||
92 | u32 elp_rejected; /* QoS ELP rejected */ | ||
93 | u32 elp_dropped; /* QoS ELP dropped */ | ||
94 | |||
95 | u32 qos_rscn_recvd; /* QoS RSCN received */ | ||
96 | u32 rsvd; /* padding for 64 bit alignment */ | ||
97 | }; | ||
98 | |||
99 | #endif /* __BFA_DEFS_QOS_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_rport.h b/drivers/scsi/bfa/include/defs/bfa_defs_rport.h new file mode 100644 index 000000000000..e0af59d6d2f6 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_rport.h | |||
@@ -0,0 +1,199 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_RPORT_H__ | ||
19 | #define __BFA_DEFS_RPORT_H__ | ||
20 | |||
21 | #include <bfa_os_inc.h> | ||
22 | #include <protocol/types.h> | ||
23 | #include <defs/bfa_defs_pport.h> | ||
24 | #include <defs/bfa_defs_port.h> | ||
25 | #include <defs/bfa_defs_qos.h> | ||
26 | |||
27 | /** | ||
28 | * FCS remote port states | ||
29 | */ | ||
30 | enum bfa_rport_state { | ||
31 | BFA_RPORT_UNINIT = 0, /* PORT is not yet initialized */ | ||
32 | BFA_RPORT_OFFLINE = 1, /* rport is offline */ | ||
33 | BFA_RPORT_PLOGI = 2, /* PLOGI to rport is in progress */ | ||
34 | BFA_RPORT_ONLINE = 3, /* login to rport is complete */ | ||
35 | BFA_RPORT_PLOGI_RETRY = 4, /* retrying login to rport */ | ||
36 | BFA_RPORT_NSQUERY = 5, /* nameserver query */ | ||
37 | BFA_RPORT_ADISC = 6, /* ADISC authentication */ | ||
38 | BFA_RPORT_LOGO = 7, /* logging out with rport */ | ||
39 | BFA_RPORT_LOGORCV = 8, /* handling LOGO from rport */ | ||
40 | BFA_RPORT_NSDISC = 9, /* re-discover rport */ | ||
41 | }; | ||
42 | |||
43 | /** | ||
44 | * Rport Scsi Function : Initiator/Target. | ||
45 | */ | ||
46 | enum bfa_rport_function { | ||
47 | BFA_RPORT_INITIATOR = 0x01, /* SCSI Initiator */ | ||
48 | BFA_RPORT_TARGET = 0x02, /* SCSI Target */ | ||
49 | }; | ||
50 | |||
51 | /** | ||
52 | * port/node symbolic names for rport | ||
53 | */ | ||
54 | #define BFA_RPORT_SYMNAME_MAXLEN 255 | ||
55 | struct bfa_rport_symname_s { | ||
56 | char symname[BFA_RPORT_SYMNAME_MAXLEN]; | ||
57 | }; | ||
58 | |||
59 | struct bfa_rport_hal_stats_s { | ||
60 | u32 sm_un_cr; /* uninit: create events */ | ||
61 | u32 sm_un_unexp; /* uninit: exception events */ | ||
62 | u32 sm_cr_on; /* created: online events */ | ||
63 | u32 sm_cr_del; /* created: delete events */ | ||
64 | u32 sm_cr_hwf; /* created: IOC down */ | ||
65 | u32 sm_cr_unexp; /* created: exception events */ | ||
66 | u32 sm_fwc_rsp; /* fw create: f/w responses */ | ||
67 | u32 sm_fwc_del; /* fw create: delete events */ | ||
68 | u32 sm_fwc_off; /* fw create: offline events */ | ||
69 | u32 sm_fwc_hwf; /* fw create: IOC down */ | ||
70 | u32 sm_fwc_unexp; /* fw create: exception events*/ | ||
71 | u32 sm_on_off; /* online: offline events */ | ||
72 | u32 sm_on_del; /* online: delete events */ | ||
73 | u32 sm_on_hwf; /* online: IOC down events */ | ||
74 | u32 sm_on_unexp; /* online: exception events */ | ||
75 | u32 sm_fwd_rsp; /* fw delete: fw responses */ | ||
76 | u32 sm_fwd_del; /* fw delete: delete events */ | ||
77 | u32 sm_fwd_hwf; /* fw delete: IOC down events */ | ||
78 | u32 sm_fwd_unexp; /* fw delete: exception events*/ | ||
79 | u32 sm_off_del; /* offline: delete events */ | ||
80 | u32 sm_off_on; /* offline: online events */ | ||
81 | u32 sm_off_hwf; /* offline: IOC down events */ | ||
82 | u32 sm_off_unexp; /* offline: exception events */ | ||
83 | u32 sm_del_fwrsp; /* delete: fw responses */ | ||
84 | u32 sm_del_hwf; /* delete: IOC down events */ | ||
85 | u32 sm_del_unexp; /* delete: exception events */ | ||
86 | u32 sm_delp_fwrsp; /* delete pend: fw responses */ | ||
87 | u32 sm_delp_hwf; /* delete pend: IOC downs */ | ||
88 | u32 sm_delp_unexp; /* delete pend: exceptions */ | ||
89 | u32 sm_offp_fwrsp; /* off-pending: fw responses */ | ||
90 | u32 sm_offp_del; /* off-pending: deletes */ | ||
91 | u32 sm_offp_hwf; /* off-pending: IOC downs */ | ||
92 | u32 sm_offp_unexp; /* off-pending: exceptions */ | ||
93 | u32 sm_iocd_off; /* IOC down: offline events */ | ||
94 | u32 sm_iocd_del; /* IOC down: delete events */ | ||
95 | u32 sm_iocd_on; /* IOC down: online events */ | ||
96 | u32 sm_iocd_unexp; /* IOC down: exceptions */ | ||
97 | u32 rsvd; | ||
98 | }; | ||
99 | |||
100 | /** | ||
101 | * FCS remote port statistics | ||
102 | */ | ||
103 | struct bfa_rport_stats_s { | ||
104 | u32 offlines; /* remote port offline count */ | ||
105 | u32 onlines; /* remote port online count */ | ||
106 | u32 rscns; /* RSCN affecting rport */ | ||
107 | u32 plogis; /* plogis sent */ | ||
108 | u32 plogi_accs; /* plogi accepts */ | ||
109 | u32 plogi_timeouts; /* plogi timeouts */ | ||
110 | u32 plogi_rejects; /* rcvd plogi rejects */ | ||
111 | u32 plogi_failed; /* local failure */ | ||
112 | u32 plogi_rcvd; /* plogis rcvd */ | ||
113 | u32 prli_rcvd; /* inbound PRLIs */ | ||
114 | u32 adisc_rcvd; /* ADISCs received */ | ||
115 | u32 adisc_rejects; /* recvd ADISC rejects */ | ||
116 | u32 adisc_sent; /* ADISC requests sent */ | ||
117 | u32 adisc_accs; /* ADISC accepted by rport */ | ||
118 | u32 adisc_failed; /* ADISC failed (no response) */ | ||
119 | u32 adisc_rejected; /* ADISC rejected by us */ | ||
120 | u32 logos; /* logos sent */ | ||
121 | u32 logo_accs; /* LOGO accepts from rport */ | ||
122 | u32 logo_failed; /* LOGO failures */ | ||
123 | u32 logo_rejected; /* LOGO rejects from rport */ | ||
124 | u32 logo_rcvd; /* LOGO from remote port */ | ||
125 | |||
126 | u32 rpsc_rcvd; /* RPSC received */ | ||
127 | u32 rpsc_rejects; /* recvd RPSC rejects */ | ||
128 | u32 rpsc_sent; /* RPSC requests sent */ | ||
129 | u32 rpsc_accs; /* RPSC accepted by rport */ | ||
130 | u32 rpsc_failed; /* RPSC failed (no response) */ | ||
131 | u32 rpsc_rejected; /* RPSC rejected by us */ | ||
132 | |||
133 | u32 rsvd; | ||
134 | struct bfa_rport_hal_stats_s hal_stats; /* BFA rport stats */ | ||
135 | }; | ||
136 | |||
137 | /** | ||
138 | * Rport's QoS attributes | ||
139 | */ | ||
140 | struct bfa_rport_qos_attr_s { | ||
141 | enum bfa_qos_priority qos_priority; /* rport's QoS priority */ | ||
142 | u32 qos_flow_id; /* QoS flow Id */ | ||
143 | }; | ||
144 | |||
145 | /** | ||
146 | * FCS remote port attributes returned in queries | ||
147 | */ | ||
148 | struct bfa_rport_attr_s { | ||
149 | wwn_t nwwn; /* node wwn */ | ||
150 | wwn_t pwwn; /* port wwn */ | ||
151 | enum fc_cos cos_supported; /* supported class of services */ | ||
152 | u32 pid; /* port ID */ | ||
153 | u32 df_sz; /* Max payload size */ | ||
154 | enum bfa_rport_state state; /* Rport State machine state */ | ||
155 | enum fc_cos fc_cos; /* FC classes of services */ | ||
156 | bfa_boolean_t cisc; /* CISC capable device */ | ||
157 | struct bfa_rport_symname_s symname; /* Symbolic Name */ | ||
158 | enum bfa_rport_function scsi_function; /* Initiator/Target */ | ||
159 | struct bfa_rport_qos_attr_s qos_attr; /* qos attributes */ | ||
160 | enum bfa_pport_speed curr_speed; /* operating speed got from | ||
161 | * RPSC ELS. UNKNOWN, if RPSC | ||
162 | * is not supported */ | ||
163 | bfa_boolean_t trl_enforced; /* TRL enforced ? TRUE/FALSE */ | ||
164 | enum bfa_pport_speed assigned_speed; /* Speed assigned by the user. | ||
165 | * will be used if RPSC is not | ||
166 | * supported by the rport */ | ||
167 | }; | ||
168 | |||
169 | #define bfa_rport_aen_qos_data_t struct bfa_rport_qos_attr_s | ||
170 | |||
171 | /** | ||
172 | * BFA remote port events | ||
173 | * Arguments below are in BFAL context from Mgmt | ||
174 | * BFA_RPORT_AEN_ONLINE: [in]: lpwwn [out]: vf_id, lpwwn, rpwwn | ||
175 | * BFA_RPORT_AEN_OFFLINE: [in]: lpwwn [out]: vf_id, lpwwn, rpwwn | ||
176 | * BFA_RPORT_AEN_DISCONNECT:[in]: lpwwn [out]: vf_id, lpwwn, rpwwn | ||
177 | * BFA_RPORT_AEN_QOS_PRIO: [in]: lpwwn [out]: vf_id, lpwwn, rpwwn, prio | ||
178 | * BFA_RPORT_AEN_QOS_FLOWID:[in]: lpwwn [out]: vf_id, lpwwn, rpwwn, flow_id | ||
179 | */ | ||
180 | enum bfa_rport_aen_event { | ||
181 | BFA_RPORT_AEN_ONLINE = 1, /* RPort online event */ | ||
182 | BFA_RPORT_AEN_OFFLINE = 2, /* RPort offline event */ | ||
183 | BFA_RPORT_AEN_DISCONNECT = 3, /* RPort disconnect event */ | ||
184 | BFA_RPORT_AEN_QOS_PRIO = 4, /* QOS priority change event */ | ||
185 | BFA_RPORT_AEN_QOS_FLOWID = 5, /* QOS flow Id change event */ | ||
186 | }; | ||
187 | |||
188 | struct bfa_rport_aen_data_s { | ||
189 | u16 vf_id; /* vf_id of this logical port */ | ||
190 | u16 rsvd[3]; | ||
191 | wwn_t ppwwn; /* WWN of its physical port */ | ||
192 | wwn_t lpwwn; /* WWN of this logical port */ | ||
193 | wwn_t rpwwn; /* WWN of this remote port */ | ||
194 | union { | ||
195 | bfa_rport_aen_qos_data_t qos; | ||
196 | } priv; | ||
197 | }; | ||
198 | |||
199 | #endif /* __BFA_DEFS_RPORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_status.h b/drivers/scsi/bfa/include/defs/bfa_defs_status.h new file mode 100644 index 000000000000..cdceaeb9f4b8 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_status.h | |||
@@ -0,0 +1,255 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_DEFS_STATUS_H__ | ||
18 | #define __BFA_DEFS_STATUS_H__ | ||
19 | |||
20 | /** | ||
21 | * API status return values | ||
22 | * | ||
23 | * NOTE: The error msgs are auto generated from the comments. Only singe line | ||
24 | * comments are supported | ||
25 | */ | ||
26 | enum bfa_status { | ||
27 | BFA_STATUS_OK = 0, /* Success */ | ||
28 | BFA_STATUS_FAILED = 1, /* Operation failed */ | ||
29 | BFA_STATUS_EINVAL = 2, /* Invalid params Check input | ||
30 | * parameters */ | ||
31 | BFA_STATUS_ENOMEM = 3, /* Out of resources */ | ||
32 | BFA_STATUS_ENOSYS = 4, /* Function not implemented */ | ||
33 | BFA_STATUS_ETIMER = 5, /* Timer expired - Retry, if | ||
34 | * persists, contact support */ | ||
35 | BFA_STATUS_EPROTOCOL = 6, /* Protocol error */ | ||
36 | BFA_STATUS_ENOFCPORTS = 7, /* No FC ports resources */ | ||
37 | BFA_STATUS_NOFLASH = 8, /* Flash not present */ | ||
38 | BFA_STATUS_BADFLASH = 9, /* Flash is corrupted or bad */ | ||
39 | BFA_STATUS_SFP_UNSUPP = 10, /* Unsupported SFP - Replace SFP */ | ||
40 | BFA_STATUS_UNKNOWN_VFID = 11, /* VF_ID not found */ | ||
41 | BFA_STATUS_DATACORRUPTED = 12, /* Diag returned data corrupted | ||
42 | * contact support */ | ||
43 | BFA_STATUS_DEVBUSY = 13, /* Device busy - Retry operation */ | ||
44 | BFA_STATUS_ABORTED = 14, /* Operation aborted */ | ||
45 | BFA_STATUS_NODEV = 15, /* Dev is not present */ | ||
46 | BFA_STATUS_HDMA_FAILED = 16, /* Host dma failed contact support */ | ||
47 | BFA_STATUS_FLASH_BAD_LEN = 17, /* Flash bad length */ | ||
48 | BFA_STATUS_UNKNOWN_LWWN = 18, /* LPORT PWWN not found */ | ||
49 | BFA_STATUS_UNKNOWN_RWWN = 19, /* RPORT PWWN not found */ | ||
50 | BFA_STATUS_FCPT_LS_RJT = 20, /* Got LS_RJT for FC Pass | ||
51 | * through Req */ | ||
52 | BFA_STATUS_VPORT_EXISTS = 21, /* VPORT already exists */ | ||
53 | BFA_STATUS_VPORT_MAX = 22, /* Reached max VPORT supported | ||
54 | * limit */ | ||
55 | BFA_STATUS_UNSUPP_SPEED = 23, /* Invalid Speed Check speed | ||
56 | * setting */ | ||
57 | BFA_STATUS_INVLD_DFSZ = 24, /* Invalid Max data field size */ | ||
58 | BFA_STATUS_CNFG_FAILED = 25, /* Setting can not be persisted */ | ||
59 | BFA_STATUS_CMD_NOTSUPP = 26, /* Command/API not supported */ | ||
60 | BFA_STATUS_NO_ADAPTER = 27, /* No Brocade Adapter Found */ | ||
61 | BFA_STATUS_LINKDOWN = 28, /* Link is down - Check or replace | ||
62 | * SFP/cable */ | ||
63 | BFA_STATUS_FABRIC_RJT = 29, /* Reject from attached fabric */ | ||
64 | BFA_STATUS_UNKNOWN_VWWN = 30, /* VPORT PWWN not found */ | ||
65 | BFA_STATUS_NSLOGIN_FAILED = 31, /* Nameserver login failed */ | ||
66 | BFA_STATUS_NO_RPORTS = 32, /* No remote ports found */ | ||
67 | BFA_STATUS_NSQUERY_FAILED = 33, /* Nameserver query failed */ | ||
68 | BFA_STATUS_PORT_OFFLINE = 34, /* Port is not online */ | ||
69 | BFA_STATUS_RPORT_OFFLINE = 35, /* RPORT is not online */ | ||
70 | BFA_STATUS_TGTOPEN_FAILED = 36, /* Remote SCSI target open failed */ | ||
71 | BFA_STATUS_BAD_LUNS = 37, /* No valid LUNs found */ | ||
72 | BFA_STATUS_IO_FAILURE = 38, /* SCSI target IO failure */ | ||
73 | BFA_STATUS_NO_FABRIC = 39, /* No switched fabric present */ | ||
74 | BFA_STATUS_EBADF = 40, /* Bad file descriptor */ | ||
75 | BFA_STATUS_EINTR = 41, /* A signal was caught during ioctl */ | ||
76 | BFA_STATUS_EIO = 42, /* I/O error */ | ||
77 | BFA_STATUS_ENOTTY = 43, /* Inappropriate I/O control | ||
78 | * operation */ | ||
79 | BFA_STATUS_ENXIO = 44, /* No such device or address */ | ||
80 | BFA_STATUS_EFOPEN = 45, /* Failed to open file */ | ||
81 | BFA_STATUS_VPORT_WWN_BP = 46, /* WWN is same as base port's WWN */ | ||
82 | BFA_STATUS_PORT_NOT_DISABLED = 47, /* Port not disabled disable port | ||
83 | * first */ | ||
84 | BFA_STATUS_BADFRMHDR = 48, /* Bad frame header */ | ||
85 | BFA_STATUS_BADFRMSZ = 49, /* Bad frame size check and replace | ||
86 | * SFP/cable */ | ||
87 | BFA_STATUS_MISSINGFRM = 50, /* Missing frame check and replace | ||
88 | * SFP/cable */ | ||
89 | BFA_STATUS_LINKTIMEOUT = 51, /* Link timeout check and replace | ||
90 | * SFP/cable */ | ||
91 | BFA_STATUS_NO_FCPIM_NEXUS = 52, /* No FCP Nexus exists with the | ||
92 | * rport */ | ||
93 | BFA_STATUS_CHECKSUM_FAIL = 53, /* checksum failure */ | ||
94 | BFA_STATUS_GZME_FAILED = 54, /* Get zone member query failed */ | ||
95 | BFA_STATUS_SCSISTART_REQD = 55, /* SCSI disk require START command */ | ||
96 | BFA_STATUS_IOC_FAILURE = 56, /* IOC failure - Retry, if persists | ||
97 | * contact support */ | ||
98 | BFA_STATUS_INVALID_WWN = 57, /* Invalid WWN */ | ||
99 | BFA_STATUS_MISMATCH = 58, /* Version mismatch */ | ||
100 | BFA_STATUS_IOC_ENABLED = 59, /* IOC is already enabled */ | ||
101 | BFA_STATUS_ADAPTER_ENABLED = 60, /* Adapter is not disabled disable | ||
102 | * adapter first */ | ||
103 | BFA_STATUS_IOC_NON_OP = 61, /* IOC is not operational. Enable IOC | ||
104 | * and if it still fails, | ||
105 | * contact support */ | ||
106 | BFA_STATUS_ADDR_MAP_FAILURE = 62, /* PCI base address not mapped | ||
107 | * in OS */ | ||
108 | BFA_STATUS_SAME_NAME = 63, /* Name exists! use a different | ||
109 | * name */ | ||
110 | BFA_STATUS_PENDING = 64, /* API completes asynchronously */ | ||
111 | BFA_STATUS_8G_SPD = 65, /* Speed setting not valid for | ||
112 | * 8G HBA */ | ||
113 | BFA_STATUS_4G_SPD = 66, /* Speed setting not valid for | ||
114 | * 4G HBA */ | ||
115 | BFA_STATUS_AD_IS_ENABLE = 67, /* Adapter is already enabled */ | ||
116 | BFA_STATUS_EINVAL_TOV = 68, /* Invalid path failover TOV */ | ||
117 | BFA_STATUS_EINVAL_QDEPTH = 69, /* Invalid queue depth value */ | ||
118 | BFA_STATUS_VERSION_FAIL = 70, /* Application/Driver version | ||
119 | * mismatch */ | ||
120 | BFA_STATUS_DIAG_BUSY = 71, /* diag busy */ | ||
121 | BFA_STATUS_BEACON_ON = 72, /* Port Beacon already on */ | ||
122 | BFA_STATUS_BEACON_OFF = 73, /* Port Beacon already off */ | ||
123 | BFA_STATUS_LBEACON_ON = 74, /* Link End-to-End Beacon already | ||
124 | * on */ | ||
125 | BFA_STATUS_LBEACON_OFF = 75, /* Link End-to-End Beacon already | ||
126 | * off */ | ||
127 | BFA_STATUS_PORT_NOT_INITED = 76, /* Port not initialized */ | ||
128 | BFA_STATUS_RPSC_ENABLED = 77, /* Target has a valid speed */ | ||
129 | BFA_STATUS_ENOFSAVE = 78, /* No saved firmware trace */ | ||
130 | BFA_STATUS_BAD_FILE = 79, /* Not a valid Brocade Boot Code | ||
131 | * file */ | ||
132 | BFA_STATUS_RLIM_EN = 80, /* Target rate limiting is already | ||
133 | * enabled */ | ||
134 | BFA_STATUS_RLIM_DIS = 81, /* Target rate limiting is already | ||
135 | * disabled */ | ||
136 | BFA_STATUS_IOC_DISABLED = 82, /* IOC is already disabled */ | ||
137 | BFA_STATUS_ADAPTER_DISABLED = 83, /* Adapter is already disabled */ | ||
138 | BFA_STATUS_BIOS_DISABLED = 84, /* Bios is already disabled */ | ||
139 | BFA_STATUS_AUTH_ENABLED = 85, /* Authentication is already | ||
140 | * enabled */ | ||
141 | BFA_STATUS_AUTH_DISABLED = 86, /* Authentication is already | ||
142 | * disabled */ | ||
143 | BFA_STATUS_ERROR_TRL_ENABLED = 87, /* Target rate limiting is | ||
144 | * enabled */ | ||
145 | BFA_STATUS_ERROR_QOS_ENABLED = 88, /* QoS is enabled */ | ||
146 | BFA_STATUS_NO_SFP_DEV = 89, /* No SFP device check or replace SFP */ | ||
147 | BFA_STATUS_MEMTEST_FAILED = 90, /* Memory test failed contact | ||
148 | * support */ | ||
149 | BFA_STATUS_INVALID_DEVID = 91, /* Invalid device id provided */ | ||
150 | BFA_STATUS_QOS_ENABLED = 92, /* QOS is already enabled */ | ||
151 | BFA_STATUS_QOS_DISABLED = 93, /* QOS is already disabled */ | ||
152 | BFA_STATUS_INCORRECT_DRV_CONFIG = 94, /* Check configuration | ||
153 | * key/value pair */ | ||
154 | BFA_STATUS_REG_FAIL = 95, /* Can't read windows registry */ | ||
155 | BFA_STATUS_IM_INV_CODE = 96, /* Invalid IOCTL code */ | ||
156 | BFA_STATUS_IM_INV_VLAN = 97, /* Invalid VLAN ID */ | ||
157 | BFA_STATUS_IM_INV_ADAPT_NAME = 98, /* Invalid adapter name */ | ||
158 | BFA_STATUS_IM_LOW_RESOURCES = 99, /* Memory allocation failure in | ||
159 | * driver */ | ||
160 | BFA_STATUS_IM_VLANID_IS_PVID = 100, /* Given VLAN id same as PVID */ | ||
161 | BFA_STATUS_IM_VLANID_EXISTS = 101, /* Given VLAN id already exists */ | ||
162 | BFA_STATUS_IM_FW_UPDATE_FAIL = 102, /* Updating firmware with new | ||
163 | * VLAN ID failed */ | ||
164 | BFA_STATUS_PORTLOG_ENABLED = 103, /* Port Log is already enabled */ | ||
165 | BFA_STATUS_PORTLOG_DISABLED = 104, /* Port Log is already disabled */ | ||
166 | BFA_STATUS_FILE_NOT_FOUND = 105, /* Specified file could not be | ||
167 | * found */ | ||
168 | BFA_STATUS_QOS_FC_ONLY = 106, /* QOS can be enabled for FC mode | ||
169 | * only */ | ||
170 | BFA_STATUS_RLIM_FC_ONLY = 107, /* RATELIM can be enabled for FC mode | ||
171 | * only */ | ||
172 | BFA_STATUS_CT_SPD = 108, /* Invalid speed selection for Catapult. */ | ||
173 | BFA_STATUS_LEDTEST_OP = 109, /* LED test is operating */ | ||
174 | BFA_STATUS_CEE_NOT_DN = 110, /* eth port is not at down state, please | ||
175 | * bring down first */ | ||
176 | BFA_STATUS_10G_SPD = 111, /* Speed setting not valid for 10G HBA */ | ||
177 | BFA_STATUS_IM_INV_TEAM_NAME = 112, /* Invalid team name */ | ||
178 | BFA_STATUS_IM_DUP_TEAM_NAME = 113, /* Given team name already | ||
179 | * exists */ | ||
180 | BFA_STATUS_IM_ADAPT_ALREADY_IN_TEAM = 114, /* Given adapter is part | ||
181 | * of another team */ | ||
182 | BFA_STATUS_IM_ADAPT_HAS_VLANS = 115, /* Adapter has VLANs configured. | ||
183 | * Delete all VLANs before | ||
184 | * creating team */ | ||
185 | BFA_STATUS_IM_PVID_MISMATCH = 116, /* Mismatching PVIDs configured | ||
186 | * for adapters */ | ||
187 | BFA_STATUS_IM_LINK_SPEED_MISMATCH = 117, /* Mismatching link speeds | ||
188 | * configured for adapters */ | ||
189 | BFA_STATUS_IM_MTU_MISMATCH = 118, /* Mismatching MTUs configured for | ||
190 | * adapters */ | ||
191 | BFA_STATUS_IM_RSS_MISMATCH = 119, /* Mismatching RSS parameters | ||
192 | * configured for adapters */ | ||
193 | BFA_STATUS_IM_HDS_MISMATCH = 120, /* Mismatching HDS parameters | ||
194 | * configured for adapters */ | ||
195 | BFA_STATUS_IM_OFFLOAD_MISMATCH = 121, /* Mismatching offload | ||
196 | * parameters configured for | ||
197 | * adapters */ | ||
198 | BFA_STATUS_IM_PORT_PARAMS = 122, /* Error setting port parameters */ | ||
199 | BFA_STATUS_IM_PORT_NOT_IN_TEAM = 123, /* Port is not part of team */ | ||
200 | BFA_STATUS_IM_CANNOT_REM_PRI = 124, /* Primary adapter cannot be | ||
201 | * removed. Change primary before | ||
202 | * removing */ | ||
203 | BFA_STATUS_IM_MAX_PORTS_REACHED = 125, /* Exceeding maximum ports | ||
204 | * per team */ | ||
205 | BFA_STATUS_IM_LAST_PORT_DELETE = 126, /* Last port in team being | ||
206 | * deleted */ | ||
207 | BFA_STATUS_IM_NO_DRIVER = 127, /* IM driver is not installed */ | ||
208 | BFA_STATUS_IM_MAX_VLANS_REACHED = 128, /* Exceeding maximum VLANs | ||
209 | * per port */ | ||
210 | BFA_STATUS_TOMCAT_SPD_NOT_ALLOWED = 129, /* Bios speed config not | ||
211 | * allowed for CNA */ | ||
212 | BFA_STATUS_NO_MINPORT_DRIVER = 130, /* Miniport driver is not | ||
213 | * loaded */ | ||
214 | BFA_STATUS_CARD_TYPE_MISMATCH = 131, /* Card type mismatch */ | ||
215 | BFA_STATUS_BAD_ASICBLK = 132, /* Bad ASIC block */ | ||
216 | BFA_STATUS_NO_DRIVER = 133, /* Storage/Ethernet driver not loaded */ | ||
217 | BFA_STATUS_INVALID_MAC = 134, /* Invalid mac address */ | ||
218 | BFA_STATUS_IM_NO_VLAN = 135, /* No VLANs configured on the adapter */ | ||
219 | BFA_STATUS_IM_ETH_LB_FAILED = 136, /* Ethernet loopback test failed */ | ||
220 | BFA_STATUS_IM_PVID_REMOVE = 137, /* Cannot remove port vlan (PVID) */ | ||
221 | BFA_STATUS_IM_PVID_EDIT = 138, /* Cannot edit port vlan (PVID) */ | ||
222 | BFA_STATUS_CNA_NO_BOOT = 139, /* Boot upload not allowed for CNA */ | ||
223 | BFA_STATUS_IM_PVID_NON_ZERO = 140, /* Port VLAN ID (PVID) is Set to | ||
224 | * Non-Zero Value */ | ||
225 | BFA_STATUS_IM_INETCFG_LOCK_FAILED = 141, /* Acquiring Network | ||
226 | * Subsytem Lock Failed.Please | ||
227 | * try after some time */ | ||
228 | BFA_STATUS_IM_GET_INETCFG_FAILED = 142, /* Acquiring Network Subsytem | ||
229 | * handle Failed. Please try | ||
230 | * after some time */ | ||
231 | BFA_STATUS_IM_NOT_BOUND = 143, /* Brocade 10G Ethernet Service is not | ||
232 | * Enabled on this port */ | ||
233 | BFA_STATUS_INSUFFICIENT_PERMS = 144, /* User doesn't have sufficient | ||
234 | * permissions to execute the BCU | ||
235 | * application */ | ||
236 | BFA_STATUS_IM_INV_VLAN_NAME = 145, /* Invalid/Reserved Vlan name | ||
237 | * string. The name is not allowed | ||
238 | * for the normal Vlans */ | ||
239 | BFA_STATUS_CMD_NOTSUPP_CNA = 146, /* Command not supported for CNA */ | ||
240 | BFA_STATUS_IM_PASSTHRU_EDIT = 147, /* Can not edit passthru vlan id */ | ||
241 | BFA_STATUS_IM_BIND_FAILED = 148, /*! < IM Driver bind operation | ||
242 | * failed */ | ||
243 | BFA_STATUS_IM_UNBIND_FAILED = 149, /* ! < IM Driver unbind operation | ||
244 | * failed */ | ||
245 | BFA_STATUS_MAX_VAL /* Unknown error code */ | ||
246 | }; | ||
247 | #define bfa_status_t enum bfa_status | ||
248 | |||
249 | enum bfa_eproto_status { | ||
250 | BFA_EPROTO_BAD_ACCEPT = 0, | ||
251 | BFA_EPROTO_UNKNOWN_RSP = 1 | ||
252 | }; | ||
253 | #define bfa_eproto_status_t enum bfa_eproto_status | ||
254 | |||
255 | #endif /* __BFA_DEFS_STATUS_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_tin.h b/drivers/scsi/bfa/include/defs/bfa_defs_tin.h new file mode 100644 index 000000000000..e05a2db7abed --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_tin.h | |||
@@ -0,0 +1,118 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_TIN_H__ | ||
19 | #define __BFA_DEFS_TIN_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | #include <protocol/fc.h> | ||
23 | |||
24 | /** | ||
25 | * FCS tin states | ||
26 | */ | ||
27 | enum bfa_tin_state_e { | ||
28 | BFA_TIN_SM_OFFLINE = 0, /* tin is offline */ | ||
29 | BFA_TIN_SM_WOS_LOGIN = 1, /* Waiting PRLI ACC/RJT from ULP */ | ||
30 | BFA_TIN_SM_WFW_ONLINE = 2, /* Waiting ACK to PRLI ACC from FW */ | ||
31 | BFA_TIN_SM_ONLINE = 3, /* tin login is complete */ | ||
32 | BFA_TIN_SM_WIO_RELOGIN = 4, /* tin relogin is in progress */ | ||
33 | BFA_TIN_SM_WIO_LOGOUT = 5, /* Processing of PRLO req from | ||
34 | * Initiator is in progress | ||
35 | */ | ||
36 | BFA_TIN_SM_WOS_LOGOUT = 6, /* Processing of PRLO req from | ||
37 | * Initiator is in progress | ||
38 | */ | ||
39 | BFA_TIN_SM_WIO_CLEAN = 7, /* Waiting for IO cleanup before tin | ||
40 | * is offline. This can be triggered | ||
41 | * by RPORT LOGO (rcvd/sent) or by | ||
42 | * PRLO (rcvd/sent) | ||
43 | */ | ||
44 | }; | ||
45 | |||
46 | struct bfa_prli_req_s { | ||
47 | struct fchs_s fchs; | ||
48 | struct fc_prli_s prli_payload; | ||
49 | }; | ||
50 | |||
51 | struct bfa_prlo_req_s { | ||
52 | struct fchs_s fchs; | ||
53 | struct fc_prlo_s prlo_payload; | ||
54 | }; | ||
55 | |||
56 | void bfa_tin_send_login_rsp(void *bfa_tin, u32 login_rsp, | ||
57 | struct fc_ls_rjt_s rjt_payload); | ||
58 | void bfa_tin_send_logout_rsp(void *bfa_tin, u32 logout_rsp, | ||
59 | struct fc_ls_rjt_s rjt_payload); | ||
60 | /** | ||
61 | * FCS target port statistics | ||
62 | */ | ||
63 | struct bfa_tin_stats_s { | ||
64 | u32 onlines; /* ITN nexus onlines (PRLI done) */ | ||
65 | u32 offlines; /* ITN Nexus offlines */ | ||
66 | u32 prli_req_parse_err; /* prli req parsing errors */ | ||
67 | u32 prli_rsp_rjt; /* num prli rsp rejects sent */ | ||
68 | u32 prli_rsp_acc; /* num prli rsp accepts sent */ | ||
69 | u32 cleanup_comps; /* ITN cleanup completions */ | ||
70 | }; | ||
71 | |||
72 | /** | ||
73 | * FCS tin attributes returned in queries | ||
74 | */ | ||
75 | struct bfa_tin_attr_s { | ||
76 | enum bfa_tin_state_e state; | ||
77 | u8 seq_retry; /* Sequence retry supported */ | ||
78 | u8 rsvd[3]; | ||
79 | }; | ||
80 | |||
81 | /** | ||
82 | * BFA TIN async event data structure for BFAL | ||
83 | */ | ||
84 | enum bfa_tin_aen_event { | ||
85 | BFA_TIN_AEN_ONLINE = 1, /* Target online */ | ||
86 | BFA_TIN_AEN_OFFLINE = 2, /* Target offline */ | ||
87 | BFA_TIN_AEN_DISCONNECT = 3, /* Target disconnected */ | ||
88 | }; | ||
89 | |||
90 | /** | ||
91 | * BFA TIN event data structure. | ||
92 | */ | ||
93 | struct bfa_tin_aen_data_s { | ||
94 | u16 vf_id; /* vf_id of the IT nexus */ | ||
95 | u16 rsvd[3]; | ||
96 | wwn_t lpwwn; /* WWN of logical port */ | ||
97 | wwn_t rpwwn; /* WWN of remote(target) port */ | ||
98 | }; | ||
99 | |||
100 | /** | ||
101 | * Below APIs are needed from BFA driver | ||
102 | * Move these to BFA driver public header file? | ||
103 | */ | ||
104 | /* TIN rcvd new PRLI & gets bfad_tin_t ptr from driver this callback */ | ||
105 | void *bfad_tin_rcvd_login_req(void *bfad_tm_port, void *bfa_tin, | ||
106 | wwn_t rp_wwn, u32 rp_fcid, | ||
107 | struct bfa_prli_req_s prli_req); | ||
108 | /* TIN rcvd new PRLO */ | ||
109 | void bfad_tin_rcvd_logout_req(void *bfad_tin, wwn_t rp_wwn, u32 rp_fcid, | ||
110 | struct bfa_prlo_req_s prlo_req); | ||
111 | /* TIN is online and ready for IO */ | ||
112 | void bfad_tin_online(void *bfad_tin); | ||
113 | /* TIN is offline and BFA driver can shutdown its upper stack */ | ||
114 | void bfad_tin_offline(void *bfad_tin); | ||
115 | /* TIN does not need this BFA driver tin tag anymore, so can be freed */ | ||
116 | void bfad_tin_res_free(void *bfad_tin); | ||
117 | |||
118 | #endif /* __BFA_DEFS_TIN_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_tsensor.h b/drivers/scsi/bfa/include/defs/bfa_defs_tsensor.h new file mode 100644 index 000000000000..31881d218515 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_tsensor.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_TSENSOR_H__ | ||
19 | #define __BFA_DEFS_TSENSOR_H__ | ||
20 | |||
21 | #include <bfa_os_inc.h> | ||
22 | #include <defs/bfa_defs_types.h> | ||
23 | |||
24 | /** | ||
25 | * Temperature sensor status values | ||
26 | */ | ||
27 | enum bfa_tsensor_status { | ||
28 | BFA_TSENSOR_STATUS_UNKNOWN = 1, /* unkown status */ | ||
29 | BFA_TSENSOR_STATUS_FAULTY = 2, /* sensor is faulty */ | ||
30 | BFA_TSENSOR_STATUS_BELOW_MIN = 3, /* temperature below mininum */ | ||
31 | BFA_TSENSOR_STATUS_NOMINAL = 4, /* normal temperature */ | ||
32 | BFA_TSENSOR_STATUS_ABOVE_MAX = 5, /* temperature above maximum */ | ||
33 | }; | ||
34 | |||
35 | /** | ||
36 | * Temperature sensor attribute | ||
37 | */ | ||
38 | struct bfa_tsensor_attr_s { | ||
39 | enum bfa_tsensor_status status; /* temperature sensor status */ | ||
40 | u32 value; /* current temperature in celsius */ | ||
41 | }; | ||
42 | |||
43 | #endif /* __BFA_DEFS_TSENSOR_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_types.h b/drivers/scsi/bfa/include/defs/bfa_defs_types.h new file mode 100644 index 000000000000..4348332b107a --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_types.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_DEFS_TYPES_H__ | ||
18 | #define __BFA_DEFS_TYPES_H__ | ||
19 | |||
20 | #include <bfa_os_inc.h> | ||
21 | |||
22 | enum bfa_boolean { | ||
23 | BFA_FALSE = 0, | ||
24 | BFA_TRUE = 1 | ||
25 | }; | ||
26 | #define bfa_boolean_t enum bfa_boolean | ||
27 | |||
28 | #define BFA_STRING_32 32 | ||
29 | |||
30 | #endif /* __BFA_DEFS_TYPES_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_version.h b/drivers/scsi/bfa/include/defs/bfa_defs_version.h new file mode 100644 index 000000000000..f8902a2c9aad --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_version.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | #ifndef __BFA_DEFS_VERSION_H__ | ||
18 | #define __BFA_DEFS_VERSION_H__ | ||
19 | |||
20 | #define BFA_VERSION_LEN 64 | ||
21 | |||
22 | #endif | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_vf.h b/drivers/scsi/bfa/include/defs/bfa_defs_vf.h new file mode 100644 index 000000000000..3235be5e9423 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_vf.h | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_VF_H__ | ||
19 | #define __BFA_DEFS_VF_H__ | ||
20 | |||
21 | #include <bfa_os_inc.h> | ||
22 | #include <defs/bfa_defs_port.h> | ||
23 | #include <protocol/types.h> | ||
24 | |||
25 | /** | ||
26 | * VF states | ||
27 | */ | ||
28 | enum bfa_vf_state { | ||
29 | BFA_VF_UNINIT = 0, /* fabric is not yet initialized */ | ||
30 | BFA_VF_LINK_DOWN = 1, /* link is down */ | ||
31 | BFA_VF_FLOGI = 2, /* flogi is in progress */ | ||
32 | BFA_VF_AUTH = 3, /* authentication in progress */ | ||
33 | BFA_VF_NOFABRIC = 4, /* fabric is not present */ | ||
34 | BFA_VF_ONLINE = 5, /* login to fabric is complete */ | ||
35 | BFA_VF_EVFP = 6, /* EVFP is in progress */ | ||
36 | BFA_VF_ISOLATED = 7, /* port isolated due to vf_id mismatch */ | ||
37 | }; | ||
38 | |||
39 | /** | ||
40 | * VF statistics | ||
41 | */ | ||
42 | struct bfa_vf_stats_s { | ||
43 | u32 flogi_sent; /* Num FLOGIs sent */ | ||
44 | u32 flogi_rsp_err; /* FLOGI response errors */ | ||
45 | u32 flogi_acc_err; /* FLOGI accept errors */ | ||
46 | u32 flogi_accepts; /* FLOGI accepts received */ | ||
47 | u32 flogi_rejects; /* FLOGI rejects received */ | ||
48 | u32 flogi_unknown_rsp; /* Unknown responses for FLOGI */ | ||
49 | u32 flogi_alloc_wait; /* Allocation waits prior to | ||
50 | * sending FLOGI | ||
51 | */ | ||
52 | u32 flogi_rcvd; /* FLOGIs received */ | ||
53 | u32 flogi_rejected; /* Incoming FLOGIs rejected */ | ||
54 | u32 fabric_onlines; /* Internal fabric online | ||
55 | * notification sent to other | ||
56 | * modules | ||
57 | */ | ||
58 | u32 fabric_offlines; /* Internal fabric offline | ||
59 | * notification sent to other | ||
60 | * modules | ||
61 | */ | ||
62 | u32 resvd; | ||
63 | }; | ||
64 | |||
65 | /** | ||
66 | * VF attributes returned in queries | ||
67 | */ | ||
68 | struct bfa_vf_attr_s { | ||
69 | enum bfa_vf_state state; /* VF state */ | ||
70 | u32 rsvd; | ||
71 | wwn_t fabric_name; /* fabric name */ | ||
72 | }; | ||
73 | |||
74 | #endif /* __BFA_DEFS_VF_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/defs/bfa_defs_vport.h b/drivers/scsi/bfa/include/defs/bfa_defs_vport.h new file mode 100644 index 000000000000..9f021f43b3b4 --- /dev/null +++ b/drivers/scsi/bfa/include/defs/bfa_defs_vport.h | |||
@@ -0,0 +1,91 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_DEFS_VPORT_H__ | ||
19 | #define __BFA_DEFS_VPORT_H__ | ||
20 | |||
21 | #include <bfa_os_inc.h> | ||
22 | #include <defs/bfa_defs_port.h> | ||
23 | #include <protocol/types.h> | ||
24 | |||
25 | /** | ||
26 | * VPORT states | ||
27 | */ | ||
28 | enum bfa_vport_state { | ||
29 | BFA_FCS_VPORT_UNINIT = 0, | ||
30 | BFA_FCS_VPORT_CREATED = 1, | ||
31 | BFA_FCS_VPORT_OFFLINE = 1, | ||
32 | BFA_FCS_VPORT_FDISC_SEND = 2, | ||
33 | BFA_FCS_VPORT_FDISC = 3, | ||
34 | BFA_FCS_VPORT_FDISC_RETRY = 4, | ||
35 | BFA_FCS_VPORT_ONLINE = 5, | ||
36 | BFA_FCS_VPORT_DELETING = 6, | ||
37 | BFA_FCS_VPORT_CLEANUP = 6, | ||
38 | BFA_FCS_VPORT_LOGO_SEND = 7, | ||
39 | BFA_FCS_VPORT_LOGO = 8, | ||
40 | BFA_FCS_VPORT_ERROR = 9, | ||
41 | BFA_FCS_VPORT_MAX_STATE, | ||
42 | }; | ||
43 | |||
44 | /** | ||
45 | * vport statistics | ||
46 | */ | ||
47 | struct bfa_vport_stats_s { | ||
48 | struct bfa_port_stats_s port_stats; /* base class (port) stats */ | ||
49 | /* | ||
50 | * TODO - remove | ||
51 | */ | ||
52 | |||
53 | u32 fdisc_sent; /* num fdisc sent */ | ||
54 | u32 fdisc_accepts; /* fdisc accepts */ | ||
55 | u32 fdisc_retries; /* fdisc retries */ | ||
56 | u32 fdisc_timeouts; /* fdisc timeouts */ | ||
57 | u32 fdisc_rsp_err; /* fdisc response error */ | ||
58 | u32 fdisc_acc_bad; /* bad fdisc accepts */ | ||
59 | u32 fdisc_rejects; /* fdisc rejects */ | ||
60 | u32 fdisc_unknown_rsp; | ||
61 | /* | ||
62 | *!< fdisc rsp unknown error | ||
63 | */ | ||
64 | u32 fdisc_alloc_wait;/* fdisc req (fcxp)alloc wait */ | ||
65 | |||
66 | u32 logo_alloc_wait;/* logo req (fcxp) alloc wait */ | ||
67 | u32 logo_sent; /* logo sent */ | ||
68 | u32 logo_accepts; /* logo accepts */ | ||
69 | u32 logo_rejects; /* logo rejects */ | ||
70 | u32 logo_rsp_err; /* logo rsp errors */ | ||
71 | u32 logo_unknown_rsp; | ||
72 | /* logo rsp unknown errors */ | ||
73 | |||
74 | u32 fab_no_npiv; /* fabric does not support npiv */ | ||
75 | |||
76 | u32 fab_offline; /* offline events from fab SM */ | ||
77 | u32 fab_online; /* online events from fab SM */ | ||
78 | u32 fab_cleanup; /* cleanup request from fab SM */ | ||
79 | u32 rsvd; | ||
80 | }; | ||
81 | |||
82 | /** | ||
83 | * BFA vport attribute returned in queries | ||
84 | */ | ||
85 | struct bfa_vport_attr_s { | ||
86 | struct bfa_port_attr_s port_attr; /* base class (port) attributes */ | ||
87 | enum bfa_vport_state vport_state; /* vport state */ | ||
88 | u32 rsvd; | ||
89 | }; | ||
90 | |||
91 | #endif /* __BFA_DEFS_VPORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcb/bfa_fcb.h b/drivers/scsi/bfa/include/fcb/bfa_fcb.h new file mode 100644 index 000000000000..2963b0bc30e7 --- /dev/null +++ b/drivers/scsi/bfa/include/fcb/bfa_fcb.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_fcb.h BFA FCS callback interfaces | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_FCB_H__ | ||
23 | #define __BFA_FCB_H__ | ||
24 | |||
25 | /** | ||
26 | * fcb Main fcs callbacks | ||
27 | */ | ||
28 | |||
29 | void bfa_fcb_exit(struct bfad_s *bfad); | ||
30 | |||
31 | |||
32 | |||
33 | #endif /* __BFA_FCB_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcb/bfa_fcb_fcpim.h b/drivers/scsi/bfa/include/fcb/bfa_fcb_fcpim.h new file mode 100644 index 000000000000..a6c70aee0aa3 --- /dev/null +++ b/drivers/scsi/bfa/include/fcb/bfa_fcb_fcpim.h | |||
@@ -0,0 +1,76 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * : bfad_fcpim.h - BFA FCS initiator mode remote port callbacks | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFAD_FCB_FCPIM_H__ | ||
23 | #define __BFAD_FCB_FCPIM_H__ | ||
24 | |||
25 | struct bfad_itnim_s; | ||
26 | |||
27 | /* | ||
28 | * RPIM callbacks | ||
29 | */ | ||
30 | |||
31 | /** | ||
32 | * Memory allocation for remote port instance. Called before PRLI is | ||
33 | * initiated to the remote target port. | ||
34 | * | ||
35 | * @param[in] bfad - driver instance | ||
36 | * @param[out] itnim - FCS remote port (IM) instance | ||
37 | * @param[out] itnim_drv - driver remote port (IM) instance | ||
38 | * | ||
39 | * @return None | ||
40 | */ | ||
41 | void bfa_fcb_itnim_alloc(struct bfad_s *bfad, struct bfa_fcs_itnim_s **itnim, | ||
42 | struct bfad_itnim_s **itnim_drv); | ||
43 | |||
44 | /** | ||
45 | * Free remote port (IM) instance. | ||
46 | * | ||
47 | * @param[in] bfad - driver instance | ||
48 | * @param[in] itnim_drv - driver remote port instance | ||
49 | * | ||
50 | * @return None | ||
51 | */ | ||
52 | void bfa_fcb_itnim_free(struct bfad_s *bfad, | ||
53 | struct bfad_itnim_s *itnim_drv); | ||
54 | |||
55 | /** | ||
56 | * Notification of when login with a remote target device is complete. | ||
57 | * | ||
58 | * @param[in] itnim_drv - driver remote port instance | ||
59 | * | ||
60 | * @return None | ||
61 | */ | ||
62 | void bfa_fcb_itnim_online(struct bfad_itnim_s *itnim_drv); | ||
63 | |||
64 | /** | ||
65 | * Notification when login with the remote device is severed. | ||
66 | * | ||
67 | * @param[in] itnim_drv - driver remote port instance | ||
68 | * | ||
69 | * @return None | ||
70 | */ | ||
71 | void bfa_fcb_itnim_offline(struct bfad_itnim_s *itnim_drv); | ||
72 | |||
73 | void bfa_fcb_itnim_tov_begin(struct bfad_itnim_s *itnim_drv); | ||
74 | void bfa_fcb_itnim_tov(struct bfad_itnim_s *itnim_drv); | ||
75 | |||
76 | #endif /* __BFAD_FCB_FCPIM_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcb/bfa_fcb_port.h b/drivers/scsi/bfa/include/fcb/bfa_fcb_port.h new file mode 100644 index 000000000000..5fd7f986fa32 --- /dev/null +++ b/drivers/scsi/bfa/include/fcb/bfa_fcb_port.h | |||
@@ -0,0 +1,113 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_fcb_port.h BFA FCS virtual port driver interfaces | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_FCB_PORT_H__ | ||
23 | #define __BFA_FCB_PORT_H__ | ||
24 | |||
25 | #include <fcb/bfa_fcb_vport.h> | ||
26 | /** | ||
27 | * fcs_port_fcb FCS port driver interfaces | ||
28 | */ | ||
29 | |||
30 | /* | ||
31 | * Forward declarations | ||
32 | */ | ||
33 | struct bfad_port_s; | ||
34 | |||
35 | /* | ||
36 | * Callback functions from BFA FCS to driver | ||
37 | */ | ||
38 | |||
39 | /** | ||
40 | * Call from FCS to driver module when a port is instantiated. The port | ||
41 | * can be a base port or a virtual port with in the base fabric or | ||
42 | * a virtual fabric. | ||
43 | * | ||
44 | * On this callback, driver is supposed to create scsi_host, scsi_tgt or | ||
45 | * network interfaces bases on ports personality/roles. | ||
46 | * | ||
47 | * base port of base fabric: vf_drv == NULL && vp_drv == NULL | ||
48 | * vport of base fabric: vf_drv == NULL && vp_drv != NULL | ||
49 | * base port of VF: vf_drv != NULL && vp_drv == NULL | ||
50 | * vport of VF: vf_drv != NULL && vp_drv != NULL | ||
51 | * | ||
52 | * @param[in] bfad - driver instance | ||
53 | * @param[in] port - FCS port instance | ||
54 | * @param[in] roles - port roles: IM, TM, IP | ||
55 | * @param[in] vf_drv - VF driver instance, NULL if base fabric (no VF) | ||
56 | * @param[in] vp_drv - vport driver instance, NULL if base port | ||
57 | * | ||
58 | * @return None | ||
59 | */ | ||
60 | struct bfad_port_s *bfa_fcb_port_new(struct bfad_s *bfad, | ||
61 | struct bfa_fcs_port_s *port, | ||
62 | enum bfa_port_role roles, struct bfad_vf_s *vf_drv, | ||
63 | struct bfad_vport_s *vp_drv); | ||
64 | |||
65 | /** | ||
66 | * Call from FCS to driver module when a port is deleted. The port | ||
67 | * can be a base port or a virtual port with in the base fabric or | ||
68 | * a virtual fabric. | ||
69 | * | ||
70 | * @param[in] bfad - driver instance | ||
71 | * @param[in] roles - port roles: IM, TM, IP | ||
72 | * @param[in] vf_drv - VF driver instance, NULL if base fabric (no VF) | ||
73 | * @param[in] vp_drv - vport driver instance, NULL if base port | ||
74 | * | ||
75 | * @return None | ||
76 | */ | ||
77 | void bfa_fcb_port_delete(struct bfad_s *bfad, enum bfa_port_role roles, | ||
78 | struct bfad_vf_s *vf_drv, struct bfad_vport_s *vp_drv); | ||
79 | |||
80 | /** | ||
81 | * Notification when port transitions to ONLINE state. | ||
82 | * | ||
83 | * Online notification is a logical link up for the local port. This | ||
84 | * notification is sent after a successfull FLOGI, or a successful | ||
85 | * link initialization in proviate-loop or N2N topologies. | ||
86 | * | ||
87 | * @param[in] bfad - driver instance | ||
88 | * @param[in] roles - port roles: IM, TM, IP | ||
89 | * @param[in] vf_drv - VF driver instance, NULL if base fabric (no VF) | ||
90 | * @param[in] vp_drv - vport driver instance, NULL if base port | ||
91 | * | ||
92 | * @return None | ||
93 | */ | ||
94 | void bfa_fcb_port_online(struct bfad_s *bfad, enum bfa_port_role roles, | ||
95 | struct bfad_vf_s *vf_drv, struct bfad_vport_s *vp_drv); | ||
96 | |||
97 | /** | ||
98 | * Notification when port transitions to OFFLINE state. | ||
99 | * | ||
100 | * Offline notification is a logical link down for the local port. | ||
101 | * | ||
102 | * @param[in] bfad - driver instance | ||
103 | * @param[in] roles - port roles: IM, TM, IP | ||
104 | * @param[in] vf_drv - VF driver instance, NULL if base fabric (no VF) | ||
105 | * @param[in] vp_drv - vport driver instance, NULL if base port | ||
106 | * | ||
107 | * @return None | ||
108 | */ | ||
109 | void bfa_fcb_port_offline(struct bfad_s *bfad, enum bfa_port_role roles, | ||
110 | struct bfad_vf_s *vf_drv, struct bfad_vport_s *vp_drv); | ||
111 | |||
112 | |||
113 | #endif /* __BFA_FCB_PORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcb/bfa_fcb_rport.h b/drivers/scsi/bfa/include/fcb/bfa_fcb_rport.h new file mode 100644 index 000000000000..e0261bb6d1c1 --- /dev/null +++ b/drivers/scsi/bfa/include/fcb/bfa_fcb_rport.h | |||
@@ -0,0 +1,80 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_fcb_rport.h BFA FCS rport driver interfaces | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_FCB_RPORT_H__ | ||
23 | #define __BFA_FCB_RPORT_H__ | ||
24 | |||
25 | /** | ||
26 | * fcs_rport_fcb Remote port driver interfaces | ||
27 | */ | ||
28 | |||
29 | |||
30 | struct bfad_rport_s; | ||
31 | |||
32 | /* | ||
33 | * Callback functions from BFA FCS to driver | ||
34 | */ | ||
35 | |||
36 | /** | ||
37 | * Completion callback for bfa_fcs_rport_add(). | ||
38 | * | ||
39 | * @param[in] rport_drv - driver instance of rport | ||
40 | * | ||
41 | * @return None | ||
42 | */ | ||
43 | void bfa_fcb_rport_add(struct bfad_rport_s *rport_drv); | ||
44 | |||
45 | /** | ||
46 | * Completion callback for bfa_fcs_rport_remove(). | ||
47 | * | ||
48 | * @param[in] rport_drv - driver instance of rport | ||
49 | * | ||
50 | * @return None | ||
51 | */ | ||
52 | void bfa_fcb_rport_remove(struct bfad_rport_s *rport_drv); | ||
53 | |||
54 | /** | ||
55 | * Call to allocate a rport instance. | ||
56 | * | ||
57 | * @param[in] bfad - driver instance | ||
58 | * @param[out] rport - BFA FCS instance of rport | ||
59 | * @param[out] rport_drv - driver instance of rport | ||
60 | * | ||
61 | * @retval BFA_STATUS_OK - successfully allocated | ||
62 | * @retval BFA_STATUS_ENOMEM - cannot allocate | ||
63 | */ | ||
64 | bfa_status_t bfa_fcb_rport_alloc(struct bfad_s *bfad, | ||
65 | struct bfa_fcs_rport_s **rport, | ||
66 | struct bfad_rport_s **rport_drv); | ||
67 | |||
68 | /** | ||
69 | * Call to free rport memory resources. | ||
70 | * | ||
71 | * @param[in] bfad - driver instance | ||
72 | * @param[in] rport_drv - driver instance of rport | ||
73 | * | ||
74 | * @return None | ||
75 | */ | ||
76 | void bfa_fcb_rport_free(struct bfad_s *bfad, struct bfad_rport_s **rport_drv); | ||
77 | |||
78 | |||
79 | |||
80 | #endif /* __BFA_FCB_RPORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcb/bfa_fcb_vf.h b/drivers/scsi/bfa/include/fcb/bfa_fcb_vf.h new file mode 100644 index 000000000000..cfd3fac0a4e2 --- /dev/null +++ b/drivers/scsi/bfa/include/fcb/bfa_fcb_vf.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_fcb_vf.h BFA FCS virtual fabric driver interfaces | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_FCB_VF_H__ | ||
23 | #define __BFA_FCB_VF_H__ | ||
24 | |||
25 | /** | ||
26 | * fcs_vf_fcb Virtual fabric driver intrefaces | ||
27 | */ | ||
28 | |||
29 | |||
30 | struct bfad_vf_s; | ||
31 | |||
32 | /* | ||
33 | * Callback functions from BFA FCS to driver | ||
34 | */ | ||
35 | |||
36 | /** | ||
37 | * Completion callback for bfa_fcs_vf_stop(). | ||
38 | * | ||
39 | * @param[in] vf_drv - driver instance of vf | ||
40 | * | ||
41 | * @return None | ||
42 | */ | ||
43 | void bfa_fcb_vf_stop(struct bfad_vf_s *vf_drv); | ||
44 | |||
45 | |||
46 | |||
47 | #endif /* __BFA_FCB_VF_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcb/bfa_fcb_vport.h b/drivers/scsi/bfa/include/fcb/bfa_fcb_vport.h new file mode 100644 index 000000000000..a39f474c2fcf --- /dev/null +++ b/drivers/scsi/bfa/include/fcb/bfa_fcb_vport.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_fcb_vport.h BFA FCS virtual port driver interfaces | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_FCB_VPORT_H__ | ||
23 | #define __BFA_FCB_VPORT_H__ | ||
24 | |||
25 | /** | ||
26 | * fcs_vport_fcb Virtual port driver interfaces | ||
27 | */ | ||
28 | |||
29 | |||
30 | struct bfad_vport_s; | ||
31 | |||
32 | /* | ||
33 | * Callback functions from BFA FCS to driver | ||
34 | */ | ||
35 | |||
36 | /** | ||
37 | * Completion callback for bfa_fcs_vport_delete(). | ||
38 | * | ||
39 | * @param[in] vport_drv - driver instance of vport | ||
40 | * | ||
41 | * @return None | ||
42 | */ | ||
43 | void bfa_fcb_vport_delete(struct bfad_vport_s *vport_drv); | ||
44 | |||
45 | |||
46 | |||
47 | #endif /* __BFA_FCB_VPORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcs/bfa_fcs.h b/drivers/scsi/bfa/include/fcs/bfa_fcs.h new file mode 100644 index 000000000000..627669c65546 --- /dev/null +++ b/drivers/scsi/bfa/include/fcs/bfa_fcs.h | |||
@@ -0,0 +1,73 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_FCS_H__ | ||
19 | #define __BFA_FCS_H__ | ||
20 | |||
21 | #include <cs/bfa_debug.h> | ||
22 | #include <defs/bfa_defs_status.h> | ||
23 | #include <defs/bfa_defs_version.h> | ||
24 | #include <bfa.h> | ||
25 | #include <fcs/bfa_fcs_fabric.h> | ||
26 | |||
27 | #define BFA_FCS_OS_STR_LEN 64 | ||
28 | |||
29 | struct bfa_fcs_stats_s { | ||
30 | struct { | ||
31 | u32 untagged; /* untagged receive frames */ | ||
32 | u32 tagged; /* tagged receive frames */ | ||
33 | u32 vfid_unknown; /* VF id is unknown */ | ||
34 | } uf; | ||
35 | }; | ||
36 | |||
37 | struct bfa_fcs_driver_info_s { | ||
38 | u8 version[BFA_VERSION_LEN]; /* Driver Version */ | ||
39 | u8 host_machine_name[BFA_FCS_OS_STR_LEN]; | ||
40 | u8 host_os_name[BFA_FCS_OS_STR_LEN]; /* OS name and version */ | ||
41 | u8 host_os_patch[BFA_FCS_OS_STR_LEN];/* patch or service pack */ | ||
42 | u8 os_device_name[BFA_FCS_OS_STR_LEN]; /* Driver Device Name */ | ||
43 | }; | ||
44 | |||
45 | struct bfa_fcs_s { | ||
46 | struct bfa_s *bfa; /* corresponding BFA bfa instance */ | ||
47 | struct bfad_s *bfad; /* corresponding BDA driver instance */ | ||
48 | struct bfa_log_mod_s *logm; /* driver logging module instance */ | ||
49 | struct bfa_trc_mod_s *trcmod; /* tracing module */ | ||
50 | struct bfa_aen_s *aen; /* aen component */ | ||
51 | bfa_boolean_t vf_enabled; /* VF mode is enabled */ | ||
52 | bfa_boolean_t min_cfg; /* min cfg enabled/disabled */ | ||
53 | u16 port_vfid; /* port default VF ID */ | ||
54 | struct bfa_fcs_driver_info_s driver_info; | ||
55 | struct bfa_fcs_fabric_s fabric; /* base fabric state machine */ | ||
56 | struct bfa_fcs_stats_s stats; /* FCS statistics */ | ||
57 | struct bfa_wc_s wc; /* waiting counter */ | ||
58 | }; | ||
59 | |||
60 | /* | ||
61 | * bfa fcs API functions | ||
62 | */ | ||
63 | void bfa_fcs_init(struct bfa_fcs_s *fcs, struct bfa_s *bfa, struct bfad_s *bfad, | ||
64 | bfa_boolean_t min_cfg); | ||
65 | void bfa_fcs_driver_info_init(struct bfa_fcs_s *fcs, | ||
66 | struct bfa_fcs_driver_info_s *driver_info); | ||
67 | void bfa_fcs_exit(struct bfa_fcs_s *fcs); | ||
68 | void bfa_fcs_trc_init(struct bfa_fcs_s *fcs, struct bfa_trc_mod_s *trcmod); | ||
69 | void bfa_fcs_log_init(struct bfa_fcs_s *fcs, struct bfa_log_mod_s *logmod); | ||
70 | void bfa_fcs_aen_init(struct bfa_fcs_s *fcs, struct bfa_aen_s *aen); | ||
71 | void bfa_fcs_start(struct bfa_fcs_s *fcs); | ||
72 | |||
73 | #endif /* __BFA_FCS_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcs/bfa_fcs_auth.h b/drivers/scsi/bfa/include/fcs/bfa_fcs_auth.h new file mode 100644 index 000000000000..28c4c9ff08b3 --- /dev/null +++ b/drivers/scsi/bfa/include/fcs/bfa_fcs_auth.h | |||
@@ -0,0 +1,82 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_FCS_AUTH_H__ | ||
19 | #define __BFA_FCS_AUTH_H__ | ||
20 | |||
21 | struct bfa_fcs_s; | ||
22 | |||
23 | #include <defs/bfa_defs_status.h> | ||
24 | #include <defs/bfa_defs_auth.h> | ||
25 | #include <defs/bfa_defs_vf.h> | ||
26 | #include <cs/bfa_q.h> | ||
27 | #include <cs/bfa_sm.h> | ||
28 | #include <defs/bfa_defs_pport.h> | ||
29 | #include <fcs/bfa_fcs_lport.h> | ||
30 | #include <protocol/fc_sp.h> | ||
31 | |||
32 | struct bfa_fcs_fabric_s; | ||
33 | |||
34 | |||
35 | |||
36 | struct bfa_fcs_auth_s { | ||
37 | bfa_sm_t sm; /* state machine */ | ||
38 | bfa_boolean_t policy; /* authentication enabled/disabled */ | ||
39 | enum bfa_auth_status status; /* authentication status */ | ||
40 | enum auth_rjt_codes rjt_code; /* auth reject status */ | ||
41 | enum auth_rjt_code_exps rjt_code_exp; /* auth reject reason */ | ||
42 | enum bfa_auth_algo algo; /* Authentication algorithm */ | ||
43 | struct bfa_auth_stats_s stats; /* Statistics */ | ||
44 | enum auth_dh_gid group; /* DH(diffie-hellman) Group */ | ||
45 | enum bfa_auth_secretsource source; /* Secret source */ | ||
46 | char secret[BFA_AUTH_SECRET_STRING_LEN]; | ||
47 | /* secret string */ | ||
48 | u8 secret_len; | ||
49 | /* secret string length */ | ||
50 | u8 nretries; | ||
51 | /* number of retries */ | ||
52 | struct bfa_fcs_fabric_s *fabric;/* pointer to fabric */ | ||
53 | u8 sentcode; /* pointer to response data */ | ||
54 | u8 *response; /* pointer to response data */ | ||
55 | struct bfa_timer_s delay_timer; /* delay timer */ | ||
56 | struct bfa_fcxp_s *fcxp; /* pointer to fcxp */ | ||
57 | struct bfa_fcxp_wqe_s fcxp_wqe; | ||
58 | }; | ||
59 | |||
60 | /** | ||
61 | * bfa fcs authentication public functions | ||
62 | */ | ||
63 | bfa_status_t bfa_fcs_auth_get_attr(struct bfa_fcs_s *port, | ||
64 | struct bfa_auth_attr_s *attr); | ||
65 | bfa_status_t bfa_fcs_auth_set_policy(struct bfa_fcs_s *port, | ||
66 | bfa_boolean_t policy); | ||
67 | enum bfa_auth_status bfa_fcs_auth_get_status(struct bfa_fcs_s *port); | ||
68 | bfa_status_t bfa_fcs_auth_set_algo(struct bfa_fcs_s *port, | ||
69 | enum bfa_auth_algo algo); | ||
70 | bfa_status_t bfa_fcs_auth_get_stats(struct bfa_fcs_s *port, | ||
71 | struct bfa_auth_stats_s *stats); | ||
72 | bfa_status_t bfa_fcs_auth_set_dh_group(struct bfa_fcs_s *port, int group); | ||
73 | bfa_status_t bfa_fcs_auth_set_secretstring(struct bfa_fcs_s *port, | ||
74 | char *secret); | ||
75 | bfa_status_t bfa_fcs_auth_set_secretstring_encrypt(struct bfa_fcs_s *port, | ||
76 | u32 secret[], u32 len); | ||
77 | bfa_status_t bfa_fcs_auth_set_secretsource(struct bfa_fcs_s *port, | ||
78 | enum bfa_auth_secretsource src); | ||
79 | bfa_status_t bfa_fcs_auth_reset_stats(struct bfa_fcs_s *port); | ||
80 | bfa_status_t bfa_fcs_auth_reinit(struct bfa_fcs_s *port); | ||
81 | |||
82 | #endif /* __BFA_FCS_AUTH_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcs/bfa_fcs_fabric.h b/drivers/scsi/bfa/include/fcs/bfa_fcs_fabric.h new file mode 100644 index 000000000000..4ffd2242d3de --- /dev/null +++ b/drivers/scsi/bfa/include/fcs/bfa_fcs_fabric.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_FCS_FABRIC_H__ | ||
19 | #define __BFA_FCS_FABRIC_H__ | ||
20 | |||
21 | struct bfa_fcs_s; | ||
22 | |||
23 | #include <defs/bfa_defs_status.h> | ||
24 | #include <defs/bfa_defs_vf.h> | ||
25 | #include <cs/bfa_q.h> | ||
26 | #include <cs/bfa_sm.h> | ||
27 | #include <defs/bfa_defs_pport.h> | ||
28 | #include <fcs/bfa_fcs_lport.h> | ||
29 | #include <protocol/fc_sp.h> | ||
30 | #include <fcs/bfa_fcs_auth.h> | ||
31 | |||
32 | /* | ||
33 | * forward declaration | ||
34 | */ | ||
35 | struct bfad_vf_s; | ||
36 | |||
37 | enum bfa_fcs_fabric_type { | ||
38 | BFA_FCS_FABRIC_UNKNOWN = 0, | ||
39 | BFA_FCS_FABRIC_SWITCHED = 1, | ||
40 | BFA_FCS_FABRIC_PLOOP = 2, | ||
41 | BFA_FCS_FABRIC_N2N = 3, | ||
42 | }; | ||
43 | |||
44 | |||
45 | struct bfa_fcs_fabric_s { | ||
46 | struct list_head qe; /* queue element */ | ||
47 | bfa_sm_t sm; /* state machine */ | ||
48 | struct bfa_fcs_s *fcs; /* FCS instance */ | ||
49 | struct bfa_fcs_port_s bport; /* base logical port */ | ||
50 | enum bfa_fcs_fabric_type fab_type; /* fabric type */ | ||
51 | enum bfa_pport_type oper_type; /* current link topology */ | ||
52 | u8 is_vf; /* is virtual fabric? */ | ||
53 | u8 is_npiv; /* is NPIV supported ? */ | ||
54 | u8 is_auth; /* is Security/Auth supported ? */ | ||
55 | u16 bb_credit; /* BB credit from fabric */ | ||
56 | u16 vf_id; /* virtual fabric ID */ | ||
57 | u16 num_vports; /* num vports */ | ||
58 | u16 rsvd; | ||
59 | struct list_head vport_q; /* queue of virtual ports */ | ||
60 | struct list_head vf_q; /* queue of virtual fabrics */ | ||
61 | struct bfad_vf_s *vf_drv; /* driver vf structure */ | ||
62 | struct bfa_timer_s link_timer; /* Link Failure timer. Vport */ | ||
63 | wwn_t fabric_name; /* attached fabric name */ | ||
64 | bfa_boolean_t auth_reqd; /* authentication required */ | ||
65 | struct bfa_timer_s delay_timer; /* delay timer */ | ||
66 | union { | ||
67 | u16 swp_vfid;/* switch port VF id */ | ||
68 | } event_arg; | ||
69 | struct bfa_fcs_auth_s auth; /* authentication config */ | ||
70 | struct bfa_wc_s wc; /* wait counter for delete */ | ||
71 | struct bfa_vf_stats_s stats; /* fabric/vf stats */ | ||
72 | struct bfa_lps_s *lps; /* lport login services */ | ||
73 | u8 fabric_ip_addr[BFA_FCS_FABRIC_IPADDR_SZ]; /* attached | ||
74 | * fabric's ip addr | ||
75 | */ | ||
76 | }; | ||
77 | |||
78 | #define bfa_fcs_fabric_npiv_capable(__f) (__f)->is_npiv | ||
79 | #define bfa_fcs_fabric_is_switched(__f) \ | ||
80 | ((__f)->fab_type == BFA_FCS_FABRIC_SWITCHED) | ||
81 | |||
82 | /** | ||
83 | * The design calls for a single implementation of base fabric and vf. | ||
84 | */ | ||
85 | #define bfa_fcs_vf_t struct bfa_fcs_fabric_s | ||
86 | |||
87 | struct bfa_vf_event_s { | ||
88 | u32 undefined; | ||
89 | }; | ||
90 | |||
91 | /** | ||
92 | * bfa fcs vf public functions | ||
93 | */ | ||
94 | bfa_status_t bfa_fcs_vf_mode_enable(struct bfa_fcs_s *fcs, u16 vf_id); | ||
95 | bfa_status_t bfa_fcs_vf_mode_disable(struct bfa_fcs_s *fcs); | ||
96 | bfa_status_t bfa_fcs_vf_create(bfa_fcs_vf_t *vf, struct bfa_fcs_s *fcs, | ||
97 | u16 vf_id, struct bfa_port_cfg_s *port_cfg, | ||
98 | struct bfad_vf_s *vf_drv); | ||
99 | bfa_status_t bfa_fcs_vf_delete(bfa_fcs_vf_t *vf); | ||
100 | void bfa_fcs_vf_start(bfa_fcs_vf_t *vf); | ||
101 | bfa_status_t bfa_fcs_vf_stop(bfa_fcs_vf_t *vf); | ||
102 | void bfa_fcs_vf_list(struct bfa_fcs_s *fcs, u16 *vf_ids, int *nvfs); | ||
103 | void bfa_fcs_vf_list_all(struct bfa_fcs_s *fcs, u16 *vf_ids, int *nvfs); | ||
104 | void bfa_fcs_vf_get_attr(bfa_fcs_vf_t *vf, struct bfa_vf_attr_s *vf_attr); | ||
105 | void bfa_fcs_vf_get_stats(bfa_fcs_vf_t *vf, | ||
106 | struct bfa_vf_stats_s *vf_stats); | ||
107 | void bfa_fcs_vf_clear_stats(bfa_fcs_vf_t *vf); | ||
108 | void bfa_fcs_vf_get_ports(bfa_fcs_vf_t *vf, wwn_t vpwwn[], int *nports); | ||
109 | bfa_fcs_vf_t *bfa_fcs_vf_lookup(struct bfa_fcs_s *fcs, u16 vf_id); | ||
110 | struct bfad_vf_s *bfa_fcs_vf_get_drv_vf(bfa_fcs_vf_t *vf); | ||
111 | |||
112 | #endif /* __BFA_FCS_FABRIC_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcs/bfa_fcs_fcpim.h b/drivers/scsi/bfa/include/fcs/bfa_fcs_fcpim.h new file mode 100644 index 000000000000..e719f2c3eb35 --- /dev/null +++ b/drivers/scsi/bfa/include/fcs/bfa_fcs_fcpim.h | |||
@@ -0,0 +1,131 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_fcs_fcpim.h BFA FCS FCP Initiator Mode interfaces/defines. | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_FCS_FCPIM_H__ | ||
23 | #define __BFA_FCS_FCPIM_H__ | ||
24 | |||
25 | #include <defs/bfa_defs_status.h> | ||
26 | #include <defs/bfa_defs_itnim.h> | ||
27 | #include <fcs/bfa_fcs.h> | ||
28 | #include <fcs/bfa_fcs_rport.h> | ||
29 | #include <fcs/bfa_fcs_lport.h> | ||
30 | #include <bfa_fcpim.h> | ||
31 | |||
32 | /* | ||
33 | * forward declarations | ||
34 | */ | ||
35 | struct bfad_itnim_s; | ||
36 | |||
37 | struct bfa_fcs_itnim_s { | ||
38 | bfa_sm_t sm; /* state machine */ | ||
39 | struct bfa_fcs_rport_s *rport; /* parent remote rport */ | ||
40 | struct bfad_itnim_s *itnim_drv; /* driver peer instance */ | ||
41 | struct bfa_fcs_s *fcs; /* fcs instance */ | ||
42 | struct bfa_timer_s timer; /* timer functions */ | ||
43 | struct bfa_itnim_s *bfa_itnim; /* BFA itnim struct */ | ||
44 | bfa_boolean_t seq_rec; /* seq recovery support */ | ||
45 | bfa_boolean_t rec_support; /* REC supported */ | ||
46 | bfa_boolean_t conf_comp; /* FCP_CONF support */ | ||
47 | bfa_boolean_t task_retry_id; /* task retry id supp */ | ||
48 | struct bfa_fcxp_wqe_s fcxp_wqe; /* wait qelem for fcxp */ | ||
49 | struct bfa_fcxp_s *fcxp; /* FCXP in use */ | ||
50 | struct bfa_itnim_stats_s stats; /* itn statistics */ | ||
51 | }; | ||
52 | |||
53 | |||
54 | static inline struct bfad_port_s * | ||
55 | bfa_fcs_itnim_get_drvport(struct bfa_fcs_itnim_s *itnim) | ||
56 | { | ||
57 | return itnim->rport->port->bfad_port; | ||
58 | } | ||
59 | |||
60 | |||
61 | static inline struct bfa_fcs_port_s * | ||
62 | bfa_fcs_itnim_get_port(struct bfa_fcs_itnim_s *itnim) | ||
63 | { | ||
64 | return itnim->rport->port; | ||
65 | } | ||
66 | |||
67 | |||
68 | static inline wwn_t | ||
69 | bfa_fcs_itnim_get_nwwn(struct bfa_fcs_itnim_s *itnim) | ||
70 | { | ||
71 | return itnim->rport->nwwn; | ||
72 | } | ||
73 | |||
74 | |||
75 | static inline wwn_t | ||
76 | bfa_fcs_itnim_get_pwwn(struct bfa_fcs_itnim_s *itnim) | ||
77 | { | ||
78 | return itnim->rport->pwwn; | ||
79 | } | ||
80 | |||
81 | |||
82 | static inline u32 | ||
83 | bfa_fcs_itnim_get_fcid(struct bfa_fcs_itnim_s *itnim) | ||
84 | { | ||
85 | return itnim->rport->pid; | ||
86 | } | ||
87 | |||
88 | |||
89 | static inline u32 | ||
90 | bfa_fcs_itnim_get_maxfrsize(struct bfa_fcs_itnim_s *itnim) | ||
91 | { | ||
92 | return itnim->rport->maxfrsize; | ||
93 | } | ||
94 | |||
95 | |||
96 | static inline enum fc_cos | ||
97 | bfa_fcs_itnim_get_cos(struct bfa_fcs_itnim_s *itnim) | ||
98 | { | ||
99 | return itnim->rport->fc_cos; | ||
100 | } | ||
101 | |||
102 | |||
103 | static inline struct bfad_itnim_s * | ||
104 | bfa_fcs_itnim_get_drvitn(struct bfa_fcs_itnim_s *itnim) | ||
105 | { | ||
106 | return itnim->itnim_drv; | ||
107 | } | ||
108 | |||
109 | |||
110 | static inline struct bfa_itnim_s * | ||
111 | bfa_fcs_itnim_get_halitn(struct bfa_fcs_itnim_s *itnim) | ||
112 | { | ||
113 | return itnim->bfa_itnim; | ||
114 | } | ||
115 | |||
116 | /** | ||
117 | * bfa fcs FCP Initiator mode API functions | ||
118 | */ | ||
119 | void bfa_fcs_itnim_get_attr(struct bfa_fcs_itnim_s *itnim, | ||
120 | struct bfa_itnim_attr_s *attr); | ||
121 | void bfa_fcs_itnim_get_stats(struct bfa_fcs_itnim_s *itnim, | ||
122 | struct bfa_itnim_stats_s *stats); | ||
123 | struct bfa_fcs_itnim_s *bfa_fcs_itnim_lookup(struct bfa_fcs_port_s *port, | ||
124 | wwn_t rpwwn); | ||
125 | bfa_status_t bfa_fcs_itnim_attr_get(struct bfa_fcs_port_s *port, wwn_t rpwwn, | ||
126 | struct bfa_itnim_attr_s *attr); | ||
127 | bfa_status_t bfa_fcs_itnim_stats_get(struct bfa_fcs_port_s *port, wwn_t rpwwn, | ||
128 | struct bfa_itnim_stats_s *stats); | ||
129 | bfa_status_t bfa_fcs_itnim_stats_clear(struct bfa_fcs_port_s *port, | ||
130 | wwn_t rpwwn); | ||
131 | #endif /* __BFA_FCS_FCPIM_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcs/bfa_fcs_fdmi.h b/drivers/scsi/bfa/include/fcs/bfa_fcs_fdmi.h new file mode 100644 index 000000000000..4441fffc9c82 --- /dev/null +++ b/drivers/scsi/bfa/include/fcs/bfa_fcs_fdmi.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_fcs_fdmi.h BFA fcs fdmi module public interface | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_FCS_FDMI_H__ | ||
23 | #define __BFA_FCS_FDMI_H__ | ||
24 | #include <bfa_os_inc.h> | ||
25 | #include <protocol/fdmi.h> | ||
26 | |||
27 | #define BFA_FCS_FDMI_SUPORTED_SPEEDS (FDMI_TRANS_SPEED_1G | \ | ||
28 | FDMI_TRANS_SPEED_2G | \ | ||
29 | FDMI_TRANS_SPEED_4G | \ | ||
30 | FDMI_TRANS_SPEED_8G) | ||
31 | |||
32 | /* | ||
33 | * HBA Attribute Block : BFA internal representation. Note : Some variable | ||
34 | * sizes have been trimmed to suit BFA For Ex : Model will be "Brocade". Based | ||
35 | * on this the size has been reduced to 16 bytes from the standard's 64 bytes. | ||
36 | */ | ||
37 | struct bfa_fcs_fdmi_hba_attr_s { | ||
38 | wwn_t node_name; | ||
39 | u8 manufacturer[64]; | ||
40 | u8 serial_num[64]; | ||
41 | u8 model[16]; | ||
42 | u8 model_desc[256]; | ||
43 | u8 hw_version[8]; | ||
44 | u8 driver_version[8]; | ||
45 | u8 option_rom_ver[BFA_VERSION_LEN]; | ||
46 | u8 fw_version[8]; | ||
47 | u8 os_name[256]; | ||
48 | u32 max_ct_pyld; | ||
49 | }; | ||
50 | |||
51 | /* | ||
52 | * Port Attribute Block | ||
53 | */ | ||
54 | struct bfa_fcs_fdmi_port_attr_s { | ||
55 | u8 supp_fc4_types[32]; /* supported FC4 types */ | ||
56 | u32 supp_speed; /* supported speed */ | ||
57 | u32 curr_speed; /* current Speed */ | ||
58 | u32 max_frm_size; /* max frame size */ | ||
59 | u8 os_device_name[256]; /* OS device Name */ | ||
60 | u8 host_name[256]; /* host name */ | ||
61 | }; | ||
62 | |||
63 | #endif /* __BFA_FCS_FDMI_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcs/bfa_fcs_lport.h b/drivers/scsi/bfa/include/fcs/bfa_fcs_lport.h new file mode 100644 index 000000000000..b85cba884b96 --- /dev/null +++ b/drivers/scsi/bfa/include/fcs/bfa_fcs_lport.h | |||
@@ -0,0 +1,226 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_fcs_port.h BFA fcs port module public interface | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_FCS_PORT_H__ | ||
23 | #define __BFA_FCS_PORT_H__ | ||
24 | |||
25 | #include <defs/bfa_defs_status.h> | ||
26 | #include <defs/bfa_defs_port.h> | ||
27 | #include <defs/bfa_defs_pport.h> | ||
28 | #include <defs/bfa_defs_rport.h> | ||
29 | #include <cs/bfa_q.h> | ||
30 | #include <bfa_svc.h> | ||
31 | #include <cs/bfa_wc.h> | ||
32 | |||
33 | struct bfa_fcs_s; | ||
34 | struct bfa_fcs_fabric_s; | ||
35 | |||
36 | /* | ||
37 | * @todo : need to move to a global config file. | ||
38 | * Maximum Vports supported per physical port or vf. | ||
39 | */ | ||
40 | #define BFA_FCS_MAX_VPORTS_SUPP_CB 255 | ||
41 | #define BFA_FCS_MAX_VPORTS_SUPP_CT 191 | ||
42 | |||
43 | /* | ||
44 | * @todo : need to move to a global config file. | ||
45 | * Maximum Rports supported per port (physical/logical). | ||
46 | */ | ||
47 | #define BFA_FCS_MAX_RPORTS_SUPP 256 /* @todo : tentative value */ | ||
48 | |||
49 | |||
50 | struct bfa_fcs_port_ns_s { | ||
51 | bfa_sm_t sm; /* state machine */ | ||
52 | struct bfa_timer_s timer; | ||
53 | struct bfa_fcs_port_s *port; /* parent port */ | ||
54 | struct bfa_fcxp_s *fcxp; | ||
55 | struct bfa_fcxp_wqe_s fcxp_wqe; | ||
56 | }; | ||
57 | |||
58 | |||
59 | struct bfa_fcs_port_scn_s { | ||
60 | bfa_sm_t sm; /* state machine */ | ||
61 | struct bfa_timer_s timer; | ||
62 | struct bfa_fcs_port_s *port; /* parent port */ | ||
63 | struct bfa_fcxp_s *fcxp; | ||
64 | struct bfa_fcxp_wqe_s fcxp_wqe; | ||
65 | }; | ||
66 | |||
67 | |||
68 | struct bfa_fcs_port_fdmi_s { | ||
69 | bfa_sm_t sm; /* state machine */ | ||
70 | struct bfa_timer_s timer; | ||
71 | struct bfa_fcs_port_ms_s *ms; /* parent ms */ | ||
72 | struct bfa_fcxp_s *fcxp; | ||
73 | struct bfa_fcxp_wqe_s fcxp_wqe; | ||
74 | u8 retry_cnt; /* retry count */ | ||
75 | u8 rsvd[3]; | ||
76 | }; | ||
77 | |||
78 | |||
79 | struct bfa_fcs_port_ms_s { | ||
80 | bfa_sm_t sm; /* state machine */ | ||
81 | struct bfa_timer_s timer; | ||
82 | struct bfa_fcs_port_s *port; /* parent port */ | ||
83 | struct bfa_fcxp_s *fcxp; | ||
84 | struct bfa_fcxp_wqe_s fcxp_wqe; | ||
85 | struct bfa_fcs_port_fdmi_s fdmi; /* FDMI component of MS */ | ||
86 | u8 retry_cnt; /* retry count */ | ||
87 | u8 rsvd[3]; | ||
88 | }; | ||
89 | |||
90 | |||
91 | struct bfa_fcs_port_fab_s { | ||
92 | struct bfa_fcs_port_ns_s ns; /* NS component of port */ | ||
93 | struct bfa_fcs_port_scn_s scn; /* scn component of port */ | ||
94 | struct bfa_fcs_port_ms_s ms; /* MS component of port */ | ||
95 | }; | ||
96 | |||
97 | |||
98 | |||
99 | #define MAX_ALPA_COUNT 127 | ||
100 | |||
101 | struct bfa_fcs_port_loop_s { | ||
102 | u8 num_alpa; /* Num of ALPA entries in the map */ | ||
103 | u8 alpa_pos_map[MAX_ALPA_COUNT]; /* ALPA Positional | ||
104 | *Map */ | ||
105 | struct bfa_fcs_port_s *port; /* parent port */ | ||
106 | }; | ||
107 | |||
108 | |||
109 | |||
110 | struct bfa_fcs_port_n2n_s { | ||
111 | u32 rsvd; | ||
112 | u16 reply_oxid; /* ox_id from the req flogi to be | ||
113 | *used in flogi acc */ | ||
114 | wwn_t rem_port_wwn; /* Attached port's wwn */ | ||
115 | }; | ||
116 | |||
117 | |||
118 | union bfa_fcs_port_topo_u { | ||
119 | struct bfa_fcs_port_fab_s pfab; | ||
120 | struct bfa_fcs_port_loop_s ploop; | ||
121 | struct bfa_fcs_port_n2n_s pn2n; | ||
122 | }; | ||
123 | |||
124 | |||
125 | struct bfa_fcs_port_s { | ||
126 | struct list_head qe; /* used by port/vport */ | ||
127 | bfa_sm_t sm; /* state machine */ | ||
128 | struct bfa_fcs_fabric_s *fabric; /* parent fabric */ | ||
129 | struct bfa_port_cfg_s port_cfg; /* port configuration */ | ||
130 | struct bfa_timer_s link_timer; /* timer for link offline */ | ||
131 | u32 pid : 24; /* FC address */ | ||
132 | u8 lp_tag; /* lport tag */ | ||
133 | u16 num_rports; /* Num of r-ports */ | ||
134 | struct list_head rport_q; /* queue of discovered r-ports */ | ||
135 | struct bfa_fcs_s *fcs; /* FCS instance */ | ||
136 | union bfa_fcs_port_topo_u port_topo; /* fabric/loop/n2n details */ | ||
137 | struct bfad_port_s *bfad_port; /* driver peer instance */ | ||
138 | struct bfa_fcs_vport_s *vport; /* NULL for base ports */ | ||
139 | struct bfa_fcxp_s *fcxp; | ||
140 | struct bfa_fcxp_wqe_s fcxp_wqe; | ||
141 | struct bfa_port_stats_s stats; | ||
142 | struct bfa_wc_s wc; /* waiting counter for events */ | ||
143 | }; | ||
144 | |||
145 | #define bfa_fcs_lport_t struct bfa_fcs_port_s | ||
146 | |||
147 | /** | ||
148 | * Symbolic Name related defines | ||
149 | * Total bytes 255. | ||
150 | * Physical Port's symbolic name 128 bytes. | ||
151 | * For Vports, Vport's symbolic name is appended to the Physical port's | ||
152 | * Symbolic Name. | ||
153 | * | ||
154 | * Physical Port's symbolic name Format : (Total 128 bytes) | ||
155 | * Adapter Model number/name : 12 bytes | ||
156 | * Driver Version : 10 bytes | ||
157 | * Host Machine Name : 30 bytes | ||
158 | * Host OS Info : 48 bytes | ||
159 | * Host OS PATCH Info : 16 bytes | ||
160 | * ( remaining 12 bytes reserved to be used for separator) | ||
161 | */ | ||
162 | #define BFA_FCS_PORT_SYMBNAME_SEPARATOR " | " | ||
163 | |||
164 | #define BFA_FCS_PORT_SYMBNAME_MODEL_SZ 12 | ||
165 | #define BFA_FCS_PORT_SYMBNAME_VERSION_SZ 10 | ||
166 | #define BFA_FCS_PORT_SYMBNAME_MACHINENAME_SZ 30 | ||
167 | #define BFA_FCS_PORT_SYMBNAME_OSINFO_SZ 48 | ||
168 | #define BFA_FCS_PORT_SYMBNAME_OSPATCH_SZ 16 | ||
169 | |||
170 | /** | ||
171 | * Get FC port ID for a logical port. | ||
172 | */ | ||
173 | #define bfa_fcs_port_get_fcid(_lport) ((_lport)->pid) | ||
174 | #define bfa_fcs_port_get_pwwn(_lport) ((_lport)->port_cfg.pwwn) | ||
175 | #define bfa_fcs_port_get_nwwn(_lport) ((_lport)->port_cfg.nwwn) | ||
176 | #define bfa_fcs_port_get_psym_name(_lport) ((_lport)->port_cfg.sym_name) | ||
177 | #define bfa_fcs_port_is_initiator(_lport) \ | ||
178 | ((_lport)->port_cfg.roles & BFA_PORT_ROLE_FCP_IM) | ||
179 | #define bfa_fcs_port_is_target(_lport) \ | ||
180 | ((_lport)->port_cfg.roles & BFA_PORT_ROLE_FCP_TM) | ||
181 | #define bfa_fcs_port_get_nrports(_lport) \ | ||
182 | ((_lport) ? (_lport)->num_rports : 0) | ||
183 | |||
184 | static inline struct bfad_port_s * | ||
185 | bfa_fcs_port_get_drvport(struct bfa_fcs_port_s *port) | ||
186 | { | ||
187 | return port->bfad_port; | ||
188 | } | ||
189 | |||
190 | |||
191 | #define bfa_fcs_port_get_opertype(_lport) (_lport)->fabric->oper_type | ||
192 | |||
193 | |||
194 | #define bfa_fcs_port_get_fabric_name(_lport) (_lport)->fabric->fabric_name | ||
195 | |||
196 | |||
197 | #define bfa_fcs_port_get_fabric_ipaddr(_lport) (_lport)->fabric->fabric_ip_addr | ||
198 | |||
199 | /** | ||
200 | * bfa fcs port public functions | ||
201 | */ | ||
202 | void bfa_fcs_cfg_base_port(struct bfa_fcs_s *fcs, | ||
203 | struct bfa_port_cfg_s *port_cfg); | ||
204 | struct bfa_fcs_port_s *bfa_fcs_get_base_port(struct bfa_fcs_s *fcs); | ||
205 | void bfa_fcs_port_get_rports(struct bfa_fcs_port_s *port, | ||
206 | wwn_t rport_wwns[], int *nrports); | ||
207 | |||
208 | wwn_t bfa_fcs_port_get_rport(struct bfa_fcs_port_s *port, wwn_t wwn, | ||
209 | int index, int nrports, bfa_boolean_t bwwn); | ||
210 | |||
211 | struct bfa_fcs_port_s *bfa_fcs_lookup_port(struct bfa_fcs_s *fcs, | ||
212 | u16 vf_id, wwn_t lpwwn); | ||
213 | |||
214 | void bfa_fcs_port_get_info(struct bfa_fcs_port_s *port, | ||
215 | struct bfa_port_info_s *port_info); | ||
216 | void bfa_fcs_port_get_attr(struct bfa_fcs_port_s *port, | ||
217 | struct bfa_port_attr_s *port_attr); | ||
218 | void bfa_fcs_port_get_stats(struct bfa_fcs_port_s *fcs_port, | ||
219 | struct bfa_port_stats_s *port_stats); | ||
220 | void bfa_fcs_port_clear_stats(struct bfa_fcs_port_s *fcs_port); | ||
221 | enum bfa_pport_speed bfa_fcs_port_get_rport_max_speed( | ||
222 | struct bfa_fcs_port_s *port); | ||
223 | void bfa_fcs_port_enable_ipfc_roles(struct bfa_fcs_port_s *fcs_port); | ||
224 | void bfa_fcs_port_disable_ipfc_roles(struct bfa_fcs_port_s *fcs_port); | ||
225 | |||
226 | #endif /* __BFA_FCS_PORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcs/bfa_fcs_rport.h b/drivers/scsi/bfa/include/fcs/bfa_fcs_rport.h new file mode 100644 index 000000000000..702b95b76c2d --- /dev/null +++ b/drivers/scsi/bfa/include/fcs/bfa_fcs_rport.h | |||
@@ -0,0 +1,104 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __BFA_FCS_RPORT_H__ | ||
19 | #define __BFA_FCS_RPORT_H__ | ||
20 | |||
21 | #include <defs/bfa_defs_status.h> | ||
22 | #include <cs/bfa_q.h> | ||
23 | #include <fcs/bfa_fcs.h> | ||
24 | #include <defs/bfa_defs_rport.h> | ||
25 | |||
26 | #define BFA_FCS_RPORT_DEF_DEL_TIMEOUT 90 /* in secs */ | ||
27 | /* | ||
28 | * forward declarations | ||
29 | */ | ||
30 | struct bfad_rport_s; | ||
31 | |||
32 | struct bfa_fcs_itnim_s; | ||
33 | struct bfa_fcs_tin_s; | ||
34 | struct bfa_fcs_iprp_s; | ||
35 | |||
36 | /* Rport Features (RPF) */ | ||
37 | struct bfa_fcs_rpf_s { | ||
38 | bfa_sm_t sm; /* state machine */ | ||
39 | struct bfa_fcs_rport_s *rport; /* parent rport */ | ||
40 | struct bfa_timer_s timer; /* general purpose timer */ | ||
41 | struct bfa_fcxp_s *fcxp; /* FCXP needed for discarding */ | ||
42 | struct bfa_fcxp_wqe_s fcxp_wqe; /* fcxp wait queue element */ | ||
43 | int rpsc_retries; /* max RPSC retry attempts */ | ||
44 | enum bfa_pport_speed rpsc_speed; /* Current Speed from RPSC. | ||
45 | * O if RPSC fails */ | ||
46 | enum bfa_pport_speed assigned_speed; /* Speed assigned by the user. | ||
47 | * will be used if RPSC is not | ||
48 | * supported by the rport */ | ||
49 | }; | ||
50 | |||
51 | struct bfa_fcs_rport_s { | ||
52 | struct list_head qe; /* used by port/vport */ | ||
53 | struct bfa_fcs_port_s *port; /* parent FCS port */ | ||
54 | struct bfa_fcs_s *fcs; /* fcs instance */ | ||
55 | struct bfad_rport_s *rp_drv; /* driver peer instance */ | ||
56 | u32 pid; /* port ID of rport */ | ||
57 | u16 maxfrsize; /* maximum frame size */ | ||
58 | u16 reply_oxid; /* OX_ID of inbound requests */ | ||
59 | enum fc_cos fc_cos; /* FC classes of service supp */ | ||
60 | bfa_boolean_t cisc; /* CISC capable device */ | ||
61 | wwn_t pwwn; /* port wwn of rport */ | ||
62 | wwn_t nwwn; /* node wwn of rport */ | ||
63 | struct bfa_rport_symname_s psym_name; /* port symbolic name */ | ||
64 | bfa_sm_t sm; /* state machine */ | ||
65 | struct bfa_timer_s timer; /* general purpose timer */ | ||
66 | struct bfa_fcs_itnim_s *itnim; /* ITN initiator mode role */ | ||
67 | struct bfa_fcs_tin_s *tin; /* ITN initiator mode role */ | ||
68 | struct bfa_fcs_iprp_s *iprp; /* IP/FC role */ | ||
69 | struct bfa_rport_s *bfa_rport; /* BFA Rport */ | ||
70 | struct bfa_fcxp_s *fcxp; /* FCXP needed for discarding */ | ||
71 | int plogi_retries; /* max plogi retry attempts */ | ||
72 | int ns_retries; /* max NS query retry attempts */ | ||
73 | struct bfa_fcxp_wqe_s fcxp_wqe; /* fcxp wait queue element */ | ||
74 | struct bfa_rport_stats_s stats; /* rport stats */ | ||
75 | enum bfa_rport_function scsi_function; /* Initiator/Target */ | ||
76 | struct bfa_fcs_rpf_s rpf; /* Rport features module */ | ||
77 | }; | ||
78 | |||
79 | static inline struct bfa_rport_s * | ||
80 | bfa_fcs_rport_get_halrport(struct bfa_fcs_rport_s *rport) | ||
81 | { | ||
82 | return rport->bfa_rport; | ||
83 | } | ||
84 | |||
85 | /** | ||
86 | * bfa fcs rport API functions | ||
87 | */ | ||
88 | bfa_status_t bfa_fcs_rport_add(struct bfa_fcs_port_s *port, wwn_t *pwwn, | ||
89 | struct bfa_fcs_rport_s *rport, | ||
90 | struct bfad_rport_s *rport_drv); | ||
91 | bfa_status_t bfa_fcs_rport_remove(struct bfa_fcs_rport_s *rport); | ||
92 | void bfa_fcs_rport_get_attr(struct bfa_fcs_rport_s *rport, | ||
93 | struct bfa_rport_attr_s *attr); | ||
94 | void bfa_fcs_rport_get_stats(struct bfa_fcs_rport_s *rport, | ||
95 | struct bfa_rport_stats_s *stats); | ||
96 | void bfa_fcs_rport_clear_stats(struct bfa_fcs_rport_s *rport); | ||
97 | struct bfa_fcs_rport_s *bfa_fcs_rport_lookup(struct bfa_fcs_port_s *port, | ||
98 | wwn_t rpwwn); | ||
99 | struct bfa_fcs_rport_s *bfa_fcs_rport_lookup_by_nwwn( | ||
100 | struct bfa_fcs_port_s *port, wwn_t rnwwn); | ||
101 | void bfa_fcs_rport_set_del_timeout(u8 rport_tmo); | ||
102 | void bfa_fcs_rport_set_speed(struct bfa_fcs_rport_s *rport, | ||
103 | enum bfa_pport_speed speed); | ||
104 | #endif /* __BFA_FCS_RPORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/fcs/bfa_fcs_vport.h b/drivers/scsi/bfa/include/fcs/bfa_fcs_vport.h new file mode 100644 index 000000000000..cd33f2cd5c34 --- /dev/null +++ b/drivers/scsi/bfa/include/fcs/bfa_fcs_vport.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * bfa_fcs_vport.h BFA fcs vport module public interface | ||
20 | */ | ||
21 | |||
22 | #ifndef __BFA_FCS_VPORT_H__ | ||
23 | #define __BFA_FCS_VPORT_H__ | ||
24 | |||
25 | #include <defs/bfa_defs_status.h> | ||
26 | #include <defs/bfa_defs_port.h> | ||
27 | #include <defs/bfa_defs_vport.h> | ||
28 | #include <fcs/bfa_fcs.h> | ||
29 | #include <fcb/bfa_fcb_vport.h> | ||
30 | |||
31 | struct bfa_fcs_vport_s { | ||
32 | struct list_head qe; /* queue elem */ | ||
33 | bfa_sm_t sm; /* state machine */ | ||
34 | bfa_fcs_lport_t lport; /* logical port */ | ||
35 | struct bfa_timer_s timer; /* general purpose timer */ | ||
36 | struct bfad_vport_s *vport_drv; /* Driver private */ | ||
37 | struct bfa_vport_stats_s vport_stats; /* vport statistics */ | ||
38 | struct bfa_lps_s *lps; /* Lport login service */ | ||
39 | int fdisc_retries; | ||
40 | }; | ||
41 | |||
42 | #define bfa_fcs_vport_get_port(vport) \ | ||
43 | ((struct bfa_fcs_port_s *)(&vport->port)) | ||
44 | |||
45 | /** | ||
46 | * bfa fcs vport public functions | ||
47 | */ | ||
48 | bfa_status_t bfa_fcs_vport_create(struct bfa_fcs_vport_s *vport, | ||
49 | struct bfa_fcs_s *fcs, u16 vf_id, | ||
50 | struct bfa_port_cfg_s *port_cfg, | ||
51 | struct bfad_vport_s *vport_drv); | ||
52 | bfa_status_t bfa_fcs_vport_delete(struct bfa_fcs_vport_s *vport); | ||
53 | bfa_status_t bfa_fcs_vport_start(struct bfa_fcs_vport_s *vport); | ||
54 | bfa_status_t bfa_fcs_vport_stop(struct bfa_fcs_vport_s *vport); | ||
55 | void bfa_fcs_vport_get_attr(struct bfa_fcs_vport_s *vport, | ||
56 | struct bfa_vport_attr_s *vport_attr); | ||
57 | void bfa_fcs_vport_get_stats(struct bfa_fcs_vport_s *vport, | ||
58 | struct bfa_vport_stats_s *vport_stats); | ||
59 | void bfa_fcs_vport_clr_stats(struct bfa_fcs_vport_s *vport); | ||
60 | struct bfa_fcs_vport_s *bfa_fcs_vport_lookup(struct bfa_fcs_s *fcs, | ||
61 | u16 vf_id, wwn_t vpwwn); | ||
62 | |||
63 | #endif /* __BFA_FCS_VPORT_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/log/bfa_log_fcs.h b/drivers/scsi/bfa/include/log/bfa_log_fcs.h new file mode 100644 index 000000000000..b6f5df8827f8 --- /dev/null +++ b/drivers/scsi/bfa/include/log/bfa_log_fcs.h | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* | ||
19 | * messages define for FCS Module | ||
20 | */ | ||
21 | #ifndef __BFA_LOG_FCS_H__ | ||
22 | #define __BFA_LOG_FCS_H__ | ||
23 | #include <cs/bfa_log.h> | ||
24 | #define BFA_LOG_FCS_FABRIC_NOSWITCH \ | ||
25 | (((u32) BFA_LOG_FCS_ID << BFA_LOG_MODID_OFFSET) | 1) | ||
26 | #define BFA_LOG_FCS_FABRIC_ISOLATED \ | ||
27 | (((u32) BFA_LOG_FCS_ID << BFA_LOG_MODID_OFFSET) | 2) | ||
28 | #endif | ||
diff --git a/drivers/scsi/bfa/include/log/bfa_log_hal.h b/drivers/scsi/bfa/include/log/bfa_log_hal.h new file mode 100644 index 000000000000..0412aea2ec30 --- /dev/null +++ b/drivers/scsi/bfa/include/log/bfa_log_hal.h | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* messages define for HAL Module */ | ||
19 | #ifndef __BFA_LOG_HAL_H__ | ||
20 | #define __BFA_LOG_HAL_H__ | ||
21 | #include <cs/bfa_log.h> | ||
22 | #define BFA_LOG_HAL_ASSERT \ | ||
23 | (((u32) BFA_LOG_HAL_ID << BFA_LOG_MODID_OFFSET) | 1) | ||
24 | #define BFA_LOG_HAL_HEARTBEAT_FAILURE \ | ||
25 | (((u32) BFA_LOG_HAL_ID << BFA_LOG_MODID_OFFSET) | 2) | ||
26 | #define BFA_LOG_HAL_FCPIM_PARM_INVALID \ | ||
27 | (((u32) BFA_LOG_HAL_ID << BFA_LOG_MODID_OFFSET) | 3) | ||
28 | #define BFA_LOG_HAL_SM_ASSERT \ | ||
29 | (((u32) BFA_LOG_HAL_ID << BFA_LOG_MODID_OFFSET) | 4) | ||
30 | #endif | ||
diff --git a/drivers/scsi/bfa/include/log/bfa_log_linux.h b/drivers/scsi/bfa/include/log/bfa_log_linux.h new file mode 100644 index 000000000000..317c0547ee16 --- /dev/null +++ b/drivers/scsi/bfa/include/log/bfa_log_linux.h | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* messages define for LINUX Module */ | ||
19 | #ifndef __BFA_LOG_LINUX_H__ | ||
20 | #define __BFA_LOG_LINUX_H__ | ||
21 | #include <cs/bfa_log.h> | ||
22 | #define BFA_LOG_LINUX_DEVICE_CLAIMED \ | ||
23 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 1) | ||
24 | #define BFA_LOG_LINUX_HASH_INIT_FAILED \ | ||
25 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 2) | ||
26 | #define BFA_LOG_LINUX_SYSFS_FAILED \ | ||
27 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 3) | ||
28 | #define BFA_LOG_LINUX_MEM_ALLOC_FAILED \ | ||
29 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 4) | ||
30 | #define BFA_LOG_LINUX_DRIVER_REGISTRATION_FAILED \ | ||
31 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 5) | ||
32 | #define BFA_LOG_LINUX_ITNIM_FREE \ | ||
33 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 6) | ||
34 | #define BFA_LOG_LINUX_ITNIM_ONLINE \ | ||
35 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 7) | ||
36 | #define BFA_LOG_LINUX_ITNIM_OFFLINE \ | ||
37 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 8) | ||
38 | #define BFA_LOG_LINUX_SCSI_HOST_FREE \ | ||
39 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 9) | ||
40 | #define BFA_LOG_LINUX_SCSI_ABORT \ | ||
41 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 10) | ||
42 | #define BFA_LOG_LINUX_SCSI_ABORT_COMP \ | ||
43 | (((u32) BFA_LOG_LINUX_ID << BFA_LOG_MODID_OFFSET) | 11) | ||
44 | #endif | ||
diff --git a/drivers/scsi/bfa/include/log/bfa_log_wdrv.h b/drivers/scsi/bfa/include/log/bfa_log_wdrv.h new file mode 100644 index 000000000000..809a95f7afe2 --- /dev/null +++ b/drivers/scsi/bfa/include/log/bfa_log_wdrv.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /* | ||
19 | * messages define for WDRV Module | ||
20 | */ | ||
21 | #ifndef __BFA_LOG_WDRV_H__ | ||
22 | #define __BFA_LOG_WDRV_H__ | ||
23 | #include <cs/bfa_log.h> | ||
24 | #define BFA_LOG_WDRV_IOC_INIT_ERROR \ | ||
25 | (((u32) BFA_LOG_WDRV_ID << BFA_LOG_MODID_OFFSET) | 1) | ||
26 | #define BFA_LOG_WDRV_IOC_INTERNAL_ERROR \ | ||
27 | (((u32) BFA_LOG_WDRV_ID << BFA_LOG_MODID_OFFSET) | 2) | ||
28 | #define BFA_LOG_WDRV_IOC_START_ERROR \ | ||
29 | (((u32) BFA_LOG_WDRV_ID << BFA_LOG_MODID_OFFSET) | 3) | ||
30 | #define BFA_LOG_WDRV_IOC_STOP_ERROR \ | ||
31 | (((u32) BFA_LOG_WDRV_ID << BFA_LOG_MODID_OFFSET) | 4) | ||
32 | #define BFA_LOG_WDRV_INSUFFICIENT_RESOURCES \ | ||
33 | (((u32) BFA_LOG_WDRV_ID << BFA_LOG_MODID_OFFSET) | 5) | ||
34 | #define BFA_LOG_WDRV_BASE_ADDRESS_MAP_ERROR \ | ||
35 | (((u32) BFA_LOG_WDRV_ID << BFA_LOG_MODID_OFFSET) | 6) | ||
36 | #endif | ||
diff --git a/drivers/scsi/bfa/include/protocol/ct.h b/drivers/scsi/bfa/include/protocol/ct.h new file mode 100644 index 000000000000..c59d6630b070 --- /dev/null +++ b/drivers/scsi/bfa/include/protocol/ct.h | |||
@@ -0,0 +1,492 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __CT_H__ | ||
19 | #define __CT_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | struct ct_hdr_s{ | ||
26 | u32 rev_id:8; /* Revision of the CT */ | ||
27 | u32 in_id:24; /* Initiator Id */ | ||
28 | u32 gs_type:8; /* Generic service Type */ | ||
29 | u32 gs_sub_type:8; /* Generic service sub type */ | ||
30 | u32 options:8; /* options */ | ||
31 | u32 rsvrd:8; /* reserved */ | ||
32 | u32 cmd_rsp_code:16;/* ct command/response code */ | ||
33 | u32 max_res_size:16;/* maximum/residual size */ | ||
34 | u32 frag_id:8; /* fragment ID */ | ||
35 | u32 reason_code:8; /* reason code */ | ||
36 | u32 exp_code:8; /* explanation code */ | ||
37 | u32 vendor_unq:8; /* vendor unique */ | ||
38 | }; | ||
39 | |||
40 | /* | ||
41 | * defines for the Revision | ||
42 | */ | ||
43 | enum { | ||
44 | CT_GS3_REVISION = 0x01, | ||
45 | }; | ||
46 | |||
47 | /* | ||
48 | * defines for gs_type | ||
49 | */ | ||
50 | enum { | ||
51 | CT_GSTYPE_KEYSERVICE = 0xF7, | ||
52 | CT_GSTYPE_ALIASSERVICE = 0xF8, | ||
53 | CT_GSTYPE_MGMTSERVICE = 0xFA, | ||
54 | CT_GSTYPE_TIMESERVICE = 0xFB, | ||
55 | CT_GSTYPE_DIRSERVICE = 0xFC, | ||
56 | }; | ||
57 | |||
58 | /* | ||
59 | * defines for gs_sub_type for gs type directory service | ||
60 | */ | ||
61 | enum { | ||
62 | CT_GSSUBTYPE_NAMESERVER = 0x02, | ||
63 | }; | ||
64 | |||
65 | /* | ||
66 | * defines for gs_sub_type for gs type management service | ||
67 | */ | ||
68 | enum { | ||
69 | CT_GSSUBTYPE_CFGSERVER = 0x01, | ||
70 | CT_GSSUBTYPE_UNZONED_NS = 0x02, | ||
71 | CT_GSSUBTYPE_ZONESERVER = 0x03, | ||
72 | CT_GSSUBTYPE_LOCKSERVER = 0x04, | ||
73 | CT_GSSUBTYPE_HBA_MGMTSERVER = 0x10, /* for FDMI */ | ||
74 | }; | ||
75 | |||
76 | /* | ||
77 | * defines for CT response code field | ||
78 | */ | ||
79 | enum { | ||
80 | CT_RSP_REJECT = 0x8001, | ||
81 | CT_RSP_ACCEPT = 0x8002, | ||
82 | }; | ||
83 | |||
84 | /* | ||
85 | * defintions for CT reason code | ||
86 | */ | ||
87 | enum { | ||
88 | CT_RSN_INV_CMD = 0x01, | ||
89 | CT_RSN_INV_VER = 0x02, | ||
90 | CT_RSN_LOGIC_ERR = 0x03, | ||
91 | CT_RSN_INV_SIZE = 0x04, | ||
92 | CT_RSN_LOGICAL_BUSY = 0x05, | ||
93 | CT_RSN_PROTO_ERR = 0x07, | ||
94 | CT_RSN_UNABLE_TO_PERF = 0x09, | ||
95 | CT_RSN_NOT_SUPP = 0x0B, | ||
96 | CT_RSN_SERVER_NOT_AVBL = 0x0D, | ||
97 | CT_RSN_SESSION_COULD_NOT_BE_ESTBD = 0x0E, | ||
98 | CT_RSN_VENDOR_SPECIFIC = 0xFF, | ||
99 | |||
100 | }; | ||
101 | |||
102 | /* | ||
103 | * definitions for explanations code for Name server | ||
104 | */ | ||
105 | enum { | ||
106 | CT_NS_EXP_NOADDITIONAL = 0x00, | ||
107 | CT_NS_EXP_ID_NOT_REG = 0x01, | ||
108 | CT_NS_EXP_PN_NOT_REG = 0x02, | ||
109 | CT_NS_EXP_NN_NOT_REG = 0x03, | ||
110 | CT_NS_EXP_CS_NOT_REG = 0x04, | ||
111 | CT_NS_EXP_IPN_NOT_REG = 0x05, | ||
112 | CT_NS_EXP_IPA_NOT_REG = 0x06, | ||
113 | CT_NS_EXP_FT_NOT_REG = 0x07, | ||
114 | CT_NS_EXP_SPN_NOT_REG = 0x08, | ||
115 | CT_NS_EXP_SNN_NOT_REG = 0x09, | ||
116 | CT_NS_EXP_PT_NOT_REG = 0x0A, | ||
117 | CT_NS_EXP_IPP_NOT_REG = 0x0B, | ||
118 | CT_NS_EXP_FPN_NOT_REG = 0x0C, | ||
119 | CT_NS_EXP_HA_NOT_REG = 0x0D, | ||
120 | CT_NS_EXP_FD_NOT_REG = 0x0E, | ||
121 | CT_NS_EXP_FF_NOT_REG = 0x0F, | ||
122 | CT_NS_EXP_ACCESSDENIED = 0x10, | ||
123 | CT_NS_EXP_UNACCEPTABLE_ID = 0x11, | ||
124 | CT_NS_EXP_DATABASEEMPTY = 0x12, | ||
125 | CT_NS_EXP_NOT_REG_IN_SCOPE = 0x13, | ||
126 | CT_NS_EXP_DOM_ID_NOT_PRESENT = 0x14, | ||
127 | CT_NS_EXP_PORT_NUM_NOT_PRESENT = 0x15, | ||
128 | CT_NS_EXP_NO_DEVICE_ATTACHED = 0x16 | ||
129 | }; | ||
130 | |||
131 | /* | ||
132 | * defintions for the explanation code for all servers | ||
133 | */ | ||
134 | enum { | ||
135 | CT_EXP_AUTH_EXCEPTION = 0xF1, | ||
136 | CT_EXP_DB_FULL = 0xF2, | ||
137 | CT_EXP_DB_EMPTY = 0xF3, | ||
138 | CT_EXP_PROCESSING_REQ = 0xF4, | ||
139 | CT_EXP_UNABLE_TO_VERIFY_CONN = 0xF5, | ||
140 | CT_EXP_DEVICES_NOT_IN_CMN_ZONE = 0xF6 | ||
141 | }; | ||
142 | |||
143 | /* | ||
144 | * Command codes for Name server | ||
145 | */ | ||
146 | enum { | ||
147 | GS_GID_PN = 0x0121, /* Get Id on port name */ | ||
148 | GS_GPN_ID = 0x0112, /* Get port name on ID */ | ||
149 | GS_GNN_ID = 0x0113, /* Get node name on ID */ | ||
150 | GS_GID_FT = 0x0171, /* Get Id on FC4 type */ | ||
151 | GS_GSPN_ID = 0x0118, /* Get symbolic PN on ID */ | ||
152 | GS_RFT_ID = 0x0217, /* Register fc4type on ID */ | ||
153 | GS_RSPN_ID = 0x0218, /* Register symbolic PN on ID */ | ||
154 | GS_RPN_ID = 0x0212, /* Register port name */ | ||
155 | GS_RNN_ID = 0x0213, /* Register node name */ | ||
156 | GS_RCS_ID = 0x0214, /* Register class of service */ | ||
157 | GS_RPT_ID = 0x021A, /* Register port type */ | ||
158 | GS_GA_NXT = 0x0100, /* Get all next */ | ||
159 | GS_RFF_ID = 0x021F, /* Register FC4 Feature */ | ||
160 | }; | ||
161 | |||
162 | struct fcgs_id_req_s{ | ||
163 | u32 rsvd:8; | ||
164 | u32 dap:24; /* port identifier */ | ||
165 | }; | ||
166 | #define fcgs_gpnid_req_t struct fcgs_id_req_s | ||
167 | #define fcgs_gnnid_req_t struct fcgs_id_req_s | ||
168 | #define fcgs_gspnid_req_t struct fcgs_id_req_s | ||
169 | |||
170 | struct fcgs_gidpn_req_s{ | ||
171 | wwn_t port_name; /* port wwn */ | ||
172 | }; | ||
173 | |||
174 | struct fcgs_gidpn_resp_s{ | ||
175 | u32 rsvd:8; | ||
176 | u32 dap:24; /* port identifier */ | ||
177 | }; | ||
178 | |||
179 | /** | ||
180 | * RFT_ID | ||
181 | */ | ||
182 | struct fcgs_rftid_req_s { | ||
183 | u32 rsvd:8; | ||
184 | u32 dap:24; /* port identifier */ | ||
185 | u32 fc4_type[8]; /* fc4 types */ | ||
186 | }; | ||
187 | |||
188 | /** | ||
189 | * RFF_ID : Register FC4 features. | ||
190 | */ | ||
191 | |||
192 | #define FC_GS_FCP_FC4_FEATURE_INITIATOR 0x02 | ||
193 | #define FC_GS_FCP_FC4_FEATURE_TARGET 0x01 | ||
194 | |||
195 | struct fcgs_rffid_req_s{ | ||
196 | u32 rsvd :8; | ||
197 | u32 dap :24; /* port identifier */ | ||
198 | u32 rsvd1 :16; | ||
199 | u32 fc4ftr_bits :8; /* fc4 feature bits */ | ||
200 | u32 fc4_type :8; /* corresponding FC4 Type */ | ||
201 | }; | ||
202 | |||
203 | /** | ||
204 | * GID_FT Request | ||
205 | */ | ||
206 | struct fcgs_gidft_req_s{ | ||
207 | u8 reserved; | ||
208 | u8 domain_id; /* domain, 0 - all fabric */ | ||
209 | u8 area_id; /* area, 0 - whole domain */ | ||
210 | u8 fc4_type; /* FC_TYPE_FCP for SCSI devices */ | ||
211 | }; /* GID_FT Request */ | ||
212 | |||
213 | /** | ||
214 | * GID_FT Response | ||
215 | */ | ||
216 | struct fcgs_gidft_resp_s { | ||
217 | u8 last:1; /* last port identifier flag */ | ||
218 | u8 reserved:7; | ||
219 | u32 pid:24; /* port identifier */ | ||
220 | }; /* GID_FT Response */ | ||
221 | |||
222 | /** | ||
223 | * RSPN_ID | ||
224 | */ | ||
225 | struct fcgs_rspnid_req_s{ | ||
226 | u32 rsvd:8; | ||
227 | u32 dap:24; /* port identifier */ | ||
228 | u8 spn_len; /* symbolic port name length */ | ||
229 | u8 spn[256]; /* symbolic port name */ | ||
230 | }; | ||
231 | |||
232 | /** | ||
233 | * RPN_ID | ||
234 | */ | ||
235 | struct fcgs_rpnid_req_s{ | ||
236 | u32 rsvd:8; | ||
237 | u32 port_id:24; | ||
238 | wwn_t port_name; | ||
239 | }; | ||
240 | |||
241 | /** | ||
242 | * RNN_ID | ||
243 | */ | ||
244 | struct fcgs_rnnid_req_s{ | ||
245 | u32 rsvd:8; | ||
246 | u32 port_id:24; | ||
247 | wwn_t node_name; | ||
248 | }; | ||
249 | |||
250 | /** | ||
251 | * RCS_ID | ||
252 | */ | ||
253 | struct fcgs_rcsid_req_s{ | ||
254 | u32 rsvd:8; | ||
255 | u32 port_id:24; | ||
256 | u32 cos; | ||
257 | }; | ||
258 | |||
259 | /** | ||
260 | * RPT_ID | ||
261 | */ | ||
262 | struct fcgs_rptid_req_s{ | ||
263 | u32 rsvd:8; | ||
264 | u32 port_id:24; | ||
265 | u32 port_type:8; | ||
266 | u32 rsvd1:24; | ||
267 | }; | ||
268 | |||
269 | /** | ||
270 | * GA_NXT Request | ||
271 | */ | ||
272 | struct fcgs_ganxt_req_s{ | ||
273 | u32 rsvd:8; | ||
274 | u32 port_id:24; | ||
275 | }; | ||
276 | |||
277 | /** | ||
278 | * GA_NXT Response | ||
279 | */ | ||
280 | struct fcgs_ganxt_rsp_s{ | ||
281 | u32 port_type:8; /* Port Type */ | ||
282 | u32 port_id:24; /* Port Identifier */ | ||
283 | wwn_t port_name; /* Port Name */ | ||
284 | u8 spn_len; /* Length of Symbolic Port Name */ | ||
285 | char spn[255]; /* Symbolic Port Name */ | ||
286 | wwn_t node_name; /* Node Name */ | ||
287 | u8 snn_len; /* Length of Symbolic Node Name */ | ||
288 | char snn[255]; /* Symbolic Node Name */ | ||
289 | u8 ipa[8]; /* Initial Process Associator */ | ||
290 | u8 ip[16]; /* IP Address */ | ||
291 | u32 cos; /* Class of Service */ | ||
292 | u32 fc4types[8]; /* FC-4 TYPEs */ | ||
293 | wwn_t fabric_port_name; | ||
294 | /* Fabric Port Name */ | ||
295 | u32 rsvd:8; /* Reserved */ | ||
296 | u32 hard_addr:24; /* Hard Address */ | ||
297 | }; | ||
298 | |||
299 | /* | ||
300 | * Fabric Config Server | ||
301 | */ | ||
302 | |||
303 | /* | ||
304 | * Command codes for Fabric Configuration Server | ||
305 | */ | ||
306 | enum { | ||
307 | GS_FC_GFN_CMD = 0x0114, /* GS FC Get Fabric Name */ | ||
308 | GS_FC_GMAL_CMD = 0x0116, /* GS FC GMAL */ | ||
309 | GS_FC_TRACE_CMD = 0x0400, /* GS FC Trace Route */ | ||
310 | GS_FC_PING_CMD = 0x0401, /* GS FC Ping */ | ||
311 | }; | ||
312 | |||
313 | /* | ||
314 | * Source or Destination Port Tags. | ||
315 | */ | ||
316 | enum { | ||
317 | GS_FTRACE_TAG_NPORT_ID = 1, | ||
318 | GS_FTRACE_TAG_NPORT_NAME = 2, | ||
319 | }; | ||
320 | |||
321 | /* | ||
322 | * Port Value : Could be a Port id or wwn | ||
323 | */ | ||
324 | union fcgs_port_val_u{ | ||
325 | u32 nport_id; | ||
326 | wwn_t nport_wwn; | ||
327 | }; | ||
328 | |||
329 | #define GS_FTRACE_MAX_HOP_COUNT 20 | ||
330 | #define GS_FTRACE_REVISION 1 | ||
331 | |||
332 | /* | ||
333 | * Ftrace Related Structures. | ||
334 | */ | ||
335 | |||
336 | /* | ||
337 | * STR (Switch Trace) Reject Reason Codes. From FC-SW. | ||
338 | */ | ||
339 | enum { | ||
340 | GS_FTRACE_STR_CMD_COMPLETED_SUCC = 0, | ||
341 | GS_FTRACE_STR_CMD_NOT_SUPP_IN_NEXT_SWITCH, | ||
342 | GS_FTRACE_STR_NO_RESP_FROM_NEXT_SWITCH, | ||
343 | GS_FTRACE_STR_MAX_HOP_CNT_REACHED, | ||
344 | GS_FTRACE_STR_SRC_PORT_NOT_FOUND, | ||
345 | GS_FTRACE_STR_DST_PORT_NOT_FOUND, | ||
346 | GS_FTRACE_STR_DEVICES_NOT_IN_COMMON_ZONE, | ||
347 | GS_FTRACE_STR_NO_ROUTE_BW_PORTS, | ||
348 | GS_FTRACE_STR_NO_ADDL_EXPLN, | ||
349 | GS_FTRACE_STR_FABRIC_BUSY, | ||
350 | GS_FTRACE_STR_FABRIC_BUILD_IN_PROGRESS, | ||
351 | GS_FTRACE_STR_VENDOR_SPECIFIC_ERR_START = 0xf0, | ||
352 | GS_FTRACE_STR_VENDOR_SPECIFIC_ERR_END = 0xff, | ||
353 | }; | ||
354 | |||
355 | /* | ||
356 | * Ftrace Request | ||
357 | */ | ||
358 | struct fcgs_ftrace_req_s{ | ||
359 | u32 revision; | ||
360 | u16 src_port_tag; /* Source Port tag */ | ||
361 | u16 src_port_len; /* Source Port len */ | ||
362 | union fcgs_port_val_u src_port_val; /* Source Port value */ | ||
363 | u16 dst_port_tag; /* Destination Port tag */ | ||
364 | u16 dst_port_len; /* Destination Port len */ | ||
365 | union fcgs_port_val_u dst_port_val; /* Destination Port value */ | ||
366 | u32 token; | ||
367 | u8 vendor_id[8]; /* T10 Vendor Identifier */ | ||
368 | u8 vendor_info[8]; /* Vendor specific Info */ | ||
369 | u32 max_hop_cnt; /* Max Hop Count */ | ||
370 | }; | ||
371 | |||
372 | /* | ||
373 | * Path info structure | ||
374 | */ | ||
375 | struct fcgs_ftrace_path_info_s{ | ||
376 | wwn_t switch_name; /* Switch WWN */ | ||
377 | u32 domain_id; | ||
378 | wwn_t ingress_port_name; /* Ingress ports wwn */ | ||
379 | u32 ingress_phys_port_num; /* Ingress ports physical port | ||
380 | * number | ||
381 | */ | ||
382 | wwn_t egress_port_name; /* Ingress ports wwn */ | ||
383 | u32 egress_phys_port_num; /* Ingress ports physical port | ||
384 | * number | ||
385 | */ | ||
386 | }; | ||
387 | |||
388 | /* | ||
389 | * Ftrace Acc Response | ||
390 | */ | ||
391 | struct fcgs_ftrace_resp_s{ | ||
392 | u32 revision; | ||
393 | u32 token; | ||
394 | u8 vendor_id[8]; /* T10 Vendor Identifier */ | ||
395 | u8 vendor_info[8]; /* Vendor specific Info */ | ||
396 | u32 str_rej_reason_code; /* STR Reject Reason Code */ | ||
397 | u32 num_path_info_entries; /* No. of path info entries */ | ||
398 | /* | ||
399 | * path info entry/entries. | ||
400 | */ | ||
401 | struct fcgs_ftrace_path_info_s path_info[1]; | ||
402 | |||
403 | }; | ||
404 | |||
405 | /* | ||
406 | * Fabric Config Server : FCPing | ||
407 | */ | ||
408 | |||
409 | /* | ||
410 | * FC Ping Request | ||
411 | */ | ||
412 | struct fcgs_fcping_req_s{ | ||
413 | u32 revision; | ||
414 | u16 port_tag; | ||
415 | u16 port_len; /* Port len */ | ||
416 | union fcgs_port_val_u port_val; /* Port value */ | ||
417 | u32 token; | ||
418 | }; | ||
419 | |||
420 | /* | ||
421 | * FC Ping Response | ||
422 | */ | ||
423 | struct fcgs_fcping_resp_s{ | ||
424 | u32 token; | ||
425 | }; | ||
426 | |||
427 | /* | ||
428 | * Command codes for zone server query. | ||
429 | */ | ||
430 | enum { | ||
431 | ZS_GZME = 0x0124, /* Get zone member extended */ | ||
432 | }; | ||
433 | |||
434 | /* | ||
435 | * ZS GZME request | ||
436 | */ | ||
437 | #define ZS_GZME_ZNAMELEN 32 | ||
438 | struct zs_gzme_req_s{ | ||
439 | u8 znamelen; | ||
440 | u8 rsvd[3]; | ||
441 | u8 zname[ZS_GZME_ZNAMELEN]; | ||
442 | }; | ||
443 | |||
444 | enum zs_mbr_type{ | ||
445 | ZS_MBR_TYPE_PWWN = 1, | ||
446 | ZS_MBR_TYPE_DOMPORT = 2, | ||
447 | ZS_MBR_TYPE_PORTID = 3, | ||
448 | ZS_MBR_TYPE_NWWN = 4, | ||
449 | }; | ||
450 | |||
451 | struct zs_mbr_wwn_s{ | ||
452 | u8 mbr_type; | ||
453 | u8 rsvd[3]; | ||
454 | wwn_t wwn; | ||
455 | }; | ||
456 | |||
457 | struct zs_query_resp_s{ | ||
458 | u32 nmbrs; /* number of zone members */ | ||
459 | struct zs_mbr_wwn_s mbr[1]; | ||
460 | }; | ||
461 | |||
462 | /* | ||
463 | * GMAL Command ( Get ( interconnect Element) Management Address List) | ||
464 | * To retrieve the IP Address of a Switch. | ||
465 | */ | ||
466 | |||
467 | #define CT_GMAL_RESP_PREFIX_TELNET "telnet://" | ||
468 | #define CT_GMAL_RESP_PREFIX_HTTP "http://" | ||
469 | |||
470 | /* GMAL/GFN request */ | ||
471 | struct fcgs_req_s { | ||
472 | wwn_t wwn; /* PWWN/NWWN */ | ||
473 | }; | ||
474 | |||
475 | #define fcgs_gmal_req_t struct fcgs_req_s | ||
476 | #define fcgs_gfn_req_t struct fcgs_req_s | ||
477 | |||
478 | /* Accept Response to GMAL */ | ||
479 | struct fcgs_gmal_resp_s { | ||
480 | u32 ms_len; /* Num of entries */ | ||
481 | u8 ms_ma[256]; | ||
482 | }; | ||
483 | |||
484 | struct fc_gmal_entry_s { | ||
485 | u8 len; | ||
486 | u8 prefix[7]; /* like "http://" */ | ||
487 | u8 ip_addr[248]; | ||
488 | }; | ||
489 | |||
490 | #pragma pack() | ||
491 | |||
492 | #endif | ||
diff --git a/drivers/scsi/bfa/include/protocol/fc.h b/drivers/scsi/bfa/include/protocol/fc.h new file mode 100644 index 000000000000..3e39ba58cfb5 --- /dev/null +++ b/drivers/scsi/bfa/include/protocol/fc.h | |||
@@ -0,0 +1,1105 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __FC_H__ | ||
19 | #define __FC_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | /* | ||
26 | * Fibre Channel Header Structure (FCHS) definition | ||
27 | */ | ||
28 | struct fchs_s { | ||
29 | #ifdef __BIGENDIAN | ||
30 | u32 routing:4; /* routing bits */ | ||
31 | u32 cat_info:4; /* category info */ | ||
32 | #else | ||
33 | u32 cat_info:4; /* category info */ | ||
34 | u32 routing:4; /* routing bits */ | ||
35 | #endif | ||
36 | u32 d_id:24; /* destination identifier */ | ||
37 | |||
38 | u32 cs_ctl:8; /* class specific control */ | ||
39 | u32 s_id:24; /* source identifier */ | ||
40 | |||
41 | u32 type:8; /* data structure type */ | ||
42 | u32 f_ctl:24; /* initial frame control */ | ||
43 | |||
44 | u8 seq_id; /* sequence identifier */ | ||
45 | u8 df_ctl; /* data field control */ | ||
46 | u16 seq_cnt; /* sequence count */ | ||
47 | |||
48 | u16 ox_id; /* originator exchange ID */ | ||
49 | u16 rx_id; /* responder exchange ID */ | ||
50 | |||
51 | u32 ro; /* relative offset */ | ||
52 | }; | ||
53 | /* | ||
54 | * Fibre Channel BB_E Header Structure | ||
55 | */ | ||
56 | struct fcbbehs_s { | ||
57 | u16 ver_rsvd; | ||
58 | u32 rsvd[2]; | ||
59 | u32 rsvd__sof; | ||
60 | }; | ||
61 | |||
62 | #define FC_SEQ_ID_MAX 256 | ||
63 | |||
64 | /* | ||
65 | * routing bit definitions | ||
66 | */ | ||
67 | enum { | ||
68 | FC_RTG_FC4_DEV_DATA = 0x0, /* FC-4 Device Data */ | ||
69 | FC_RTG_EXT_LINK = 0x2, /* Extended Link Data */ | ||
70 | FC_RTG_FC4_LINK_DATA = 0x3, /* FC-4 Link Data */ | ||
71 | FC_RTG_VIDEO_DATA = 0x4, /* Video Data */ | ||
72 | FC_RTG_EXT_HDR = 0x5, /* VFT, IFR or Encapsuled */ | ||
73 | FC_RTG_BASIC_LINK = 0x8, /* Basic Link data */ | ||
74 | FC_RTG_LINK_CTRL = 0xC, /* Link Control */ | ||
75 | }; | ||
76 | |||
77 | /* | ||
78 | * information category for extended link data and FC-4 Link Data | ||
79 | */ | ||
80 | enum { | ||
81 | FC_CAT_LD_REQUEST = 0x2, /* Request */ | ||
82 | FC_CAT_LD_REPLY = 0x3, /* Reply */ | ||
83 | FC_CAT_LD_DIAG = 0xF, /* for DIAG use only */ | ||
84 | }; | ||
85 | |||
86 | /* | ||
87 | * information category for extended headers (VFT, IFR or encapsulation) | ||
88 | */ | ||
89 | enum { | ||
90 | FC_CAT_VFT_HDR = 0x0, /* Virtual fabric tagging header */ | ||
91 | FC_CAT_IFR_HDR = 0x1, /* Inter-Fabric routing header */ | ||
92 | FC_CAT_ENC_HDR = 0x2, /* Encapsulation header */ | ||
93 | }; | ||
94 | |||
95 | /* | ||
96 | * information category for FC-4 device data | ||
97 | */ | ||
98 | enum { | ||
99 | FC_CAT_UNCATEG_INFO = 0x0, /* Uncategorized information */ | ||
100 | FC_CAT_SOLICIT_DATA = 0x1, /* Solicited Data */ | ||
101 | FC_CAT_UNSOLICIT_CTRL = 0x2, /* Unsolicited Control */ | ||
102 | FC_CAT_SOLICIT_CTRL = 0x3, /* Solicited Control */ | ||
103 | FC_CAT_UNSOLICIT_DATA = 0x4, /* Unsolicited Data */ | ||
104 | FC_CAT_DATA_DESC = 0x5, /* Data Descriptor */ | ||
105 | FC_CAT_UNSOLICIT_CMD = 0x6, /* Unsolicited Command */ | ||
106 | FC_CAT_CMD_STATUS = 0x7, /* Command Status */ | ||
107 | }; | ||
108 | |||
109 | /* | ||
110 | * information category for Link Control | ||
111 | */ | ||
112 | enum { | ||
113 | FC_CAT_ACK_1 = 0x00, | ||
114 | FC_CAT_ACK_0_N = 0x01, | ||
115 | FC_CAT_P_RJT = 0x02, | ||
116 | FC_CAT_F_RJT = 0x03, | ||
117 | FC_CAT_P_BSY = 0x04, | ||
118 | FC_CAT_F_BSY_DATA = 0x05, | ||
119 | FC_CAT_F_BSY_LINK_CTL = 0x06, | ||
120 | FC_CAT_F_LCR = 0x07, | ||
121 | FC_CAT_NTY = 0x08, | ||
122 | FC_CAT_END = 0x09, | ||
123 | }; | ||
124 | |||
125 | /* | ||
126 | * Type Field Definitions. FC-PH Section 18.5 pg. 165 | ||
127 | */ | ||
128 | enum { | ||
129 | FC_TYPE_BLS = 0x0, /* Basic Link Service */ | ||
130 | FC_TYPE_ELS = 0x1, /* Extended Link Service */ | ||
131 | FC_TYPE_IP = 0x5, /* IP */ | ||
132 | FC_TYPE_FCP = 0x8, /* SCSI-FCP */ | ||
133 | FC_TYPE_GPP = 0x9, /* SCSI_GPP */ | ||
134 | FC_TYPE_SERVICES = 0x20, /* Fibre Channel Services */ | ||
135 | FC_TYPE_FC_FSS = 0x22, /* Fabric Switch Services */ | ||
136 | FC_TYPE_FC_AL = 0x23, /* FC-AL */ | ||
137 | FC_TYPE_FC_SNMP = 0x24, /* FC-SNMP */ | ||
138 | FC_TYPE_MAX = 256, /* 256 FC-4 types */ | ||
139 | }; | ||
140 | |||
141 | struct fc_fc4types_s{ | ||
142 | u8 bits[FC_TYPE_MAX / 8]; | ||
143 | }; | ||
144 | |||
145 | /* | ||
146 | * Frame Control Definitions. FC-PH Table-45. pg. 168 | ||
147 | */ | ||
148 | enum { | ||
149 | FCTL_EC_ORIG = 0x000000, /* exchange originator */ | ||
150 | FCTL_EC_RESP = 0x800000, /* exchange responder */ | ||
151 | FCTL_SEQ_INI = 0x000000, /* sequence initiator */ | ||
152 | FCTL_SEQ_REC = 0x400000, /* sequence recipient */ | ||
153 | FCTL_FS_EXCH = 0x200000, /* first sequence of xchg */ | ||
154 | FCTL_LS_EXCH = 0x100000, /* last sequence of xchg */ | ||
155 | FCTL_END_SEQ = 0x080000, /* last frame of sequence */ | ||
156 | FCTL_SI_XFER = 0x010000, /* seq initiative transfer */ | ||
157 | FCTL_RO_PRESENT = 0x000008, /* relative offset present */ | ||
158 | FCTL_FILLBYTE_MASK = 0x000003 /* , fill byte mask */ | ||
159 | }; | ||
160 | |||
161 | /* | ||
162 | * Fabric Well Known Addresses | ||
163 | */ | ||
164 | enum { | ||
165 | FC_MIN_WELL_KNOWN_ADDR = 0xFFFFF0, | ||
166 | FC_DOMAIN_CONTROLLER_MASK = 0xFFFC00, | ||
167 | FC_ALIAS_SERVER = 0xFFFFF8, | ||
168 | FC_MGMT_SERVER = 0xFFFFFA, | ||
169 | FC_TIME_SERVER = 0xFFFFFB, | ||
170 | FC_NAME_SERVER = 0xFFFFFC, | ||
171 | FC_FABRIC_CONTROLLER = 0xFFFFFD, | ||
172 | FC_FABRIC_PORT = 0xFFFFFE, | ||
173 | FC_BROADCAST_SERVER = 0xFFFFFF | ||
174 | }; | ||
175 | |||
176 | /* | ||
177 | * domain/area/port defines | ||
178 | */ | ||
179 | #define FC_DOMAIN_MASK 0xFF0000 | ||
180 | #define FC_DOMAIN_SHIFT 16 | ||
181 | #define FC_AREA_MASK 0x00FF00 | ||
182 | #define FC_AREA_SHIFT 8 | ||
183 | #define FC_PORT_MASK 0x0000FF | ||
184 | #define FC_PORT_SHIFT 0 | ||
185 | |||
186 | #define FC_GET_DOMAIN(p) (((p) & FC_DOMAIN_MASK) >> FC_DOMAIN_SHIFT) | ||
187 | #define FC_GET_AREA(p) (((p) & FC_AREA_MASK) >> FC_AREA_SHIFT) | ||
188 | #define FC_GET_PORT(p) (((p) & FC_PORT_MASK) >> FC_PORT_SHIFT) | ||
189 | |||
190 | #define FC_DOMAIN_CTRLR(p) (FC_DOMAIN_CONTROLLER_MASK | (FC_GET_DOMAIN(p))) | ||
191 | |||
192 | enum { | ||
193 | FC_RXID_ANY = 0xFFFFU, | ||
194 | }; | ||
195 | |||
196 | /* | ||
197 | * generic ELS command | ||
198 | */ | ||
199 | struct fc_els_cmd_s{ | ||
200 | u32 els_code:8; /* ELS Command Code */ | ||
201 | u32 reserved:24; | ||
202 | }; | ||
203 | |||
204 | /* | ||
205 | * ELS Command Codes. FC-PH Table-75. pg. 223 | ||
206 | */ | ||
207 | enum { | ||
208 | FC_ELS_LS_RJT = 0x1, /* Link Service Reject. */ | ||
209 | FC_ELS_ACC = 0x02, /* Accept */ | ||
210 | FC_ELS_PLOGI = 0x03, /* N_Port Login. */ | ||
211 | FC_ELS_FLOGI = 0x04, /* F_Port Login. */ | ||
212 | FC_ELS_LOGO = 0x05, /* Logout. */ | ||
213 | FC_ELS_ABTX = 0x06, /* Abort Exchange */ | ||
214 | FC_ELS_RES = 0x08, /* Read Exchange status */ | ||
215 | FC_ELS_RSS = 0x09, /* Read sequence status block */ | ||
216 | FC_ELS_RSI = 0x0A, /* Request Sequence Initiative */ | ||
217 | FC_ELS_ESTC = 0x0C, /* Estimate Credit. */ | ||
218 | FC_ELS_RTV = 0x0E, /* Read Timeout Value. */ | ||
219 | FC_ELS_RLS = 0x0F, /* Read Link Status. */ | ||
220 | FC_ELS_ECHO = 0x10, /* Echo */ | ||
221 | FC_ELS_TEST = 0x11, /* Test */ | ||
222 | FC_ELS_RRQ = 0x12, /* Reinstate Recovery Qualifier. */ | ||
223 | FC_ELS_REC = 0x13, /* Add this for TAPE support in FCR */ | ||
224 | FC_ELS_PRLI = 0x20, /* Process Login */ | ||
225 | FC_ELS_PRLO = 0x21, /* Process Logout. */ | ||
226 | FC_ELS_SCN = 0x22, /* State Change Notification. */ | ||
227 | FC_ELS_TPRLO = 0x24, /* Third Party Process Logout. */ | ||
228 | FC_ELS_PDISC = 0x50, /* Discover N_Port Parameters. */ | ||
229 | FC_ELS_FDISC = 0x51, /* Discover F_Port Parameters. */ | ||
230 | FC_ELS_ADISC = 0x52, /* Discover Address. */ | ||
231 | FC_ELS_FAN = 0x60, /* Fabric Address Notification */ | ||
232 | FC_ELS_RSCN = 0x61, /* Reg State Change Notification */ | ||
233 | FC_ELS_SCR = 0x62, /* State Change Registration. */ | ||
234 | FC_ELS_RTIN = 0x77, /* Mangement server request */ | ||
235 | FC_ELS_RNID = 0x78, /* Mangement server request */ | ||
236 | FC_ELS_RLIR = 0x79, /* Registered Link Incident Record */ | ||
237 | |||
238 | FC_ELS_RPSC = 0x7D, /* Report Port Speed Capabilities */ | ||
239 | FC_ELS_QSA = 0x7E, /* Query Security Attributes. Ref FC-SP */ | ||
240 | FC_ELS_E2E_LBEACON = 0x81, | ||
241 | /* End-to-End Link Beacon */ | ||
242 | FC_ELS_AUTH = 0x90, /* Authentication. Ref FC-SP */ | ||
243 | FC_ELS_RFCN = 0x97, /* Request Fabric Change Notification. Ref | ||
244 | *FC-SP */ | ||
245 | |||
246 | }; | ||
247 | |||
248 | /* | ||
249 | * Version numbers for FC-PH standards, | ||
250 | * used in login to indicate what port | ||
251 | * supports. See FC-PH-X table 158. | ||
252 | */ | ||
253 | enum { | ||
254 | FC_PH_VER_4_3 = 0x09, | ||
255 | FC_PH_VER_PH_3 = 0x20, | ||
256 | }; | ||
257 | |||
258 | /* | ||
259 | * PDU size defines | ||
260 | */ | ||
261 | enum { | ||
262 | FC_MIN_PDUSZ = 512, | ||
263 | FC_MAX_PDUSZ = 2112, | ||
264 | }; | ||
265 | |||
266 | /* | ||
267 | * N_Port PLOGI Common Service Parameters. | ||
268 | * FC-PH-x. Figure-76. pg. 308. | ||
269 | */ | ||
270 | struct fc_plogi_csp_s{ | ||
271 | u8 verhi; /* FC-PH high version */ | ||
272 | u8 verlo; /* FC-PH low version */ | ||
273 | u16 bbcred; /* BB_Credit */ | ||
274 | |||
275 | #ifdef __BIGENDIAN | ||
276 | u8 ciro:1, /* continuously increasing RO */ | ||
277 | rro:1, /* random relative offset */ | ||
278 | npiv_supp:1, /* NPIV supported */ | ||
279 | port_type:1, /* N_Port/F_port */ | ||
280 | altbbcred:1, /* alternate BB_Credit */ | ||
281 | resolution:1, /* ms/ns ED_TOV resolution */ | ||
282 | vvl_info:1, /* VVL Info included */ | ||
283 | reserved1:1; | ||
284 | |||
285 | u8 hg_supp:1, | ||
286 | query_dbc:1, | ||
287 | security:1, | ||
288 | sync_cap:1, | ||
289 | r_t_tov:1, | ||
290 | dh_dup_supp:1, | ||
291 | cisc:1, /* continuously increasing seq count */ | ||
292 | payload:1; | ||
293 | #else | ||
294 | u8 reserved2:2, | ||
295 | resolution:1, /* ms/ns ED_TOV resolution */ | ||
296 | altbbcred:1, /* alternate BB_Credit */ | ||
297 | port_type:1, /* N_Port/F_port */ | ||
298 | npiv_supp:1, /* NPIV supported */ | ||
299 | rro:1, /* random relative offset */ | ||
300 | ciro:1; /* continuously increasing RO */ | ||
301 | |||
302 | u8 payload:1, | ||
303 | cisc:1, /* continuously increasing seq count */ | ||
304 | dh_dup_supp:1, | ||
305 | r_t_tov:1, | ||
306 | sync_cap:1, | ||
307 | security:1, | ||
308 | query_dbc:1, | ||
309 | hg_supp:1; | ||
310 | #endif | ||
311 | |||
312 | u16 rxsz; /* recieve data_field size */ | ||
313 | |||
314 | u16 conseq; | ||
315 | u16 ro_bitmap; | ||
316 | |||
317 | u32 e_d_tov; | ||
318 | }; | ||
319 | |||
320 | /* | ||
321 | * N_Port PLOGI Class Specific Parameters. | ||
322 | * FC-PH-x. Figure 78. pg. 318. | ||
323 | */ | ||
324 | struct fc_plogi_clp_s{ | ||
325 | #ifdef __BIGENDIAN | ||
326 | u32 class_valid:1; | ||
327 | u32 intermix:1; /* class intermix supported if set =1. | ||
328 | * valid only for class1. Reserved for | ||
329 | * class2 & class3 | ||
330 | */ | ||
331 | u32 reserved1:2; | ||
332 | u32 sequential:1; | ||
333 | u32 reserved2:3; | ||
334 | #else | ||
335 | u32 reserved2:3; | ||
336 | u32 sequential:1; | ||
337 | u32 reserved1:2; | ||
338 | u32 intermix:1; /* class intermix supported if set =1. | ||
339 | * valid only for class1. Reserved for | ||
340 | * class2 & class3 | ||
341 | */ | ||
342 | u32 class_valid:1; | ||
343 | #endif | ||
344 | |||
345 | u32 reserved3:24; | ||
346 | |||
347 | u32 reserved4:16; | ||
348 | u32 rxsz:16; /* Receive data_field size */ | ||
349 | |||
350 | u32 reserved5:8; | ||
351 | u32 conseq:8; | ||
352 | u32 e2e_credit:16; /* end to end credit */ | ||
353 | |||
354 | u32 reserved7:8; | ||
355 | u32 ospx:8; | ||
356 | u32 reserved8:16; | ||
357 | }; | ||
358 | |||
359 | #define FLOGI_VVL_BRCD 0x42524344 /* ASCII value for each character in | ||
360 | * string "BRCD" */ | ||
361 | |||
362 | /* | ||
363 | * PLOGI els command and reply payload | ||
364 | */ | ||
365 | struct fc_logi_s{ | ||
366 | struct fc_els_cmd_s els_cmd; /* ELS command code */ | ||
367 | struct fc_plogi_csp_s csp; /* common service params */ | ||
368 | wwn_t port_name; | ||
369 | wwn_t node_name; | ||
370 | struct fc_plogi_clp_s class1; /* class 1 service parameters */ | ||
371 | struct fc_plogi_clp_s class2; /* class 2 service parameters */ | ||
372 | struct fc_plogi_clp_s class3; /* class 3 service parameters */ | ||
373 | struct fc_plogi_clp_s class4; /* class 4 service parameters */ | ||
374 | u8 vvl[16]; /* vendor version level */ | ||
375 | }; | ||
376 | |||
377 | /* | ||
378 | * LOGO els command payload | ||
379 | */ | ||
380 | struct fc_logo_s{ | ||
381 | struct fc_els_cmd_s els_cmd; /* ELS command code */ | ||
382 | u32 res1:8; | ||
383 | u32 nport_id:24; /* N_Port identifier of source */ | ||
384 | wwn_t orig_port_name; /* Port name of the LOGO originator */ | ||
385 | }; | ||
386 | |||
387 | /* | ||
388 | * ADISC els command payload | ||
389 | */ | ||
390 | struct fc_adisc_s { | ||
391 | struct fc_els_cmd_s els_cmd; /* ELS command code */ | ||
392 | u32 res1:8; | ||
393 | u32 orig_HA:24; /* originator hard address */ | ||
394 | wwn_t orig_port_name; /* originator port name */ | ||
395 | wwn_t orig_node_name; /* originator node name */ | ||
396 | u32 res2:8; | ||
397 | u32 nport_id:24; /* originator NPortID */ | ||
398 | }; | ||
399 | |||
400 | /* | ||
401 | * Exchange status block | ||
402 | */ | ||
403 | struct fc_exch_status_blk_s{ | ||
404 | u32 oxid:16; | ||
405 | u32 rxid:16; | ||
406 | u32 res1:8; | ||
407 | u32 orig_np:24; /* originator NPortID */ | ||
408 | u32 res2:8; | ||
409 | u32 resp_np:24; /* responder NPortID */ | ||
410 | u32 es_bits; | ||
411 | u32 res3; | ||
412 | /* | ||
413 | * un modified section of the fields | ||
414 | */ | ||
415 | }; | ||
416 | |||
417 | /* | ||
418 | * RES els command payload | ||
419 | */ | ||
420 | struct fc_res_s { | ||
421 | struct fc_els_cmd_s els_cmd; /* ELS command code */ | ||
422 | u32 res1:8; | ||
423 | u32 nport_id:24; /* N_Port identifier of source */ | ||
424 | u32 oxid:16; | ||
425 | u32 rxid:16; | ||
426 | u8 assoc_hdr[32]; | ||
427 | }; | ||
428 | |||
429 | /* | ||
430 | * RES els accept payload | ||
431 | */ | ||
432 | struct fc_res_acc_s{ | ||
433 | struct fc_els_cmd_s els_cmd; /* ELS command code */ | ||
434 | struct fc_exch_status_blk_s fc_exch_blk; /* Exchange status block */ | ||
435 | }; | ||
436 | |||
437 | /* | ||
438 | * REC els command payload | ||
439 | */ | ||
440 | struct fc_rec_s { | ||
441 | struct fc_els_cmd_s els_cmd; /* ELS command code */ | ||
442 | u32 res1:8; | ||
443 | u32 nport_id:24; /* N_Port identifier of source */ | ||
444 | u32 oxid:16; | ||
445 | u32 rxid:16; | ||
446 | }; | ||
447 | |||
448 | #define FC_REC_ESB_OWN_RSP 0x80000000 /* responder owns */ | ||
449 | #define FC_REC_ESB_SI 0x40000000 /* SI is owned */ | ||
450 | #define FC_REC_ESB_COMP 0x20000000 /* exchange is complete */ | ||
451 | #define FC_REC_ESB_ENDCOND_ABN 0x10000000 /* abnormal ending */ | ||
452 | #define FC_REC_ESB_RQACT 0x04000000 /* recovery qual active */ | ||
453 | #define FC_REC_ESB_ERRP_MSK 0x03000000 | ||
454 | #define FC_REC_ESB_OXID_INV 0x00800000 /* invalid OXID */ | ||
455 | #define FC_REC_ESB_RXID_INV 0x00400000 /* invalid RXID */ | ||
456 | #define FC_REC_ESB_PRIO_INUSE 0x00200000 | ||
457 | |||
458 | /* | ||
459 | * REC els accept payload | ||
460 | */ | ||
461 | struct fc_rec_acc_s { | ||
462 | struct fc_els_cmd_s els_cmd; /* ELS command code */ | ||
463 | u32 oxid:16; | ||
464 | u32 rxid:16; | ||
465 | u32 res1:8; | ||
466 | u32 orig_id:24; /* N_Port id of exchange originator */ | ||
467 | u32 res2:8; | ||
468 | u32 resp_id:24; /* N_Port id of exchange responder */ | ||
469 | u32 count; /* data transfer count */ | ||
470 | u32 e_stat; /* exchange status */ | ||
471 | }; | ||
472 | |||
473 | /* | ||
474 | * RSI els payload | ||
475 | */ | ||
476 | struct fc_rsi_s { | ||
477 | struct fc_els_cmd_s els_cmd; | ||
478 | u32 res1:8; | ||
479 | u32 orig_sid:24; | ||
480 | u32 oxid:16; | ||
481 | u32 rxid:16; | ||
482 | }; | ||
483 | |||
484 | /* | ||
485 | * structure for PRLI paramater pages, both request & response | ||
486 | * see FC-PH-X table 113 & 115 for explanation also FCP table 8 | ||
487 | */ | ||
488 | struct fc_prli_params_s{ | ||
489 | u32 reserved: 16; | ||
490 | #ifdef __BIGENDIAN | ||
491 | u32 reserved1: 5; | ||
492 | u32 rec_support : 1; | ||
493 | u32 task_retry_id : 1; | ||
494 | u32 retry : 1; | ||
495 | |||
496 | u32 confirm : 1; | ||
497 | u32 doverlay:1; | ||
498 | u32 initiator:1; | ||
499 | u32 target:1; | ||
500 | u32 cdmix:1; | ||
501 | u32 drmix:1; | ||
502 | u32 rxrdisab:1; | ||
503 | u32 wxrdisab:1; | ||
504 | #else | ||
505 | u32 retry : 1; | ||
506 | u32 task_retry_id : 1; | ||
507 | u32 rec_support : 1; | ||
508 | u32 reserved1: 5; | ||
509 | |||
510 | u32 wxrdisab:1; | ||
511 | u32 rxrdisab:1; | ||
512 | u32 drmix:1; | ||
513 | u32 cdmix:1; | ||
514 | u32 target:1; | ||
515 | u32 initiator:1; | ||
516 | u32 doverlay:1; | ||
517 | u32 confirm : 1; | ||
518 | #endif | ||
519 | }; | ||
520 | |||
521 | /* | ||
522 | * valid values for rspcode in PRLI ACC payload | ||
523 | */ | ||
524 | enum { | ||
525 | FC_PRLI_ACC_XQTD = 0x1, /* request executed */ | ||
526 | FC_PRLI_ACC_PREDEF_IMG = 0x5, /* predefined image - no prli needed */ | ||
527 | }; | ||
528 | |||
529 | struct fc_prli_params_page_s{ | ||
530 | u32 type:8; | ||
531 | u32 codext:8; | ||
532 | #ifdef __BIGENDIAN | ||
533 | u32 origprocasv:1; | ||
534 | u32 rsppav:1; | ||
535 | u32 imagepair:1; | ||
536 | u32 reserved1:1; | ||
537 | u32 rspcode:4; | ||
538 | #else | ||
539 | u32 rspcode:4; | ||
540 | u32 reserved1:1; | ||
541 | u32 imagepair:1; | ||
542 | u32 rsppav:1; | ||
543 | u32 origprocasv:1; | ||
544 | #endif | ||
545 | u32 reserved2:8; | ||
546 | |||
547 | u32 origprocas; | ||
548 | u32 rspprocas; | ||
549 | struct fc_prli_params_s servparams; | ||
550 | }; | ||
551 | |||
552 | /* | ||
553 | * PRLI request and accept payload, FC-PH-X tables 112 & 114 | ||
554 | */ | ||
555 | struct fc_prli_s{ | ||
556 | u32 command:8; | ||
557 | u32 pglen:8; | ||
558 | u32 pagebytes:16; | ||
559 | struct fc_prli_params_page_s parampage; | ||
560 | }; | ||
561 | |||
562 | /* | ||
563 | * PRLO logout params page | ||
564 | */ | ||
565 | struct fc_prlo_params_page_s{ | ||
566 | u32 type:8; | ||
567 | u32 type_ext:8; | ||
568 | #ifdef __BIGENDIAN | ||
569 | u32 opa_valid:1; /* originator process associator | ||
570 | * valid | ||
571 | */ | ||
572 | u32 rpa_valid:1; /* responder process associator valid */ | ||
573 | u32 res1:14; | ||
574 | #else | ||
575 | u32 res1:14; | ||
576 | u32 rpa_valid:1; /* responder process associator valid */ | ||
577 | u32 opa_valid:1; /* originator process associator | ||
578 | * valid | ||
579 | */ | ||
580 | #endif | ||
581 | u32 orig_process_assc; | ||
582 | u32 resp_process_assc; | ||
583 | |||
584 | u32 res2; | ||
585 | }; | ||
586 | |||
587 | /* | ||
588 | * PRLO els command payload | ||
589 | */ | ||
590 | struct fc_prlo_s{ | ||
591 | u32 command:8; | ||
592 | u32 page_len:8; | ||
593 | u32 payload_len:16; | ||
594 | struct fc_prlo_params_page_s prlo_params[1]; | ||
595 | }; | ||
596 | |||
597 | /* | ||
598 | * PRLO Logout response parameter page | ||
599 | */ | ||
600 | struct fc_prlo_acc_params_page_s{ | ||
601 | u32 type:8; | ||
602 | u32 type_ext:8; | ||
603 | |||
604 | #ifdef __BIGENDIAN | ||
605 | u32 opa_valid:1; /* originator process associator | ||
606 | * valid | ||
607 | */ | ||
608 | u32 rpa_valid:1; /* responder process associator valid */ | ||
609 | u32 res1:14; | ||
610 | #else | ||
611 | u32 res1:14; | ||
612 | u32 rpa_valid:1; /* responder process associator valid */ | ||
613 | u32 opa_valid:1; /* originator process associator | ||
614 | * valid | ||
615 | */ | ||
616 | #endif | ||
617 | u32 orig_process_assc; | ||
618 | u32 resp_process_assc; | ||
619 | |||
620 | u32 fc4type_csp; | ||
621 | }; | ||
622 | |||
623 | /* | ||
624 | * PRLO els command ACC payload | ||
625 | */ | ||
626 | struct fc_prlo_acc_s{ | ||
627 | u32 command:8; | ||
628 | u32 page_len:8; | ||
629 | u32 payload_len:16; | ||
630 | struct fc_prlo_acc_params_page_s prlo_acc_params[1]; | ||
631 | }; | ||
632 | |||
633 | /* | ||
634 | * SCR els command payload | ||
635 | */ | ||
636 | enum { | ||
637 | FC_SCR_REG_FUNC_FABRIC_DETECTED = 0x01, | ||
638 | FC_SCR_REG_FUNC_N_PORT_DETECTED = 0x02, | ||
639 | FC_SCR_REG_FUNC_FULL = 0x03, | ||
640 | FC_SCR_REG_FUNC_CLEAR_REG = 0xFF, | ||
641 | }; | ||
642 | |||
643 | /* SCR VU registrations */ | ||
644 | enum { | ||
645 | FC_VU_SCR_REG_FUNC_FABRIC_NAME_CHANGE = 0x01 | ||
646 | }; | ||
647 | |||
648 | struct fc_scr_s{ | ||
649 | u32 command:8; | ||
650 | u32 res:24; | ||
651 | u32 vu_reg_func:8; /* Vendor Unique Registrations */ | ||
652 | u32 res1:16; | ||
653 | u32 reg_func:8; | ||
654 | }; | ||
655 | |||
656 | /* | ||
657 | * Information category for Basic link data | ||
658 | */ | ||
659 | enum { | ||
660 | FC_CAT_NOP = 0x0, | ||
661 | FC_CAT_ABTS = 0x1, | ||
662 | FC_CAT_RMC = 0x2, | ||
663 | FC_CAT_BA_ACC = 0x4, | ||
664 | FC_CAT_BA_RJT = 0x5, | ||
665 | FC_CAT_PRMT = 0x6, | ||
666 | }; | ||
667 | |||
668 | /* | ||
669 | * LS_RJT els reply payload | ||
670 | */ | ||
671 | struct fc_ls_rjt_s { | ||
672 | struct fc_els_cmd_s els_cmd; /* ELS command code */ | ||
673 | u32 res1:8; | ||
674 | u32 reason_code:8; /* Reason code for reject */ | ||
675 | u32 reason_code_expl:8; /* Reason code explanation */ | ||
676 | u32 vendor_unique:8; /* Vendor specific */ | ||
677 | }; | ||
678 | |||
679 | /* | ||
680 | * LS_RJT reason codes | ||
681 | */ | ||
682 | enum { | ||
683 | FC_LS_RJT_RSN_INV_CMD_CODE = 0x01, | ||
684 | FC_LS_RJT_RSN_LOGICAL_ERROR = 0x03, | ||
685 | FC_LS_RJT_RSN_LOGICAL_BUSY = 0x05, | ||
686 | FC_LS_RJT_RSN_PROTOCOL_ERROR = 0x07, | ||
687 | FC_LS_RJT_RSN_UNABLE_TO_PERF_CMD = 0x09, | ||
688 | FC_LS_RJT_RSN_CMD_NOT_SUPP = 0x0B, | ||
689 | }; | ||
690 | |||
691 | /* | ||
692 | * LS_RJT reason code explanation | ||
693 | */ | ||
694 | enum { | ||
695 | FC_LS_RJT_EXP_NO_ADDL_INFO = 0x00, | ||
696 | FC_LS_RJT_EXP_SPARMS_ERR_OPTIONS = 0x01, | ||
697 | FC_LS_RJT_EXP_SPARMS_ERR_INI_CTL = 0x03, | ||
698 | FC_LS_RJT_EXP_SPARMS_ERR_REC_CTL = 0x05, | ||
699 | FC_LS_RJT_EXP_SPARMS_ERR_RXSZ = 0x07, | ||
700 | FC_LS_RJT_EXP_SPARMS_ERR_CONSEQ = 0x09, | ||
701 | FC_LS_RJT_EXP_SPARMS_ERR_CREDIT = 0x0B, | ||
702 | FC_LS_RJT_EXP_INV_PORT_NAME = 0x0D, | ||
703 | FC_LS_RJT_EXP_INV_NODE_FABRIC_NAME = 0x0E, | ||
704 | FC_LS_RJT_EXP_INV_CSP = 0x0F, | ||
705 | FC_LS_RJT_EXP_INV_ASSOC_HDR = 0x11, | ||
706 | FC_LS_RJT_EXP_ASSOC_HDR_REQD = 0x13, | ||
707 | FC_LS_RJT_EXP_INV_ORIG_S_ID = 0x15, | ||
708 | FC_LS_RJT_EXP_INV_OXID_RXID_COMB = 0x17, | ||
709 | FC_LS_RJT_EXP_CMD_ALREADY_IN_PROG = 0x19, | ||
710 | FC_LS_RJT_EXP_LOGIN_REQUIRED = 0x1E, | ||
711 | FC_LS_RJT_EXP_INVALID_NPORT_ID = 0x1F, | ||
712 | FC_LS_RJT_EXP_INSUFF_RES = 0x29, | ||
713 | FC_LS_RJT_EXP_CMD_NOT_SUPP = 0x2C, | ||
714 | FC_LS_RJT_EXP_INV_PAYLOAD_LEN = 0x2D, | ||
715 | }; | ||
716 | |||
717 | /* | ||
718 | * RRQ els command payload | ||
719 | */ | ||
720 | struct fc_rrq_s{ | ||
721 | struct fc_els_cmd_s els_cmd; /* ELS command code */ | ||
722 | u32 res1:8; | ||
723 | u32 s_id:24; /* exchange originator S_ID */ | ||
724 | |||
725 | u32 ox_id:16; /* originator exchange ID */ | ||
726 | u32 rx_id:16; /* responder exchange ID */ | ||
727 | |||
728 | u32 res2[8]; /* optional association header */ | ||
729 | }; | ||
730 | |||
731 | /* | ||
732 | * ABTS BA_ACC reply payload | ||
733 | */ | ||
734 | struct fc_ba_acc_s{ | ||
735 | u32 seq_id_valid:8; /* set to 0x00 for Abort Exchange */ | ||
736 | u32 seq_id:8; /* invalid for Abort Exchange */ | ||
737 | u32 res2:16; | ||
738 | u32 ox_id:16; /* OX_ID from ABTS frame */ | ||
739 | u32 rx_id:16; /* RX_ID from ABTS frame */ | ||
740 | u32 low_seq_cnt:16; /* set to 0x0000 for Abort Exchange */ | ||
741 | u32 high_seq_cnt:16;/* set to 0xFFFF for Abort Exchange */ | ||
742 | }; | ||
743 | |||
744 | /* | ||
745 | * ABTS BA_RJT reject payload | ||
746 | */ | ||
747 | struct fc_ba_rjt_s{ | ||
748 | u32 res1:8; /* Reserved */ | ||
749 | u32 reason_code:8; /* reason code for reject */ | ||
750 | u32 reason_expl:8; /* reason code explanation */ | ||
751 | u32 vendor_unique:8;/* vendor unique reason code,set to 0 */ | ||
752 | }; | ||
753 | |||
754 | /* | ||
755 | * TPRLO logout parameter page | ||
756 | */ | ||
757 | struct fc_tprlo_params_page_s{ | ||
758 | u32 type:8; | ||
759 | u32 type_ext:8; | ||
760 | |||
761 | #ifdef __BIGENDIAN | ||
762 | u32 opa_valid:1; | ||
763 | u32 rpa_valid:1; | ||
764 | u32 tpo_nport_valid:1; | ||
765 | u32 global_process_logout:1; | ||
766 | u32 res1:12; | ||
767 | #else | ||
768 | u32 res1:12; | ||
769 | u32 global_process_logout:1; | ||
770 | u32 tpo_nport_valid:1; | ||
771 | u32 rpa_valid:1; | ||
772 | u32 opa_valid:1; | ||
773 | #endif | ||
774 | |||
775 | u32 orig_process_assc; | ||
776 | u32 resp_process_assc; | ||
777 | |||
778 | u32 res2:8; | ||
779 | u32 tpo_nport_id; | ||
780 | }; | ||
781 | |||
782 | /* | ||
783 | * TPRLO ELS command payload | ||
784 | */ | ||
785 | struct fc_tprlo_s{ | ||
786 | u32 command:8; | ||
787 | u32 page_len:8; | ||
788 | u32 payload_len:16; | ||
789 | |||
790 | struct fc_tprlo_params_page_s tprlo_params[1]; | ||
791 | }; | ||
792 | |||
793 | enum fc_tprlo_type{ | ||
794 | FC_GLOBAL_LOGO = 1, | ||
795 | FC_TPR_LOGO | ||
796 | }; | ||
797 | |||
798 | /* | ||
799 | * TPRLO els command ACC payload | ||
800 | */ | ||
801 | struct fc_tprlo_acc_s{ | ||
802 | u32 command:8; | ||
803 | u32 page_len:8; | ||
804 | u32 payload_len:16; | ||
805 | struct fc_prlo_acc_params_page_s tprlo_acc_params[1]; | ||
806 | }; | ||
807 | |||
808 | /* | ||
809 | * RSCN els command req payload | ||
810 | */ | ||
811 | #define FC_RSCN_PGLEN 0x4 | ||
812 | |||
813 | enum fc_rscn_format{ | ||
814 | FC_RSCN_FORMAT_PORTID = 0x0, | ||
815 | FC_RSCN_FORMAT_AREA = 0x1, | ||
816 | FC_RSCN_FORMAT_DOMAIN = 0x2, | ||
817 | FC_RSCN_FORMAT_FABRIC = 0x3, | ||
818 | }; | ||
819 | |||
820 | struct fc_rscn_event_s{ | ||
821 | u32 format:2; | ||
822 | u32 qualifier:4; | ||
823 | u32 resvd:2; | ||
824 | u32 portid:24; | ||
825 | }; | ||
826 | |||
827 | struct fc_rscn_pl_s{ | ||
828 | u8 command; | ||
829 | u8 pagelen; | ||
830 | u16 payldlen; | ||
831 | struct fc_rscn_event_s event[1]; | ||
832 | }; | ||
833 | |||
834 | /* | ||
835 | * ECHO els command req payload | ||
836 | */ | ||
837 | struct fc_echo_s { | ||
838 | struct fc_els_cmd_s els_cmd; | ||
839 | }; | ||
840 | |||
841 | /* | ||
842 | * RNID els command | ||
843 | */ | ||
844 | |||
845 | #define RNID_NODEID_DATA_FORMAT_COMMON 0x00 | ||
846 | #define RNID_NODEID_DATA_FORMAT_FCP3 0x08 | ||
847 | #define RNID_NODEID_DATA_FORMAT_DISCOVERY 0xDF | ||
848 | |||
849 | #define RNID_ASSOCIATED_TYPE_UNKNOWN 0x00000001 | ||
850 | #define RNID_ASSOCIATED_TYPE_OTHER 0x00000002 | ||
851 | #define RNID_ASSOCIATED_TYPE_HUB 0x00000003 | ||
852 | #define RNID_ASSOCIATED_TYPE_SWITCH 0x00000004 | ||
853 | #define RNID_ASSOCIATED_TYPE_GATEWAY 0x00000005 | ||
854 | #define RNID_ASSOCIATED_TYPE_STORAGE_DEVICE 0x00000009 | ||
855 | #define RNID_ASSOCIATED_TYPE_HOST 0x0000000A | ||
856 | #define RNID_ASSOCIATED_TYPE_STORAGE_SUBSYSTEM 0x0000000B | ||
857 | #define RNID_ASSOCIATED_TYPE_STORAGE_ACCESS_DEVICE 0x0000000E | ||
858 | #define RNID_ASSOCIATED_TYPE_NAS_SERVER 0x00000011 | ||
859 | #define RNID_ASSOCIATED_TYPE_BRIDGE 0x00000002 | ||
860 | #define RNID_ASSOCIATED_TYPE_VIRTUALIZATION_DEVICE 0x00000003 | ||
861 | #define RNID_ASSOCIATED_TYPE_MULTI_FUNCTION_DEVICE 0x000000FF | ||
862 | |||
863 | /* | ||
864 | * RNID els command payload | ||
865 | */ | ||
866 | struct fc_rnid_cmd_s{ | ||
867 | struct fc_els_cmd_s els_cmd; | ||
868 | u32 node_id_data_format:8; | ||
869 | u32 reserved:24; | ||
870 | }; | ||
871 | |||
872 | /* | ||
873 | * RNID els response payload | ||
874 | */ | ||
875 | |||
876 | struct fc_rnid_common_id_data_s{ | ||
877 | wwn_t port_name; | ||
878 | wwn_t node_name; | ||
879 | }; | ||
880 | |||
881 | struct fc_rnid_general_topology_data_s{ | ||
882 | u32 vendor_unique[4]; | ||
883 | u32 asso_type; | ||
884 | u32 phy_port_num; | ||
885 | u32 num_attached_nodes; | ||
886 | u32 node_mgmt:8; | ||
887 | u32 ip_version:8; | ||
888 | u32 udp_tcp_port_num:16; | ||
889 | u32 ip_address[4]; | ||
890 | u32 reserved:16; | ||
891 | u32 vendor_specific:16; | ||
892 | }; | ||
893 | |||
894 | struct fc_rnid_acc_s{ | ||
895 | struct fc_els_cmd_s els_cmd; | ||
896 | u32 node_id_data_format:8; | ||
897 | u32 common_id_data_length:8; | ||
898 | u32 reserved:8; | ||
899 | u32 specific_id_data_length:8; | ||
900 | struct fc_rnid_common_id_data_s common_id_data; | ||
901 | struct fc_rnid_general_topology_data_s gen_topology_data; | ||
902 | }; | ||
903 | |||
904 | #define RNID_ASSOCIATED_TYPE_UNKNOWN 0x00000001 | ||
905 | #define RNID_ASSOCIATED_TYPE_OTHER 0x00000002 | ||
906 | #define RNID_ASSOCIATED_TYPE_HUB 0x00000003 | ||
907 | #define RNID_ASSOCIATED_TYPE_SWITCH 0x00000004 | ||
908 | #define RNID_ASSOCIATED_TYPE_GATEWAY 0x00000005 | ||
909 | #define RNID_ASSOCIATED_TYPE_STORAGE_DEVICE 0x00000009 | ||
910 | #define RNID_ASSOCIATED_TYPE_HOST 0x0000000A | ||
911 | #define RNID_ASSOCIATED_TYPE_STORAGE_SUBSYSTEM 0x0000000B | ||
912 | #define RNID_ASSOCIATED_TYPE_STORAGE_ACCESS_DEVICE 0x0000000E | ||
913 | #define RNID_ASSOCIATED_TYPE_NAS_SERVER 0x00000011 | ||
914 | #define RNID_ASSOCIATED_TYPE_BRIDGE 0x00000002 | ||
915 | #define RNID_ASSOCIATED_TYPE_VIRTUALIZATION_DEVICE 0x00000003 | ||
916 | #define RNID_ASSOCIATED_TYPE_MULTI_FUNCTION_DEVICE 0x000000FF | ||
917 | |||
918 | enum fc_rpsc_speed_cap{ | ||
919 | RPSC_SPEED_CAP_1G = 0x8000, | ||
920 | RPSC_SPEED_CAP_2G = 0x4000, | ||
921 | RPSC_SPEED_CAP_4G = 0x2000, | ||
922 | RPSC_SPEED_CAP_10G = 0x1000, | ||
923 | RPSC_SPEED_CAP_8G = 0x0800, | ||
924 | RPSC_SPEED_CAP_16G = 0x0400, | ||
925 | |||
926 | RPSC_SPEED_CAP_UNKNOWN = 0x0001, | ||
927 | }; | ||
928 | |||
929 | enum fc_rpsc_op_speed_s{ | ||
930 | RPSC_OP_SPEED_1G = 0x8000, | ||
931 | RPSC_OP_SPEED_2G = 0x4000, | ||
932 | RPSC_OP_SPEED_4G = 0x2000, | ||
933 | RPSC_OP_SPEED_10G = 0x1000, | ||
934 | RPSC_OP_SPEED_8G = 0x0800, | ||
935 | RPSC_OP_SPEED_16G = 0x0400, | ||
936 | |||
937 | RPSC_OP_SPEED_NOT_EST = 0x0001, /*! speed not established */ | ||
938 | }; | ||
939 | |||
940 | struct fc_rpsc_speed_info_s{ | ||
941 | u16 port_speed_cap; /*! see fc_rpsc_speed_cap_t */ | ||
942 | u16 port_op_speed; /*! see fc_rpsc_op_speed_t */ | ||
943 | }; | ||
944 | |||
945 | enum link_e2e_beacon_subcmd{ | ||
946 | LINK_E2E_BEACON_ON = 1, | ||
947 | LINK_E2E_BEACON_OFF = 2 | ||
948 | }; | ||
949 | |||
950 | enum beacon_type{ | ||
951 | BEACON_TYPE_NORMAL = 1, /*! Normal Beaconing. Green */ | ||
952 | BEACON_TYPE_WARN = 2, /*! Warning Beaconing. Yellow/Amber */ | ||
953 | BEACON_TYPE_CRITICAL = 3 /*! Critical Beaconing. Red */ | ||
954 | }; | ||
955 | |||
956 | struct link_e2e_beacon_param_s { | ||
957 | u8 beacon_type; /* Beacon Type. See beacon_type_t */ | ||
958 | u8 beacon_frequency; | ||
959 | /* Beacon frequency. Number of blinks | ||
960 | * per 10 seconds | ||
961 | */ | ||
962 | u16 beacon_duration;/* Beacon duration (in Seconds). The | ||
963 | * command operation should be | ||
964 | * terminated at the end of this | ||
965 | * timeout value. | ||
966 | * | ||
967 | * Ignored if diag_sub_cmd is | ||
968 | * LINK_E2E_BEACON_OFF. | ||
969 | * | ||
970 | * If 0, beaconing will continue till a | ||
971 | * BEACON OFF request is received | ||
972 | */ | ||
973 | }; | ||
974 | |||
975 | /* | ||
976 | * Link E2E beacon request/good response format. For LS_RJTs use fc_ls_rjt_t | ||
977 | */ | ||
978 | struct link_e2e_beacon_req_s{ | ||
979 | u32 ls_code; /*! FC_ELS_E2E_LBEACON in requests * | ||
980 | *or FC_ELS_ACC in good replies */ | ||
981 | u32 ls_sub_cmd; /*! See link_e2e_beacon_subcmd_t */ | ||
982 | struct link_e2e_beacon_param_s beacon_parm; | ||
983 | }; | ||
984 | |||
985 | /** | ||
986 | * If RPSC request is sent to the Domain Controller, the request is for | ||
987 | * all the ports within that domain (TODO - I don't think FOS implements | ||
988 | * this...). | ||
989 | */ | ||
990 | struct fc_rpsc_cmd_s{ | ||
991 | struct fc_els_cmd_s els_cmd; | ||
992 | }; | ||
993 | |||
994 | /* | ||
995 | * RPSC Acc | ||
996 | */ | ||
997 | struct fc_rpsc_acc_s{ | ||
998 | u32 command:8; | ||
999 | u32 rsvd:8; | ||
1000 | u32 num_entries:16; | ||
1001 | |||
1002 | struct fc_rpsc_speed_info_s speed_info[1]; | ||
1003 | }; | ||
1004 | |||
1005 | /** | ||
1006 | * If RPSC2 request is sent to the Domain Controller, | ||
1007 | */ | ||
1008 | #define FC_BRCD_TOKEN 0x42524344 | ||
1009 | |||
1010 | struct fc_rpsc2_cmd_s{ | ||
1011 | struct fc_els_cmd_s els_cmd; | ||
1012 | u32 token; | ||
1013 | u16 resvd; | ||
1014 | u16 num_pids; /* Number of pids in the request */ | ||
1015 | struct { | ||
1016 | u32 rsvd1:8; | ||
1017 | u32 pid:24; /* port identifier */ | ||
1018 | } pid_list[1]; | ||
1019 | }; | ||
1020 | |||
1021 | enum fc_rpsc2_port_type{ | ||
1022 | RPSC2_PORT_TYPE_UNKNOWN = 0, | ||
1023 | RPSC2_PORT_TYPE_NPORT = 1, | ||
1024 | RPSC2_PORT_TYPE_NLPORT = 2, | ||
1025 | RPSC2_PORT_TYPE_NPIV_PORT = 0x5f, | ||
1026 | RPSC2_PORT_TYPE_NPORT_TRUNK = 0x6f, | ||
1027 | }; | ||
1028 | |||
1029 | /* | ||
1030 | * RPSC2 portInfo entry structure | ||
1031 | */ | ||
1032 | struct fc_rpsc2_port_info_s{ | ||
1033 | u32 pid; /* PID */ | ||
1034 | u16 resvd1; | ||
1035 | u16 index; /* port number / index */ | ||
1036 | u8 resvd2; | ||
1037 | u8 type; /* port type N/NL/... */ | ||
1038 | u16 speed; /* port Operating Speed */ | ||
1039 | }; | ||
1040 | |||
1041 | /* | ||
1042 | * RPSC2 Accept payload | ||
1043 | */ | ||
1044 | struct fc_rpsc2_acc_s{ | ||
1045 | u8 els_cmd; | ||
1046 | u8 resvd; | ||
1047 | u16 num_pids; /* Number of pids in the request */ | ||
1048 | struct fc_rpsc2_port_info_s port_info[1]; /* port information */ | ||
1049 | }; | ||
1050 | |||
1051 | /** | ||
1052 | * bit fields so that multiple classes can be specified | ||
1053 | */ | ||
1054 | enum fc_cos{ | ||
1055 | FC_CLASS_2 = 0x04, | ||
1056 | FC_CLASS_3 = 0x08, | ||
1057 | FC_CLASS_2_3 = 0x0C, | ||
1058 | }; | ||
1059 | |||
1060 | /* | ||
1061 | * symbolic name | ||
1062 | */ | ||
1063 | struct fc_symname_s{ | ||
1064 | u8 symname[FC_SYMNAME_MAX]; | ||
1065 | }; | ||
1066 | |||
1067 | struct fc_alpabm_s{ | ||
1068 | u8 alpa_bm[FC_ALPA_MAX / 8]; | ||
1069 | }; | ||
1070 | |||
1071 | /* | ||
1072 | * protocol default timeout values | ||
1073 | */ | ||
1074 | #define FC_ED_TOV 2 | ||
1075 | #define FC_REC_TOV (FC_ED_TOV + 1) | ||
1076 | #define FC_RA_TOV 10 | ||
1077 | #define FC_ELS_TOV (2 * FC_RA_TOV) | ||
1078 | |||
1079 | /* | ||
1080 | * virtual fabric related defines | ||
1081 | */ | ||
1082 | #define FC_VF_ID_NULL 0 /* must not be used as VF_ID */ | ||
1083 | #define FC_VF_ID_MIN 1 | ||
1084 | #define FC_VF_ID_MAX 0xEFF | ||
1085 | #define FC_VF_ID_CTL 0xFEF /* control VF_ID */ | ||
1086 | |||
1087 | /** | ||
1088 | * Virtual Fabric Tagging header format | ||
1089 | * @caution This is defined only in BIG ENDIAN format. | ||
1090 | */ | ||
1091 | struct fc_vft_s{ | ||
1092 | u32 r_ctl:8; | ||
1093 | u32 ver:2; | ||
1094 | u32 type:4; | ||
1095 | u32 res_a:2; | ||
1096 | u32 priority:3; | ||
1097 | u32 vf_id:12; | ||
1098 | u32 res_b:1; | ||
1099 | u32 hopct:8; | ||
1100 | u32 res_c:24; | ||
1101 | }; | ||
1102 | |||
1103 | #pragma pack() | ||
1104 | |||
1105 | #endif | ||
diff --git a/drivers/scsi/bfa/include/protocol/fc_sp.h b/drivers/scsi/bfa/include/protocol/fc_sp.h new file mode 100644 index 000000000000..55bb0b31d04b --- /dev/null +++ b/drivers/scsi/bfa/include/protocol/fc_sp.h | |||
@@ -0,0 +1,224 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __FC_SP_H__ | ||
19 | #define __FC_SP_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | enum auth_els_flags{ | ||
26 | FC_AUTH_ELS_MORE_FRAGS_FLAG = 0x80, /*! bit-7. More Fragments | ||
27 | * Follow | ||
28 | */ | ||
29 | FC_AUTH_ELS_CONCAT_FLAG = 0x40, /*! bit-6. Concatenation Flag */ | ||
30 | FC_AUTH_ELS_SEQ_NUM_FLAG = 0x01 /*! bit-0. Sequence Number */ | ||
31 | }; | ||
32 | |||
33 | enum auth_msg_codes{ | ||
34 | FC_AUTH_MC_AUTH_RJT = 0x0A, /*! Auth Reject */ | ||
35 | FC_AUTH_MC_AUTH_NEG = 0x0B, /*! Auth Negotiate */ | ||
36 | FC_AUTH_MC_AUTH_DONE = 0x0C, /*! Auth Done */ | ||
37 | |||
38 | FC_AUTH_MC_DHCHAP_CHAL = 0x10, /*! DHCHAP Challenge */ | ||
39 | FC_AUTH_MC_DHCHAP_REPLY = 0x11, /*! DHCHAP Reply */ | ||
40 | FC_AUTH_MC_DHCHAP_SUCC = 0x12, /*! DHCHAP Success */ | ||
41 | |||
42 | FC_AUTH_MC_FCAP_REQ = 0x13, /*! FCAP Request */ | ||
43 | FC_AUTH_MC_FCAP_ACK = 0x14, /*! FCAP Acknowledge */ | ||
44 | FC_AUTH_MC_FCAP_CONF = 0x15, /*! FCAP Confirm */ | ||
45 | |||
46 | FC_AUTH_MC_FCPAP_INIT = 0x16, /*! FCPAP Init */ | ||
47 | FC_AUTH_MC_FCPAP_ACC = 0x17, /*! FCPAP Accept */ | ||
48 | FC_AUTH_MC_FCPAP_COMP = 0x18, /*! FCPAP Complete */ | ||
49 | |||
50 | FC_AUTH_MC_IKE_SA_INIT = 0x22, /*! IKE SA INIT */ | ||
51 | FC_AUTH_MC_IKE_SA_AUTH = 0x23, /*! IKE SA Auth */ | ||
52 | FC_AUTH_MC_IKE_CREATE_CHILD_SA = 0x24, /*! IKE Create Child SA */ | ||
53 | FC_AUTH_MC_IKE_INFO = 0x25, /*! IKE informational */ | ||
54 | }; | ||
55 | |||
56 | enum auth_proto_version{ | ||
57 | FC_AUTH_PROTO_VER_1 = 1, /*! Protocol Version 1 */ | ||
58 | }; | ||
59 | |||
60 | enum { | ||
61 | FC_AUTH_ELS_COMMAND_CODE = 0x90,/*! Authentication ELS Command code */ | ||
62 | FC_AUTH_PROTO_PARAM_LEN_SZ = 4, /*! Size of Proto Parameter Len Field */ | ||
63 | FC_AUTH_PROTO_PARAM_VAL_SZ = 4, /*! Size of Proto Parameter Val Field */ | ||
64 | FC_MAX_AUTH_SECRET_LEN = 256, | ||
65 | /*! Maximum secret string length */ | ||
66 | FC_AUTH_NUM_USABLE_PROTO_LEN_SZ = 4, | ||
67 | /*! Size of usable protocols field */ | ||
68 | FC_AUTH_RESP_VALUE_LEN_SZ = 4, | ||
69 | /*! Size of response value length */ | ||
70 | FC_MAX_CHAP_KEY_LEN = 256, /*! Maximum md5 digest length */ | ||
71 | FC_MAX_AUTH_RETRIES = 3, /*! Maximum number of retries */ | ||
72 | FC_MD5_DIGEST_LEN = 16, /*! MD5 digest length */ | ||
73 | FC_SHA1_DIGEST_LEN = 20, /*! SHA1 digest length */ | ||
74 | FC_MAX_DHG_SUPPORTED = 1, /*! Maximum DH Groups supported */ | ||
75 | FC_MAX_ALG_SUPPORTED = 1, /*! Maximum algorithms supported */ | ||
76 | FC_MAX_PROTO_SUPPORTED = 1, /*! Maximum protocols supported */ | ||
77 | FC_START_TXN_ID = 2, /*! Starting transaction ID */ | ||
78 | }; | ||
79 | |||
80 | enum auth_proto_id{ | ||
81 | FC_AUTH_PROTO_DHCHAP = 0x00000001, | ||
82 | FC_AUTH_PROTO_FCAP = 0x00000002, | ||
83 | FC_AUTH_PROTO_FCPAP = 0x00000003, | ||
84 | FC_AUTH_PROTO_IKEv2 = 0x00000004, | ||
85 | FC_AUTH_PROTO_IKEv2_AUTH = 0x00000005, | ||
86 | }; | ||
87 | |||
88 | struct auth_name_s{ | ||
89 | u16 name_tag; /*! Name Tag = 1 for Authentication */ | ||
90 | u16 name_len; /*! Name Length = 8 for Authentication | ||
91 | */ | ||
92 | wwn_t name; /*! Name. TODO - is this PWWN */ | ||
93 | }; | ||
94 | |||
95 | |||
96 | enum auth_hash_func{ | ||
97 | FC_AUTH_HASH_FUNC_MD5 = 0x00000005, | ||
98 | FC_AUTH_HASH_FUNC_SHA_1 = 0x00000006, | ||
99 | }; | ||
100 | |||
101 | enum auth_dh_gid{ | ||
102 | FC_AUTH_DH_GID_0_DHG_NULL = 0x00000000, | ||
103 | FC_AUTH_DH_GID_1_DHG_1024 = 0x00000001, | ||
104 | FC_AUTH_DH_GID_2_DHG_1280 = 0x00000002, | ||
105 | FC_AUTH_DH_GID_3_DHG_1536 = 0x00000003, | ||
106 | FC_AUTH_DH_GID_4_DHG_2048 = 0x00000004, | ||
107 | FC_AUTH_DH_GID_6_DHG_3072 = 0x00000006, | ||
108 | FC_AUTH_DH_GID_7_DHG_4096 = 0x00000007, | ||
109 | FC_AUTH_DH_GID_8_DHG_6144 = 0x00000008, | ||
110 | FC_AUTH_DH_GID_9_DHG_8192 = 0x00000009, | ||
111 | }; | ||
112 | |||
113 | struct auth_els_msg_s { | ||
114 | u8 auth_els_code; /* Authentication ELS Code (0x90) */ | ||
115 | u8 auth_els_flag; /* Authentication ELS Flags */ | ||
116 | u8 auth_msg_code; /* Authentication Message Code */ | ||
117 | u8 proto_version; /* Protocol Version */ | ||
118 | u32 msg_len; /* Message Length */ | ||
119 | u32 trans_id; /* Transaction Identifier (T_ID) */ | ||
120 | |||
121 | /* Msg payload follows... */ | ||
122 | }; | ||
123 | |||
124 | |||
125 | enum auth_neg_param_tags { | ||
126 | FC_AUTH_NEG_DHCHAP_HASHLIST = 0x0001, | ||
127 | FC_AUTH_NEG_DHCHAP_DHG_ID_LIST = 0x0002, | ||
128 | }; | ||
129 | |||
130 | |||
131 | struct dhchap_param_format_s { | ||
132 | u16 tag; /*! Parameter Tag. See | ||
133 | * auth_neg_param_tags_t | ||
134 | */ | ||
135 | u16 word_cnt; | ||
136 | |||
137 | /* followed by variable length parameter value... */ | ||
138 | }; | ||
139 | |||
140 | struct auth_proto_params_s { | ||
141 | u32 proto_param_len; | ||
142 | u32 proto_id; | ||
143 | |||
144 | /* | ||
145 | * Followed by variable length Protocol specific parameters. DH-CHAP | ||
146 | * uses dhchap_param_format_t | ||
147 | */ | ||
148 | }; | ||
149 | |||
150 | struct auth_neg_msg_s { | ||
151 | struct auth_name_s auth_ini_name; | ||
152 | u32 usable_auth_protos; | ||
153 | struct auth_proto_params_s proto_params[1]; /*! (1..usable_auth_proto) | ||
154 | * protocol params | ||
155 | */ | ||
156 | }; | ||
157 | |||
158 | struct auth_dh_val_s { | ||
159 | u32 dh_val_len; | ||
160 | u32 dh_val[1]; | ||
161 | }; | ||
162 | |||
163 | struct auth_dhchap_chal_msg_s { | ||
164 | struct auth_els_msg_s hdr; | ||
165 | struct auth_name_s auth_responder_name; /* TODO VRK - is auth_name_t | ||
166 | * type OK? | ||
167 | */ | ||
168 | u32 hash_id; | ||
169 | u32 dh_grp_id; | ||
170 | u32 chal_val_len; | ||
171 | char chal_val[1]; | ||
172 | |||
173 | /* ...followed by variable Challenge length/value and DH length/value */ | ||
174 | }; | ||
175 | |||
176 | |||
177 | enum auth_rjt_codes { | ||
178 | FC_AUTH_RJT_CODE_AUTH_FAILURE = 0x01, | ||
179 | FC_AUTH_RJT_CODE_LOGICAL_ERR = 0x02, | ||
180 | }; | ||
181 | |||
182 | enum auth_rjt_code_exps { | ||
183 | FC_AUTH_CEXP_AUTH_MECH_NOT_USABLE = 0x01, | ||
184 | FC_AUTH_CEXP_DH_GROUP_NOT_USABLE = 0x02, | ||
185 | FC_AUTH_CEXP_HASH_FUNC_NOT_USABLE = 0x03, | ||
186 | FC_AUTH_CEXP_AUTH_XACT_STARTED = 0x04, | ||
187 | FC_AUTH_CEXP_AUTH_FAILED = 0x05, | ||
188 | FC_AUTH_CEXP_INCORRECT_PLD = 0x06, | ||
189 | FC_AUTH_CEXP_INCORRECT_PROTO_MSG = 0x07, | ||
190 | FC_AUTH_CEXP_RESTART_AUTH_PROTO = 0x08, | ||
191 | FC_AUTH_CEXP_AUTH_CONCAT_NOT_SUPP = 0x09, | ||
192 | FC_AUTH_CEXP_PROTO_VER_NOT_SUPP = 0x0A, | ||
193 | }; | ||
194 | |||
195 | enum auth_status { | ||
196 | FC_AUTH_STATE_INPROGRESS = 0, /*! authentication in progress */ | ||
197 | FC_AUTH_STATE_FAILED = 1, /*! authentication failed */ | ||
198 | FC_AUTH_STATE_SUCCESS = 2 /*! authentication successful */ | ||
199 | }; | ||
200 | |||
201 | struct auth_rjt_msg_s { | ||
202 | struct auth_els_msg_s hdr; | ||
203 | u8 reason_code; | ||
204 | u8 reason_code_exp; | ||
205 | u8 rsvd[2]; | ||
206 | }; | ||
207 | |||
208 | |||
209 | struct auth_dhchap_neg_msg_s { | ||
210 | struct auth_els_msg_s hdr; | ||
211 | struct auth_neg_msg_s nego; | ||
212 | }; | ||
213 | |||
214 | struct auth_dhchap_reply_msg_s { | ||
215 | struct auth_els_msg_s hdr; | ||
216 | |||
217 | /* | ||
218 | * followed by response value length & Value + DH Value Length & Value | ||
219 | */ | ||
220 | }; | ||
221 | |||
222 | #pragma pack() | ||
223 | |||
224 | #endif /* __FC_SP_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/protocol/fcp.h b/drivers/scsi/bfa/include/protocol/fcp.h new file mode 100644 index 000000000000..9ade68ad2853 --- /dev/null +++ b/drivers/scsi/bfa/include/protocol/fcp.h | |||
@@ -0,0 +1,186 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __FCPPROTO_H__ | ||
19 | #define __FCPPROTO_H__ | ||
20 | |||
21 | #include <protocol/scsi.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | enum { | ||
26 | FCP_RJT = 0x01000000, /* SRR reject */ | ||
27 | FCP_SRR_ACCEPT = 0x02000000, /* SRR accept */ | ||
28 | FCP_SRR = 0x14000000, /* Sequence Retransmission Request */ | ||
29 | }; | ||
30 | |||
31 | /* | ||
32 | * SRR FC-4 LS payload | ||
33 | */ | ||
34 | struct fc_srr_s{ | ||
35 | u32 ls_cmd; | ||
36 | u32 ox_id:16; /* ox-id */ | ||
37 | u32 rx_id:16; /* rx-id */ | ||
38 | u32 ro; /* relative offset */ | ||
39 | u32 r_ctl:8; /* R_CTL for I.U. */ | ||
40 | u32 res:24; | ||
41 | }; | ||
42 | |||
43 | |||
44 | /* | ||
45 | * FCP_CMND definitions | ||
46 | */ | ||
47 | #define FCP_CMND_CDB_LEN 16 | ||
48 | #define FCP_CMND_LUN_LEN 8 | ||
49 | |||
50 | struct fcp_cmnd_s{ | ||
51 | lun_t lun; /* 64-bit LU number */ | ||
52 | u8 crn; /* command reference number */ | ||
53 | #ifdef __BIGENDIAN | ||
54 | u8 resvd:1, | ||
55 | priority:4, /* FCP-3: SAM-3 priority */ | ||
56 | taskattr:3; /* scsi task attribute */ | ||
57 | #else | ||
58 | u8 taskattr:3, /* scsi task attribute */ | ||
59 | priority:4, /* FCP-3: SAM-3 priority */ | ||
60 | resvd:1; | ||
61 | #endif | ||
62 | u8 tm_flags; /* task management flags */ | ||
63 | #ifdef __BIGENDIAN | ||
64 | u8 addl_cdb_len:6, /* additional CDB length words */ | ||
65 | iodir:2; /* read/write FCP_DATA IUs */ | ||
66 | #else | ||
67 | u8 iodir:2, /* read/write FCP_DATA IUs */ | ||
68 | addl_cdb_len:6; /* additional CDB length */ | ||
69 | #endif | ||
70 | struct scsi_cdb_s cdb; | ||
71 | |||
72 | /* | ||
73 | * !!! additional cdb bytes follows here!!! | ||
74 | */ | ||
75 | u32 fcp_dl; /* bytes to be transferred */ | ||
76 | }; | ||
77 | |||
78 | #define fcp_cmnd_cdb_len(_cmnd) ((_cmnd)->addl_cdb_len * 4 + FCP_CMND_CDB_LEN) | ||
79 | #define fcp_cmnd_fcpdl(_cmnd) ((&(_cmnd)->fcp_dl)[(_cmnd)->addl_cdb_len]) | ||
80 | |||
81 | /* | ||
82 | * fcp_cmnd_t.iodir field values | ||
83 | */ | ||
84 | enum fcp_iodir{ | ||
85 | FCP_IODIR_NONE = 0, | ||
86 | FCP_IODIR_WRITE = 1, | ||
87 | FCP_IODIR_READ = 2, | ||
88 | FCP_IODIR_RW = 3, | ||
89 | }; | ||
90 | |||
91 | /* | ||
92 | * Task attribute field | ||
93 | */ | ||
94 | enum { | ||
95 | FCP_TASK_ATTR_SIMPLE = 0, | ||
96 | FCP_TASK_ATTR_HOQ = 1, | ||
97 | FCP_TASK_ATTR_ORDERED = 2, | ||
98 | FCP_TASK_ATTR_ACA = 4, | ||
99 | FCP_TASK_ATTR_UNTAGGED = 5, /* obsolete in FCP-3 */ | ||
100 | }; | ||
101 | |||
102 | /* | ||
103 | * Task management flags field - only one bit shall be set | ||
104 | */ | ||
105 | #ifndef BIT | ||
106 | #define BIT(_x) (1 << (_x)) | ||
107 | #endif | ||
108 | enum fcp_tm_cmnd{ | ||
109 | FCP_TM_ABORT_TASK_SET = BIT(1), | ||
110 | FCP_TM_CLEAR_TASK_SET = BIT(2), | ||
111 | FCP_TM_LUN_RESET = BIT(4), | ||
112 | FCP_TM_TARGET_RESET = BIT(5), /* obsolete in FCP-3 */ | ||
113 | FCP_TM_CLEAR_ACA = BIT(6), | ||
114 | }; | ||
115 | |||
116 | /* | ||
117 | * FCP_XFER_RDY IU defines | ||
118 | */ | ||
119 | struct fcp_xfer_rdy_s{ | ||
120 | u32 data_ro; | ||
121 | u32 burst_len; | ||
122 | u32 reserved; | ||
123 | }; | ||
124 | |||
125 | /* | ||
126 | * FCP_RSP residue flags | ||
127 | */ | ||
128 | enum fcp_residue{ | ||
129 | FCP_NO_RESIDUE = 0, /* no residue */ | ||
130 | FCP_RESID_OVER = 1, /* more data left that was not sent */ | ||
131 | FCP_RESID_UNDER = 2, /* less data than requested */ | ||
132 | }; | ||
133 | |||
134 | enum { | ||
135 | FCP_RSPINFO_GOOD = 0, | ||
136 | FCP_RSPINFO_DATALEN_MISMATCH = 1, | ||
137 | FCP_RSPINFO_CMND_INVALID = 2, | ||
138 | FCP_RSPINFO_ROLEN_MISMATCH = 3, | ||
139 | FCP_RSPINFO_TM_NOT_SUPP = 4, | ||
140 | FCP_RSPINFO_TM_FAILED = 5, | ||
141 | }; | ||
142 | |||
143 | struct fcp_rspinfo_s{ | ||
144 | u32 res0:24; | ||
145 | u32 rsp_code:8; /* response code (as above) */ | ||
146 | u32 res1; | ||
147 | }; | ||
148 | |||
149 | struct fcp_resp_s{ | ||
150 | u32 reserved[2]; /* 2 words reserved */ | ||
151 | u16 reserved2; | ||
152 | #ifdef __BIGENDIAN | ||
153 | u8 reserved3:3; | ||
154 | u8 fcp_conf_req:1; /* FCP_CONF is requested */ | ||
155 | u8 resid_flags:2; /* underflow/overflow */ | ||
156 | u8 sns_len_valid:1;/* sense len is valid */ | ||
157 | u8 rsp_len_valid:1;/* response len is valid */ | ||
158 | #else | ||
159 | u8 rsp_len_valid:1;/* response len is valid */ | ||
160 | u8 sns_len_valid:1;/* sense len is valid */ | ||
161 | u8 resid_flags:2; /* underflow/overflow */ | ||
162 | u8 fcp_conf_req:1; /* FCP_CONF is requested */ | ||
163 | u8 reserved3:3; | ||
164 | #endif | ||
165 | u8 scsi_status; /* one byte SCSI status */ | ||
166 | u32 residue; /* residual data bytes */ | ||
167 | u32 sns_len; /* length od sense info */ | ||
168 | u32 rsp_len; /* length of response info */ | ||
169 | }; | ||
170 | |||
171 | #define fcp_snslen(__fcprsp) ((__fcprsp)->sns_len_valid ? \ | ||
172 | (__fcprsp)->sns_len : 0) | ||
173 | #define fcp_rsplen(__fcprsp) ((__fcprsp)->rsp_len_valid ? \ | ||
174 | (__fcprsp)->rsp_len : 0) | ||
175 | #define fcp_rspinfo(__fcprsp) ((struct fcp_rspinfo_s *)((__fcprsp) + 1)) | ||
176 | #define fcp_snsinfo(__fcprsp) (((u8 *)fcp_rspinfo(__fcprsp)) + \ | ||
177 | fcp_rsplen(__fcprsp)) | ||
178 | |||
179 | struct fcp_cmnd_fr_s{ | ||
180 | struct fchs_s fchs; | ||
181 | struct fcp_cmnd_s fcp; | ||
182 | }; | ||
183 | |||
184 | #pragma pack() | ||
185 | |||
186 | #endif | ||
diff --git a/drivers/scsi/bfa/include/protocol/fdmi.h b/drivers/scsi/bfa/include/protocol/fdmi.h new file mode 100644 index 000000000000..6c05c268c71b --- /dev/null +++ b/drivers/scsi/bfa/include/protocol/fdmi.h | |||
@@ -0,0 +1,163 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __FDMI_H__ | ||
19 | #define __FDMI_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | #include <protocol/fc.h> | ||
23 | #include <protocol/ct.h> | ||
24 | |||
25 | #pragma pack(1) | ||
26 | |||
27 | /* | ||
28 | * FDMI Command Codes | ||
29 | */ | ||
30 | #define FDMI_GRHL 0x0100 | ||
31 | #define FDMI_GHAT 0x0101 | ||
32 | #define FDMI_GRPL 0x0102 | ||
33 | #define FDMI_GPAT 0x0110 | ||
34 | #define FDMI_RHBA 0x0200 | ||
35 | #define FDMI_RHAT 0x0201 | ||
36 | #define FDMI_RPRT 0x0210 | ||
37 | #define FDMI_RPA 0x0211 | ||
38 | #define FDMI_DHBA 0x0300 | ||
39 | #define FDMI_DPRT 0x0310 | ||
40 | |||
41 | /* | ||
42 | * FDMI reason codes | ||
43 | */ | ||
44 | #define FDMI_NO_ADDITIONAL_EXP 0x00 | ||
45 | #define FDMI_HBA_ALREADY_REG 0x10 | ||
46 | #define FDMI_HBA_ATTRIB_NOT_REG 0x11 | ||
47 | #define FDMI_HBA_ATTRIB_MULTIPLE 0x12 | ||
48 | #define FDMI_HBA_ATTRIB_LENGTH_INVALID 0x13 | ||
49 | #define FDMI_HBA_ATTRIB_NOT_PRESENT 0x14 | ||
50 | #define FDMI_PORT_ORIG_NOT_IN_LIST 0x15 | ||
51 | #define FDMI_PORT_HBA_NOT_IN_LIST 0x16 | ||
52 | #define FDMI_PORT_ATTRIB_NOT_REG 0x20 | ||
53 | #define FDMI_PORT_NOT_REG 0x21 | ||
54 | #define FDMI_PORT_ATTRIB_MULTIPLE 0x22 | ||
55 | #define FDMI_PORT_ATTRIB_LENGTH_INVALID 0x23 | ||
56 | #define FDMI_PORT_ALREADY_REGISTEREED 0x24 | ||
57 | |||
58 | /* | ||
59 | * FDMI Transmission Speed Mask values | ||
60 | */ | ||
61 | #define FDMI_TRANS_SPEED_1G 0x00000001 | ||
62 | #define FDMI_TRANS_SPEED_2G 0x00000002 | ||
63 | #define FDMI_TRANS_SPEED_10G 0x00000004 | ||
64 | #define FDMI_TRANS_SPEED_4G 0x00000008 | ||
65 | #define FDMI_TRANS_SPEED_8G 0x00000010 | ||
66 | #define FDMI_TRANS_SPEED_16G 0x00000020 | ||
67 | #define FDMI_TRANS_SPEED_UNKNOWN 0x00008000 | ||
68 | |||
69 | /* | ||
70 | * FDMI HBA attribute types | ||
71 | */ | ||
72 | enum fdmi_hba_attribute_type { | ||
73 | FDMI_HBA_ATTRIB_NODENAME = 1, /* 0x0001 */ | ||
74 | FDMI_HBA_ATTRIB_MANUFACTURER, /* 0x0002 */ | ||
75 | FDMI_HBA_ATTRIB_SERIALNUM, /* 0x0003 */ | ||
76 | FDMI_HBA_ATTRIB_MODEL, /* 0x0004 */ | ||
77 | FDMI_HBA_ATTRIB_MODEL_DESC, /* 0x0005 */ | ||
78 | FDMI_HBA_ATTRIB_HW_VERSION, /* 0x0006 */ | ||
79 | FDMI_HBA_ATTRIB_DRIVER_VERSION, /* 0x0007 */ | ||
80 | FDMI_HBA_ATTRIB_ROM_VERSION, /* 0x0008 */ | ||
81 | FDMI_HBA_ATTRIB_FW_VERSION, /* 0x0009 */ | ||
82 | FDMI_HBA_ATTRIB_OS_NAME, /* 0x000A */ | ||
83 | FDMI_HBA_ATTRIB_MAX_CT, /* 0x000B */ | ||
84 | |||
85 | FDMI_HBA_ATTRIB_MAX_TYPE | ||
86 | }; | ||
87 | |||
88 | /* | ||
89 | * FDMI Port attribute types | ||
90 | */ | ||
91 | enum fdmi_port_attribute_type { | ||
92 | FDMI_PORT_ATTRIB_FC4_TYPES = 1, /* 0x0001 */ | ||
93 | FDMI_PORT_ATTRIB_SUPP_SPEED, /* 0x0002 */ | ||
94 | FDMI_PORT_ATTRIB_PORT_SPEED, /* 0x0003 */ | ||
95 | FDMI_PORT_ATTRIB_FRAME_SIZE, /* 0x0004 */ | ||
96 | FDMI_PORT_ATTRIB_DEV_NAME, /* 0x0005 */ | ||
97 | FDMI_PORT_ATTRIB_HOST_NAME, /* 0x0006 */ | ||
98 | |||
99 | FDMI_PORT_ATTR_MAX_TYPE | ||
100 | }; | ||
101 | |||
102 | /* | ||
103 | * FDMI attribute | ||
104 | */ | ||
105 | struct fdmi_attr_s { | ||
106 | u16 type; | ||
107 | u16 len; | ||
108 | u8 value[1]; | ||
109 | }; | ||
110 | |||
111 | /* | ||
112 | * HBA Attribute Block | ||
113 | */ | ||
114 | struct fdmi_hba_attr_s { | ||
115 | u32 attr_count; /* # of attributes */ | ||
116 | struct fdmi_attr_s hba_attr; /* n attributes */ | ||
117 | }; | ||
118 | |||
119 | /* | ||
120 | * Registered Port List | ||
121 | */ | ||
122 | struct fdmi_port_list_s { | ||
123 | u32 num_ports; /* number Of Port Entries */ | ||
124 | wwn_t port_entry; /* one or more */ | ||
125 | }; | ||
126 | |||
127 | /* | ||
128 | * Port Attribute Block | ||
129 | */ | ||
130 | struct fdmi_port_attr_s { | ||
131 | u32 attr_count; /* # of attributes */ | ||
132 | struct fdmi_attr_s port_attr; /* n attributes */ | ||
133 | }; | ||
134 | |||
135 | /* | ||
136 | * FDMI Register HBA Attributes | ||
137 | */ | ||
138 | struct fdmi_rhba_s { | ||
139 | wwn_t hba_id; /* HBA Identifier */ | ||
140 | struct fdmi_port_list_s port_list; /* Registered Port List */ | ||
141 | struct fdmi_hba_attr_s hba_attr_blk; /* HBA attribute block */ | ||
142 | }; | ||
143 | |||
144 | /* | ||
145 | * FDMI Register Port | ||
146 | */ | ||
147 | struct fdmi_rprt_s { | ||
148 | wwn_t hba_id; /* HBA Identifier */ | ||
149 | wwn_t port_name; /* Port wwn */ | ||
150 | struct fdmi_port_attr_s port_attr_blk; /* Port Attr Block */ | ||
151 | }; | ||
152 | |||
153 | /* | ||
154 | * FDMI Register Port Attributes | ||
155 | */ | ||
156 | struct fdmi_rpa_s { | ||
157 | wwn_t port_name; /* port wwn */ | ||
158 | struct fdmi_port_attr_s port_attr_blk; /* Port Attr Block */ | ||
159 | }; | ||
160 | |||
161 | #pragma pack() | ||
162 | |||
163 | #endif | ||
diff --git a/drivers/scsi/bfa/include/protocol/pcifw.h b/drivers/scsi/bfa/include/protocol/pcifw.h new file mode 100644 index 000000000000..6830dc3ee58a --- /dev/null +++ b/drivers/scsi/bfa/include/protocol/pcifw.h | |||
@@ -0,0 +1,75 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * pcifw.h PCI FW related headers | ||
20 | */ | ||
21 | |||
22 | #ifndef __PCIFW_H__ | ||
23 | #define __PCIFW_H__ | ||
24 | |||
25 | #pragma pack(1) | ||
26 | |||
27 | struct pnp_hdr_s{ | ||
28 | u32 signature; /* "$PnP" */ | ||
29 | u8 rev; /* Struct revision */ | ||
30 | u8 len; /* Header structure len in multiples | ||
31 | * of 16 bytes */ | ||
32 | u16 off; /* Offset to next header 00 if none */ | ||
33 | u8 rsvd; /* Reserved byte */ | ||
34 | u8 cksum; /* 8-bit checksum for this header */ | ||
35 | u32 pnp_dev_id; /* PnP Device Id */ | ||
36 | u16 mfstr; /* Pointer to manufacturer string */ | ||
37 | u16 prstr; /* Pointer to product string */ | ||
38 | u8 devtype[3]; /* Device Type Code */ | ||
39 | u8 devind; /* Device Indicator */ | ||
40 | u16 bcventr; /* Bootstrap entry vector */ | ||
41 | u16 rsvd2; /* Reserved */ | ||
42 | u16 sriv; /* Static resource information vector */ | ||
43 | }; | ||
44 | |||
45 | struct pci_3_0_ds_s{ | ||
46 | u32 sig; /* Signature "PCIR" */ | ||
47 | u16 vendid; /* Vendor ID */ | ||
48 | u16 devid; /* Device ID */ | ||
49 | u16 devlistoff; /* Device List Offset */ | ||
50 | u16 len; /* PCI Data Structure Length */ | ||
51 | u8 rev; /* PCI Data Structure Revision */ | ||
52 | u8 clcode[3]; /* Class Code */ | ||
53 | u16 imglen; /* Code image length in multiples of | ||
54 | * 512 bytes */ | ||
55 | u16 coderev; /* Revision level of code/data */ | ||
56 | u8 codetype; /* Code type 0x00 - BIOS */ | ||
57 | u8 indr; /* Last image indicator */ | ||
58 | u16 mrtimglen; /* Max Run Time Image Length */ | ||
59 | u16 cuoff; /* Config Utility Code Header Offset */ | ||
60 | u16 dmtfclp; /* DMTF CLP entry point offset */ | ||
61 | }; | ||
62 | |||
63 | struct pci_optrom_hdr_s{ | ||
64 | u16 sig; /* Signature 0x55AA */ | ||
65 | u8 len; /* Option ROM length in units of 512 bytes */ | ||
66 | u8 inivec[3]; /* Initialization vector */ | ||
67 | u8 rsvd[16]; /* Reserved field */ | ||
68 | u16 verptr; /* Pointer to version string - private */ | ||
69 | u16 pcids; /* Pointer to PCI data structure */ | ||
70 | u16 pnphdr; /* Pointer to PnP expansion header */ | ||
71 | }; | ||
72 | |||
73 | #pragma pack() | ||
74 | |||
75 | #endif | ||
diff --git a/drivers/scsi/bfa/include/protocol/scsi.h b/drivers/scsi/bfa/include/protocol/scsi.h new file mode 100644 index 000000000000..b220e6b4f6e1 --- /dev/null +++ b/drivers/scsi/bfa/include/protocol/scsi.h | |||
@@ -0,0 +1,1648 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | #ifndef __SCSI_H__ | ||
19 | #define __SCSI_H__ | ||
20 | |||
21 | #include <protocol/types.h> | ||
22 | |||
23 | #pragma pack(1) | ||
24 | |||
25 | /* | ||
26 | * generic SCSI cdb definition | ||
27 | */ | ||
28 | #define SCSI_MAX_CDBLEN 16 | ||
29 | struct scsi_cdb_s{ | ||
30 | u8 scsi_cdb[SCSI_MAX_CDBLEN]; | ||
31 | }; | ||
32 | |||
33 | /* | ||
34 | * scsi lun serial number definition | ||
35 | */ | ||
36 | #define SCSI_LUN_SN_LEN 32 | ||
37 | struct scsi_lun_sn_s{ | ||
38 | u8 lun_sn[SCSI_LUN_SN_LEN]; | ||
39 | }; | ||
40 | |||
41 | /* | ||
42 | * SCSI Direct Access Commands | ||
43 | */ | ||
44 | enum { | ||
45 | SCSI_OP_TEST_UNIT_READY = 0x00, | ||
46 | SCSI_OP_REQUEST_SENSE = 0x03, | ||
47 | SCSI_OP_FORMAT_UNIT = 0x04, | ||
48 | SCSI_OP_READ6 = 0x08, | ||
49 | SCSI_OP_WRITE6 = 0x0A, | ||
50 | SCSI_OP_WRITE_FILEMARKS = 0x10, | ||
51 | SCSI_OP_INQUIRY = 0x12, | ||
52 | SCSI_OP_MODE_SELECT6 = 0x15, | ||
53 | SCSI_OP_RESERVE6 = 0x16, | ||
54 | SCSI_OP_RELEASE6 = 0x17, | ||
55 | SCSI_OP_MODE_SENSE6 = 0x1A, | ||
56 | SCSI_OP_START_STOP_UNIT = 0x1B, | ||
57 | SCSI_OP_SEND_DIAGNOSTIC = 0x1D, | ||
58 | SCSI_OP_READ_CAPACITY = 0x25, | ||
59 | SCSI_OP_READ10 = 0x28, | ||
60 | SCSI_OP_WRITE10 = 0x2A, | ||
61 | SCSI_OP_VERIFY10 = 0x2F, | ||
62 | SCSI_OP_READ_DEFECT_DATA = 0x37, | ||
63 | SCSI_OP_LOG_SELECT = 0x4C, | ||
64 | SCSI_OP_LOG_SENSE = 0x4D, | ||
65 | SCSI_OP_MODE_SELECT10 = 0x55, | ||
66 | SCSI_OP_RESERVE10 = 0x56, | ||
67 | SCSI_OP_RELEASE10 = 0x57, | ||
68 | SCSI_OP_MODE_SENSE10 = 0x5A, | ||
69 | SCSI_OP_PER_RESERVE_IN = 0x5E, | ||
70 | SCSI_OP_PER_RESERVE_OUR = 0x5E, | ||
71 | SCSI_OP_READ16 = 0x88, | ||
72 | SCSI_OP_WRITE16 = 0x8A, | ||
73 | SCSI_OP_VERIFY16 = 0x8F, | ||
74 | SCSI_OP_READ_CAPACITY16 = 0x9E, | ||
75 | SCSI_OP_REPORT_LUNS = 0xA0, | ||
76 | SCSI_OP_READ12 = 0xA8, | ||
77 | SCSI_OP_WRITE12 = 0xAA, | ||
78 | SCSI_OP_UNDEF = 0xFF, | ||
79 | }; | ||
80 | |||
81 | /* | ||
82 | * SCSI START_STOP_UNIT command | ||
83 | */ | ||
84 | struct scsi_start_stop_unit_s{ | ||
85 | u8 opcode; | ||
86 | #ifdef __BIGENDIAN | ||
87 | u8 lun:3; | ||
88 | u8 reserved1:4; | ||
89 | u8 immed:1; | ||
90 | #else | ||
91 | u8 immed:1; | ||
92 | u8 reserved1:4; | ||
93 | u8 lun:3; | ||
94 | #endif | ||
95 | u8 reserved2; | ||
96 | u8 reserved3; | ||
97 | #ifdef __BIGENDIAN | ||
98 | u8 power_conditions:4; | ||
99 | u8 reserved4:2; | ||
100 | u8 loEj:1; | ||
101 | u8 start:1; | ||
102 | #else | ||
103 | u8 start:1; | ||
104 | u8 loEj:1; | ||
105 | u8 reserved4:2; | ||
106 | u8 power_conditions:4; | ||
107 | #endif | ||
108 | u8 control; | ||
109 | }; | ||
110 | |||
111 | /* | ||
112 | * SCSI SEND_DIAGNOSTIC command | ||
113 | */ | ||
114 | struct scsi_send_diagnostic_s{ | ||
115 | u8 opcode; | ||
116 | #ifdef __BIGENDIAN | ||
117 | u8 self_test_code:3; | ||
118 | u8 pf:1; | ||
119 | u8 reserved1:1; | ||
120 | u8 self_test:1; | ||
121 | u8 dev_offl:1; | ||
122 | u8 unit_offl:1; | ||
123 | #else | ||
124 | u8 unit_offl:1; | ||
125 | u8 dev_offl:1; | ||
126 | u8 self_test:1; | ||
127 | u8 reserved1:1; | ||
128 | u8 pf:1; | ||
129 | u8 self_test_code:3; | ||
130 | #endif | ||
131 | u8 reserved2; | ||
132 | |||
133 | u8 param_list_length[2]; /* MSB first */ | ||
134 | u8 control; | ||
135 | |||
136 | }; | ||
137 | |||
138 | /* | ||
139 | * SCSI READ10/WRITE10 commands | ||
140 | */ | ||
141 | struct scsi_rw10_s{ | ||
142 | u8 opcode; | ||
143 | #ifdef __BIGENDIAN | ||
144 | u8 lun:3; | ||
145 | u8 dpo:1; /* Disable Page Out */ | ||
146 | u8 fua:1; /* Force Unit Access */ | ||
147 | u8 reserved1:2; | ||
148 | u8 rel_adr:1; /* relative address */ | ||
149 | #else | ||
150 | u8 rel_adr:1; | ||
151 | u8 reserved1:2; | ||
152 | u8 fua:1; | ||
153 | u8 dpo:1; | ||
154 | u8 lun:3; | ||
155 | #endif | ||
156 | u8 lba0; /* logical block address - MSB */ | ||
157 | u8 lba1; | ||
158 | u8 lba2; | ||
159 | u8 lba3; /* LSB */ | ||
160 | u8 reserved3; | ||
161 | u8 xfer_length0; /* transfer length in blocks - MSB */ | ||
162 | u8 xfer_length1; /* LSB */ | ||
163 | u8 control; | ||
164 | }; | ||
165 | |||
166 | #define SCSI_CDB10_GET_LBA(cdb) \ | ||
167 | (((cdb)->lba0 << 24) | ((cdb)->lba1 << 16) | \ | ||
168 | ((cdb)->lba2 << 8) | (cdb)->lba3) | ||
169 | |||
170 | #define SCSI_CDB10_SET_LBA(cdb, lba) { \ | ||
171 | (cdb)->lba0 = lba >> 24; \ | ||
172 | (cdb)->lba1 = (lba >> 16) & 0xFF; \ | ||
173 | (cdb)->lba2 = (lba >> 8) & 0xFF; \ | ||
174 | (cdb)->lba3 = lba & 0xFF; \ | ||
175 | } | ||
176 | |||
177 | #define SCSI_CDB10_GET_TL(cdb) \ | ||
178 | ((cdb)->xfer_length0 << 8 | (cdb)->xfer_length1) | ||
179 | #define SCSI_CDB10_SET_TL(cdb, tl) { \ | ||
180 | (cdb)->xfer_length0 = tl >> 8; \ | ||
181 | (cdb)->xfer_length1 = tl & 0xFF; \ | ||
182 | } | ||
183 | |||
184 | /* | ||
185 | * SCSI READ6/WRITE6 commands | ||
186 | */ | ||
187 | struct scsi_rw6_s{ | ||
188 | u8 opcode; | ||
189 | #ifdef __BIGENDIAN | ||
190 | u8 lun:3; | ||
191 | u8 lba0:5; /* MSb */ | ||
192 | #else | ||
193 | u8 lba0:5; /* MSb */ | ||
194 | u8 lun:3; | ||
195 | #endif | ||
196 | u8 lba1; | ||
197 | u8 lba2; /* LSB */ | ||
198 | u8 xfer_length; | ||
199 | u8 control; | ||
200 | }; | ||
201 | |||
202 | #define SCSI_TAPE_CDB6_GET_TL(cdb) \ | ||
203 | (((cdb)->tl0 << 16) | ((cdb)->tl1 << 8) | (cdb)->tl2) | ||
204 | |||
205 | #define SCSI_TAPE_CDB6_SET_TL(cdb, tl) { \ | ||
206 | (cdb)->tl0 = tl >> 16; \ | ||
207 | (cdb)->tl1 = (tl >> 8) & 0xFF; \ | ||
208 | (cdb)->tl2 = tl & 0xFF; \ | ||
209 | } | ||
210 | |||
211 | /* | ||
212 | * SCSI sequential (TAPE) wrtie command | ||
213 | */ | ||
214 | struct scsi_tape_wr_s{ | ||
215 | u8 opcode; | ||
216 | #ifdef __BIGENDIAN | ||
217 | u8 rsvd:7; | ||
218 | u8 fixed:1; /* MSb */ | ||
219 | #else | ||
220 | u8 fixed:1; /* MSb */ | ||
221 | u8 rsvd:7; | ||
222 | #endif | ||
223 | u8 tl0; /* Msb */ | ||
224 | u8 tl1; | ||
225 | u8 tl2; /* Lsb */ | ||
226 | |||
227 | u8 control; | ||
228 | }; | ||
229 | |||
230 | #define SCSI_CDB6_GET_LBA(cdb) \ | ||
231 | (((cdb)->lba0 << 16) | ((cdb)->lba1 << 8) | (cdb)->lba2) | ||
232 | |||
233 | #define SCSI_CDB6_SET_LBA(cdb, lba) { \ | ||
234 | (cdb)->lba0 = lba >> 16; \ | ||
235 | (cdb)->lba1 = (lba >> 8) & 0xFF; \ | ||
236 | (cdb)->lba2 = lba & 0xFF; \ | ||
237 | } | ||
238 | |||
239 | #define SCSI_CDB6_GET_TL(cdb) ((cdb)->xfer_length) | ||
240 | #define SCSI_CDB6_SET_TL(cdb, tl) { \ | ||
241 | (cdb)->xfer_length = tl; \ | ||
242 | } | ||
243 | |||
244 | /* | ||
245 | * SCSI sense data format | ||
246 | */ | ||
247 | struct scsi_sense_s{ | ||
248 | #ifdef __BIGENDIAN | ||
249 | u8 valid:1; | ||
250 | u8 rsp_code:7; | ||
251 | #else | ||
252 | u8 rsp_code:7; | ||
253 | u8 valid:1; | ||
254 | #endif | ||
255 | u8 seg_num; | ||
256 | #ifdef __BIGENDIAN | ||
257 | u8 file_mark:1; | ||
258 | u8 eom:1; /* end of media */ | ||
259 | u8 ili:1; /* incorrect length indicator */ | ||
260 | u8 reserved:1; | ||
261 | u8 sense_key:4; | ||
262 | #else | ||
263 | u8 sense_key:4; | ||
264 | u8 reserved:1; | ||
265 | u8 ili:1; /* incorrect length indicator */ | ||
266 | u8 eom:1; /* end of media */ | ||
267 | u8 file_mark:1; | ||
268 | #endif | ||
269 | u8 information[4]; /* device-type or command specific info | ||
270 | */ | ||
271 | u8 add_sense_length; | ||
272 | /* additional sense length */ | ||
273 | u8 command_info[4];/* command specific information | ||
274 | */ | ||
275 | u8 asc; /* additional sense code */ | ||
276 | u8 ascq; /* additional sense code qualifier */ | ||
277 | u8 fru_code; /* field replaceable unit code */ | ||
278 | #ifdef __BIGENDIAN | ||
279 | u8 sksv:1; /* sense key specific valid */ | ||
280 | u8 c_d:1; /* command/data bit */ | ||
281 | u8 res1:2; | ||
282 | u8 bpv:1; /* bit pointer valid */ | ||
283 | u8 bpointer:3; /* bit pointer */ | ||
284 | #else | ||
285 | u8 bpointer:3; /* bit pointer */ | ||
286 | u8 bpv:1; /* bit pointer valid */ | ||
287 | u8 res1:2; | ||
288 | u8 c_d:1; /* command/data bit */ | ||
289 | u8 sksv:1; /* sense key specific valid */ | ||
290 | #endif | ||
291 | u8 fpointer[2]; /* field pointer */ | ||
292 | }; | ||
293 | |||
294 | #define SCSI_SENSE_CUR_ERR 0x70 | ||
295 | #define SCSI_SENSE_DEF_ERR 0x71 | ||
296 | |||
297 | /* | ||
298 | * SCSI sense key values | ||
299 | */ | ||
300 | #define SCSI_SK_NO_SENSE 0x0 | ||
301 | #define SCSI_SK_REC_ERR 0x1 /* recovered error */ | ||
302 | #define SCSI_SK_NOT_READY 0x2 | ||
303 | #define SCSI_SK_MED_ERR 0x3 /* medium error */ | ||
304 | #define SCSI_SK_HW_ERR 0x4 /* hardware error */ | ||
305 | #define SCSI_SK_ILLEGAL_REQ 0x5 | ||
306 | #define SCSI_SK_UNIT_ATT 0x6 /* unit attention */ | ||
307 | #define SCSI_SK_DATA_PROTECT 0x7 | ||
308 | #define SCSI_SK_BLANK_CHECK 0x8 | ||
309 | #define SCSI_SK_VENDOR_SPEC 0x9 | ||
310 | #define SCSI_SK_COPY_ABORTED 0xA | ||
311 | #define SCSI_SK_ABORTED_CMND 0xB | ||
312 | #define SCSI_SK_VOL_OVERFLOW 0xD | ||
313 | #define SCSI_SK_MISCOMPARE 0xE | ||
314 | |||
315 | /* | ||
316 | * SCSI additional sense codes | ||
317 | */ | ||
318 | #define SCSI_ASC_NO_ADD_SENSE 0x00 | ||
319 | #define SCSI_ASC_LUN_NOT_READY 0x04 | ||
320 | #define SCSI_ASC_LUN_COMMUNICATION 0x08 | ||
321 | #define SCSI_ASC_WRITE_ERROR 0x0C | ||
322 | #define SCSI_ASC_INVALID_CMND_CODE 0x20 | ||
323 | #define SCSI_ASC_BAD_LBA 0x21 | ||
324 | #define SCSI_ASC_INVALID_FIELD_IN_CDB 0x24 | ||
325 | #define SCSI_ASC_LUN_NOT_SUPPORTED 0x25 | ||
326 | #define SCSI_ASC_LUN_WRITE_PROTECT 0x27 | ||
327 | #define SCSI_ASC_POWERON_BDR 0x29 /* power on reset, bus reset, | ||
328 | * bus device reset | ||
329 | */ | ||
330 | #define SCSI_ASC_PARAMS_CHANGED 0x2A | ||
331 | #define SCSI_ASC_CMND_CLEARED_BY_A_I 0x2F | ||
332 | #define SCSI_ASC_SAVING_PARAM_NOTSUPP 0x39 | ||
333 | #define SCSI_ASC_TOCC 0x3F /* target operating condtions | ||
334 | * changed | ||
335 | */ | ||
336 | #define SCSI_ASC_PARITY_ERROR 0x47 | ||
337 | #define SCSI_ASC_CMND_PHASE_ERROR 0x4A | ||
338 | #define SCSI_ASC_DATA_PHASE_ERROR 0x4B | ||
339 | #define SCSI_ASC_VENDOR_SPEC 0x7F | ||
340 | |||
341 | /* | ||
342 | * SCSI additional sense code qualifiers | ||
343 | */ | ||
344 | #define SCSI_ASCQ_CAUSE_NOT_REPORT 0x00 | ||
345 | #define SCSI_ASCQ_BECOMING_READY 0x01 | ||
346 | #define SCSI_ASCQ_INIT_CMD_REQ 0x02 | ||
347 | #define SCSI_ASCQ_FORMAT_IN_PROGRESS 0x04 | ||
348 | #define SCSI_ASCQ_OPERATION_IN_PROGRESS 0x07 | ||
349 | #define SCSI_ASCQ_SELF_TEST_IN_PROGRESS 0x09 | ||
350 | #define SCSI_ASCQ_WR_UNEXP_UNSOL_DATA 0x0C | ||
351 | #define SCSI_ASCQ_WR_NOTENG_UNSOL_DATA 0x0D | ||
352 | |||
353 | #define SCSI_ASCQ_LBA_OUT_OF_RANGE 0x00 | ||
354 | #define SCSI_ASCQ_INVALID_ELEMENT_ADDR 0x01 | ||
355 | |||
356 | #define SCSI_ASCQ_LUN_WRITE_PROTECTED 0x00 | ||
357 | #define SCSI_ASCQ_LUN_HW_WRITE_PROTECTED 0x01 | ||
358 | #define SCSI_ASCQ_LUN_SW_WRITE_PROTECTED 0x02 | ||
359 | |||
360 | #define SCSI_ASCQ_POR 0x01 /* power on reset */ | ||
361 | #define SCSI_ASCQ_SBR 0x02 /* scsi bus reset */ | ||
362 | #define SCSI_ASCQ_BDR 0x03 /* bus device reset */ | ||
363 | #define SCSI_ASCQ_DIR 0x04 /* device internal reset */ | ||
364 | |||
365 | #define SCSI_ASCQ_MODE_PARAMS_CHANGED 0x01 | ||
366 | #define SCSI_ASCQ_LOG_PARAMS_CHANGED 0x02 | ||
367 | #define SCSI_ASCQ_RESERVATIONS_PREEMPTED 0x03 | ||
368 | #define SCSI_ASCQ_RESERVATIONS_RELEASED 0x04 | ||
369 | #define SCSI_ASCQ_REGISTRATIONS_PREEMPTED 0x05 | ||
370 | |||
371 | #define SCSI_ASCQ_MICROCODE_CHANGED 0x01 | ||
372 | #define SCSI_ASCQ_CHANGED_OPER_COND 0x02 | ||
373 | #define SCSI_ASCQ_INQ_CHANGED 0x03 /* inquiry data changed */ | ||
374 | #define SCSI_ASCQ_DI_CHANGED 0x05 /* device id changed */ | ||
375 | #define SCSI_ASCQ_RL_DATA_CHANGED 0x0E /* report luns data changed */ | ||
376 | |||
377 | #define SCSI_ASCQ_DP_CRC_ERR 0x01 /* data phase crc error */ | ||
378 | #define SCSI_ASCQ_DP_SCSI_PARITY_ERR 0x02 /* data phase scsi parity error | ||
379 | */ | ||
380 | #define SCSI_ASCQ_IU_CRC_ERR 0x03 /* information unit crc error */ | ||
381 | #define SCSI_ASCQ_PROTO_SERV_CRC_ERR 0x05 | ||
382 | |||
383 | #define SCSI_ASCQ_LUN_TIME_OUT 0x01 | ||
384 | |||
385 | /* ------------------------------------------------------------ | ||
386 | * SCSI INQUIRY | ||
387 | * ------------------------------------------------------------*/ | ||
388 | |||
389 | struct scsi_inquiry_s{ | ||
390 | u8 opcode; | ||
391 | #ifdef __BIGENDIAN | ||
392 | u8 lun:3; | ||
393 | u8 reserved1:3; | ||
394 | u8 cmd_dt:1; | ||
395 | u8 evpd:1; | ||
396 | #else | ||
397 | u8 evpd:1; | ||
398 | u8 cmd_dt:1; | ||
399 | u8 reserved1:3; | ||
400 | u8 lun:3; | ||
401 | #endif | ||
402 | u8 page_code; | ||
403 | u8 reserved2; | ||
404 | u8 alloc_length; | ||
405 | u8 control; | ||
406 | }; | ||
407 | |||
408 | struct scsi_inquiry_vendor_s{ | ||
409 | u8 vendor_id[8]; | ||
410 | }; | ||
411 | |||
412 | struct scsi_inquiry_prodid_s{ | ||
413 | u8 product_id[16]; | ||
414 | }; | ||
415 | |||
416 | struct scsi_inquiry_prodrev_s{ | ||
417 | u8 product_rev[4]; | ||
418 | }; | ||
419 | |||
420 | struct scsi_inquiry_data_s{ | ||
421 | #ifdef __BIGENDIAN | ||
422 | u8 peripheral_qual:3; /* peripheral qualifier */ | ||
423 | u8 device_type:5; /* peripheral device type */ | ||
424 | |||
425 | u8 rmb:1; /* removable medium bit */ | ||
426 | u8 device_type_mod:7; /* device type modifier */ | ||
427 | |||
428 | u8 version; | ||
429 | |||
430 | u8 aenc:1; /* async event notification capability | ||
431 | */ | ||
432 | u8 trm_iop:1; /* terminate I/O process */ | ||
433 | u8 norm_aca:1; /* normal ACA supported */ | ||
434 | u8 hi_support:1; /* SCSI-3: supports REPORT LUNS */ | ||
435 | u8 rsp_data_format:4; | ||
436 | |||
437 | u8 additional_len; | ||
438 | u8 sccs:1; | ||
439 | u8 reserved1:7; | ||
440 | |||
441 | u8 reserved2:1; | ||
442 | u8 enc_serv:1; /* enclosure service component */ | ||
443 | u8 reserved3:1; | ||
444 | u8 multi_port:1; /* multi-port device */ | ||
445 | u8 m_chngr:1; /* device in medium transport element */ | ||
446 | u8 ack_req_q:1; /* SIP specific bit */ | ||
447 | u8 addr32:1; /* SIP specific bit */ | ||
448 | u8 addr16:1; /* SIP specific bit */ | ||
449 | |||
450 | u8 rel_adr:1; /* relative address */ | ||
451 | u8 w_bus32:1; | ||
452 | u8 w_bus16:1; | ||
453 | u8 synchronous:1; | ||
454 | u8 linked_commands:1; | ||
455 | u8 trans_dis:1; | ||
456 | u8 cmd_queue:1; /* command queueing supported */ | ||
457 | u8 soft_reset:1; /* soft reset alternative (VS) */ | ||
458 | #else | ||
459 | u8 device_type:5; /* peripheral device type */ | ||
460 | u8 peripheral_qual:3; | ||
461 | /* peripheral qualifier */ | ||
462 | |||
463 | u8 device_type_mod:7; | ||
464 | /* device type modifier */ | ||
465 | u8 rmb:1; /* removable medium bit */ | ||
466 | |||
467 | u8 version; | ||
468 | |||
469 | u8 rsp_data_format:4; | ||
470 | u8 hi_support:1; /* SCSI-3: supports REPORT LUNS */ | ||
471 | u8 norm_aca:1; /* normal ACA supported */ | ||
472 | u8 terminate_iop:1;/* terminate I/O process */ | ||
473 | u8 aenc:1; /* async event notification capability | ||
474 | */ | ||
475 | |||
476 | u8 additional_len; | ||
477 | u8 reserved1:7; | ||
478 | u8 sccs:1; | ||
479 | |||
480 | u8 addr16:1; /* SIP specific bit */ | ||
481 | u8 addr32:1; /* SIP specific bit */ | ||
482 | u8 ack_req_q:1; /* SIP specific bit */ | ||
483 | u8 m_chngr:1; /* device in medium transport element */ | ||
484 | u8 multi_port:1; /* multi-port device */ | ||
485 | u8 reserved3:1; /* TBD - Vendor Specific */ | ||
486 | u8 enc_serv:1; /* enclosure service component */ | ||
487 | u8 reserved2:1; | ||
488 | |||
489 | u8 soft_seset:1; /* soft reset alternative (VS) */ | ||
490 | u8 cmd_queue:1; /* command queueing supported */ | ||
491 | u8 trans_dis:1; | ||
492 | u8 linked_commands:1; | ||
493 | u8 synchronous:1; | ||
494 | u8 w_bus16:1; | ||
495 | u8 w_bus32:1; | ||
496 | u8 rel_adr:1; /* relative address */ | ||
497 | #endif | ||
498 | struct scsi_inquiry_vendor_s vendor_id; | ||
499 | struct scsi_inquiry_prodid_s product_id; | ||
500 | struct scsi_inquiry_prodrev_s product_rev; | ||
501 | u8 vendor_specific[20]; | ||
502 | u8 reserved4[40]; | ||
503 | }; | ||
504 | |||
505 | /* | ||
506 | * inquiry.peripheral_qual field values | ||
507 | */ | ||
508 | #define SCSI_DEVQUAL_DEFAULT 0 | ||
509 | #define SCSI_DEVQUAL_NOT_CONNECTED 1 | ||
510 | #define SCSI_DEVQUAL_NOT_SUPPORTED 3 | ||
511 | |||
512 | /* | ||
513 | * inquiry.device_type field values | ||
514 | */ | ||
515 | #define SCSI_DEVICE_DIRECT_ACCESS 0x00 | ||
516 | #define SCSI_DEVICE_SEQ_ACCESS 0x01 | ||
517 | #define SCSI_DEVICE_ARRAY_CONTROLLER 0x0C | ||
518 | #define SCSI_DEVICE_UNKNOWN 0x1F | ||
519 | |||
520 | /* | ||
521 | * inquiry.version | ||
522 | */ | ||
523 | #define SCSI_VERSION_ANSI_X3131 2 /* ANSI X3.131 SCSI-2 */ | ||
524 | #define SCSI_VERSION_SPC 3 /* SPC (SCSI-3), ANSI X3.301:1997 */ | ||
525 | #define SCSI_VERSION_SPC_2 4 /* SPC-2 */ | ||
526 | |||
527 | /* | ||
528 | * response data format | ||
529 | */ | ||
530 | #define SCSI_RSP_DATA_FORMAT 2 /* SCSI-2 & SPC */ | ||
531 | |||
532 | /* | ||
533 | * SCSI inquiry page codes | ||
534 | */ | ||
535 | #define SCSI_INQ_PAGE_VPD_PAGES 0x00 /* supported vpd pages */ | ||
536 | #define SCSI_INQ_PAGE_USN_PAGE 0x80 /* unit serial number page */ | ||
537 | #define SCSI_INQ_PAGE_DEV_IDENT 0x83 /* device indentification page | ||
538 | */ | ||
539 | #define SCSI_INQ_PAGES_MAX 3 | ||
540 | |||
541 | /* | ||
542 | * supported vital product data pages | ||
543 | */ | ||
544 | struct scsi_inq_page_vpd_pages_s{ | ||
545 | #ifdef __BIGENDIAN | ||
546 | u8 peripheral_qual:3; | ||
547 | u8 device_type:5; | ||
548 | #else | ||
549 | u8 device_type:5; | ||
550 | u8 peripheral_qual:3; | ||
551 | #endif | ||
552 | u8 page_code; | ||
553 | u8 reserved; | ||
554 | u8 page_length; | ||
555 | u8 pages[SCSI_INQ_PAGES_MAX]; | ||
556 | }; | ||
557 | |||
558 | /* | ||
559 | * Unit serial number page | ||
560 | */ | ||
561 | #define SCSI_INQ_USN_LEN 32 | ||
562 | |||
563 | struct scsi_inq_usn_s{ | ||
564 | char usn[SCSI_INQ_USN_LEN]; | ||
565 | }; | ||
566 | |||
567 | struct scsi_inq_page_usn_s{ | ||
568 | #ifdef __BIGENDIAN | ||
569 | u8 peripheral_qual:3; | ||
570 | u8 device_type:5; | ||
571 | #else | ||
572 | u8 device_type:5; | ||
573 | u8 peripheral_qual:3; | ||
574 | #endif | ||
575 | u8 page_code; | ||
576 | u8 reserved1; | ||
577 | u8 page_length; | ||
578 | struct scsi_inq_usn_s usn; | ||
579 | }; | ||
580 | |||
581 | enum { | ||
582 | SCSI_INQ_DIP_CODE_BINARY = 1, /* identifier has binary value */ | ||
583 | SCSI_INQ_DIP_CODE_ASCII = 2, /* identifier has ascii value */ | ||
584 | }; | ||
585 | |||
586 | enum { | ||
587 | SCSI_INQ_DIP_ASSOC_LUN = 0, /* id is associated with device */ | ||
588 | SCSI_INQ_DIP_ASSOC_PORT = 1, /* id is associated with port that | ||
589 | * received the request | ||
590 | */ | ||
591 | }; | ||
592 | |||
593 | enum { | ||
594 | SCSI_INQ_ID_TYPE_VENDOR = 1, | ||
595 | SCSI_INQ_ID_TYPE_IEEE = 2, | ||
596 | SCSI_INQ_ID_TYPE_FC_FS = 3, | ||
597 | SCSI_INQ_ID_TYPE_OTHER = 4, | ||
598 | }; | ||
599 | |||
600 | struct scsi_inq_dip_desc_s{ | ||
601 | #ifdef __BIGENDIAN | ||
602 | u8 res0:4; | ||
603 | u8 code_set:4; | ||
604 | u8 res1:2; | ||
605 | u8 association:2; | ||
606 | u8 id_type:4; | ||
607 | #else | ||
608 | u8 code_set:4; | ||
609 | u8 res0:4; | ||
610 | u8 id_type:4; | ||
611 | u8 association:2; | ||
612 | u8 res1:2; | ||
613 | #endif | ||
614 | u8 res2; | ||
615 | u8 id_len; | ||
616 | struct scsi_lun_sn_s id; | ||
617 | }; | ||
618 | |||
619 | /* | ||
620 | * Device indentification page | ||
621 | */ | ||
622 | struct scsi_inq_page_dev_ident_s{ | ||
623 | #ifdef __BIGENDIAN | ||
624 | u8 peripheral_qual:3; | ||
625 | u8 device_type:5; | ||
626 | #else | ||
627 | u8 device_type:5; | ||
628 | u8 peripheral_qual:3; | ||
629 | #endif | ||
630 | u8 page_code; | ||
631 | u8 reserved1; | ||
632 | u8 page_length; | ||
633 | struct scsi_inq_dip_desc_s desc; | ||
634 | }; | ||
635 | |||
636 | /* ------------------------------------------------------------ | ||
637 | * READ CAPACITY | ||
638 | * ------------------------------------------------------------ | ||
639 | */ | ||
640 | |||
641 | struct scsi_read_capacity_s{ | ||
642 | u8 opcode; | ||
643 | #ifdef __BIGENDIAN | ||
644 | u8 lun:3; | ||
645 | u8 reserved1:4; | ||
646 | u8 rel_adr:1; | ||
647 | #else | ||
648 | u8 rel_adr:1; | ||
649 | u8 reserved1:4; | ||
650 | u8 lun:3; | ||
651 | #endif | ||
652 | u8 lba0; /* MSB */ | ||
653 | u8 lba1; | ||
654 | u8 lba2; | ||
655 | u8 lba3; /* LSB */ | ||
656 | u8 reserved2; | ||
657 | u8 reserved3; | ||
658 | #ifdef __BIGENDIAN | ||
659 | u8 reserved4:7; | ||
660 | u8 pmi:1; /* partial medium indicator */ | ||
661 | #else | ||
662 | u8 pmi:1; /* partial medium indicator */ | ||
663 | u8 reserved4:7; | ||
664 | #endif | ||
665 | u8 control; | ||
666 | }; | ||
667 | |||
668 | struct scsi_read_capacity_data_s{ | ||
669 | u32 max_lba; /* maximum LBA available */ | ||
670 | u32 block_length; /* in bytes */ | ||
671 | }; | ||
672 | |||
673 | struct scsi_read_capacity16_data_s{ | ||
674 | u64 lba; /* maximum LBA available */ | ||
675 | u32 block_length; /* in bytes */ | ||
676 | #ifdef __BIGENDIAN | ||
677 | u8 reserved1:4, | ||
678 | p_type:3, | ||
679 | prot_en:1; | ||
680 | u8 reserved2:4, | ||
681 | lb_pbe:4; /* logical blocks per physical block | ||
682 | * exponent */ | ||
683 | u16 reserved3:2, | ||
684 | lba_align:14; /* lowest aligned logical block | ||
685 | * address */ | ||
686 | #else | ||
687 | u16 lba_align:14, /* lowest aligned logical block | ||
688 | * address */ | ||
689 | reserved3:2; | ||
690 | u8 lb_pbe:4, /* logical blocks per physical block | ||
691 | * exponent */ | ||
692 | reserved2:4; | ||
693 | u8 prot_en:1, | ||
694 | p_type:3, | ||
695 | reserved1:4; | ||
696 | #endif | ||
697 | u64 reserved4; | ||
698 | u64 reserved5; | ||
699 | }; | ||
700 | |||
701 | /* ------------------------------------------------------------ | ||
702 | * REPORT LUNS command | ||
703 | * ------------------------------------------------------------ | ||
704 | */ | ||
705 | |||
706 | struct scsi_report_luns_s{ | ||
707 | u8 opcode; /* A0h - REPORT LUNS opCode */ | ||
708 | u8 reserved1[5]; | ||
709 | u8 alloc_length[4];/* allocation length MSB first */ | ||
710 | u8 reserved2; | ||
711 | u8 control; | ||
712 | }; | ||
713 | |||
714 | #define SCSI_REPORT_LUN_ALLOC_LENGTH(rl) \ | ||
715 | ((rl->alloc_length[0] << 24) | (rl->alloc_length[1] << 16) | \ | ||
716 | (rl->alloc_length[2] << 8) | (rl->alloc_length[3])) | ||
717 | |||
718 | #define SCSI_REPORT_LUNS_SET_ALLOCLEN(rl, alloc_len) { \ | ||
719 | (rl)->alloc_length[0] = (alloc_len) >> 24; \ | ||
720 | (rl)->alloc_length[1] = ((alloc_len) >> 16) & 0xFF; \ | ||
721 | (rl)->alloc_length[2] = ((alloc_len) >> 8) & 0xFF; \ | ||
722 | (rl)->alloc_length[3] = (alloc_len) & 0xFF; \ | ||
723 | } | ||
724 | |||
725 | struct scsi_report_luns_data_s{ | ||
726 | u32 lun_list_length; /* length of LUN list length */ | ||
727 | u32 reserved; | ||
728 | lun_t lun[1]; /* first LUN in lun list */ | ||
729 | }; | ||
730 | |||
731 | /* ------------------------------------------------------------- | ||
732 | * SCSI mode parameters | ||
733 | * ----------------------------------------------------------- | ||
734 | */ | ||
735 | enum { | ||
736 | SCSI_DA_MEDIUM_DEF = 0, /* direct access default medium type */ | ||
737 | SCSI_DA_MEDIUM_SS = 1, /* direct access single sided */ | ||
738 | SCSI_DA_MEDIUM_DS = 2, /* direct access double sided */ | ||
739 | }; | ||
740 | |||
741 | /* | ||
742 | * SCSI Mode Select(6) cdb | ||
743 | */ | ||
744 | struct scsi_mode_select6_s{ | ||
745 | u8 opcode; | ||
746 | #ifdef __BIGENDIAN | ||
747 | u8 reserved1:3; | ||
748 | u8 pf:1; /* page format */ | ||
749 | u8 reserved2:3; | ||
750 | u8 sp:1; /* save pages if set to 1 */ | ||
751 | #else | ||
752 | u8 sp:1; /* save pages if set to 1 */ | ||
753 | u8 reserved2:3; | ||
754 | u8 pf:1; /* page format */ | ||
755 | u8 reserved1:3; | ||
756 | #endif | ||
757 | u8 reserved3[2]; | ||
758 | u8 alloc_len; | ||
759 | u8 control; | ||
760 | }; | ||
761 | |||
762 | /* | ||
763 | * SCSI Mode Select(10) cdb | ||
764 | */ | ||
765 | struct scsi_mode_select10_s{ | ||
766 | u8 opcode; | ||
767 | #ifdef __BIGENDIAN | ||
768 | u8 reserved1:3; | ||
769 | u8 pf:1; /* page format */ | ||
770 | u8 reserved2:3; | ||
771 | u8 sp:1; /* save pages if set to 1 */ | ||
772 | #else | ||
773 | u8 sp:1; /* save pages if set to 1 */ | ||
774 | u8 reserved2:3; | ||
775 | u8 pf:1; /* page format */ | ||
776 | u8 reserved1:3; | ||
777 | #endif | ||
778 | u8 reserved3[5]; | ||
779 | u8 alloc_len_msb; | ||
780 | u8 alloc_len_lsb; | ||
781 | u8 control; | ||
782 | }; | ||
783 | |||
784 | /* | ||
785 | * SCSI Mode Sense(6) cdb | ||
786 | */ | ||
787 | struct scsi_mode_sense6_s{ | ||
788 | u8 opcode; | ||
789 | #ifdef __BIGENDIAN | ||
790 | u8 reserved1:4; | ||
791 | u8 dbd:1; /* disable block discriptors if set to 1 */ | ||
792 | u8 reserved2:3; | ||
793 | |||
794 | u8 pc:2; /* page control */ | ||
795 | u8 page_code:6; | ||
796 | #else | ||
797 | u8 reserved2:3; | ||
798 | u8 dbd:1; /* disable block descriptors if set to 1 */ | ||
799 | u8 reserved1:4; | ||
800 | |||
801 | u8 page_code:6; | ||
802 | u8 pc:2; /* page control */ | ||
803 | #endif | ||
804 | u8 reserved3; | ||
805 | u8 alloc_len; | ||
806 | u8 control; | ||
807 | }; | ||
808 | |||
809 | /* | ||
810 | * SCSI Mode Sense(10) cdb | ||
811 | */ | ||
812 | struct scsi_mode_sense10_s{ | ||
813 | u8 opcode; | ||
814 | #ifdef __BIGENDIAN | ||
815 | u8 reserved1:3; | ||
816 | u8 LLBAA:1; /* long LBA accepted if set to 1 */ | ||
817 | u8 dbd:1; /* disable block descriptors if set | ||
818 | * to 1 | ||
819 | */ | ||
820 | u8 reserved2:3; | ||
821 | |||
822 | u8 pc:2; /* page control */ | ||
823 | u8 page_code:6; | ||
824 | #else | ||
825 | u8 reserved2:3; | ||
826 | u8 dbd:1; /* disable block descriptors if set to | ||
827 | * 1 | ||
828 | */ | ||
829 | u8 LLBAA:1; /* long LBA accepted if set to 1 */ | ||
830 | u8 reserved1:3; | ||
831 | |||
832 | u8 page_code:6; | ||
833 | u8 pc:2; /* page control */ | ||
834 | #endif | ||
835 | u8 reserved3[4]; | ||
836 | u8 alloc_len_msb; | ||
837 | u8 alloc_len_lsb; | ||
838 | u8 control; | ||
839 | }; | ||
840 | |||
841 | #define SCSI_CDB10_GET_AL(cdb) \ | ||
842 | ((cdb)->alloc_len_msb << 8 | (cdb)->alloc_len_lsb) | ||
843 | |||
844 | #define SCSI_CDB10_SET_AL(cdb, al) { \ | ||
845 | (cdb)->alloc_len_msb = al >> 8; \ | ||
846 | (cdb)->alloc_len_lsb = al & 0xFF; \ | ||
847 | } | ||
848 | |||
849 | #define SCSI_CDB6_GET_AL(cdb) ((cdb)->alloc_len) | ||
850 | |||
851 | #define SCSI_CDB6_SET_AL(cdb, al) { \ | ||
852 | (cdb)->alloc_len = al; \ | ||
853 | } | ||
854 | |||
855 | /* | ||
856 | * page control field values | ||
857 | */ | ||
858 | #define SCSI_PC_CURRENT_VALUES 0x0 | ||
859 | #define SCSI_PC_CHANGEABLE_VALUES 0x1 | ||
860 | #define SCSI_PC_DEFAULT_VALUES 0x2 | ||
861 | #define SCSI_PC_SAVED_VALUES 0x3 | ||
862 | |||
863 | /* | ||
864 | * SCSI mode page codes | ||
865 | */ | ||
866 | #define SCSI_MP_VENDOR_SPEC 0x00 | ||
867 | #define SCSI_MP_DISC_RECN 0x02 /* disconnect-reconnect page */ | ||
868 | #define SCSI_MP_FORMAT_DEVICE 0x03 | ||
869 | #define SCSI_MP_RDG 0x04 /* rigid disk geometry page */ | ||
870 | #define SCSI_MP_FDP 0x05 /* flexible disk page */ | ||
871 | #define SCSI_MP_CACHING 0x08 /* caching page */ | ||
872 | #define SCSI_MP_CONTROL 0x0A /* control mode page */ | ||
873 | #define SCSI_MP_MED_TYPES_SUP 0x0B /* medium types supported page */ | ||
874 | #define SCSI_MP_INFO_EXCP_CNTL 0x1C /* informational exception control */ | ||
875 | #define SCSI_MP_ALL 0x3F /* return all pages - mode sense only */ | ||
876 | |||
877 | /* | ||
878 | * mode parameter header | ||
879 | */ | ||
880 | struct scsi_mode_param_header6_s{ | ||
881 | u8 mode_datalen; | ||
882 | u8 medium_type; | ||
883 | |||
884 | /* | ||
885 | * device specific parameters expanded for direct access devices | ||
886 | */ | ||
887 | #ifdef __BIGENDIAN | ||
888 | u32 wp:1; /* write protected */ | ||
889 | u32 reserved1:2; | ||
890 | u32 dpofua:1; /* disable page out + force unit access | ||
891 | */ | ||
892 | u32 reserved2:4; | ||
893 | #else | ||
894 | u32 reserved2:4; | ||
895 | u32 dpofua:1; /* disable page out + force unit access | ||
896 | */ | ||
897 | u32 reserved1:2; | ||
898 | u32 wp:1; /* write protected */ | ||
899 | #endif | ||
900 | |||
901 | u8 block_desclen; | ||
902 | }; | ||
903 | |||
904 | struct scsi_mode_param_header10_s{ | ||
905 | u32 mode_datalen:16; | ||
906 | u32 medium_type:8; | ||
907 | |||
908 | /* | ||
909 | * device specific parameters expanded for direct access devices | ||
910 | */ | ||
911 | #ifdef __BIGENDIAN | ||
912 | u32 wp:1; /* write protected */ | ||
913 | u32 reserved1:2; | ||
914 | u32 dpofua:1; /* disable page out + force unit access | ||
915 | */ | ||
916 | u32 reserved2:4; | ||
917 | #else | ||
918 | u32 reserved2:4; | ||
919 | u32 dpofua:1; /* disable page out + force unit access | ||
920 | */ | ||
921 | u32 reserved1:2; | ||
922 | u32 wp:1; /* write protected */ | ||
923 | #endif | ||
924 | |||
925 | #ifdef __BIGENDIAN | ||
926 | u32 reserved3:7; | ||
927 | u32 longlba:1; | ||
928 | #else | ||
929 | u32 longlba:1; | ||
930 | u32 reserved3:7; | ||
931 | #endif | ||
932 | u32 reserved4:8; | ||
933 | u32 block_desclen:16; | ||
934 | }; | ||
935 | |||
936 | /* | ||
937 | * mode parameter block descriptor | ||
938 | */ | ||
939 | struct scsi_mode_param_desc_s{ | ||
940 | u32 nblks; | ||
941 | u32 density_code:8; | ||
942 | u32 block_length:24; | ||
943 | }; | ||
944 | |||
945 | /* | ||
946 | * Disconnect-reconnect mode page format | ||
947 | */ | ||
948 | struct scsi_mp_disc_recn_s{ | ||
949 | #ifdef __BIGENDIAN | ||
950 | u8 ps:1; | ||
951 | u8 reserved1:1; | ||
952 | u8 page_code:6; | ||
953 | #else | ||
954 | u8 page_code:6; | ||
955 | u8 reserved1:1; | ||
956 | u8 ps:1; | ||
957 | #endif | ||
958 | u8 page_len; | ||
959 | u8 buf_full_ratio; | ||
960 | u8 buf_empty_ratio; | ||
961 | |||
962 | u8 bil_msb; /* bus inactivity limit -MSB */ | ||
963 | u8 bil_lsb; /* bus inactivity limit -LSB */ | ||
964 | |||
965 | u8 dtl_msb; /* disconnect time limit - MSB */ | ||
966 | u8 dtl_lsb; /* disconnect time limit - LSB */ | ||
967 | |||
968 | u8 ctl_msb; /* connect time limit - MSB */ | ||
969 | u8 ctl_lsb; /* connect time limit - LSB */ | ||
970 | |||
971 | u8 max_burst_len_msb; | ||
972 | u8 max_burst_len_lsb; | ||
973 | #ifdef __BIGENDIAN | ||
974 | u8 emdp:1; /* enable modify data pointers */ | ||
975 | u8 fa:3; /* fair arbitration */ | ||
976 | u8 dimm:1; /* disconnect immediate */ | ||
977 | u8 dtdc:3; /* data transfer disconnect control */ | ||
978 | #else | ||
979 | u8 dtdc:3; /* data transfer disconnect control */ | ||
980 | u8 dimm:1; /* disconnect immediate */ | ||
981 | u8 fa:3; /* fair arbitration */ | ||
982 | u8 emdp:1; /* enable modify data pointers */ | ||
983 | #endif | ||
984 | |||
985 | u8 reserved3; | ||
986 | |||
987 | u8 first_burst_len_msb; | ||
988 | u8 first_burst_len_lsb; | ||
989 | }; | ||
990 | |||
991 | /* | ||
992 | * SCSI format device mode page | ||
993 | */ | ||
994 | struct scsi_mp_format_device_s{ | ||
995 | #ifdef __BIGENDIAN | ||
996 | u32 ps:1; | ||
997 | u32 reserved1:1; | ||
998 | u32 page_code:6; | ||
999 | #else | ||
1000 | u32 page_code:6; | ||
1001 | u32 reserved1:1; | ||
1002 | u32 ps:1; | ||
1003 | #endif | ||
1004 | u32 page_len:8; | ||
1005 | u32 tracks_per_zone:16; | ||
1006 | |||
1007 | u32 a_sec_per_zone:16; | ||
1008 | u32 a_tracks_per_zone:16; | ||
1009 | |||
1010 | u32 a_tracks_per_lun:16; /* alternate tracks/lun-MSB */ | ||
1011 | u32 sec_per_track:16; /* sectors/track-MSB */ | ||
1012 | |||
1013 | u32 bytes_per_sector:16; | ||
1014 | u32 interleave:16; | ||
1015 | |||
1016 | u32 tsf:16; /* track skew factor-MSB */ | ||
1017 | u32 csf:16; /* cylinder skew factor-MSB */ | ||
1018 | |||
1019 | #ifdef __BIGENDIAN | ||
1020 | u32 ssec:1; /* soft sector formatting */ | ||
1021 | u32 hsec:1; /* hard sector formatting */ | ||
1022 | u32 rmb:1; /* removable media */ | ||
1023 | u32 surf:1; /* surface */ | ||
1024 | u32 reserved2:4; | ||
1025 | #else | ||
1026 | u32 reserved2:4; | ||
1027 | u32 surf:1; /* surface */ | ||
1028 | u32 rmb:1; /* removable media */ | ||
1029 | u32 hsec:1; /* hard sector formatting */ | ||
1030 | u32 ssec:1; /* soft sector formatting */ | ||
1031 | #endif | ||
1032 | u32 reserved3:24; | ||
1033 | }; | ||
1034 | |||
1035 | /* | ||
1036 | * SCSI rigid disk device geometry page | ||
1037 | */ | ||
1038 | struct scsi_mp_rigid_device_geometry_s{ | ||
1039 | #ifdef __BIGENDIAN | ||
1040 | u32 ps:1; | ||
1041 | u32 reserved1:1; | ||
1042 | u32 page_code:6; | ||
1043 | #else | ||
1044 | u32 page_code:6; | ||
1045 | u32 reserved1:1; | ||
1046 | u32 ps:1; | ||
1047 | #endif | ||
1048 | u32 page_len:8; | ||
1049 | u32 num_cylinders0:8; | ||
1050 | u32 num_cylinders1:8; | ||
1051 | |||
1052 | u32 num_cylinders2:8; | ||
1053 | u32 num_heads:8; | ||
1054 | u32 scwp0:8; | ||
1055 | u32 scwp1:8; | ||
1056 | |||
1057 | u32 scwp2:8; | ||
1058 | u32 scrwc0:8; | ||
1059 | u32 scrwc1:8; | ||
1060 | u32 scrwc2:8; | ||
1061 | |||
1062 | u32 dsr:16; | ||
1063 | u32 lscyl0:8; | ||
1064 | u32 lscyl1:8; | ||
1065 | |||
1066 | u32 lscyl2:8; | ||
1067 | #ifdef __BIGENDIAN | ||
1068 | u32 reserved2:6; | ||
1069 | u32 rpl:2; /* rotational position locking */ | ||
1070 | #else | ||
1071 | u32 rpl:2; /* rotational position locking */ | ||
1072 | u32 reserved2:6; | ||
1073 | #endif | ||
1074 | u32 rot_off:8; | ||
1075 | u32 reserved3:8; | ||
1076 | |||
1077 | u32 med_rot_rate:16; | ||
1078 | u32 reserved4:16; | ||
1079 | }; | ||
1080 | |||
1081 | /* | ||
1082 | * SCSI caching mode page | ||
1083 | */ | ||
1084 | struct scsi_mp_caching_s{ | ||
1085 | #ifdef __BIGENDIAN | ||
1086 | u8 ps:1; | ||
1087 | u8 res1:1; | ||
1088 | u8 page_code:6; | ||
1089 | #else | ||
1090 | u8 page_code:6; | ||
1091 | u8 res1:1; | ||
1092 | u8 ps:1; | ||
1093 | #endif | ||
1094 | u8 page_len; | ||
1095 | #ifdef __BIGENDIAN | ||
1096 | u8 ic:1; /* initiator control */ | ||
1097 | u8 abpf:1; /* abort pre-fetch */ | ||
1098 | u8 cap:1; /* caching analysis permitted */ | ||
1099 | u8 disc:1; /* discontinuity */ | ||
1100 | u8 size:1; /* size enable */ | ||
1101 | u8 wce:1; /* write cache enable */ | ||
1102 | u8 mf:1; /* multiplication factor */ | ||
1103 | u8 rcd:1; /* read cache disable */ | ||
1104 | |||
1105 | u8 drrp:4; /* demand read retention priority */ | ||
1106 | u8 wrp:4; /* write retention priority */ | ||
1107 | #else | ||
1108 | u8 rcd:1; /* read cache disable */ | ||
1109 | u8 mf:1; /* multiplication factor */ | ||
1110 | u8 wce:1; /* write cache enable */ | ||
1111 | u8 size:1; /* size enable */ | ||
1112 | u8 disc:1; /* discontinuity */ | ||
1113 | u8 cap:1; /* caching analysis permitted */ | ||
1114 | u8 abpf:1; /* abort pre-fetch */ | ||
1115 | u8 ic:1; /* initiator control */ | ||
1116 | |||
1117 | u8 wrp:4; /* write retention priority */ | ||
1118 | u8 drrp:4; /* demand read retention priority */ | ||
1119 | #endif | ||
1120 | u8 dptl[2];/* disable pre-fetch transfer length */ | ||
1121 | u8 min_prefetch[2]; | ||
1122 | u8 max_prefetch[2]; | ||
1123 | u8 max_prefetch_limit[2]; | ||
1124 | #ifdef __BIGENDIAN | ||
1125 | u8 fsw:1; /* force sequential write */ | ||
1126 | u8 lbcss:1;/* logical block cache segment size */ | ||
1127 | u8 dra:1; /* disable read ahead */ | ||
1128 | u8 vs:2; /* vendor specific */ | ||
1129 | u8 res2:3; | ||
1130 | #else | ||
1131 | u8 res2:3; | ||
1132 | u8 vs:2; /* vendor specific */ | ||
1133 | u8 dra:1; /* disable read ahead */ | ||
1134 | u8 lbcss:1;/* logical block cache segment size */ | ||
1135 | u8 fsw:1; /* force sequential write */ | ||
1136 | #endif | ||
1137 | u8 num_cache_segs; | ||
1138 | |||
1139 | u8 cache_seg_size[2]; | ||
1140 | u8 res3; | ||
1141 | u8 non_cache_seg_size[3]; | ||
1142 | }; | ||
1143 | |||
1144 | /* | ||
1145 | * SCSI control mode page | ||
1146 | */ | ||
1147 | struct scsi_mp_control_page_s{ | ||
1148 | #ifdef __BIGENDIAN | ||
1149 | u8 ps:1; | ||
1150 | u8 reserved1:1; | ||
1151 | u8 page_code:6; | ||
1152 | #else | ||
1153 | u8 page_code:6; | ||
1154 | u8 reserved1:1; | ||
1155 | u8 ps:1; | ||
1156 | #endif | ||
1157 | u8 page_len; | ||
1158 | #ifdef __BIGENDIAN | ||
1159 | u8 tst:3; /* task set type */ | ||
1160 | u8 reserved3:3; | ||
1161 | u8 gltsd:1; /* global logging target save disable */ | ||
1162 | u8 rlec:1; /* report log exception condition */ | ||
1163 | |||
1164 | u8 qalgo_mod:4; /* queue alogorithm modifier */ | ||
1165 | u8 reserved4:1; | ||
1166 | u8 qerr:2; /* queue error management */ | ||
1167 | u8 dque:1; /* disable queuing */ | ||
1168 | |||
1169 | u8 reserved5:1; | ||
1170 | u8 rac:1; /* report a check */ | ||
1171 | u8 reserved6:2; | ||
1172 | u8 swp:1; /* software write protect */ | ||
1173 | u8 raerp:1; /* ready AER permission */ | ||
1174 | u8 uaaerp:1; /* unit attenstion AER permission */ | ||
1175 | u8 eaerp:1; /* error AER permission */ | ||
1176 | |||
1177 | u8 reserved7:5; | ||
1178 | u8 autoload_mod:3; | ||
1179 | #else | ||
1180 | u8 rlec:1; /* report log exception condition */ | ||
1181 | u8 gltsd:1; /* global logging target save disable */ | ||
1182 | u8 reserved3:3; | ||
1183 | u8 tst:3; /* task set type */ | ||
1184 | |||
1185 | u8 dque:1; /* disable queuing */ | ||
1186 | u8 qerr:2; /* queue error management */ | ||
1187 | u8 reserved4:1; | ||
1188 | u8 qalgo_mod:4; /* queue alogorithm modifier */ | ||
1189 | |||
1190 | u8 eaerp:1; /* error AER permission */ | ||
1191 | u8 uaaerp:1; /* unit attenstion AER permission */ | ||
1192 | u8 raerp:1; /* ready AER permission */ | ||
1193 | u8 swp:1; /* software write protect */ | ||
1194 | u8 reserved6:2; | ||
1195 | u8 rac:1; /* report a check */ | ||
1196 | u8 reserved5:1; | ||
1197 | |||
1198 | u8 autoload_mod:3; | ||
1199 | u8 reserved7:5; | ||
1200 | #endif | ||
1201 | u8 rahp_msb; /* ready AER holdoff period - MSB */ | ||
1202 | u8 rahp_lsb; /* ready AER holdoff period - LSB */ | ||
1203 | |||
1204 | u8 busy_timeout_period_msb; | ||
1205 | u8 busy_timeout_period_lsb; | ||
1206 | |||
1207 | u8 ext_selftest_compl_time_msb; | ||
1208 | u8 ext_selftest_compl_time_lsb; | ||
1209 | }; | ||
1210 | |||
1211 | /* | ||
1212 | * SCSI medium types supported mode page | ||
1213 | */ | ||
1214 | struct scsi_mp_medium_types_sup_s{ | ||
1215 | #ifdef __BIGENDIAN | ||
1216 | u8 ps:1; | ||
1217 | u8 reserved1:1; | ||
1218 | u8 page_code:6; | ||
1219 | #else | ||
1220 | u8 page_code:6; | ||
1221 | u8 reserved1:1; | ||
1222 | u8 ps:1; | ||
1223 | #endif | ||
1224 | u8 page_len; | ||
1225 | |||
1226 | u8 reserved3[2]; | ||
1227 | u8 med_type1_sup; /* medium type one supported */ | ||
1228 | u8 med_type2_sup; /* medium type two supported */ | ||
1229 | u8 med_type3_sup; /* medium type three supported */ | ||
1230 | u8 med_type4_sup; /* medium type four supported */ | ||
1231 | }; | ||
1232 | |||
1233 | /* | ||
1234 | * SCSI informational exception control mode page | ||
1235 | */ | ||
1236 | struct scsi_mp_info_excpt_cntl_s{ | ||
1237 | #ifdef __BIGENDIAN | ||
1238 | u8 ps:1; | ||
1239 | u8 reserved1:1; | ||
1240 | u8 page_code:6; | ||
1241 | #else | ||
1242 | u8 page_code:6; | ||
1243 | u8 reserved1:1; | ||
1244 | u8 ps:1; | ||
1245 | #endif | ||
1246 | u8 page_len; | ||
1247 | #ifdef __BIGENDIAN | ||
1248 | u8 perf:1; /* performance */ | ||
1249 | u8 reserved3:1; | ||
1250 | u8 ebf:1; /* enable background fucntion */ | ||
1251 | u8 ewasc:1; /* enable warning */ | ||
1252 | u8 dexcpt:1; /* disable exception control */ | ||
1253 | u8 test:1; /* enable test device failure | ||
1254 | * notification | ||
1255 | */ | ||
1256 | u8 reserved4:1; | ||
1257 | u8 log_error:1; | ||
1258 | |||
1259 | u8 reserved5:4; | ||
1260 | u8 mrie:4; /* method of reporting info | ||
1261 | * exceptions | ||
1262 | */ | ||
1263 | #else | ||
1264 | u8 log_error:1; | ||
1265 | u8 reserved4:1; | ||
1266 | u8 test:1; /* enable test device failure | ||
1267 | * notification | ||
1268 | */ | ||
1269 | u8 dexcpt:1; /* disable exception control */ | ||
1270 | u8 ewasc:1; /* enable warning */ | ||
1271 | u8 ebf:1; /* enable background fucntion */ | ||
1272 | u8 reserved3:1; | ||
1273 | u8 perf:1; /* performance */ | ||
1274 | |||
1275 | u8 mrie:4; /* method of reporting info | ||
1276 | * exceptions | ||
1277 | */ | ||
1278 | u8 reserved5:4; | ||
1279 | #endif | ||
1280 | u8 interval_timer_msb; | ||
1281 | u8 interval_timer_lsb; | ||
1282 | |||
1283 | u8 report_count_msb; | ||
1284 | u8 report_count_lsb; | ||
1285 | }; | ||
1286 | |||
1287 | /* | ||
1288 | * Methods of reporting informational exceptions | ||
1289 | */ | ||
1290 | #define SCSI_MP_IEC_NO_REPORT 0x0 /* no reporting of exceptions */ | ||
1291 | #define SCSI_MP_IEC_AER 0x1 /* async event reporting */ | ||
1292 | #define SCSI_MP_IEC_UNIT_ATTN 0x2 /* generate unit attenstion */ | ||
1293 | #define SCSI_MO_IEC_COND_REC_ERR 0x3 /* conditionally generate recovered | ||
1294 | * error | ||
1295 | */ | ||
1296 | #define SCSI_MP_IEC_UNCOND_REC_ERR 0x4 /* unconditionally generate recovered | ||
1297 | * error | ||
1298 | */ | ||
1299 | #define SCSI_MP_IEC_NO_SENSE 0x5 /* generate no sense */ | ||
1300 | #define SCSI_MP_IEC_ON_REQUEST 0x6 /* only report exceptions on request */ | ||
1301 | |||
1302 | /* | ||
1303 | * SCSI flexible disk page | ||
1304 | */ | ||
1305 | struct scsi_mp_flexible_disk_s{ | ||
1306 | #ifdef __BIGENDIAN | ||
1307 | u8 ps:1; | ||
1308 | u8 reserved1:1; | ||
1309 | u8 page_code:6; | ||
1310 | #else | ||
1311 | u8 page_code:6; | ||
1312 | u8 reserved1:1; | ||
1313 | u8 ps:1; | ||
1314 | #endif | ||
1315 | u8 page_len; | ||
1316 | |||
1317 | u8 transfer_rate_msb; | ||
1318 | u8 transfer_rate_lsb; | ||
1319 | |||
1320 | u8 num_heads; | ||
1321 | u8 num_sectors; | ||
1322 | |||
1323 | u8 bytes_per_sector_msb; | ||
1324 | u8 bytes_per_sector_lsb; | ||
1325 | |||
1326 | u8 num_cylinders_msb; | ||
1327 | u8 num_cylinders_lsb; | ||
1328 | |||
1329 | u8 sc_wpc_msb; /* starting cylinder-write | ||
1330 | * precompensation msb | ||
1331 | */ | ||
1332 | u8 sc_wpc_lsb; /* starting cylinder-write | ||
1333 | * precompensation lsb | ||
1334 | */ | ||
1335 | u8 sc_rwc_msb; /* starting cylinder-reduced write | ||
1336 | * current msb | ||
1337 | */ | ||
1338 | u8 sc_rwc_lsb; /* starting cylinder-reduced write | ||
1339 | * current lsb | ||
1340 | */ | ||
1341 | |||
1342 | u8 dev_step_rate_msb; | ||
1343 | u8 dev_step_rate_lsb; | ||
1344 | |||
1345 | u8 dev_step_pulse_width; | ||
1346 | |||
1347 | u8 head_sd_msb; /* head settle delay msb */ | ||
1348 | u8 head_sd_lsb; /* head settle delay lsb */ | ||
1349 | |||
1350 | u8 motor_on_delay; | ||
1351 | u8 motor_off_delay; | ||
1352 | #ifdef __BIGENDIAN | ||
1353 | u8 trdy:1; /* true ready bit */ | ||
1354 | u8 ssn:1; /* start sector number bit */ | ||
1355 | u8 mo:1; /* motor on bit */ | ||
1356 | u8 reserved3:5; | ||
1357 | |||
1358 | u8 reserved4:4; | ||
1359 | u8 spc:4; /* step pulse per cylinder */ | ||
1360 | #else | ||
1361 | u8 reserved3:5; | ||
1362 | u8 mo:1; /* motor on bit */ | ||
1363 | u8 ssn:1; /* start sector number bit */ | ||
1364 | u8 trdy:1; /* true ready bit */ | ||
1365 | |||
1366 | u8 spc:4; /* step pulse per cylinder */ | ||
1367 | u8 reserved4:4; | ||
1368 | #endif | ||
1369 | u8 write_comp; | ||
1370 | u8 head_load_delay; | ||
1371 | u8 head_unload_delay; | ||
1372 | #ifdef __BIGENDIAN | ||
1373 | u8 pin34:4; /* pin34 usage */ | ||
1374 | u8 pin2:4; /* pin2 usage */ | ||
1375 | |||
1376 | u8 pin4:4; /* pin4 usage */ | ||
1377 | u8 pin1:4; /* pin1 usage */ | ||
1378 | #else | ||
1379 | u8 pin2:4; /* pin2 usage */ | ||
1380 | u8 pin34:4; /* pin34 usage */ | ||
1381 | |||
1382 | u8 pin1:4; /* pin1 usage */ | ||
1383 | u8 pin4:4; /* pin4 usage */ | ||
1384 | #endif | ||
1385 | u8 med_rot_rate_msb; | ||
1386 | u8 med_rot_rate_lsb; | ||
1387 | |||
1388 | u8 reserved5[2]; | ||
1389 | }; | ||
1390 | |||
1391 | struct scsi_mode_page_format_data6_s{ | ||
1392 | struct scsi_mode_param_header6_s mph; /* mode page header */ | ||
1393 | struct scsi_mode_param_desc_s desc; /* block descriptor */ | ||
1394 | struct scsi_mp_format_device_s format; /* format device data */ | ||
1395 | }; | ||
1396 | |||
1397 | struct scsi_mode_page_format_data10_s{ | ||
1398 | struct scsi_mode_param_header10_s mph; /* mode page header */ | ||
1399 | struct scsi_mode_param_desc_s desc; /* block descriptor */ | ||
1400 | struct scsi_mp_format_device_s format; /* format device data */ | ||
1401 | }; | ||
1402 | |||
1403 | struct scsi_mode_page_rdg_data6_s{ | ||
1404 | struct scsi_mode_param_header6_s mph; /* mode page header */ | ||
1405 | struct scsi_mode_param_desc_s desc; /* block descriptor */ | ||
1406 | struct scsi_mp_rigid_device_geometry_s rdg; | ||
1407 | /* rigid geometry data */ | ||
1408 | }; | ||
1409 | |||
1410 | struct scsi_mode_page_rdg_data10_s{ | ||
1411 | struct scsi_mode_param_header10_s mph; /* mode page header */ | ||
1412 | struct scsi_mode_param_desc_s desc; /* block descriptor */ | ||
1413 | struct scsi_mp_rigid_device_geometry_s rdg; | ||
1414 | /* rigid geometry data */ | ||
1415 | }; | ||
1416 | |||
1417 | struct scsi_mode_page_cache6_s{ | ||
1418 | struct scsi_mode_param_header6_s mph; /* mode page header */ | ||
1419 | struct scsi_mode_param_desc_s desc; /* block descriptor */ | ||
1420 | struct scsi_mp_caching_s cache; /* cache page data */ | ||
1421 | }; | ||
1422 | |||
1423 | struct scsi_mode_page_cache10_s{ | ||
1424 | struct scsi_mode_param_header10_s mph; /* mode page header */ | ||
1425 | struct scsi_mode_param_desc_s desc; /* block descriptor */ | ||
1426 | struct scsi_mp_caching_s cache; /* cache page data */ | ||
1427 | }; | ||
1428 | |||
1429 | /* -------------------------------------------------------------- | ||
1430 | * Format Unit command | ||
1431 | * ------------------------------------------------------------ | ||
1432 | */ | ||
1433 | |||
1434 | /* | ||
1435 | * Format Unit CDB | ||
1436 | */ | ||
1437 | struct scsi_format_unit_s{ | ||
1438 | u8 opcode; | ||
1439 | #ifdef __BIGENDIAN | ||
1440 | u8 res1:3; | ||
1441 | u8 fmtdata:1; /* if set, data out phase has format | ||
1442 | * data | ||
1443 | */ | ||
1444 | u8 cmplst:1; /* if set, defect list is complete */ | ||
1445 | u8 def_list:3; /* format of defect descriptor is | ||
1446 | * fmtdata =1 | ||
1447 | */ | ||
1448 | #else | ||
1449 | u8 def_list:3; /* format of defect descriptor is | ||
1450 | * fmtdata = 1 | ||
1451 | */ | ||
1452 | u8 cmplst:1; /* if set, defect list is complete */ | ||
1453 | u8 fmtdata:1; /* if set, data out phase has format | ||
1454 | * data | ||
1455 | */ | ||
1456 | u8 res1:3; | ||
1457 | #endif | ||
1458 | u8 interleave_msb; | ||
1459 | u8 interleave_lsb; | ||
1460 | u8 vendor_spec; | ||
1461 | u8 control; | ||
1462 | }; | ||
1463 | |||
1464 | /* | ||
1465 | * h | ||
1466 | */ | ||
1467 | struct scsi_reserve6_s{ | ||
1468 | u8 opcode; | ||
1469 | #ifdef __BIGENDIAN | ||
1470 | u8 reserved:3; | ||
1471 | u8 obsolete:4; | ||
1472 | u8 extent:1; | ||
1473 | #else | ||
1474 | u8 extent:1; | ||
1475 | u8 obsolete:4; | ||
1476 | u8 reserved:3; | ||
1477 | #endif | ||
1478 | u8 reservation_id; | ||
1479 | u16 param_list_len; | ||
1480 | u8 control; | ||
1481 | }; | ||
1482 | |||
1483 | /* | ||
1484 | * h | ||
1485 | */ | ||
1486 | struct scsi_release6_s{ | ||
1487 | u8 opcode; | ||
1488 | #ifdef __BIGENDIAN | ||
1489 | u8 reserved1:3; | ||
1490 | u8 obsolete:4; | ||
1491 | u8 extent:1; | ||
1492 | #else | ||
1493 | u8 extent:1; | ||
1494 | u8 obsolete:4; | ||
1495 | u8 reserved1:3; | ||
1496 | #endif | ||
1497 | u8 reservation_id; | ||
1498 | u16 reserved2; | ||
1499 | u8 control; | ||
1500 | }; | ||
1501 | |||
1502 | /* | ||
1503 | * h | ||
1504 | */ | ||
1505 | struct scsi_reserve10_s{ | ||
1506 | u8 opcode; | ||
1507 | #ifdef __BIGENDIAN | ||
1508 | u8 reserved1:3; | ||
1509 | u8 third_party:1; | ||
1510 | u8 reserved2:2; | ||
1511 | u8 long_id:1; | ||
1512 | u8 extent:1; | ||
1513 | #else | ||
1514 | u8 extent:1; | ||
1515 | u8 long_id:1; | ||
1516 | u8 reserved2:2; | ||
1517 | u8 third_party:1; | ||
1518 | u8 reserved1:3; | ||
1519 | #endif | ||
1520 | u8 reservation_id; | ||
1521 | u8 third_pty_dev_id; | ||
1522 | u8 reserved3; | ||
1523 | u8 reserved4; | ||
1524 | u8 reserved5; | ||
1525 | u16 param_list_len; | ||
1526 | u8 control; | ||
1527 | }; | ||
1528 | |||
1529 | struct scsi_release10_s{ | ||
1530 | u8 opcode; | ||
1531 | #ifdef __BIGENDIAN | ||
1532 | u8 reserved1:3; | ||
1533 | u8 third_party:1; | ||
1534 | u8 reserved2:2; | ||
1535 | u8 long_id:1; | ||
1536 | u8 extent:1; | ||
1537 | #else | ||
1538 | u8 extent:1; | ||
1539 | u8 long_id:1; | ||
1540 | u8 reserved2:2; | ||
1541 | u8 third_party:1; | ||
1542 | u8 reserved1:3; | ||
1543 | #endif | ||
1544 | u8 reservation_id; | ||
1545 | u8 third_pty_dev_id; | ||
1546 | u8 reserved3; | ||
1547 | u8 reserved4; | ||
1548 | u8 reserved5; | ||
1549 | u16 param_list_len; | ||
1550 | u8 control; | ||
1551 | }; | ||
1552 | |||
1553 | struct scsi_verify10_s{ | ||
1554 | u8 opcode; | ||
1555 | #ifdef __BIGENDIAN | ||
1556 | u8 lun:3; | ||
1557 | u8 dpo:1; | ||
1558 | u8 reserved:2; | ||
1559 | u8 bytchk:1; | ||
1560 | u8 reladdr:1; | ||
1561 | #else | ||
1562 | u8 reladdr:1; | ||
1563 | u8 bytchk:1; | ||
1564 | u8 reserved:2; | ||
1565 | u8 dpo:1; | ||
1566 | u8 lun:3; | ||
1567 | #endif | ||
1568 | u8 lba0; | ||
1569 | u8 lba1; | ||
1570 | u8 lba2; | ||
1571 | u8 lba3; | ||
1572 | u8 reserved1; | ||
1573 | u8 verification_len0; | ||
1574 | u8 verification_len1; | ||
1575 | u8 control_byte; | ||
1576 | }; | ||
1577 | |||
1578 | struct scsi_request_sense_s{ | ||
1579 | u8 opcode; | ||
1580 | #ifdef __BIGENDIAN | ||
1581 | u8 lun:3; | ||
1582 | u8 reserved:5; | ||
1583 | #else | ||
1584 | u8 reserved:5; | ||
1585 | u8 lun:3; | ||
1586 | #endif | ||
1587 | u8 reserved0; | ||
1588 | u8 reserved1; | ||
1589 | u8 alloc_len; | ||
1590 | u8 control_byte; | ||
1591 | }; | ||
1592 | |||
1593 | /* ------------------------------------------------------------ | ||
1594 | * SCSI status byte values | ||
1595 | * ------------------------------------------------------------ | ||
1596 | */ | ||
1597 | #define SCSI_STATUS_GOOD 0x00 | ||
1598 | #define SCSI_STATUS_CHECK_CONDITION 0x02 | ||
1599 | #define SCSI_STATUS_CONDITION_MET 0x04 | ||
1600 | #define SCSI_STATUS_BUSY 0x08 | ||
1601 | #define SCSI_STATUS_INTERMEDIATE 0x10 | ||
1602 | #define SCSI_STATUS_ICM 0x14 /* intermediate condition met */ | ||
1603 | #define SCSI_STATUS_RESERVATION_CONFLICT 0x18 | ||
1604 | #define SCSI_STATUS_COMMAND_TERMINATED 0x22 | ||
1605 | #define SCSI_STATUS_QUEUE_FULL 0x28 | ||
1606 | #define SCSI_STATUS_ACA_ACTIVE 0x30 | ||
1607 | |||
1608 | #define SCSI_MAX_ALLOC_LEN 0xFF /* maximum allocarion length | ||
1609 | * in CDBs | ||
1610 | */ | ||
1611 | |||
1612 | #define SCSI_OP_WRITE_VERIFY10 0x2E | ||
1613 | #define SCSI_OP_WRITE_VERIFY12 0xAE | ||
1614 | #define SCSI_OP_UNDEF 0xFF | ||
1615 | |||
1616 | /* | ||
1617 | * SCSI WRITE-VERIFY(10) command | ||
1618 | */ | ||
1619 | struct scsi_write_verify10_s{ | ||
1620 | u8 opcode; | ||
1621 | #ifdef __BIGENDIAN | ||
1622 | u8 reserved1:3; | ||
1623 | u8 dpo:1; /* Disable Page Out */ | ||
1624 | u8 reserved2:1; | ||
1625 | u8 ebp:1; /* erse by-pass */ | ||
1626 | u8 bytchk:1; /* byte check */ | ||
1627 | u8 rel_adr:1; /* relative address */ | ||
1628 | #else | ||
1629 | u8 rel_adr:1; /* relative address */ | ||
1630 | u8 bytchk:1; /* byte check */ | ||
1631 | u8 ebp:1; /* erse by-pass */ | ||
1632 | u8 reserved2:1; | ||
1633 | u8 dpo:1; /* Disable Page Out */ | ||
1634 | u8 reserved1:3; | ||
1635 | #endif | ||
1636 | u8 lba0; /* logical block address - MSB */ | ||
1637 | u8 lba1; | ||
1638 | u8 lba2; | ||
1639 | u8 lba3; /* LSB */ | ||
1640 | u8 reserved3; | ||
1641 | u8 xfer_length0; /* transfer length in blocks - MSB */ | ||
1642 | u8 xfer_length1; /* LSB */ | ||
1643 | u8 control; | ||
1644 | }; | ||
1645 | |||
1646 | #pragma pack() | ||
1647 | |||
1648 | #endif /* __SCSI_H__ */ | ||
diff --git a/drivers/scsi/bfa/include/protocol/types.h b/drivers/scsi/bfa/include/protocol/types.h new file mode 100644 index 000000000000..2875a6cced3b --- /dev/null +++ b/drivers/scsi/bfa/include/protocol/types.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
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 | ||
11 | * | ||
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. | ||
16 | */ | ||
17 | |||
18 | /** | ||
19 | * types.h Protocol defined base types | ||
20 | */ | ||
21 | |||
22 | #ifndef __TYPES_H__ | ||
23 | #define __TYPES_H__ | ||
24 | |||
25 | #include <bfa_os_inc.h> | ||
26 | |||
27 | #define wwn_t u64 | ||
28 | #define lun_t u64 | ||
29 | |||
30 | #define WWN_NULL (0) | ||
31 | #define FC_SYMNAME_MAX 256 /* max name server symbolic name size */ | ||
32 | #define FC_ALPA_MAX 128 | ||
33 | |||
34 | #pragma pack(1) | ||
35 | |||
36 | #define MAC_ADDRLEN (6) | ||
37 | struct mac_s { u8 mac[MAC_ADDRLEN]; }; | ||
38 | #define mac_t struct mac_s | ||
39 | |||
40 | #pragma pack() | ||
41 | |||
42 | #endif | ||