1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef __NANOHUBPACKET_H 18 #define __NANOHUBPACKET_H 19 20 /** 21 * Formats and constants related to nanohub packets. This header is intended 22 * to be shared between the host Linux kernel and the nanohub implementation. 23 */ 24 #include "toolchain.h" 25 26 #ifdef __KERNEL__ 27 #include <linux/types.h> 28 #else 29 #include <hostIntf.h> 30 #include <stdint.h> 31 32 typedef uint16_t __le16; 33 typedef uint16_t __be16; 34 typedef uint32_t __le32; 35 typedef uint32_t __be32; 36 typedef uint64_t __le64; 37 typedef uint64_t __be64; 38 #endif 39 40 SET_PACKED_STRUCT_MODE_ON 41 struct NanohubPacket { 42 uint8_t sync; 43 __le32 seq; 44 __le32 reason; 45 uint8_t len; 46 uint8_t data[0]; 47 } ATTRIBUTE_PACKED; 48 SET_PACKED_STRUCT_MODE_OFF 49 50 SET_PACKED_STRUCT_MODE_ON 51 struct NanohubPacketFooter { 52 __le32 crc; 53 } ATTRIBUTE_PACKED; 54 SET_PACKED_STRUCT_MODE_OFF 55 56 static inline struct NanohubPacketFooter *nanohubGetPacketFooter(struct NanohubPacket *packet) 57 { 58 return (struct NanohubPacketFooter *)(packet->data + packet->len); 59 } 60 61 #define NANOHUB_PACKET_SIZE(len) \ 62 (sizeof(struct NanohubPacket) + (len) + sizeof(struct NanohubPacketFooter)) 63 64 #define NANOHUB_PACKET_PAYLOAD_MAX 255 65 #define NANOHUB_PACKET_SIZE_MAX NANOHUB_PACKET_SIZE(NANOHUB_PACKET_PAYLOAD_MAX) 66 #define NANOHUB_PACKET_SIZE_MIN NANOHUB_PACKET_SIZE(0) 67 68 #define NANOHUB_SYNC_BYTE 0x31 69 70 #define NANOHUB_PREAMBLE_BYTE 0xFF 71 #define NANOHUB_ACK_PREAMBLE_LEN 16 72 #define NANOHUB_PAYLOAD_PREAMBLE_LEN 512 73 #define NANOHUB_RSA_KEY_CHUNK_LEN 64 74 75 #define NANOHUB_INT_BOOT_COMPLETE 0 76 #define NANOHUB_INT_WAKE_COMPLETE 0 77 #define NANOHUB_INT_WAKEUP 1 78 #define NANOHUB_INT_NONWAKEUP 2 79 #define NANOHUB_INT_CMD_WAIT 3 80 81 #define NANOHUB_REASON_ACK 0x00000000 82 #define NANOHUB_REASON_NAK 0x00000001 83 #define NANOHUB_REASON_NAK_BUSY 0x00000002 84 85 /** 86 * INFORMATIONAL 87 */ 88 89 #define NANOHUB_REASON_GET_OS_HW_VERSIONS 0x00001000 90 #if defined(__GNUC__) 91 SET_PACKED_STRUCT_MODE_ON 92 struct NanohubOsHwVersionsRequest { 93 } ATTRIBUTE_PACKED; 94 SET_PACKED_STRUCT_MODE_OFF 95 #endif 96 97 SET_PACKED_STRUCT_MODE_ON 98 struct NanohubOsHwVersionsResponse { 99 __le16 hwType; 100 __le16 hwVer; 101 __le16 blVer; 102 __le16 osVer; 103 __le32 variantVer; 104 } ATTRIBUTE_PACKED; 105 SET_PACKED_STRUCT_MODE_OFF 106 107 #define NANOHUB_REASON_GET_APP_VERSIONS 0x00001001 108 109 SET_PACKED_STRUCT_MODE_ON 110 struct NanohubAppVersionsRequest { 111 __le64 appId; 112 } ATTRIBUTE_PACKED; 113 SET_PACKED_STRUCT_MODE_OFF 114 115 SET_PACKED_STRUCT_MODE_ON 116 struct NanohubAppVersionsResponse { 117 __le32 appVer; 118 } ATTRIBUTE_PACKED; 119 SET_PACKED_STRUCT_MODE_OFF 120 121 #define NANOHUB_REASON_QUERY_APP_INFO 0x00001002 122 123 SET_PACKED_STRUCT_MODE_ON 124 struct NanohubAppInfoRequest { 125 __le32 appIdx; 126 } ATTRIBUTE_PACKED; 127 SET_PACKED_STRUCT_MODE_OFF 128 129 SET_PACKED_STRUCT_MODE_ON 130 struct NanohubAppInfoResponse { 131 __le64 appId; 132 __le32 appVer; 133 __le32 appSize; 134 } ATTRIBUTE_PACKED; 135 SET_PACKED_STRUCT_MODE_OFF 136 137 #define NANOHUB_REASON_START_FIRMWARE_UPLOAD 0x00001040 138 139 SET_PACKED_STRUCT_MODE_ON 140 struct NanohubStartFirmwareUploadRequest { 141 __le32 size; 142 __le32 crc; 143 uint8_t type; 144 } ATTRIBUTE_PACKED; 145 SET_PACKED_STRUCT_MODE_OFF 146 147 SET_PACKED_STRUCT_MODE_ON 148 struct NanohubStartFirmwareUploadResponse { 149 uint8_t accepted; 150 } ATTRIBUTE_PACKED; 151 SET_PACKED_STRUCT_MODE_OFF 152 153 #define NANOHUB_REASON_FIRMWARE_CHUNK 0x00001041 154 155 SET_PACKED_STRUCT_MODE_ON 156 struct NanohubFirmwareChunkRequest { 157 __le32 offset; 158 uint8_t data[NANOHUB_PACKET_PAYLOAD_MAX-sizeof(__le32)]; 159 } ATTRIBUTE_PACKED; 160 SET_PACKED_STRUCT_MODE_OFF 161 162 enum NanohubFirmwareChunkReply { 163 NANOHUB_FIRMWARE_CHUNK_REPLY_ACCEPTED = 0, 164 NANOHUB_FIRMWARE_CHUNK_REPLY_WAIT, 165 NANOHUB_FIRMWARE_CHUNK_REPLY_RESEND, 166 NANOHUB_FIRMWARE_CHUNK_REPLY_RESTART, 167 NANOHUB_FIRMWARE_CHUNK_REPLY_CANCEL, 168 NANOHUB_FIRMWARE_CHUNK_REPLY_CANCEL_NO_RETRY, 169 NANOHUB_FIRMWARE_CHUNK_REPLY_NO_SPACE, 170 }; 171 172 SET_PACKED_STRUCT_MODE_ON 173 struct NanohubFirmwareChunkResponse { 174 uint8_t chunkReply; 175 } ATTRIBUTE_PACKED; 176 SET_PACKED_STRUCT_MODE_OFF 177 178 #define NANOHUB_REASON_FINISH_FIRMWARE_UPLOAD 0x00001042 179 180 #if defined(__GNUC__) 181 SET_PACKED_STRUCT_MODE_ON 182 struct NanohubFinishFirmwareUploadRequest { 183 } ATTRIBUTE_PACKED; 184 SET_PACKED_STRUCT_MODE_OFF 185 #endif 186 187 enum NanohubFirmwareUploadReply { 188 NANOHUB_FIRMWARE_UPLOAD_SUCCESS = 0, 189 NANOHUB_FIRMWARE_UPLOAD_PROCESSING, 190 NANOHUB_FIRMWARE_UPLOAD_WAITING_FOR_DATA, 191 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_KEY_NOT_FOUND, 192 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_HEADER_ERROR, 193 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_TOO_MUCH_DATA, 194 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_TOO_LITTLE_DATA, 195 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_SIG_VERIFY_FAIL, 196 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_SIG_DECODE_FAIL, 197 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_SIG_ROOT_UNKNOWN, 198 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_MEMORY_ERROR, 199 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_INVALID_DATA, 200 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_VERIFY_FAILED, 201 NANOHUB_FIRMWARE_UPLOAD_APP_SEC_BAD, 202 }; 203 204 SET_PACKED_STRUCT_MODE_ON 205 struct NanohubFinishFirmwareUploadResponse { 206 uint8_t uploadReply; 207 } ATTRIBUTE_PACKED; 208 SET_PACKED_STRUCT_MODE_OFF 209 210 #define NANOHUB_REASON_GET_INTERRUPT 0x00001080 211 212 SET_PACKED_STRUCT_MODE_ON 213 struct NanohubGetInterruptRequest { 214 uint32_t clear[HOSTINTF_MAX_INTERRUPTS/(32*sizeof(uint8_t))]; 215 } ATTRIBUTE_PACKED; 216 SET_PACKED_STRUCT_MODE_OFF 217 218 SET_PACKED_STRUCT_MODE_ON 219 struct NanohubGetInterruptResponse { 220 uint32_t interrupts[HOSTINTF_MAX_INTERRUPTS/(32*sizeof(uint8_t))]; 221 } ATTRIBUTE_PACKED; 222 SET_PACKED_STRUCT_MODE_OFF 223 224 #define NANOHUB_REASON_MASK_INTERRUPT 0x00001081 225 226 SET_PACKED_STRUCT_MODE_ON 227 struct NanohubMaskInterruptRequest { 228 uint8_t interrupt; 229 } ATTRIBUTE_PACKED; 230 SET_PACKED_STRUCT_MODE_OFF 231 232 SET_PACKED_STRUCT_MODE_ON 233 struct NanohubMaskInterruptResponse { 234 uint8_t accepted; 235 } ATTRIBUTE_PACKED; 236 SET_PACKED_STRUCT_MODE_OFF 237 238 #define NANOHUB_REASON_UNMASK_INTERRUPT 0x00001082 239 240 SET_PACKED_STRUCT_MODE_ON 241 struct NanohubUnmaskInterruptRequest { 242 uint8_t interrupt; 243 } ATTRIBUTE_PACKED; 244 SET_PACKED_STRUCT_MODE_OFF 245 246 SET_PACKED_STRUCT_MODE_ON 247 struct NanohubUnmaskInterruptResponse { 248 uint8_t accepted; 249 } ATTRIBUTE_PACKED; 250 SET_PACKED_STRUCT_MODE_OFF 251 252 #define NANOHUB_REASON_READ_EVENT 0x00001090 253 254 SET_PACKED_STRUCT_MODE_ON 255 struct NanohubReadEventRequest { 256 __le64 apBootTime; 257 } ATTRIBUTE_PACKED; 258 SET_PACKED_STRUCT_MODE_OFF 259 260 SET_PACKED_STRUCT_MODE_ON 261 struct NanohubReadEventResponse { 262 __le32 evtType; 263 uint8_t evtData[NANOHUB_PACKET_PAYLOAD_MAX - sizeof(__le32)]; 264 } ATTRIBUTE_PACKED; 265 SET_PACKED_STRUCT_MODE_OFF 266 267 #define NANOHUB_REASON_WRITE_EVENT 0x00001091 268 269 SET_PACKED_STRUCT_MODE_ON 270 struct NanohubWriteEventRequest { 271 __le32 evtType; 272 uint8_t evtData[NANOHUB_PACKET_PAYLOAD_MAX - sizeof(__le32)]; 273 } ATTRIBUTE_PACKED; 274 SET_PACKED_STRUCT_MODE_OFF 275 276 SET_PACKED_STRUCT_MODE_ON 277 struct NanohubWriteEventResponse { 278 uint8_t accepted; 279 } ATTRIBUTE_PACKED; 280 SET_PACKED_STRUCT_MODE_OFF 281 282 // this behaves more stable w.r.t. endianness than bit field 283 // this is setting byte fields in MgmtStatus response 284 // the high-order bit, if set, is indication of counter overflow 285 #define SET_COUNTER(counter, val) (counter = (val & 0x7F) | (val > 0x7F ? 0x80 : 0)) 286 287 SET_PACKED_STRUCT_MODE_ON 288 struct MgmtStatus { 289 union { 290 __le32 value; 291 // NOTE: union fields are accessed in CPU native mode 292 struct { 293 uint8_t app; 294 uint8_t task; 295 uint8_t op; 296 uint8_t erase; 297 } ATTRIBUTE_PACKED; 298 }; 299 } ATTRIBUTE_PACKED; 300 SET_PACKED_STRUCT_MODE_OFF 301 302 #ifdef LEGACY_HAL_ENABLED 303 304 SET_PACKED_STRUCT_MODE_ON 305 struct NanohubHalLegacyHdr { 306 uint64_t appId; 307 uint8_t len; 308 uint8_t msg; 309 } ATTRIBUTE_PACKED; 310 SET_PACKED_STRUCT_MODE_OFF 311 312 #define NANOHUB_HAL_LEGACY_EXT_APPS_ON 0 313 #define NANOHUB_HAL_LEGACY_EXT_APPS_OFF 1 314 #define NANOHUB_HAL_LEGACY_EXT_APP_DELETE 2 315 316 SET_PACKED_STRUCT_MODE_ON 317 struct NanohubHalLegacyMgmtRx { 318 __le64 appId; 319 struct MgmtStatus stat; 320 } ATTRIBUTE_PACKED; 321 SET_PACKED_STRUCT_MODE_OFF 322 323 SET_PACKED_STRUCT_MODE_ON 324 struct NanohubHalLegacyMgmtTx { 325 struct NanohubHalLegacyHdr hdr; 326 __le32 status; 327 } ATTRIBUTE_PACKED; 328 SET_PACKED_STRUCT_MODE_OFF 329 330 #define NANOHUB_HAL_LEGACY_QUERY_MEMINFO 3 331 #define NANOHUB_HAL_LEGACY_QUERY_APPS 4 332 333 SET_PACKED_STRUCT_MODE_ON 334 struct NanohubHalLegacyQueryAppsRx { 335 __le32 idx; 336 } ATTRIBUTE_PACKED; 337 SET_PACKED_STRUCT_MODE_OFF 338 339 SET_PACKED_STRUCT_MODE_ON 340 struct NanohubHalLegacyQueryAppsTx { 341 struct NanohubHalLegacyHdr hdr; 342 __le64 appId; 343 __le32 version; 344 __le32 flashUse; 345 __le32 ramUse; 346 } ATTRIBUTE_PACKED; 347 SET_PACKED_STRUCT_MODE_OFF 348 349 #define NANOHUB_HAL_LEGACY_QUERY_RSA_KEYS 5 350 351 SET_PACKED_STRUCT_MODE_ON 352 struct NanohubHalLegacyQueryRsaKeysRx { 353 __le32 offset; 354 } ATTRIBUTE_PACKED; 355 SET_PACKED_STRUCT_MODE_OFF 356 357 SET_PACKED_STRUCT_MODE_ON 358 struct NanohubHalLegacyQueryRsaKeysTx { 359 struct NanohubHalLegacyHdr hdr; 360 uint8_t data[]; 361 } ATTRIBUTE_PACKED; 362 SET_PACKED_STRUCT_MODE_OFF 363 364 #define NANOHUB_HAL_LEGACY_START_UPLOAD 6 365 366 SET_PACKED_STRUCT_MODE_ON 367 struct NanohubHalLegacyStartUploadRx { 368 uint8_t isOs; 369 __le32 length; 370 } ATTRIBUTE_PACKED; 371 SET_PACKED_STRUCT_MODE_OFF 372 373 SET_PACKED_STRUCT_MODE_ON 374 struct NanohubHalLegacyStartUploadTx { 375 struct NanohubHalLegacyHdr hdr; 376 uint8_t success; 377 } ATTRIBUTE_PACKED; 378 SET_PACKED_STRUCT_MODE_OFF 379 380 #define NANOHUB_HAL_LEGACY_CONT_UPLOAD 7 381 382 SET_PACKED_STRUCT_MODE_ON 383 struct NanohubHalLegacyContUploadRx { 384 __le32 offset; 385 uint8_t data[]; 386 } ATTRIBUTE_PACKED; 387 SET_PACKED_STRUCT_MODE_OFF 388 389 SET_PACKED_STRUCT_MODE_ON 390 struct NanohubHalLegacyContUploadTx { 391 struct NanohubHalLegacyHdr hdr; 392 uint8_t success; 393 } ATTRIBUTE_PACKED; 394 SET_PACKED_STRUCT_MODE_OFF 395 396 #define NANOHUB_HAL_LEGACY_FINISH_UPLOAD 8 397 398 SET_PACKED_STRUCT_MODE_ON 399 struct NanohubHalLegacyFinishUploadTx { 400 struct NanohubHalLegacyHdr hdr; 401 uint8_t success; 402 } ATTRIBUTE_PACKED; 403 SET_PACKED_STRUCT_MODE_OFF 404 405 #define NANOHUB_HAL_LEGACY_REBOOT 9 406 407 SET_PACKED_STRUCT_MODE_ON 408 struct NanohubHalLegacyRebootTx { 409 struct NanohubHalLegacyHdr hdr; 410 __le32 reason; 411 } ATTRIBUTE_PACKED; 412 SET_PACKED_STRUCT_MODE_OFF 413 414 #endif /* LEGACY_HAL_ENABLED */ 415 416 SET_PACKED_STRUCT_MODE_ON 417 struct NanohubHalHdr { 418 __le64 appId; 419 uint8_t len; 420 __le32 transactionId; 421 __le16 unused; 422 } ATTRIBUTE_PACKED; 423 SET_PACKED_STRUCT_MODE_OFF 424 425 SET_PACKED_STRUCT_MODE_ON 426 struct NanohubHalRet { 427 uint8_t msg; 428 __le32 status; 429 } ATTRIBUTE_PACKED; 430 431 #define NANOHUB_HAL_APP_MGMT 0x10 432 433 SET_PACKED_STRUCT_MODE_ON 434 struct NanohubHalAppMgmtRx { 435 __le64 appId; 436 uint8_t cmd; 437 } ATTRIBUTE_PACKED; 438 SET_PACKED_STRUCT_MODE_OFF 439 440 #define NANOHUB_HAL_APP_MGMT_START 0 441 #define NANOHUB_HAL_APP_MGMT_STOP 1 442 #define NANOHUB_HAL_APP_MGMT_UNLOAD 2 443 #define NANOHUB_HAL_APP_MGMT_DELETE 3 444 445 SET_PACKED_STRUCT_MODE_ON 446 struct NanohubHalAppMgmtTx { 447 struct NanohubHalHdr hdr; 448 struct NanohubHalRet ret; 449 uint8_t cmd; 450 struct MgmtStatus stat; 451 } ATTRIBUTE_PACKED; 452 SET_PACKED_STRUCT_MODE_OFF 453 454 #define NANOHUB_HAL_SYS_MGMT 0x11 455 456 SET_PACKED_STRUCT_MODE_ON 457 struct NanohubHalSysMgmtRx { 458 uint8_t cmd; 459 } ATTRIBUTE_PACKED; 460 SET_PACKED_STRUCT_MODE_OFF 461 462 #define NANOHUB_HAL_SYS_MGMT_ERASE 0 463 #define NANOHUB_HAL_SYS_MGMT_REBOOT 1 464 465 SET_PACKED_STRUCT_MODE_ON 466 struct NanohubHalSysMgmtTx { 467 struct NanohubHalHdr hdr; 468 struct NanohubHalRet ret; 469 uint8_t cmd; 470 } ATTRIBUTE_PACKED; 471 SET_PACKED_STRUCT_MODE_OFF 472 473 #define NANOHUB_HAL_APP_INFO 0x12 474 475 SET_PACKED_STRUCT_MODE_ON 476 struct NanohubHalAppInfoRx { 477 __le32 addr; 478 uint8_t tags[HOST_HUB_CHRE_PACKET_MAX_LEN - sizeof(__le32)]; 479 } ATTRIBUTE_PACKED; 480 SET_PACKED_STRUCT_MODE_OFF 481 482 #define NANOHUB_HAL_APP_INFO_APPID 0x00 483 #define NANOHUB_HAL_APP_INFO_CRC 0x01 484 #define NANOHUB_HAL_APP_INFO_TID 0x02 485 #define NANOHUB_HAL_APP_INFO_VERSION 0x03 486 #define NANOHUB_HAL_APP_INFO_ADDR 0x04 487 #define NANOHUB_HAL_APP_INFO_SIZE 0x05 488 #define NANOHUB_HAL_APP_INFO_HEAP 0x06 489 #define NANOHUB_HAL_APP_INFO_DATA 0x07 490 #define NANOHUB_HAL_APP_INFO_BSS 0x08 491 #define NANOHUB_HAL_APP_INFO_CHRE_MAJOR 0x09 492 #define NANOHUB_HAL_APP_INFO_CHRE_MINOR 0x0A 493 #define NANOHUB_HAL_APP_INFO_END 0xFF 494 495 SET_PACKED_STRUCT_MODE_ON 496 struct NanohubHalAppInfoTx { 497 struct NanohubHalHdr hdr; 498 struct NanohubHalRet ret; 499 uint8_t data[HOST_HUB_CHRE_PACKET_MAX_LEN - sizeof(struct NanohubHalRet)]; 500 } ATTRIBUTE_PACKED; 501 SET_PACKED_STRUCT_MODE_OFF 502 503 #define NANOHUB_HAL_SYS_INFO 0x13 504 505 SET_PACKED_STRUCT_MODE_ON 506 struct NanohubHalSysInfoRx { 507 uint8_t tags[HOST_HUB_CHRE_PACKET_MAX_LEN]; 508 } ATTRIBUTE_PACKED; 509 SET_PACKED_STRUCT_MODE_OFF 510 511 #define NANOHUB_HAL_SYS_INFO_HEAP_FREE 0x0F 512 #define NANOHUB_HAL_SYS_INFO_RAM_SIZE 0x12 513 #define NANOHUB_HAL_SYS_INFO_EEDATA_SIZE 0x13 514 #define NANOHUB_HAL_SYS_INFO_EEDATA_FREE 0x14 515 #define NANOHUB_HAL_SYS_INFO_CODE_SIZE 0x15 516 #define NANOHUB_HAL_SYS_INFO_CODE_FREE 0x16 517 #define NANOHUB_HAL_SYS_INFO_SHARED_SIZE 0x17 518 #define NANOHUB_HAL_SYS_INFO_SHARED_FREE 0x18 519 #define NANOHUB_HAL_SYS_INFO_END 0xFF 520 521 SET_PACKED_STRUCT_MODE_ON 522 struct NanohubHalSysInfoTx { 523 struct NanohubHalHdr hdr; 524 struct NanohubHalRet ret; 525 uint8_t data[HOST_HUB_CHRE_PACKET_MAX_LEN - sizeof(struct NanohubHalRet)]; 526 } ATTRIBUTE_PACKED; 527 SET_PACKED_STRUCT_MODE_OFF 528 529 #define NANOHUB_HAL_KEY_INFO 0x14 530 531 SET_PACKED_STRUCT_MODE_ON 532 struct NanohubHalKeyInfoRx { 533 uint32_t keyNum; 534 uint32_t dataOffset; 535 } ATTRIBUTE_PACKED; 536 SET_PACKED_STRUCT_MODE_OFF 537 538 SET_PACKED_STRUCT_MODE_ON 539 struct NanohubHalKeyInfoTx { 540 struct NanohubHalHdr hdr; 541 struct NanohubHalRet ret; 542 uint32_t keyLength; 543 uint8_t data[NANOHUB_RSA_KEY_CHUNK_LEN]; 544 } ATTRIBUTE_PACKED; 545 SET_PACKED_STRUCT_MODE_OFF 546 547 #define NANOHUB_HAL_START_UPLOAD 0x16 548 549 SET_PACKED_STRUCT_MODE_ON 550 struct NanohubHalStartUploadRx { 551 uint8_t isOs; 552 __le32 length; 553 } ATTRIBUTE_PACKED; 554 SET_PACKED_STRUCT_MODE_OFF 555 556 SET_PACKED_STRUCT_MODE_ON 557 struct NanohubHalStartUploadTx { 558 struct NanohubHalHdr hdr; 559 struct NanohubHalRet ret; 560 } ATTRIBUTE_PACKED; 561 SET_PACKED_STRUCT_MODE_OFF 562 563 #define NANOHUB_HAL_CONT_UPLOAD 0x17 564 565 SET_PACKED_STRUCT_MODE_ON 566 struct NanohubHalContUploadRx { 567 __le32 offset; 568 uint8_t data[HOST_HUB_CHRE_PACKET_MAX_LEN-sizeof(__le32)]; 569 } ATTRIBUTE_PACKED; 570 SET_PACKED_STRUCT_MODE_ON 571 572 SET_PACKED_STRUCT_MODE_ON 573 struct NanohubHalContUploadTx { 574 struct NanohubHalHdr hdr; 575 struct NanohubHalRet ret; 576 } ATTRIBUTE_PACKED; 577 SET_PACKED_STRUCT_MODE_OFF 578 579 #define NANOHUB_HAL_FINISH_UPLOAD 0x18 580 581 SET_PACKED_STRUCT_MODE_ON 582 struct NanohubHalFinishUploadTx { 583 struct NanohubHalHdr hdr; 584 struct NanohubHalRet ret; 585 __le32 addr; 586 __le32 crc; 587 } ATTRIBUTE_PACKED; 588 SET_PACKED_STRUCT_MODE_OFF 589 590 #endif /* __NANOHUBPACKET_H */ 591