arcmsr_spec.txt 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  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 return 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. **************************************************************************