darwin-xnu/osfmk/sys/sdi.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
   3 *
   4 * @APPLE_LICENSE_HEADER_START@
   5 * 
   6 * The contents of this file constitute Original Code as defined in and
   7 * are subject to the Apple Public Source License Version 1.1 (the
   8 * "License").  You may not use this file except in compliance with the
   9 * License.  Please obtain a copy of the License at
  10 * http://www.apple.com/publicsource and read it before using this file.
  11 * 
  12 * This Original Code and all software distributed under the License are
  13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17 * License for the specific language governing rights and limitations
  18 * under the License.
  19 * 
  20 * @APPLE_LICENSE_HEADER_END@
  21 */
  22/*
  23 * @OSF_COPYRIGHT@
  24 * 
  25 */
  26/*
  27 * HISTORY
  28 * 
  29 * Revision 1.1.1.1  1998/09/22 21:05:48  wsanchez
  30 * Import of Mac OS X kernel (~semeria)
  31 *
  32 * Revision 1.1.1.1  1998/03/07 02:25:59  wsanchez
  33 * Import of OSF Mach kernel (~mburg)
  34 *
  35 * Revision 1.1.7.1  1996/09/17  16:34:56  bruel
  36 *      removed size_t, already defined in types.h.
  37 *      [96/09/17            bruel]
  38 *
  39 * Revision 1.1.4.1  1996/04/17  17:48:54  davidp
  40 *      Created for use with SVR4 drivers.
  41 *      [1996/04/11  13:19:26  davidp]
  42 * 
  43 * Revision 1.1.1.2  1996/03/04  17:53:46  calvert
  44 *      Created for use with SVR4 drivers.
  45 * 
  46 * $EndLog$
  47 */
  48/* In vi use ":set ts=4" to edit/view this file
  49 */
  50#ifndef _SYS_SDI_H_
  51#define _SYS_SDI_H_     1
  52
  53#include "scsi/scsi_endian.h"
  54
  55typedef u_long  paddr_t;
  56typedef u_int   rm_key_t;
  57
  58typedef long    hba_clock_t;
  59
  60typedef u_long  major_t;
  61typedef u_long  minor_t;
  62
  63typedef u_long  hba_buf_t;      /* just to satisfy declaration */
  64typedef u_long  hba_uio_t;      /* just to satisfy declaration */
  65
  66
  67struct ver_no {
  68        uchar_t                 sv_release;
  69        uchar_t                 sv_machine;
  70        short                   sv_modes;
  71};
  72
  73struct hba_idata_v4 {
  74        int                             version_num;
  75        char                    *name;
  76        uchar_t                 ha_id;
  77        ulong_t                 ioaddr1;
  78        int                             dmachan1;
  79        int                             iov;
  80        int                             cntlr;
  81        int                             active;
  82        ulong_t                 idata_memaddr;
  83        uchar_t                 idata_ctlorder;
  84        uchar_t                 idata_nbus;
  85        ushort_t                idata_ntargets;
  86        ushort_t                idata_nluns;
  87        rm_key_t                idata_rmkey;
  88        void                    *idata_intrcookie;
  89        int                             idata_cpubind;
  90};
  91
  92struct hba_idata {
  93        int                             version_num;
  94        char                    *name;
  95        uchar_t                 ha_id;
  96        ulong_t                 ioaddr1;
  97        int                             dmachan1;
  98        int                             iov;
  99        int                             cntlr;
 100        int                             active;
 101};
 102
 103#define HBA_SVR4_2              1
 104#define HBA_SVR4_2_2    2
 105#define HBA_SVR4_2MP    3
 106
 107#define HBA_VMASK               0xffff
 108
 109#define HBA_IDATA_EXT   0x10000
 110#define HBA_EXT_INFO    0x20000
 111#define HBA_AUTOCONF    0x40000
 112
 113#define VID_LEN         8
 114#define PID_LEN         16
 115#define REV_LEN         4
 116
 117#define INQ_LEN         VID_LEN+PID_LEN+1
 118#define INQ_EXLEN       INQ_LEN+REV_LEN
 119
 120struct ident {
 121        BITFIELD_2( unsigned char,
 122                                        id_type : 5,
 123                                        id_pqual : 3);
 124        BITFIELD_2(unsigned char,
 125                                        id_qualif : 7,
 126                                        id_rmb : 1);
 127        uchar_t                 id_ver;
 128        BITFIELD_2(unsigned char,
 129                                        id_form : 4,
 130                                        id_res1 : 4);
 131        uchar_t                 id_len;
 132        uchar_t                 id_vu [3];
 133        char                    id_vendor [VID_LEN];
 134        char                    id_prod [PID_LEN];
 135        char                    id_revnum [REV_LEN];
 136};
 137
 138#define SCSI_INQ_CON    0x0
 139#define SCSI_INQ_TC             0x1
 140#define SCSI_INQ_TNC    0x3
 141
 142struct scsi_adr {
 143        int     scsi_ctl;
 144        int     scsi_target;
 145        int     scsi_lun;
 146        int     scsi_bus;
 147};
 148
 149struct scsi_ad {
 150        ulong_t                 sa_major;
 151        ulong_t                 sa_minor;
 152        uchar_t                 sa_lun;
 153        BITFIELD_2(unsigned char,
 154                                        sa_bus : 3,
 155                                        sa_exta : 5);
 156        short                   sa_ct;
 157};
 158
 159/* sa_ct */
 160#define SDI_SA_CT(c,t)  (((c) << 3) | ((t) & 0x07))
 161#define SDI_HAN(sa)             (((sa)->sa_ct >> 3) & 0x07)
 162#define SDI_TCN(sa)             ((sa)->sa_ct & 0x07)
 163
 164#define SDI_ETCN(sa)            ((sa)->sa_exta)
 165#define SDI_EHAN(sa)            (((sa)->sa_ct >> 3) & 0x1f)
 166
 167struct sdi_edt {
 168        struct sdi_edt  *hash_p;
 169        short                   hba_no;
 170        uchar_t                 scsi_id;
 171        uchar_t                 lun;
 172        struct owner    *curdrv;
 173        struct owner    *owner_list;
 174        ulong_t                 res1;
 175        int                             pdtype;
 176        uchar_t                 iotype;
 177        char                    inquiry [INQ_EXLEN];
 178        struct scsi_adr scsi_adr;
 179        ulong_t                 memaddr;
 180        uchar_t                 ctlorder;
 181        struct ident    edt_ident;
 182};
 183
 184/* iotype */
 185#define F_DMA           0x001
 186#define F_DMA_24        F_DMA
 187#define F_PIO           0x002
 188#define F_SCGTH         0x004
 189#define F_RMB           0x008
 190#define F_DMA_32        0x010
 191#define F_HDWREA        0x020
 192#define F_RESID         0x040
 193
 194struct mod_operations {
 195        int     (*modm_install)(void);
 196        int     (*modm_remove)(void);
 197        int     (*modm_info)(void);
 198        int     (*modm_bind)(void);
 199};
 200
 201struct modlink {
 202        struct mod_operations   *ml_ops;
 203        void                                    *ml_type_data;
 204};
 205
 206struct mod_type_data {
 207        char    *mtd_info;
 208        void    *mtd_pdata;
 209};
 210
 211struct modwrapper {
 212        int                             mw_rev;
 213        int                             (*mw_load)(void);
 214        int                             (*mw_unload)(void);
 215        void                    (*mw_halt)(void);
 216        void                    *mw_conf_data;
 217        struct modlink  *mw_modlink;
 218};
 219
 220struct hbadata {
 221        struct xsb *sb;
 222};
 223
 224typedef struct physreq {
 225        paddr_t         phys_align;
 226        paddr_t         phys_boundary;
 227        uchar_t         phys_dmasize;
 228        uchar_t         phys_max_scgth;
 229        uchar_t         phys_flags;
 230        void            *phys_brkup_poolp;
 231} physreq_t;
 232
 233
 234typedef struct bcb {
 235        uchar_t         bcb_addrtypes;
 236        uchar_t         bcb_flags;
 237        size_t          bcb_max_xfer;
 238        size_t          bcb_granularity;
 239        physreq_t       *bcb_physreqp;
 240} bcb_t;
 241
 242struct hbagetinfo {
 243        char    *name;
 244        char    iotype;
 245        bcb_t   *bcbp;
 246};
 247
 248struct hba_info {
 249        int                             *hba_flag;
 250        ulong_t                 max_xfer;
 251        long                    (*hba_freeblk)(struct hbadata *hdp, int cntlr);
 252        struct hbadata  *(*hba_getblk)(int flag, int cntlr);
 253        long                    (*hba_icmd)(struct hbadata *hdp, int flag);
 254        void                    (*hba_getinfo)(struct scsi_ad *sap,
 255                                                struct hbagetinfo *hgip);
 256        long                    (*hba_send)(struct hbadata *hdp, int flag);
 257        int                             (*hba_xlat)(struct hbadata *hdp, int bflag, void *procp,
 258                                                int flag);
 259        int                             (*hba_open)(void);
 260        int                             (*hba_close)(void);
 261        int                             (*hba_ioctl)(void);
 262};
 263
 264/* hba_flag */
 265#define HBA_MP          0x01
 266#define HBA_HOT         0x02
 267#define HBA_TIMEOUT     0x04
 268
 269#define SC_EXHAN(minor) (((minor) >> 5) & 0x1f)
 270#define SC_EXTCN(minor) ((((minor) >> 2) & 0x07) | ((minor >> 7) & 0x18))
 271#define SC_EXLUN(minor) (((minor) & 0x03) | ((minor>>10) & 0x1C))
 272#define SC_BUS(minor)   (((minor) >> 15) & 0x07)
 273
 274#define SC_MKMINOR(h,t,l,b)     ( \
 275                                                                (((h) & 0x1f) << 5) | \
 276                                                                (((t) & 0x07) << 2) | (((t) & 0x18) << 7) | \
 277                                                                ((l) & 0x03) | (((l) & 0x1c) << 10) | \
 278                                                                (((b) & 0x07) << 15) \
 279                                                        )
 280
 281#define SDI_NAMESZ              49
 282
 283#define SM_POOLSIZE             28
 284#define LG_POOLSIZE             (sizeof (struct xsb))
 285
 286#define SCB_TYPE        1
 287#define ISCB_TYPE       2
 288#define SFB_TYPE        3
 289
 290#define SCB_WRITE       0x00
 291#define SCB_READ        0x01
 292#define SCB_LINK        0x02
 293#define SCB_HAAD        0x04
 294#define SCB_PARTBLK     0x08
 295
 296#define SDI_NOALLOC     0x00000000
 297#define SDI_ASW         0x00000001
 298#define SDI_LINKF0      0x00000002
 299#define SDI_LINKF1      0x00000003
 300#define SDI_QFLUSH      0xE0000004
 301#define SDI_ABORT       0xF0000005
 302#define SDI_RESET       0xF0000006
 303#define SDI_CRESET      0xD0000007
 304#define SDI_V2PERR      0xA0000008
 305#define SDI_TIME        0xD0000009
 306#define SDI_NOTEQ       0x8000000A
 307#define SDI_HAERR       0xE000000B
 308#define SDI_MEMERR      0xA000000C
 309#define SDI_SBUSER      0xA000000D
 310#define SDI_CKSTAT      0xD000000E
 311#define SDI_SCBERR      0x8000000F
 312#define SDI_OOS         0xA0000010
 313#define SDI_NOSELE      0x90000011
 314#define SDI_MISMAT      0x90000012
 315#define SDI_PROGRES     0x00000013
 316#define SDI_UNUSED      0x00000014
 317#define SDI_ONEIC       0x80000017
 318#define SDI_SFBERR      0x80000019
 319#define SDI_TCERR       0x9000001A
 320
 321#define SDI_ERROR       0x80000000
 322#define SDI_RETRY       0x40000000
 323#define SDI_MESS        0x20000000
 324#define SDI_SUSPEND     0x10000000
 325
 326#define SFB_NOPF                0x00
 327#define SFB_RESETM              0x01
 328#define SFB_ABORTM              0x02
 329#define SFB_FLUSHR              0x03
 330#define SFB_RESUME              0x04
 331#define SFB_SUSPEND             0x05
 332#define SFB_ADD_DEV             0x06
 333#define SFB_RM_DEV              0x07
 334#define SFB_PAUSE               0x08
 335#define SFB_CONTINUE    0x09
 336
 337#define SDI_386_AT              0x06
 338#define SDI_386_MCA             0x07
 339#define SDI_386_EISA    0x08
 340
 341#define SDI_RET_OK              0
 342#define SDI_RET_ERR             -1
 343#define SDI_RET_RETRY   1
 344
 345#define SDI_SEND                0x0081
 346#define SDI_TRESET              0x0082
 347#define SDI_BRESET              0x0084
 348#define HA_VER                  0x0083
 349#define SDI_RESERVE             0x0085
 350#define SDI_RELEASE             0x0086
 351#define SDI_RESTAT              0x0087
 352#define HA_GETPARMS             0x008a
 353#define IHA_GETPARMS    0x008b
 354#define HA_SETPARMS             0x008c
 355#define IHA_SETPARMS    0x008d
 356#define HA_GETPPARMS    0x008e
 357
 358struct sense {
 359        uchar_t                 sd_pad0;
 360        BITFIELD_2(unsigned char,
 361                                        sd_errc : 7,
 362                                        sd_valid : 1);
 363        uchar_t                 sd_res1;
 364        BITFIELD_5(unsigned char,
 365                                        sd_key : 4,
 366                                        sd_res2 : 1,
 367                                        sd_ili : 1,
 368                                        sd_eom : 1,
 369                                        sd_fm : 1);
 370        uint_t                  sd_ba;
 371        uchar_t                 sd_len;
 372        uchar_t                 sd_res3 [4];
 373        uchar_t                 sd_sencode;
 374        uchar_t                 sd_qualifier;
 375        uchar_t                 sd_fru;
 376        BITFIELD_5(unsigned char,
 377                                        sd_bitpt : 3,
 378                                        sd_bpv : 1,
 379                                        sd_res4 : 2,
 380                                        sd_cd : 1,
 381                                        sd_res5 : 1);
 382        uchar_t                 sd_field [2];
 383        uchar_t                 sd_res6;
 384        uchar_t                 sd_buffer;
 385        uchar_t                 sd_res7 [2];
 386};
 387
 388
 389struct sb_extra {
 390        struct sense    sb_sense;
 391};
 392
 393#define sc_priv         sc_extra
 394
 395struct sb;
 396
 397struct scb {
 398        ulong_t                 sc_comp_code;
 399        void                    *sc_extra;
 400        void                    (*sc_int)(struct sb *sbp);
 401        caddr_t                 sc_cmdpt;
 402        caddr_t                 sc_datapt;
 403        long                    sc_wd;
 404        time_t                  sc_time;
 405        struct scsi_ad  sc_dev;
 406        ushort_t                sc_mode;
 407        uchar_t                 sc_status;
 408        char                    sc_fill;
 409        struct sb               *sc_link;
 410        long                    sc_cmdsz;
 411        long                    sc_datasz;
 412        long                    sc_resid;
 413        hba_clock_t             sc_start;
 414};
 415
 416struct sfb {
 417        ulong_t                 sf_comp_code;
 418        char                    *sf_priv;
 419        void                    (*sf_int)(struct sb *sbp);
 420        struct scsi_ad  sf_dev;
 421        ulong_t                 sf_func;
 422        int                             sf_wd;
 423};
 424
 425struct sb {
 426        ulong_t                 sb_type;
 427        union {
 428                struct scb      b_scb;
 429                struct sfb      b_sfb;
 430        } sb_b;
 431};
 432
 433#define SCB             sb_b.b_scb
 434#define SFB             sb_b.b_sfb
 435
 436struct xsb {
 437        struct sb               sb;
 438        struct hbadata  *hbadata_p;
 439        struct owner    *owner_p;
 440        struct sb_extra extra;
 441};
 442
 443#define S_GOOD          0X00
 444#define S_CKCON         0X02
 445#define S_METGD         0X04
 446#define S_BUSY          0X08
 447#define S_INGD          0X10
 448#define S_INMET         0X12
 449#define S_RESER         0X18
 450#define S_CTERM         0x22
 451#define S_QFULL         0x28
 452
 453#define SLEEP                   0
 454#define NOSLEEP                 1
 455
 456#define KM_SLEEP                SLEEP
 457#define KM_NOSLEEP              NOSLEEP
 458#define KM_DMA                  2
 459#define KM_REQ_DMA              4
 460#define KM_PHYSCONTIG   8
 461
 462struct mod_drvintr {
 463        ushort_t        di_magic;
 464        ushort_t        di_version;
 465        char            *di_modname;
 466        int                     *di_devflagp;
 467        void            (*di_handler)(int vect);
 468        void            *di_hook;
 469};
 470
 471#define MOD_INTR_MAGIC  0xEB13
 472#define MOD_INTR_VER    1
 473
 474struct o_mod_drvintr {
 475        struct intr_info        *drv_intrinfo;
 476        void                            (*ihndler)(int vect);
 477};
 478
 479#define MOD_INTRVER_MASK        0xff000000
 480#define MOD_INTRVER_42          0x01000000
 481
 482#define INTRVER(infop)  ((unsigned int)((infop)->ivect_no & MOD_INTRVER_MASK))
 483#define INTRNO(infop)   ((infop)->ivect_no & ~MOD_INTRVER_MASK)
 484
 485struct intr_info0 {
 486        int     ivect_no;
 487        int     int_pri;
 488        int     itype;
 489};
 490
 491struct intr_info {
 492        int     ivect_no;
 493        int     int_pri;
 494        int     itype;
 495        int     int_cpu;
 496        int     int_mp;
 497};
 498
 499#endif  /* _SYS_SDI_H_ */
 500
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.