i2oadptr.h revision 65312
165312Smsmith/* $FreeBSD: head/sys/dev/asr/i2oadptr.h 65312 2000-09-01 07:51:25Z msmith $ */ 265312Smsmith/**************************************************************** 365312Smsmith * Copyright (c) 1996-2000 Distributed Processing Technology Corporation 465312Smsmith * Copyright (c) 2000 Adaptec Corproation. 565312Smsmith * All rights reserved. 665312Smsmith * 765312Smsmith * Copyright 1999 I2O Special Interest Group (I2O SIG). All rights reserved. 865312Smsmith * All rights reserved 965312Smsmith * 1065312Smsmith * TERMS AND CONDITIONS OF USE 1165312Smsmith * 1265312Smsmith * Redistribution and use in source form, with or without modification, are 1365312Smsmith * permitted provided that redistributions of source code must retain the 1465312Smsmith * above copyright notice, this list of conditions and the following disclaimer. 1565312Smsmith * 1665312Smsmith * This software is provided `as is' by Distributed Processing Technology and 1765312Smsmith * any express or implied warranties, including, but not limited to, the 1865312Smsmith * implied warranties of merchantability and fitness for a particular purpose, 1965312Smsmith * are disclaimed. In no event shall Distributed Processing Technology be 2065312Smsmith * liable for any direct, indirect, incidental, special, exemplary or 2165312Smsmith * consequential damages (including, but not limited to, procurement of 2265312Smsmith * substitute goods or services; loss of use, data, or profits; or business 2365312Smsmith * interruptions) however caused and on any theory of liability, whether in 2465312Smsmith * contract, strict liability, or tort (including negligence or otherwise) 2565312Smsmith * arising in any way out of the use of this driver software, even if advised 2665312Smsmith * of the possibility of such damage. 2765312Smsmith * 2865312Smsmith * This header file, and any modifications of this header file, are provided 2965312Smsmith * contingent upon your agreement and adherence to the here-listed terms and 3065312Smsmith * conditions. By accepting and/or using this header file, you agree to abide 3165312Smsmith * by these terms and conditions and that these terms and conditions will be 3265312Smsmith * construed and governed in accordance with the laws of the State of California, 3365312Smsmith * without reference to conflict-of-law provisions. If you do not agree 3465312Smsmith * to these terms and conditions, please delete this file, and any copies, 3565312Smsmith * permanently, without making any use thereof. 3665312Smsmith * 3765312Smsmith * THIS HEADER FILE IS PROVIDED FREE OF CHARGE ON AN AS-IS BASIS WITHOUT 3865312Smsmith * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 3965312Smsmith * TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 4065312Smsmith * PURPOSE. I2O SIG DOES NOT WARRANT THAT THIS HEADER FILE WILL MEET THE 4165312Smsmith * USER'S REQUIREMENTS OR THAT ITS OPERATION WILL BE UNINTERRUPTED OR 4265312Smsmith * ERROR-FREE. 4365312Smsmith * 4465312Smsmith * I2O SIG DISCLAIMS ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF 4565312Smsmith * ANY PROPRIETARY RIGHTS, RELATING TO THE IMPLEMENTATION OF THE I2O 4665312Smsmith * SPECIFICATIONS. I2O SIG DOES NOT WARRANT OR REPRESENT THAT SUCH 4765312Smsmith * IMPLEMENTATIONS WILL NOT INFRINGE SUCH RIGHTS. 4865312Smsmith * 4965312Smsmith * THE USER OF THIS HEADER FILE SHALL HAVE NO RECOURSE TO I2O SIG FOR ANY 5065312Smsmith * ACTUAL OR CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT LIMITED TO, LOST DATA 5165312Smsmith * OR LOST PROFITS ARISING OUT OF THE USE OR INABILITY TO USE THIS PROGRAM. 5265312Smsmith * 5365312Smsmith * I2O SIG grants the user of this header file a license to copy, distribute, 5465312Smsmith * and modify it, for any purpose, under the following terms. Any copying, 5565312Smsmith * distribution, or modification of this header file must not delete or alter 5665312Smsmith * the copyright notice of I2O SIG or any of these Terms and Conditions. 5765312Smsmith * 5865312Smsmith * Any distribution of this header file must not include a charge for the 5965312Smsmith * header file (unless such charges are strictly for the physical acts of 6065312Smsmith * copying or transferring copies). However, distribution of a product in 6165312Smsmith * which this header file is embedded may include a charge so long as any 6265312Smsmith * such charge does not include any charge for the header file itself. 6365312Smsmith * 6465312Smsmith * Any modification of this header file constitutes a derivative work based 6565312Smsmith * on this header file. Any distribution of such derivative work: (1) must 6665312Smsmith * include prominent notices that the header file has been changed from the 6765312Smsmith * original, together with the dates of any changes; (2) automatically includes 6865312Smsmith * this same license to the original header file from I2O SIG, without any 6965312Smsmith * restriction thereon from the distributing user; and (3) must include a 7065312Smsmith * grant of license of the modified file under the same terms and conditions 7165312Smsmith * as these Terms and Conditions. 7265312Smsmith * 7365312Smsmith * The I2O SIG Web site can be found at: http://www.i2osig.org 7465312Smsmith * 7565312Smsmith * The I2O SIG encourages you to deposit derivative works based on this 7665312Smsmith * header file at the I2O SIG Web site. Furthermore, to become a Registered 7765312Smsmith * Developer of the I2O SIG, sign up at the Web site or call 415.750.8352 7865312Smsmith * (United States). 7965312Smsmith ****************************************************************/ 8065312Smsmith 8165312Smsmith#if !defined(I2O_ADPTR_HDR) 8265312Smsmith#define I2O_ADPTR_HDR 8365312Smsmith 8465312Smsmith#if ((defined(KERNEL) || defined(_KERNEL)) && defined(__FreeBSD__)) 8565312Smsmith# if (KERN_VERSION < 3) 8665312Smsmith# include "i386/pci/i2omsg.h" 8765312Smsmith# else 8865312Smsmith# include "dev/asr/i2omsg.h" 8965312Smsmith# endif 9065312Smsmith#else 9165312Smsmith# include "i2omsg.h" /* Include the Base Message file */ 9265312Smsmith#endif 9365312Smsmith 9465312Smsmith 9565312Smsmith#define I2OADPTR_REV 1_5_1 /* Header file revision string */ 9665312Smsmith 9765312Smsmith 9865312Smsmith/***************************************************************************** 9965312Smsmith * 10065312Smsmith * i2oadptr.h -- I2O Adapter Class Message defintion file 10165312Smsmith * 10265312Smsmith * 10365312Smsmith * Revision History: 10465312Smsmith * 10565312Smsmith * 1.5.d 03/06/97 - First definition for spec. draft version 1.5d. 10665312Smsmith * 1.5.1 05/02/97 - Corrections from review cycle: 10765312Smsmith * 1) Remove "SCSI" from function definition comment. 10865312Smsmith * 2) Add revision string. 10965312Smsmith * 3) Convert tabs to spaces. 11065312Smsmith * 4) New disclaimer. 11165312Smsmith * 11265312Smsmith * 11365312Smsmith * 11465312Smsmith *****************************************************************************/ 11565312Smsmith 11665312Smsmith/* 11765312Smsmith NOTES: 11865312Smsmith 11965312Smsmith Gets, reads, receives, etc. are all even numbered functions. 12065312Smsmith Sets, writes, sends, etc. are all odd numbered functions. 12165312Smsmith Functions that both send and receive data can be either but an attempt is made 12265312Smsmith to use the function number that indicates the greater transfer amount. 12365312Smsmith Functions that do not send or receive data use odd function numbers. 12465312Smsmith 12565312Smsmith Some functions are synonyms like read, receive and send, write. 12665312Smsmith 12765312Smsmith All common functions will have a code of less than 0x80. 12865312Smsmith Unique functions to a class will start at 0x80. 12965312Smsmith Executive Functions start at 0xA0. 13065312Smsmith 13165312Smsmith Utility Message function codes range from 0 - 0x1f 13265312Smsmith Base Message function codes range from 0x20 - 0xfe 13365312Smsmith Private Message function code is 0xff. 13465312Smsmith*/ 13565312Smsmith 13665312Smsmith 13765312SmsmithPRAGMA_ALIGN_PUSH 13865312Smsmith 13965312SmsmithPRAGMA_PACK_PUSH 14065312Smsmith 14165312Smsmith/* 14265312Smsmith Bus Adapter Class specific functions 14365312Smsmith*/ 14465312Smsmith 14565312Smsmith#define I2O_HBA_ADAPTER_RESET 0x85 14665312Smsmith#define I2O_HBA_BUS_QUIESCE 0x8b 14765312Smsmith#define I2O_HBA_BUS_RESET 0x87 14865312Smsmith#define I2O_HBA_BUS_SCAN 0x89 14965312Smsmith 15065312Smsmith 15165312Smsmith/* 15265312Smsmith Detailed Status Codes for HBA operations 15365312Smsmith 15465312Smsmith Note: 15565312Smsmith The 16-bit Detailed Status Code field for HBA operations is divided 15665312Smsmith into two separate 8-bit fields. The lower 8 bits are reserved. The 15765312Smsmith upper 8 bits are used to report Adapter Status information. The 15865312Smsmith definitions for these two fields, however, will be consistent with 15965312Smsmith the standard reply message frame structure declaration, which treats 16065312Smsmith this as a single 16-bit field. In addition, the values used will be 16165312Smsmith consistent with the Adapter Status codes defined for the SCSI 16265312Smsmith Peripheral class. Theses codes are based on CAM-1. In other words, 16365312Smsmith these definitions are a subset of the SCSI peripheral class codes. 16465312Smsmith Where applicable, "SCSI" has been removed from the definition. 16565312Smsmith*/ 16665312Smsmith 16765312Smsmith 16865312Smsmith#define I2O_HBA_DSC_MASK 0xFF00 16965312Smsmith 17065312Smsmith#define I2O_HBA_DSC_SUCCESS 0x0000 17165312Smsmith#define I2O_HBA_DSC_ADAPTER_BUSY 0x0500 17265312Smsmith#define I2O_HBA_DSC_COMMAND_TIMEOUT 0x0B00 17365312Smsmith#define I2O_HBA_DSC_COMPLETE_WITH_ERROR 0x0400 17465312Smsmith#define I2O_HBA_DSC_FUNCTION_UNAVAILABLE 0x3A00 17565312Smsmith#define I2O_HBA_DSC_NO_ADAPTER 0x1100 17665312Smsmith#define I2O_HBA_DSC_PARITY_ERROR_FAILURE 0x0F00 17765312Smsmith#define I2O_HBA_DSC_PATH_INVALID 0x0700 17865312Smsmith#define I2O_HBA_DSC_PROVIDE_FAILURE 0x1600 17965312Smsmith#define I2O_HBA_DSC_QUEUE_FROZEN 0x4000 18065312Smsmith#define I2O_HBA_DSC_REQUEST_ABORTED 0x0200 18165312Smsmith#define I2O_HBA_DSC_REQUEST_INVALID 0x0600 18265312Smsmith#define I2O_HBA_DSC_REQUEST_LENGTH_ERROR 0x1500 18365312Smsmith#define I2O_HBA_DSC_REQUEST_TERMINATED 0x1800 18465312Smsmith#define I2O_HBA_DSC_RESOURCE_UNAVAILABLE 0x3400 18565312Smsmith#define I2O_HBA_DSC_BUS_BUSY 0x3F00 18665312Smsmith#define I2O_HBA_DSC_BUS_RESET 0x0E00 18765312Smsmith#define I2O_HBA_DSC_ID_INVALID 0x3900 18865312Smsmith#define I2O_HBA_DSC_SEQUENCE_FAILURE 0x1400 18965312Smsmith#define I2O_HBA_DSC_UNABLE_TO_ABORT 0x0300 19065312Smsmith#define I2O_HBA_DSC_UNABLE_TO_TERMINATE 0x0900 19165312Smsmith#define I2O_HBA_DSC_UNACKNOWLEDGED_EVENT 0x3500 19265312Smsmith#define I2O_HBA_DSC_UNEXPECTED_BUS_FREE 0x1300 19365312Smsmith 19465312Smsmith 19565312Smsmith 19665312Smsmith/****************************************************************************/ 19765312Smsmith 19865312Smsmith/* Bus Adapter Parameter Groups */ 19965312Smsmith 20065312Smsmith/****************************************************************************/ 20165312Smsmith 20265312Smsmith 20365312Smsmith#define I2O_HBA_CONTROLLER_INFO_GROUP_NO 0x0000 20465312Smsmith#define I2O_HBA_HISTORICAL_STATS_GROUP_NO 0x0100 20565312Smsmith#define I2O_HBA_SCSI_CONTROLLER_INFO_GROUP_NO 0x0200 20665312Smsmith#define I2O_HBA_SCSI_BUS_PORT_INFO_GROUP_NO 0x0201 20765312Smsmith#define I2O_HBA_FCA_CONTROLLER_INFO_GROUP_NO 0x0300 20865312Smsmith#define I2O_HBA_FCA_PORT_INFO_GROUP_NO 0x0301 20965312Smsmith 21065312Smsmith 21165312Smsmith/* - 0000h - HBA Controller Information Parameter Group */ 21265312Smsmith 21365312Smsmith/* Bus Type */ 21465312Smsmith 21565312Smsmith#define I2O_HBA_BUS_TYPE_GENERIC 0x00 21665312Smsmith#define I2O_HBA_BUS_TYPE_SCSI 0x01 21765312Smsmith#define I2O_HBA_BUS_TYPE_FCA 0x10 21865312Smsmith 21965312Smsmith 22065312Smsmithtypedef struct _I2O_HBA_CONTROLLER_INFO_SCALAR { 22165312Smsmith U8 BusType; 22265312Smsmith U8 BusState; 22365312Smsmith U16 Reserved2; 22465312Smsmith U8 BusName[12]; 22565312Smsmith} I2O_HBA_CONTROLLER_INFO_SCALAR, *PI2O_HBA_CONTROLLER_INFO_SCALAR; 22665312Smsmith 22765312Smsmith 22865312Smsmith/* - 0100h - HBA Historical Stats Parameter Group */ 22965312Smsmith 23065312Smsmithtypedef struct _I2O_HBA_HIST_STATS_SCALAR { 23165312Smsmith U32 TimeLastPoweredUp; 23265312Smsmith U32 TimeLastReset; 23365312Smsmith} I2O_HBA_HIST_STATS_SCALAR, *PI2O_HBA_HIST_STATS_SCALAR; 23465312Smsmith 23565312Smsmith 23665312Smsmith/* - 0200h - HBA SCSI Controller Information Parameter Group */ 23765312Smsmith 23865312Smsmith/* SCSI Type */ 23965312Smsmith 24065312Smsmith#define I2O_SCSI_TYPE_UNKNOWN 0x00 24165312Smsmith#define I2O_SCSI_TYPE_SCSI_1 0x01 24265312Smsmith#define I2O_SCSI_TYPE_SCSI_2 0x02 24365312Smsmith#define I2O_SCSI_TYPE_SCSI_3 0x03 24465312Smsmith 24565312Smsmith/* Protection Management */ 24665312Smsmith 24765312Smsmith#define I2O_SCSI_PORT_PROT_OTHER 0x00 24865312Smsmith#define I2O_SCSI_PORT_PROT_UNKNOWN 0x01 24965312Smsmith#define I2O_SCSI_PORT_PROT_UNPROTECTED 0x02 25065312Smsmith#define I2O_SCSI_PORT_PROT_PROTECTED 0x03 25165312Smsmith#define I2O_SCSI_PORT_PROT_SCC 0x04 25265312Smsmith 25365312Smsmith/* Settings */ 25465312Smsmith 25565312Smsmith#define I2O_SCSI_PORT_PARITY_FLAG 0x01 25665312Smsmith#define I2O_SCSI_PORT_PARITY_DISABLED 0x00 25765312Smsmith#define I2O_SCSI_PORT_PARITY_ENABLED 0x01 25865312Smsmith 25965312Smsmith#define I2O_SCSI_PORT_SCAN_ORDER_FLAG 0x02 26065312Smsmith#define I2O_SCSI_PORT_SCAN_LOW_TO_HIGH 0x00 26165312Smsmith#define I2O_SCSI_PORT_SCAN_HIGH_TO_LOW 0x02 26265312Smsmith 26365312Smsmith#define I2O_SCSI_PORT_IID_FLAG 0x04 26465312Smsmith#define I2O_SCSI_PORT_IID_DEFAULT 0x00 26565312Smsmith#define I2O_SCSI_PORT_IID_SPECIFIED 0x04 26665312Smsmith 26765312Smsmith#define I2O_SCSI_PORT_SCAM_FLAG 0x08 26865312Smsmith#define I2O_SCSI_PORT_SCAM_DISABLED 0x00 26965312Smsmith#define I2O_SCSI_PORT_SCAM_ENABLED 0x08 27065312Smsmith 27165312Smsmith#define I2O_SCSI_PORT_TYPE_FLAG 0x80 27265312Smsmith#define I2O_SCSI_PORT_TYPE_PARALLEL 0x00 27365312Smsmith#define I2O_SCSI_PORT_TYPE_SERIAL 0x80 27465312Smsmith 27565312Smsmithtypedef struct _I2O_HBA_SCSI_CONTROLLER_INFO_SCALAR { 27665312Smsmith U8 SCSIType; 27765312Smsmith U8 ProtectionManagement; 27865312Smsmith U8 Settings; 27965312Smsmith U8 Reserved1; 28065312Smsmith U32 InitiatorID; 28165312Smsmith U64 ScanLun0Only; 28265312Smsmith U16 DisableDevice; 28365312Smsmith U8 MaxOffset; 28465312Smsmith U8 MaxDataWidth; 28565312Smsmith U64 MaxSyncRate; 28665312Smsmith} I2O_HBA_SCSI_CONTROLLER_INFO_SCALAR, *PI2O_HBA_SCSI_CONTROLLER_INFO_SCALAR; 28765312Smsmith 28865312Smsmith 28965312Smsmith/* - 0201h - HBA SCSI Bus Port Information Parameter Group */ 29065312Smsmith 29165312Smsmith/* NOTE: Refer to the SCSI Peripheral Class Bus Port Information Parameter 29265312Smsmith Group field definitions for HBA SCSI Bus Port field definitions. 29365312Smsmith */ 29465312Smsmith 29565312Smsmithtypedef struct _I2O_HBA_SCSI_BUS_PORT_INFO_SCALAR { 29665312Smsmith U8 PhysicalInterface; 29765312Smsmith U8 ElectricalInterface; 29865312Smsmith U8 Isochronous; 29965312Smsmith U8 ConnectorType; 30065312Smsmith U8 ConnectorGender; 30165312Smsmith U8 Reserved1; 30265312Smsmith U16 Reserved2; 30365312Smsmith U32 MaxNumberDevices; 30465312Smsmith U32 DeviceIdBegin; 30565312Smsmith U32 DeviceIdEnd; 30665312Smsmith U8 LunBegin[8]; 30765312Smsmith U8 LunEnd[8]; 30865312Smsmith} I2O_HBA_SCSI_BUS_PORT_INFO_SCALAR, *PI2O_HBA_SCSI_BUS_PORT_INFO_SCALAR; 30965312Smsmith 31065312Smsmith 31165312Smsmith/* - 0300h - HBA FCA Controller Information Parameters Group defines */ 31265312Smsmith 31365312Smsmith/* SCSI Type */ 31465312Smsmith 31565312Smsmith#define I2O_FCA_TYPE_UNKNOWN 0x00 31665312Smsmith#define I2O_FCA_TYPE_FCAL 0x01 31765312Smsmith 31865312Smsmithtypedef struct _I2O_HBA_FCA_CONTROLLER_INFO_SCALAR { 31965312Smsmith U8 FcaType; 32065312Smsmith U8 Reserved1; 32165312Smsmith U16 Reserved2; 32265312Smsmith} I2O_HBA_FCA_CONTROLLER_INFO_SCALAR, *PI2O_HBA_FCA_CONTROLLER_INFO_SCALAR; 32365312Smsmith 32465312Smsmith 32565312Smsmith/* - 0301h - HBA FCA Port Information Parameters Group defines */ 32665312Smsmith 32765312Smsmithtypedef struct _I2O_HBA_FCA_PORT_INFO_SCALAR { 32865312Smsmith U32 Reserved4; 32965312Smsmith} I2O_HBA_FCA_PORT_INFO_SCALAR, *PI2O_HBA_FCA_PORT_INFO_SCALAR; 33065312Smsmith 33165312Smsmith 33265312Smsmith/****************************************************************************/ 33365312Smsmith 33465312Smsmith/* I2O Bus Adapter Class Specific Message Definitions */ 33565312Smsmith 33665312Smsmith/****************************************************************************/ 33765312Smsmith 33865312Smsmith 33965312Smsmith/****************************************************************************/ 34065312Smsmith 34165312Smsmith/* I2O Bus Adapter Class Reply Message Frame */ 34265312Smsmith 34365312Smsmithtypedef struct _I2O_HBA_REPLY_MESSAGE_FRAME { 34465312Smsmith I2O_SINGLE_REPLY_MESSAGE_FRAME StdReplyFrame; 34565312Smsmith} I2O_HBA_REPLY_MESSAGE_FRAME, *PI2O_HBA_REPLY_MESSAGE_FRAME; 34665312Smsmith 34765312Smsmith 34865312Smsmith/****************************************************************************/ 34965312Smsmith 35065312Smsmith/* I2O HBA Adapter Reset Message Frame */ 35165312Smsmith 35265312Smsmithtypedef struct _I2O_HBA_ADAPTER_RESET_MESSAGE { 35365312Smsmith I2O_MESSAGE_FRAME StdMessageFrame; 35465312Smsmith I2O_TRANSACTION_CONTEXT TransactionContext; 35565312Smsmith} I2O_HBA_ADAPTER_RESET_MESSAGE, *PI2O_HBA_ADAPTER_RESET_MESSAGE; 35665312Smsmith 35765312Smsmith 35865312Smsmith/****************************************************************************/ 35965312Smsmith 36065312Smsmith/* I2O HBA Bus Quiesce Message Frame */ 36165312Smsmith 36265312Smsmithtypedef U32 I2O_HBQ_FLAGS; 36365312Smsmith 36465312Smsmith#define I2O_HBQ_FLAG_NORMAL 0x0000 36565312Smsmith#define I2O_HBQ_FLAG_QUIESCE 0x0001 36665312Smsmith 36765312Smsmithtypedef struct _I2O_HBA_BUS_QUIESCE_MESSAGE { 36865312Smsmith I2O_MESSAGE_FRAME StdMessageFrame; 36965312Smsmith I2O_TRANSACTION_CONTEXT TransactionContext; 37065312Smsmith I2O_HBQ_FLAGS Flags; 37165312Smsmith} I2O_HBA_BUS_QUIESCE_MESSAGE, *PI2O_HBA_BUS_QUIESCE_MESSAGE; 37265312Smsmith 37365312Smsmith 37465312Smsmith/****************************************************************************/ 37565312Smsmith 37665312Smsmith/* I2O HBA Bus Reset Message Frame */ 37765312Smsmith 37865312Smsmithtypedef struct _I2O_HBA_BUS_RESET_MESSAGE { 37965312Smsmith I2O_MESSAGE_FRAME StdMessageFrame; 38065312Smsmith I2O_TRANSACTION_CONTEXT TransactionContext; 38165312Smsmith} I2O_HBA_BUS_RESET_MESSAGE, *PI2O_HBA_BUS_RESET_MESSAGE; 38265312Smsmith 38365312Smsmith 38465312Smsmith/****************************************************************************/ 38565312Smsmith 38665312Smsmith/* I2O HBA Bus Scan Message Frame */ 38765312Smsmith 38865312Smsmith/* NOTE: SCSI-2 8-bit scalar LUN goes into offset 1 of Lun arrays */ 38965312Smsmith 39065312Smsmithtypedef struct _I2O_HBA_BUS_SCAN_MESSAGE { 39165312Smsmith I2O_MESSAGE_FRAME StdMessageFrame; 39265312Smsmith I2O_TRANSACTION_CONTEXT TransactionContext; 39365312Smsmith} I2O_HBA_BUS_SCAN_MESSAGE, *PI2O_HBA_BUS_SCAN_MESSAGE; 39465312Smsmith 39565312Smsmith 39665312SmsmithPRAGMA_PACK_POP 39765312Smsmith 39865312SmsmithPRAGMA_ALIGN_POP 39965312Smsmith 40065312Smsmith#endif /* I2O_ADPTR_HDR */ 40165312Smsmith 40265312Smsmith 403