| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef FIRMWARE_BLOB_H_ |
| #define FIRMWARE_BLOB_H_ |
| |
| #include <ddk/device.h> |
| #include <ddk/driver.h> |
| #include <zx/vmo.h> |
| |
| #include <map> |
| #include <string> |
| |
| class FirmwareBlob { |
| public: |
| enum class FirmwareType { |
| kMPEG12, |
| kH264, |
| kVp9Mmu, |
| kVp9MmuG12a, |
| }; |
| |
| ~FirmwareBlob(); |
| |
| zx_status_t LoadFirmware(zx_device_t* device); |
| |
| zx_status_t GetFirmwareData(FirmwareType firmware_type, uint8_t** data_out, |
| uint32_t* size_out); |
| |
| void LoadFakeFirmwareForTesting(FirmwareType firmware_type, uint8_t* data, |
| uint32_t size); |
| |
| private: |
| struct FirmwareCode { |
| uint64_t offset; |
| uint32_t size; |
| }; |
| |
| zx::vmo vmo_; |
| uintptr_t ptr_ = 0; |
| uint64_t fw_size_ = 0; |
| std::map<std::string, FirmwareCode> firmware_code_; |
| }; |
| |
| #endif // FIRMWARE_BLOB_H_ |