int map_udp_port_to_channel(void *base, alt_u32 channel, alt_u16 udp_port_number) {
alt_u32 channel_reg;
// is the channel already enabled?
switch(channel) {
case(0):
channel_reg = UDP_PORT_MAPPER_RD_CHAN_0_PORT(base);
break;
case(1):
channel_reg = UDP_PORT_MAPPER_RD_CHAN_1_PORT(base);
break;
case(2):
channel_reg = UDP_PORT_MAPPER_RD_CHAN_2_PORT(base);
break;
case(3):
channel_reg = UDP_PORT_MAPPER_RD_CHAN_3_PORT(base);
break;
default:
return 1;
}
if(channel_reg & UDP_PORT_MAPPER_CHAN_X_EN_MASK) {
return 2;
}
// not already enabled, then we enable it with the input port number
channel_reg = udp_port_number & UDP_PORT_MAPPER_CHAN_X_PORT_MASK;
channel_reg |= UDP_PORT_MAPPER_CHAN_X_EN_MASK;
switch(channel) {
case(0):
UDP_PORT_MAPPER_WR_CHAN_0_PORT(base, channel_reg);
break;
case(1):
UDP_PORT_MAPPER_WR_CHAN_1_PORT(base, channel_reg);
break;
case(2):
UDP_PORT_MAPPER_WR_CHAN_2_PORT(base, channel_reg);
break;
case(3):
UDP_PORT_MAPPER_WR_CHAN_3_PORT(base, channel_reg);
break;
default:
return 1;
}
return 0;
}