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/ic/mlxreg.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 /*      $NetBSD: mlxreg.h,v 1.8 2008/09/08 23:36:54 gmcgarry Exp $      */
    2 
    3 /*-
    4  * Copyright (c) 2001 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Andrew Doran.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   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 the
   17  *    documentation and/or other materials provided with the distribution.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   29  * POSSIBILITY OF SUCH DAMAGE.
   30  */
   31 
   32 /*-
   33  * Copyright (c) 1999 Michael Smith
   34  * All rights reserved.
   35  *
   36  * Redistribution and use in source and binary forms, with or without
   37  * modification, are permitted provided that the following conditions
   38  * are met:
   39  * 1. Redistributions of source code must retain the above copyright
   40  *    notice, this list of conditions and the following disclaimer.
   41  * 2. Redistributions in binary form must reproduce the above copyright
   42  *    notice, this list of conditions and the following disclaimer in the
   43  *    documentation and/or other materials provided with the distribution.
   44  *
   45  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   46  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   47  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   48  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   49  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   50  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   51  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   52  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   53  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   54  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   55  * SUCH DAMAGE.
   56  *
   57  * from FreeBSD: mlxreg.h,v 1.5.2.2 2000/04/24 19:40:50 msmith Exp
   58  */
   59 
   60 #ifndef _IC_MLXREG_H_
   61 #define _IC_MLXREG_H_
   62 
   63 #define MLX_SECTOR_SIZE         512
   64 
   65 /*
   66  * Selected command codes.
   67  */
   68 #define MLX_CMD_ENQUIRY_OLD     0x05
   69 #define MLX_CMD_ENQUIRY         0x53
   70 #define MLX_CMD_ENQUIRY2        0x1c
   71 #define MLX_CMD_ENQSYSDRIVE     0x19
   72 #define MLX_CMD_READSG          0xb6
   73 #define MLX_CMD_WRITESG         0xb7
   74 #define MLX_CMD_READSG_OLD      0x82
   75 #define MLX_CMD_WRITESG_OLD     0x83
   76 #define MLX_CMD_FLUSH           0x0a
   77 #define MLX_CMD_LOGOP           0x72
   78 #define MLX_CMD_REBUILDASYNC    0x16
   79 #define MLX_CMD_CHECKASYNC      0x1e
   80 #define MLX_CMD_REBUILDSTAT     0x0c
   81 #define MLX_CMD_STOPCHANNEL     0x13
   82 #define MLX_CMD_STARTCHANNEL    0x12
   83 #define MLX_CMD_READ_CONFIG     0x4e
   84 #define MLX_CMD_WRITE_CONFIG    0x4f
   85 #define MLX_CMD_READ_DK_CONFIG  0x4a
   86 #define MLX_CMD_WRITE_DK_CONFIG 0x4b
   87 #define MLX_CMD_DIRECT_CDB      0x04
   88 #define MLX_CMD_DEVICE_STATE    0x50
   89 #define MLX_CMD_READ_CONFIG2    0x3d
   90 #define MLX_CMD_WRITE_CONFIG2   0x3c
   91 
   92 #ifdef _KERNEL
   93 
   94 /*
   95  * Status values.
   96  */
   97 #define MLX_STATUS_OK           0x0000
   98 #define MLX_STATUS_RDWROFFLINE  0x0002  /* read/write claims drive is offline */
   99 #define MLX_STATUS_WEDGED       0xdeaf  /* controller not listening */
  100 #define MLX_STATUS_LOST         0xdead  /* never came back */
  101 #define MLX_STATUS_BUSY         0xbabe  /* command is in controller */
  102 
  103 /*
  104  * V1 (EISA) interface.
  105  */
  106 #define MLX_V1REG_IE                    0x09
  107 #define MLX_V1REG_IDB                   0x0d
  108 #define MLX_V1REG_ODB_EN                0x0e
  109 #define MLX_V1REG_ODB                   0x0f
  110 #define MLX_V1REG_MAILBOX               0x10
  111 
  112 #define MLX_V1_IDB_FULL         0x01    /* mailbox is full */
  113 #define MLX_V1_IDB_INIT_BUSY    0x02    /* init in progress */
  114 
  115 #define MLX_V1_IDB_SACK         0x02    /* acknowledge status read */
  116 #define MLX_V1_IDB_RESET        0x10    /* reset controller */
  117 
  118 #define MLX_V1_ODB_SAVAIL       0x01    /* status is available */
  119 #define MLX_V1_ODB_RESET        0x02    /* reset controller */
  120 
  121 #define MLX_V1_FWERROR_PEND     0x04    /* firmware error pending */
  122 
  123 /*
  124  * V2/V3 interface.
  125  */
  126 #define MLX_V3REG_MAILBOX               0x00
  127 #define MLX_V3REG_STATUS_IDENT          0x0d
  128 #define MLX_V3REG_STATUS                0x0e
  129 #define MLX_V3REG_IDB                   0x40
  130 #define MLX_V3REG_ODB                   0x41
  131 #define MLX_V3REG_IE                    0x43
  132 #define MLX_V3REG_FWERROR               0x3f
  133 #define MLX_V3REG_FWERROR_PARAM1        0x00
  134 #define MLX_V3REG_FWERROR_PARAM2        0x01
  135 
  136 #define MLX_V3_IDB_FULL         0x01    /* mailbox is full */
  137 #define MLX_V3_IDB_INIT_BUSY    0x02    /* init in progress */
  138 
  139 #define MLX_V3_IDB_SACK         0x02    /* acknowledge status read */
  140 #define MLX_V3_IDB_RESET        0x08    /* reset controller */
  141 
  142 #define MLX_V3_ODB_SAVAIL       0x01    /* status is available */
  143 
  144 #define MLX_V3_FWERROR_PEND     0x04    /* firmware error pending */
  145 
  146 /*
  147  * V4 interface.
  148  */
  149 #define MLX_V4REG_MAILBOX               0x1000
  150 #define MLX_V4REG_STATUS_IDENT          0x1018
  151 #define MLX_V4REG_STATUS                0x101a
  152 #define MLX_V4REG_IDB                   0x0020
  153 #define MLX_V4REG_ODB                   0x002c
  154 #define MLX_V4REG_IE                    0x0034
  155 #define MLX_V4REG_FWERROR               0x103f
  156 #define MLX_V4REG_FWERROR_PARAM1        0x1000
  157 #define MLX_V4REG_FWERROR_PARAM2        0x1001
  158 
  159 #define MLX_V4_IDB_FULL         0x01    /* mailbox is full */
  160 #define MLX_V4_IDB_INIT_BUSY    0x02    /* initialisation in progress */
  161 
  162 #define MLX_V4_IDB_HWMBOX_CMD   0x01    /* posted hardware mailbox command */
  163 #define MLX_V4_IDB_SACK         0x02    /* acknowledge status read */
  164 #define MLX_V4_IDB_MEMMBOX_CMD  0x10    /* posted memory mailbox command */
  165 
  166 #define MLX_V4_ODB_HWSAVAIL     0x01    /* status available for hardware m/b */
  167 #define MLX_V4_ODB_MEMSAVAIL    0x02    /* status available for memory m/b */
  168 
  169 #define MLX_V4_ODB_HWMBOX_ACK   0x01    /* ack status read from hardware m/b */
  170 #define MLX_V4_ODB_MEMMBOX_ACK  0x02    /* ack status read from memory m/b */
  171 
  172 #define MLX_V4_IE_MASK          0xfb    /* message unit interrupt mask */
  173 #define MLX_V4_IE_DISINT        0x04    /* interrupt disable bit */
  174 
  175 #define MLX_V4_FWERROR_PEND     0x04    /* firmware error pending */
  176 
  177 /*
  178  * V5 interface.
  179  */
  180 #define MLX_V5REG_MAILBOX               0x50
  181 #define MLX_V5REG_STATUS_IDENT          0x5d
  182 #define MLX_V5REG_STATUS                0x5e
  183 #define MLX_V5REG_IDB                   0x60
  184 #define MLX_V5REG_ODB                   0x61
  185 #define MLX_V5REG_IE                    0x34
  186 #define MLX_V5REG_FWERROR               0x63
  187 #define MLX_V5REG_FWERROR_PARAM1        0x50
  188 #define MLX_V5REG_FWERROR_PARAM2        0x51
  189 
  190 #define MLX_V5_IDB_EMPTY        0x01    /* mailbox is empty */
  191 #define MLX_V5_IDB_INIT_DONE    0x02    /* initialisation has completed */
  192 
  193 #define MLX_V5_IDB_HWMBOX_CMD   0x01    /* posted hardware mailbox command */
  194 #define MLX_V5_IDB_SACK         0x02    /* acknowledge status read */
  195 #define MLX_V5_IDB_RESET        0x08    /* reset request */
  196 #define MLX_V5_IDB_MEMMBOX_CMD  0x10    /* posted memory mailbox command */
  197 
  198 #define MLX_V5_ODB_HWSAVAIL     0x01    /* status available for hardware m/b */
  199 #define MLX_V5_ODB_MEMSAVAIL    0x02    /* status available for memory m/b */
  200 
  201 #define MLX_V5_ODB_HWMBOX_ACK   0x01    /* ack status read from hardware m/b */
  202 #define MLX_V5_ODB_MEMMBOX_ACK  0x02    /* ack status read from memory m/b */
  203 
  204 #define MLX_V5_IE_DISINT        0x04    /* interrupt disable bit */
  205 
  206 #define MLX_V5_FWERROR_PEND     0x04    /* firmware error pending */
  207 
  208 #endif /* _KERNEL */
  209 
  210 /*
  211  * Scatter-gather list format, type 1, kind 00.
  212  */
  213 struct mlx_sgentry {
  214         u_int32_t       sge_addr;
  215         u_int32_t       sge_count;
  216 } __packed;
  217 
  218 /*
  219  * Command result buffers, as placed in system memory by the controller.
  220  */
  221 struct mlx_enquiry_old {
  222         u_int8_t        me_num_sys_drvs;
  223         u_int8_t        me_res1[3];
  224         u_int32_t       me_drvsize[8];
  225         u_int16_t       me_flash_age;
  226         u_int8_t        me_status_flags;
  227         u_int8_t        me_free_state_change_count;
  228         u_int8_t        me_fwminor;
  229         u_int8_t        me_fwmajor;
  230         u_int8_t        me_rebuild_flag;
  231         u_int8_t        me_max_commands;
  232         u_int8_t        me_offline_sd_count;
  233         u_int8_t        me_res3;
  234         u_int8_t        me_critical_sd_count;
  235         u_int8_t        me_res4[3];
  236         u_int8_t        me_dead_count;
  237         u_int8_t        me_res5;
  238         u_int8_t        me_rebuild_count;
  239         u_int8_t        me_misc_flags;
  240         struct  {
  241                 u_int8_t        dd_targ;
  242                 u_int8_t        dd_chan;
  243         } __packed me_dead[20];
  244 } __packed;
  245 
  246 struct mlx_enquiry {
  247         u_int8_t        me_num_sys_drvs;
  248         u_int8_t        me_res1[3];
  249         u_int32_t       me_drvsize[32];
  250         u_int16_t       me_flash_age;
  251         u_int8_t        me_status_flags;
  252 #define MLX_ENQ_SFLAG_DEFWRERR  0x01    /* deferred write error indicator */
  253 #define MLX_ENQ_SFLAG_BATTLOW   0x02    /* battery low */
  254         u_int8_t        me_res2;
  255         u_int8_t        me_fwminor;
  256         u_int8_t        me_fwmajor;
  257         u_int8_t        me_rebuild_flag;
  258         u_int8_t        me_max_commands;
  259         u_int8_t        me_offline_sd_count;
  260         u_int8_t        me_res3;
  261         u_int16_t       me_event_log_seq_num;
  262         u_int8_t        me_critical_sd_count;
  263         u_int8_t        me_res4[3];
  264         u_int8_t        me_dead_count;
  265         u_int8_t        me_res5;
  266         u_int8_t        me_rebuild_count;
  267         u_int8_t        me_misc_flags;
  268 #define MLX_ENQ_MISC_BBU        0x08    /* battery backup present */
  269         struct {
  270                 u_int8_t        dd_targ;
  271                 u_int8_t        dd_chan;
  272         } __packed me_dead[20];
  273 } __packed;
  274 
  275 struct mlx_enquiry2 {
  276         u_int8_t        me_hardware_id[4];
  277         u_int8_t        me_firmware_id[4];
  278         u_int32_t       me_res1;
  279         u_int8_t        me_configured_channels;
  280         u_int8_t        me_actual_channels;
  281         u_int8_t        me_max_targets;
  282         u_int8_t        me_max_tags;
  283         u_int8_t        me_max_sys_drives;
  284         u_int8_t        me_max_arms;
  285         u_int8_t        me_max_spans;
  286         u_int8_t        me_res2;
  287         u_int32_t       me_res3;
  288         u_int32_t       me_mem_size;
  289         u_int32_t       me_cache_size;
  290         u_int32_t       me_flash_size;
  291         u_int32_t       me_nvram_size;
  292         u_int16_t       me_mem_type;
  293         u_int16_t       me_clock_speed;
  294         u_int16_t       me_mem_speed;
  295         u_int16_t       me_hardware_speed;
  296         u_int8_t        me_res4[12];
  297         u_int16_t       me_max_commands;
  298         u_int16_t       me_max_sg;
  299         u_int16_t       me_max_dp;
  300         u_int16_t       me_max_iod;
  301         u_int16_t       me_max_comb;
  302         u_int8_t        me_latency;
  303         u_int8_t        me_res5;
  304         u_int8_t        me_scsi_timeout;
  305         u_int8_t        me_res6;
  306         u_int16_t       me_min_freelines;
  307         u_int8_t        me_res7[8];
  308         u_int8_t        me_rate_const;
  309         u_int8_t        me_res8[11];
  310         u_int16_t       me_physblk;
  311         u_int16_t       me_logblk;
  312         u_int16_t       me_maxblk;
  313         u_int16_t       me_blocking_factor;
  314         u_int16_t       me_cacheline;
  315         u_int8_t        me_scsi_cap;
  316         u_int8_t        me_res9[5];
  317         u_int16_t       me_firmware_build;
  318         u_int8_t        me_fault_mgmt_type;
  319         u_int8_t        me_res10;
  320         u_int32_t       me_firmware_features;
  321         u_int8_t        me_res11[8];
  322 } __packed;
  323 
  324 /* MLX_CMD_ENQSYSDRIVE returns an array of 32 of these. */
  325 struct mlx_enq_sys_drive {
  326         u_int32_t       sd_size;
  327         u_int8_t        sd_state;
  328         u_int8_t        sd_raidlevel;
  329         u_int16_t       sd_res1;
  330 } __packed;
  331 
  332 /*
  333  * MLX_CMD_LOGOP/MLX_LOGOP_GET
  334  *
  335  * Bitfields:
  336  *
  337  * 0-4  el_target       SCSI target
  338  * 5-7  el_target       SCSI channel
  339  * 0-6  el_errorcode    error code
  340  * 7-7  el_errorcode    validity (?)
  341  * 0-3  el_sense        sense key
  342  * 4-4  el_sense        reserved
  343  * 5-5  el_sense        ILI
  344  * 6-6  el_sense        EOM
  345  * 7-7  el_sense        filemark
  346  */
  347 struct mlx_eventlog_entry {
  348         u_int8_t        el_type;
  349         u_int8_t        el_length;
  350         u_int8_t        el_target;
  351         u_int8_t        el_lun;
  352         u_int16_t       el_seqno;
  353         u_int8_t        el_errorcode;
  354         u_int8_t        el_segment;
  355         u_int8_t        el_sense;
  356         u_int8_t        el_information[4];
  357         u_int8_t        el_addsense;
  358         u_int8_t        el_csi[4];
  359         u_int8_t        el_asc;
  360         u_int8_t        el_asq;
  361         u_int8_t        el_res3[12];
  362 } __packed;
  363 
  364 #define MLX_LOGOP_GET           0x00    /* operation codes for MLX_CMD_LOGOP */
  365 #define MLX_LOGMSG_SENSE        0x00    /* log message contents codes */
  366 
  367 struct mlx_rebuild_stat {
  368         u_int32_t       rb_drive;
  369         u_int32_t       rb_size;
  370         u_int32_t       rb_remaining;
  371 } __packed;
  372 
  373 struct mlx_config {
  374         u_int16_t       cf_flags1;
  375 #define MLX_CF2_ACTV_NEG        0x0002
  376 #define MLX_CF2_NORSTRTRY       0x0080
  377 #define MLX_CF2_STRGWRK         0x0100
  378 #define MLX_CF2_HPSUPP          0x0200
  379 #define MLX_CF2_NODISCN         0x0400
  380 #define MLX_CF2_ARM             0x2000
  381 #define MLX_CF2_OFM             0x8000
  382 #define MLX_CF2_AEMI            (MLX_CF2_ARM | MLX_CF2_OFM)
  383         u_int8_t        cf_oemid;
  384         u_int8_t        cf_oem_model;
  385         u_int8_t        cf_physical_sector;
  386         u_int8_t        cf_logical_sector;
  387         u_int8_t        cf_blockfactor;
  388         u_int8_t        cf_flags2;
  389 #define MLX_CF2_READAH          0x01
  390 #define MLX_CF2_BIOSDLY         0x02
  391 #define MLX_CF2_REASS1S         0x10
  392 #define MLX_CF2_FUAENABL        0x40
  393 #define MLX_CF2_R5ALLS          0x80
  394         u_int8_t        cf_rcrate;
  395         u_int8_t        cf_res1;
  396         u_int8_t        cf_blocks_per_cache_line;
  397         u_int8_t        cf_blocks_per_stripe;
  398         u_int8_t        cf_scsi_param_0;
  399         u_int8_t        cf_scsi_param_1;
  400         u_int8_t        cf_scsi_param_2;
  401         u_int8_t        cf_scsi_param_3;
  402         u_int8_t        cf_scsi_param_4;
  403         u_int8_t        cf_scsi_param_5;
  404         u_int8_t        cf_scsi_initiator_id;
  405         u_int8_t        cf_res2;
  406         u_int8_t        cf_startup_mode;
  407         u_int8_t        cf_simultaneous_spinup_devices;
  408         u_int8_t        cf_delay_between_spinups;
  409         u_int8_t        cf_res3;
  410         u_int16_t       cf_checksum;
  411 } __packed;
  412 
  413 struct mlx_config2 {
  414         struct mlx_config cf2_cf;
  415         u_int8_t        cf2_reserved0[26];
  416         u_int8_t        cf2_flags;
  417 #define MLX_CF2_BIOS_DIS        0x01
  418 #define MLX_CF2_CDROM_DIS       0x02
  419 #define MLX_CF2_GEOM_255        0x20
  420         u_int8_t        cf2_reserved1[9];
  421         u_int16_t       cf2_checksum;
  422 } __packed;
  423 
  424 struct mlx_sys_drv_span {
  425         u_int32_t       sp_start_lba;
  426         u_int32_t       sp_nblks;
  427         u_int8_t        sp_arm[8];
  428 } __packed;
  429 
  430 struct mlx_sys_drv {
  431         u_int8_t        sd_status;
  432         u_int8_t        sd_ext_status;
  433         u_int8_t        sd_mod1;
  434         u_int8_t        sd_mod2;
  435         u_int8_t        sd_raidlevel;
  436 #define MLX_SYS_DRV_WRITEBACK   (1<<7)
  437 #define MLX_SYS_DRV_RAID0       0
  438 #define MLX_SYS_DRV_RAID1       1
  439 #define MLX_SYS_DRV_RAID3       3
  440 #define MLX_SYS_DRV_RAID5       5
  441 #define MLX_SYS_DRV_RAID6       6
  442 #define MLX_SYS_DRV_JBOD        7
  443         u_int8_t        sd_valid_arms;
  444         u_int8_t        sd_valid_spans;
  445         u_int8_t        sd_init_state;
  446 #define MLX_SYS_DRV_INITTED     0x81;
  447         struct  mlx_sys_drv_span sd_span[4];
  448 } __packed;
  449 
  450 struct mlx_phys_drv {
  451         u_int8_t        pd_flags1;
  452 #define MLX_PHYS_DRV_PRESENT    0x01
  453         u_int8_t        pd_flags2;
  454 #define MLX_PHYS_DRV_OTHER      0x00
  455 #define MLX_PHYS_DRV_DISK       0x01
  456 #define MLX_PHYS_DRV_SEQUENTIAL 0x02
  457 #define MLX_PHYS_DRV_CDROM      0x03
  458 #define MLX_PHYS_DRV_FAST20     0x08
  459 #define MLX_PHYS_DRV_SYNC       0x10
  460 #define MLX_PHYS_DRV_FAST       0x20
  461 #define MLX_PHYS_DRV_WIDE       0x40
  462 #define MLX_PHYS_DRV_TAG        0x80
  463         u_int8_t        pd_status;
  464 #define MLX_PHYS_DRV_DEAD       0x00
  465 #define MLX_PHYS_DRV_WRONLY     0x02
  466 #define MLX_PHYS_DRV_ONLINE     0x03
  467 #define MLX_PHYS_DRV_STANDBY    0x10
  468         u_int8_t        pd_res1;
  469         u_int8_t        pd_period;
  470         u_int8_t        pd_offset;
  471         u_int32_t       pd_config_size;
  472 } __packed;
  473 
  474 struct mlx_core_cfg {
  475         u_int8_t        cc_num_sys_drives;
  476         u_int8_t        cc_res1[3];
  477         struct  mlx_sys_drv cc_sys_drives[32];
  478         struct  mlx_phys_drv cc_phys_drives[5 * 16];
  479 } __packed;
  480 
  481 /*
  482  * Bitfields:
  483  *
  484  * 0-3  dcdb_target     SCSI target
  485  * 4-7  dcdb_target     SCSI channel
  486  * 0-3  dcdb_length     CDB length
  487  * 4-7  dcdb_length     high 4 bits of `datasize'
  488  */
  489 struct mlx_dcdb {
  490         u_int8_t        dcdb_target;
  491         u_int8_t        dcdb_flags;
  492 #define MLX_DCDB_NO_DATA        0x00
  493 #define MLX_DCDB_DATA_IN        0x01
  494 #define MLX_DCDB_DATA_OUT       0x02
  495 #define MLX_DCDB_EARLY_STATUS   0x04
  496 #define MLX_DCDB_TIMEOUT_10S    0x10    /* This lot is wrong? [ad] */
  497 #define MLX_DCDB_TIMEOUT_60S    0x20
  498 #define MLX_DCDB_TIMEOUT_20M    0x30
  499 #define MLX_DCDB_TIMEOUT_24H    0x40
  500 #define MLX_DCDB_NO_AUTO_SENSE  0x40    /* XXX ?? */
  501 #define MLX_DCDB_DISCONNECT     0x80
  502         u_int16_t       dcdb_datasize;
  503         u_int32_t       dcdb_physaddr;
  504         u_int8_t        dcdb_length;
  505         u_int8_t        dcdb_sense_length;
  506         u_int8_t        dcdb_cdb[12];
  507         u_int8_t        dcdb_sense[64];
  508         u_int8_t        dcdb_status;
  509         u_int8_t        res1;
  510 } __packed;
  511 
  512 struct mlx_bbtable_entry {
  513         u_int32_t       bbt_block_number;
  514         u_int8_t        bbt_extent;
  515         u_int8_t        bbt_res1;
  516         u_int8_t        bbt_entry_type;
  517         u_int8_t        bbt_system_drive;       /* high 3 bits reserved */
  518 } __packed;
  519 
  520 #endif  /* !_IC_MLXREG_H_ */

Cache object: d1a62a03da3c1738fb5a428f21c71b48


[ 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.