| ARECA FIRMWARE SPEC |
| =================== |
| |
| Usage of IOP331 adapter |
| ======================= |
| |
| (All In/Out is in IOP331's view) |
| |
| 1. Message 0 |
| ------------ |
| |
| - InitThread message and return code |
| |
| 2. Doorbell is used for RS-232 emulation |
| ---------------------------------------- |
| |
| inDoorBell |
| bit0 |
| data in ready |
| zDRIVER DATA WRITE OK) |
| bit1 |
| data out has been read |
| (DRIVER DATA READ OK) |
| |
| outDooeBell: |
| bit0 |
| data out ready |
| (IOP331 DATA WRITE OK) |
| bit1 |
| data in has been read |
| (IOP331 DATA READ OK) |
| |
| 3. Index Memory Usage |
| --------------------- |
| |
| ============ ========================================== |
| offset 0xf00 for RS232 out (request buffer) |
| offset 0xe00 for RS232 in (scratch buffer) |
| offset 0xa00 for inbound message code message_rwbuffer |
| (driver send to IOP331) |
| offset 0xa00 for outbound message code message_rwbuffer |
| (IOP331 send to driver) |
| ============ ========================================== |
| |
| 4. RS-232 emulation |
| ------------------- |
| |
| Currently 128 byte buffer is used: |
| |
| ============ ===================== |
| 1st uint32_t Data length (1--124) |
| Byte 4--127 Max 124 bytes of data |
| ============ ===================== |
| |
| 5. PostQ |
| -------- |
| |
| All SCSI Command must be sent through postQ: |
| |
| (inbound queue port) |
| Request frame must be 32 bytes aligned: |
| |
| #bit27--bit31 |
| flag for post ccb |
| #bit0--bit26 |
| real address (bit27--bit31) of post arcmsr_cdb |
| |
| ===== =================== |
| bit31 == =============== |
| 0 256 bytes frame |
| 1 512 bytes frame |
| == =============== |
| bit30 == ============== |
| 0 normal request |
| 1 BIOS request |
| == ============== |
| bit29 reserved |
| bit28 reserved |
| bit27 reserved |
| ===== =================== |
| |
| (outbount queue port) |
| Request reply: |
| |
| #bit27--bit31 |
| flag for reply |
| #bit0--bit26 |
| real address (bit27--bit31) of reply arcmsr_cdb |
| |
| ===== ======================================================= |
| bit31 must be 0 (for this type of reply) |
| bit30 reserved for BIOS handshake |
| bit29 reserved |
| bit28 == =================================================== |
| 0 no error, ignore AdapStatus/DevStatus/SenseData |
| 1 Error, error code in AdapStatus/DevStatus/SenseData |
| == =================================================== |
| bit27 reserved |
| ===== ======================================================= |
| |
| 6. BIOS request |
| --------------- |
| |
| All BIOS request is the same with request from PostQ |
| |
| Except: |
| |
| Request frame is sent from configuration space: |
| |
| ============ ========================== |
| offset: 0x78 Request Frame (bit30 == 1) |
| offset: 0x18 writeonly to generate |
| IRQ to IOP331 |
| ============ ========================== |
| |
| Completion of request:: |
| |
| (bit30 == 0, bit28==err flag) |
| |
| 7. Definition of SGL entry (structure) |
| -------------------------------------- |
| |
| 8. Message1 Out - Diag Status Code (????) |
| ----------------------------------------- |
| |
| 9. Message0 message code |
| ------------------------ |
| |
| ====== ================================================================= |
| 0x00 NOP |
| 0x01 Get Config |
| ->offset 0xa00 :for outbound message code message_rwbuffer |
| (IOP331 send to driver) |
| |
| ===================== ========================================== |
| Signature 0x87974060(4) |
| Request len 0x00000200(4) |
| numbers of queue 0x00000100(4) |
| SDRAM Size 0x00000100(4)-->256 MB |
| IDE Channels 0x00000008(4) |
| vendor 40 bytes char |
| model 8 bytes char |
| FirmVer 16 bytes char |
| Device Map 16 bytes char |
| FirmwareVersion DWORD |
| |
| - Added for checking of |
| new firmware capability |
| ===================== ========================================== |
| 0x02 Set Config |
| ->offset 0xa00 :for inbound message code message_rwbuffer |
| (driver send to IOP331) |
| |
| ========================= ================== |
| Signature 0x87974063(4) |
| UPPER32 of Request Frame (4)-->Driver Only |
| ========================= ================== |
| 0x03 Reset (Abort all queued Command) |
| 0x04 Stop Background Activity |
| 0x05 Flush Cache |
| 0x06 Start Background Activity |
| (re-start if background is halted) |
| 0x07 Check If Host Command Pending |
| (Novell May Need This Function) |
| 0x08 Set controller time |
| ->offset 0xa00 for inbound message code message_rwbuffer |
| (driver to IOP331) |
| |
| ====== ================== |
| byte 0 0xaa <-- signature |
| byte 1 0x55 <-- signature |
| byte 2 year (04) |
| byte 3 month (1..12) |
| byte 4 date (1..31) |
| byte 5 hour (0..23) |
| byte 6 minute (0..59) |
| byte 7 second (0..59) |
| ====== ================== |
| ====== ================================================================= |
| |
| |
| RS-232 Interface for Areca Raid Controller |
| ========================================== |
| |
| The low level command interface is exclusive with VT100 terminal |
| |
| 1. Sequence of command execution |
| -------------------------------- |
| |
| (A) Header |
| 3 bytes sequence (0x5E, 0x01, 0x61) |
| |
| (B) Command block |
| variable length of data including length, |
| command code, data and checksum byte |
| |
| (C) Return data |
| variable length of data |
| |
| 2. Command block |
| ---------------- |
| |
| (A) 1st byte |
| command block length (low byte) |
| |
| (B) 2nd byte |
| command block length (high byte) |
| |
| .. Note:: command block length shouldn't > 2040 bytes, |
| length excludes these two bytes |
| |
| (C) 3rd byte |
| command code |
| |
| (D) 4th and following bytes |
| variable length data bytes |
| |
| depends on command code |
| |
| (E) last byte |
| checksum byte (sum of 1st byte until last data byte) |
| |
| 3. Command code and associated data |
| ----------------------------------- |
| |
| The following are command code defined in raid controller Command |
| code 0x10--0x1? are used for system level management, |
| no password checking is needed and should be implemented in separate |
| well controlled utility and not for end user access. |
| Command code 0x20--0x?? always check the password, |
| password must be entered to enable these command:: |
| |
| enum |
| { |
| GUI_SET_SERIAL=0x10, |
| GUI_SET_VENDOR, |
| GUI_SET_MODEL, |
| GUI_IDENTIFY, |
| GUI_CHECK_PASSWORD, |
| GUI_LOGOUT, |
| GUI_HTTP, |
| GUI_SET_ETHERNET_ADDR, |
| GUI_SET_LOGO, |
| GUI_POLL_EVENT, |
| GUI_GET_EVENT, |
| GUI_GET_HW_MONITOR, |
| // GUI_QUICK_CREATE=0x20, (function removed) |
| GUI_GET_INFO_R=0x20, |
| GUI_GET_INFO_V, |
| GUI_GET_INFO_P, |
| GUI_GET_INFO_S, |
| GUI_CLEAR_EVENT, |
| GUI_MUTE_BEEPER=0x30, |
| GUI_BEEPER_SETTING, |
| GUI_SET_PASSWORD, |
| GUI_HOST_INTERFACE_MODE, |
| GUI_REBUILD_PRIORITY, |
| GUI_MAX_ATA_MODE, |
| GUI_RESET_CONTROLLER, |
| GUI_COM_PORT_SETTING, |
| GUI_NO_OPERATION, |
| GUI_DHCP_IP, |
| GUI_CREATE_PASS_THROUGH=0x40, |
| GUI_MODIFY_PASS_THROUGH, |
| GUI_DELETE_PASS_THROUGH, |
| GUI_IDENTIFY_DEVICE, |
| GUI_CREATE_RAIDSET=0x50, |
| GUI_DELETE_RAIDSET, |
| GUI_EXPAND_RAIDSET, |
| GUI_ACTIVATE_RAIDSET, |
| GUI_CREATE_HOT_SPARE, |
| GUI_DELETE_HOT_SPARE, |
| GUI_CREATE_VOLUME=0x60, |
| GUI_MODIFY_VOLUME, |
| GUI_DELETE_VOLUME, |
| GUI_START_CHECK_VOLUME, |
| GUI_STOP_CHECK_VOLUME |
| }; |
| |
| Command description |
| ^^^^^^^^^^^^^^^^^^^ |
| |
| GUI_SET_SERIAL |
| Set the controller serial# |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x10 |
| byte 3 password length (should be 0x0f) |
| byte 4-0x13 should be "ArEcATecHnoLogY" |
| byte 0x14--0x23 Serial number string (must be 16 bytes) |
| ================ ============================================= |
| |
| GUI_SET_VENDOR |
| Set vendor string for the controller |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x11 |
| byte 3 password length (should be 0x08) |
| byte 4-0x13 should be "ArEcAvAr" |
| byte 0x14--0x3B vendor string (must be 40 bytes) |
| ================ ============================================= |
| |
| GUI_SET_MODEL |
| Set the model name of the controller |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x12 |
| byte 3 password length (should be 0x08) |
| byte 4-0x13 should be "ArEcAvAr" |
| byte 0x14--0x1B model string (must be 8 bytes) |
| ================ ============================================= |
| |
| GUI_IDENTIFY |
| Identify device |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x13 |
| return "Areca RAID Subsystem " |
| ================ ============================================= |
| |
| GUI_CHECK_PASSWORD |
| Verify password |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x14 |
| byte 3 password length |
| byte 4-0x?? user password to be checked |
| ================ ============================================= |
| |
| GUI_LOGOUT |
| Logout GUI (force password checking on next command) |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x15 |
| ================ ============================================= |
| |
| GUI_HTTP |
| HTTP interface (reserved for Http proxy service)(0x16) |
| |
| GUI_SET_ETHERNET_ADDR |
| Set the ethernet MAC address |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x17 |
| byte 3 password length (should be 0x08) |
| byte 4-0x13 should be "ArEcAvAr" |
| byte 0x14--0x19 Ethernet MAC address (must be 6 bytes) |
| ================ ============================================= |
| |
| GUI_SET_LOGO |
| Set logo in HTTP |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x18 |
| byte 3 Page# (0/1/2/3) (0xff --> clear OEM logo) |
| byte 4/5/6/7 0x55/0xaa/0xa5/0x5a |
| byte 8 TITLE.JPG data (each page must be 2000 bytes) |
| |
| .. Note:: page0 1st 2 byte must be |
| actual length of the JPG file |
| ================ ============================================= |
| |
| GUI_POLL_EVENT |
| Poll If Event Log Changed |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x19 |
| ================ ============================================= |
| |
| GUI_GET_EVENT |
| Read Event |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x1a |
| byte 3 Event Page (0:1st page/1/2/3:last page) |
| ================ ============================================= |
| |
| GUI_GET_HW_MONITOR |
| Get HW monitor data |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x1b |
| byte 3 # of FANs(example 2) |
| byte 4 # of Voltage sensor(example 3) |
| byte 5 # of temperature sensor(example 2) |
| byte 6 # of power |
| byte 7/8 Fan#0 (RPM) |
| byte 9/10 Fan#1 |
| byte 11/12 Voltage#0 original value in ``*1000`` |
| byte 13/14 Voltage#0 value |
| byte 15/16 Voltage#1 org |
| byte 17/18 Voltage#1 |
| byte 19/20 Voltage#2 org |
| byte 21/22 Voltage#2 |
| byte 23 Temp#0 |
| byte 24 Temp#1 |
| byte 25 Power indicator (bit0 power#0, |
| bit1 power#1) |
| byte 26 UPS indicator |
| ================ ============================================= |
| |
| GUI_QUICK_CREATE |
| Quick create raid/volume set |
| |
| ================ ============================================== |
| byte 0,1 length |
| byte 2 command code 0x20 |
| byte 3/4/5/6 raw capacity |
| byte 7 raid level |
| byte 8 stripe size |
| byte 9 spare |
| byte 10/11/12/13 device mask (the devices to create raid/volume) |
| ================ ============================================== |
| |
| This function is removed, application like |
| to implement quick create function |
| |
| need to use GUI_CREATE_RAIDSET and GUI_CREATE_VOLUMESET function. |
| |
| GUI_GET_INFO_R |
| Get Raid Set Information |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x20 |
| byte 3 raidset# |
| ================ ============================================= |
| |
| :: |
| |
| typedef struct sGUI_RAIDSET |
| { |
| BYTE grsRaidSetName[16]; |
| DWORD grsCapacity; |
| DWORD grsCapacityX; |
| DWORD grsFailMask; |
| BYTE grsDevArray[32]; |
| BYTE grsMemberDevices; |
| BYTE grsNewMemberDevices; |
| BYTE grsRaidState; |
| BYTE grsVolumes; |
| BYTE grsVolumeList[16]; |
| BYTE grsRes1; |
| BYTE grsRes2; |
| BYTE grsRes3; |
| BYTE grsFreeSegments; |
| DWORD grsRawStripes[8]; |
| DWORD grsRes4; |
| DWORD grsRes5; // Total to 128 bytes |
| DWORD grsRes6; // Total to 128 bytes |
| } sGUI_RAIDSET, *pGUI_RAIDSET; |
| |
| GUI_GET_INFO_V |
| Get Volume Set Information |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x21 |
| byte 3 volumeset# |
| ================ ============================================= |
| |
| :: |
| |
| typedef struct sGUI_VOLUMESET |
| { |
| BYTE gvsVolumeName[16]; // 16 |
| DWORD gvsCapacity; |
| DWORD gvsCapacityX; |
| DWORD gvsFailMask; |
| DWORD gvsStripeSize; |
| DWORD gvsNewFailMask; |
| DWORD gvsNewStripeSize; |
| DWORD gvsVolumeStatus; |
| DWORD gvsProgress; // 32 |
| sSCSI_ATTR gvsScsi; |
| BYTE gvsMemberDisks; |
| BYTE gvsRaidLevel; // 8 |
| BYTE gvsNewMemberDisks; |
| BYTE gvsNewRaidLevel; |
| BYTE gvsRaidSetNumber; |
| BYTE gvsRes0; // 4 |
| BYTE gvsRes1[4]; // 64 bytes |
| } sGUI_VOLUMESET, *pGUI_VOLUMESET; |
| |
| GUI_GET_INFO_P |
| Get Physical Drive Information |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x22 |
| byte 3 drive # (from 0 to max-channels - 1) |
| ================ ============================================= |
| |
| :: |
| |
| typedef struct sGUI_PHY_DRV |
| { |
| BYTE gpdModelName[40]; |
| BYTE gpdSerialNumber[20]; |
| BYTE gpdFirmRev[8]; |
| DWORD gpdCapacity; |
| DWORD gpdCapacityX; // Reserved for expansion |
| BYTE gpdDeviceState; |
| BYTE gpdPioMode; |
| BYTE gpdCurrentUdmaMode; |
| BYTE gpdUdmaMode; |
| BYTE gpdDriveSelect; |
| BYTE gpdRaidNumber; // 0xff if not belongs to a raid set |
| sSCSI_ATTR gpdScsi; |
| BYTE gpdReserved[40]; // Total to 128 bytes |
| } sGUI_PHY_DRV, *pGUI_PHY_DRV; |
| |
| GUI_GET_INFO_S |
| Get System Information |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x23 |
| ================ ============================================= |
| |
| :: |
| |
| typedef struct sCOM_ATTR |
| { |
| BYTE comBaudRate; |
| BYTE comDataBits; |
| BYTE comStopBits; |
| BYTE comParity; |
| BYTE comFlowControl; |
| } sCOM_ATTR, *pCOM_ATTR; |
| typedef struct sSYSTEM_INFO |
| { |
| BYTE gsiVendorName[40]; |
| BYTE gsiSerialNumber[16]; |
| BYTE gsiFirmVersion[16]; |
| BYTE gsiBootVersion[16]; |
| BYTE gsiMbVersion[16]; |
| BYTE gsiModelName[8]; |
| BYTE gsiLocalIp[4]; |
| BYTE gsiCurrentIp[4]; |
| DWORD gsiTimeTick; |
| DWORD gsiCpuSpeed; |
| DWORD gsiICache; |
| DWORD gsiDCache; |
| DWORD gsiScache; |
| DWORD gsiMemorySize; |
| DWORD gsiMemorySpeed; |
| DWORD gsiEvents; |
| BYTE gsiMacAddress[6]; |
| BYTE gsiDhcp; |
| BYTE gsiBeeper; |
| BYTE gsiChannelUsage; |
| BYTE gsiMaxAtaMode; |
| BYTE gsiSdramEcc; // 1:if ECC enabled |
| BYTE gsiRebuildPriority; |
| sCOM_ATTR gsiComA; // 5 bytes |
| sCOM_ATTR gsiComB; // 5 bytes |
| BYTE gsiIdeChannels; |
| BYTE gsiScsiHostChannels; |
| BYTE gsiIdeHostChannels; |
| BYTE gsiMaxVolumeSet; |
| BYTE gsiMaxRaidSet; |
| BYTE gsiEtherPort; // 1:if ether net port supported |
| BYTE gsiRaid6Engine; // 1:Raid6 engine supported |
| BYTE gsiRes[75]; |
| } sSYSTEM_INFO, *pSYSTEM_INFO; |
| |
| GUI_CLEAR_EVENT |
| Clear System Event |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x24 |
| ================ ============================================= |
| |
| GUI_MUTE_BEEPER |
| Mute current beeper |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x30 |
| ================ ============================================= |
| GUI_BEEPER_SETTING |
| Disable beeper |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x31 |
| byte 3 0->disable, 1->enable |
| ================ ============================================= |
| |
| GUI_SET_PASSWORD |
| Change password |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x32 |
| byte 3 pass word length ( must <= 15 ) |
| byte 4 password (must be alpha-numerical) |
| ================ ============================================= |
| |
| GUI_HOST_INTERFACE_MODE |
| Set host interface mode |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x33 |
| byte 3 0->Independent, 1->cluster |
| ================ ============================================= |
| |
| GUI_REBUILD_PRIORITY |
| Set rebuild priority |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x34 |
| byte 3 0/1/2/3 (low->high) |
| ================ ============================================= |
| |
| GUI_MAX_ATA_MODE |
| Set maximum ATA mode to be used |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x35 |
| byte 3 0/1/2/3 (133/100/66/33) |
| ================ ============================================= |
| |
| GUI_RESET_CONTROLLER |
| Reset Controller |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x36 |
| * Response with VT100 screen (discard it) |
| ================ ============================================= |
| |
| GUI_COM_PORT_SETTING |
| COM port setting |
| |
| ================ ================================================= |
| byte 0,1 length |
| byte 2 command code 0x37 |
| byte 3 0->COMA (term port), |
| 1->COMB (debug port) |
| byte 4 0/1/2/3/4/5/6/7 |
| (1200/2400/4800/9600/19200/38400/57600/115200) |
| byte 5 data bit |
| (0:7 bit, 1:8 bit must be 8 bit) |
| byte 6 stop bit (0:1, 1:2 stop bits) |
| byte 7 parity (0:none, 1:off, 2:even) |
| byte 8 flow control |
| (0:none, 1:xon/xoff, 2:hardware => must use none) |
| ================ ================================================= |
| |
| GUI_NO_OPERATION |
| No operation |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x38 |
| ================ ============================================= |
| |
| GUI_DHCP_IP |
| Set DHCP option and local IP address |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x39 |
| byte 3 0:dhcp disabled, 1:dhcp enabled |
| byte 4/5/6/7 IP address |
| ================ ============================================= |
| |
| GUI_CREATE_PASS_THROUGH |
| Create pass through disk |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x40 |
| byte 3 device # |
| byte 4 scsi channel (0/1) |
| byte 5 scsi id (0-->15) |
| byte 6 scsi lun (0-->7) |
| byte 7 tagged queue (1 enabled) |
| byte 8 cache mode (1 enabled) |
| byte 9 max speed (0/1/2/3/4, |
| async/20/40/80/160 for scsi) |
| (0/1/2/3/4, 33/66/100/133/150 for ide ) |
| ================ ============================================= |
| |
| GUI_MODIFY_PASS_THROUGH |
| Modify pass through disk |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x41 |
| byte 3 device # |
| byte 4 scsi channel (0/1) |
| byte 5 scsi id (0-->15) |
| byte 6 scsi lun (0-->7) |
| byte 7 tagged queue (1 enabled) |
| byte 8 cache mode (1 enabled) |
| byte 9 max speed (0/1/2/3/4, |
| async/20/40/80/160 for scsi) |
| (0/1/2/3/4, 33/66/100/133/150 for ide ) |
| ================ ============================================= |
| |
| GUI_DELETE_PASS_THROUGH |
| Delete pass through disk |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x42 |
| byte 3 device# to be deleted |
| ================ ============================================= |
| GUI_IDENTIFY_DEVICE |
| Identify Device |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x43 |
| byte 3 Flash Method |
| (0:flash selected, 1:flash not selected) |
| byte 4/5/6/7 IDE device mask to be flashed |
| .. Note:: no response data available |
| ================ ============================================= |
| |
| GUI_CREATE_RAIDSET |
| Create Raid Set |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x50 |
| byte 3/4/5/6 device mask |
| byte 7-22 raidset name (if byte 7 == 0:use default) |
| ================ ============================================= |
| |
| GUI_DELETE_RAIDSET |
| Delete Raid Set |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x51 |
| byte 3 raidset# |
| ================ ============================================= |
| |
| GUI_EXPAND_RAIDSET |
| Expand Raid Set |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x52 |
| byte 3 raidset# |
| byte 4/5/6/7 device mask for expansion |
| byte 8/9/10 (8:0 no change, 1 change, 0xff:terminate, |
| 9:new raid level, |
| 10:new stripe size |
| 0/1/2/3/4/5->4/8/16/32/64/128K ) |
| byte 11/12/13 repeat for each volume in the raidset |
| ================ ============================================= |
| |
| GUI_ACTIVATE_RAIDSET |
| Activate incomplete raid set |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x53 |
| byte 3 raidset# |
| ================ ============================================= |
| |
| GUI_CREATE_HOT_SPARE |
| Create hot spare disk |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x54 |
| byte 3/4/5/6 device mask for hot spare creation |
| ================ ============================================= |
| |
| GUI_DELETE_HOT_SPARE |
| Delete hot spare disk |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x55 |
| byte 3/4/5/6 device mask for hot spare deletion |
| ================ ============================================= |
| |
| GUI_CREATE_VOLUME |
| Create volume set |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x60 |
| byte 3 raidset# |
| byte 4-19 volume set name |
| (if byte4 == 0, use default) |
| byte 20-27 volume capacity (blocks) |
| byte 28 raid level |
| byte 29 stripe size |
| (0/1/2/3/4/5->4/8/16/32/64/128K) |
| byte 30 channel |
| byte 31 ID |
| byte 32 LUN |
| byte 33 1 enable tag |
| byte 34 1 enable cache |
| byte 35 speed |
| (0/1/2/3/4->async/20/40/80/160 for scsi) |
| (0/1/2/3/4->33/66/100/133/150 for IDE ) |
| byte 36 1 to select quick init |
| ================ ============================================= |
| |
| GUI_MODIFY_VOLUME |
| Modify volume Set |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x61 |
| byte 3 volumeset# |
| byte 4-19 new volume set name |
| (if byte4 == 0, not change) |
| byte 20-27 new volume capacity (reserved) |
| byte 28 new raid level |
| byte 29 new stripe size |
| (0/1/2/3/4/5->4/8/16/32/64/128K) |
| byte 30 new channel |
| byte 31 new ID |
| byte 32 new LUN |
| byte 33 1 enable tag |
| byte 34 1 enable cache |
| byte 35 speed |
| (0/1/2/3/4->async/20/40/80/160 for scsi) |
| (0/1/2/3/4->33/66/100/133/150 for IDE ) |
| ================ ============================================= |
| |
| GUI_DELETE_VOLUME |
| Delete volume set |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x62 |
| byte 3 volumeset# |
| ================ ============================================= |
| |
| GUI_START_CHECK_VOLUME |
| Start volume consistency check |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x63 |
| byte 3 volumeset# |
| ================ ============================================= |
| |
| GUI_STOP_CHECK_VOLUME |
| Stop volume consistency check |
| |
| ================ ============================================= |
| byte 0,1 length |
| byte 2 command code 0x64 |
| ================ ============================================= |
| |
| 4. Returned data |
| ---------------- |
| |
| (A) Header |
| 3 bytes sequence (0x5E, 0x01, 0x61) |
| (B) Length |
| 2 bytes |
| (low byte 1st, excludes length and checksum byte) |
| (C) |
| status or data: |
| |
| 1) If length == 1 ==> 1 byte status code:: |
| |
| #define GUI_OK 0x41 |
| #define GUI_RAIDSET_NOT_NORMAL 0x42 |
| #define GUI_VOLUMESET_NOT_NORMAL 0x43 |
| #define GUI_NO_RAIDSET 0x44 |
| #define GUI_NO_VOLUMESET 0x45 |
| #define GUI_NO_PHYSICAL_DRIVE 0x46 |
| #define GUI_PARAMETER_ERROR 0x47 |
| #define GUI_UNSUPPORTED_COMMAND 0x48 |
| #define GUI_DISK_CONFIG_CHANGED 0x49 |
| #define GUI_INVALID_PASSWORD 0x4a |
| #define GUI_NO_DISK_SPACE 0x4b |
| #define GUI_CHECKSUM_ERROR 0x4c |
| #define GUI_PASSWORD_REQUIRED 0x4d |
| |
| 2) If length > 1: |
| |
| data block returned from controller |
| and the contents depends on the command code |
| |
| (E) Checksum |
| checksum of length and status or data byte |
| |