908 lines
25 KiB
ReStructuredText
908 lines
25 KiB
ReStructuredText
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
|
|
|