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