brintos

brintos / linux-shallow public Read only

0
0
Text · 3.1 KiB · 2b28a05 Raw
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