1
0
mirror of https://github.com/corundum/corundum.git synced 2025-01-16 08:12:53 +08:00
corundum/lib/mqnic/reg_if.c
Alex Forencich 448fa8eb4c Use SPDX
Signed-off-by: Alex Forencich <alex@alexforencich.com>
2023-06-26 11:44:57 -07:00

136 lines
4.0 KiB
C

// SPDX-License-Identifier: BSD-2-Clause-Views
/*
* Copyright (c) 2022-2023 The Regents of the University of California
*/
#include "reg_if.h"
int mqnic_reg_if_read8(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint8_t *value)
{
if (!reg || !reg->ops || !reg->ops->read8)
return -1;
return reg->ops->read8(reg, offset, value);
}
int mqnic_reg_if_write8(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint8_t value)
{
if (!reg || !reg->ops || !reg->ops->write8)
return -1;
return reg->ops->write8(reg, offset, value);
}
int mqnic_reg_if_read16(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint16_t *value)
{
if (!reg || !reg->ops || !reg->ops->read16)
return -1;
return reg->ops->read16(reg, offset, value);
}
int mqnic_reg_if_write16(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint16_t value)
{
if (!reg || !reg->ops || !reg->ops->write16)
return -1;
return reg->ops->write16(reg, offset, value);
}
int mqnic_reg_if_read32(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint32_t *value)
{
if (!reg || !reg->ops || !reg->ops->read32)
return -1;
return reg->ops->read32(reg, offset, value);
}
int mqnic_reg_if_write32(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint32_t value)
{
if (!reg || !reg->ops || !reg->ops->write32)
return -1;
return reg->ops->write32(reg, offset, value);
}
int mqnic_reg_if_read64(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint64_t *value)
{
if (!reg || !reg->ops || !reg->ops->read64)
return -1;
return reg->ops->read64(reg, offset, value);
}
int mqnic_reg_if_write64(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint64_t value)
{
if (!reg || !reg->ops || !reg->ops->write64)
return -1;
return reg->ops->write64(reg, offset, value);
}
static int mqnic_reg_if_raw_read8(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint8_t *value)
{
uint8_t *regs = (uint8_t *)reg->priv;
*value = *(volatile uint8_t *)(regs+offset);
return 0;
}
static int mqnic_reg_if_raw_write8(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint8_t value)
{
uint8_t *regs = (uint8_t *)reg->priv;
*(volatile uint8_t *)(regs+offset) = value;
return 0;
}
static int mqnic_reg_if_raw_read16(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint16_t *value)
{
uint8_t *regs = (uint8_t *)reg->priv;
*value = *(volatile uint16_t *)(regs+offset);
return 0;
}
static int mqnic_reg_if_raw_write16(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint16_t value)
{
uint8_t *regs = (uint8_t *)reg->priv;
*(volatile uint16_t *)(regs+offset) = value;
return 0;
}
static int mqnic_reg_if_raw_read32(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint32_t *value)
{
uint8_t *regs = (uint8_t *)reg->priv;
*value = *(volatile uint32_t *)(regs+offset);
return 0;
}
static int mqnic_reg_if_raw_write32(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint32_t value)
{
uint8_t *regs = (uint8_t *)reg->priv;
*(volatile uint32_t *)(regs+offset) = value;
return 0;
}
static int mqnic_reg_if_raw_read64(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint64_t *value)
{
uint8_t *regs = (uint8_t *)reg->priv;
*value = *(volatile uint64_t *)(regs+offset);
return 0;
}
static int mqnic_reg_if_raw_write64(const struct mqnic_reg_if *reg, ptrdiff_t offset, uint64_t value)
{
uint8_t *regs = (uint8_t *)reg->priv;
*(volatile uint64_t *)(regs+offset) = value;
return 0;
}
static const struct mqnic_reg_if_ops mqnic_reg_if_raw_ops = {
.read8 = mqnic_reg_if_raw_read8,
.write8 = mqnic_reg_if_raw_write8,
.read16 = mqnic_reg_if_raw_read16,
.write16 = mqnic_reg_if_raw_write16,
.read32 = mqnic_reg_if_raw_read32,
.write32 = mqnic_reg_if_raw_write32,
.read64 = mqnic_reg_if_raw_read64,
.write64 = mqnic_reg_if_raw_write64
};
void mqnic_reg_if_setup_raw(struct mqnic_reg_if *reg, void *regs)
{
reg->priv = regs;
reg->ops = &mqnic_reg_if_raw_ops;
}