xref: /linux/Documentation/scsi/arcmsr_spec.rst (revision 02680c23d7b3febe45ea3d4f9818c2b2dc89020a)
1ARECA FIRMWARE SPEC
2===================
3
4Usage of IOP331 adapter
5=======================
6
7(All In/Out is in IOP331's view)
8
91. Message 0
10------------
11
12- InitThread message and return code
13
142. Doorbell is used for RS-232 emulation
15----------------------------------------
16
17inDoorBell
18    bit0
19	data in ready
20	zDRIVER DATA WRITE OK)
21    bit1
22	data out has been read
23	(DRIVER DATA READ OK)
24
25outDooeBell:
26    bit0
27	data out ready
28	(IOP331 DATA WRITE OK)
29    bit1
30	data in has been read
31	(IOP331 DATA READ OK)
32
333. Index Memory Usage
34---------------------
35
36============   ==========================================
37offset 0xf00   for RS232 out (request buffer)
38offset 0xe00   for RS232 in  (scratch buffer)
39offset 0xa00   for inbound message code message_rwbuffer
40	       (driver send to IOP331)
41offset 0xa00   for outbound message code message_rwbuffer
42	       (IOP331 send to driver)
43============   ==========================================
44
454. RS-232 emulation
46-------------------
47
48Currently 128 byte buffer is used:
49
50============   =====================
511st uint32_t   Data length (1--124)
52Byte 4--127    Max 124 bytes of data
53============   =====================
54
555. PostQ
56--------
57
58All SCSI Command must be sent through postQ:
59
60    (inbound queue port)
61	Request frame must be 32 bytes aligned:
62
63	    #bit27--bit31
64		flag for post ccb
65	    #bit0--bit26
66		real address (bit27--bit31) of post arcmsr_cdb
67
68		=====   ===================
69		bit31   ==  ===============
70			0   256 bytes frame
71			1   512 bytes frame
72			==  ===============
73		bit30   ==  ==============
74			0   normal request
75			1   BIOS request
76			==  ==============
77		bit29   reserved
78		bit28   reserved
79		bit27   reserved
80		=====   ===================
81
82    (outbount queue port)
83	Request reply:
84
85	    #bit27--bit31
86		    flag for reply
87	    #bit0--bit26
88		    real address (bit27--bit31) of reply arcmsr_cdb
89
90		    =====   =======================================================
91		    bit31   must be 0 (for this type of reply)
92		    bit30   reserved for BIOS handshake
93		    bit29   reserved
94		    bit28   ==  ===================================================
95			    0   no error, ignore AdapStatus/DevStatus/SenseData
96			    1   Error, error code in AdapStatus/DevStatus/SenseData
97			    ==  ===================================================
98		    bit27   reserved
99		    =====   =======================================================
100
1016. BIOS request
102---------------
103
104All BIOS request is the same with request from PostQ
105
106Except:
107
108Request frame is sent from configuration space:
109
110	============   ==========================
111	offset: 0x78   Request Frame (bit30 == 1)
112	offset: 0x18   writeonly to generate
113		       IRQ to IOP331
114	============   ==========================
115
116Completion of request::
117
118	(bit30 == 0, bit28==err flag)
119
1207. Definition of SGL entry (structure)
121--------------------------------------
122
1238. Message1 Out - Diag Status Code (????)
124-----------------------------------------
125
1269. Message0 message code
127------------------------
128
129======  =================================================================
1300x00    NOP
1310x01    Get Config
132	->offset 0xa00 :for outbound message code message_rwbuffer
133	(IOP331 send to driver)
134
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)
141	vendor                40 bytes char
142	model                 8 bytes char
143	FirmVer               16 bytes char
144	Device Map            16 bytes char
145	FirmwareVersion       DWORD
146
147			      - Added for checking of
148				new firmware capability
149	===================== ==========================================
1500x02    Set Config
151	->offset 0xa00 :for inbound message code message_rwbuffer
152	(driver send to IOP331)
153
154	========================= ==================
155	Signature                 0x87974063(4)
156	UPPER32 of Request Frame  (4)-->Driver Only
157	========================= ==================
1580x03    Reset (Abort all queued Command)
1590x04    Stop Background Activity
1600x05    Flush Cache
1610x06    Start Background Activity
162	(re-start if background is halted)
1630x07    Check If Host Command Pending
164	(Novell May Need This Function)
1650x08    Set controller time
166	->offset 0xa00   for inbound message code message_rwbuffer
167	(driver to IOP331)
168
169	======   ==================
170	byte 0   0xaa <-- signature
171	byte 1   0x55 <-- signature
172	byte 2   year (04)
173	byte 3   month (1..12)
174	byte 4   date (1..31)
175	byte 5   hour (0..23)
176	byte 6   minute (0..59)
177	byte 7   second (0..59)
178	======   ==================
179======  =================================================================
180
181
182RS-232 Interface for Areca Raid Controller
183==========================================
184
185      The low level command interface is exclusive with VT100 terminal
186
1871. Sequence of command execution
188--------------------------------
189
190	(A) Header
191		3 bytes sequence (0x5E, 0x01, 0x61)
192
193	(B) Command block
194		variable length of data including length,
195		command code, data and checksum byte
196
197	(C) Return data
198		variable length of data
199
2002. Command block
201----------------
202
203	(A) 1st byte
204		command block length (low byte)
205
206	(B) 2nd byte
207		command block length (high byte)
208
209		.. Note:: command block length shouldn't > 2040 bytes,
210			  length excludes these two bytes
211
212	(C) 3rd byte
213		command code
214
215	(D) 4th and following bytes
216		variable length data bytes
217
218	    depends on command code
219
220	(E) last byte
221	    checksum byte (sum of 1st byte until last data byte)
222
2233. Command code and associated data
224-----------------------------------
225
226The following are command code defined in raid controller Command
227code 0x10--0x1? are used for system level management,
228no password checking is needed and should be implemented in separate
229well controlled utility and not for end user access.
230Command code 0x20--0x?? always check the password,
231password must be entered to enable these command::
232
233	enum
234	{
235		GUI_SET_SERIAL=0x10,
236		GUI_SET_VENDOR,
237		GUI_SET_MODEL,
238		GUI_IDENTIFY,
239		GUI_CHECK_PASSWORD,
240		GUI_LOGOUT,
241		GUI_HTTP,
242		GUI_SET_ETHERNET_ADDR,
243		GUI_SET_LOGO,
244		GUI_POLL_EVENT,
245		GUI_GET_EVENT,
246		GUI_GET_HW_MONITOR,
247		//    GUI_QUICK_CREATE=0x20, (function removed)
248		GUI_GET_INFO_R=0x20,
249		GUI_GET_INFO_V,
250		GUI_GET_INFO_P,
251		GUI_GET_INFO_S,
252		GUI_CLEAR_EVENT,
253		GUI_MUTE_BEEPER=0x30,
254		GUI_BEEPER_SETTING,
255		GUI_SET_PASSWORD,
256		GUI_HOST_INTERFACE_MODE,
257		GUI_REBUILD_PRIORITY,
258		GUI_MAX_ATA_MODE,
259		GUI_RESET_CONTROLLER,
260		GUI_COM_PORT_SETTING,
261		GUI_NO_OPERATION,
262		GUI_DHCP_IP,
263		GUI_CREATE_PASS_THROUGH=0x40,
264		GUI_MODIFY_PASS_THROUGH,
265		GUI_DELETE_PASS_THROUGH,
266		GUI_IDENTIFY_DEVICE,
267		GUI_CREATE_RAIDSET=0x50,
268		GUI_DELETE_RAIDSET,
269		GUI_EXPAND_RAIDSET,
270		GUI_ACTIVATE_RAIDSET,
271		GUI_CREATE_HOT_SPARE,
272		GUI_DELETE_HOT_SPARE,
273		GUI_CREATE_VOLUME=0x60,
274		GUI_MODIFY_VOLUME,
275		GUI_DELETE_VOLUME,
276		GUI_START_CHECK_VOLUME,
277		GUI_STOP_CHECK_VOLUME
278	};
279
280Command description
281^^^^^^^^^^^^^^^^^^^
282
283GUI_SET_SERIAL
284	Set the controller serial#
285
286	================  =============================================
287	byte 0,1          length
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	================  =============================================
293
294GUI_SET_VENDOR
295	Set vendor string for the controller
296
297	================  =============================================
298	byte 0,1          length
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	================  =============================================
304
305GUI_SET_MODEL
306	Set the model name of the controller
307
308	================  =============================================
309	byte 0,1          length
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	================  =============================================
315
316GUI_IDENTIFY
317	Identify device
318
319	================  =============================================
320	byte 0,1          length
321	byte 2            command code 0x13
322			    return "Areca RAID Subsystem "
323	================  =============================================
324
325GUI_CHECK_PASSWORD
326	Verify password
327
328	================  =============================================
329	byte 0,1          length
330	byte 2            command code 0x14
331	byte 3            password length
332	byte 4-0x??       user password to be checked
333	================  =============================================
334
335GUI_LOGOUT
336	Logout GUI (force password checking on next command)
337
338	================  =============================================
339	byte 0,1          length
340	byte 2            command code 0x15
341	================  =============================================
342
343GUI_HTTP
344	HTTP interface (reserved for Http proxy service)(0x16)
345
346GUI_SET_ETHERNET_ADDR
347	Set the ethernet MAC address
348
349	================  =============================================
350	byte 0,1          length
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	================  =============================================
356
357GUI_SET_LOGO
358	Set logo in HTTP
359
360	================  =============================================
361	byte 0,1          length
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)
366
367			  .. Note:: page0 1st 2 byte must be
368				    actual length of the JPG file
369	================  =============================================
370
371GUI_POLL_EVENT
372	Poll If Event Log Changed
373
374	================  =============================================
375	byte 0,1          length
376	byte 2            command code 0x19
377	================  =============================================
378
379GUI_GET_EVENT
380	Read Event
381
382	================  =============================================
383	byte 0,1          length
384	byte 2            command code 0x1a
385	byte 3            Event Page (0:1st page/1/2/3:last page)
386	================  =============================================
387
388GUI_GET_HW_MONITOR
389	Get HW monitor data
390
391	================  =============================================
392	byte 0,1          length
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)
397	byte 6 		  # of power
398	byte 7/8          Fan#0 (RPM)
399	byte 9/10         Fan#1
400	byte 11/12 	  Voltage#0 original value in ``*1000``
401	byte 13/14 	  Voltage#0 value
402	byte 15/16 	  Voltage#1 org
403	byte 17/18 	  Voltage#1
404	byte 19/20 	  Voltage#2 org
405	byte 21/22 	  Voltage#2
406	byte 23 	  Temp#0
407	byte 24 	  Temp#1
408	byte 25 	  Power indicator (bit0   power#0,
409			  bit1   power#1)
410	byte 26 	  UPS indicator
411	================  =============================================
412
413GUI_QUICK_CREATE
414	Quick create raid/volume set
415
416	================  ==============================================
417	byte 0,1       	  length
418	byte 2         	  command code 0x20
419	byte 3/4/5/6   	  raw capacity
420	byte 7 		  raid level
421	byte 8 		  stripe size
422	byte 9 		  spare
423	byte 10/11/12/13  device mask (the devices to create raid/volume)
424	================  ==============================================
425
426    This function is removed, application like
427    to implement quick create function
428
429    need to use GUI_CREATE_RAIDSET and GUI_CREATE_VOLUMESET function.
430
431GUI_GET_INFO_R
432	Get Raid Set Information
433
434	================  =============================================
435	byte 0,1          length
436	byte 2            command code 0x20
437	byte 3            raidset#
438	================  =============================================
439
440	::
441
442	    typedef struct sGUI_RAIDSET
443	    {
444		    BYTE grsRaidSetName[16];
445		    DWORD grsCapacity;
446		    DWORD grsCapacityX;
447		    DWORD grsFailMask;
448		    BYTE grsDevArray[32];
449		    BYTE grsMemberDevices;
450		    BYTE grsNewMemberDevices;
451		    BYTE grsRaidState;
452		    BYTE grsVolumes;
453		    BYTE grsVolumeList[16];
454		    BYTE grsRes1;
455		    BYTE grsRes2;
456		    BYTE grsRes3;
457		    BYTE grsFreeSegments;
458		    DWORD grsRawStripes[8];
459		    DWORD grsRes4;
460		    DWORD grsRes5; //     Total to 128 bytes
461		    DWORD grsRes6; //     Total to 128 bytes
462	    } sGUI_RAIDSET, *pGUI_RAIDSET;
463
464GUI_GET_INFO_V
465	Get Volume Set Information
466
467	================  =============================================
468	byte 0,1          length
469	byte 2            command code 0x21
470	byte 3            volumeset#
471	================  =============================================
472
473	::
474
475	    typedef struct sGUI_VOLUMESET
476	    {
477		    BYTE gvsVolumeName[16]; //     16
478		    DWORD gvsCapacity;
479		    DWORD gvsCapacityX;
480		    DWORD gvsFailMask;
481		    DWORD gvsStripeSize;
482		    DWORD gvsNewFailMask;
483		    DWORD gvsNewStripeSize;
484		    DWORD gvsVolumeStatus;
485		    DWORD gvsProgress; //     32
486		    sSCSI_ATTR gvsScsi;
487		    BYTE gvsMemberDisks;
488		    BYTE gvsRaidLevel; //     8
489		    BYTE gvsNewMemberDisks;
490		    BYTE gvsNewRaidLevel;
491		    BYTE gvsRaidSetNumber;
492		    BYTE gvsRes0; //     4
493		    BYTE gvsRes1[4]; //     64 bytes
494	    } sGUI_VOLUMESET, *pGUI_VOLUMESET;
495
496GUI_GET_INFO_P
497	Get Physical Drive Information
498
499	================  =============================================
500	byte 0,1          length
501	byte 2            command code 0x22
502	byte 3            drive # (from 0 to max-channels - 1)
503	================  =============================================
504
505	::
506
507	    typedef struct sGUI_PHY_DRV
508	    {
509		    BYTE gpdModelName[40];
510		    BYTE gpdSerialNumber[20];
511		    BYTE gpdFirmRev[8];
512		    DWORD gpdCapacity;
513		    DWORD gpdCapacityX; //     Reserved for expansion
514		    BYTE gpdDeviceState;
515		    BYTE gpdPioMode;
516		    BYTE gpdCurrentUdmaMode;
517		    BYTE gpdUdmaMode;
518		    BYTE gpdDriveSelect;
519		    BYTE gpdRaidNumber; //     0xff if not belongs to a raid set
520		    sSCSI_ATTR gpdScsi;
521		    BYTE gpdReserved[40]; //     Total to 128 bytes
522	    } sGUI_PHY_DRV, *pGUI_PHY_DRV;
523
524GUI_GET_INFO_S
525	Get System Information
526
527	================  =============================================
528	byte 0,1          length
529	byte 2            command code 0x23
530	================  =============================================
531
532	::
533
534	    typedef struct sCOM_ATTR
535	    {
536		    BYTE comBaudRate;
537		    BYTE comDataBits;
538		    BYTE comStopBits;
539		    BYTE comParity;
540		    BYTE comFlowControl;
541	    } sCOM_ATTR, *pCOM_ATTR;
542	    typedef struct sSYSTEM_INFO
543	    {
544		    BYTE gsiVendorName[40];
545		    BYTE gsiSerialNumber[16];
546		    BYTE gsiFirmVersion[16];
547		    BYTE gsiBootVersion[16];
548		    BYTE gsiMbVersion[16];
549		    BYTE gsiModelName[8];
550		    BYTE gsiLocalIp[4];
551		    BYTE gsiCurrentIp[4];
552		    DWORD gsiTimeTick;
553		    DWORD gsiCpuSpeed;
554		    DWORD gsiICache;
555		    DWORD gsiDCache;
556		    DWORD gsiScache;
557		    DWORD gsiMemorySize;
558		    DWORD gsiMemorySpeed;
559		    DWORD gsiEvents;
560		    BYTE gsiMacAddress[6];
561		    BYTE gsiDhcp;
562		    BYTE gsiBeeper;
563		    BYTE gsiChannelUsage;
564		    BYTE gsiMaxAtaMode;
565		    BYTE gsiSdramEcc; //     1:if ECC enabled
566		    BYTE gsiRebuildPriority;
567		    sCOM_ATTR gsiComA; //     5 bytes
568		    sCOM_ATTR gsiComB; //     5 bytes
569		    BYTE gsiIdeChannels;
570		    BYTE gsiScsiHostChannels;
571		    BYTE gsiIdeHostChannels;
572		    BYTE gsiMaxVolumeSet;
573		    BYTE gsiMaxRaidSet;
574		    BYTE gsiEtherPort; //     1:if ether net port supported
575		    BYTE gsiRaid6Engine; //     1:Raid6 engine supported
576		    BYTE gsiRes[75];
577	    } sSYSTEM_INFO, *pSYSTEM_INFO;
578
579GUI_CLEAR_EVENT
580	Clear System Event
581
582	================  =============================================
583	byte 0,1          length
584	byte 2            command code 0x24
585	================  =============================================
586
587GUI_MUTE_BEEPER
588	Mute current beeper
589
590	================  =============================================
591	byte 0,1          length
592	byte 2            command code 0x30
593	================  =============================================
594GUI_BEEPER_SETTING
595	Disable beeper
596
597	================  =============================================
598	byte 0,1          length
599	byte 2            command code 0x31
600	byte 3            0->disable, 1->enable
601	================  =============================================
602
603GUI_SET_PASSWORD
604	Change password
605
606	================  =============================================
607	byte 0,1          length
608	byte 2 		  command code 0x32
609	byte 3 		  pass word length ( must <= 15 )
610	byte 4 		  password (must be alpha-numerical)
611	================  =============================================
612
613GUI_HOST_INTERFACE_MODE
614	Set host interface mode
615
616	================  =============================================
617	byte 0,1          length
618	byte 2 		  command code 0x33
619	byte 3 		  0->Independent, 1->cluster
620	================  =============================================
621
622GUI_REBUILD_PRIORITY
623	Set rebuild priority
624
625	================  =============================================
626	byte 0,1          length
627	byte 2 		  command code 0x34
628	byte 3 		  0/1/2/3 (low->high)
629	================  =============================================
630
631GUI_MAX_ATA_MODE
632	Set maximum ATA mode to be used
633
634	================  =============================================
635	byte 0,1          length
636	byte 2 		  command code 0x35
637	byte 3 		  0/1/2/3 (133/100/66/33)
638	================  =============================================
639
640GUI_RESET_CONTROLLER
641	Reset Controller
642
643	================  =============================================
644	byte 0,1          length
645	byte 2            command code 0x36
646			  * Response with VT100 screen (discard it)
647	================  =============================================
648
649GUI_COM_PORT_SETTING
650	COM port setting
651
652	================  =================================================
653	byte 0,1	  length
654	byte 2 		  command code 0x37
655	byte 3 		  0->COMA (term port),
656			  1->COMB (debug port)
657	byte 4 		  0/1/2/3/4/5/6/7
658			  (1200/2400/4800/9600/19200/38400/57600/115200)
659	byte 5 		  data bit
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)
663	byte 8 		  flow control
664			  (0:none, 1:xon/xoff, 2:hardware => must use none)
665	================  =================================================
666
667GUI_NO_OPERATION
668	No operation
669
670	================  =============================================
671	byte 0,1          length
672	byte 2            command code 0x38
673	================  =============================================
674
675GUI_DHCP_IP
676	Set DHCP option and local IP address
677
678	================  =============================================
679	byte 0,1          length
680	byte 2            command code 0x39
681	byte 3            0:dhcp disabled, 1:dhcp enabled
682	byte 4/5/6/7      IP address
683	================  =============================================
684
685GUI_CREATE_PASS_THROUGH
686	Create pass through disk
687
688	================  =============================================
689	byte 0,1          length
690	byte 2 		  command code 0x40
691	byte 3 		  device #
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	================  =============================================
701
702GUI_MODIFY_PASS_THROUGH
703	Modify pass through disk
704
705	================  =============================================
706	byte 0,1          length
707	byte 2 		  command code 0x41
708	byte 3 		  device #
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	================  =============================================
718
719GUI_DELETE_PASS_THROUGH
720	Delete pass through disk
721
722	================  =============================================
723	byte 0,1          length
724	byte 2            command code 0x42
725	byte 3            device# to be deleted
726	================  =============================================
727GUI_IDENTIFY_DEVICE
728	Identify Device
729
730	================  =============================================
731	byte 0,1          length
732	byte 2            command code 0x43
733	byte 3            Flash Method
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	================  =============================================
738
739GUI_CREATE_RAIDSET
740	Create Raid Set
741
742	================  =============================================
743	byte 0,1          length
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	================  =============================================
748
749GUI_DELETE_RAIDSET
750	Delete Raid Set
751
752	================  =============================================
753	byte 0,1          length
754	byte 2            command code 0x51
755	byte 3            raidset#
756	================  =============================================
757
758GUI_EXPAND_RAIDSET
759	Expand Raid Set
760
761	================  =============================================
762	byte 0,1          length
763	byte 2            command code 0x52
764	byte 3            raidset#
765	byte 4/5/6/7      device mask for expansion
766	byte 8/9/10       (8:0 no change, 1 change, 0xff:terminate,
767			  9:new raid level,
768			  10:new stripe size
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	================  =============================================
772
773GUI_ACTIVATE_RAIDSET
774	Activate incomplete raid set
775
776	================  =============================================
777	byte 0,1          length
778	byte 2            command code 0x53
779	byte 3            raidset#
780	================  =============================================
781
782GUI_CREATE_HOT_SPARE
783	Create hot spare disk
784
785	================  =============================================
786	byte 0,1          length
787	byte 2            command code 0x54
788	byte 3/4/5/6      device mask for hot spare creation
789	================  =============================================
790
791GUI_DELETE_HOT_SPARE
792	Delete hot spare disk
793
794	================  =============================================
795	byte 0,1          length
796	byte 2            command code 0x55
797	byte 3/4/5/6      device mask for hot spare deletion
798	================  =============================================
799
800GUI_CREATE_VOLUME
801	Create volume set
802
803	================  =============================================
804	byte 0,1          length
805	byte 2            command code 0x60
806	byte 3            raidset#
807	byte 4-19         volume set name
808			  (if byte4 == 0, use default)
809	byte 20-27        volume capacity (blocks)
810	byte 28 	  raid level
811	byte 29 	  stripe size
812			  (0/1/2/3/4/5->4/8/16/32/64/128K)
813	byte 30 	  channel
814	byte 31 	  ID
815	byte 32 	  LUN
816	byte 33 	  1 enable tag
817	byte 34 	  1 enable cache
818	byte 35 	  speed
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	================  =============================================
823
824GUI_MODIFY_VOLUME
825	Modify volume Set
826
827	================  =============================================
828	byte 0,1          length
829	byte 2            command code 0x61
830	byte 3            volumeset#
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)
837	byte 30 	  new channel
838	byte 31 	  new ID
839	byte 32 	  new LUN
840	byte 33 	  1 enable tag
841	byte 34 	  1 enable cache
842	byte 35 	  speed
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	================  =============================================
846
847GUI_DELETE_VOLUME
848	Delete volume set
849
850	================  =============================================
851	byte 0,1          length
852	byte 2            command code 0x62
853	byte 3            volumeset#
854	================  =============================================
855
856GUI_START_CHECK_VOLUME
857	Start volume consistency check
858
859	================  =============================================
860	byte 0,1          length
861	byte 2            command code 0x63
862	byte 3            volumeset#
863	================  =============================================
864
865GUI_STOP_CHECK_VOLUME
866	Stop volume consistency check
867
868	================  =============================================
869	byte 0,1          length
870	byte 2            command code 0x64
871	================  =============================================
872
8734. Returned data
874----------------
875
876(A) Header
877    3 bytes sequence (0x5E, 0x01, 0x61)
878(B) Length
879    2 bytes
880    (low byte 1st, excludes length and checksum byte)
881(C)
882    status or data:
883
884	1) If length == 1 ==> 1 byte status code::
885
886		#define GUI_OK                    0x41
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
899
900	2) If length > 1:
901
902		data block returned from controller
903		and the contents depends on the command code
904
905(E) Checksum
906    checksum of length and status or data byte
907
908