1 /* $FreeBSD: src/sys/dev/asr/osd_unix.h,v 1.1.2.2 2001/08/23 05:21:29 scottl Exp $ */ 2 /* $DragonFly: src/sys/dev/raid/asr/osd_unix.h,v 1.3 2004/07/02 15:53:01 joerg Exp $ */ 3 /* 4 * Copyright (c) 1996-1999 Distributed Processing Technology Corporation 5 * All rights reserved. 6 * 7 * Redistribution and use in source form, with or without modification, are 8 * permitted provided that redistributions of source code must retain the 9 * above copyright notice, this list of conditions and the following disclaimer. 10 * 11 * This software is provided `as is' by Distributed Processing Technology and 12 * any express or implied warranties, including, but not limited to, the 13 * implied warranties of merchantability and fitness for a particular purpose, 14 * are disclaimed. In no event shall Distributed Processing Technology be 15 * liable for any direct, indirect, incidental, special, exemplary or 16 * consequential damages (including, but not limited to, procurement of 17 * substitute goods or services; loss of use, data, or profits; or business 18 * interruptions) however caused and on any theory of liability, whether in 19 * contract, strict liability, or tort (including negligence or otherwise) 20 * arising in any way out of the use of this driver software, even if advised 21 * of the possibility of such damage. 22 * 23 */ 24 25 #ifndef __OSD_UNIX_H 26 #define __OSD_UNIX_H 27 28 #include <sys/ioccom.h> 29 30 /*File - OSD_UNIX.H */ 31 /*****************************************************************************/ 32 /* */ 33 /*Description: */ 34 /* */ 35 /* This file contains definitions for the UNIX OS dependent layer of the */ 36 /*DPT engine. */ 37 /* */ 38 /*Copyright Distributed Processing Technology, Corp. */ 39 /* 140 Candace Dr. */ 40 /* Maitland, Fl. 32751 USA */ 41 /* Phone: (407) 830-5522 Fax: (407) 260-5366 */ 42 /* All Rights Reserved */ 43 /* */ 44 /*Author: Bob Pasteur */ 45 /*Date: 5/28/93 */ 46 /* */ 47 /*Editors: */ 48 /* 3/7/96 salyzyn@dpt.com */ 49 /* Added BSDi extensions */ 50 /* 30/9/99 salyzyn@dpt.com */ 51 /* Added I2ORESCANCMD */ 52 /* 7/12/99 salyzyn@dpt.com */ 53 /* Added I2ORESETCMD */ 54 /* */ 55 /*Remarks: */ 56 /* */ 57 /* */ 58 /*****************************************************************************/ 59 60 /* Definitions - Defines & Constants ---------------------------------------*/ 61 62 #define DPT_TurnAroundKey 0x01 /* TurnAround Message Type for engine */ 63 #define DPT_EngineKey 0x02 /* Message Que and Type for engine */ 64 #define DPT_LoggerKey 0x03 /* Message Type For Logger */ 65 #define DPT_CommEngineKey 0x04 /* Message Que Type Created */ 66 67 #define MSG_RECEIVE 0x40000000 /* Ored Into Logger PID For Return Msg */ 68 69 #define ENGMSG_ECHO 0x00 /* Turnarround Echo Engine Message */ 70 #define ENGMSG_OPEN 0x01 /* Turnarround Open Engine Message */ 71 #define ENGMSG_CLOSE 0x02 /* Turnarround Close Engine Message */ 72 73 /* Message Que Creation Flags */ 74 75 #define MSG_URD 00400 76 #define MSG_UWR 00200 77 #define MSG_GRD 00040 78 #define MSG_GWR 00020 79 #define MSG_ORD 00004 80 #define MSG_OWR 00002 81 #define MSG_ALLRD 00444 82 #define MSG_ALLWR 00222 83 84 /* Message Que Creation Flags */ 85 86 #define SHM_URD 00400 87 #define SHM_UWR 00200 88 #define SHM_GRD 00040 89 #define SHM_GWR 00020 90 #define SHM_ORD 00004 91 #define SHM_OWR 00002 92 #define SHM_ALLRD 00444 93 #define SHM_ALLWR 00222 94 95 /* Program Exit Codes */ 96 97 #define ExitGoodStatus 0 98 #define ExitBadParameter 1 99 #define ExitSignalFail 3 100 #define ExitMsqAllocFail 5 101 #define ExitBuffAllocFail 6 102 #define ExitMsgSendFail 8 103 #define ExitMsgReceiveFail 9 104 105 #define ExitEngOpenFail 10 106 #define ExitDuplicateEngine 11 107 108 #define ExitCommAllocFail 12 109 #define ExitDuplicateCommEng 13 110 #define ExitCommConnectFail 14 111 112 #ifndef MAX_HAS 113 114 #define MAX_HAS 18 115 #define MAX_NAME 100 116 117 #endif /* ifndef MAX_HAS */ 118 119 120 typedef struct { 121 uCHAR ConfigLength[4]; /* Len in bytes after this field. */ 122 uCHAR EATAsignature[4]; 123 uCHAR EATAversion; 124 uCHAR Flags1; 125 uCHAR PadLength[2]; 126 uCHAR HBA[4]; 127 uCHAR CPlength[4]; /* Command Packet Length */ 128 uCHAR SPlength[4]; /* Status Packet Length */ 129 uCHAR QueueSize[2]; /* Controller Que depth */ 130 uCHAR SG_Size[4]; 131 uCHAR Flags2; 132 uCHAR Reserved0; /* Reserved Field */ 133 uCHAR Flags3; 134 uCHAR ScsiValues; 135 uCHAR MaxLUN; /* Maximun LUN Supported */ 136 uCHAR Flags4; 137 uCHAR RaidNum; /* RAID HBA Number For Stripping */ 138 uCHAR Reserved3; /* Reserved Field */ 139 } DptReadConfig_t; 140 141 #if defined ( _DPT_SOLARIS ) 142 143 #include <sys/types.h> 144 #include <sys/ddidmareq.h> 145 #include <sys/mutex.h> 146 #include <sys/scsi/scsi.h> 147 //#define _KERNEL 148 #include <sys/dditypes.h> 149 #include <sys/ddi_impldefs.h> 150 #include <sys/scsi/impl/transport.h> 151 //#undef _KERNEL 152 153 #undef MSG_DISCONNECT 154 #define MSG_DISCONNECT 0x11L 155 156 #define EATAUSRCMD 1 157 #define DPT_SIGNATURE 2 158 #define DPT_NUMCTRLS 3 159 #define DPT_CTRLINFO 4 160 #define DPT_SYSINFO 5 161 #define DPT_BLINKLED 6 162 #define I2OUSRCMD 7 163 //#define I2ORESCANCMD 8 /* Use DPT_IO_ACCESS instead */ 164 //#define I2ORESETCMD 9 /* Use DPT_IO_ACCESS instead */ 165 166 #define DPT_MAX_DMA_SEGS 32 /* Max used Scatter/Gather seg */ 167 168 struct dpt_sg { 169 paddr_t data_addr; 170 uLONG data_len; 171 }; 172 173 typedef struct { 174 uSHORT NumHBAs; 175 uLONG IOAddrs[18]; 176 } GetHbaInfo_t; 177 178 #elif defined(_DPT_DGUX) 179 180 #ifndef _IOWR 181 # define _IOWR(x,y,z) (0x0fff3900|y) 182 #endif 183 #ifndef _IOW 184 # define _IOW(x,y,z) (0x0fff3900|y) 185 #endif 186 #ifndef _IOR 187 # define _IOR(x,y,z) (0x0fff3900|y) 188 #endif 189 #ifndef _IO 190 # define _IO(x,y) (0x0fff3900|y) 191 #endif 192 /* EATA PassThrough Command */ 193 #define EATAUSRCMD _IOWR('D',65,EATA_CP) 194 /* Get Signature Structure */ 195 #define DPT_SIGNATURE _IOR('D',67,dpt_sig_S) 196 /* Get Number Of DPT Adapters */ 197 #define DPT_NUMCTRLS _IOR('D',68,int) 198 /* Get Adapter Info Structure */ 199 #define DPT_CTRLINFO _IOR('D',69,CtrlInfo) 200 /* Get System Info Structure */ 201 #define DPT_SYSINFO _IOR('D',72,sysInfo_S) 202 /* Get Blink LED Code */ 203 #define DPT_BLINKLED _IOR('D',75,int) 204 /* Get Statistical information (if available) */ 205 #define DPT_STATS_INFO _IOR('D',80,STATS_DATA) 206 /* Clear the statistical information */ 207 #define DPT_STATS_CLEAR _IO('D',81) 208 /* Send an I2O command */ 209 #define I2OUSRCMD _IO('D',76) 210 /* Inform driver to re-acquire LCT information */ 211 #define I2ORESCANCMD _IO('D',77) 212 /* Inform driver to reset adapter */ 213 #define I2ORESETCMD _IO('D',78) 214 215 #elif defined (SNI_MIPS) 216 /* Unix Ioctl Command definitions */ 217 218 #define EATAUSRCMD (('D'<<8)|65) 219 #define DPT_DEBUG (('D'<<8)|66) 220 #define DPT_SIGNATURE (('D'<<8)|67) 221 #define DPT_NUMCTRLS (('D'<<8)|68) 222 #define DPT_CTRLINFO (('D'<<8)|69) 223 #define DPT_STATINFO (('D'<<8)|70) 224 #define DPT_CLRSTAT (('D'<<8)|71) 225 #define DPT_SYSINFO (('D'<<8)|72) 226 /* Set Timeout Value */ 227 #define DPT_TIMEOUT (('D'<<8)|73) 228 /* Get config Data */ 229 #define DPT_CONFIG (('D'<<8)|74) 230 /* Get config Data */ 231 #define DPT_BLINKLED (('D'<<8)|75) 232 /* Get Statistical information (if available) */ 233 #define DPT_STATS_INFO (('D'<<8)|80) 234 /* Clear the statistical information */ 235 #define DPT_STATS_CLEAR (('D'<<8)|81) 236 /* Send an I2O command */ 237 #define I2OUSRCMD (('D'<<8)|76) 238 /* Inform driver to re-acquire LCT information */ 239 #define I2ORESCANCMD (('D'<<8)|77) 240 /* Inform driver to reset adapter */ 241 #define I2ORESETCMD (('D'<<8)|78) 242 243 #else 244 245 /* Unix Ioctl Command definitions */ 246 247 #ifdef _DPT_AIX 248 249 #undef _IOWR 250 #undef _IOW 251 #undef _IOR 252 #undef _IO 253 #endif 254 255 #ifndef _IOWR 256 # define _IOWR(x,y,z) (((x)<<8)|y) 257 #endif 258 #ifndef _IOW 259 # define _IOW(x,y,z) (((x)<<8)|y) 260 #endif 261 #ifndef _IOR 262 # define _IOR(x,y,z) (((x)<<8)|y) 263 #endif 264 #ifndef _IO 265 # define _IO(x,y) (((x)<<8)|y) 266 #endif 267 /* EATA PassThrough Command */ 268 #define EATAUSRCMD _IOWR('D',65,EATA_CP) 269 /* Set Debug Level If Enabled */ 270 #define DPT_DEBUG _IOW('D',66,int) 271 /* Get Signature Structure */ 272 #define DPT_SIGNATURE _IOR('D',67,dpt_sig_S) 273 #if defined __bsdi__ 274 #define DPT_SIGNATURE_PACKED _IOR('D',67,dpt_sig_S_Packed) 275 #endif 276 /* Get Number Of DPT Adapters */ 277 #define DPT_NUMCTRLS _IOR('D',68,int) 278 /* Get Adapter Info Structure */ 279 #define DPT_CTRLINFO _IOR('D',69,CtrlInfo) 280 /* Get Statistics If Enabled */ 281 #define DPT_STATINFO _IO('D',70) 282 /* Clear Stats If Enabled */ 283 #define DPT_CLRSTAT _IO('D',71) 284 /* Get System Info Structure */ 285 #define DPT_SYSINFO _IOR('D',72,sysInfo_S) 286 /* Set Timeout Value */ 287 #define DPT_TIMEOUT _IO('D',73) 288 /* Get config Data */ 289 #define DPT_CONFIG _IO('D',74) 290 /* Get Blink LED Code */ 291 #define DPT_BLINKLED _IOR('D',75,int) 292 /* Get Statistical information (if available) */ 293 #define DPT_STATS_INFO _IOR('D',80,STATS_DATA) 294 /* Clear the statistical information */ 295 #define DPT_STATS_CLEAR _IO('D',81) 296 /* Get Performance metrics */ 297 #define DPT_PERF_INFO _IOR('D',82,dpt_perf_t) 298 /* Send an I2O command */ 299 #define I2OUSRCMD _IO('D',76) 300 /* Inform driver to re-acquire LCT information */ 301 #define I2ORESCANCMD _IO('D',77) 302 /* Inform driver to reset adapter */ 303 #define I2ORESETCMD _IO('D',78) 304 #if defined _DPT_LINUX 305 /* See if the target is mounted */ 306 #define DPT_TARGET_BUSY _IOR('D',79, TARGET_BUSY_T) 307 #endif 308 309 310 #endif /* _DPT_SOLARIS else */ 311 312 /* Adapter Flags Field Bit Definitions */ 313 314 #define CTLR_INSTALLED 0x00000001 /* Adapter Was Installed */ 315 #define CTLR_DMA 0x00000002 /* DMA Supported */ 316 #define CTLR_OVERLAP 0x00000004 /* Overlapped Commands Support */ 317 #define CTLR_SECONDARY 0x00000008 /* I/O Address Not 0x1f0 */ 318 #define CTLR_BLINKLED 0x00000010 /* Adapter In Blink LED State */ 319 #define CTLR_HBACI 0x00000020 /* Cache Inhibit Supported */ 320 #define CTLR_CACHE 0x00000040 /* Adapter Has Cache */ 321 #define CTLR_SANE 0x00000080 /* Adapter Functioning OK */ 322 #define CTLR_BUS_QUIET 0x00000100 /* Bus Quite On This Adapter */ 323 #define CTLR_ABOVE_16 0x00000200 /* Support For Mem. Above 16 MB */ 324 #define CTLR_SCAT_GATH 0x00000400 /* Scatter Gather Supported */ 325 326 327 /* Definitions - Structure & Typedef ---------------------------------------*/ 328 329 typedef struct { 330 uLONG MsgID; 331 DPT_TAG_T engineTag; 332 DPT_TAG_T targetTag; 333 DPT_MSG_T engEvent; 334 long BufferID; 335 uLONG FromEngBuffOffset; 336 uLONG callerID; 337 DPT_RTN_T result; 338 uLONG timeOut; 339 } MsgHdr; 340 341 #define MsgDataSize sizeof(MsgHdr) - 4 342 343 #ifndef SNI_MIPS 344 345 /*-------------------------------------------------------------------------*/ 346 /* EATA Command Packet definition */ 347 /*-------------------------------------------------------------------------*/ 348 349 typedef struct EATACommandPacket { 350 351 #ifdef _DPT_UNIXWARE 352 353 uCHAR EataID[4]; 354 uINT EataCmd; 355 uCHAR *CmdBuffer; 356 357 #endif /* _DPT_UNIXWARE */ 358 359 #ifdef _DPT_AIX 360 361 uCHAR HbaTargetID; 362 uCHAR HbaLUN; 363 364 #endif /* _DPT_AIX */ 365 366 uCHAR cp_Flags1; /* Command Flags */ 367 uCHAR cp_Req_Len; /* AutoRequestSense Data length. */ 368 uCHAR cp_Resv1[3]; /* Reserved Fields */ 369 uCHAR cp_Flags2; 370 uCHAR cp_Flags3; 371 uCHAR cp_ScsiAddr; 372 uCHAR cp_msg0; /* Identify and Disconnect Message. */ 373 uCHAR cp_msg1; 374 uCHAR cp_msg2; 375 uCHAR cp_msg3; 376 uCHAR cp_cdb[12]; /* SCSI cdb for command. */ 377 uLONG cp_dataLen; /* Data length in Bytes for command. */ 378 uLONG cp_Vue; /* Vendor Unique Area */ 379 uCHAR *cp_DataAddr; /* Data Address For The Command. */ 380 uCHAR *cp_SpAddr; /* Status Packet Physical Address. */ 381 uCHAR *cp_SenseAddr; /* AutoRequestSense Data Phy Address. */ 382 383 #ifdef _DPT_SOLARIS 384 385 uCHAR HostStatus; 386 uCHAR TargetStatus; 387 uCHAR CdbLength; 388 uCHAR SG_Size; 389 struct scsi_arq_status ReqSenseData; 390 struct dpt_sg SG_List[DPT_MAX_DMA_SEGS]; 391 union { 392 char *b_scratch; 393 struct scsi_cmd *b_ownerp; 394 } cc; 395 paddr_t ccb_paddr; 396 uSHORT IOAddress; 397 398 #else /* _DPT_SOLARIS */ 399 400 uLONG TimeOut ; 401 uCHAR HostStatus; 402 uCHAR TargetStatus; 403 uCHAR Retries; 404 405 #endif /* _DPT_SOLARIS else */ 406 407 } EATA_CP; 408 #endif /* SNI_MIPS */ 409 410 411 /* Control Flags 1 Definitions */ 412 413 #define SCSI_RESET 0x01 /* Cause a SCSI Bus reset on the cmd */ 414 #define HBA_INIT 0x02 /* Cause Controller to reInitialize */ 415 #define AUTO_REQ_SENSE 0x04 /* Do Auto Request Sense on errors */ 416 #define SCATTER_GATHER 0x08 /* Data Ptr points to a SG Packet */ 417 #define INTERPRET 0x20 /* Interpret the SCSI cdb of own use */ 418 #define DATA_OUT 0x04 /* Data Out phase with command */ 419 #define DATA_IN 0x08 /* Data In phase with command */ 420 421 /* Control Flags 2 Definitions */ 422 423 #define FIRMWARE_NESTED 0x01 424 425 426 /* Control Flags 3 Definitions */ 427 428 #define PHYSICAL_UNIT 0x01 /* Send Command Directly To Target */ 429 #define IAT 0x02 /* Inhibit Address Translation */ 430 #define HBACI 0x04 /* Inhibit Caching */ 431 432 433 /* Structure Returned From Get Controller Info */ 434 435 typedef struct { 436 437 uCHAR state; /* Operational state */ 438 uCHAR id; /* Host adapter SCSI id */ 439 int vect; /* Interrupt vector number */ 440 int base; /* Base I/O address */ 441 int njobs; /* # of jobs sent to HA */ 442 int qdepth; /* Controller queue depth. */ 443 int wakebase; /* mpx wakeup base index. */ 444 uLONG SGsize; /* Scatter/Gather list size. */ 445 unsigned heads; /* heads for drives on cntlr. */ 446 unsigned sectors; /* sectors for drives on cntlr. */ 447 uCHAR do_drive32; /* Flag for Above 16 MB Ability */ 448 uCHAR BusQuiet; /* SCSI Bus Quiet Flag */ 449 char idPAL[4]; /* 4 Bytes Of The ID Pal */ 450 uCHAR primary; /* 1 For Primary, 0 For Secondary */ 451 uCHAR eataVersion; /* EATA Version */ 452 uLONG cpLength; /* EATA Command Packet Length */ 453 uLONG spLength; /* EATA Status Packet Length */ 454 uCHAR drqNum; /* DRQ Index (0,5,6,7) */ 455 uCHAR flag1; /* EATA Flags 1 (Byte 9) */ 456 uCHAR flag2; /* EATA Flags 2 (Byte 30) */ 457 458 } CtrlInfo; 459 460 #ifndef SNI_MIPS 461 #ifdef _DPT_UNIXWARE 462 463 typedef struct { 464 465 uINT state; /* Operational state */ 466 uCHAR id[4]; /* Host adapter SCSI id */ 467 uINT vect; /* Interrupt vector number */ 468 uLONG base; /* Base I/O address */ 469 int ha_max_jobs; /* Max number of Active Jobs */ 470 uLONG ha_cacheParams; 471 int ha_nbus; /* Number Of Busses on HBA */ 472 int ha_ntargets; /* Number Of Targets Supported */ 473 int ha_nluns; /* Number Of LUNs Supported */ 474 int ha_tshift; /* Shift value for target */ 475 int ha_bshift; /* Shift value for bus */ 476 uINT ha_npend; /* # of jobs sent to HA */ 477 int ha_active_jobs; /* Number Of Active Jobs */ 478 479 } HbaInfo; 480 481 /* SDI ioctl prefix for hba specific ioctl's */ 482 483 #define SDI_IOC (('S'<<24)|('D'<<16)|('I'<<8)) 484 485 #define SDI_HBANAME ((SDI_IOC)|0x14) /* Get HBA module name */ 486 #define SDI_SEND 0x0081 /* Send a SCSI command */ 487 488 #else 489 490 typedef struct { 491 492 uLONG flags; /* Operational State Flags */ 493 uCHAR id[4]; /* Host Adapter SCSI ID */ 494 int vect; /* Interrupt Vector Number */ 495 int base; /* Base I/O Address */ 496 int njobs; /* # Of CCBs Outstanding To HBA */ 497 int qdepth; /* Controller Queue depth. */ 498 uLONG SGsize; /* Scatter/Gather List Size. */ 499 char idPAL[4]; /* 4 Bytes Of The ID Pal */ 500 uCHAR eataVersion; /* EATA Version */ 501 uLONG cpLength; /* EATA Command Packet Length */ 502 uLONG spLength; /* EATA Status Packet Length */ 503 uCHAR drqNum; /* DRQ Index (0,5,6,7) */ 504 uCHAR eataflag1; /* EATA Flags 1 (Byte 9) */ 505 uCHAR eataflag2; /* EATA Flags 2 (Byte 30) */ 506 uCHAR maxChannel; /* Maximum Channel Number */ 507 uCHAR maxID; /* Maximum Target ID */ 508 uCHAR maxLUN; /* Maximum LUN */ 509 uCHAR HbaBusType; /* HBA Bus Type, EISA, PCI, etc */ 510 uCHAR RaidNum; /* Host Adapter RAID Number */ 511 512 } HbaInfo; 513 514 #endif /* _DPT_UNIXWARE */ 515 #endif /* SNI_MIPS */ 516 517 518 #ifdef _DPT_AIX 519 520 /* 521 * DPT Host Adapter config information structure - this structure contains 522 * configuration information about an adapter. It is imbedded into the 523 * dpt_ctl structure. 524 */ 525 526 typedef struct dpt_cfg { 527 uchar flags; /* Operational state flags */ 528 uchar id[4]; /* Host adapter SCSI IDs */ 529 int vect; /* Interrupt vector number */ 530 ulong base_addr; /* Base I/O address */ 531 int qdepth; /* Controller queue depth. */ 532 ulong SGsize; /* Max scatter/gather list sz */ 533 ulong SGmax; /* Max s/g we can use per req */ 534 uchar eataVersion; /* EATA version */ 535 ushort cpPadLen; /* # of pad bytes sent to HA for 536 PIO commands */ 537 ulong cpLength; /* EATA Command Packet length */ 538 ulong spLength; /* EATA Status Packet length */ 539 uchar eataflag1; /* EATA Flags 1 (Byte 9) */ 540 uchar eataflag2; /* EATA Flags 2 (Byte 30) */ 541 uchar maxChan; /* Maximum Channel number */ 542 uchar maxID; /* Maximum target ID */ 543 uchar maxLUN; /* Maximum LUN */ 544 uchar HbaBusType; /* HBA bus type, EISA, PCI, etc */ 545 uchar RaidNum; /* Host adapter RAID number */ 546 } DptCfg_t; 547 548 #endif /* _DPT_AIX */ 549 550 551 #define MAX_ELEMENT_COUNT 64 552 #define MAX_BUCKET_COUNT 10 553 554 /* 555 * DPT statistics structure definitions 556 */ 557 typedef struct IO_SIZE_STATS 558 { 559 uLONG TotalIoCount; 560 uLONG IoCountRead; 561 uLONG IoCountReadSg; 562 uLONG IoCountWrite; 563 uLONG IoCountWriteSg; 564 uLONG UnalignedIoAddress; 565 uLONG SgElementCount[MAX_ELEMENT_COUNT]; 566 567 } IO_SIZE_STATS_T, *pIO_SIZE_STATS_T; 568 569 typedef struct STATS_DATA 570 { 571 uLONG TotalIoCount; 572 uLONG TotalUnCachedIoCount; 573 uLONG MaxOutstandingIoCount; 574 uLONG CurrentOutstandingIoCount; 575 uLONG OutstandingIoRunningCount; 576 uLONG UnalignedPktCount; 577 uLONG UnalignedSgCount; 578 uLONG NonPageListAddressSgCount; 579 uLONG MaxMessagesPerInterrupt; 580 IO_SIZE_STATS_T IoSize[MAX_BUCKET_COUNT]; 581 582 } STATS_DATA_T, *pSTATS_DATA_T; 583 584 typedef struct TARGET_BUSY 585 { 586 uLONG channel; 587 uLONG id; 588 uLONG lun; 589 uLONG isBusy; 590 } TARGET_BUSY_T; 591 #endif /* __OSD_UNIX_H */ 592