|
|
1.1 ! root 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: ! 55: typedef u_long paddr_t; ! 56: typedef u_int rm_key_t; ! 57: ! 58: typedef long hba_clock_t; ! 59: ! 60: typedef u_long major_t; ! 61: typedef u_long minor_t; ! 62: ! 63: typedef u_long hba_buf_t; /* just to satisfy declaration */ ! 64: typedef u_long hba_uio_t; /* just to satisfy declaration */ ! 65: ! 66: ! 67: struct ver_no { ! 68: uchar_t sv_release; ! 69: uchar_t sv_machine; ! 70: short sv_modes; ! 71: }; ! 72: ! 73: struct 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: ! 92: struct 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: ! 120: struct 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: ! 142: struct scsi_adr { ! 143: int scsi_ctl; ! 144: int scsi_target; ! 145: int scsi_lun; ! 146: int scsi_bus; ! 147: }; ! 148: ! 149: struct 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: ! 167: struct 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: ! 194: struct mod_operations { ! 195: int (*modm_install)(void); ! 196: int (*modm_remove)(void); ! 197: int (*modm_info)(void); ! 198: int (*modm_bind)(void); ! 199: }; ! 200: ! 201: struct modlink { ! 202: struct mod_operations *ml_ops; ! 203: void *ml_type_data; ! 204: }; ! 205: ! 206: struct mod_type_data { ! 207: char *mtd_info; ! 208: void *mtd_pdata; ! 209: }; ! 210: ! 211: struct 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: ! 220: struct hbadata { ! 221: struct xsb *sb; ! 222: }; ! 223: ! 224: typedef 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: ! 234: typedef 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: ! 242: struct hbagetinfo { ! 243: char *name; ! 244: char iotype; ! 245: bcb_t *bcbp; ! 246: }; ! 247: ! 248: struct 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: ! 358: struct 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: ! 389: struct sb_extra { ! 390: struct sense sb_sense; ! 391: }; ! 392: ! 393: #define sc_priv sc_extra ! 394: ! 395: struct sb; ! 396: ! 397: struct 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: ! 416: struct 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: ! 425: struct 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: ! 436: struct 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: ! 462: struct 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: ! 474: struct 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: ! 485: struct intr_info0 { ! 486: int ivect_no; ! 487: int int_pri; ! 488: int itype; ! 489: }; ! 490: ! 491: struct 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_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.