]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - Documentation/scsi/arcmsr_spec.txt
Merge mulgrave-w:git/linux-2.6
[mirror_ubuntu-bionic-kernel.git] / Documentation / scsi / arcmsr_spec.txt
1 *******************************************************************************
2 ** ARECA FIRMWARE SPEC
3 *******************************************************************************
4 ** Usage of IOP331 adapter
5 ** (All In/Out is in IOP331's view)
6 ** 1. Message 0 --> InitThread message and retrun code
7 ** 2. Doorbell is used for RS-232 emulation
8 ** inDoorBell : bit0 -- data in ready
9 ** (DRIVER DATA WRITE OK)
10 ** bit1 -- data out has been read
11 ** (DRIVER DATA READ OK)
12 ** outDooeBell: bit0 -- data out ready
13 ** (IOP331 DATA WRITE OK)
14 ** bit1 -- data in has been read
15 ** (IOP331 DATA READ OK)
16 ** 3. Index Memory Usage
17 ** offset 0xf00 : for RS232 out (request buffer)
18 ** offset 0xe00 : for RS232 in (scratch buffer)
19 ** offset 0xa00 : for inbound message code message_rwbuffer
20 ** (driver send to IOP331)
21 ** offset 0xa00 : for outbound message code message_rwbuffer
22 ** (IOP331 send to driver)
23 ** 4. RS-232 emulation
24 ** Currently 128 byte buffer is used
25 ** 1st uint32_t : Data length (1--124)
26 ** Byte 4--127 : Max 124 bytes of data
27 ** 5. PostQ
28 ** All SCSI Command must be sent through postQ:
29 ** (inbound queue port) Request frame must be 32 bytes aligned
30 ** #bit27--bit31 => flag for post ccb
31 ** #bit0--bit26 => real address (bit27--bit31) of post arcmsr_cdb
32 ** bit31 :
33 ** 0 : 256 bytes frame
34 ** 1 : 512 bytes frame
35 ** bit30 :
36 ** 0 : normal request
37 ** 1 : BIOS request
38 ** bit29 : reserved
39 ** bit28 : reserved
40 ** bit27 : reserved
41 ** ---------------------------------------------------------------------------
42 ** (outbount queue port) Request reply
43 ** #bit27--bit31
44 ** => flag for reply
45 ** #bit0--bit26
46 ** => real address (bit27--bit31) of reply arcmsr_cdb
47 ** bit31 : must be 0 (for this type of reply)
48 ** bit30 : reserved for BIOS handshake
49 ** bit29 : reserved
50 ** bit28 :
51 ** 0 : no error, ignore AdapStatus/DevStatus/SenseData
52 ** 1 : Error, error code in AdapStatus/DevStatus/SenseData
53 ** bit27 : reserved
54 ** 6. BIOS request
55 ** All BIOS request is the same with request from PostQ
56 ** Except :
57 ** Request frame is sent from configuration space
58 ** offset: 0x78 : Request Frame (bit30 == 1)
59 ** offset: 0x18 : writeonly to generate
60 ** IRQ to IOP331
61 ** Completion of request:
62 ** (bit30 == 0, bit28==err flag)
63 ** 7. Definition of SGL entry (structure)
64 ** 8. Message1 Out - Diag Status Code (????)
65 ** 9. Message0 message code :
66 ** 0x00 : NOP
67 ** 0x01 : Get Config
68 ** ->offset 0xa00 :for outbound message code message_rwbuffer
69 ** (IOP331 send to driver)
70 ** Signature 0x87974060(4)
71 ** Request len 0x00000200(4)
72 ** numbers of queue 0x00000100(4)
73 ** SDRAM Size 0x00000100(4)-->256 MB
74 ** IDE Channels 0x00000008(4)
75 ** vendor 40 bytes char
76 ** model 8 bytes char
77 ** FirmVer 16 bytes char
78 ** Device Map 16 bytes char
79 ** FirmwareVersion DWORD <== Added for checking of
80 ** new firmware capability
81 ** 0x02 : Set Config
82 ** ->offset 0xa00 :for inbound message code message_rwbuffer
83 ** (driver send to IOP331)
84 ** Signature 0x87974063(4)
85 ** UPPER32 of Request Frame (4)-->Driver Only
86 ** 0x03 : Reset (Abort all queued Command)
87 ** 0x04 : Stop Background Activity
88 ** 0x05 : Flush Cache
89 ** 0x06 : Start Background Activity
90 ** (re-start if background is halted)
91 ** 0x07 : Check If Host Command Pending
92 ** (Novell May Need This Function)
93 ** 0x08 : Set controller time
94 ** ->offset 0xa00 : for inbound message code message_rwbuffer
95 ** (driver to IOP331)
96 ** byte 0 : 0xaa <-- signature
97 ** byte 1 : 0x55 <-- signature
98 ** byte 2 : year (04)
99 ** byte 3 : month (1..12)
100 ** byte 4 : date (1..31)
101 ** byte 5 : hour (0..23)
102 ** byte 6 : minute (0..59)
103 ** byte 7 : second (0..59)
104 *******************************************************************************
105 *******************************************************************************
106 ** RS-232 Interface for Areca Raid Controller
107 ** The low level command interface is exclusive with VT100 terminal
108 ** --------------------------------------------------------------------
109 ** 1. Sequence of command execution
110 ** --------------------------------------------------------------------
111 ** (A) Header : 3 bytes sequence (0x5E, 0x01, 0x61)
112 ** (B) Command block : variable length of data including length,
113 ** command code, data and checksum byte
114 ** (C) Return data : variable length of data
115 ** --------------------------------------------------------------------
116 ** 2. Command block
117 ** --------------------------------------------------------------------
118 ** (A) 1st byte : command block length (low byte)
119 ** (B) 2nd byte : command block length (high byte)
120 ** note ..command block length shouldn't > 2040 bytes,
121 ** length excludes these two bytes
122 ** (C) 3rd byte : command code
123 ** (D) 4th and following bytes : variable length data bytes
124 ** depends on command code
125 ** (E) last byte : checksum byte (sum of 1st byte until last data byte)
126 ** --------------------------------------------------------------------
127 ** 3. Command code and associated data
128 ** --------------------------------------------------------------------
129 ** The following are command code defined in raid controller Command
130 ** code 0x10--0x1? are used for system level management,
131 ** no password checking is needed and should be implemented in separate
132 ** well controlled utility and not for end user access.
133 ** Command code 0x20--0x?? always check the password,
134 ** password must be entered to enable these command.
135 ** enum
136 ** {
137 ** GUI_SET_SERIAL=0x10,
138 ** GUI_SET_VENDOR,
139 ** GUI_SET_MODEL,
140 ** GUI_IDENTIFY,
141 ** GUI_CHECK_PASSWORD,
142 ** GUI_LOGOUT,
143 ** GUI_HTTP,
144 ** GUI_SET_ETHERNET_ADDR,
145 ** GUI_SET_LOGO,
146 ** GUI_POLL_EVENT,
147 ** GUI_GET_EVENT,
148 ** GUI_GET_HW_MONITOR,
149 ** // GUI_QUICK_CREATE=0x20, (function removed)
150 ** GUI_GET_INFO_R=0x20,
151 ** GUI_GET_INFO_V,
152 ** GUI_GET_INFO_P,
153 ** GUI_GET_INFO_S,
154 ** GUI_CLEAR_EVENT,
155 ** GUI_MUTE_BEEPER=0x30,
156 ** GUI_BEEPER_SETTING,
157 ** GUI_SET_PASSWORD,
158 ** GUI_HOST_INTERFACE_MODE,
159 ** GUI_REBUILD_PRIORITY,
160 ** GUI_MAX_ATA_MODE,
161 ** GUI_RESET_CONTROLLER,
162 ** GUI_COM_PORT_SETTING,
163 ** GUI_NO_OPERATION,
164 ** GUI_DHCP_IP,
165 ** GUI_CREATE_PASS_THROUGH=0x40,
166 ** GUI_MODIFY_PASS_THROUGH,
167 ** GUI_DELETE_PASS_THROUGH,
168 ** GUI_IDENTIFY_DEVICE,
169 ** GUI_CREATE_RAIDSET=0x50,
170 ** GUI_DELETE_RAIDSET,
171 ** GUI_EXPAND_RAIDSET,
172 ** GUI_ACTIVATE_RAIDSET,
173 ** GUI_CREATE_HOT_SPARE,
174 ** GUI_DELETE_HOT_SPARE,
175 ** GUI_CREATE_VOLUME=0x60,
176 ** GUI_MODIFY_VOLUME,
177 ** GUI_DELETE_VOLUME,
178 ** GUI_START_CHECK_VOLUME,
179 ** GUI_STOP_CHECK_VOLUME
180 ** };
181 ** Command description :
182 ** GUI_SET_SERIAL : Set the controller serial#
183 ** byte 0,1 : length
184 ** byte 2 : command code 0x10
185 ** byte 3 : password length (should be 0x0f)
186 ** byte 4-0x13 : should be "ArEcATecHnoLogY"
187 ** byte 0x14--0x23 : Serial number string (must be 16 bytes)
188 ** GUI_SET_VENDOR : Set vendor string for the controller
189 ** byte 0,1 : length
190 ** byte 2 : command code 0x11
191 ** byte 3 : password length (should be 0x08)
192 ** byte 4-0x13 : should be "ArEcAvAr"
193 ** byte 0x14--0x3B : vendor string (must be 40 bytes)
194 ** GUI_SET_MODEL : Set the model name of the controller
195 ** byte 0,1 : length
196 ** byte 2 : command code 0x12
197 ** byte 3 : password length (should be 0x08)
198 ** byte 4-0x13 : should be "ArEcAvAr"
199 ** byte 0x14--0x1B : model string (must be 8 bytes)
200 ** GUI_IDENTIFY : Identify device
201 ** byte 0,1 : length
202 ** byte 2 : command code 0x13
203 ** return "Areca RAID Subsystem "
204 ** GUI_CHECK_PASSWORD : Verify password
205 ** byte 0,1 : length
206 ** byte 2 : command code 0x14
207 ** byte 3 : password length
208 ** byte 4-0x?? : user password to be checked
209 ** GUI_LOGOUT : Logout GUI (force password checking on next command)
210 ** byte 0,1 : length
211 ** byte 2 : command code 0x15
212 ** GUI_HTTP : HTTP interface (reserved for Http proxy service)(0x16)
213 **
214 ** GUI_SET_ETHERNET_ADDR : Set the ethernet MAC address
215 ** byte 0,1 : length
216 ** byte 2 : command code 0x17
217 ** byte 3 : password length (should be 0x08)
218 ** byte 4-0x13 : should be "ArEcAvAr"
219 ** byte 0x14--0x19 : Ethernet MAC address (must be 6 bytes)
220 ** GUI_SET_LOGO : Set logo in HTTP
221 ** byte 0,1 : length
222 ** byte 2 : command code 0x18
223 ** byte 3 : Page# (0/1/2/3) (0xff --> clear OEM logo)
224 ** byte 4/5/6/7 : 0x55/0xaa/0xa5/0x5a
225 ** byte 8 : TITLE.JPG data (each page must be 2000 bytes)
226 ** note page0 1st 2 byte must be
227 ** actual length of the JPG file
228 ** GUI_POLL_EVENT : Poll If Event Log Changed
229 ** byte 0,1 : length
230 ** byte 2 : command code 0x19
231 ** GUI_GET_EVENT : Read Event
232 ** byte 0,1 : length
233 ** byte 2 : command code 0x1a
234 ** byte 3 : Event Page (0:1st page/1/2/3:last page)
235 ** GUI_GET_HW_MONITOR : Get HW monitor data
236 ** byte 0,1 : length
237 ** byte 2 : command code 0x1b
238 ** byte 3 : # of FANs(example 2)
239 ** byte 4 : # of Voltage sensor(example 3)
240 ** byte 5 : # of temperature sensor(example 2)
241 ** byte 6 : # of power
242 ** byte 7/8 : Fan#0 (RPM)
243 ** byte 9/10 : Fan#1
244 ** byte 11/12 : Voltage#0 original value in *1000
245 ** byte 13/14 : Voltage#0 value
246 ** byte 15/16 : Voltage#1 org
247 ** byte 17/18 : Voltage#1
248 ** byte 19/20 : Voltage#2 org
249 ** byte 21/22 : Voltage#2
250 ** byte 23 : Temp#0
251 ** byte 24 : Temp#1
252 ** byte 25 : Power indicator (bit0 : power#0,
253 ** bit1 : power#1)
254 ** byte 26 : UPS indicator
255 ** GUI_QUICK_CREATE : Quick create raid/volume set
256 ** byte 0,1 : length
257 ** byte 2 : command code 0x20
258 ** byte 3/4/5/6 : raw capacity
259 ** byte 7 : raid level
260 ** byte 8 : stripe size
261 ** byte 9 : spare
262 ** byte 10/11/12/13: device mask (the devices to create raid/volume)
263 ** This function is removed, application like
264 ** to implement quick create function
265 ** need to use GUI_CREATE_RAIDSET and GUI_CREATE_VOLUMESET function.
266 ** GUI_GET_INFO_R : Get Raid Set Information
267 ** byte 0,1 : length
268 ** byte 2 : command code 0x20
269 ** byte 3 : raidset#
270 ** typedef struct sGUI_RAIDSET
271 ** {
272 ** BYTE grsRaidSetName[16];
273 ** DWORD grsCapacity;
274 ** DWORD grsCapacityX;
275 ** DWORD grsFailMask;
276 ** BYTE grsDevArray[32];
277 ** BYTE grsMemberDevices;
278 ** BYTE grsNewMemberDevices;
279 ** BYTE grsRaidState;
280 ** BYTE grsVolumes;
281 ** BYTE grsVolumeList[16];
282 ** BYTE grsRes1;
283 ** BYTE grsRes2;
284 ** BYTE grsRes3;
285 ** BYTE grsFreeSegments;
286 ** DWORD grsRawStripes[8];
287 ** DWORD grsRes4;
288 ** DWORD grsRes5; // Total to 128 bytes
289 ** DWORD grsRes6; // Total to 128 bytes
290 ** } sGUI_RAIDSET, *pGUI_RAIDSET;
291 ** GUI_GET_INFO_V : Get Volume Set Information
292 ** byte 0,1 : length
293 ** byte 2 : command code 0x21
294 ** byte 3 : volumeset#
295 ** typedef struct sGUI_VOLUMESET
296 ** {
297 ** BYTE gvsVolumeName[16]; // 16
298 ** DWORD gvsCapacity;
299 ** DWORD gvsCapacityX;
300 ** DWORD gvsFailMask;
301 ** DWORD gvsStripeSize;
302 ** DWORD gvsNewFailMask;
303 ** DWORD gvsNewStripeSize;
304 ** DWORD gvsVolumeStatus;
305 ** DWORD gvsProgress; // 32
306 ** sSCSI_ATTR gvsScsi;
307 ** BYTE gvsMemberDisks;
308 ** BYTE gvsRaidLevel; // 8
309 ** BYTE gvsNewMemberDisks;
310 ** BYTE gvsNewRaidLevel;
311 ** BYTE gvsRaidSetNumber;
312 ** BYTE gvsRes0; // 4
313 ** BYTE gvsRes1[4]; // 64 bytes
314 ** } sGUI_VOLUMESET, *pGUI_VOLUMESET;
315 ** GUI_GET_INFO_P : Get Physical Drive Information
316 ** byte 0,1 : length
317 ** byte 2 : command code 0x22
318 ** byte 3 : drive # (from 0 to max-channels - 1)
319 ** typedef struct sGUI_PHY_DRV
320 ** {
321 ** BYTE gpdModelName[40];
322 ** BYTE gpdSerialNumber[20];
323 ** BYTE gpdFirmRev[8];
324 ** DWORD gpdCapacity;
325 ** DWORD gpdCapacityX; // Reserved for expansion
326 ** BYTE gpdDeviceState;
327 ** BYTE gpdPioMode;
328 ** BYTE gpdCurrentUdmaMode;
329 ** BYTE gpdUdmaMode;
330 ** BYTE gpdDriveSelect;
331 ** BYTE gpdRaidNumber; // 0xff if not belongs to a raid set
332 ** sSCSI_ATTR gpdScsi;
333 ** BYTE gpdReserved[40]; // Total to 128 bytes
334 ** } sGUI_PHY_DRV, *pGUI_PHY_DRV;
335 ** GUI_GET_INFO_S : Get System Information
336 ** byte 0,1 : length
337 ** byte 2 : command code 0x23
338 ** typedef struct sCOM_ATTR
339 ** {
340 ** BYTE comBaudRate;
341 ** BYTE comDataBits;
342 ** BYTE comStopBits;
343 ** BYTE comParity;
344 ** BYTE comFlowControl;
345 ** } sCOM_ATTR, *pCOM_ATTR;
346 ** typedef struct sSYSTEM_INFO
347 ** {
348 ** BYTE gsiVendorName[40];
349 ** BYTE gsiSerialNumber[16];
350 ** BYTE gsiFirmVersion[16];
351 ** BYTE gsiBootVersion[16];
352 ** BYTE gsiMbVersion[16];
353 ** BYTE gsiModelName[8];
354 ** BYTE gsiLocalIp[4];
355 ** BYTE gsiCurrentIp[4];
356 ** DWORD gsiTimeTick;
357 ** DWORD gsiCpuSpeed;
358 ** DWORD gsiICache;
359 ** DWORD gsiDCache;
360 ** DWORD gsiScache;
361 ** DWORD gsiMemorySize;
362 ** DWORD gsiMemorySpeed;
363 ** DWORD gsiEvents;
364 ** BYTE gsiMacAddress[6];
365 ** BYTE gsiDhcp;
366 ** BYTE gsiBeeper;
367 ** BYTE gsiChannelUsage;
368 ** BYTE gsiMaxAtaMode;
369 ** BYTE gsiSdramEcc; // 1:if ECC enabled
370 ** BYTE gsiRebuildPriority;
371 ** sCOM_ATTR gsiComA; // 5 bytes
372 ** sCOM_ATTR gsiComB; // 5 bytes
373 ** BYTE gsiIdeChannels;
374 ** BYTE gsiScsiHostChannels;
375 ** BYTE gsiIdeHostChannels;
376 ** BYTE gsiMaxVolumeSet;
377 ** BYTE gsiMaxRaidSet;
378 ** BYTE gsiEtherPort; // 1:if ether net port supported
379 ** BYTE gsiRaid6Engine; // 1:Raid6 engine supported
380 ** BYTE gsiRes[75];
381 ** } sSYSTEM_INFO, *pSYSTEM_INFO;
382 ** GUI_CLEAR_EVENT : Clear System Event
383 ** byte 0,1 : length
384 ** byte 2 : command code 0x24
385 ** GUI_MUTE_BEEPER : Mute current beeper
386 ** byte 0,1 : length
387 ** byte 2 : command code 0x30
388 ** GUI_BEEPER_SETTING : Disable beeper
389 ** byte 0,1 : length
390 ** byte 2 : command code 0x31
391 ** byte 3 : 0->disable, 1->enable
392 ** GUI_SET_PASSWORD : Change password
393 ** byte 0,1 : length
394 ** byte 2 : command code 0x32
395 ** byte 3 : pass word length ( must <= 15 )
396 ** byte 4 : password (must be alpha-numerical)
397 ** GUI_HOST_INTERFACE_MODE : Set host interface mode
398 ** byte 0,1 : length
399 ** byte 2 : command code 0x33
400 ** byte 3 : 0->Independent, 1->cluster
401 ** GUI_REBUILD_PRIORITY : Set rebuild priority
402 ** byte 0,1 : length
403 ** byte 2 : command code 0x34
404 ** byte 3 : 0/1/2/3 (low->high)
405 ** GUI_MAX_ATA_MODE : Set maximum ATA mode to be used
406 ** byte 0,1 : length
407 ** byte 2 : command code 0x35
408 ** byte 3 : 0/1/2/3 (133/100/66/33)
409 ** GUI_RESET_CONTROLLER : Reset Controller
410 ** byte 0,1 : length
411 ** byte 2 : command code 0x36
412 ** *Response with VT100 screen (discard it)
413 ** GUI_COM_PORT_SETTING : COM port setting
414 ** byte 0,1 : length
415 ** byte 2 : command code 0x37
416 ** byte 3 : 0->COMA (term port),
417 ** 1->COMB (debug port)
418 ** byte 4 : 0/1/2/3/4/5/6/7
419 ** (1200/2400/4800/9600/19200/38400/57600/115200)
420 ** byte 5 : data bit
421 ** (0:7 bit, 1:8 bit : must be 8 bit)
422 ** byte 6 : stop bit (0:1, 1:2 stop bits)
423 ** byte 7 : parity (0:none, 1:off, 2:even)
424 ** byte 8 : flow control
425 ** (0:none, 1:xon/xoff, 2:hardware => must use none)
426 ** GUI_NO_OPERATION : No operation
427 ** byte 0,1 : length
428 ** byte 2 : command code 0x38
429 ** GUI_DHCP_IP : Set DHCP option and local IP address
430 ** byte 0,1 : length
431 ** byte 2 : command code 0x39
432 ** byte 3 : 0:dhcp disabled, 1:dhcp enabled
433 ** byte 4/5/6/7 : IP address
434 ** GUI_CREATE_PASS_THROUGH : Create pass through disk
435 ** byte 0,1 : length
436 ** byte 2 : command code 0x40
437 ** byte 3 : device #
438 ** byte 4 : scsi channel (0/1)
439 ** byte 5 : scsi id (0-->15)
440 ** byte 6 : scsi lun (0-->7)
441 ** byte 7 : tagged queue (1 : enabled)
442 ** byte 8 : cache mode (1 : enabled)
443 ** byte 9 : max speed (0/1/2/3/4,
444 ** async/20/40/80/160 for scsi)
445 ** (0/1/2/3/4, 33/66/100/133/150 for ide )
446 ** GUI_MODIFY_PASS_THROUGH : Modify pass through disk
447 ** byte 0,1 : length
448 ** byte 2 : command code 0x41
449 ** byte 3 : device #
450 ** byte 4 : scsi channel (0/1)
451 ** byte 5 : scsi id (0-->15)
452 ** byte 6 : scsi lun (0-->7)
453 ** byte 7 : tagged queue (1 : enabled)
454 ** byte 8 : cache mode (1 : enabled)
455 ** byte 9 : max speed (0/1/2/3/4,
456 ** async/20/40/80/160 for scsi)
457 ** (0/1/2/3/4, 33/66/100/133/150 for ide )
458 ** GUI_DELETE_PASS_THROUGH : Delete pass through disk
459 ** byte 0,1 : length
460 ** byte 2 : command code 0x42
461 ** byte 3 : device# to be deleted
462 ** GUI_IDENTIFY_DEVICE : Identify Device
463 ** byte 0,1 : length
464 ** byte 2 : command code 0x43
465 ** byte 3 : Flash Method
466 ** (0:flash selected, 1:flash not selected)
467 ** byte 4/5/6/7 : IDE device mask to be flashed
468 ** note .... no response data available
469 ** GUI_CREATE_RAIDSET : Create Raid Set
470 ** byte 0,1 : length
471 ** byte 2 : command code 0x50
472 ** byte 3/4/5/6 : device mask
473 ** byte 7-22 : raidset name (if byte 7 == 0:use default)
474 ** GUI_DELETE_RAIDSET : Delete Raid Set
475 ** byte 0,1 : length
476 ** byte 2 : command code 0x51
477 ** byte 3 : raidset#
478 ** GUI_EXPAND_RAIDSET : Expand Raid Set
479 ** byte 0,1 : length
480 ** byte 2 : command code 0x52
481 ** byte 3 : raidset#
482 ** byte 4/5/6/7 : device mask for expansion
483 ** byte 8/9/10 : (8:0 no change, 1 change, 0xff:terminate,
484 ** 9:new raid level,
485 ** 10:new stripe size
486 ** 0/1/2/3/4/5->4/8/16/32/64/128K )
487 ** byte 11/12/13 : repeat for each volume in the raidset
488 ** GUI_ACTIVATE_RAIDSET : Activate incomplete raid set
489 ** byte 0,1 : length
490 ** byte 2 : command code 0x53
491 ** byte 3 : raidset#
492 ** GUI_CREATE_HOT_SPARE : Create hot spare disk
493 ** byte 0,1 : length
494 ** byte 2 : command code 0x54
495 ** byte 3/4/5/6 : device mask for hot spare creation
496 ** GUI_DELETE_HOT_SPARE : Delete hot spare disk
497 ** byte 0,1 : length
498 ** byte 2 : command code 0x55
499 ** byte 3/4/5/6 : device mask for hot spare deletion
500 ** GUI_CREATE_VOLUME : Create volume set
501 ** byte 0,1 : length
502 ** byte 2 : command code 0x60
503 ** byte 3 : raidset#
504 ** byte 4-19 : volume set name
505 ** (if byte4 == 0, use default)
506 ** byte 20-27 : volume capacity (blocks)
507 ** byte 28 : raid level
508 ** byte 29 : stripe size
509 ** (0/1/2/3/4/5->4/8/16/32/64/128K)
510 ** byte 30 : channel
511 ** byte 31 : ID
512 ** byte 32 : LUN
513 ** byte 33 : 1 enable tag
514 ** byte 34 : 1 enable cache
515 ** byte 35 : speed
516 ** (0/1/2/3/4->async/20/40/80/160 for scsi)
517 ** (0/1/2/3/4->33/66/100/133/150 for IDE )
518 ** byte 36 : 1 to select quick init
519 **
520 ** GUI_MODIFY_VOLUME : Modify volume Set
521 ** byte 0,1 : length
522 ** byte 2 : command code 0x61
523 ** byte 3 : volumeset#
524 ** byte 4-19 : new volume set name
525 ** (if byte4 == 0, not change)
526 ** byte 20-27 : new volume capacity (reserved)
527 ** byte 28 : new raid level
528 ** byte 29 : new stripe size
529 ** (0/1/2/3/4/5->4/8/16/32/64/128K)
530 ** byte 30 : new channel
531 ** byte 31 : new ID
532 ** byte 32 : new LUN
533 ** byte 33 : 1 enable tag
534 ** byte 34 : 1 enable cache
535 ** byte 35 : speed
536 ** (0/1/2/3/4->async/20/40/80/160 for scsi)
537 ** (0/1/2/3/4->33/66/100/133/150 for IDE )
538 ** GUI_DELETE_VOLUME : Delete volume set
539 ** byte 0,1 : length
540 ** byte 2 : command code 0x62
541 ** byte 3 : volumeset#
542 ** GUI_START_CHECK_VOLUME : Start volume consistency check
543 ** byte 0,1 : length
544 ** byte 2 : command code 0x63
545 ** byte 3 : volumeset#
546 ** GUI_STOP_CHECK_VOLUME : Stop volume consistency check
547 ** byte 0,1 : length
548 ** byte 2 : command code 0x64
549 ** ---------------------------------------------------------------------
550 ** 4. Returned data
551 ** ---------------------------------------------------------------------
552 ** (A) Header : 3 bytes sequence (0x5E, 0x01, 0x61)
553 ** (B) Length : 2 bytes
554 ** (low byte 1st, excludes length and checksum byte)
555 ** (C) status or data :
556 ** <1> If length == 1 ==> 1 byte status code
557 ** #define GUI_OK 0x41
558 ** #define GUI_RAIDSET_NOT_NORMAL 0x42
559 ** #define GUI_VOLUMESET_NOT_NORMAL 0x43
560 ** #define GUI_NO_RAIDSET 0x44
561 ** #define GUI_NO_VOLUMESET 0x45
562 ** #define GUI_NO_PHYSICAL_DRIVE 0x46
563 ** #define GUI_PARAMETER_ERROR 0x47
564 ** #define GUI_UNSUPPORTED_COMMAND 0x48
565 ** #define GUI_DISK_CONFIG_CHANGED 0x49
566 ** #define GUI_INVALID_PASSWORD 0x4a
567 ** #define GUI_NO_DISK_SPACE 0x4b
568 ** #define GUI_CHECKSUM_ERROR 0x4c
569 ** #define GUI_PASSWORD_REQUIRED 0x4d
570 ** <2> If length > 1 ==>
571 ** data block returned from controller
572 ** and the contents depends on the command code
573 ** (E) Checksum : checksum of length and status or data byte
574 **************************************************************************