mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
ips/dma: use json_unpack
This commit is contained in:
parent
bac0b7309a
commit
7b4176a710
1 changed files with 37 additions and 100 deletions
|
@ -52,23 +52,6 @@ bool Dma::init()
|
|||
logger->info("Scatter-Gather support: {}", hasScatterGather());
|
||||
|
||||
xConfig.BaseAddr = getBaseAddr(registerMemory);
|
||||
if (!configSet) {
|
||||
xConfig.HasStsCntrlStrm = 0;
|
||||
xConfig.HasMm2S = 1;
|
||||
xConfig.HasMm2SDRE = 0;
|
||||
xConfig.Mm2SDataWidth = 32;
|
||||
xConfig.HasS2Mm = 1;
|
||||
xConfig.HasS2MmDRE = 0;
|
||||
xConfig.HasSg = hasScatterGather();
|
||||
xConfig.S2MmDataWidth = 32;
|
||||
xConfig.Mm2sNumChannels = 1;
|
||||
xConfig.S2MmNumChannels = 1;
|
||||
xConfig.Mm2SBurstSize = 16;
|
||||
xConfig.S2MmBurstSize = 16;
|
||||
xConfig.MicroDmaMode = 0;
|
||||
xConfig.AddrWidth = 32;
|
||||
xConfig.SgLengthWidth = 14;
|
||||
}
|
||||
|
||||
if (XAxiDma_CfgInitialize(&xDma, &xConfig) != XST_SUCCESS)
|
||||
{
|
||||
|
@ -612,92 +595,46 @@ bool
|
|||
DmaFactory::configureJson(Core& ip, json_t* json)
|
||||
{
|
||||
auto &dma = dynamic_cast<Dma&>(ip);
|
||||
enum DmaParameters {
|
||||
HasStsCntrlStrm,
|
||||
HasMm2S,
|
||||
HasMm2SDRE,
|
||||
Mm2SDataWidth,
|
||||
HasS2Mm,
|
||||
HasS2MmDRE,
|
||||
S2MmDataWidth,
|
||||
HasSg,
|
||||
Mm2sNumChannels,
|
||||
S2MmNumChannels,
|
||||
MicroDmaMode,
|
||||
AddrWidth,
|
||||
SgLengthWidth
|
||||
};
|
||||
static const std::map<const char*, DmaParameters> ParaMap = {
|
||||
{"c_sg_include_stscntrl_strm", HasStsCntrlStrm},
|
||||
{"c_include_mm2s", HasMm2S},
|
||||
{"c_include_mm2s_dre", HasMm2SDRE},
|
||||
{"c_m_axi_mm2s_data_width", Mm2SDataWidth},
|
||||
{"c_include_s2mm", HasS2Mm},
|
||||
{"c_include_s2mm_dre", HasS2MmDRE},
|
||||
{"c_m_axi_s2mm_data_width", S2MmDataWidth},
|
||||
{"c_include_sg", HasSg},
|
||||
{"c_num_mm2s_channels", Mm2sNumChannels},
|
||||
{"c_num_s2mm_channels", S2MmNumChannels},
|
||||
{"c_micro_dma", MicroDmaMode},
|
||||
{"c_addr_width", AddrWidth},
|
||||
{"c_sg_length_width", SgLengthWidth}
|
||||
};
|
||||
|
||||
json_t* json_params = json_object_get(json, "parameters");
|
||||
if (!json_is_object(json_params))
|
||||
return true;
|
||||
return false;
|
||||
|
||||
const char* paramName;
|
||||
json_t* json_param;
|
||||
json_object_foreach(json_params, paramName, json_param) {
|
||||
auto it = ParaMap.find(paramName);
|
||||
if (it == ParaMap.end())
|
||||
continue;
|
||||
|
||||
switch (it->second) {
|
||||
case HasStsCntrlStrm:
|
||||
dma.xConfig.HasStsCntrlStrm = json_integer_value(json_param);
|
||||
break;
|
||||
case HasMm2S:
|
||||
dma.xConfig.HasMm2S = json_integer_value(json_param);
|
||||
break;
|
||||
case HasMm2SDRE:
|
||||
dma.xConfig.HasMm2SDRE = json_integer_value(json_param);
|
||||
break;
|
||||
case Mm2SDataWidth:
|
||||
dma.xConfig.Mm2SDataWidth = json_integer_value(json_param);
|
||||
break;
|
||||
case HasS2Mm:
|
||||
dma.xConfig.HasS2Mm = json_integer_value(json_param);
|
||||
break;
|
||||
case HasS2MmDRE:
|
||||
dma.xConfig.HasS2MmDRE = json_integer_value(json_param);
|
||||
break;
|
||||
case S2MmDataWidth:
|
||||
dma.xConfig.S2MmDataWidth = json_integer_value(json_param);
|
||||
break;
|
||||
case HasSg:
|
||||
dma.xConfig.HasSg = json_integer_value(json_param);
|
||||
break;
|
||||
case Mm2sNumChannels:
|
||||
dma.xConfig.Mm2sNumChannels = json_integer_value(json_param);
|
||||
break;
|
||||
case S2MmNumChannels:
|
||||
dma.xConfig.S2MmNumChannels = json_integer_value(json_param);
|
||||
break;
|
||||
case MicroDmaMode:
|
||||
dma.xConfig.MicroDmaMode = json_integer_value(json_param);
|
||||
break;
|
||||
case AddrWidth:
|
||||
dma.xConfig.AddrWidth = json_integer_value(json_param);
|
||||
break;
|
||||
case SgLengthWidth:
|
||||
dma.xConfig.SgLengthWidth = json_integer_value(json_param);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// Sensible default configuration
|
||||
dma.xConfig.HasStsCntrlStrm = 0;
|
||||
dma.xConfig.HasMm2S = 1;
|
||||
dma.xConfig.HasMm2SDRE = 0;
|
||||
dma.xConfig.Mm2SDataWidth = 32;
|
||||
dma.xConfig.HasS2Mm = 1;
|
||||
dma.xConfig.HasS2MmDRE = 0;
|
||||
dma.xConfig.HasSg = 1;
|
||||
dma.xConfig.S2MmDataWidth = 32;
|
||||
dma.xConfig.Mm2sNumChannels = 1;
|
||||
dma.xConfig.S2MmNumChannels = 1;
|
||||
dma.xConfig.Mm2SBurstSize = 16;
|
||||
dma.xConfig.S2MmBurstSize = 16;
|
||||
dma.xConfig.MicroDmaMode = 0;
|
||||
dma.xConfig.AddrWidth = 32;
|
||||
dma.xConfig.SgLengthWidth = 14;
|
||||
|
||||
int ret = json_unpack(json_params,
|
||||
"{ s?: i, s?: i, s?: i, s?: i, s?: i, s?: i, s?: i, s?: i, s?: i, s?: i, s?: i, s?: i, s?: i }",
|
||||
"c_sg_include_stscntrl_strm", &dma.xConfig.HasStsCntrlStrm,
|
||||
"c_include_mm2s", &dma.xConfig.HasMm2S,
|
||||
"c_include_mm2s_dre", &dma.xConfig.HasMm2SDRE,
|
||||
"c_m_axi_mm2s_data_width", &dma.xConfig.Mm2SDataWidth,
|
||||
"c_include_s2mm", &dma.xConfig.HasS2Mm,
|
||||
"c_include_s2mm_dre", &dma.xConfig.HasS2MmDRE,
|
||||
"c_m_axi_s2mm_data_width", &dma.xConfig.S2MmDataWidth,
|
||||
"c_include_sg", &dma.xConfig.HasSg,
|
||||
"c_num_mm2s_channels", &dma.xConfig.Mm2sNumChannels,
|
||||
"c_num_s2mm_channels", &dma.xConfig.S2MmNumChannels,
|
||||
"c_micro_dma", &dma.xConfig.MicroDmaMode,
|
||||
"c_addr_width", &dma.xConfig.AddrWidth,
|
||||
"c_sg_length_width", &dma.xConfig.SgLengthWidth
|
||||
);
|
||||
if (ret != 0) {
|
||||
logger->error("Failed to parse DMA configuration");
|
||||
return false;
|
||||
}
|
||||
dma.configSet = true;
|
||||
return true;
|
||||
}
|
Loading…
Add table
Reference in a new issue