Based on kernel version 3.9. Page generated on 2013-05-02 23:13 EST.
1 ******************************************************************************* 2 ** ARECA FIRMWARE SPEC 3 ******************************************************************************* 4 ** Usage of IOP331 adapter 5 ** (All In/Out is in IOP331's view) 6 ** 1. Message 0 --> InitThread message and return code 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 **************************************************************************