| Erich Chen | 1c57e86 | 2006-07-12 08:59:32 -0700 | [diff] [blame] | 1 | ******************************************************************************* | 
 | 2 | **                            ARECA FIRMWARE SPEC | 
 | 3 | ******************************************************************************* | 
 | 4 | **	Usage of IOP331 adapter | 
 | 5 | **	(All In/Out is in IOP331's view) | 
| Gabriel Craciunescu | e9534b3 | 2007-10-20 02:13:26 +0200 | [diff] [blame] | 6 | **	1. Message 0 --> InitThread message and return code | 
| Erich Chen | 1c57e86 | 2006-07-12 08:59:32 -0700 | [diff] [blame] | 7 | **	2. Doorbell is used for RS-232 emulation | 
 | 8 | **		inDoorBell :    bit0 -- data in ready | 
 | 9 | **			(DRIVER DATA WRITE OK) | 
 | 10 | **				bit1 -- data out has been read | 
 | 11 | **			(DRIVER DATA READ OK) | 
 | 12 | **		outDooeBell:    bit0 -- data out ready | 
 | 13 | **			(IOP331 DATA WRITE OK) | 
 | 14 | **				bit1 -- data in has been read | 
 | 15 | **			(IOP331 DATA READ OK) | 
 | 16 | **	3. Index Memory Usage | 
 | 17 | **	offset 0xf00 : for RS232 out (request buffer) | 
 | 18 | **	offset 0xe00 : for RS232 in  (scratch buffer) | 
 | 19 | **	offset 0xa00 : for inbound message code message_rwbuffer | 
 | 20 | **			(driver send to IOP331) | 
 | 21 | **	offset 0xa00 : for outbound message code message_rwbuffer | 
 | 22 | **			(IOP331 send to driver) | 
 | 23 | **	4. RS-232 emulation | 
 | 24 | **		Currently 128 byte buffer is used | 
 | 25 | **			1st uint32_t : Data length (1--124) | 
 | 26 | **			Byte 4--127  : Max 124 bytes of data | 
 | 27 | **	5. PostQ | 
 | 28 | **	All SCSI Command must be sent through postQ: | 
 | 29 | **	(inbound queue port)	Request frame must be 32 bytes aligned | 
 | 30 | **	#bit27--bit31 => flag for post ccb | 
 | 31 | **	#bit0--bit26  => real address (bit27--bit31) of post arcmsr_cdb | 
 | 32 | **		bit31 : | 
 | 33 | **			0 : 256 bytes frame | 
 | 34 | **			1 : 512 bytes frame | 
 | 35 | **		bit30 : | 
 | 36 | **			0 : normal request | 
 | 37 | **			1 : BIOS request | 
 | 38 | **		bit29 : reserved | 
 | 39 | **		bit28 : reserved | 
 | 40 | **		bit27 : reserved | 
 | 41 | **  --------------------------------------------------------------------------- | 
 | 42 | **	(outbount queue port)	Request reply | 
 | 43 | **	#bit27--bit31 | 
 | 44 | **		=> flag for reply | 
 | 45 | **	#bit0--bit26 | 
 | 46 | **		=> real address (bit27--bit31) of reply arcmsr_cdb | 
 | 47 | **			bit31 : must be 0 (for this type of reply) | 
 | 48 | **			bit30 : reserved for BIOS handshake | 
 | 49 | **			bit29 : reserved | 
 | 50 | **			bit28 : | 
 | 51 | **			0 : no error, ignore AdapStatus/DevStatus/SenseData | 
 | 52 | **			1 : Error, error code in AdapStatus/DevStatus/SenseData | 
 | 53 | **			bit27 : reserved | 
 | 54 | **	6. BIOS request | 
 | 55 | **		All BIOS request is the same with request from PostQ | 
 | 56 | **		Except : | 
 | 57 | **			Request frame is sent from configuration space | 
 | 58 | **		offset: 0x78 : Request Frame (bit30 == 1) | 
 | 59 | **		offset: 0x18 : writeonly to generate | 
 | 60 | **					IRQ to IOP331 | 
 | 61 | **		Completion of request: | 
 | 62 | **			(bit30 == 0, bit28==err flag) | 
 | 63 | **	7. Definition of SGL entry (structure) | 
 | 64 | **	8. Message1 Out - Diag Status Code (????) | 
 | 65 | **	9. Message0 message code : | 
 | 66 | **		0x00 : NOP | 
 | 67 | **		0x01 : Get Config | 
 | 68 | **		->offset 0xa00 :for outbound message code message_rwbuffer | 
 | 69 | **		(IOP331 send to driver) | 
 | 70 | **		Signature             0x87974060(4) | 
 | 71 | **		Request len           0x00000200(4) | 
 | 72 | **		numbers of queue      0x00000100(4) | 
 | 73 | **		SDRAM Size            0x00000100(4)-->256 MB | 
 | 74 | **		IDE Channels          0x00000008(4) | 
 | 75 | **		vendor                40 bytes char | 
 | 76 | **		model                  8 bytes char | 
 | 77 | **		FirmVer               16 bytes char | 
 | 78 | **		Device Map            16 bytes char | 
 | 79 | **		FirmwareVersion DWORD <== Added for checking of | 
 | 80 | **						new firmware capability | 
 | 81 | **		0x02 : Set Config | 
 | 82 | **		->offset 0xa00 :for inbound message code message_rwbuffer | 
 | 83 | **		(driver send to IOP331) | 
 | 84 | **		Signature             0x87974063(4) | 
 | 85 | **		UPPER32 of Request Frame  (4)-->Driver Only | 
 | 86 | **		0x03 : Reset (Abort all queued Command) | 
 | 87 | **		0x04 : Stop Background Activity | 
 | 88 | **		0x05 : Flush Cache | 
 | 89 | **		0x06 : Start Background Activity | 
 | 90 | **			(re-start if background is halted) | 
 | 91 | **		0x07 : Check If Host Command Pending | 
 | 92 | **			(Novell May Need This Function) | 
 | 93 | **		0x08 : Set controller time | 
 | 94 | **		->offset 0xa00 : for inbound message code message_rwbuffer | 
 | 95 | **		(driver to IOP331) | 
 | 96 | **		byte 0 : 0xaa <-- signature | 
 | 97 | **		byte 1 : 0x55 <-- signature | 
 | 98 | **		byte 2 : year (04) | 
 | 99 | **		byte 3 : month (1..12) | 
 | 100 | **		byte 4 : date (1..31) | 
 | 101 | **		byte 5 : hour (0..23) | 
 | 102 | **		byte 6 : minute (0..59) | 
 | 103 | **		byte 7 : second (0..59) | 
 | 104 | ******************************************************************************* | 
 | 105 | ******************************************************************************* | 
 | 106 | **      	RS-232 Interface for Areca Raid Controller | 
 | 107 | **      The low level command interface is exclusive with VT100 terminal | 
 | 108 | **  -------------------------------------------------------------------- | 
 | 109 | **      1. Sequence of command execution | 
 | 110 | **  -------------------------------------------------------------------- | 
 | 111 | **    	(A) Header : 3 bytes sequence (0x5E, 0x01, 0x61) | 
 | 112 | **    	(B) Command block : variable length of data including length, | 
 | 113 | **    		command code, data and checksum byte | 
 | 114 | **    	(C) Return data : variable length of data | 
 | 115 | **  -------------------------------------------------------------------- | 
 | 116 | **    2. Command block | 
 | 117 | **  -------------------------------------------------------------------- | 
 | 118 | **    	(A) 1st byte : command block length (low byte) | 
 | 119 | **    	(B) 2nd byte : command block length (high byte) | 
 | 120 | **                note ..command block length shouldn't > 2040 bytes, | 
 | 121 | **    		length excludes these two bytes | 
 | 122 | **    	(C) 3rd byte : command code | 
 | 123 | **    	(D) 4th and following bytes : variable length data bytes | 
 | 124 | **    		depends on command code | 
 | 125 | **    	(E) last byte : checksum byte (sum of 1st byte until last data byte) | 
 | 126 | **  -------------------------------------------------------------------- | 
 | 127 | **    3. Command code and associated data | 
 | 128 | **  -------------------------------------------------------------------- | 
 | 129 | **    	The following are command code defined in raid controller Command | 
 | 130 | **    	code 0x10--0x1? are used for system level management, | 
 | 131 | **    	no password checking is needed and should be implemented in separate | 
 | 132 | **    	well controlled utility and not for end user access. | 
 | 133 | **    	Command code 0x20--0x?? always check the password, | 
 | 134 | **    	password must be entered to enable these command. | 
 | 135 | **    	enum | 
 | 136 | **    	{ | 
 | 137 | **    		GUI_SET_SERIAL=0x10, | 
 | 138 | **    		GUI_SET_VENDOR, | 
 | 139 | **    		GUI_SET_MODEL, | 
 | 140 | **    		GUI_IDENTIFY, | 
 | 141 | **    		GUI_CHECK_PASSWORD, | 
 | 142 | **    		GUI_LOGOUT, | 
 | 143 | **    		GUI_HTTP, | 
 | 144 | **    		GUI_SET_ETHERNET_ADDR, | 
 | 145 | **    		GUI_SET_LOGO, | 
 | 146 | **    		GUI_POLL_EVENT, | 
 | 147 | **    		GUI_GET_EVENT, | 
 | 148 | **    		GUI_GET_HW_MONITOR, | 
 | 149 | **    		//    GUI_QUICK_CREATE=0x20, (function removed) | 
 | 150 | **    		GUI_GET_INFO_R=0x20, | 
 | 151 | **    		GUI_GET_INFO_V, | 
 | 152 | **    		GUI_GET_INFO_P, | 
 | 153 | **    		GUI_GET_INFO_S, | 
 | 154 | **    		GUI_CLEAR_EVENT, | 
 | 155 | **    		GUI_MUTE_BEEPER=0x30, | 
 | 156 | **    		GUI_BEEPER_SETTING, | 
 | 157 | **    		GUI_SET_PASSWORD, | 
 | 158 | **    		GUI_HOST_INTERFACE_MODE, | 
 | 159 | **    		GUI_REBUILD_PRIORITY, | 
 | 160 | **    		GUI_MAX_ATA_MODE, | 
 | 161 | **    		GUI_RESET_CONTROLLER, | 
 | 162 | **    		GUI_COM_PORT_SETTING, | 
 | 163 | **    		GUI_NO_OPERATION, | 
 | 164 | **    		GUI_DHCP_IP, | 
 | 165 | **    		GUI_CREATE_PASS_THROUGH=0x40, | 
 | 166 | **    		GUI_MODIFY_PASS_THROUGH, | 
 | 167 | **    		GUI_DELETE_PASS_THROUGH, | 
 | 168 | **    		GUI_IDENTIFY_DEVICE, | 
 | 169 | **    		GUI_CREATE_RAIDSET=0x50, | 
 | 170 | **    		GUI_DELETE_RAIDSET, | 
 | 171 | **    		GUI_EXPAND_RAIDSET, | 
 | 172 | **    		GUI_ACTIVATE_RAIDSET, | 
 | 173 | **    		GUI_CREATE_HOT_SPARE, | 
 | 174 | **    		GUI_DELETE_HOT_SPARE, | 
 | 175 | **    		GUI_CREATE_VOLUME=0x60, | 
 | 176 | **    		GUI_MODIFY_VOLUME, | 
 | 177 | **    		GUI_DELETE_VOLUME, | 
 | 178 | **    		GUI_START_CHECK_VOLUME, | 
 | 179 | **    		GUI_STOP_CHECK_VOLUME | 
 | 180 | **    	}; | 
 | 181 | **    Command description : | 
 | 182 | **    	GUI_SET_SERIAL : Set the controller serial# | 
 | 183 | **    		byte 0,1        : length | 
 | 184 | **    		byte 2          : command code 0x10 | 
 | 185 | **    		byte 3          : password length (should be 0x0f) | 
 | 186 | **    		byte 4-0x13     : should be "ArEcATecHnoLogY" | 
 | 187 | **    		byte 0x14--0x23 : Serial number string (must be 16 bytes) | 
 | 188 | **      GUI_SET_VENDOR : Set vendor string for the controller | 
 | 189 | **    		byte 0,1        : length | 
 | 190 | **    		byte 2          : command code 0x11 | 
 | 191 | **    		byte 3          : password length (should be 0x08) | 
 | 192 | **    		byte 4-0x13     : should be "ArEcAvAr" | 
 | 193 | **    		byte 0x14--0x3B : vendor string (must be 40 bytes) | 
 | 194 | **      GUI_SET_MODEL : Set the model name of the controller | 
 | 195 | **    		byte 0,1        : length | 
 | 196 | **    		byte 2          : command code 0x12 | 
 | 197 | **    		byte 3          : password length (should be 0x08) | 
 | 198 | **    		byte 4-0x13     : should be "ArEcAvAr" | 
 | 199 | **    		byte 0x14--0x1B : model string (must be 8 bytes) | 
 | 200 | **      GUI_IDENTIFY : Identify device | 
 | 201 | **    		byte 0,1        : length | 
 | 202 | **    		byte 2          : command code 0x13 | 
 | 203 | **    		                  return "Areca RAID Subsystem " | 
 | 204 | **      GUI_CHECK_PASSWORD : Verify password | 
 | 205 | **    		byte 0,1        : length | 
 | 206 | **    		byte 2          : command code 0x14 | 
 | 207 | **    		byte 3          : password length | 
 | 208 | **    		byte 4-0x??     : user password to be checked | 
 | 209 | **      GUI_LOGOUT : Logout GUI (force password checking on next command) | 
 | 210 | **    		byte 0,1        : length | 
 | 211 | **    		byte 2          : command code 0x15 | 
 | 212 | **      GUI_HTTP : HTTP interface (reserved for Http proxy service)(0x16) | 
 | 213 | ** | 
 | 214 | **      GUI_SET_ETHERNET_ADDR : Set the ethernet MAC address | 
 | 215 | **    		byte 0,1        : length | 
 | 216 | **    		byte 2          : command code 0x17 | 
 | 217 | **    		byte 3          : password length (should be 0x08) | 
 | 218 | **    		byte 4-0x13     : should be "ArEcAvAr" | 
 | 219 | **    		byte 0x14--0x19 : Ethernet MAC address (must be 6 bytes) | 
 | 220 | **      GUI_SET_LOGO : Set logo in HTTP | 
 | 221 | **    		byte 0,1        : length | 
 | 222 | **    		byte 2          : command code 0x18 | 
 | 223 | **    		byte 3          : Page# (0/1/2/3) (0xff --> clear OEM logo) | 
 | 224 | **    		byte 4/5/6/7    : 0x55/0xaa/0xa5/0x5a | 
 | 225 | **    		byte 8          : TITLE.JPG data (each page must be 2000 bytes) | 
 | 226 | **    		                  note page0 1st 2 byte must be | 
 | 227 | **    					actual length of the JPG file | 
 | 228 | **      GUI_POLL_EVENT : Poll If Event Log Changed | 
 | 229 | **    		byte 0,1        : length | 
 | 230 | **    		byte 2          : command code 0x19 | 
 | 231 | **      GUI_GET_EVENT : Read Event | 
 | 232 | **    		byte 0,1        : length | 
 | 233 | **    		byte 2          : command code 0x1a | 
 | 234 | **    		byte 3          : Event Page (0:1st page/1/2/3:last page) | 
 | 235 | **      GUI_GET_HW_MONITOR : Get HW monitor data | 
 | 236 | **    		byte 0,1        : length | 
 | 237 | **    		byte 2 			: command code 0x1b | 
 | 238 | **    		byte 3 			: # of FANs(example 2) | 
 | 239 | **    		byte 4 			: # of Voltage sensor(example 3) | 
 | 240 | **    		byte 5 			: # of temperature sensor(example 2) | 
 | 241 | **    		byte 6 			: # of power | 
 | 242 | **    		byte 7/8        : Fan#0 (RPM) | 
 | 243 | **    		byte 9/10       : Fan#1 | 
 | 244 | **    		byte 11/12 		: Voltage#0 original value in *1000 | 
 | 245 | **    		byte 13/14 		: Voltage#0 value | 
 | 246 | **    		byte 15/16 		: Voltage#1 org | 
 | 247 | **    		byte 17/18 		: Voltage#1 | 
 | 248 | **    		byte 19/20 		: Voltage#2 org | 
 | 249 | **    		byte 21/22 		: Voltage#2 | 
 | 250 | **    		byte 23 		: Temp#0 | 
 | 251 | **    		byte 24 		: Temp#1 | 
 | 252 | **    		byte 25 		: Power indicator (bit0 : power#0, | 
 | 253 | **    						 bit1 : power#1) | 
 | 254 | **    		byte 26 		: UPS indicator | 
 | 255 | **      GUI_QUICK_CREATE : Quick create raid/volume set | 
 | 256 | **    	    byte 0,1        : length | 
 | 257 | **    	    byte 2          : command code 0x20 | 
 | 258 | **    	    byte 3/4/5/6    : raw capacity | 
 | 259 | **    	    byte 7 			: raid level | 
 | 260 | **    	    byte 8 			: stripe size | 
 | 261 | **    	    byte 9 			: spare | 
 | 262 | **    	    byte 10/11/12/13: device mask (the devices to create raid/volume) | 
 | 263 | **    		This function is removed, application like | 
 | 264 | **    		to implement quick create function | 
 | 265 | **    	need to use GUI_CREATE_RAIDSET and GUI_CREATE_VOLUMESET function. | 
 | 266 | **      GUI_GET_INFO_R : Get Raid Set Information | 
 | 267 | **    		byte 0,1        : length | 
 | 268 | **    		byte 2          : command code 0x20 | 
 | 269 | **    		byte 3          : raidset# | 
 | 270 | **    	typedef struct sGUI_RAIDSET | 
 | 271 | **    	{ | 
 | 272 | **    		BYTE grsRaidSetName[16]; | 
 | 273 | **    		DWORD grsCapacity; | 
 | 274 | **    		DWORD grsCapacityX; | 
 | 275 | **    		DWORD grsFailMask; | 
 | 276 | **    		BYTE grsDevArray[32]; | 
 | 277 | **    		BYTE grsMemberDevices; | 
 | 278 | **    		BYTE grsNewMemberDevices; | 
 | 279 | **    		BYTE grsRaidState; | 
 | 280 | **    		BYTE grsVolumes; | 
 | 281 | **    		BYTE grsVolumeList[16]; | 
 | 282 | **    		BYTE grsRes1; | 
 | 283 | **    		BYTE grsRes2; | 
 | 284 | **    		BYTE grsRes3; | 
 | 285 | **    		BYTE grsFreeSegments; | 
 | 286 | **    		DWORD grsRawStripes[8]; | 
 | 287 | **    		DWORD grsRes4; | 
 | 288 | **    		DWORD grsRes5; //     Total to 128 bytes | 
 | 289 | **    		DWORD grsRes6; //     Total to 128 bytes | 
 | 290 | **    	} sGUI_RAIDSET, *pGUI_RAIDSET; | 
 | 291 | **      GUI_GET_INFO_V : Get Volume Set Information | 
 | 292 | **    		byte 0,1        : length | 
 | 293 | **    		byte 2          : command code 0x21 | 
 | 294 | **    		byte 3          : volumeset# | 
 | 295 | **    	typedef struct sGUI_VOLUMESET | 
 | 296 | **    	{ | 
 | 297 | **    		BYTE gvsVolumeName[16]; //     16 | 
 | 298 | **    		DWORD gvsCapacity; | 
 | 299 | **    		DWORD gvsCapacityX; | 
 | 300 | **    		DWORD gvsFailMask; | 
 | 301 | **    		DWORD gvsStripeSize; | 
 | 302 | **    		DWORD gvsNewFailMask; | 
 | 303 | **    		DWORD gvsNewStripeSize; | 
 | 304 | **    		DWORD gvsVolumeStatus; | 
 | 305 | **    		DWORD gvsProgress; //     32 | 
 | 306 | **    		sSCSI_ATTR gvsScsi; | 
 | 307 | **    		BYTE gvsMemberDisks; | 
 | 308 | **    		BYTE gvsRaidLevel; //     8 | 
 | 309 | **    		BYTE gvsNewMemberDisks; | 
 | 310 | **    		BYTE gvsNewRaidLevel; | 
 | 311 | **    		BYTE gvsRaidSetNumber; | 
 | 312 | **    		BYTE gvsRes0; //     4 | 
 | 313 | **    		BYTE gvsRes1[4]; //     64 bytes | 
 | 314 | **    	} sGUI_VOLUMESET, *pGUI_VOLUMESET; | 
 | 315 | **      GUI_GET_INFO_P : Get Physical Drive Information | 
 | 316 | **    		byte 0,1        : length | 
 | 317 | **    		byte 2          : command code 0x22 | 
 | 318 | **    		byte 3          : drive # (from 0 to max-channels - 1) | 
 | 319 | **    	typedef struct sGUI_PHY_DRV | 
 | 320 | **    	{ | 
 | 321 | **    		BYTE gpdModelName[40]; | 
 | 322 | **    		BYTE gpdSerialNumber[20]; | 
 | 323 | **    		BYTE gpdFirmRev[8]; | 
 | 324 | **    		DWORD gpdCapacity; | 
 | 325 | **    		DWORD gpdCapacityX; //     Reserved for expansion | 
 | 326 | **    		BYTE gpdDeviceState; | 
 | 327 | **    		BYTE gpdPioMode; | 
 | 328 | **    		BYTE gpdCurrentUdmaMode; | 
 | 329 | **    		BYTE gpdUdmaMode; | 
 | 330 | **    		BYTE gpdDriveSelect; | 
 | 331 | **    		BYTE gpdRaidNumber; //     0xff if not belongs to a raid set | 
 | 332 | **    		sSCSI_ATTR gpdScsi; | 
 | 333 | **    		BYTE gpdReserved[40]; //     Total to 128 bytes | 
 | 334 | **    	} sGUI_PHY_DRV, *pGUI_PHY_DRV; | 
 | 335 | **    	GUI_GET_INFO_S : Get System Information | 
 | 336 | **      	byte 0,1        : length | 
 | 337 | **      	byte 2          : command code 0x23 | 
 | 338 | **    	typedef struct sCOM_ATTR | 
 | 339 | **    	{ | 
 | 340 | **    		BYTE comBaudRate; | 
 | 341 | **    		BYTE comDataBits; | 
 | 342 | **    		BYTE comStopBits; | 
 | 343 | **    		BYTE comParity; | 
 | 344 | **    		BYTE comFlowControl; | 
 | 345 | **    	} sCOM_ATTR, *pCOM_ATTR; | 
 | 346 | **    	typedef struct sSYSTEM_INFO | 
 | 347 | **    	{ | 
 | 348 | **    		BYTE gsiVendorName[40]; | 
 | 349 | **    		BYTE gsiSerialNumber[16]; | 
 | 350 | **    		BYTE gsiFirmVersion[16]; | 
 | 351 | **    		BYTE gsiBootVersion[16]; | 
 | 352 | **    		BYTE gsiMbVersion[16]; | 
 | 353 | **    		BYTE gsiModelName[8]; | 
 | 354 | **    		BYTE gsiLocalIp[4]; | 
 | 355 | **    		BYTE gsiCurrentIp[4]; | 
 | 356 | **    		DWORD gsiTimeTick; | 
 | 357 | **    		DWORD gsiCpuSpeed; | 
 | 358 | **    		DWORD gsiICache; | 
 | 359 | **    		DWORD gsiDCache; | 
 | 360 | **    		DWORD gsiScache; | 
 | 361 | **    		DWORD gsiMemorySize; | 
 | 362 | **    		DWORD gsiMemorySpeed; | 
 | 363 | **    		DWORD gsiEvents; | 
 | 364 | **    		BYTE gsiMacAddress[6]; | 
 | 365 | **    		BYTE gsiDhcp; | 
 | 366 | **    		BYTE gsiBeeper; | 
 | 367 | **    		BYTE gsiChannelUsage; | 
 | 368 | **    		BYTE gsiMaxAtaMode; | 
 | 369 | **    		BYTE gsiSdramEcc; //     1:if ECC enabled | 
 | 370 | **    		BYTE gsiRebuildPriority; | 
 | 371 | **    		sCOM_ATTR gsiComA; //     5 bytes | 
 | 372 | **    		sCOM_ATTR gsiComB; //     5 bytes | 
 | 373 | **    		BYTE gsiIdeChannels; | 
 | 374 | **    		BYTE gsiScsiHostChannels; | 
 | 375 | **    		BYTE gsiIdeHostChannels; | 
 | 376 | **    		BYTE gsiMaxVolumeSet; | 
 | 377 | **    		BYTE gsiMaxRaidSet; | 
 | 378 | **    		BYTE gsiEtherPort; //     1:if ether net port supported | 
 | 379 | **    		BYTE gsiRaid6Engine; //     1:Raid6 engine supported | 
 | 380 | **    		BYTE gsiRes[75]; | 
 | 381 | **    	} sSYSTEM_INFO, *pSYSTEM_INFO; | 
 | 382 | **    	GUI_CLEAR_EVENT : Clear System Event | 
 | 383 | **    		byte 0,1        : length | 
 | 384 | **    		byte 2          : command code 0x24 | 
 | 385 | **      GUI_MUTE_BEEPER : Mute current beeper | 
 | 386 | **    		byte 0,1        : length | 
 | 387 | **    		byte 2          : command code 0x30 | 
 | 388 | **      GUI_BEEPER_SETTING : Disable beeper | 
 | 389 | **    		byte 0,1        : length | 
 | 390 | **    		byte 2          : command code 0x31 | 
 | 391 | **    		byte 3          : 0->disable, 1->enable | 
 | 392 | **      GUI_SET_PASSWORD : Change password | 
 | 393 | **    		byte 0,1        : length | 
 | 394 | **    		byte 2 			: command code 0x32 | 
 | 395 | **    		byte 3 			: pass word length ( must <= 15 ) | 
 | 396 | **    		byte 4 			: password (must be alpha-numerical) | 
 | 397 | **    	GUI_HOST_INTERFACE_MODE : Set host interface mode | 
 | 398 | **    		byte 0,1        : length | 
 | 399 | **    		byte 2 			: command code 0x33 | 
 | 400 | **    		byte 3 			: 0->Independent, 1->cluster | 
 | 401 | **      GUI_REBUILD_PRIORITY : Set rebuild priority | 
 | 402 | **    		byte 0,1        : length | 
 | 403 | **    		byte 2 			: command code 0x34 | 
 | 404 | **    		byte 3 			: 0/1/2/3 (low->high) | 
 | 405 | **      GUI_MAX_ATA_MODE : Set maximum ATA mode to be used | 
 | 406 | **    		byte 0,1        : length | 
 | 407 | **    		byte 2 			: command code 0x35 | 
 | 408 | **    		byte 3 			: 0/1/2/3 (133/100/66/33) | 
 | 409 | **      GUI_RESET_CONTROLLER : Reset Controller | 
 | 410 | **    		byte 0,1        : length | 
 | 411 | **    		byte 2          : command code 0x36 | 
 | 412 | **                            *Response with VT100 screen (discard it) | 
 | 413 | **      GUI_COM_PORT_SETTING : COM port setting | 
 | 414 | **    		byte 0,1        : length | 
 | 415 | **    		byte 2 			: command code 0x37 | 
 | 416 | **    		byte 3 			: 0->COMA (term port), | 
 | 417 | **    					  1->COMB (debug port) | 
 | 418 | **    		byte 4 			: 0/1/2/3/4/5/6/7 | 
 | 419 | **    			(1200/2400/4800/9600/19200/38400/57600/115200) | 
 | 420 | **    		byte 5 			: data bit | 
 | 421 | **    					(0:7 bit, 1:8 bit : must be 8 bit) | 
 | 422 | **    		byte 6 			: stop bit (0:1, 1:2 stop bits) | 
 | 423 | **    		byte 7 			: parity (0:none, 1:off, 2:even) | 
 | 424 | **    		byte 8 			: flow control | 
 | 425 | **    			(0:none, 1:xon/xoff, 2:hardware => must use none) | 
 | 426 | **      GUI_NO_OPERATION : No operation | 
 | 427 | **    		byte 0,1        : length | 
 | 428 | **    		byte 2          : command code 0x38 | 
 | 429 | **      GUI_DHCP_IP : Set DHCP option and local IP address | 
 | 430 | **    		byte 0,1        : length | 
 | 431 | **    		byte 2          : command code 0x39 | 
 | 432 | **    		byte 3          : 0:dhcp disabled, 1:dhcp enabled | 
 | 433 | **    		byte 4/5/6/7    : IP address | 
 | 434 | **      GUI_CREATE_PASS_THROUGH : Create pass through disk | 
 | 435 | **    		byte 0,1        : length | 
 | 436 | **    		byte 2 			: command code 0x40 | 
 | 437 | **    		byte 3 			: device # | 
 | 438 | **    		byte 4 			: scsi channel (0/1) | 
 | 439 | **    		byte 5 			: scsi id (0-->15) | 
 | 440 | **    		byte 6 			: scsi lun (0-->7) | 
 | 441 | **    		byte 7 			: tagged queue (1 : enabled) | 
 | 442 | **    		byte 8 			: cache mode (1 : enabled) | 
 | 443 | **    		byte 9 			: max speed (0/1/2/3/4, | 
 | 444 | **    			async/20/40/80/160 for scsi) | 
 | 445 | **    			(0/1/2/3/4, 33/66/100/133/150 for ide  ) | 
 | 446 | **      GUI_MODIFY_PASS_THROUGH : Modify pass through disk | 
 | 447 | **    		byte 0,1        : length | 
 | 448 | **    		byte 2 			: command code 0x41 | 
 | 449 | **    		byte 3 			: device # | 
 | 450 | **    		byte 4 			: scsi channel (0/1) | 
 | 451 | **    		byte 5 			: scsi id (0-->15) | 
 | 452 | **    		byte 6 			: scsi lun (0-->7) | 
 | 453 | **    		byte 7 			: tagged queue (1 : enabled) | 
 | 454 | **    		byte 8 			: cache mode (1 : enabled) | 
 | 455 | **    		byte 9 			: max speed (0/1/2/3/4, | 
 | 456 | **    					async/20/40/80/160 for scsi) | 
 | 457 | **    			(0/1/2/3/4, 33/66/100/133/150 for ide  ) | 
 | 458 | **      GUI_DELETE_PASS_THROUGH : Delete pass through disk | 
 | 459 | **    		byte 0,1        : length | 
 | 460 | **    		byte 2          : command code 0x42 | 
 | 461 | **    		byte 3          : device# to be deleted | 
 | 462 | **      GUI_IDENTIFY_DEVICE : Identify Device | 
 | 463 | **    		byte 0,1        : length | 
 | 464 | **    		byte 2          : command code 0x43 | 
 | 465 | **    		byte 3          : Flash Method | 
 | 466 | **    				(0:flash selected, 1:flash not selected) | 
 | 467 | **    		byte 4/5/6/7    : IDE device mask to be flashed | 
 | 468 | **                           note .... no response data available | 
 | 469 | **    	GUI_CREATE_RAIDSET : Create Raid Set | 
 | 470 | **    		byte 0,1        : length | 
 | 471 | **    		byte 2          : command code 0x50 | 
 | 472 | **    		byte 3/4/5/6    : device mask | 
 | 473 | **    		byte 7-22       : raidset name (if byte 7 == 0:use default) | 
 | 474 | **      GUI_DELETE_RAIDSET : Delete Raid Set | 
 | 475 | **    		byte 0,1        : length | 
 | 476 | **    		byte 2          : command code 0x51 | 
 | 477 | **    		byte 3          : raidset# | 
 | 478 | **    	GUI_EXPAND_RAIDSET : Expand Raid Set | 
 | 479 | **    		byte 0,1        : length | 
 | 480 | **    		byte 2          : command code 0x52 | 
 | 481 | **    		byte 3          : raidset# | 
 | 482 | **    		byte 4/5/6/7    : device mask for expansion | 
 | 483 | **    		byte 8/9/10     : (8:0 no change, 1 change, 0xff:terminate, | 
 | 484 | **    				9:new raid level, | 
 | 485 | **    				10:new stripe size | 
 | 486 | **    				0/1/2/3/4/5->4/8/16/32/64/128K ) | 
 | 487 | **    		byte 11/12/13   : repeat for each volume in the raidset | 
 | 488 | **      GUI_ACTIVATE_RAIDSET : Activate incomplete raid set | 
 | 489 | **    		byte 0,1        : length | 
 | 490 | **    		byte 2          : command code 0x53 | 
 | 491 | **    		byte 3          : raidset# | 
 | 492 | **      GUI_CREATE_HOT_SPARE : Create hot spare disk | 
 | 493 | **    		byte 0,1        : length | 
 | 494 | **    		byte 2          : command code 0x54 | 
 | 495 | **    		byte 3/4/5/6    : device mask for hot spare creation | 
 | 496 | **    	GUI_DELETE_HOT_SPARE : Delete hot spare disk | 
 | 497 | **    		byte 0,1        : length | 
 | 498 | **    		byte 2          : command code 0x55 | 
 | 499 | **    		byte 3/4/5/6    : device mask for hot spare deletion | 
 | 500 | **    	GUI_CREATE_VOLUME : Create volume set | 
 | 501 | **    		byte 0,1        : length | 
 | 502 | **    		byte 2          : command code 0x60 | 
 | 503 | **    		byte 3          : raidset# | 
 | 504 | **    		byte 4-19       : volume set name | 
 | 505 | **    				(if byte4 == 0, use default) | 
 | 506 | **    		byte 20-27      : volume capacity (blocks) | 
 | 507 | **    		byte 28 		: raid level | 
 | 508 | **    		byte 29 		: stripe size | 
 | 509 | **    				(0/1/2/3/4/5->4/8/16/32/64/128K) | 
 | 510 | **    		byte 30 		: channel | 
 | 511 | **    		byte 31 		: ID | 
 | 512 | **    		byte 32 		: LUN | 
 | 513 | **    		byte 33 		: 1 enable tag | 
 | 514 | **    		byte 34 		: 1 enable cache | 
 | 515 | **    		byte 35 		: speed | 
 | 516 | **    		(0/1/2/3/4->async/20/40/80/160 for scsi) | 
 | 517 | **    		(0/1/2/3/4->33/66/100/133/150 for IDE  ) | 
 | 518 | **    		byte 36 		: 1 to select quick init | 
 | 519 | ** | 
 | 520 | **    	GUI_MODIFY_VOLUME : Modify volume Set | 
 | 521 | **    		byte 0,1        : length | 
 | 522 | **    		byte 2          : command code 0x61 | 
 | 523 | **    		byte 3          : volumeset# | 
 | 524 | **    		byte 4-19       : new volume set name | 
 | 525 | **    		(if byte4 == 0, not change) | 
 | 526 | **    		byte 20-27      : new volume capacity (reserved) | 
 | 527 | **    		byte 28 		: new raid level | 
 | 528 | **    		byte 29 		: new stripe size | 
 | 529 | **    		(0/1/2/3/4/5->4/8/16/32/64/128K) | 
 | 530 | **    		byte 30 		: new channel | 
 | 531 | **    		byte 31 		: new ID | 
 | 532 | **    		byte 32 		: new LUN | 
 | 533 | **    		byte 33 		: 1 enable tag | 
 | 534 | **    		byte 34 		: 1 enable cache | 
 | 535 | **    		byte 35 		: speed | 
 | 536 | **    		(0/1/2/3/4->async/20/40/80/160 for scsi) | 
 | 537 | **    		(0/1/2/3/4->33/66/100/133/150 for IDE  ) | 
 | 538 | **    	GUI_DELETE_VOLUME : Delete volume set | 
 | 539 | **    		byte 0,1        : length | 
 | 540 | **    		byte 2          : command code 0x62 | 
 | 541 | **    		byte 3          : volumeset# | 
 | 542 | **    	GUI_START_CHECK_VOLUME : Start volume consistency check | 
 | 543 | **    		byte 0,1        : length | 
 | 544 | **    		byte 2          : command code 0x63 | 
 | 545 | **    		byte 3          : volumeset# | 
 | 546 | **    	GUI_STOP_CHECK_VOLUME : Stop volume consistency check | 
 | 547 | **    		byte 0,1        : length | 
 | 548 | **    		byte 2          : command code 0x64 | 
 | 549 | ** --------------------------------------------------------------------- | 
 | 550 | **    4. Returned data | 
 | 551 | ** --------------------------------------------------------------------- | 
 | 552 | **    	(A) Header          : 3 bytes sequence (0x5E, 0x01, 0x61) | 
 | 553 | **    	(B) Length          : 2 bytes | 
 | 554 | **    			(low byte 1st, excludes length and checksum byte) | 
 | 555 | **    	(C) status or data  : | 
 | 556 | **           <1> If length == 1 ==> 1 byte status code | 
 | 557 | **    		#define GUI_OK                    0x41 | 
 | 558 | **    		#define GUI_RAIDSET_NOT_NORMAL    0x42 | 
 | 559 | **    		#define GUI_VOLUMESET_NOT_NORMAL  0x43 | 
 | 560 | **    		#define GUI_NO_RAIDSET            0x44 | 
 | 561 | **    		#define GUI_NO_VOLUMESET          0x45 | 
 | 562 | **    		#define GUI_NO_PHYSICAL_DRIVE     0x46 | 
 | 563 | **    		#define GUI_PARAMETER_ERROR       0x47 | 
 | 564 | **    		#define GUI_UNSUPPORTED_COMMAND   0x48 | 
 | 565 | **    		#define GUI_DISK_CONFIG_CHANGED   0x49 | 
 | 566 | **    		#define GUI_INVALID_PASSWORD      0x4a | 
 | 567 | **    		#define GUI_NO_DISK_SPACE         0x4b | 
 | 568 | **    		#define GUI_CHECKSUM_ERROR        0x4c | 
 | 569 | **    		#define GUI_PASSWORD_REQUIRED     0x4d | 
 | 570 | **           <2> If length > 1 ==> | 
 | 571 | **    		data block returned from controller | 
 | 572 | **    		and the contents depends on the command code | 
 | 573 | **    	(E) Checksum        : checksum of length and status or data byte | 
 | 574 | ************************************************************************** |