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