blob: 28bb943134d097ce61f6b62093d7d1c14ef9251d [file] [log] [blame]
Patrick Venture148cd652018-11-06 10:59:47 -08001#include "config.h"
2
Patrick Venturec7ca2912018-11-02 11:38:33 -07003#include "firmware_handler.hpp"
Patrick Venturea78e39f2018-11-06 18:37:06 -08004#include "image_handler.hpp"
5#include "static_handler.hpp"
Patrick Venturec7ca2912018-11-02 11:38:33 -07006
7#include <blobs-ipmid/manager.hpp>
Patrick Venture192d60f2018-11-06 11:11:59 -08008#include <cstdint>
Patrick Venturec7ca2912018-11-02 11:38:33 -07009#include <memory>
10#include <phosphor-logging/log.hpp>
11
12namespace blobs
13{
14using namespace phosphor::logging;
15
Patrick Venturea78e39f2018-11-06 18:37:06 -080016namespace
17{
18StaticLayoutHandler staticLayoutHandler;
19
20std::vector<HandlerPack> supportedFirmware = {
Patrick Venture148cd652018-11-06 10:59:47 -080021#ifdef ENABLE_STATIC_LAYOUT
Patrick Venturea78e39f2018-11-06 18:37:06 -080022 {"/flash/image", &staticLayoutHandler},
Patrick Venture148cd652018-11-06 10:59:47 -080023#endif
24};
25
Patrick Venture46637c82018-11-06 15:20:24 -080026std::uint16_t supportedTransports =
Patrick Venturefc3857b2018-11-07 08:14:55 -080027 FirmwareBlobHandler::FirmwareUpdateFlags::bt;
Patrick Venturea78e39f2018-11-06 18:37:06 -080028} // namespace
Patrick Venture192d60f2018-11-06 11:11:59 -080029
Patrick Venturec7ca2912018-11-02 11:38:33 -070030void setupFirmwareHandler() __attribute__((constructor));
31
32void setupFirmwareHandler()
33{
Patrick Venture192d60f2018-11-06 11:11:59 -080034#ifdef ENABLE_PCI_BRIDGE
Patrick Venturefc3857b2018-11-07 08:14:55 -080035 supportedTransports |= FirmwareBlobHandler::FirmwareUpdateFlags::p2a;
Patrick Venture192d60f2018-11-06 11:11:59 -080036#endif
37#ifdef ENABLE_LPC_BRIDGE
Patrick Venturefc3857b2018-11-07 08:14:55 -080038 supportedTransports |= FirmwareBlobHandler::FirmwareUpdateFlags::lpc;
Patrick Venture192d60f2018-11-06 11:11:59 -080039#endif
40
Patrick Venture52854622018-11-06 12:30:00 -080041 auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
42 supportedFirmware, supportedTransports);
43
44 if (!handler)
45 {
46 log<level::ERR>("Firmware Handler has invalid configuration");
47 return;
48 }
49
Patrick Venturec7ca2912018-11-02 11:38:33 -070050 auto* manager = getBlobManager();
Patrick Venture52854622018-11-06 12:30:00 -080051
52 if (!manager->registerHandler(std::move(handler)))
Patrick Venturec7ca2912018-11-02 11:38:33 -070053 {
54 log<level::ERR>("Failed to register Firmware Handler");
55 }
56}
57
58} // namespace blobs