Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/scsi/fcoe_sysfs.h
26285 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright (c) 2011-2012 Intel Corporation. All rights reserved.
4
*
5
* Maintained at www.Open-FCoE.org
6
*/
7
8
#ifndef FCOE_SYSFS
9
#define FCOE_SYSFS
10
11
#include <linux/if_ether.h>
12
#include <linux/device.h>
13
#include <scsi/fc/fc_fcoe.h>
14
15
struct fcoe_ctlr_device;
16
struct fcoe_fcf_device;
17
18
struct fcoe_sysfs_function_template {
19
void (*get_fcoe_ctlr_link_fail)(struct fcoe_ctlr_device *);
20
void (*get_fcoe_ctlr_vlink_fail)(struct fcoe_ctlr_device *);
21
void (*get_fcoe_ctlr_miss_fka)(struct fcoe_ctlr_device *);
22
void (*get_fcoe_ctlr_symb_err)(struct fcoe_ctlr_device *);
23
void (*get_fcoe_ctlr_err_block)(struct fcoe_ctlr_device *);
24
void (*get_fcoe_ctlr_fcs_error)(struct fcoe_ctlr_device *);
25
void (*set_fcoe_ctlr_mode)(struct fcoe_ctlr_device *);
26
int (*set_fcoe_ctlr_enabled)(struct fcoe_ctlr_device *);
27
void (*get_fcoe_fcf_selected)(struct fcoe_fcf_device *);
28
void (*get_fcoe_fcf_vlan_id)(struct fcoe_fcf_device *);
29
};
30
31
#define dev_to_ctlr(d) \
32
container_of((d), struct fcoe_ctlr_device, dev)
33
34
enum fip_conn_type {
35
FIP_CONN_TYPE_UNKNOWN,
36
FIP_CONN_TYPE_FABRIC,
37
FIP_CONN_TYPE_VN2VN,
38
};
39
40
enum ctlr_enabled_state {
41
FCOE_CTLR_ENABLED,
42
FCOE_CTLR_DISABLED,
43
FCOE_CTLR_UNUSED,
44
};
45
46
struct fcoe_ctlr_device {
47
u32 id;
48
49
struct device dev;
50
struct fcoe_sysfs_function_template *f;
51
52
struct list_head fcfs;
53
struct workqueue_struct *work_q;
54
struct workqueue_struct *devloss_work_q;
55
struct mutex lock;
56
57
int fcf_dev_loss_tmo;
58
enum fip_conn_type mode;
59
60
enum ctlr_enabled_state enabled;
61
62
/* expected in host order for displaying */
63
struct fcoe_fc_els_lesb lesb;
64
};
65
66
static inline void *fcoe_ctlr_device_priv(const struct fcoe_ctlr_device *ctlr)
67
{
68
return (void *)(ctlr + 1);
69
}
70
71
/* fcf states */
72
enum fcf_state {
73
FCOE_FCF_STATE_UNKNOWN,
74
FCOE_FCF_STATE_DISCONNECTED,
75
FCOE_FCF_STATE_CONNECTED,
76
FCOE_FCF_STATE_DELETED,
77
};
78
79
struct fcoe_fcf_device {
80
u32 id;
81
struct device dev;
82
struct list_head peers;
83
struct work_struct delete_work;
84
struct delayed_work dev_loss_work;
85
u32 dev_loss_tmo;
86
void *priv;
87
enum fcf_state state;
88
89
u64 fabric_name;
90
u64 switch_name;
91
u32 fc_map;
92
u16 vfid;
93
u8 mac[ETH_ALEN];
94
u8 priority;
95
u32 fka_period;
96
u8 selected;
97
u16 vlan_id;
98
};
99
100
#define dev_to_fcf(d) \
101
container_of((d), struct fcoe_fcf_device, dev)
102
/* parentage should never be missing */
103
#define fcoe_fcf_dev_to_ctlr_dev(x) \
104
dev_to_ctlr((x)->dev.parent)
105
#define fcoe_fcf_device_priv(x) \
106
((x)->priv)
107
108
struct fcoe_ctlr_device *fcoe_ctlr_device_add(struct device *parent,
109
struct fcoe_sysfs_function_template *f,
110
int priv_size);
111
void fcoe_ctlr_device_delete(struct fcoe_ctlr_device *);
112
struct fcoe_fcf_device *fcoe_fcf_device_add(struct fcoe_ctlr_device *,
113
struct fcoe_fcf_device *);
114
void fcoe_fcf_device_delete(struct fcoe_fcf_device *);
115
116
int __init fcoe_sysfs_setup(void);
117
void __exit fcoe_sysfs_teardown(void);
118
119
#endif /* FCOE_SYSFS */
120
121