blob: d49a5ed85904d16dba4e6c20fdc07ddc5be861f2 [file] [log] [blame]
// Copyright 2022 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 SRC_ACPI_MULTIPLY_REGISTERS_H_
#define SRC_ACPI_MULTIPLY_REGISTERS_H_
#include <hwreg/bitfields.h>
namespace acpi_multiply {
constexpr uint32_t kMultiplyAOffset = 0x00;
constexpr uint32_t kMultiplyBOffset = 0x04;
constexpr uint32_t kMultiplyResultOffset = 0x08;
constexpr uint32_t kMultiplyStatusOffset = 0x0c;
class MultiplyArgumentReg : public hwreg::RegisterBase<MultiplyArgumentReg, uint32_t> {
public:
DEF_FIELD(31, 0, operand);
static auto Get(bool first) {
return hwreg::RegisterAddr<MultiplyArgumentReg>(first ? kMultiplyAOffset : kMultiplyBOffset);
}
};
class MultiplyResultReg : public hwreg::RegisterBase<MultiplyResultReg, uint32_t> {
public:
DEF_FIELD(31, 0, result);
static auto Get() { return hwreg::RegisterAddr<MultiplyResultReg>(kMultiplyResultOffset); }
};
class MultiplyStatusReg : public hwreg::RegisterBase<MultiplyStatusReg, uint32_t> {
public:
DEF_BIT(1, overflow);
DEF_BIT(0, finished);
static auto Get() { return hwreg::RegisterAddr<MultiplyStatusReg>(kMultiplyStatusOffset); }
};
} // namespace acpi_multiply
#endif // SRC_ACPI_MULTIPLY_REGISTERS_H_