linux/drivers/scsi/fcoe/fcoe.h
<<
>>
Prefs
   1/*
   2 * Copyright(c) 2009 Intel Corporation. All rights reserved.
   3 *
   4 * This program is free software; you can redistribute it and/or modify it
   5 * under the terms and conditions of the GNU General Public License,
   6 * version 2, as published by the Free Software Foundation.
   7 *
   8 * This program is distributed in the hope it will be useful, but WITHOUT
   9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  10 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  11 * more details.
  12 *
  13 * You should have received a copy of the GNU General Public License along with
  14 * this program; if not, write to the Free Software Foundation, Inc.,
  15 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  16 *
  17 * Maintained at www.Open-FCoE.org
  18 */
  19
  20#ifndef _FCOE_H_
  21#define _FCOE_H_
  22
  23#include <linux/skbuff.h>
  24#include <linux/kthread.h>
  25
  26#define FCOE_MAX_QUEUE_DEPTH    256
  27#define FCOE_LOW_QUEUE_DEPTH    32
  28
  29#define FCOE_WORD_TO_BYTE       4
  30
  31#define FCOE_VERSION    "0.1"
  32#define FCOE_NAME       "fcoe"
  33#define FCOE_VENDOR     "Open-FCoE.org"
  34
  35#define FCOE_MAX_LUN            255
  36#define FCOE_MAX_FCP_TARGET     256
  37
  38#define FCOE_MAX_OUTSTANDING_COMMANDS   1024
  39
  40#define FCOE_MIN_XID            0x0000  /* the min xid supported by fcoe_sw */
  41#define FCOE_MAX_XID            0x0FFF  /* the max xid supported by fcoe_sw */
  42
  43unsigned int fcoe_debug_logging;
  44module_param_named(debug_logging, fcoe_debug_logging, int, S_IRUGO|S_IWUSR);
  45MODULE_PARM_DESC(debug_logging, "a bit mask of logging levels");
  46
  47#define FCOE_LOGGING        0x01 /* General logging, not categorized */
  48#define FCOE_NETDEV_LOGGING 0x02 /* Netdevice logging */
  49
  50#define FCOE_CHECK_LOGGING(LEVEL, CMD)                                  \
  51do {                                                                    \
  52        if (unlikely(fcoe_debug_logging & LEVEL))                       \
  53                do {                                                    \
  54                        CMD;                                            \
  55                } while (0);                                            \
  56} while (0)
  57
  58#define FCOE_DBG(fmt, args...)                                          \
  59        FCOE_CHECK_LOGGING(FCOE_LOGGING,                                \
  60                           printk(KERN_INFO "fcoe: " fmt, ##args);)
  61
  62#define FCOE_NETDEV_DBG(netdev, fmt, args...)                   \
  63        FCOE_CHECK_LOGGING(FCOE_NETDEV_LOGGING,                 \
  64                           printk(KERN_INFO "fcoe: %s: " fmt,   \
  65                                  netdev->name, ##args);)
  66
  67/*
  68 * this percpu struct for fcoe
  69 */
  70struct fcoe_percpu_s {
  71        struct task_struct *thread;
  72        struct sk_buff_head fcoe_rx_list;
  73        struct page *crc_eof_page;
  74        int crc_eof_offset;
  75};
  76
  77/*
  78 * an FCoE interface, 1:1 with netdev
  79 */
  80struct fcoe_interface {
  81        struct list_head list;
  82        struct net_device *netdev;
  83        struct packet_type  fcoe_packet_type;
  84        struct packet_type  fip_packet_type;
  85        struct fcoe_ctlr ctlr;
  86        struct fc_exch_mgr *oem;                /* offload exchange manager */
  87        struct kref kref;
  88};
  89
  90/*
  91 * the FCoE private structure that's allocated along with the
  92 * Scsi_Host and libfc fc_lport structures
  93 */
  94struct fcoe_port {
  95        struct fcoe_interface *fcoe;
  96        struct fc_lport *lport;
  97        struct sk_buff_head fcoe_pending_queue;
  98        u8      fcoe_pending_queue_active;
  99        struct timer_list timer;                /* queue timer */
 100        struct work_struct destroy_work;        /* to prevent rtnl deadlocks */
 101};
 102
 103#define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr)
 104
 105static inline struct net_device *fcoe_netdev(const struct fc_lport *lp)
 106{
 107        return ((struct fcoe_port *)lport_priv(lp))->fcoe->netdev;
 108}
 109
 110#endif /* _FCOE_H_ */
 111