Commit 047f217f authored by Antoine Kaufmann's avatar Antoine Kaufmann
Browse files

i40e: rework logging to also include timestamps

parent d9ae8200
...@@ -3,7 +3,7 @@ CPPFLAGS += -I../libnicbm/include/ ...@@ -3,7 +3,7 @@ CPPFLAGS += -I../libnicbm/include/
CXXFLAGS += -Wall -Wextra -Wno-unused-parameter -O3 -g CXXFLAGS += -Wall -Wextra -Wno-unused-parameter -O3 -g
LDFLGAS = -g LDFLGAS = -g
OBJS := i40e_bm.o i40e_queues.o i40e_adminq.o i40e_hmc.o i40e_lan.o xsums.o OBJS := i40e_bm.o i40e_queues.o i40e_adminq.o i40e_hmc.o i40e_lan.o xsums.o logger.o
all: i40e_bm all: i40e_bm
......
...@@ -32,13 +32,13 @@ void queue_admin_tx::reg_updated() ...@@ -32,13 +32,13 @@ void queue_admin_tx::reg_updated()
if (!enabled && (reg_len & I40E_GL_ATQLEN_ATQENABLE_MASK)) { if (!enabled && (reg_len & I40E_GL_ATQLEN_ATQENABLE_MASK)) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: enable base=" << base << " len=" << len << log << " enable base=" << base << " len=" << len <<
std::endl; logger::endl;
#endif #endif
enabled = true; enabled = true;
} else if (enabled && !(reg_len & I40E_GL_ATQLEN_ATQENABLE_MASK)) { } else if (enabled && !(reg_len & I40E_GL_ATQLEN_ATQENABLE_MASK)) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: disable" << std::endl; log << " disable" << logger::endl;
#endif #endif
enabled = false; enabled = false;
} }
...@@ -68,8 +68,8 @@ void queue_admin_tx::admin_desc_ctx::desc_compl_prepare(uint16_t retval, ...@@ -68,8 +68,8 @@ void queue_admin_tx::admin_desc_ctx::desc_compl_prepare(uint16_t retval,
d->retval = retval; d->retval = retval;
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: desc_compl_prepare index=" << index << " retval=" << queue.log << " desc_compl_prepare index=" << index << " retval=" <<
retval << std::endl; retval << logger::endl;
#endif #endif
} }
...@@ -84,8 +84,8 @@ void queue_admin_tx::admin_desc_ctx::desc_complete_indir(uint16_t retval, ...@@ -84,8 +84,8 @@ void queue_admin_tx::admin_desc_ctx::desc_complete_indir(uint16_t retval,
const void *data, size_t len, uint16_t extra_flags, bool ignore_datalen) const void *data, size_t len, uint16_t extra_flags, bool ignore_datalen)
{ {
if (!ignore_datalen && len > d->datalen) { if (!ignore_datalen && len > d->datalen) {
std::cerr << "queue_admin_tx::desc_complete_indir: data too long (" queue.log << "queue_admin_tx::desc_complete_indir: data too long ("
<< len << ") got buffer for (" << d->datalen << ")" << std::endl; << len << ") got buffer for (" << d->datalen << ")" << logger::endl;
abort(); abort();
} }
d->datalen = len; d->datalen = len;
...@@ -103,8 +103,8 @@ void queue_admin_tx::admin_desc_ctx::prepare() ...@@ -103,8 +103,8 @@ void queue_admin_tx::admin_desc_ctx::prepare()
uint64_t addr = d->params.external.addr_low | uint64_t addr = d->params.external.addr_low |
(((uint64_t) d->params.external.addr_high) << 32); (((uint64_t) d->params.external.addr_high) << 32);
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: desc with buffer opc=" << d->opcode << " addr=" << queue.log << " desc with buffer opc=" << d->opcode << " addr=" <<
addr << std::endl; addr << logger::endl;
#endif #endif
data_fetch(addr, d->datalen); data_fetch(addr, d->datalen);
} else { } else {
...@@ -115,12 +115,12 @@ void queue_admin_tx::admin_desc_ctx::prepare() ...@@ -115,12 +115,12 @@ void queue_admin_tx::admin_desc_ctx::prepare()
void queue_admin_tx::admin_desc_ctx::process() void queue_admin_tx::admin_desc_ctx::process()
{ {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: descriptor " << index << " fetched" << std::endl; queue.log << " descriptor " << index << " fetched" << logger::endl;
#endif #endif
if (d->opcode == i40e_aqc_opc_get_version) { if (d->opcode == i40e_aqc_opc_get_version) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: get version" << std::endl; queue.log << " get version" << logger::endl;
#endif #endif
struct i40e_aqc_get_version *gv = struct i40e_aqc_get_version *gv =
reinterpret_cast<struct i40e_aqc_get_version *>(d->params.raw); reinterpret_cast<struct i40e_aqc_get_version *>(d->params.raw);
...@@ -134,32 +134,32 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -134,32 +134,32 @@ void queue_admin_tx::admin_desc_ctx::process()
desc_complete(0); desc_complete(0);
} else if (d->opcode == i40e_aqc_opc_request_resource) { } else if (d->opcode == i40e_aqc_opc_request_resource) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: request resource" << std::endl; queue.log << " request resource" << logger::endl;
#endif #endif
struct i40e_aqc_request_resource *rr = struct i40e_aqc_request_resource *rr =
reinterpret_cast<struct i40e_aqc_request_resource *>( reinterpret_cast<struct i40e_aqc_request_resource *>(
d->params.raw); d->params.raw);
rr->timeout = 180000; rr->timeout = 180000;
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: res_id=" << rr->resource_id << std::endl; queue.log << " res_id=" << rr->resource_id << logger::endl;
std::cerr << "atq: res_nu=" << rr->resource_number << std::endl; queue.log << " res_nu=" << rr->resource_number << logger::endl;
#endif #endif
desc_complete(0); desc_complete(0);
} else if (d->opcode == i40e_aqc_opc_release_resource) { } else if (d->opcode == i40e_aqc_opc_release_resource) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: release resource" << std::endl; queue.log << " release resource" << logger::endl;
#endif #endif
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
struct i40e_aqc_request_resource *rr = struct i40e_aqc_request_resource *rr =
reinterpret_cast<struct i40e_aqc_request_resource *>( reinterpret_cast<struct i40e_aqc_request_resource *>(
d->params.raw); d->params.raw);
std::cerr << "atq: res_id=" << rr->resource_id << std::endl; queue.log << " res_id=" << rr->resource_id << logger::endl;
std::cerr << "atq: res_nu=" << rr->resource_number << std::endl; queue.log << " res_nu=" << rr->resource_number << logger::endl;
#endif #endif
desc_complete(0); desc_complete(0);
} else if (d->opcode == i40e_aqc_opc_clear_pxe_mode) { } else if (d->opcode == i40e_aqc_opc_clear_pxe_mode) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: clear PXE mode" << std::endl; queue.log << " clear PXE mode" << logger::endl;
#endif #endif
dev.regs.gllan_rctl_0 &= ~I40E_GLLAN_RCTL_0_PXE_MODE_MASK; dev.regs.gllan_rctl_0 &= ~I40E_GLLAN_RCTL_0_PXE_MODE_MASK;
desc_complete(0); desc_complete(0);
...@@ -167,7 +167,7 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -167,7 +167,7 @@ void queue_admin_tx::admin_desc_ctx::process()
d->opcode == i40e_aqc_opc_list_dev_capabilities) d->opcode == i40e_aqc_opc_list_dev_capabilities)
{ {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: get dev/fun caps" << std::endl; queue.log << " get dev/fun caps" << logger::endl;
#endif #endif
struct i40e_aqc_list_capabilites *lc = struct i40e_aqc_list_capabilites *lc =
reinterpret_cast<struct i40e_aqc_list_capabilites *>( reinterpret_cast<struct i40e_aqc_list_capabilites *>(
...@@ -185,14 +185,14 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -185,14 +185,14 @@ void queue_admin_tx::admin_desc_ctx::process()
if (sizeof(caps) <= d->datalen) { if (sizeof(caps) <= d->datalen) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: data fits" << std::endl; queue.log << " data fits" << logger::endl;
#endif #endif
// data fits within the buffer // data fits within the buffer
lc->count = num_caps; lc->count = num_caps;
desc_complete_indir(0, caps, sizeof(caps)); desc_complete_indir(0, caps, sizeof(caps));
} else { } else {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: data doesn't fit" << std::endl; queue.log << " data doesn't fit" << logger::endl;
#endif #endif
// data does not fit // data does not fit
d->datalen = sizeof(caps); d->datalen = sizeof(caps);
...@@ -200,12 +200,12 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -200,12 +200,12 @@ void queue_admin_tx::admin_desc_ctx::process()
} }
} else if (d->opcode == i40e_aqc_opc_lldp_stop) { } else if (d->opcode == i40e_aqc_opc_lldp_stop) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: lldp stop" << std::endl; queue.log << " lldp stop" << logger::endl;
#endif #endif
desc_complete(0); desc_complete(0);
} else if (d->opcode == i40e_aqc_opc_mac_address_read) { } else if (d->opcode == i40e_aqc_opc_mac_address_read) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: read mac" << std::endl; queue.log << " read mac" << logger::endl;
#endif #endif
struct i40e_aqc_mac_address_read *ar = struct i40e_aqc_mac_address_read *ar =
reinterpret_cast<struct i40e_aqc_mac_address_read *>( reinterpret_cast<struct i40e_aqc_mac_address_read *>(
...@@ -214,7 +214,7 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -214,7 +214,7 @@ void queue_admin_tx::admin_desc_ctx::process()
struct i40e_aqc_mac_address_read_data ard; struct i40e_aqc_mac_address_read_data ard;
uint64_t mac = runner->get_mac_addr(); uint64_t mac = runner->get_mac_addr();
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: mac = " << mac << std::endl; queue.log << " mac = " << mac << logger::endl;
#endif #endif
memcpy(ard.pf_lan_mac, &mac, 6); memcpy(ard.pf_lan_mac, &mac, 6);
memcpy(ard.port_mac, &mac, 6); memcpy(ard.port_mac, &mac, 6);
...@@ -223,7 +223,7 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -223,7 +223,7 @@ void queue_admin_tx::admin_desc_ctx::process()
desc_complete_indir(0, &ard, sizeof(ard)); desc_complete_indir(0, &ard, sizeof(ard));
} else if (d->opcode == i40e_aqc_opc_get_phy_abilities) { } else if (d->opcode == i40e_aqc_opc_get_phy_abilities) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: get phy abilities" << std::endl; queue.log << " get phy abilities" << logger::endl;
#endif #endif
struct i40e_aq_get_phy_abilities_resp par; struct i40e_aq_get_phy_abilities_resp par;
memset(&par, 0, sizeof(par)); memset(&par, 0, sizeof(par));
...@@ -240,7 +240,7 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -240,7 +240,7 @@ void queue_admin_tx::admin_desc_ctx::process()
desc_complete_indir(0, &par, sizeof(par), 0, true); desc_complete_indir(0, &par, sizeof(par), 0, true);
} else if (d->opcode == i40e_aqc_opc_get_link_status) { } else if (d->opcode == i40e_aqc_opc_get_link_status) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: link status" << std::endl; queue.log << " link status" << logger::endl;
#endif #endif
struct i40e_aqc_get_link_status *gls = struct i40e_aqc_get_link_status *gls =
reinterpret_cast<struct i40e_aqc_get_link_status *>( reinterpret_cast<struct i40e_aqc_get_link_status *>(
...@@ -262,7 +262,7 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -262,7 +262,7 @@ void queue_admin_tx::admin_desc_ctx::process()
desc_complete(0); desc_complete(0);
} else if (d->opcode == i40e_aqc_opc_get_switch_config) { } else if (d->opcode == i40e_aqc_opc_get_switch_config) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: get switch config" << std::endl; queue.log << " get switch config" << logger::endl;
#endif #endif
struct i40e_aqc_switch_seid *sw = reinterpret_cast< struct i40e_aqc_switch_seid *sw = reinterpret_cast<
struct i40e_aqc_switch_seid *>(d->params.raw); struct i40e_aqc_switch_seid *>(d->params.raw);
...@@ -312,8 +312,8 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -312,8 +312,8 @@ void queue_admin_tx::admin_desc_ctx::process()
hr.num_reported = report; hr.num_reported = report;
hr.num_total = cnt; hr.num_total = cnt;
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: report=" << report << " cnt=" << cnt << queue.log << " report=" << report << " cnt=" << cnt <<
" seid=" << sw->seid << std::endl; " seid=" << sw->seid << logger::endl;
#endif #endif
// create temporary contiguous buffer // create temporary contiguous buffer
...@@ -325,7 +325,7 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -325,7 +325,7 @@ void queue_admin_tx::admin_desc_ctx::process()
desc_complete_indir(0, buf, buflen); desc_complete_indir(0, buf, buflen);
} else if (d->opcode == i40e_aqc_opc_set_switch_config) { } else if (d->opcode == i40e_aqc_opc_set_switch_config) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: set switch config" << std::endl; queue.log << " set switch config" << logger::endl;
#endif #endif
/* TODO: lots of interesting things here like l2 filtering etc. that are /* TODO: lots of interesting things here like l2 filtering etc. that are
* relevant. * relevant.
...@@ -336,7 +336,7 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -336,7 +336,7 @@ void queue_admin_tx::admin_desc_ctx::process()
desc_complete(0); desc_complete(0);
} else if (d->opcode == i40e_aqc_opc_get_vsi_parameters) { } else if (d->opcode == i40e_aqc_opc_get_vsi_parameters) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: get vsi parameters" << std::endl; queue.log << " get vsi parameters" << logger::endl;
#endif #endif
/*struct i40e_aqc_add_get_update_vsi *v = /*struct i40e_aqc_add_get_update_vsi *v =
reinterpret_cast<struct i40e_aqc_add_get_update_vsi *>( reinterpret_cast<struct i40e_aqc_add_get_update_vsi *>(
...@@ -351,24 +351,24 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -351,24 +351,24 @@ void queue_admin_tx::admin_desc_ctx::process()
desc_complete_indir(0, &pd, sizeof(pd)); desc_complete_indir(0, &pd, sizeof(pd));
} else if (d->opcode == i40e_aqc_opc_update_vsi_parameters) { } else if (d->opcode == i40e_aqc_opc_update_vsi_parameters) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: update vsi parameters" << std::endl; queue.log << " update vsi parameters" << logger::endl;
#endif #endif
/* TODO */ /* TODO */
desc_complete(0); desc_complete(0);
} else if (d->opcode == i40e_aqc_opc_set_dcb_parameters) { } else if (d->opcode == i40e_aqc_opc_set_dcb_parameters) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: set dcb parameters" << std::endl; queue.log << " set dcb parameters" << logger::endl;
#endif #endif
/* TODO */ /* TODO */
desc_complete(0); desc_complete(0);
} else if (d->opcode == i40e_aqc_opc_configure_vsi_bw_limit) { } else if (d->opcode == i40e_aqc_opc_configure_vsi_bw_limit) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: configure vsi bw limit" << std::endl; queue.log << " configure vsi bw limit" << logger::endl;
#endif #endif
desc_complete(0); desc_complete(0);
} else if (d->opcode == i40e_aqc_opc_query_vsi_bw_config) { } else if (d->opcode == i40e_aqc_opc_query_vsi_bw_config) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: query vsi bw config" << std::endl; queue.log << " query vsi bw config" << logger::endl;
#endif #endif
struct i40e_aqc_query_vsi_bw_config_resp bwc; struct i40e_aqc_query_vsi_bw_config_resp bwc;
memset(&bwc, 0, sizeof(bwc)); memset(&bwc, 0, sizeof(bwc));
...@@ -377,7 +377,7 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -377,7 +377,7 @@ void queue_admin_tx::admin_desc_ctx::process()
desc_complete_indir(0, &bwc, sizeof(bwc)); desc_complete_indir(0, &bwc, sizeof(bwc));
} else if (d->opcode == i40e_aqc_opc_query_vsi_ets_sla_config) { } else if (d->opcode == i40e_aqc_opc_query_vsi_ets_sla_config) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: query vsi ets sla config" << std::endl; queue.log << " query vsi ets sla config" << logger::endl;
#endif #endif
struct i40e_aqc_query_vsi_ets_sla_config_resp sla; struct i40e_aqc_query_vsi_ets_sla_config_resp sla;
memset(&sla, 0, sizeof(sla)); memset(&sla, 0, sizeof(sla));
...@@ -386,7 +386,7 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -386,7 +386,7 @@ void queue_admin_tx::admin_desc_ctx::process()
desc_complete_indir(0, &sla, sizeof(sla)); desc_complete_indir(0, &sla, sizeof(sla));
} else if (d->opcode == i40e_aqc_opc_remove_macvlan) { } else if (d->opcode == i40e_aqc_opc_remove_macvlan) {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: remove macvlan" << std::endl; queue.log << " remove macvlan" << logger::endl;
#endif #endif
struct i40e_aqc_macvlan *m = reinterpret_cast< struct i40e_aqc_macvlan *m = reinterpret_cast<
struct i40e_aqc_macvlan *>(d->params.raw); struct i40e_aqc_macvlan *>(d->params.raw);
...@@ -399,7 +399,7 @@ void queue_admin_tx::admin_desc_ctx::process() ...@@ -399,7 +399,7 @@ void queue_admin_tx::admin_desc_ctx::process()
desc_complete_indir(0, data, d->datalen); desc_complete_indir(0, data, d->datalen);
} else { } else {
#ifdef DEBUG_ADMINQ #ifdef DEBUG_ADMINQ
std::cerr << "atq: uknown opcode=" << d->opcode << std::endl; queue.log << " uknown opcode=" << d->opcode << logger::endl;
#endif #endif
//desc_complete(I40E_AQ_RC_ESRCH); //desc_complete(I40E_AQ_RC_ESRCH);
desc_complete(0); desc_complete(0);
......
...@@ -12,7 +12,8 @@ nicbm::Runner *runner; ...@@ -12,7 +12,8 @@ nicbm::Runner *runner;
namespace i40e { namespace i40e {
i40e_bm::i40e_bm() i40e_bm::i40e_bm()
: pf_atq(*this, regs.pf_atqba, regs.pf_atqlen, regs.pf_atqh, regs.pf_atqt), : log("i40e"),
pf_atq(*this, regs.pf_atqba, regs.pf_atqlen, regs.pf_atqh, regs.pf_atqt),
hmc(*this), shram(*this), lanmgr(*this, NUM_QUEUES) hmc(*this), shram(*this), lanmgr(*this, NUM_QUEUES)
{ {
reset(false); reset(false);
...@@ -40,7 +41,7 @@ void i40e_bm::dma_complete(nicbm::DMAOp &op) ...@@ -40,7 +41,7 @@ void i40e_bm::dma_complete(nicbm::DMAOp &op)
{ {
dma_base &dma = dynamic_cast<dma_base &>(op); dma_base &dma = dynamic_cast<dma_base &>(op);
#ifdef DEBUG_DEV #ifdef DEBUG_DEV
std::cerr << "dma_complete(" << &op << ")" << std::endl; log << "dma_complete(" << &op << ")" << logger::endl;
#endif #endif
dma.done(); dma.done();
} }
...@@ -48,7 +49,7 @@ void i40e_bm::dma_complete(nicbm::DMAOp &op) ...@@ -48,7 +49,7 @@ void i40e_bm::dma_complete(nicbm::DMAOp &op)
void i40e_bm::eth_rx(uint8_t port, const void *data, size_t len) void i40e_bm::eth_rx(uint8_t port, const void *data, size_t len)
{ {
#ifdef DEBUG_DEV #ifdef DEBUG_DEV
std::cerr << "i40e: received packet len=" << len << std::endl; log << "i40e: received packet len=" << len << logger::endl;
#endif #endif
lanmgr.packet_received(data, len); lanmgr.packet_received(data, len);
} }
...@@ -63,8 +64,8 @@ void i40e_bm::reg_read(uint8_t bar, uint64_t addr, void *dest, size_t len) ...@@ -63,8 +64,8 @@ void i40e_bm::reg_read(uint8_t bar, uint64_t addr, void *dest, size_t len)
dest_p[0] = reg_read32(bar, addr); dest_p[0] = reg_read32(bar, addr);
dest_p[1] = reg_read32(bar, addr + 4); dest_p[1] = reg_read32(bar, addr + 4);
} else { } else {
std::cerr << "currently we only support 4/8B reads (got " << len << ")" log << "currently we only support 4/8B reads (got " << len << ")"
<< std::endl; << logger::endl;
abort(); abort();
} }
} }
...@@ -76,7 +77,7 @@ uint32_t i40e_bm::reg_read32(uint8_t bar, uint64_t addr) ...@@ -76,7 +77,7 @@ uint32_t i40e_bm::reg_read32(uint8_t bar, uint64_t addr)
} else if (bar == BAR_IO) { } else if (bar == BAR_IO) {
return reg_io_read(addr); return reg_io_read(addr);
} else { } else {
std::cerr << "invalid BAR " << (int) bar << std::endl; log << "invalid BAR " << (int) bar << logger::endl;
abort(); abort();
} }
} }
...@@ -91,8 +92,8 @@ void i40e_bm::reg_write(uint8_t bar, uint64_t addr, const void *src, size_t len) ...@@ -91,8 +92,8 @@ void i40e_bm::reg_write(uint8_t bar, uint64_t addr, const void *src, size_t len)
reg_write32(bar, addr, src_p[0]); reg_write32(bar, addr, src_p[0]);
reg_write32(bar, addr + 4, src_p[1]); reg_write32(bar, addr + 4, src_p[1]);
} else { } else {
std::cerr << "currently we only support 4/8B writes (got " << len << ")" log << "currently we only support 4/8B writes (got " << len << ")"
<< std::endl; << logger::endl;
abort(); abort();
} }
} }
...@@ -104,21 +105,21 @@ void i40e_bm::reg_write32(uint8_t bar, uint64_t addr, uint32_t val) ...@@ -104,21 +105,21 @@ void i40e_bm::reg_write32(uint8_t bar, uint64_t addr, uint32_t val)
} else if (bar == BAR_IO) { } else if (bar == BAR_IO) {
reg_io_write(addr, val); reg_io_write(addr, val);
} else { } else {
std::cerr << "invalid BAR " << (int) bar << std::endl; log << "invalid BAR " << (int) bar << logger::endl;
abort(); abort();
} }
} }
uint32_t i40e_bm::reg_io_read(uint64_t addr) uint32_t i40e_bm::reg_io_read(uint64_t addr)
{ {
std::cerr << "unhandled io read addr=" << std::hex << addr << std::endl; log << "unhandled io read addr=" << addr << logger::endl;
return 0; return 0;
} }
void i40e_bm::reg_io_write(uint64_t addr, uint32_t val) void i40e_bm::reg_io_write(uint64_t addr, uint32_t val)
{ {
std::cerr << "unhandled io write addr=" << std::hex << addr << " val=" log << "unhandled io write addr=" << addr << " val="
<< val << std::endl; << val << logger::endl;
} }
uint32_t i40e_bm::reg_mem_read32(uint64_t addr) uint32_t i40e_bm::reg_mem_read32(uint64_t addr)
...@@ -358,8 +359,8 @@ uint32_t i40e_bm::reg_mem_read32(uint64_t addr) ...@@ -358,8 +359,8 @@ uint32_t i40e_bm::reg_mem_read32(uint64_t addr)
default: default:
#ifdef DEBUG_DEV #ifdef DEBUG_DEV
std::cerr << "unhandled mem read addr=" << std::hex << addr log << "unhandled mem read addr=" << addr
<< std::endl; << logger::endl;
#endif #endif
break; break;
} }
...@@ -536,8 +537,8 @@ void i40e_bm::reg_mem_write32(uint64_t addr, uint32_t val) ...@@ -536,8 +537,8 @@ void i40e_bm::reg_mem_write32(uint64_t addr, uint32_t val)
default: default:
#ifdef DEBUG_DEV #ifdef DEBUG_DEV
std::cerr << "unhandled mem write addr=" << std::hex << addr log << "unhandled mem write addr=" << addr
<< " val=" << val << std::endl; << " val=" << val << logger::endl;
#endif #endif
break; break;
} }
...@@ -547,7 +548,7 @@ void i40e_bm::reg_mem_write32(uint64_t addr, uint32_t val) ...@@ -547,7 +548,7 @@ void i40e_bm::reg_mem_write32(uint64_t addr, uint32_t val)
void i40e_bm::reset(bool indicate_done) void i40e_bm::reset(bool indicate_done)
{ {
#ifdef DEBUG_DEV #ifdef DEBUG_DEV
std::cout << "reset triggered" << std::endl; std::cout << "reset triggered" << logger::endl;
#endif #endif
pf_atq.reset(); pf_atq.reset();
...@@ -560,7 +561,7 @@ void i40e_bm::reset(bool indicate_done) ...@@ -560,7 +561,7 @@ void i40e_bm::reset(bool indicate_done)
} }
shadow_ram::shadow_ram(i40e_bm &dev_) shadow_ram::shadow_ram(i40e_bm &dev_)
: dev(dev_) : dev(dev_), log("sram")
{ {
} }
...@@ -578,8 +579,8 @@ void shadow_ram::reg_updated() ...@@ -578,8 +579,8 @@ void shadow_ram::reg_updated()
is_write = (val & I40E_GLNVM_SRCTL_WRITE_MASK); is_write = (val & I40E_GLNVM_SRCTL_WRITE_MASK);
#ifdef DEBUG_DEV #ifdef DEBUG_DEV
std::cerr << "shadow ram op addr=" << std::hex << addr << " w=" << is_write log << "shadow ram op addr=" << addr << " w=" << is_write
<< std::endl; << logger::endl;
#endif #endif
if (is_write) { if (is_write) {
...@@ -615,8 +616,8 @@ uint16_t shadow_ram::read(uint16_t addr) ...@@ -615,8 +616,8 @@ uint16_t shadow_ram::read(uint16_t addr)
default: default:
#ifdef DEBUG_DEV #ifdef DEBUG_DEV
std::cerr << "TODO shadow memory read addr=" << std::hex << addr log << "TODO shadow memory read addr=" << addr
<< std::endl; << logger::endl;
#endif #endif
break; break;
} }
...@@ -627,8 +628,8 @@ uint16_t shadow_ram::read(uint16_t addr) ...@@ -627,8 +628,8 @@ uint16_t shadow_ram::read(uint16_t addr)
void shadow_ram::write(uint16_t addr, uint16_t val) void shadow_ram::write(uint16_t addr, uint16_t val)
{ {
#ifdef DEBUG_DEV #ifdef DEBUG_DEV
std::cerr << "TODO shadow memory write addr=" << std::hex << addr << log << "TODO shadow memory write addr=" << addr <<
" val=" << val << std::endl; " val=" << val << logger::endl;
#endif #endif
} }
......
#pragma once #pragma once
#include <deque> #include <deque>
#include <sstream>
#include <stdint.h> #include <stdint.h>
extern "C" { extern "C" {
#include <cosim_pcie_proto.h> #include <cosim_pcie_proto.h>
...@@ -27,6 +28,27 @@ class dma_base : public nicbm::DMAOp { ...@@ -27,6 +28,27 @@ class dma_base : public nicbm::DMAOp {
virtual void done() = 0; virtual void done() = 0;
}; };
class logger : public std::ostream {
public:
static const char endl = '\n';
protected:
std::string label;
std::stringstream ss;
public:
logger(const std::string &label_);
logger &operator<<(char c);
logger &operator<<(int32_t c);
logger &operator<<(uint8_t i);
logger &operator<<(uint16_t i);
logger &operator<<(uint32_t i);
logger &operator<<(uint64_t i);
logger &operator<<(bool c);
logger &operator<<(const char *str);
logger &operator<<(void *str);
};
/** /**
* Base-class for descriptor queues (RX/TX, Admin RX/TX). * Base-class for descriptor queues (RX/TX, Admin RX/TX).
* *
...@@ -135,6 +157,7 @@ class queue_base { ...@@ -135,6 +157,7 @@ class queue_base {
public: public:
std::string qname; std::string qname;
logger log;
protected: protected:
desc_ctx *desc_ctxs[MAX_ACTIVE_DESCS]; desc_ctx *desc_ctxs[MAX_ACTIVE_DESCS];
uint32_t active_first_pos; uint32_t active_first_pos;
...@@ -377,6 +400,7 @@ class lan { ...@@ -377,6 +400,7 @@ class lan {
friend class lan_queue_rx; friend class lan_queue_rx;
i40e_bm &dev; i40e_bm &dev;
logger log;
const size_t num_qs; const size_t num_qs;
lan_queue_rx **rxqs; lan_queue_rx **rxqs;
lan_queue_tx **txqs; lan_queue_tx **txqs;
...@@ -392,6 +416,7 @@ class lan { ...@@ -392,6 +416,7 @@ class lan {
class shadow_ram { class shadow_ram {
protected: protected:
i40e_bm &dev; i40e_bm &dev;
logger log;
public: public:
shadow_ram(i40e_bm &dev); shadow_ram(i40e_bm &dev);
...@@ -481,6 +506,7 @@ public: ...@@ -481,6 +506,7 @@ public:
virtual void eth_rx(uint8_t port, const void *data, size_t len); virtual void eth_rx(uint8_t port, const void *data, size_t len);
protected: protected:
logger log;
i40e_regs regs; i40e_regs regs;
queue_admin_tx pf_atq; queue_admin_tx pf_atq;
host_mem_cache hmc; host_mem_cache hmc;
......
...@@ -12,7 +12,7 @@ using namespace i40e; ...@@ -12,7 +12,7 @@ using namespace i40e;
extern nicbm::Runner *runner; extern nicbm::Runner *runner;
lan::lan(i40e_bm &dev_, size_t num_qs_) lan::lan(i40e_bm &dev_, size_t num_qs_)
: dev(dev_), num_qs(num_qs_) : dev(dev_), log("lan"), num_qs(num_qs_)
{ {
rxqs = new lan_queue_rx *[num_qs]; rxqs = new lan_queue_rx *[num_qs];
txqs = new lan_queue_tx *[num_qs]; txqs = new lan_queue_tx *[num_qs];
...@@ -38,7 +38,7 @@ void lan::reset() ...@@ -38,7 +38,7 @@ void lan::reset()
void lan::qena_updated(uint16_t idx, bool rx) void lan::qena_updated(uint16_t idx, bool rx)
{ {
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << "lan: qena updated idx=" << idx << " rx=" << rx << std::endl; log << " qena updated idx=" << idx << " rx=" << rx << logger::endl;
#endif #endif
uint32_t &reg = (rx ? dev.regs.qrx_ena[idx] : dev.regs.qtx_ena[idx]); uint32_t &reg = (rx ? dev.regs.qrx_ena[idx] : dev.regs.qtx_ena[idx]);
lan_queue_base &q = (rx ? static_cast<lan_queue_base &>(*rxqs[idx]) : lan_queue_base &q = (rx ? static_cast<lan_queue_base &>(*rxqs[idx]) :
...@@ -54,7 +54,7 @@ void lan::qena_updated(uint16_t idx, bool rx) ...@@ -54,7 +54,7 @@ void lan::qena_updated(uint16_t idx, bool rx)
void lan::tail_updated(uint16_t idx, bool rx) void lan::tail_updated(uint16_t idx, bool rx)
{ {
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << "lan: tail updated idx=" << idx << " rx=" << rx << std::endl; log << " tail updated idx=" << idx << " rx=" << rx << logger::endl;
#endif #endif
lan_queue_base &q = (rx ? static_cast<lan_queue_base &>(*rxqs[idx]) : lan_queue_base &q = (rx ? static_cast<lan_queue_base &>(*rxqs[idx]) :
...@@ -67,7 +67,7 @@ void lan::tail_updated(uint16_t idx, bool rx) ...@@ -67,7 +67,7 @@ void lan::tail_updated(uint16_t idx, bool rx)
void lan::packet_received(const void *data, size_t len) void lan::packet_received(const void *data, size_t len)
{ {
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << "lan: packet received len=" << len << std::endl; log << " packet received len=" << len << logger::endl;
#endif #endif
// TODO: steering // TODO: steering
...@@ -98,7 +98,7 @@ void lan_queue_base::enable() ...@@ -98,7 +98,7 @@ void lan_queue_base::enable()
return; return;
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": lan enabling queue " << idx << std::endl; log << " lan enabling queue " << idx << logger::endl;
#endif #endif
enabling = true; enabling = true;
...@@ -116,7 +116,7 @@ void lan_queue_base::enable() ...@@ -116,7 +116,7 @@ void lan_queue_base::enable()
void lan_queue_base::ctx_fetched() void lan_queue_base::ctx_fetched()
{ {
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": lan ctx fetched " << idx << std::endl; log << " lan ctx fetched " << idx << logger::endl;
#endif #endif
initialize(); initialize();
...@@ -131,7 +131,7 @@ void lan_queue_base::ctx_fetched() ...@@ -131,7 +131,7 @@ void lan_queue_base::ctx_fetched()
void lan_queue_base::disable() void lan_queue_base::disable()
{ {
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": lan disabling queue " << idx << std::endl; log << " lan disabling queue " << idx << logger::endl;
#endif #endif
enabled = false; enabled = false;
// TODO: write back // TODO: write back
...@@ -142,7 +142,7 @@ void lan_queue_base::interrupt() ...@@ -142,7 +142,7 @@ void lan_queue_base::interrupt()
{ {
uint32_t qctl = reg_intqctl; uint32_t qctl = reg_intqctl;
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": interrupt intctl=" << qctl << std::endl; log << " interrupt intctl=" << qctl << logger::endl;
#endif #endif
uint16_t msix_idx = (qctl & I40E_QINT_TQCTL_MSIX_INDX_MASK) >> uint16_t msix_idx = (qctl & I40E_QINT_TQCTL_MSIX_INDX_MASK) >>
...@@ -153,19 +153,19 @@ void lan_queue_base::interrupt() ...@@ -153,19 +153,19 @@ void lan_queue_base::interrupt()
if (!cause_ena) { if (!cause_ena) {
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": interrupt cause disabled" << std::endl; log << " interrupt cause disabled" << logger::endl;
#endif #endif
return; return;
} }
if (msix_idx != 0) { if (msix_idx != 0) {
std::cerr << "TODO: only int 0 is supported" << std::endl; log << "TODO: only int 0 is supported" << logger::endl;
abort(); abort();
} }
// TODO throttling? // TODO throttling?
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": setting int0.qidx=" << msix0_idx << std::endl; log << " setting int0.qidx=" << msix0_idx << logger::endl;
#endif #endif
lanmgr.dev.regs.pfint_icr0 |= I40E_PFINT_ICR0_INTEVENT_MASK | lanmgr.dev.regs.pfint_icr0 |= I40E_PFINT_ICR0_INTEVENT_MASK |
(1 << (I40E_PFINT_ICR0_QUEUE_0_SHIFT + msix0_idx)); (1 << (I40E_PFINT_ICR0_QUEUE_0_SHIFT + msix0_idx));
...@@ -202,7 +202,7 @@ void lan_queue_rx::reset() ...@@ -202,7 +202,7 @@ void lan_queue_rx::reset()
void lan_queue_rx::initialize() void lan_queue_rx::initialize()
{ {
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": initialize()" << std::endl; log << " initialize()" << logger::endl;
#endif #endif
uint8_t *ctx_p = reinterpret_cast<uint8_t *>(ctx); uint8_t *ctx_p = reinterpret_cast<uint8_t *>(ctx);
...@@ -227,21 +227,21 @@ void lan_queue_rx::initialize() ...@@ -227,21 +227,21 @@ void lan_queue_rx::initialize()
rxmax = (((*rxmax_p) >> 6) & ((1 << 14) - 1)) * 128; rxmax = (((*rxmax_p) >> 6) & ((1 << 14) - 1)) * 128;
if (!longdesc) { if (!longdesc) {
std::cerr << "lan_queue_rx::initialize: currently only 32B descs " log << "lan_queue_rx::initialize: currently only 32B descs "
" supported" << std::endl; " supported" << logger::endl;
abort(); abort();
} }
if (dtype != 0) { if (dtype != 0) {
std::cerr << "lan_queue_rx::initialize: no header split supported" log << "lan_queue_rx::initialize: no header split supported"
<< std::endl; << logger::endl;
abort(); abort();
} }
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": head=" << reg_dummy_head << " base=" << base << log << " head=" << reg_dummy_head << " base=" << base <<
" len=" << len << " dbsz=" << dbuff_size << " hbsz=" << hbuff_size << " len=" << len << " dbsz=" << dbuff_size << " hbsz=" << hbuff_size <<
" dtype=" << (unsigned) dtype << " longdesc=" << longdesc << " dtype=" << (unsigned) dtype << " longdesc=" << longdesc <<
" crcstrip=" << crc_strip << " rxmax=" << rxmax << std::endl; " crcstrip=" << crc_strip << " rxmax=" << rxmax << logger::endl;
#endif #endif
} }
...@@ -254,7 +254,7 @@ void lan_queue_rx::packet_received(const void *data, size_t pktlen) ...@@ -254,7 +254,7 @@ void lan_queue_rx::packet_received(const void *data, size_t pktlen)
{ {
if (dcache.empty()) { if (dcache.empty()) {
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": empty, dropping packet" << std::endl; log << " empty, dropping packet" << logger::endl;
#endif #endif
return; return;
} }
...@@ -262,8 +262,8 @@ void lan_queue_rx::packet_received(const void *data, size_t pktlen) ...@@ -262,8 +262,8 @@ void lan_queue_rx::packet_received(const void *data, size_t pktlen)
rx_desc_ctx &ctx = *dcache.front(); rx_desc_ctx &ctx = *dcache.front();
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": packet received didx=" << ctx.index << " cnt=" << log << " packet received didx=" << ctx.index << " cnt=" <<
dcache.size() << std::endl; dcache.size() << logger::endl;
#endif #endif
dcache.pop_front(); dcache.pop_front();
...@@ -320,7 +320,7 @@ void lan_queue_tx::reset() ...@@ -320,7 +320,7 @@ void lan_queue_tx::reset()
void lan_queue_tx::initialize() void lan_queue_tx::initialize()
{ {
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": initialize()" << std::endl; log << " initialize()" << logger::endl;
#endif #endif
uint8_t *ctx_p = reinterpret_cast<uint8_t *>(ctx); uint8_t *ctx_p = reinterpret_cast<uint8_t *>(ctx);
...@@ -338,9 +338,9 @@ void lan_queue_tx::initialize() ...@@ -338,9 +338,9 @@ void lan_queue_tx::initialize()
hwb_addr = *hwb_addr_p; hwb_addr = *hwb_addr_p;
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": head=" << reg_dummy_head << " base=" << base << log << " head=" << reg_dummy_head << " base=" << base <<
" len=" << len << " hwb=" << hwb << " hwb_addr=" << hwb_addr << " len=" << len << " hwb=" << hwb << " hwb_addr=" << hwb_addr <<
std::endl; logger::endl;
#endif #endif
} }
...@@ -362,7 +362,7 @@ void lan_queue_tx::do_writeback(uint32_t first_idx, uint32_t first_pos, ...@@ -362,7 +362,7 @@ void lan_queue_tx::do_writeback(uint32_t first_idx, uint32_t first_pos,
dma->dma_addr = hwb_addr; dma->dma_addr = hwb_addr;
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": hwb=" << *((uint32_t *) dma->data) << std::endl; log << " hwb=" << *((uint32_t *) dma->data) << logger::endl;
#endif #endif
runner->issue_dma(*dma); runner->issue_dma(*dma);
} }
...@@ -383,14 +383,14 @@ bool lan_queue_tx::trigger_tx_packet() ...@@ -383,14 +383,14 @@ bool lan_queue_tx::trigger_tx_packet()
d1 = rd->d->cmd_type_offset_bsz; d1 = rd->d->cmd_type_offset_bsz;
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": data fetched didx=" << rd->index << " d1=" << log << " data fetched didx=" << rd->index << " d1=" <<
d1 << std::endl; d1 << logger::endl;
#endif #endif
uint16_t pkt_len = (d1 & I40E_TXD_QW1_TX_BUF_SZ_MASK) >> uint16_t pkt_len = (d1 & I40E_TXD_QW1_TX_BUF_SZ_MASK) >>
I40E_TXD_QW1_TX_BUF_SZ_SHIFT; I40E_TXD_QW1_TX_BUF_SZ_SHIFT;
if (total_len + pkt_len > MTU) { if (total_len + pkt_len > MTU) {
std::cerr << "txq: trigger_tx_packet too large" << std::endl; log << "txq: trigger_tx_packet too large" << logger::endl;
abort(); abort();
} }
...@@ -402,8 +402,8 @@ bool lan_queue_tx::trigger_tx_packet() ...@@ -402,8 +402,8 @@ bool lan_queue_tx::trigger_tx_packet()
l4t = (cmd & I40E_TX_DESC_CMD_L4T_EOFT_MASK); l4t = (cmd & I40E_TX_DESC_CMD_L4T_EOFT_MASK);
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": eop=" << eop << " len=" << pkt_len << log << " eop=" << eop << " len=" << pkt_len <<
std::endl; logger::endl;
#endif #endif
total_len += pkt_len; total_len += pkt_len;
...@@ -426,8 +426,8 @@ bool lan_queue_tx::trigger_tx_packet() ...@@ -426,8 +426,8 @@ bool lan_queue_tx::trigger_tx_packet()
xsum_tcp(pktbuf + tcp_off, total_len - tcp_off); xsum_tcp(pktbuf + tcp_off, total_len - tcp_off);
} }
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << qname << ": iipt=" << iipt << " l4t=" << l4t << log << " iipt=" << iipt << " l4t=" << l4t <<
" maclen=" << maclen << " iplen=" << iplen<< std::endl; " maclen=" << maclen << " iplen=" << iplen<< logger::endl;
#else #else
(void) iipt; (void) iipt;
#endif #endif
...@@ -458,8 +458,8 @@ void lan_queue_tx::tx_desc_ctx::prepare() ...@@ -458,8 +458,8 @@ void lan_queue_tx::tx_desc_ctx::prepare()
uint64_t d1 = d->cmd_type_offset_bsz; uint64_t d1 = d->cmd_type_offset_bsz;
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << queue.qname << ": desc fetched didx=" << index << " d1=" << queue.log << " desc fetched didx=" << index << " d1=" <<
d1 << std::endl; d1 << logger::endl;
#endif #endif
uint8_t dtype = (d1 & I40E_TXD_QW1_DTYPE_MASK) >> I40E_TXD_QW1_DTYPE_SHIFT; uint8_t dtype = (d1 & I40E_TXD_QW1_DTYPE_MASK) >> I40E_TXD_QW1_DTYPE_SHIFT;
...@@ -468,16 +468,16 @@ void lan_queue_tx::tx_desc_ctx::prepare() ...@@ -468,16 +468,16 @@ void lan_queue_tx::tx_desc_ctx::prepare()
I40E_TXD_QW1_TX_BUF_SZ_SHIFT; I40E_TXD_QW1_TX_BUF_SZ_SHIFT;
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << queue.qname << ": bufaddr=" << d->buffer_addr << queue.log << " bufaddr=" << d->buffer_addr <<
" len=" << len << std::endl; " len=" << len << logger::endl;
#endif #endif
data_fetch(d->buffer_addr, len); data_fetch(d->buffer_addr, len);
} else if (dtype == I40E_TX_DESC_DTYPE_CONTEXT) { } else if (dtype == I40E_TX_DESC_DTYPE_CONTEXT) {
struct i40e_tx_context_desc *ctxd = struct i40e_tx_context_desc *ctxd =
reinterpret_cast<struct i40e_tx_context_desc *> (d); reinterpret_cast<struct i40e_tx_context_desc *> (d);
std::cerr << " context descriptor: tp=" << ctxd->tunneling_params << queue.log << " context descriptor: tp=" << ctxd->tunneling_params <<
" l2t=" << ctxd->l2tag2 << " tctm=" << ctxd->type_cmd_tso_mss << std::endl; " l2t=" << ctxd->l2tag2 << " tctm=" << ctxd->type_cmd_tso_mss << logger::endl;
abort(); abort();
/*desc->buffer_addr = 0; /*desc->buffer_addr = 0;
...@@ -486,7 +486,7 @@ void lan_queue_tx::tx_desc_ctx::prepare() ...@@ -486,7 +486,7 @@ void lan_queue_tx::tx_desc_ctx::prepare()
desc_writeback(desc_buf, didx);*/ desc_writeback(desc_buf, didx);*/
} else { } else {
std::cerr << "txq: only support context & data descriptors" << std::endl; queue.log << "txq: only support context & data descriptors" << logger::endl;
abort(); abort();
} }
...@@ -521,7 +521,7 @@ lan_queue_tx::dma_hwb::~dma_hwb() ...@@ -521,7 +521,7 @@ lan_queue_tx::dma_hwb::~dma_hwb()
void lan_queue_tx::dma_hwb::done() void lan_queue_tx::dma_hwb::done()
{ {
#ifdef DEBUG_LAN #ifdef DEBUG_LAN
std::cerr << queue.qname << ": tx head written back" << std::endl; queue.log << " tx head written back" << logger::endl;
#endif #endif
queue.writeback_done(pos, cnt); queue.writeback_done(pos, cnt);
delete this; delete this;
......
...@@ -13,7 +13,7 @@ extern nicbm::Runner *runner; ...@@ -13,7 +13,7 @@ extern nicbm::Runner *runner;
queue_base::queue_base(const std::string &qname_, uint32_t &reg_head_, queue_base::queue_base(const std::string &qname_, uint32_t &reg_head_,
uint32_t &reg_tail_) uint32_t &reg_tail_)
: qname(qname_), active_first_pos(0), active_first_idx(0), active_cnt(0), : qname(qname_), log(qname_), active_first_pos(0), active_first_idx(0), active_cnt(0),
base(0), len(0), reg_head(reg_head_), reg_tail(reg_tail_), base(0), len(0), reg_head(reg_head_), reg_tail(reg_tail_),
enabled(false), desc_len(0) enabled(false), desc_len(0)
{ {
...@@ -47,8 +47,8 @@ void queue_base::trigger_fetch() ...@@ -47,8 +47,8 @@ void queue_base::trigger_fetch()
fetch_cnt = len - next_idx; fetch_cnt = len - next_idx;
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << qname << ": fetching avail=" << desc_avail << log << "fetching avail=" << desc_avail << " cnt=" << fetch_cnt << " idx=" <<
" cnt=" << fetch_cnt << " idx=" << next_idx << std::endl; next_idx << logger::endl;
#endif #endif
// abort if nothign to fetch // abort if nothign to fetch
...@@ -72,7 +72,7 @@ void queue_base::trigger_fetch() ...@@ -72,7 +72,7 @@ void queue_base::trigger_fetch()
dma->dma_addr = base + next_idx * desc_len; dma->dma_addr = base + next_idx * desc_len;
dma->pos = first_pos; dma->pos = first_pos;
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << qname << ": dma = " << dma << std::endl; log << " dma = " << dma << logger::endl;
#endif #endif
runner->issue_dma(*dma); runner->issue_dma(*dma);
} }
...@@ -99,7 +99,7 @@ void queue_base::trigger_process() ...@@ -99,7 +99,7 @@ void queue_base::trigger_process()
ctx.state = desc_ctx::DESC_PROCESSING; ctx.state = desc_ctx::DESC_PROCESSING;
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << qname << ": processing desc " << ctx.index << std::endl; log << "processing desc " << ctx.index << logger::endl;
#endif #endif
ctx.process(); ctx.process();
} }
...@@ -122,8 +122,8 @@ void queue_base::trigger_writeback() ...@@ -122,8 +122,8 @@ void queue_base::trigger_writeback()
cnt = len - active_first_idx; cnt = len - active_first_idx;
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << qname << ": writing back avail=" << avail << " cnt=" << cnt << log << "writing back avail=" << avail << " cnt=" << cnt <<
" idx=" << active_first_idx << std::endl; " idx=" << active_first_idx << logger::endl;
#endif #endif
if (cnt == 0) if (cnt == 0)
...@@ -141,7 +141,7 @@ void queue_base::trigger_writeback() ...@@ -141,7 +141,7 @@ void queue_base::trigger_writeback()
void queue_base::reset() void queue_base::reset()
{ {
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << qname << ": reset" << std::endl; log << "reset" << logger::endl;
#endif #endif
enabled = false; enabled = false;
...@@ -217,9 +217,9 @@ void queue_base::writeback_done(uint32_t first_pos, uint32_t cnt) ...@@ -217,9 +217,9 @@ void queue_base::writeback_done(uint32_t first_pos, uint32_t cnt)
} }
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << qname << ": written back afi=" << active_first_idx << log << "written back afi=" << active_first_idx << " afp=" <<
" afp=" << active_first_pos << " acnt=" << active_cnt << " pos=" << active_first_pos << " acnt=" << active_cnt << " pos=" <<
first_pos << " cnt=" << cnt << std::endl; first_pos << " cnt=" << cnt << logger::endl;
#endif #endif
// then start at the beginning and check how many are written back and then // then start at the beginning and check how many are written back and then
...@@ -234,7 +234,7 @@ void queue_base::writeback_done(uint32_t first_pos, uint32_t cnt) ...@@ -234,7 +234,7 @@ void queue_base::writeback_done(uint32_t first_pos, uint32_t cnt)
ctx.state = desc_ctx::DESC_EMPTY; ctx.state = desc_ctx::DESC_EMPTY;
} }
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << qname << ": bump_cnt=" << bump_cnt << std::endl; log << " bump_cnt=" << bump_cnt << logger::endl;
#endif #endif
active_first_pos = (active_first_pos + bump_cnt) % MAX_ACTIVE_DESCS; active_first_pos = (active_first_pos + bump_cnt) % MAX_ACTIVE_DESCS;
...@@ -270,7 +270,7 @@ void queue_base::desc_ctx::prepare() ...@@ -270,7 +270,7 @@ void queue_base::desc_ctx::prepare()
void queue_base::desc_ctx::prepared() void queue_base::desc_ctx::prepared()
{ {
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << queue.qname << ": prepared desc " << index << std::endl; queue.log << "prepared desc " << index << logger::endl;
#endif #endif
assert(state == DESC_PREPARING); assert(state == DESC_PREPARING);
state = DESC_PREPARED; state = DESC_PREPARED;
...@@ -280,7 +280,7 @@ void queue_base::desc_ctx::prepared() ...@@ -280,7 +280,7 @@ void queue_base::desc_ctx::prepared()
void queue_base::desc_ctx::processed() void queue_base::desc_ctx::processed()
{ {
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << queue.qname << ": processed desc " << index << std::endl; queue.log << "processed desc " << index << logger::endl;
#endif #endif
assert(state == DESC_PROCESSING); assert(state == DESC_PROCESSING);
state = DESC_PROCESSED; state = DESC_PROCESSED;
...@@ -291,7 +291,7 @@ void queue_base::desc_ctx::data_fetch(uint64_t addr, size_t data_len) ...@@ -291,7 +291,7 @@ void queue_base::desc_ctx::data_fetch(uint64_t addr, size_t data_len)
{ {
if (data_capacity < data_len) { if (data_capacity < data_len) {
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << queue.qname << ": data_fetch allocating" << std::endl; queue.log << "data_fetch allocating" << logger::endl;
#endif #endif
if (data_capacity != 0) if (data_capacity != 0)
delete[] ((uint8_t *) data); delete[] ((uint8_t *) data);
...@@ -305,10 +305,9 @@ void queue_base::desc_ctx::data_fetch(uint64_t addr, size_t data_len) ...@@ -305,10 +305,9 @@ void queue_base::desc_ctx::data_fetch(uint64_t addr, size_t data_len)
dma->dma_addr = addr; dma->dma_addr = addr;
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << queue.qname << ": fetching data idx=" << index << " addr=" << queue.log << "fetching data idx=" << index << " addr=" << addr << " len=" <<
addr << " len=" << data_len << std::endl; data_len << logger::endl;
std::cerr << queue.qname << ": dma = " << dma << " data=" << data << queue.log << " dma = " << dma << " data=" << data << logger::endl;
std::endl;
#endif #endif
runner->issue_dma(*dma); runner->issue_dma(*dma);
...@@ -323,8 +322,8 @@ void queue_base::desc_ctx::data_write(uint64_t addr, size_t data_len, ...@@ -323,8 +322,8 @@ void queue_base::desc_ctx::data_write(uint64_t addr, size_t data_len,
const void *buf) const void *buf)
{ {
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << queue.qname << ": data_write(addr=" << addr << " datalen=" << queue.log << "data_write(addr=" << addr << " datalen=" << data_len << ")" <<
data_len << ")" << std::endl; logger::endl;
#endif #endif
dma_data_wb *data_dma = new dma_data_wb(*this, data_len); dma_data_wb *data_dma = new dma_data_wb(*this, data_len);
data_dma->write = true; data_dma->write = true;
...@@ -337,8 +336,8 @@ void queue_base::desc_ctx::data_write(uint64_t addr, size_t data_len, ...@@ -337,8 +336,8 @@ void queue_base::desc_ctx::data_write(uint64_t addr, size_t data_len,
void queue_base::desc_ctx::data_written(uint64_t addr, size_t len) void queue_base::desc_ctx::data_written(uint64_t addr, size_t len)
{ {
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << queue.qname << ": data_written(addr=" << addr << " datalen=" << queue.log << "data_written(addr=" << addr << " datalen=" << len << ")" <<
len << ")" << std::endl; logger::endl;
#endif #endif
processed(); processed();
} }
...@@ -363,8 +362,7 @@ void queue_base::dma_fetch::done() ...@@ -363,8 +362,7 @@ void queue_base::dma_fetch::done()
memcpy(ctx.desc, buf + queue.desc_len * i, queue.desc_len); memcpy(ctx.desc, buf + queue.desc_len * i, queue.desc_len);
#ifdef DEBUG_QUEUES #ifdef DEBUG_QUEUES
std::cerr << ctx.queue.qname << ": preparing desc " << ctx.index << queue.log << "preparing desc " << ctx.index << logger::endl;
std::endl;
#endif #endif
ctx.state = desc_ctx::DESC_PREPARING; ctx.state = desc_ctx::DESC_PREPARING;
ctx.prepare(); ctx.prepare();
......
#include <iostream>
#include "i40e_bm.h"
using namespace i40e;
extern nicbm::Runner *runner;
logger::logger(const std::string &label_)
: label(label_)
{
}
logger &logger::operator<<(char c)
{
if (c == endl) {
std::cerr << runner->time_ps() << " " << label << ": " << ss.str() <<
std::endl;
} else {
ss << c;
}
return *this;
}
logger &logger::operator<<(int32_t i)
{
ss << i;
return *this;
}
logger &logger::operator<<(uint8_t i)
{
ss << (unsigned) i;
return *this;
}
logger &logger::operator<<(uint16_t i)
{
ss << i;
return *this;
}
logger &logger::operator<<(uint32_t i)
{
ss << i;
return *this;
}
logger &logger::operator<<(uint64_t i)
{
ss << i;
return *this;
}
logger &logger::operator<<(bool b)
{
ss << b;
return *this;
}
logger &logger::operator<<(const char *str)
{
ss << str;
return *this;
}
logger &logger::operator<<(void *ptr)
{
ss << ptr;
return *this;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment