Erich Chen | 1c57e86 | 2006-07-12 08:59:32 -0700 | [diff] [blame] | 1 | ******************************************************************************* |
| 2 | ** ARECA FIRMWARE SPEC |
| 3 | ******************************************************************************* |
| 4 | ** Usage of IOP331 adapter |
| 5 | ** (All In/Out is in IOP331's view) |
Gabriel Craciunescu | e9534b3 | 2007-10-20 02:13:26 +0200 | [diff] [blame^] | 6 | ** 1. Message 0 --> InitThread message and return code |
Erich Chen | 1c57e86 | 2006-07-12 08:59:32 -0700 | [diff] [blame] | 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 | ************************************************************************** |