1ARECA FIRMWARE SPEC 2=================== 3 4Usage of IOP331 adapter 5======================= 6 7(All In/Out is in IOP331's view) 8 91. Message 0 10------------ 11 12- InitThread message and return code 13 142. Doorbell is used for RS-232 emulation 15---------------------------------------- 16 17inDoorBell 18 bit0 19 data in ready 20 zDRIVER DATA WRITE OK) 21 bit1 22 data out has been read 23 (DRIVER DATA READ OK) 24 25outDooeBell: 26 bit0 27 data out ready 28 (IOP331 DATA WRITE OK) 29 bit1 30 data in has been read 31 (IOP331 DATA READ OK) 32 333. Index Memory Usage 34--------------------- 35 36============ ========================================== 37offset 0xf00 for RS232 out (request buffer) 38offset 0xe00 for RS232 in (scratch buffer) 39offset 0xa00 for inbound message code message_rwbuffer 40 (driver send to IOP331) 41offset 0xa00 for outbound message code message_rwbuffer 42 (IOP331 send to driver) 43============ ========================================== 44 454. RS-232 emulation 46------------------- 47 48Currently 128 byte buffer is used: 49 50============ ===================== 511st uint32_t Data length (1--124) 52Byte 4--127 Max 124 bytes of data 53============ ===================== 54 555. PostQ 56-------- 57 58All SCSI Command must be sent through postQ: 59 60 (inbound queue port) 61 Request frame must be 32 bytes aligned: 62 63 #bit27--bit31 64 flag for post ccb 65 #bit0--bit26 66 real address (bit27--bit31) of post arcmsr_cdb 67 68 ===== =================== 69 bit31 == =============== 70 0 256 bytes frame 71 1 512 bytes frame 72 == =============== 73 bit30 == ============== 74 0 normal request 75 1 BIOS request 76 == ============== 77 bit29 reserved 78 bit28 reserved 79 bit27 reserved 80 ===== =================== 81 82 (outbount queue port) 83 Request reply: 84 85 #bit27--bit31 86 flag for reply 87 #bit0--bit26 88 real address (bit27--bit31) of reply arcmsr_cdb 89 90 ===== ======================================================= 91 bit31 must be 0 (for this type of reply) 92 bit30 reserved for BIOS handshake 93 bit29 reserved 94 bit28 == =================================================== 95 0 no error, ignore AdapStatus/DevStatus/SenseData 96 1 Error, error code in AdapStatus/DevStatus/SenseData 97 == =================================================== 98 bit27 reserved 99 ===== ======================================================= 100 1016. BIOS request 102--------------- 103 104All BIOS request is the same with request from PostQ 105 106Except: 107 108Request frame is sent from configuration space: 109 110 ============ ========================== 111 offset: 0x78 Request Frame (bit30 == 1) 112 offset: 0x18 writeonly to generate 113 IRQ to IOP331 114 ============ ========================== 115 116Completion of request:: 117 118 (bit30 == 0, bit28==err flag) 119 1207. Definition of SGL entry (structure) 121-------------------------------------- 122 1238. Message1 Out - Diag Status Code (????) 124----------------------------------------- 125 1269. Message0 message code 127------------------------ 128 129====== ================================================================= 1300x00 NOP 1310x01 Get Config 132 ->offset 0xa00 :for outbound message code message_rwbuffer 133 (IOP331 send to driver) 134 135 ===================== ========================================== 136 Signature 0x87974060(4) 137 Request len 0x00000200(4) 138 numbers of queue 0x00000100(4) 139 SDRAM Size 0x00000100(4)-->256 MB 140 IDE Channels 0x00000008(4) 141 vendor 40 bytes char 142 model 8 bytes char 143 FirmVer 16 bytes char 144 Device Map 16 bytes char 145 FirmwareVersion DWORD 146 147 - Added for checking of 148 new firmware capability 149 ===================== ========================================== 1500x02 Set Config 151 ->offset 0xa00 :for inbound message code message_rwbuffer 152 (driver send to IOP331) 153 154 ========================= ================== 155 Signature 0x87974063(4) 156 UPPER32 of Request Frame (4)-->Driver Only 157 ========================= ================== 1580x03 Reset (Abort all queued Command) 1590x04 Stop Background Activity 1600x05 Flush Cache 1610x06 Start Background Activity 162 (re-start if background is halted) 1630x07 Check If Host Command Pending 164 (Novell May Need This Function) 1650x08 Set controller time 166 ->offset 0xa00 for inbound message code message_rwbuffer 167 (driver to IOP331) 168 169 ====== ================== 170 byte 0 0xaa <-- signature 171 byte 1 0x55 <-- signature 172 byte 2 year (04) 173 byte 3 month (1..12) 174 byte 4 date (1..31) 175 byte 5 hour (0..23) 176 byte 6 minute (0..59) 177 byte 7 second (0..59) 178 ====== ================== 179====== ================================================================= 180 181 182RS-232 Interface for Areca Raid Controller 183========================================== 184 185 The low level command interface is exclusive with VT100 terminal 186 1871. Sequence of command execution 188-------------------------------- 189 190 (A) Header 191 3 bytes sequence (0x5E, 0x01, 0x61) 192 193 (B) Command block 194 variable length of data including length, 195 command code, data and checksum byte 196 197 (C) Return data 198 variable length of data 199 2002. Command block 201---------------- 202 203 (A) 1st byte 204 command block length (low byte) 205 206 (B) 2nd byte 207 command block length (high byte) 208 209 .. Note:: command block length shouldn't > 2040 bytes, 210 length excludes these two bytes 211 212 (C) 3rd byte 213 command code 214 215 (D) 4th and following bytes 216 variable length data bytes 217 218 depends on command code 219 220 (E) last byte 221 checksum byte (sum of 1st byte until last data byte) 222 2233. Command code and associated data 224----------------------------------- 225 226The following are command code defined in raid controller Command 227code 0x10--0x1? are used for system level management, 228no password checking is needed and should be implemented in separate 229well controlled utility and not for end user access. 230Command code 0x20--0x?? always check the password, 231password must be entered to enable these command:: 232 233 enum 234 { 235 GUI_SET_SERIAL=0x10, 236 GUI_SET_VENDOR, 237 GUI_SET_MODEL, 238 GUI_IDENTIFY, 239 GUI_CHECK_PASSWORD, 240 GUI_LOGOUT, 241 GUI_HTTP, 242 GUI_SET_ETHERNET_ADDR, 243 GUI_SET_LOGO, 244 GUI_POLL_EVENT, 245 GUI_GET_EVENT, 246 GUI_GET_HW_MONITOR, 247 // GUI_QUICK_CREATE=0x20, (function removed) 248 GUI_GET_INFO_R=0x20, 249 GUI_GET_INFO_V, 250 GUI_GET_INFO_P, 251 GUI_GET_INFO_S, 252 GUI_CLEAR_EVENT, 253 GUI_MUTE_BEEPER=0x30, 254 GUI_BEEPER_SETTING, 255 GUI_SET_PASSWORD, 256 GUI_HOST_INTERFACE_MODE, 257 GUI_REBUILD_PRIORITY, 258 GUI_MAX_ATA_MODE, 259 GUI_RESET_CONTROLLER, 260 GUI_COM_PORT_SETTING, 261 GUI_NO_OPERATION, 262 GUI_DHCP_IP, 263 GUI_CREATE_PASS_THROUGH=0x40, 264 GUI_MODIFY_PASS_THROUGH, 265 GUI_DELETE_PASS_THROUGH, 266 GUI_IDENTIFY_DEVICE, 267 GUI_CREATE_RAIDSET=0x50, 268 GUI_DELETE_RAIDSET, 269 GUI_EXPAND_RAIDSET, 270 GUI_ACTIVATE_RAIDSET, 271 GUI_CREATE_HOT_SPARE, 272 GUI_DELETE_HOT_SPARE, 273 GUI_CREATE_VOLUME=0x60, 274 GUI_MODIFY_VOLUME, 275 GUI_DELETE_VOLUME, 276 GUI_START_CHECK_VOLUME, 277 GUI_STOP_CHECK_VOLUME 278 }; 279 280Command description 281^^^^^^^^^^^^^^^^^^^ 282 283GUI_SET_SERIAL 284 Set the controller serial# 285 286 ================ ============================================= 287 byte 0,1 length 288 byte 2 command code 0x10 289 byte 3 password length (should be 0x0f) 290 byte 4-0x13 should be "ArEcATecHnoLogY" 291 byte 0x14--0x23 Serial number string (must be 16 bytes) 292 ================ ============================================= 293 294GUI_SET_VENDOR 295 Set vendor string for the controller 296 297 ================ ============================================= 298 byte 0,1 length 299 byte 2 command code 0x11 300 byte 3 password length (should be 0x08) 301 byte 4-0x13 should be "ArEcAvAr" 302 byte 0x14--0x3B vendor string (must be 40 bytes) 303 ================ ============================================= 304 305GUI_SET_MODEL 306 Set the model name of the controller 307 308 ================ ============================================= 309 byte 0,1 length 310 byte 2 command code 0x12 311 byte 3 password length (should be 0x08) 312 byte 4-0x13 should be "ArEcAvAr" 313 byte 0x14--0x1B model string (must be 8 bytes) 314 ================ ============================================= 315 316GUI_IDENTIFY 317 Identify device 318 319 ================ ============================================= 320 byte 0,1 length 321 byte 2 command code 0x13 322 return "Areca RAID Subsystem " 323 ================ ============================================= 324 325GUI_CHECK_PASSWORD 326 Verify password 327 328 ================ ============================================= 329 byte 0,1 length 330 byte 2 command code 0x14 331 byte 3 password length 332 byte 4-0x?? user password to be checked 333 ================ ============================================= 334 335GUI_LOGOUT 336 Logout GUI (force password checking on next command) 337 338 ================ ============================================= 339 byte 0,1 length 340 byte 2 command code 0x15 341 ================ ============================================= 342 343GUI_HTTP 344 HTTP interface (reserved for Http proxy service)(0x16) 345 346GUI_SET_ETHERNET_ADDR 347 Set the ethernet MAC address 348 349 ================ ============================================= 350 byte 0,1 length 351 byte 2 command code 0x17 352 byte 3 password length (should be 0x08) 353 byte 4-0x13 should be "ArEcAvAr" 354 byte 0x14--0x19 Ethernet MAC address (must be 6 bytes) 355 ================ ============================================= 356 357GUI_SET_LOGO 358 Set logo in HTTP 359 360 ================ ============================================= 361 byte 0,1 length 362 byte 2 command code 0x18 363 byte 3 Page# (0/1/2/3) (0xff --> clear OEM logo) 364 byte 4/5/6/7 0x55/0xaa/0xa5/0x5a 365 byte 8 TITLE.JPG data (each page must be 2000 bytes) 366 367 .. Note:: page0 1st 2 byte must be 368 actual length of the JPG file 369 ================ ============================================= 370 371GUI_POLL_EVENT 372 Poll If Event Log Changed 373 374 ================ ============================================= 375 byte 0,1 length 376 byte 2 command code 0x19 377 ================ ============================================= 378 379GUI_GET_EVENT 380 Read Event 381 382 ================ ============================================= 383 byte 0,1 length 384 byte 2 command code 0x1a 385 byte 3 Event Page (0:1st page/1/2/3:last page) 386 ================ ============================================= 387 388GUI_GET_HW_MONITOR 389 Get HW monitor data 390 391 ================ ============================================= 392 byte 0,1 length 393 byte 2 command code 0x1b 394 byte 3 # of FANs(example 2) 395 byte 4 # of Voltage sensor(example 3) 396 byte 5 # of temperature sensor(example 2) 397 byte 6 # of power 398 byte 7/8 Fan#0 (RPM) 399 byte 9/10 Fan#1 400 byte 11/12 Voltage#0 original value in ``*1000`` 401 byte 13/14 Voltage#0 value 402 byte 15/16 Voltage#1 org 403 byte 17/18 Voltage#1 404 byte 19/20 Voltage#2 org 405 byte 21/22 Voltage#2 406 byte 23 Temp#0 407 byte 24 Temp#1 408 byte 25 Power indicator (bit0 power#0, 409 bit1 power#1) 410 byte 26 UPS indicator 411 ================ ============================================= 412 413GUI_QUICK_CREATE 414 Quick create raid/volume set 415 416 ================ ============================================== 417 byte 0,1 length 418 byte 2 command code 0x20 419 byte 3/4/5/6 raw capacity 420 byte 7 raid level 421 byte 8 stripe size 422 byte 9 spare 423 byte 10/11/12/13 device mask (the devices to create raid/volume) 424 ================ ============================================== 425 426 This function is removed, application like 427 to implement quick create function 428 429 need to use GUI_CREATE_RAIDSET and GUI_CREATE_VOLUMESET function. 430 431GUI_GET_INFO_R 432 Get Raid Set Information 433 434 ================ ============================================= 435 byte 0,1 length 436 byte 2 command code 0x20 437 byte 3 raidset# 438 ================ ============================================= 439 440 :: 441 442 typedef struct sGUI_RAIDSET 443 { 444 BYTE grsRaidSetName[16]; 445 DWORD grsCapacity; 446 DWORD grsCapacityX; 447 DWORD grsFailMask; 448 BYTE grsDevArray[32]; 449 BYTE grsMemberDevices; 450 BYTE grsNewMemberDevices; 451 BYTE grsRaidState; 452 BYTE grsVolumes; 453 BYTE grsVolumeList[16]; 454 BYTE grsRes1; 455 BYTE grsRes2; 456 BYTE grsRes3; 457 BYTE grsFreeSegments; 458 DWORD grsRawStripes[8]; 459 DWORD grsRes4; 460 DWORD grsRes5; // Total to 128 bytes 461 DWORD grsRes6; // Total to 128 bytes 462 } sGUI_RAIDSET, *pGUI_RAIDSET; 463 464GUI_GET_INFO_V 465 Get Volume Set Information 466 467 ================ ============================================= 468 byte 0,1 length 469 byte 2 command code 0x21 470 byte 3 volumeset# 471 ================ ============================================= 472 473 :: 474 475 typedef struct sGUI_VOLUMESET 476 { 477 BYTE gvsVolumeName[16]; // 16 478 DWORD gvsCapacity; 479 DWORD gvsCapacityX; 480 DWORD gvsFailMask; 481 DWORD gvsStripeSize; 482 DWORD gvsNewFailMask; 483 DWORD gvsNewStripeSize; 484 DWORD gvsVolumeStatus; 485 DWORD gvsProgress; // 32 486 sSCSI_ATTR gvsScsi; 487 BYTE gvsMemberDisks; 488 BYTE gvsRaidLevel; // 8 489 BYTE gvsNewMemberDisks; 490 BYTE gvsNewRaidLevel; 491 BYTE gvsRaidSetNumber; 492 BYTE gvsRes0; // 4 493 BYTE gvsRes1[4]; // 64 bytes 494 } sGUI_VOLUMESET, *pGUI_VOLUMESET; 495 496GUI_GET_INFO_P 497 Get Physical Drive Information 498 499 ================ ============================================= 500 byte 0,1 length 501 byte 2 command code 0x22 502 byte 3 drive # (from 0 to max-channels - 1) 503 ================ ============================================= 504 505 :: 506 507 typedef struct sGUI_PHY_DRV 508 { 509 BYTE gpdModelName[40]; 510 BYTE gpdSerialNumber[20]; 511 BYTE gpdFirmRev[8]; 512 DWORD gpdCapacity; 513 DWORD gpdCapacityX; // Reserved for expansion 514 BYTE gpdDeviceState; 515 BYTE gpdPioMode; 516 BYTE gpdCurrentUdmaMode; 517 BYTE gpdUdmaMode; 518 BYTE gpdDriveSelect; 519 BYTE gpdRaidNumber; // 0xff if not belongs to a raid set 520 sSCSI_ATTR gpdScsi; 521 BYTE gpdReserved[40]; // Total to 128 bytes 522 } sGUI_PHY_DRV, *pGUI_PHY_DRV; 523 524GUI_GET_INFO_S 525 Get System Information 526 527 ================ ============================================= 528 byte 0,1 length 529 byte 2 command code 0x23 530 ================ ============================================= 531 532 :: 533 534 typedef struct sCOM_ATTR 535 { 536 BYTE comBaudRate; 537 BYTE comDataBits; 538 BYTE comStopBits; 539 BYTE comParity; 540 BYTE comFlowControl; 541 } sCOM_ATTR, *pCOM_ATTR; 542 typedef struct sSYSTEM_INFO 543 { 544 BYTE gsiVendorName[40]; 545 BYTE gsiSerialNumber[16]; 546 BYTE gsiFirmVersion[16]; 547 BYTE gsiBootVersion[16]; 548 BYTE gsiMbVersion[16]; 549 BYTE gsiModelName[8]; 550 BYTE gsiLocalIp[4]; 551 BYTE gsiCurrentIp[4]; 552 DWORD gsiTimeTick; 553 DWORD gsiCpuSpeed; 554 DWORD gsiICache; 555 DWORD gsiDCache; 556 DWORD gsiScache; 557 DWORD gsiMemorySize; 558 DWORD gsiMemorySpeed; 559 DWORD gsiEvents; 560 BYTE gsiMacAddress[6]; 561 BYTE gsiDhcp; 562 BYTE gsiBeeper; 563 BYTE gsiChannelUsage; 564 BYTE gsiMaxAtaMode; 565 BYTE gsiSdramEcc; // 1:if ECC enabled 566 BYTE gsiRebuildPriority; 567 sCOM_ATTR gsiComA; // 5 bytes 568 sCOM_ATTR gsiComB; // 5 bytes 569 BYTE gsiIdeChannels; 570 BYTE gsiScsiHostChannels; 571 BYTE gsiIdeHostChannels; 572 BYTE gsiMaxVolumeSet; 573 BYTE gsiMaxRaidSet; 574 BYTE gsiEtherPort; // 1:if ether net port supported 575 BYTE gsiRaid6Engine; // 1:Raid6 engine supported 576 BYTE gsiRes[75]; 577 } sSYSTEM_INFO, *pSYSTEM_INFO; 578 579GUI_CLEAR_EVENT 580 Clear System Event 581 582 ================ ============================================= 583 byte 0,1 length 584 byte 2 command code 0x24 585 ================ ============================================= 586 587GUI_MUTE_BEEPER 588 Mute current beeper 589 590 ================ ============================================= 591 byte 0,1 length 592 byte 2 command code 0x30 593 ================ ============================================= 594GUI_BEEPER_SETTING 595 Disable beeper 596 597 ================ ============================================= 598 byte 0,1 length 599 byte 2 command code 0x31 600 byte 3 0->disable, 1->enable 601 ================ ============================================= 602 603GUI_SET_PASSWORD 604 Change password 605 606 ================ ============================================= 607 byte 0,1 length 608 byte 2 command code 0x32 609 byte 3 pass word length ( must <= 15 ) 610 byte 4 password (must be alpha-numerical) 611 ================ ============================================= 612 613GUI_HOST_INTERFACE_MODE 614 Set host interface mode 615 616 ================ ============================================= 617 byte 0,1 length 618 byte 2 command code 0x33 619 byte 3 0->Independent, 1->cluster 620 ================ ============================================= 621 622GUI_REBUILD_PRIORITY 623 Set rebuild priority 624 625 ================ ============================================= 626 byte 0,1 length 627 byte 2 command code 0x34 628 byte 3 0/1/2/3 (low->high) 629 ================ ============================================= 630 631GUI_MAX_ATA_MODE 632 Set maximum ATA mode to be used 633 634 ================ ============================================= 635 byte 0,1 length 636 byte 2 command code 0x35 637 byte 3 0/1/2/3 (133/100/66/33) 638 ================ ============================================= 639 640GUI_RESET_CONTROLLER 641 Reset Controller 642 643 ================ ============================================= 644 byte 0,1 length 645 byte 2 command code 0x36 646 * Response with VT100 screen (discard it) 647 ================ ============================================= 648 649GUI_COM_PORT_SETTING 650 COM port setting 651 652 ================ ================================================= 653 byte 0,1 length 654 byte 2 command code 0x37 655 byte 3 0->COMA (term port), 656 1->COMB (debug port) 657 byte 4 0/1/2/3/4/5/6/7 658 (1200/2400/4800/9600/19200/38400/57600/115200) 659 byte 5 data bit 660 (0:7 bit, 1:8 bit must be 8 bit) 661 byte 6 stop bit (0:1, 1:2 stop bits) 662 byte 7 parity (0:none, 1:off, 2:even) 663 byte 8 flow control 664 (0:none, 1:xon/xoff, 2:hardware => must use none) 665 ================ ================================================= 666 667GUI_NO_OPERATION 668 No operation 669 670 ================ ============================================= 671 byte 0,1 length 672 byte 2 command code 0x38 673 ================ ============================================= 674 675GUI_DHCP_IP 676 Set DHCP option and local IP address 677 678 ================ ============================================= 679 byte 0,1 length 680 byte 2 command code 0x39 681 byte 3 0:dhcp disabled, 1:dhcp enabled 682 byte 4/5/6/7 IP address 683 ================ ============================================= 684 685GUI_CREATE_PASS_THROUGH 686 Create pass through disk 687 688 ================ ============================================= 689 byte 0,1 length 690 byte 2 command code 0x40 691 byte 3 device # 692 byte 4 scsi channel (0/1) 693 byte 5 scsi id (0-->15) 694 byte 6 scsi lun (0-->7) 695 byte 7 tagged queue (1 enabled) 696 byte 8 cache mode (1 enabled) 697 byte 9 max speed (0/1/2/3/4, 698 async/20/40/80/160 for scsi) 699 (0/1/2/3/4, 33/66/100/133/150 for ide ) 700 ================ ============================================= 701 702GUI_MODIFY_PASS_THROUGH 703 Modify pass through disk 704 705 ================ ============================================= 706 byte 0,1 length 707 byte 2 command code 0x41 708 byte 3 device # 709 byte 4 scsi channel (0/1) 710 byte 5 scsi id (0-->15) 711 byte 6 scsi lun (0-->7) 712 byte 7 tagged queue (1 enabled) 713 byte 8 cache mode (1 enabled) 714 byte 9 max speed (0/1/2/3/4, 715 async/20/40/80/160 for scsi) 716 (0/1/2/3/4, 33/66/100/133/150 for ide ) 717 ================ ============================================= 718 719GUI_DELETE_PASS_THROUGH 720 Delete pass through disk 721 722 ================ ============================================= 723 byte 0,1 length 724 byte 2 command code 0x42 725 byte 3 device# to be deleted 726 ================ ============================================= 727GUI_IDENTIFY_DEVICE 728 Identify Device 729 730 ================ ============================================= 731 byte 0,1 length 732 byte 2 command code 0x43 733 byte 3 Flash Method 734 (0:flash selected, 1:flash not selected) 735 byte 4/5/6/7 IDE device mask to be flashed 736 .. Note:: no response data available 737 ================ ============================================= 738 739GUI_CREATE_RAIDSET 740 Create Raid Set 741 742 ================ ============================================= 743 byte 0,1 length 744 byte 2 command code 0x50 745 byte 3/4/5/6 device mask 746 byte 7-22 raidset name (if byte 7 == 0:use default) 747 ================ ============================================= 748 749GUI_DELETE_RAIDSET 750 Delete Raid Set 751 752 ================ ============================================= 753 byte 0,1 length 754 byte 2 command code 0x51 755 byte 3 raidset# 756 ================ ============================================= 757 758GUI_EXPAND_RAIDSET 759 Expand Raid Set 760 761 ================ ============================================= 762 byte 0,1 length 763 byte 2 command code 0x52 764 byte 3 raidset# 765 byte 4/5/6/7 device mask for expansion 766 byte 8/9/10 (8:0 no change, 1 change, 0xff:terminate, 767 9:new raid level, 768 10:new stripe size 769 0/1/2/3/4/5->4/8/16/32/64/128K ) 770 byte 11/12/13 repeat for each volume in the raidset 771 ================ ============================================= 772 773GUI_ACTIVATE_RAIDSET 774 Activate incomplete raid set 775 776 ================ ============================================= 777 byte 0,1 length 778 byte 2 command code 0x53 779 byte 3 raidset# 780 ================ ============================================= 781 782GUI_CREATE_HOT_SPARE 783 Create hot spare disk 784 785 ================ ============================================= 786 byte 0,1 length 787 byte 2 command code 0x54 788 byte 3/4/5/6 device mask for hot spare creation 789 ================ ============================================= 790 791GUI_DELETE_HOT_SPARE 792 Delete hot spare disk 793 794 ================ ============================================= 795 byte 0,1 length 796 byte 2 command code 0x55 797 byte 3/4/5/6 device mask for hot spare deletion 798 ================ ============================================= 799 800GUI_CREATE_VOLUME 801 Create volume set 802 803 ================ ============================================= 804 byte 0,1 length 805 byte 2 command code 0x60 806 byte 3 raidset# 807 byte 4-19 volume set name 808 (if byte4 == 0, use default) 809 byte 20-27 volume capacity (blocks) 810 byte 28 raid level 811 byte 29 stripe size 812 (0/1/2/3/4/5->4/8/16/32/64/128K) 813 byte 30 channel 814 byte 31 ID 815 byte 32 LUN 816 byte 33 1 enable tag 817 byte 34 1 enable cache 818 byte 35 speed 819 (0/1/2/3/4->async/20/40/80/160 for scsi) 820 (0/1/2/3/4->33/66/100/133/150 for IDE ) 821 byte 36 1 to select quick init 822 ================ ============================================= 823 824GUI_MODIFY_VOLUME 825 Modify volume Set 826 827 ================ ============================================= 828 byte 0,1 length 829 byte 2 command code 0x61 830 byte 3 volumeset# 831 byte 4-19 new volume set name 832 (if byte4 == 0, not change) 833 byte 20-27 new volume capacity (reserved) 834 byte 28 new raid level 835 byte 29 new stripe size 836 (0/1/2/3/4/5->4/8/16/32/64/128K) 837 byte 30 new channel 838 byte 31 new ID 839 byte 32 new LUN 840 byte 33 1 enable tag 841 byte 34 1 enable cache 842 byte 35 speed 843 (0/1/2/3/4->async/20/40/80/160 for scsi) 844 (0/1/2/3/4->33/66/100/133/150 for IDE ) 845 ================ ============================================= 846 847GUI_DELETE_VOLUME 848 Delete volume set 849 850 ================ ============================================= 851 byte 0,1 length 852 byte 2 command code 0x62 853 byte 3 volumeset# 854 ================ ============================================= 855 856GUI_START_CHECK_VOLUME 857 Start volume consistency check 858 859 ================ ============================================= 860 byte 0,1 length 861 byte 2 command code 0x63 862 byte 3 volumeset# 863 ================ ============================================= 864 865GUI_STOP_CHECK_VOLUME 866 Stop volume consistency check 867 868 ================ ============================================= 869 byte 0,1 length 870 byte 2 command code 0x64 871 ================ ============================================= 872 8734. Returned data 874---------------- 875 876(A) Header 877 3 bytes sequence (0x5E, 0x01, 0x61) 878(B) Length 879 2 bytes 880 (low byte 1st, excludes length and checksum byte) 881(C) 882 status or data: 883 884 1) If length == 1 ==> 1 byte status code:: 885 886 #define GUI_OK 0x41 887 #define GUI_RAIDSET_NOT_NORMAL 0x42 888 #define GUI_VOLUMESET_NOT_NORMAL 0x43 889 #define GUI_NO_RAIDSET 0x44 890 #define GUI_NO_VOLUMESET 0x45 891 #define GUI_NO_PHYSICAL_DRIVE 0x46 892 #define GUI_PARAMETER_ERROR 0x47 893 #define GUI_UNSUPPORTED_COMMAND 0x48 894 #define GUI_DISK_CONFIG_CHANGED 0x49 895 #define GUI_INVALID_PASSWORD 0x4a 896 #define GUI_NO_DISK_SPACE 0x4b 897 #define GUI_CHECKSUM_ERROR 0x4c 898 #define GUI_PASSWORD_REQUIRED 0x4d 899 900 2) If length > 1: 901 902 data block returned from controller 903 and the contents depends on the command code 904 905(E) Checksum 906 checksum of length and status or data byte 907 908