909 lines · plain
1===================2ARECA FIRMWARE SPEC3===================4 5Usage of IOP331 adapter6=======================7 8(All In/Out is in IOP331's view)9 101. Message 011------------12 13- InitThread message and return code14 152. Doorbell is used for RS-232 emulation16----------------------------------------17 18inDoorBell19 bit020 data in ready21 zDRIVER DATA WRITE OK)22 bit123 data out has been read24 (DRIVER DATA READ OK)25 26outDooeBell:27 bit028 data out ready29 (IOP331 DATA WRITE OK)30 bit131 data in has been read32 (IOP331 DATA READ OK)33 343. Index Memory Usage35---------------------36 37============ ==========================================38offset 0xf00 for RS232 out (request buffer)39offset 0xe00 for RS232 in (scratch buffer)40offset 0xa00 for inbound message code message_rwbuffer41 (driver send to IOP331)42offset 0xa00 for outbound message code message_rwbuffer43 (IOP331 send to driver)44============ ==========================================45 464. RS-232 emulation47-------------------48 49Currently 128 byte buffer is used:50 51============ =====================521st uint32_t Data length (1--124)53Byte 4--127 Max 124 bytes of data54============ =====================55 565. PostQ57--------58 59All SCSI Command must be sent through postQ:60 61 (inbound queue port)62 Request frame must be 32 bytes aligned:63 64 #bit27--bit3165 flag for post ccb66 #bit0--bit2667 real address (bit27--bit31) of post arcmsr_cdb68 69 ===== ===================70 bit31 == ===============71 0 256 bytes frame72 1 512 bytes frame73 == ===============74 bit30 == ==============75 0 normal request76 1 BIOS request77 == ==============78 bit29 reserved79 bit28 reserved80 bit27 reserved81 ===== ===================82 83 (outbount queue port)84 Request reply:85 86 #bit27--bit3187 flag for reply88 #bit0--bit2689 real address (bit27--bit31) of reply arcmsr_cdb90 91 ===== =======================================================92 bit31 must be 0 (for this type of reply)93 bit30 reserved for BIOS handshake94 bit29 reserved95 bit28 == ===================================================96 0 no error, ignore AdapStatus/DevStatus/SenseData97 1 Error, error code in AdapStatus/DevStatus/SenseData98 == ===================================================99 bit27 reserved100 ===== =======================================================101 1026. BIOS request103---------------104 105All BIOS request is the same with request from PostQ106 107Except:108 109Request frame is sent from configuration space:110 111 ============ ==========================112 offset: 0x78 Request Frame (bit30 == 1)113 offset: 0x18 writeonly to generate114 IRQ to IOP331115 ============ ==========================116 117Completion of request::118 119 (bit30 == 0, bit28==err flag)120 1217. Definition of SGL entry (structure)122--------------------------------------123 1248. Message1 Out - Diag Status Code (????)125-----------------------------------------126 1279. Message0 message code128------------------------129 130====== =================================================================1310x00 NOP1320x01 Get Config133 ->offset 0xa00 :for outbound message code message_rwbuffer134 (IOP331 send to driver)135 136 ===================== ==========================================137 Signature 0x87974060(4)138 Request len 0x00000200(4)139 numbers of queue 0x00000100(4)140 SDRAM Size 0x00000100(4)-->256 MB141 IDE Channels 0x00000008(4)142 vendor 40 bytes char143 model 8 bytes char144 FirmVer 16 bytes char145 Device Map 16 bytes char146 FirmwareVersion DWORD147 148 - Added for checking of149 new firmware capability150 ===================== ==========================================1510x02 Set Config152 ->offset 0xa00 :for inbound message code message_rwbuffer153 (driver send to IOP331)154 155 ========================= ==================156 Signature 0x87974063(4)157 UPPER32 of Request Frame (4)-->Driver Only158 ========================= ==================1590x03 Reset (Abort all queued Command)1600x04 Stop Background Activity1610x05 Flush Cache1620x06 Start Background Activity163 (re-start if background is halted)1640x07 Check If Host Command Pending165 (Novell May Need This Function)1660x08 Set controller time167 ->offset 0xa00 for inbound message code message_rwbuffer168 (driver to IOP331)169 170 ====== ==================171 byte 0 0xaa <-- signature172 byte 1 0x55 <-- signature173 byte 2 year (04)174 byte 3 month (1..12)175 byte 4 date (1..31)176 byte 5 hour (0..23)177 byte 6 minute (0..59)178 byte 7 second (0..59)179 ====== ==================180====== =================================================================181 182 183RS-232 Interface for Areca Raid Controller184==========================================185 186 The low level command interface is exclusive with VT100 terminal187 1881. Sequence of command execution189--------------------------------190 191 (A) Header192 3 bytes sequence (0x5E, 0x01, 0x61)193 194 (B) Command block195 variable length of data including length,196 command code, data and checksum byte197 198 (C) Return data199 variable length of data200 2012. Command block202----------------203 204 (A) 1st byte205 command block length (low byte)206 207 (B) 2nd byte208 command block length (high byte)209 210 .. Note:: command block length shouldn't > 2040 bytes,211 length excludes these two bytes212 213 (C) 3rd byte214 command code215 216 (D) 4th and following bytes217 variable length data bytes218 219 depends on command code220 221 (E) last byte222 checksum byte (sum of 1st byte until last data byte)223 2243. Command code and associated data225-----------------------------------226 227The following are command code defined in raid controller Command228code 0x10--0x1? are used for system level management,229no password checking is needed and should be implemented in separate230well controlled utility and not for end user access.231Command code 0x20--0x?? always check the password,232password must be entered to enable these command::233 234 enum235 {236 GUI_SET_SERIAL=0x10,237 GUI_SET_VENDOR,238 GUI_SET_MODEL,239 GUI_IDENTIFY,240 GUI_CHECK_PASSWORD,241 GUI_LOGOUT,242 GUI_HTTP,243 GUI_SET_ETHERNET_ADDR,244 GUI_SET_LOGO,245 GUI_POLL_EVENT,246 GUI_GET_EVENT,247 GUI_GET_HW_MONITOR,248 // GUI_QUICK_CREATE=0x20, (function removed)249 GUI_GET_INFO_R=0x20,250 GUI_GET_INFO_V,251 GUI_GET_INFO_P,252 GUI_GET_INFO_S,253 GUI_CLEAR_EVENT,254 GUI_MUTE_BEEPER=0x30,255 GUI_BEEPER_SETTING,256 GUI_SET_PASSWORD,257 GUI_HOST_INTERFACE_MODE,258 GUI_REBUILD_PRIORITY,259 GUI_MAX_ATA_MODE,260 GUI_RESET_CONTROLLER,261 GUI_COM_PORT_SETTING,262 GUI_NO_OPERATION,263 GUI_DHCP_IP,264 GUI_CREATE_PASS_THROUGH=0x40,265 GUI_MODIFY_PASS_THROUGH,266 GUI_DELETE_PASS_THROUGH,267 GUI_IDENTIFY_DEVICE,268 GUI_CREATE_RAIDSET=0x50,269 GUI_DELETE_RAIDSET,270 GUI_EXPAND_RAIDSET,271 GUI_ACTIVATE_RAIDSET,272 GUI_CREATE_HOT_SPARE,273 GUI_DELETE_HOT_SPARE,274 GUI_CREATE_VOLUME=0x60,275 GUI_MODIFY_VOLUME,276 GUI_DELETE_VOLUME,277 GUI_START_CHECK_VOLUME,278 GUI_STOP_CHECK_VOLUME279 };280 281Command description282^^^^^^^^^^^^^^^^^^^283 284GUI_SET_SERIAL285 Set the controller serial#286 287 ================ =============================================288 byte 0,1 length289 byte 2 command code 0x10290 byte 3 password length (should be 0x0f)291 byte 4-0x13 should be "ArEcATecHnoLogY"292 byte 0x14--0x23 Serial number string (must be 16 bytes)293 ================ =============================================294 295GUI_SET_VENDOR296 Set vendor string for the controller297 298 ================ =============================================299 byte 0,1 length300 byte 2 command code 0x11301 byte 3 password length (should be 0x08)302 byte 4-0x13 should be "ArEcAvAr"303 byte 0x14--0x3B vendor string (must be 40 bytes)304 ================ =============================================305 306GUI_SET_MODEL307 Set the model name of the controller308 309 ================ =============================================310 byte 0,1 length311 byte 2 command code 0x12312 byte 3 password length (should be 0x08)313 byte 4-0x13 should be "ArEcAvAr"314 byte 0x14--0x1B model string (must be 8 bytes)315 ================ =============================================316 317GUI_IDENTIFY318 Identify device319 320 ================ =============================================321 byte 0,1 length322 byte 2 command code 0x13323 return "Areca RAID Subsystem "324 ================ =============================================325 326GUI_CHECK_PASSWORD327 Verify password328 329 ================ =============================================330 byte 0,1 length331 byte 2 command code 0x14332 byte 3 password length333 byte 4-0x?? user password to be checked334 ================ =============================================335 336GUI_LOGOUT337 Logout GUI (force password checking on next command)338 339 ================ =============================================340 byte 0,1 length341 byte 2 command code 0x15342 ================ =============================================343 344GUI_HTTP345 HTTP interface (reserved for Http proxy service)(0x16)346 347GUI_SET_ETHERNET_ADDR348 Set the ethernet MAC address349 350 ================ =============================================351 byte 0,1 length352 byte 2 command code 0x17353 byte 3 password length (should be 0x08)354 byte 4-0x13 should be "ArEcAvAr"355 byte 0x14--0x19 Ethernet MAC address (must be 6 bytes)356 ================ =============================================357 358GUI_SET_LOGO359 Set logo in HTTP360 361 ================ =============================================362 byte 0,1 length363 byte 2 command code 0x18364 byte 3 Page# (0/1/2/3) (0xff --> clear OEM logo)365 byte 4/5/6/7 0x55/0xaa/0xa5/0x5a366 byte 8 TITLE.JPG data (each page must be 2000 bytes)367 368 .. Note:: page0 1st 2 byte must be369 actual length of the JPG file370 ================ =============================================371 372GUI_POLL_EVENT373 Poll If Event Log Changed374 375 ================ =============================================376 byte 0,1 length377 byte 2 command code 0x19378 ================ =============================================379 380GUI_GET_EVENT381 Read Event382 383 ================ =============================================384 byte 0,1 length385 byte 2 command code 0x1a386 byte 3 Event Page (0:1st page/1/2/3:last page)387 ================ =============================================388 389GUI_GET_HW_MONITOR390 Get HW monitor data391 392 ================ =============================================393 byte 0,1 length394 byte 2 command code 0x1b395 byte 3 # of FANs(example 2)396 byte 4 # of Voltage sensor(example 3)397 byte 5 # of temperature sensor(example 2)398 byte 6 # of power399 byte 7/8 Fan#0 (RPM)400 byte 9/10 Fan#1401 byte 11/12 Voltage#0 original value in ``*1000``402 byte 13/14 Voltage#0 value403 byte 15/16 Voltage#1 org404 byte 17/18 Voltage#1405 byte 19/20 Voltage#2 org406 byte 21/22 Voltage#2407 byte 23 Temp#0408 byte 24 Temp#1409 byte 25 Power indicator (bit0 power#0,410 bit1 power#1)411 byte 26 UPS indicator412 ================ =============================================413 414GUI_QUICK_CREATE415 Quick create raid/volume set416 417 ================ ==============================================418 byte 0,1 length419 byte 2 command code 0x20420 byte 3/4/5/6 raw capacity421 byte 7 raid level422 byte 8 stripe size423 byte 9 spare424 byte 10/11/12/13 device mask (the devices to create raid/volume)425 ================ ==============================================426 427 This function is removed, application like428 to implement quick create function429 430 need to use GUI_CREATE_RAIDSET and GUI_CREATE_VOLUMESET function.431 432GUI_GET_INFO_R433 Get Raid Set Information434 435 ================ =============================================436 byte 0,1 length437 byte 2 command code 0x20438 byte 3 raidset#439 ================ =============================================440 441 ::442 443 typedef struct sGUI_RAIDSET444 {445 BYTE grsRaidSetName[16];446 DWORD grsCapacity;447 DWORD grsCapacityX;448 DWORD grsFailMask;449 BYTE grsDevArray[32];450 BYTE grsMemberDevices;451 BYTE grsNewMemberDevices;452 BYTE grsRaidState;453 BYTE grsVolumes;454 BYTE grsVolumeList[16];455 BYTE grsRes1;456 BYTE grsRes2;457 BYTE grsRes3;458 BYTE grsFreeSegments;459 DWORD grsRawStripes[8];460 DWORD grsRes4;461 DWORD grsRes5; // Total to 128 bytes462 DWORD grsRes6; // Total to 128 bytes463 } sGUI_RAIDSET, *pGUI_RAIDSET;464 465GUI_GET_INFO_V466 Get Volume Set Information467 468 ================ =============================================469 byte 0,1 length470 byte 2 command code 0x21471 byte 3 volumeset#472 ================ =============================================473 474 ::475 476 typedef struct sGUI_VOLUMESET477 {478 BYTE gvsVolumeName[16]; // 16479 DWORD gvsCapacity;480 DWORD gvsCapacityX;481 DWORD gvsFailMask;482 DWORD gvsStripeSize;483 DWORD gvsNewFailMask;484 DWORD gvsNewStripeSize;485 DWORD gvsVolumeStatus;486 DWORD gvsProgress; // 32487 sSCSI_ATTR gvsScsi;488 BYTE gvsMemberDisks;489 BYTE gvsRaidLevel; // 8490 BYTE gvsNewMemberDisks;491 BYTE gvsNewRaidLevel;492 BYTE gvsRaidSetNumber;493 BYTE gvsRes0; // 4494 BYTE gvsRes1[4]; // 64 bytes495 } sGUI_VOLUMESET, *pGUI_VOLUMESET;496 497GUI_GET_INFO_P498 Get Physical Drive Information499 500 ================ =============================================501 byte 0,1 length502 byte 2 command code 0x22503 byte 3 drive # (from 0 to max-channels - 1)504 ================ =============================================505 506 ::507 508 typedef struct sGUI_PHY_DRV509 {510 BYTE gpdModelName[40];511 BYTE gpdSerialNumber[20];512 BYTE gpdFirmRev[8];513 DWORD gpdCapacity;514 DWORD gpdCapacityX; // Reserved for expansion515 BYTE gpdDeviceState;516 BYTE gpdPioMode;517 BYTE gpdCurrentUdmaMode;518 BYTE gpdUdmaMode;519 BYTE gpdDriveSelect;520 BYTE gpdRaidNumber; // 0xff if not belongs to a raid set521 sSCSI_ATTR gpdScsi;522 BYTE gpdReserved[40]; // Total to 128 bytes523 } sGUI_PHY_DRV, *pGUI_PHY_DRV;524 525GUI_GET_INFO_S526 Get System Information527 528 ================ =============================================529 byte 0,1 length530 byte 2 command code 0x23531 ================ =============================================532 533 ::534 535 typedef struct sCOM_ATTR536 {537 BYTE comBaudRate;538 BYTE comDataBits;539 BYTE comStopBits;540 BYTE comParity;541 BYTE comFlowControl;542 } sCOM_ATTR, *pCOM_ATTR;543 typedef struct sSYSTEM_INFO544 {545 BYTE gsiVendorName[40];546 BYTE gsiSerialNumber[16];547 BYTE gsiFirmVersion[16];548 BYTE gsiBootVersion[16];549 BYTE gsiMbVersion[16];550 BYTE gsiModelName[8];551 BYTE gsiLocalIp[4];552 BYTE gsiCurrentIp[4];553 DWORD gsiTimeTick;554 DWORD gsiCpuSpeed;555 DWORD gsiICache;556 DWORD gsiDCache;557 DWORD gsiScache;558 DWORD gsiMemorySize;559 DWORD gsiMemorySpeed;560 DWORD gsiEvents;561 BYTE gsiMacAddress[6];562 BYTE gsiDhcp;563 BYTE gsiBeeper;564 BYTE gsiChannelUsage;565 BYTE gsiMaxAtaMode;566 BYTE gsiSdramEcc; // 1:if ECC enabled567 BYTE gsiRebuildPriority;568 sCOM_ATTR gsiComA; // 5 bytes569 sCOM_ATTR gsiComB; // 5 bytes570 BYTE gsiIdeChannels;571 BYTE gsiScsiHostChannels;572 BYTE gsiIdeHostChannels;573 BYTE gsiMaxVolumeSet;574 BYTE gsiMaxRaidSet;575 BYTE gsiEtherPort; // 1:if ether net port supported576 BYTE gsiRaid6Engine; // 1:Raid6 engine supported577 BYTE gsiRes[75];578 } sSYSTEM_INFO, *pSYSTEM_INFO;579 580GUI_CLEAR_EVENT581 Clear System Event582 583 ================ =============================================584 byte 0,1 length585 byte 2 command code 0x24586 ================ =============================================587 588GUI_MUTE_BEEPER589 Mute current beeper590 591 ================ =============================================592 byte 0,1 length593 byte 2 command code 0x30594 ================ =============================================595GUI_BEEPER_SETTING596 Disable beeper597 598 ================ =============================================599 byte 0,1 length600 byte 2 command code 0x31601 byte 3 0->disable, 1->enable602 ================ =============================================603 604GUI_SET_PASSWORD605 Change password606 607 ================ =============================================608 byte 0,1 length609 byte 2 command code 0x32610 byte 3 pass word length ( must <= 15 )611 byte 4 password (must be alpha-numerical)612 ================ =============================================613 614GUI_HOST_INTERFACE_MODE615 Set host interface mode616 617 ================ =============================================618 byte 0,1 length619 byte 2 command code 0x33620 byte 3 0->Independent, 1->cluster621 ================ =============================================622 623GUI_REBUILD_PRIORITY624 Set rebuild priority625 626 ================ =============================================627 byte 0,1 length628 byte 2 command code 0x34629 byte 3 0/1/2/3 (low->high)630 ================ =============================================631 632GUI_MAX_ATA_MODE633 Set maximum ATA mode to be used634 635 ================ =============================================636 byte 0,1 length637 byte 2 command code 0x35638 byte 3 0/1/2/3 (133/100/66/33)639 ================ =============================================640 641GUI_RESET_CONTROLLER642 Reset Controller643 644 ================ =============================================645 byte 0,1 length646 byte 2 command code 0x36647 * Response with VT100 screen (discard it)648 ================ =============================================649 650GUI_COM_PORT_SETTING651 COM port setting652 653 ================ =================================================654 byte 0,1 length655 byte 2 command code 0x37656 byte 3 0->COMA (term port),657 1->COMB (debug port)658 byte 4 0/1/2/3/4/5/6/7659 (1200/2400/4800/9600/19200/38400/57600/115200)660 byte 5 data bit661 (0:7 bit, 1:8 bit must be 8 bit)662 byte 6 stop bit (0:1, 1:2 stop bits)663 byte 7 parity (0:none, 1:off, 2:even)664 byte 8 flow control665 (0:none, 1:xon/xoff, 2:hardware => must use none)666 ================ =================================================667 668GUI_NO_OPERATION669 No operation670 671 ================ =============================================672 byte 0,1 length673 byte 2 command code 0x38674 ================ =============================================675 676GUI_DHCP_IP677 Set DHCP option and local IP address678 679 ================ =============================================680 byte 0,1 length681 byte 2 command code 0x39682 byte 3 0:dhcp disabled, 1:dhcp enabled683 byte 4/5/6/7 IP address684 ================ =============================================685 686GUI_CREATE_PASS_THROUGH687 Create pass through disk688 689 ================ =============================================690 byte 0,1 length691 byte 2 command code 0x40692 byte 3 device #693 byte 4 scsi channel (0/1)694 byte 5 scsi id (0-->15)695 byte 6 scsi lun (0-->7)696 byte 7 tagged queue (1 enabled)697 byte 8 cache mode (1 enabled)698 byte 9 max speed (0/1/2/3/4,699 async/20/40/80/160 for scsi)700 (0/1/2/3/4, 33/66/100/133/150 for ide )701 ================ =============================================702 703GUI_MODIFY_PASS_THROUGH704 Modify pass through disk705 706 ================ =============================================707 byte 0,1 length708 byte 2 command code 0x41709 byte 3 device #710 byte 4 scsi channel (0/1)711 byte 5 scsi id (0-->15)712 byte 6 scsi lun (0-->7)713 byte 7 tagged queue (1 enabled)714 byte 8 cache mode (1 enabled)715 byte 9 max speed (0/1/2/3/4,716 async/20/40/80/160 for scsi)717 (0/1/2/3/4, 33/66/100/133/150 for ide )718 ================ =============================================719 720GUI_DELETE_PASS_THROUGH721 Delete pass through disk722 723 ================ =============================================724 byte 0,1 length725 byte 2 command code 0x42726 byte 3 device# to be deleted727 ================ =============================================728GUI_IDENTIFY_DEVICE729 Identify Device730 731 ================ =============================================732 byte 0,1 length733 byte 2 command code 0x43734 byte 3 Flash Method735 (0:flash selected, 1:flash not selected)736 byte 4/5/6/7 IDE device mask to be flashed737 .. Note:: no response data available738 ================ =============================================739 740GUI_CREATE_RAIDSET741 Create Raid Set742 743 ================ =============================================744 byte 0,1 length745 byte 2 command code 0x50746 byte 3/4/5/6 device mask747 byte 7-22 raidset name (if byte 7 == 0:use default)748 ================ =============================================749 750GUI_DELETE_RAIDSET751 Delete Raid Set752 753 ================ =============================================754 byte 0,1 length755 byte 2 command code 0x51756 byte 3 raidset#757 ================ =============================================758 759GUI_EXPAND_RAIDSET760 Expand Raid Set761 762 ================ =============================================763 byte 0,1 length764 byte 2 command code 0x52765 byte 3 raidset#766 byte 4/5/6/7 device mask for expansion767 byte 8/9/10 (8:0 no change, 1 change, 0xff:terminate,768 9:new raid level,769 10:new stripe size770 0/1/2/3/4/5->4/8/16/32/64/128K )771 byte 11/12/13 repeat for each volume in the raidset772 ================ =============================================773 774GUI_ACTIVATE_RAIDSET775 Activate incomplete raid set776 777 ================ =============================================778 byte 0,1 length779 byte 2 command code 0x53780 byte 3 raidset#781 ================ =============================================782 783GUI_CREATE_HOT_SPARE784 Create hot spare disk785 786 ================ =============================================787 byte 0,1 length788 byte 2 command code 0x54789 byte 3/4/5/6 device mask for hot spare creation790 ================ =============================================791 792GUI_DELETE_HOT_SPARE793 Delete hot spare disk794 795 ================ =============================================796 byte 0,1 length797 byte 2 command code 0x55798 byte 3/4/5/6 device mask for hot spare deletion799 ================ =============================================800 801GUI_CREATE_VOLUME802 Create volume set803 804 ================ =============================================805 byte 0,1 length806 byte 2 command code 0x60807 byte 3 raidset#808 byte 4-19 volume set name809 (if byte4 == 0, use default)810 byte 20-27 volume capacity (blocks)811 byte 28 raid level812 byte 29 stripe size813 (0/1/2/3/4/5->4/8/16/32/64/128K)814 byte 30 channel815 byte 31 ID816 byte 32 LUN817 byte 33 1 enable tag818 byte 34 1 enable cache819 byte 35 speed820 (0/1/2/3/4->async/20/40/80/160 for scsi)821 (0/1/2/3/4->33/66/100/133/150 for IDE )822 byte 36 1 to select quick init823 ================ =============================================824 825GUI_MODIFY_VOLUME826 Modify volume Set827 828 ================ =============================================829 byte 0,1 length830 byte 2 command code 0x61831 byte 3 volumeset#832 byte 4-19 new volume set name833 (if byte4 == 0, not change)834 byte 20-27 new volume capacity (reserved)835 byte 28 new raid level836 byte 29 new stripe size837 (0/1/2/3/4/5->4/8/16/32/64/128K)838 byte 30 new channel839 byte 31 new ID840 byte 32 new LUN841 byte 33 1 enable tag842 byte 34 1 enable cache843 byte 35 speed844 (0/1/2/3/4->async/20/40/80/160 for scsi)845 (0/1/2/3/4->33/66/100/133/150 for IDE )846 ================ =============================================847 848GUI_DELETE_VOLUME849 Delete volume set850 851 ================ =============================================852 byte 0,1 length853 byte 2 command code 0x62854 byte 3 volumeset#855 ================ =============================================856 857GUI_START_CHECK_VOLUME858 Start volume consistency check859 860 ================ =============================================861 byte 0,1 length862 byte 2 command code 0x63863 byte 3 volumeset#864 ================ =============================================865 866GUI_STOP_CHECK_VOLUME867 Stop volume consistency check868 869 ================ =============================================870 byte 0,1 length871 byte 2 command code 0x64872 ================ =============================================873 8744. Returned data875----------------876 877(A) Header878 3 bytes sequence (0x5E, 0x01, 0x61)879(B) Length880 2 bytes881 (low byte 1st, excludes length and checksum byte)882(C)883 status or data:884 885 1) If length == 1 ==> 1 byte status code::886 887 #define GUI_OK 0x41888 #define GUI_RAIDSET_NOT_NORMAL 0x42889 #define GUI_VOLUMESET_NOT_NORMAL 0x43890 #define GUI_NO_RAIDSET 0x44891 #define GUI_NO_VOLUMESET 0x45892 #define GUI_NO_PHYSICAL_DRIVE 0x46893 #define GUI_PARAMETER_ERROR 0x47894 #define GUI_UNSUPPORTED_COMMAND 0x48895 #define GUI_DISK_CONFIG_CHANGED 0x49896 #define GUI_INVALID_PASSWORD 0x4a897 #define GUI_NO_DISK_SPACE 0x4b898 #define GUI_CHECKSUM_ERROR 0x4c899 #define GUI_PASSWORD_REQUIRED 0x4d900 901 2) If length > 1:902 903 data block returned from controller904 and the contents depends on the command code905 906(E) Checksum907 checksum of length and status or data byte908 909