📄 arcmsr_spec.txt
字号:
********************************************************************************* 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -