1/*- 2 ***************************************************************** 3 * Copyright (c) 1996-2000 Distributed Processing Technology Corporation 4 * Copyright (c) 2000 Adaptec Corporation. 5 * All rights reserved. 6 * 7 * $FreeBSD$ 8 * 9 ****************************************************************/ 10 11#if !defined(I2O_DPT_HDR) 12#define I2O_DPT_HDR 13 14#define DPT_ORGANIZATION_ID 0x1B /* For Private Messages */ 15 16/* 17 * PrivateMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE 18 * PrivateMessageFrame.XFunctionCode = I2O_SCSI_SCB_EXEC 19 */ 20 21typedef struct _PRIVATE_SCSI_SCB_EXECUTE_MESSAGE { 22 I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame; 23# if (defined(sparc) || defined(_DPT_BIG_ENDIAN)) 24 U32 TID; /* Upper four bits currently are zero */ 25# else 26 BF TID:16; /* Upper four bits currently are zero */ 27 /* Command is interpreted by the host */ 28 BF Interpret:1; 29 /* if TRUE, deal with Physical Firmware Array information */ 30 BF Physical:1; 31 BF Reserved1:14; 32# endif 33 U8 CDBLength; 34 U8 Reserved; 35 I2O_SCB_FLAGS SCBFlags; 36 U8 CDB[ I2O_SCSI_CDB_LENGTH ]; 37 U32 ByteCount; 38 I2O_SG_ELEMENT SGL; 39} PRIVATE_SCSI_SCB_EXECUTE_MESSAGE, * PPRIVATE_SCSI_SCB_EXECUTE_MESSAGE; 40 41/* 42 * Flash access and programming messages 43 * PrivateMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE 44 * PrivateMessageFrame.XFunctionCode = PRIVATE_FLAGS_REGION_* 45 * 46 * SIZE returns the total size of a region of flash 47 * READ copies a region (or portion thereof) into the buffer specified 48 * by the SGL 49 * WRITE writes a region (or portion thereof) using the data specified 50 * by the SGL 51 * 52 * Flash regions 53 * 54 * 0 operational-mode firmware 55 * 1 software (bios/utility) 56 * 2 oem nvram defaults 57 * 3 hba serial number 58 * 4 boot-mode firmware 59 * 60 * Any combination of RegionOffset and ByteCount can be specified providing 61 * they fit within the size of the specified region. 62 * 63 * Flash messages should be targeted to the Executive TID 0x000 64 */ 65 66#define PRIVATE_FLASH_REGION_SIZE 0x0100 67#define PRIVATE_FLASH_REGION_READ 0x0101 68#define PRIVATE_FLASH_REGION_WRITE 0x0102 69#define PRIVATE_FLASH_REGION_CRC 0x0103 70 71typedef struct _PRIVATE_FLASH_REGION_MESSAGE { 72 I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame; 73 U32 FlashRegion; 74 U32 RegionOffset; 75 U32 ByteCount; 76 I2O_SG_ELEMENT SGL; 77} PRIVATE_FLASH_REGION_MESSAGE, * PPRIVATE_FLASH_REGION_MESSAGE; 78 79/* DPT Driver Printf message */ 80 81#define PRIVATE_DRIVER_PRINTF 0x0200 82 83/* FwPrintFlags */ 84#define FW_FIRMWARE_FLAGS_NO_HEADER_B 0x00000001 /* Remove date header */ 85 86typedef struct _PRIVATE_DRIVER_PRINTF_MESSAGE { 87 88 I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame; 89 90 /* total bytes in PrintBuffer, including header */ 91 U32 PrintBufferByteCount; 92 /* exact data to be copied into the serial PrintBuffer */ 93 U8 PrintBuffer[1]; 94 95} PRIVATE_DRIVER_PRINTF_MESSAGE, * PPRIVATE_DRIVER_PRINTF_MESSAGE; 96 97/* DPT Enable Diagnostics message 0x0201 */ 98 99#define PRIVATE_DIAG_ENABLE 0x0201 100 101typedef struct _PRIVATE_DIAG_ENABLE_MESSAGE { 102 I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame; 103} PRIVATE_DIAG_MESSAGE_FRAME, * PPRIVATE_DIAG_MESSAGE_FRAME; 104 105/* DPT Driver Get/Put message */ 106 107#define PRIVATE_DRIVER_GET 0x300 108#define PRIVATE_DRIVER_PUT 0x301 109 110typedef struct _PRIVATE_DRIVER_GETPUT_MESSAGE 111{ 112 I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame; 113 U32 Offset; 114 U32 ByteCount; 115 I2O_SG_ELEMENT SGL; 116} PRIVATE_DRIVER_GETPUT_MESSAGE, * PPRIVATE_DRIVER_GETPUT_MESSAGE; 117 118/****************************************************************************/ 119 120/* DPT Peripheral Device Parameter Groups */ 121 122/****************************************************************************/ 123 124/* DPT Configuration and Operating Structures and Defines */ 125 126#define I2O_DPT_DEVICE_INFO_GROUP_NO 0x8000 127 128/* - 8000h - DPT Device Information Parameters Group defines */ 129 130/* Device Type */ 131 132#define I2O_DPT_DEVICE_TYPE_DIRECT I2O_SCSI_DEVICE_TYPE_DIRECT 133#define I2O_DPT_DEVICE_TYPE_SEQUENTIAL I2O_SCSI_DEVICE_TYPE_SEQUENTIAL 134#define I2O_DPT_DEVICE_TYPE_PRINTER I2O_SCSI_DEVICE_TYPE_PRINTER 135#define I2O_DPT_DEVICE_TYPE_PROCESSOR I2O_SCSI_DEVICE_TYPE_PROCESSOR 136#define I2O_DPT_DEVICE_TYPE_WORM I2O_SCSI_DEVICE_TYPE_WORM 137#define I2O_DPT_DEVICE_TYPE_CDROM I2O_SCSI_DEVICE_TYPE_CDROM 138#define I2O_DPT_DEVICE_TYPE_SCANNER I2O_SCSI_DEVICE_TYPE_SCANNER 139#define I2O_DPT_DEVICE_TYPE_OPTICAL I2O_SCSI_DEVICE_TYPE_OPTICAL 140#define I2O_DPT_DEVICE_TYPE_MEDIA_CHANGER I2O_SCSI_DEVICE_TYPE_MEDIA_CHANGER 141#define I2O_DPT_DEVICE_TYPE_COMM I2O_SCSI_DEVICE_TYPE_COMM 142#define I2O_DPT_DEVICE_GRAPHICS_1 I2O_SCSI_DEVICE_GRAPHICS_1 143#define I2O_DPT_DEVICE_GRAPHICS_2 I2O_SCSI_DEVICE_GRAPHICS_2 144#define I2O_DPT_DEVICE_TYPE_ARRAY_CONT I2O_SCSI_DEVICE_TYPE_ARRAY_CONT 145#define I2O_DPT_DEVICE_TYPE_UNKNOWN I2O_SCSI_DEVICE_TYPE_UNKNOWN 146 147/* Flags */ 148 149#define I2O_DPT_PERIPHERAL_TYPE_FLAG I2O_SCSI_PERIPHERAL_TYPE_FLAG 150#define I2O_DPT_PERIPHERAL_TYPE_PARALLEL I2O_SCSI_PERIPHERAL_TYPE_PARALLEL 151#define I2O_DPT_PERIPHERAL_TYPE_SERIAL I2O_SCSI_PERIPHERAL_TYPE_SERIAL 152 153#define I2O_DPT_RESERVED_FLAG I2O_SCSI_RESERVED_FLAG 154 155#define I2O_DPT_DISCONNECT_FLAG I2O_SCSI_DISCONNECT_FLAG 156#define I2O_DPT_DISABLE_DISCONNECT I2O_SCSI_DISABLE_DISCONNECT 157#define I2O_DPT_ENABLE_DISCONNECT I2O_SCSI_ENABLE_DISCONNECT 158 159#define I2O_DPT_MODE_MASK I2O_SCSI_MODE_MASK 160#define I2O_DPT_MODE_SET_DATA I2O_SCSI_MODE_SET_DATA 161#define I2O_DPT_MODE_SET_DEFAULT I2O_SCSI_MODE_SET_DEFAULT 162#define I2O_DPT_MODE_SET_SAFEST I2O_SCSI_MODE_SET_SAFEST 163 164#define I2O_DPT_DATA_WIDTH_MASK I2O_SCSI_DATA_WIDTH_MASK 165#define I2O_DPT_DATA_WIDTH_8 I2O_SCSI_DATA_WIDTH_8 166#define I2O_DPT_DATA_WIDTH_16 I2O_SCSI_DATA_WIDTH_16 167#define I2O_DPT_DATA_WIDTH_32 I2O_SCSI_DATA_WIDTH_32 168 169#define I2O_DPT_SYNC_NEGOTIATION_FLAG I2O_SCSI_SYNC_NEGOTIATION_FLAG 170#define I2O_DPT_DISABLE_SYNC_NEGOTIATION I2O_SCSI_DISABLE_SYNC_NEGOTIATION 171#define I2O_DPT_ENABLE_SYNC_NEGOTIATION I2O_SCSI_ENABLE_SYNC_NEGOTIATION 172 173/* DPT Device Group 8000h - Device Information Parameter Group */ 174 175typedef struct _I2O_DPT_DEVICE_INFO_SCALAR { 176 U8 DeviceType; /* Identical to I2O_SCSI_DEVICE_INFO SCALAR */ 177 U8 Flags; /* Identical to I2O_SCSI_DEVICE_INFO SCALAR */ 178 U16 Bus; 179 U32 Identifier; 180 U8 LunInfo[8]; /* SCSI-2 8-bit scalar LUN goes into offset 1 */ 181 182} I2O_DPT_DEVICE_INFO_SCALAR, *PI2O_DPT_DEVICE_INFO_SCALAR; 183 184#define I2O_DPT_EXEC_IOP_BUFFERS_GROUP_NO 0x8000 185 186/* DPT Exec Iop Buffers Group 8000h */ 187 188typedef struct _I2O_DPT_EXEC_IOP_BUFFERS_SCALAR { 189 U32 SerialOutputOffset; /* offset from base address to header */ 190 U32 SerialOutputSize; /* size of data buffer in bytes */ 191 U32 SerialHeaderSize; /* size of data buffer header in bytes */ 192 U32 SerialFlagsSupported; /* Mask of debug flags supported */ 193 194} I2O_DPT_EXEC_IOP_BUFFERS_SCALAR, *PI2O_DPT_EXEC_IOP_BUFFERS_SCALAR; 195 196 197#endif /* I2O_DPT_HDR */ 198