62 lines
3.3 KiB
C
62 lines
3.3 KiB
C
/******************************************************************************
|
|
* Copyright *
|
|
* Scintillating Fibre Beam Profile Monitor Software by Michal Dziewiecki, *
|
|
* Blake Leverington and Liqing Qin is licensed under CC BY 4.0 *
|
|
* https://creativecommons.org/licenses/by/4.0/ *
|
|
* funded by the Deutsche Forschungsgemeinschaft *
|
|
* (DFG, German Research Foundation) Projektnummer 419255448 *
|
|
* Project Leader: B.Leverington *
|
|
*******************************************************************************
|
|
* Create Date - Aug 7, 2019 *
|
|
* Author: M.Dziewiecki *
|
|
* Module - udpgen.h *
|
|
******************************************************************************/
|
|
|
|
#ifndef UDPGEN_H_
|
|
#define UDPGEN_H_
|
|
|
|
//UDP_GENERATOR_0_BASE
|
|
|
|
//byte offsets for registers
|
|
#define UDPGEN_REG_CSR 0 //16 bits 8 bits command + 8 bits status
|
|
#define UDPGEN_REG_SIZE 2 //16 bits payload size in words
|
|
#define UDPGEN_REG_SRCIP 4 //32 bits source IP, last octet first
|
|
#define UDPGEN_REG_DSTIP 8 //32 bits destination IP. last octet first
|
|
#define UDPGEN_REG_DSTPORT 12 //16 bits destination port
|
|
#define UDPGEN_REG_SRCPORT 14 //16 bits source port
|
|
#define UDPGEN_REG_DSTMAC 16 //2*32 bits destination MAC, last octet first
|
|
#define UDPGEN_REG_RES1 24 //32 bits reserved
|
|
#define UDPGEN_REG_RES2 28 //32 bits reserved
|
|
|
|
//csr bitmasks
|
|
#define UDPGEN_CSR_EN_BITMASK 0x0001
|
|
|
|
|
|
//Register access macros
|
|
void udpgen_command_bit(alt_u32 base, alt_u8 bitmask, alt_u8 state);
|
|
#define udpgen_command(base, val) IOWR_8DIRECT(base, UDPGEN_REG_CSR, val)
|
|
#define udpgen_set_size(base, val) IOWR_16DIRECT(base, UDPGEN_REG_SIZE, val)
|
|
#define udpgen_set_srcip(base, val) IOWR_32DIRECT(base, UDPGEN_REG_SRCIP, val)
|
|
#define udpgen_set_dstip(base, val) IOWR_32DIRECT(base, UDPGEN_REG_DSTIP, val)
|
|
#define udpgen_set_srcip_a(base, val) { for(int i = 0; i < 4; i++) IOWR_8DIRECT(base, UDPGEN_REG_SRCIP+i, val[3-i]); }
|
|
#define udpgen_set_dstip_a(base, val) { for(int i = 0; i < 4; i++) IOWR_8DIRECT(base, UDPGEN_REG_DSTIP+i, val[3-i]); }
|
|
#define udpgen_set_srcport(base, val) IOWR_16DIRECT(base, UDPGEN_REG_SRCPORT, val)
|
|
#define udpgen_set_dstport(base, val) IOWR_16DIRECT(base, UDPGEN_REG_DSTPORT, val)
|
|
#define udpgen_set_dstmac_a(base, val) { for(int i = 0; i < 6; i++) IOWR_8DIRECT(base, UDPGEN_REG_DSTMAC+i, val[5-i]); }
|
|
|
|
#define udpgen_status(base) IORD_16DIRECT(base, UDPGEN_REG_CSR)
|
|
#define udpgen_get_size(base, val) IORD_16DIRECT(base, UDPGEN_REG_SIZE)
|
|
#define udpgen_get_srcip(base, val) IORD_32DIRECT(base, UDPGEN_REG_SRCIP)
|
|
#define udpgen_get_dstip(base, val) IORD_32DIRECT(base, UDPGEN_REG_DSTIP)
|
|
#define udpgen_get_srcport(base, val) IORD_16DIRECT(base, UDPGEN_REG_SRCPORT)
|
|
#define udpgen_get_dstport(base, val) IORD_16DIRECT(base, UDPGEN_REG_DSTPORT)
|
|
#define udpgen_get_dstmac(base, val) { for(int i = 0; i < 6; i++) val[i] = IORD_8DIRECT(base, UDPGEN_REG_DSTMAC+i); }
|
|
|
|
|
|
//******************************************************
|
|
|
|
void udpgen_test(alt_u32 base);
|
|
|
|
|
|
#endif /* UDPGEN_H_ */
|