Merge tag 'fs.setgid.v6.0' of git://git.kernel.org/pub/scm/linux/kernel/git/brauner...
[linux-2.6-microblaze.git] / Documentation / scsi / arcmsr_spec.rst
1 ARECA FIRMWARE SPEC
2 ===================
3
4 Usage of IOP331 adapter
5 =======================
6
7 (All In/Out is in IOP331's view)
8
9 1. Message 0
10 ------------
11
12 - InitThread message and return code
13
14 2. Doorbell is used for RS-232 emulation
15 ----------------------------------------
16
17 inDoorBell
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
25 outDooeBell:
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
33 3. Index Memory Usage
34 ---------------------
35
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 ============   ==========================================
44
45 4. RS-232 emulation
46 -------------------
47
48 Currently 128 byte buffer is used:
49
50 ============   =====================
51 1st uint32_t   Data length (1--124)
52 Byte 4--127    Max 124 bytes of data
53 ============   =====================
54
55 5. PostQ
56 --------
57
58 All 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
101 6. BIOS request
102 ---------------
103
104 All BIOS request is the same with request from PostQ
105
106 Except:
107
108 Request 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
116 Completion of request::
117
118         (bit30 == 0, bit28==err flag)
119
120 7. Definition of SGL entry (structure)
121 --------------------------------------
122
123 8. Message1 Out - Diag Status Code (????)
124 -----------------------------------------
125
126 9. Message0 message code
127 ------------------------
128
129 ======  =================================================================
130 0x00    NOP
131 0x01    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         ===================== ==========================================
150 0x02    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         ========================= ==================
158 0x03    Reset (Abort all queued Command)
159 0x04    Stop Background Activity
160 0x05    Flush Cache
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
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
182 RS-232 Interface for Areca Raid Controller
183 ==========================================
184
185       The low level command interface is exclusive with VT100 terminal
186
187 1. 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
200 2. 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
223 3. Command code and associated data
224 -----------------------------------
225
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::
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
280 Command description
281 ^^^^^^^^^^^^^^^^^^^
282
283 GUI_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
294 GUI_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
305 GUI_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
316 GUI_IDENTIFY
317         Identify device
318
319         ================  =============================================
320         byte 0,1          length
321         byte 2            command code 0x13
322                             return "Areca RAID Subsystem "
323         ================  =============================================
324
325 GUI_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
335 GUI_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
343 GUI_HTTP
344         HTTP interface (reserved for Http proxy service)(0x16)
345
346 GUI_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
357 GUI_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
371 GUI_POLL_EVENT
372         Poll If Event Log Changed
373
374         ================  =============================================
375         byte 0,1          length
376         byte 2            command code 0x19
377         ================  =============================================
378
379 GUI_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
388 GUI_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
413 GUI_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
431 GUI_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
464 GUI_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
496 GUI_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
524 GUI_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
579 GUI_CLEAR_EVENT
580         Clear System Event
581
582         ================  =============================================
583         byte 0,1          length
584         byte 2            command code 0x24
585         ================  =============================================
586
587 GUI_MUTE_BEEPER
588         Mute current beeper
589
590         ================  =============================================
591         byte 0,1          length
592         byte 2            command code 0x30
593         ================  =============================================
594 GUI_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
603 GUI_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
613 GUI_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
622 GUI_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
631 GUI_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
640 GUI_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
649 GUI_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
667 GUI_NO_OPERATION
668         No operation
669
670         ================  =============================================
671         byte 0,1          length
672         byte 2            command code 0x38
673         ================  =============================================
674
675 GUI_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
685 GUI_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
702 GUI_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
719 GUI_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         ================  =============================================
727 GUI_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
739 GUI_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
749 GUI_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
758 GUI_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
773 GUI_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
782 GUI_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
791 GUI_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
800 GUI_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
824 GUI_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
847 GUI_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
856 GUI_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
865 GUI_STOP_CHECK_VOLUME
866         Stop volume consistency check
867
868         ================  =============================================
869         byte 0,1          length
870         byte 2            command code 0x64
871         ================  =============================================
872
873 4. 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