fcoe_sysfs.h (3223B)
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 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 char work_q_name[20]; 54 struct workqueue_struct *work_q; 55 char devloss_work_q_name[20]; 56 struct workqueue_struct *devloss_work_q; 57 struct mutex lock; 58 59 int fcf_dev_loss_tmo; 60 enum fip_conn_type mode; 61 62 enum ctlr_enabled_state enabled; 63 64 /* expected in host order for displaying */ 65 struct fcoe_fc_els_lesb lesb; 66}; 67 68static inline void *fcoe_ctlr_device_priv(const struct fcoe_ctlr_device *ctlr) 69{ 70 return (void *)(ctlr + 1); 71} 72 73/* fcf states */ 74enum fcf_state { 75 FCOE_FCF_STATE_UNKNOWN, 76 FCOE_FCF_STATE_DISCONNECTED, 77 FCOE_FCF_STATE_CONNECTED, 78 FCOE_FCF_STATE_DELETED, 79}; 80 81struct fcoe_fcf_device { 82 u32 id; 83 struct device dev; 84 struct list_head peers; 85 struct work_struct delete_work; 86 struct delayed_work dev_loss_work; 87 u32 dev_loss_tmo; 88 void *priv; 89 enum fcf_state state; 90 91 u64 fabric_name; 92 u64 switch_name; 93 u32 fc_map; 94 u16 vfid; 95 u8 mac[ETH_ALEN]; 96 u8 priority; 97 u32 fka_period; 98 u8 selected; 99 u16 vlan_id; 100}; 101 102#define dev_to_fcf(d) \ 103 container_of((d), struct fcoe_fcf_device, dev) 104/* parentage should never be missing */ 105#define fcoe_fcf_dev_to_ctlr_dev(x) \ 106 dev_to_ctlr((x)->dev.parent) 107#define fcoe_fcf_device_priv(x) \ 108 ((x)->priv) 109 110struct fcoe_ctlr_device *fcoe_ctlr_device_add(struct device *parent, 111 struct fcoe_sysfs_function_template *f, 112 int priv_size); 113void fcoe_ctlr_device_delete(struct fcoe_ctlr_device *); 114struct fcoe_fcf_device *fcoe_fcf_device_add(struct fcoe_ctlr_device *, 115 struct fcoe_fcf_device *); 116void fcoe_fcf_device_delete(struct fcoe_fcf_device *); 117 118int __init fcoe_sysfs_setup(void); 119void __exit fcoe_sysfs_teardown(void); 120 121#endif /* FCOE_SYSFS */