linux/include/scsi/fcoe_sysfs.h
<<
>>
Prefs
   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 */
 122