4 Usage of IOP331 adapter
5 =======================
7 (All In/Out is in IOP331's view)
12 - InitThread message and return code
14 2. Doorbell is used for RS-232 emulation
15 ----------------------------------------
20 zDRIVER DATA WRITE OK)
22 data out has been read
28 (IOP331 DATA WRITE OK)
36 ============ ==========================================
37 offset 0xf00 for RS232 out (request buffer)
38 offset 0xe00 for RS232 in (scratch buffer)
39 offset 0xa00 for inbound message code message_rwbuffer
40 (driver send to IOP331)
41 offset 0xa00 for outbound message code message_rwbuffer
42 (IOP331 send to driver)
43 ============ ==========================================
48 Currently 128 byte buffer is used:
50 ============ =====================
51 1st uint32_t Data length (1--124)
52 Byte 4--127 Max 124 bytes of data
53 ============ =====================
58 All SCSI Command must be sent through postQ:
61 Request frame must be 32 bytes aligned:
66 real address (bit27--bit31) of post arcmsr_cdb
68 ===== ===================
69 bit31 == ===============
73 bit30 == ==============
80 ===== ===================
88 real address (bit27--bit31) of reply arcmsr_cdb
90 ===== =======================================================
91 bit31 must be 0 (for this type of reply)
92 bit30 reserved for BIOS handshake
94 bit28 == ===================================================
95 0 no error, ignore AdapStatus/DevStatus/SenseData
96 1 Error, error code in AdapStatus/DevStatus/SenseData
97 == ===================================================
99 ===== =======================================================
104 All BIOS request is the same with request from PostQ
108 Request frame is sent from configuration space:
110 ============ ==========================
111 offset: 0x78 Request Frame (bit30 == 1)
112 offset: 0x18 writeonly to generate
114 ============ ==========================
116 Completion of request::
118 (bit30 == 0, bit28==err flag)
120 7. Definition of SGL entry (structure)
121 --------------------------------------
123 8. Message1 Out - Diag Status Code (????)
124 -----------------------------------------
126 9. Message0 message code
127 ------------------------
129 ====== =================================================================
132 ->offset 0xa00 :for outbound message code message_rwbuffer
133 (IOP331 send to driver)
135 ===================== ==========================================
136 Signature 0x87974060(4)
137 Request len 0x00000200(4)
138 numbers of queue 0x00000100(4)
139 SDRAM Size 0x00000100(4)-->256 MB
140 IDE Channels 0x00000008(4)
143 FirmVer 16 bytes char
144 Device Map 16 bytes char
145 FirmwareVersion DWORD
147 - Added for checking of
148 new firmware capability
149 ===================== ==========================================
151 ->offset 0xa00 :for inbound message code message_rwbuffer
152 (driver send to IOP331)
154 ========================= ==================
155 Signature 0x87974063(4)
156 UPPER32 of Request Frame (4)-->Driver Only
157 ========================= ==================
158 0x03 Reset (Abort all queued Command)
159 0x04 Stop Background Activity
161 0x06 Start Background Activity
162 (re-start if background is halted)
163 0x07 Check If Host Command Pending
164 (Novell May Need This Function)
165 0x08 Set controller time
166 ->offset 0xa00 for inbound message code message_rwbuffer
169 ====== ==================
170 byte 0 0xaa <-- signature
171 byte 1 0x55 <-- signature
176 byte 6 minute (0..59)
177 byte 7 second (0..59)
178 ====== ==================
179 ====== =================================================================
182 RS-232 Interface for Areca Raid Controller
183 ==========================================
185 The low level command interface is exclusive with VT100 terminal
187 1. Sequence of command execution
188 --------------------------------
191 3 bytes sequence (0x5E, 0x01, 0x61)
194 variable length of data including length,
195 command code, data and checksum byte
198 variable length of data
204 command block length (low byte)
207 command block length (high byte)
209 .. Note:: command block length shouldn't > 2040 bytes,
210 length excludes these two bytes
215 (D) 4th and following bytes
216 variable length data bytes
218 depends on command code
221 checksum byte (sum of 1st byte until last data byte)
223 3. Command code and associated data
224 -----------------------------------
226 The following are command code defined in raid controller Command
227 code 0x10--0x1? are used for system level management,
228 no password checking is needed and should be implemented in separate
229 well controlled utility and not for end user access.
230 Command code 0x20--0x?? always check the password,
231 password must be entered to enable these command::
242 GUI_SET_ETHERNET_ADDR,
247 // GUI_QUICK_CREATE=0x20, (function removed)
253 GUI_MUTE_BEEPER=0x30,
256 GUI_HOST_INTERFACE_MODE,
257 GUI_REBUILD_PRIORITY,
259 GUI_RESET_CONTROLLER,
260 GUI_COM_PORT_SETTING,
263 GUI_CREATE_PASS_THROUGH=0x40,
264 GUI_MODIFY_PASS_THROUGH,
265 GUI_DELETE_PASS_THROUGH,
267 GUI_CREATE_RAIDSET=0x50,
270 GUI_ACTIVATE_RAIDSET,
271 GUI_CREATE_HOT_SPARE,
272 GUI_DELETE_HOT_SPARE,
273 GUI_CREATE_VOLUME=0x60,
276 GUI_START_CHECK_VOLUME,
277 GUI_STOP_CHECK_VOLUME
284 Set the controller serial#
286 ================ =============================================
288 byte 2 command code 0x10
289 byte 3 password length (should be 0x0f)
290 byte 4-0x13 should be "ArEcATecHnoLogY"
291 byte 0x14--0x23 Serial number string (must be 16 bytes)
292 ================ =============================================
295 Set vendor string for the controller
297 ================ =============================================
299 byte 2 command code 0x11
300 byte 3 password length (should be 0x08)
301 byte 4-0x13 should be "ArEcAvAr"
302 byte 0x14--0x3B vendor string (must be 40 bytes)
303 ================ =============================================
306 Set the model name of the controller
308 ================ =============================================
310 byte 2 command code 0x12
311 byte 3 password length (should be 0x08)
312 byte 4-0x13 should be "ArEcAvAr"
313 byte 0x14--0x1B model string (must be 8 bytes)
314 ================ =============================================
319 ================ =============================================
321 byte 2 command code 0x13
322 return "Areca RAID Subsystem "
323 ================ =============================================
328 ================ =============================================
330 byte 2 command code 0x14
331 byte 3 password length
332 byte 4-0x?? user password to be checked
333 ================ =============================================
336 Logout GUI (force password checking on next command)
338 ================ =============================================
340 byte 2 command code 0x15
341 ================ =============================================
344 HTTP interface (reserved for Http proxy service)(0x16)
346 GUI_SET_ETHERNET_ADDR
347 Set the ethernet MAC address
349 ================ =============================================
351 byte 2 command code 0x17
352 byte 3 password length (should be 0x08)
353 byte 4-0x13 should be "ArEcAvAr"
354 byte 0x14--0x19 Ethernet MAC address (must be 6 bytes)
355 ================ =============================================
360 ================ =============================================
362 byte 2 command code 0x18
363 byte 3 Page# (0/1/2/3) (0xff --> clear OEM logo)
364 byte 4/5/6/7 0x55/0xaa/0xa5/0x5a
365 byte 8 TITLE.JPG data (each page must be 2000 bytes)
367 .. Note:: page0 1st 2 byte must be
368 actual length of the JPG file
369 ================ =============================================
372 Poll If Event Log Changed
374 ================ =============================================
376 byte 2 command code 0x19
377 ================ =============================================
382 ================ =============================================
384 byte 2 command code 0x1a
385 byte 3 Event Page (0:1st page/1/2/3:last page)
386 ================ =============================================
391 ================ =============================================
393 byte 2 command code 0x1b
394 byte 3 # of FANs(example 2)
395 byte 4 # of Voltage sensor(example 3)
396 byte 5 # of temperature sensor(example 2)
400 byte 11/12 Voltage#0 original value in ``*1000``
401 byte 13/14 Voltage#0 value
402 byte 15/16 Voltage#1 org
404 byte 19/20 Voltage#2 org
408 byte 25 Power indicator (bit0 power#0,
410 byte 26 UPS indicator
411 ================ =============================================
414 Quick create raid/volume set
416 ================ ==============================================
418 byte 2 command code 0x20
419 byte 3/4/5/6 raw capacity
423 byte 10/11/12/13 device mask (the devices to create raid/volume)
424 ================ ==============================================
426 This function is removed, application like
427 to implement quick create function
429 need to use GUI_CREATE_RAIDSET and GUI_CREATE_VOLUMESET function.
432 Get Raid Set Information
434 ================ =============================================
436 byte 2 command code 0x20
438 ================ =============================================
442 typedef struct sGUI_RAIDSET
444 BYTE grsRaidSetName[16];
448 BYTE grsDevArray[32];
449 BYTE grsMemberDevices;
450 BYTE grsNewMemberDevices;
453 BYTE grsVolumeList[16];
457 BYTE grsFreeSegments;
458 DWORD grsRawStripes[8];
460 DWORD grsRes5; // Total to 128 bytes
461 DWORD grsRes6; // Total to 128 bytes
462 } sGUI_RAIDSET, *pGUI_RAIDSET;
465 Get Volume Set Information
467 ================ =============================================
469 byte 2 command code 0x21
471 ================ =============================================
475 typedef struct sGUI_VOLUMESET
477 BYTE gvsVolumeName[16]; // 16
482 DWORD gvsNewFailMask;
483 DWORD gvsNewStripeSize;
484 DWORD gvsVolumeStatus;
485 DWORD gvsProgress; // 32
488 BYTE gvsRaidLevel; // 8
489 BYTE gvsNewMemberDisks;
490 BYTE gvsNewRaidLevel;
491 BYTE gvsRaidSetNumber;
493 BYTE gvsRes1[4]; // 64 bytes
494 } sGUI_VOLUMESET, *pGUI_VOLUMESET;
497 Get Physical Drive Information
499 ================ =============================================
501 byte 2 command code 0x22
502 byte 3 drive # (from 0 to max-channels - 1)
503 ================ =============================================
507 typedef struct sGUI_PHY_DRV
509 BYTE gpdModelName[40];
510 BYTE gpdSerialNumber[20];
513 DWORD gpdCapacityX; // Reserved for expansion
516 BYTE gpdCurrentUdmaMode;
519 BYTE gpdRaidNumber; // 0xff if not belongs to a raid set
521 BYTE gpdReserved[40]; // Total to 128 bytes
522 } sGUI_PHY_DRV, *pGUI_PHY_DRV;
525 Get System Information
527 ================ =============================================
529 byte 2 command code 0x23
530 ================ =============================================
534 typedef struct sCOM_ATTR
541 } sCOM_ATTR, *pCOM_ATTR;
542 typedef struct sSYSTEM_INFO
544 BYTE gsiVendorName[40];
545 BYTE gsiSerialNumber[16];
546 BYTE gsiFirmVersion[16];
547 BYTE gsiBootVersion[16];
548 BYTE gsiMbVersion[16];
549 BYTE gsiModelName[8];
551 BYTE gsiCurrentIp[4];
558 DWORD gsiMemorySpeed;
560 BYTE gsiMacAddress[6];
563 BYTE gsiChannelUsage;
565 BYTE gsiSdramEcc; // 1:if ECC enabled
566 BYTE gsiRebuildPriority;
567 sCOM_ATTR gsiComA; // 5 bytes
568 sCOM_ATTR gsiComB; // 5 bytes
570 BYTE gsiScsiHostChannels;
571 BYTE gsiIdeHostChannels;
572 BYTE gsiMaxVolumeSet;
574 BYTE gsiEtherPort; // 1:if ether net port supported
575 BYTE gsiRaid6Engine; // 1:Raid6 engine supported
577 } sSYSTEM_INFO, *pSYSTEM_INFO;
582 ================ =============================================
584 byte 2 command code 0x24
585 ================ =============================================
590 ================ =============================================
592 byte 2 command code 0x30
593 ================ =============================================
597 ================ =============================================
599 byte 2 command code 0x31
600 byte 3 0->disable, 1->enable
601 ================ =============================================
606 ================ =============================================
608 byte 2 command code 0x32
609 byte 3 pass word length ( must <= 15 )
610 byte 4 password (must be alpha-numerical)
611 ================ =============================================
613 GUI_HOST_INTERFACE_MODE
614 Set host interface mode
616 ================ =============================================
618 byte 2 command code 0x33
619 byte 3 0->Independent, 1->cluster
620 ================ =============================================
625 ================ =============================================
627 byte 2 command code 0x34
628 byte 3 0/1/2/3 (low->high)
629 ================ =============================================
632 Set maximum ATA mode to be used
634 ================ =============================================
636 byte 2 command code 0x35
637 byte 3 0/1/2/3 (133/100/66/33)
638 ================ =============================================
643 ================ =============================================
645 byte 2 command code 0x36
646 * Response with VT100 screen (discard it)
647 ================ =============================================
652 ================ =================================================
654 byte 2 command code 0x37
655 byte 3 0->COMA (term port),
657 byte 4 0/1/2/3/4/5/6/7
658 (1200/2400/4800/9600/19200/38400/57600/115200)
660 (0:7 bit, 1:8 bit must be 8 bit)
661 byte 6 stop bit (0:1, 1:2 stop bits)
662 byte 7 parity (0:none, 1:off, 2:even)
664 (0:none, 1:xon/xoff, 2:hardware => must use none)
665 ================ =================================================
670 ================ =============================================
672 byte 2 command code 0x38
673 ================ =============================================
676 Set DHCP option and local IP address
678 ================ =============================================
680 byte 2 command code 0x39
681 byte 3 0:dhcp disabled, 1:dhcp enabled
682 byte 4/5/6/7 IP address
683 ================ =============================================
685 GUI_CREATE_PASS_THROUGH
686 Create pass through disk
688 ================ =============================================
690 byte 2 command code 0x40
692 byte 4 scsi channel (0/1)
693 byte 5 scsi id (0-->15)
694 byte 6 scsi lun (0-->7)
695 byte 7 tagged queue (1 enabled)
696 byte 8 cache mode (1 enabled)
697 byte 9 max speed (0/1/2/3/4,
698 async/20/40/80/160 for scsi)
699 (0/1/2/3/4, 33/66/100/133/150 for ide )
700 ================ =============================================
702 GUI_MODIFY_PASS_THROUGH
703 Modify pass through disk
705 ================ =============================================
707 byte 2 command code 0x41
709 byte 4 scsi channel (0/1)
710 byte 5 scsi id (0-->15)
711 byte 6 scsi lun (0-->7)
712 byte 7 tagged queue (1 enabled)
713 byte 8 cache mode (1 enabled)
714 byte 9 max speed (0/1/2/3/4,
715 async/20/40/80/160 for scsi)
716 (0/1/2/3/4, 33/66/100/133/150 for ide )
717 ================ =============================================
719 GUI_DELETE_PASS_THROUGH
720 Delete pass through disk
722 ================ =============================================
724 byte 2 command code 0x42
725 byte 3 device# to be deleted
726 ================ =============================================
730 ================ =============================================
732 byte 2 command code 0x43
734 (0:flash selected, 1:flash not selected)
735 byte 4/5/6/7 IDE device mask to be flashed
736 .. Note:: no response data available
737 ================ =============================================
742 ================ =============================================
744 byte 2 command code 0x50
745 byte 3/4/5/6 device mask
746 byte 7-22 raidset name (if byte 7 == 0:use default)
747 ================ =============================================
752 ================ =============================================
754 byte 2 command code 0x51
756 ================ =============================================
761 ================ =============================================
763 byte 2 command code 0x52
765 byte 4/5/6/7 device mask for expansion
766 byte 8/9/10 (8:0 no change, 1 change, 0xff:terminate,
769 0/1/2/3/4/5->4/8/16/32/64/128K )
770 byte 11/12/13 repeat for each volume in the raidset
771 ================ =============================================
774 Activate incomplete raid set
776 ================ =============================================
778 byte 2 command code 0x53
780 ================ =============================================
783 Create hot spare disk
785 ================ =============================================
787 byte 2 command code 0x54
788 byte 3/4/5/6 device mask for hot spare creation
789 ================ =============================================
792 Delete hot spare disk
794 ================ =============================================
796 byte 2 command code 0x55
797 byte 3/4/5/6 device mask for hot spare deletion
798 ================ =============================================
803 ================ =============================================
805 byte 2 command code 0x60
807 byte 4-19 volume set name
808 (if byte4 == 0, use default)
809 byte 20-27 volume capacity (blocks)
812 (0/1/2/3/4/5->4/8/16/32/64/128K)
817 byte 34 1 enable cache
819 (0/1/2/3/4->async/20/40/80/160 for scsi)
820 (0/1/2/3/4->33/66/100/133/150 for IDE )
821 byte 36 1 to select quick init
822 ================ =============================================
827 ================ =============================================
829 byte 2 command code 0x61
831 byte 4-19 new volume set name
832 (if byte4 == 0, not change)
833 byte 20-27 new volume capacity (reserved)
834 byte 28 new raid level
835 byte 29 new stripe size
836 (0/1/2/3/4/5->4/8/16/32/64/128K)
841 byte 34 1 enable cache
843 (0/1/2/3/4->async/20/40/80/160 for scsi)
844 (0/1/2/3/4->33/66/100/133/150 for IDE )
845 ================ =============================================
850 ================ =============================================
852 byte 2 command code 0x62
854 ================ =============================================
856 GUI_START_CHECK_VOLUME
857 Start volume consistency check
859 ================ =============================================
861 byte 2 command code 0x63
863 ================ =============================================
865 GUI_STOP_CHECK_VOLUME
866 Stop volume consistency check
868 ================ =============================================
870 byte 2 command code 0x64
871 ================ =============================================
877 3 bytes sequence (0x5E, 0x01, 0x61)
880 (low byte 1st, excludes length and checksum byte)
884 1) If length == 1 ==> 1 byte status code::
887 #define GUI_RAIDSET_NOT_NORMAL 0x42
888 #define GUI_VOLUMESET_NOT_NORMAL 0x43
889 #define GUI_NO_RAIDSET 0x44
890 #define GUI_NO_VOLUMESET 0x45
891 #define GUI_NO_PHYSICAL_DRIVE 0x46
892 #define GUI_PARAMETER_ERROR 0x47
893 #define GUI_UNSUPPORTED_COMMAND 0x48
894 #define GUI_DISK_CONFIG_CHANGED 0x49
895 #define GUI_INVALID_PASSWORD 0x4a
896 #define GUI_NO_DISK_SPACE 0x4b
897 #define GUI_CHECKSUM_ERROR 0x4c
898 #define GUI_PASSWORD_REQUIRED 0x4d
902 data block returned from controller
903 and the contents depends on the command code
906 checksum of length and status or data byte