fwupd/plugins/vli/fu-vli-usbhub-common.h
Richard Hughes e968c0ec07 vli: Have one 'DeviceKind' for all objects
We'll soon have PD devices that are not children of the FuVliUsbhubDevice and
so it makes sense to flattern out the namespace. Also, less code.
2020-01-02 13:24:13 +00:00

66 lines
2.2 KiB
C

/*
* Copyright (C) 2017-2019 VIA Corporation
* Copyright (C) 2019 Richard Hughes <richard@hughsie.com>
*
* SPDX-License-Identifier: LGPL-2.1+
*/
#pragma once
#include "fu-plugin.h"
#include "fu-vli-common.h"
typedef struct __attribute__ ((packed)) {
guint16 dev_id; /* 0x00, BE */
guint8 strapping1; /* 0x02 */
guint8 strapping2; /* 0x03 */
guint16 usb3_fw_addr; /* 0x04, BE */
guint16 usb3_fw_sz; /* 0x06, BE */
guint16 usb2_fw_addr; /* 0x08, BE */
guint16 usb2_fw_sz; /* 0x0a, BE */
guint8 usb3_fw_addr_high; /* 0x0c */
guint8 unknown_0d[3]; /* 0x0d */
guint8 usb2_fw_addr_high; /* 0x10 */
guint8 unknown_11[10]; /* 0x11 */
guint8 inverse_pe41; /* 0x1b */
guint8 prev_ptr; /* 0x1c, addr / 0x20 */
guint8 next_ptr; /* 0x1d, addr / 0x20 */
guint8 variant; /* 0x1e */
guint8 checksum; /* 0x1f */
} FuVliUsbhubHeader;
G_STATIC_ASSERT(sizeof(FuVliUsbhubHeader) == 0x20);
#define FU_VLI_USBHUB_HEADER_STRAPPING1_SELFW1 (1 << 1)
#define FU_VLI_USBHUB_HEADER_STRAPPING1_76PIN (1 << 2)
#define FU_VLI_USBHUB_HEADER_STRAPPING1_B3UP (1 << 3)
#define FU_VLI_USBHUB_HEADER_STRAPPING1_LPC (1 << 4)
#define FU_VLI_USBHUB_HEADER_STRAPPING1_U1U2 (1 << 5)
#define FU_VLI_USBHUB_HEADER_STRAPPING1_BC (1 << 6)
#define FU_VLI_USBHUB_HEADER_STRAPPING1_Q4S (1 << 7)
#define FU_VLI_USBHUB_HEADER_STRAPPING2_IDXEN (1 << 0)
#define FU_VLI_USBHUB_HEADER_STRAPPING2_FWRTY (1 << 1)
#define FU_VLI_USBHUB_HEADER_STRAPPING2_SELFW2 (1 << 7)
#define VLI_USBHUB_FLASHMAP_ADDR_TO_IDX(addr) (addr / 0x20)
#define VLI_USBHUB_FLASHMAP_IDX_TO_ADDR(addr) (addr * 0x20)
#define VLI_USBHUB_FLASHMAP_IDX_HD1 0x00 /* factory firmware */
#define VLI_USBHUB_FLASHMAP_IDX_HD2 0x80 /* update firmware */
#define VLI_USBHUB_FLASHMAP_IDX_INVALID 0xff
#define VLI_USBHUB_FLASHMAP_ADDR_HD1 0x0
#define VLI_USBHUB_FLASHMAP_ADDR_HD1_BACKUP 0x1800
#define VLI_USBHUB_FLASHMAP_ADDR_HD2 0x1000
#define VLI_USBHUB_FLASHMAP_ADDR_FW 0x2000
#define VLI_USBHUB_FLASHMAP_ADDR_PD_LEGACY 0x10000
#define VLI_USBHUB_FLASHMAP_ADDR_PD 0x20000
#define VLI_USBHUB_FLASHMAP_ADDR_PD_BACKUP 0x30000
guint8 fu_vli_usbhub_header_crc8 (FuVliUsbhubHeader *hdr);
void fu_vli_usbhub_header_to_string (FuVliUsbhubHeader *hdr,
guint idt,
GString *str);