Home | History | Annotate | Download | only in inc
      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