The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/tws/tws.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-3-Clause
    3  *
    4  * Copyright (c) 2010, LSI Corp.
    5  * All rights reserved.
    6  * Author : Manjunath Ranganathaiah
    7  * Support: freebsdraid@lsi.com
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  *
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in
   17  *    the documentation and/or other materials provided with the
   18  *    distribution.
   19  * 3. Neither the name of the <ORGANIZATION> nor the names of its
   20  *    contributors may be used to endorse or promote products derived
   21  *    from this software without specific prior written permission.
   22  *
   23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   26  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
   27  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
   28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
   29  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   30  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
   31  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
   33  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   34  * POSSIBILITY OF SUCH DAMAGE.
   35  *
   36  * $FreeBSD$
   37  */
   38 
   39 #include <sys/param.h>        /* defines used in kernel.h */
   40 #include <sys/bus.h>          /* structs, prototypes for pci bus stuff */
   41 #include <sys/conf.h>         /* cdevsw struct */
   42 #include <sys/errno.h>
   43 #include <sys/kernel.h>       /* types used in module initialization */
   44 #include <sys/lock.h>
   45 #include <sys/malloc.h>
   46 #include <sys/module.h>
   47 #include <sys/mutex.h>
   48 #include <sys/proc.h>
   49 #include <sys/systm.h>
   50 #include <sys/uio.h>          /* uio struct */
   51 
   52 #include <machine/bus.h>
   53 #include <sys/rman.h>
   54 #include <machine/resource.h>
   55 
   56 #include <dev/pci/pcivar.h>   /* For pci_get macros! */
   57 #include <dev/pci/pcireg.h>
   58 
   59 #include <sys/types.h>
   60 #include <sys/sysctl.h>
   61 #include <sys/stat.h>
   62 
   63 #define TWS_PULL_MODE_ENABLE 1
   64 
   65 MALLOC_DECLARE(M_TWS);
   66 /* externs */
   67 extern int tws_queue_depth;
   68 
   69 #define TWS_DRIVER_VERSION_STRING "10.80.00.005"
   70 #define TWS_MAX_NUM_UNITS             65 
   71 #define TWS_MAX_NUM_LUNS              32
   72 #define TWS_MAX_IRQS                  2
   73 #define TWS_SCSI_INITIATOR_ID         66
   74 #define TWS_MAX_IO_SIZE               0x20000 /* 128kB */
   75 #define TWS_SECTOR_SIZE               0x200
   76 #define TWS_POLL_TIMEOUT              60
   77 #define TWS_IO_TIMEOUT                60
   78 #define TWS_IOCTL_TIMEOUT             60
   79 #define TWS_RESET_TIMEOUT             60
   80 
   81 #define TWS_PCI_BAR0                  0x10
   82 #define TWS_PCI_BAR1                  0x14
   83 #define TWS_PCI_BAR2                  0x1C
   84 
   85 #define TWS_VENDOR_ID                 0x13C1 
   86 #define TWS_DEVICE_ID                 0x1010
   87 
   88 #define TWS_INVALID_REQID             0xFFFF
   89 
   90 /* bus tag related */
   91 #define TWS_ALIGNMENT                 4
   92 #define TWS_IN_MF_ALIGNMENT           16
   93 #define TWS_OUT_MF_ALIGNMENT          4
   94 
   95 #define TWS_MAX_32BIT_SG_ELEMENTS     93     /* max 32-bit sg elements */
   96 #define TWS_MAX_64BIT_SG_ELEMENTS     46     /* max 64-bit sg elements */
   97 
   98 #define TWS_MAX_QS                    4
   99 #define TWS_MAX_REQS                  256
  100 #define TWS_RESERVED_REQS             4
  101 
  102 /* Request states */
  103 #define TWS_REQ_STATE_FREE            0
  104 #define TWS_REQ_STATE_BUSY            1
  105 #define TWS_REQ_STATE_TRAN            2
  106 #define TWS_REQ_STATE_COMPLETE        3
  107 
  108 /* Request types */
  109 #define TWS_REQ_TYPE_INTERNAL_CMD     0x0
  110 #define TWS_REQ_TYPE_AEN_FETCH        0x1
  111 #define TWS_REQ_TYPE_PASSTHRU         0x2
  112 #define TWS_REQ_TYPE_GETSET_PARAM     0x3
  113 #define TWS_REQ_TYPE_SCSI_IO          0x4
  114 
  115 /* Driver states */
  116 
  117 enum tws_states {
  118     TWS_INIT=50,
  119     TWS_UNINIT,
  120     TWS_OFFLINE,
  121     TWS_ONLINE,
  122     TWS_RESET,
  123 };
  124 
  125 /* events */
  126 
  127 enum tws_events {
  128     TWS_INIT_START=100,
  129     TWS_INIT_COMPLETE,
  130     TWS_UNINIT_START,
  131     TWS_RESET_START,
  132     TWS_RESET_COMPLETE,
  133     TWS_SCAN_FAILURE,
  134 };
  135 
  136 enum tws_req_flags {
  137     TWS_DIR_UNKNOWN = 0x1,
  138     TWS_DIR_IN = 0x2,
  139     TWS_DIR_OUT = 0x4,
  140     TWS_DIR_NONE = 0x8,
  141     TWS_DATA_CCB = 0x10,
  142 };
  143 
  144 enum tws_intrs {
  145      TWS_INTx,
  146      TWS_MSI,
  147      TWS_MSIX,
  148 };
  149 
  150 struct tws_msix_info {
  151     int tbl_res_id;
  152     bus_space_tag_t tbl_tag;
  153     bus_space_handle_t tbl_handle;
  154     struct resource *tbl_res;  
  155 };
  156 
  157 struct tws_ioctl_lock {
  158     u_int32_t       lock;
  159     time_t          timeout;
  160 };
  161 
  162 #define TWS_TRACE_FNAME_LEN  10
  163 #define TWS_TRACE_FUNC_LEN   15
  164 #define TWS_TRACE_DESC_LEN   10
  165 struct tws_trace_rec {
  166     struct timespec ts;
  167     char fname[TWS_TRACE_FNAME_LEN];
  168     char func[TWS_TRACE_FUNC_LEN];
  169     int linenum;
  170     char desc[TWS_TRACE_DESC_LEN];
  171     u_int64_t val1;
  172     u_int64_t val2;
  173 };
  174 
  175 struct tws_circular_q {
  176     volatile int16_t head;
  177     volatile int16_t tail;
  178     u_int16_t depth;
  179     u_int8_t  overflow;
  180     void *    q;
  181 };
  182 
  183 struct tws_stats {
  184     u_int64_t reqs_in;
  185     u_int64_t reqs_out;
  186     u_int64_t reqs_errored;
  187     u_int64_t spurios_intrs;
  188     u_int64_t num_intrs;    
  189     u_int64_t num_aens;    
  190     u_int64_t ioctls;       
  191     u_int64_t scsi_ios;
  192 };
  193 
  194 struct tws_init_connect_info {
  195     u_int16_t     working_srl;
  196     u_int16_t     working_branch;
  197     u_int16_t     working_build;
  198     u_int16_t     fw_on_ctlr_srl;
  199     u_int16_t     fw_on_ctlr_branch;
  200     u_int16_t     fw_on_ctlr_build;
  201 
  202 };
  203 
  204 /* ------------ boolean types ------------------- */
  205 
  206 #ifndef __bool_true_false_are_defined
  207 typedef enum _boolean { false, true } boolean;
  208 #else
  209 #define boolean         bool
  210 #endif
  211 enum err { SUCCESS, FAILURE };
  212 
  213 /* ----------- per instance data ---------------- */
  214 
  215 /* The softc holds our per-instance data. */
  216 struct tws_softc {
  217     device_t    tws_dev;                  /* bus device */
  218     struct cdev *tws_cdev;                /* controller device */
  219     u_int32_t   device_id;                /* device id */
  220     u_int32_t   subvendor_id;             /* device id */
  221     u_int32_t   subdevice_id;             /* device id */
  222     u_int8_t    tws_state;                /* driver state */
  223     u_int8_t    tws_prev_state;           /* driver prev state */
  224     struct sysctl_ctx_list tws_clist;     /* sysctl context */
  225     struct sysctl_oid *tws_oidp;          /* sysctl context */
  226     struct resource *reg_res;             /* register interface window */
  227     struct resource *mfa_res;             /* mfa interface window */
  228     int reg_res_id;                       /* register resource id */
  229     int mfa_res_id;                       /* register resource id */
  230     bus_space_handle_t bus_handle;        /* bus space handle */
  231     bus_space_handle_t bus_mfa_handle;     /* bus space handle */
  232     bus_space_tag_t bus_tag;              /* bus space tag */
  233     bus_space_tag_t bus_mfa_tag;          /* bus space tag for mfa's */
  234     u_int64_t mfa_base;                   /* mfa base address */
  235     struct resource *irq_res[TWS_MAX_IRQS];/* interrupt resource */
  236     int irq_res_id[TWS_MAX_IRQS];         /* intr resource id */
  237     void *intr_handle[TWS_MAX_IRQS];      /* interrupt handle */
  238     int irqs;                             /* intrs used */
  239     struct tws_msix_info msix;            /* msix info */
  240     struct cam_sim *sim;                  /* sim for this controller */
  241     struct cam_path *path;                /* Ctlr path to CAM */
  242     struct mtx q_lock;                    /* queue lock */
  243     struct mtx sim_lock;                  /* sim lock */
  244     struct mtx gen_lock;                  /* general driver  lock */
  245     struct mtx io_lock;                   /* IO  lock */
  246     struct tws_ioctl_lock ioctl_lock;     /* ioctl lock */ 
  247     u_int32_t seq_id;                     /* Sequence id */
  248     struct tws_circular_q aen_q;          /* aen q */
  249     struct tws_circular_q trace_q;        /* trace q */
  250     struct tws_stats stats;               /* I/O stats */
  251     struct tws_init_connect_info cinfo;   /* compatibility info */
  252     boolean is64bit;                      /* True - 64bit else 32bit */
  253     u_int8_t intr_type;                   /* Interrupt type used */
  254     bus_dma_tag_t parent_tag;             /* parent DMA tag */
  255     bus_dma_tag_t cmd_tag;                /* command DMA tag */
  256     bus_dmamap_t cmd_map;                 /* command map */
  257     void *dma_mem;                        /* pointer to dmable memory */
  258     u_int64_t dma_mem_phys;               /* phy addr */
  259     bus_dma_tag_t data_tag;               /* data DMA tag */
  260     void *ioctl_data_mem;                 /* ioctl dmable memory */
  261     bus_dmamap_t ioctl_data_map;          /* ioctl data map */
  262     struct tws_request *reqs;             /* pointer to requests */
  263     struct tws_sense *sense_bufs;         /* pointer to sense buffers */
  264     boolean obfl_q_overrun;               /* OBFL overrun flag  */
  265     union ccb *scan_ccb;                  /* pointer to a ccb */
  266     struct tws_request *q_head[TWS_MAX_QS]; /* head pointers to q's */
  267     struct tws_request *q_tail[TWS_MAX_QS]; /* tail pointers to q's */
  268     struct callout stats_timer;
  269 };

Cache object: f6775504cf77b0af1bf17ef16992ea11


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.