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