120 lines · c
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.org6 */7 8#ifndef FCOE_SYSFS9#define FCOE_SYSFS10 11#include <linux/if_ether.h>12#include <linux/device.h>13#include <scsi/fc/fc_fcoe.h>14 15struct fcoe_ctlr_device;16struct fcoe_fcf_device;17 18struct 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 34enum fip_conn_type {35 FIP_CONN_TYPE_UNKNOWN,36 FIP_CONN_TYPE_FABRIC,37 FIP_CONN_TYPE_VN2VN,38};39 40enum ctlr_enabled_state {41 FCOE_CTLR_ENABLED,42 FCOE_CTLR_DISABLED,43 FCOE_CTLR_UNUSED,44};45 46struct 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 66static inline void *fcoe_ctlr_device_priv(const struct fcoe_ctlr_device *ctlr)67{68 return (void *)(ctlr + 1);69}70 71/* fcf states */72enum fcf_state {73 FCOE_FCF_STATE_UNKNOWN,74 FCOE_FCF_STATE_DISCONNECTED,75 FCOE_FCF_STATE_CONNECTED,76 FCOE_FCF_STATE_DELETED,77};78 79struct 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 108struct fcoe_ctlr_device *fcoe_ctlr_device_add(struct device *parent,109 struct fcoe_sysfs_function_template *f,110 int priv_size);111void fcoe_ctlr_device_delete(struct fcoe_ctlr_device *);112struct fcoe_fcf_device *fcoe_fcf_device_add(struct fcoe_ctlr_device *,113 struct fcoe_fcf_device *);114void fcoe_fcf_device_delete(struct fcoe_fcf_device *);115 116int __init fcoe_sysfs_setup(void);117void __exit fcoe_sysfs_teardown(void);118 119#endif /* FCOE_SYSFS */120