123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575 |
- *******************************************************************************
- ** 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
- ** (DRIVER 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
- **************************************************************************
|