From 172fa66b1f64dca73de99cc088a36f4eb2af0ef1 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Thu, 18 Aug 2016 11:57:36 +0200 Subject: [PATCH] hotfix for memory leak in server --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 243 +++++++++--------- slsDetectorSoftware/eigerDetectorServer/Beb.h | 9 +- .../eigerDetectorServer/FebRegisterDefs.h | 1 + ...eigerDetectorServerv2.0.5.14.0.1-beamline} | Bin 277374 -> 277442 bytes .../slsDetectorServer_funcs.c | 7 +- 5 files changed, 126 insertions(+), 134 deletions(-) rename slsDetectorSoftware/eigerDetectorServer/bin/{eigerDetectorServerv2.0.5.14.0 => eigerDetectorServerv2.0.5.14.0.1-beamline} (59%) diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index 106e72730b..a2a8824d6b 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -44,7 +44,7 @@ unsigned int* Beb_recv_data; short Beb_bit_mode; - + int BEB_MMAP_SIZE = 0x1000; void BebInfo_BebInfo(struct BebInfo* bebInfo, unsigned int beb_num){ @@ -144,20 +144,19 @@ void Beb_Beb(){ } - void Beb_GetModuleCopnfiguration(int* master, int* top){ *top = 0; *master = 0; //mapping new memory to read master top module configuration - u_int32_t baseaddr; + u_int32_t* csp0base=0; int ret; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0){ cprintf(BG_RED,"Module Configuration FAIL\n"); }else{ //read data - ret = Beb_Read32(baseaddr, MODULE_CONFIGURATION_MASK); + ret = Beb_Read32(csp0base, MODULE_CONFIGURATION_MASK); printf("Module Configuration OK\n"); printf("Beb: value =0x%x\n",ret); if(ret&TOP_BIT_MASK) @@ -165,24 +164,25 @@ void Beb_GetModuleCopnfiguration(int* master, int* top){ if(ret&MASTER_BIT_MASK) *master = 1; //close file pointer - Beb_close(fd); + Beb_close(fd,csp0base); } } /* do not work at the moment */ int Beb_SetMasterViaSoftware(){ //mapping new memory - u_int32_t baseaddr, value = 0, ret = 1; + u_int32_t* csp0base=0; + u_int32_t value = 0, ret = 1; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0) cprintf(BG_RED,"Set Master FAIL\n"); else{ - value = Beb_Read32(baseaddr, MASTERCONFIG_OFFSET); + value = Beb_Read32(csp0base, MASTERCONFIG_OFFSET); value|=MASTER_BIT; value|=OVERWRITE_HARDWARE_BIT; - int newval = Beb_Write32(baseaddr, MASTERCONFIG_OFFSET,value); + int newval = Beb_Write32(csp0base, MASTERCONFIG_OFFSET,value); if(newval!=value) cprintf(BG_RED,"Could not set Master via Software\n"); else @@ -191,7 +191,7 @@ int Beb_SetMasterViaSoftware(){ //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return ret; } @@ -199,17 +199,18 @@ int Beb_SetMasterViaSoftware(){ /* do not work at the moment */ int Beb_SetSlaveViaSoftware(){ //mapping new memory - u_int32_t baseaddr, value = 0, ret = 1; + u_int32_t* csp0base=0; + u_int32_t value = 0, ret = 1; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0) cprintf(BG_RED,"Set Slave FAIL\n"); else{ - value = Beb_Read32(baseaddr, MASTERCONFIG_OFFSET); + value = Beb_Read32(csp0base, MASTERCONFIG_OFFSET); value&=~MASTER_BIT; value|=OVERWRITE_HARDWARE_BIT; - int newval = Beb_Write32(baseaddr, MASTERCONFIG_OFFSET,value); + int newval = Beb_Write32(csp0base, MASTERCONFIG_OFFSET,value); if(newval!=value) cprintf(BG_RED,"Could not set Slave via Software\n"); else @@ -218,29 +219,30 @@ int Beb_SetSlaveViaSoftware(){ //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return ret; } int Beb_Activate(int enable){ //mapping new memory - u_int32_t baseaddr, value = 0, ret = -1; + u_int32_t* csp0base=0; + u_int32_t value = 0, ret = -1; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0) cprintf(BG_RED,"Deactivate FAIL\n"); else{ if(enable > -1){ - value = Beb_Read32(baseaddr, MASTERCONFIG_OFFSET); + value = Beb_Read32(csp0base, MASTERCONFIG_OFFSET); printf("Deactivate register value before:%d\n",value); if(enable) value&=~DEACTIVATE_BIT; else value|=DEACTIVATE_BIT; - int newval = Beb_Write32(baseaddr, MASTERCONFIG_OFFSET,value); + int newval = Beb_Write32(csp0base, MASTERCONFIG_OFFSET,value); if(newval!=value){ if(enable) cprintf(BG_RED,"Could not activate via Software\n"); @@ -249,7 +251,7 @@ int Beb_Activate(int enable){ } } - value = Beb_Read32(baseaddr, MASTERCONFIG_OFFSET); + value = Beb_Read32(csp0base, MASTERCONFIG_OFFSET); if(value&DEACTIVATE_BIT) ret = 0; else ret = 1; if(enable == -1){ @@ -262,7 +264,7 @@ int Beb_Activate(int enable){ } //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return ret; } @@ -270,7 +272,8 @@ int Beb_Activate(int enable){ int Beb_SetNetworkParameter(enum detNetworkParameter mode, int val){ //mapping new memory - u_int32_t baseaddr, valueread = 0; + u_int32_t* csp0base=0; + u_int32_t valueread = 0; u_int32_t offset = TXM_DELAY_LEFT_OFFSET; char modename[100] = ""; @@ -295,40 +298,40 @@ int Beb_SetNetworkParameter(enum detNetworkParameter mode, int val){ default: cprintf(BG_RED,"Unrecognized mode in network parameter: %d\n",mode); return -1; } //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0){ cprintf(BG_RED,"Could not read register to set network parameter. FAIL\n"); return -1; } else{ if(val > -1){ - valueread = Beb_Read32(baseaddr, offset); + valueread = Beb_Read32(csp0base, offset); //cprintf(BLUE, "%s value before:%d\n",modename,valueread); - Beb_Write32(baseaddr, offset,val); + Beb_Write32(csp0base, offset,val); cprintf(BLUE,"%s value:%d\n", modename,valueread); } - valueread = Beb_Read32(baseaddr, offset); + valueread = Beb_Read32(csp0base, offset); //cprintf(BLUE,"%s value:%d\n", modename,valueread); } //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return valueread; } - int Beb_ResetToHardwareSettings(){ //mapping new memory - u_int32_t baseaddr, value = 0, ret = 1; + u_int32_t* csp0base=0; + u_int32_t value = 0, ret = 1; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0) cprintf(BG_RED,"Reset to Hardware Settings FAIL\n"); else{ - value = Beb_Write32(baseaddr, MASTERCONFIG_OFFSET,0); + value = Beb_Write32(csp0base, MASTERCONFIG_OFFSET,0); if(value) cprintf(BG_RED,"Could not reset to hardware settings\n"); else @@ -337,7 +340,7 @@ int Beb_ResetToHardwareSettings(){ //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return ret; } @@ -346,21 +349,22 @@ int Beb_ResetToHardwareSettings(){ u_int32_t Beb_GetFirmwareRevision(){ //mapping new memory - u_int32_t baseaddr, value = 0; + u_int32_t* csp0base=0; + u_int32_t value = 0; //open file pointer - int fd = Beb_open(XPAR_VERSION,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_VERSION); if(fd < 0) cprintf(BG_RED,"Firmware Revision Read FAIL\n"); else{ - value = Beb_Read32(baseaddr, FIRMWARE_VERSION_OFFSET); + value = Beb_Read32(csp0base, FIRMWARE_VERSION_OFFSET); if(!value) cprintf(BG_RED,"Firmware Revision Number does not exist in this version\n"); } //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return value; } @@ -368,41 +372,42 @@ u_int32_t Beb_GetFirmwareRevision(){ u_int32_t Beb_GetFirmwareSoftwareAPIVersion(){ //mapping new memory - u_int32_t baseaddr, value = 0; + u_int32_t* csp0base=0; + u_int32_t value = 0; //open file pointer - int fd = Beb_open(XPAR_VERSION,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_VERSION); if(fd < 0) cprintf(BG_RED,"Firmware Software API Version Read FAIL\n"); else{ - value = Beb_Read32(baseaddr, FIRMWARESOFTWARE_API_OFFSET); + value = Beb_Read32(csp0base, FIRMWARESOFTWARE_API_OFFSET); if(!value) cprintf(BG_RED,"Firmware Software API Version does not exist in this version\n"); } //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return value; } void Beb_ResetFrameNumber(){ //mapping new memory to read master top module configuration - u_int32_t baseaddr; + u_int32_t* csp0base=0; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0){ cprintf(BG_RED,"Reset Frame Number FAIL\n"); }else{ //write a 1 - Beb_Write32(baseaddr, FRAME_NUM_RESET_OFFSET, 1); + Beb_Write32(csp0base, FRAME_NUM_RESET_OFFSET, 1); usleep(100000); //100ms //write a 0 - Beb_Write32(baseaddr, FRAME_NUM_RESET_OFFSET, 0); + Beb_Write32(csp0base, FRAME_NUM_RESET_OFFSET, 0); printf("Frame Number Reset OK\n"); //close file pointer - Beb_close(fd); + Beb_close(fd,csp0base); } } @@ -583,8 +588,7 @@ int Beb_SetByteOrder(){ int Beb_SetUpUDPHeader(unsigned int beb_number, int ten_gig, unsigned int header_number, char* dst_mac, char* dst_ip, unsigned int dst_port){ u_int32_t bram_phy_addr; - volatile u_int32_t* bram_ptr; - bram_ptr = NULL; + u_int32_t* csp0base=0; if (ten_gig) bram_phy_addr = 0xC6002000; else @@ -592,29 +596,22 @@ int Beb_SetUpUDPHeader(unsigned int beb_number, int ten_gig, unsigned int header if(!Beb_SetHeaderData(beb_number,ten_gig,dst_mac,dst_ip,dst_port)) return 0; - int fd = open("/dev/mem", O_RDWR | O_SYNC, 0); - if (fd == -1) - cprintf(BG_RED,"\nCan't find /dev/mem!\n"); - else{ -#ifdef VERBOSE - printf("/dev/mem opened\n"); -#endif - bram_ptr = mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, bram_phy_addr); - if (bram_ptr == MAP_FAILED) { - cprintf(BG_RED,"\nCan't map memmory area!!\n"); - fd = -1; - } -#ifdef VERBOSE - else printf("CSP0 mapped\n"); -#endif - } - memcpy(bram_ptr+header_number*16, &udp_header, sizeof(udp_header)); - close(fd); + + int fd = Beb_open(&csp0base,bram_phy_addr); + if(fd < 0){ + cprintf(BG_RED,"Set up UDP Header FAIL\n"); + }else{ + //read data + memcpy(csp0base+header_number*16, &udp_header, sizeof(udp_header)); + //close file pointer + Beb_close(fd,csp0base); + } return 1; } + //int Beb_SetUpUDPHeader(unsigned int beb_number, int ten_gig, unsigned int header_number, char* dst_mac, char* dst_ip, unsigned int dst_port){ // unsigned int i = 1;/*Beb_GetBebInfoIndex(beb_number);*/ // @@ -814,27 +811,27 @@ int Beb_SetUpTransferParameters(short the_bit_mode){ int Beb_StopAcquisition() { - u_int32_t baseaddr; + u_int32_t* csp0base=0; volatile u_int32_t valuel,valuer; //open file pointer - int fd = Beb_open(XPAR_CMD_GENERATOR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_CMD_GENERATOR); if(fd < 0){ cprintf(BG_RED,"Beb Stop Acquisition FAIL\n"); return 0; }else{ //find value - valuel = Beb_Read32(baseaddr, (LEFT_OFFSET+STOP_ACQ_OFFSET)); - valuer = Beb_Read32(baseaddr, (RIGHT_OFFSET+STOP_ACQ_OFFSET)); + valuel = Beb_Read32(csp0base, (LEFT_OFFSET+STOP_ACQ_OFFSET)); + valuer = Beb_Read32(csp0base, (RIGHT_OFFSET+STOP_ACQ_OFFSET)); //high - Beb_Write32(baseaddr, (LEFT_OFFSET + STOP_ACQ_OFFSET),(valuel|STOP_ACQ_BIT)); - Beb_Write32(baseaddr, (RIGHT_OFFSET + STOP_ACQ_OFFSET),(valuer|STOP_ACQ_BIT)); + Beb_Write32(csp0base, (LEFT_OFFSET + STOP_ACQ_OFFSET),(valuel|STOP_ACQ_BIT)); + Beb_Write32(csp0base, (RIGHT_OFFSET + STOP_ACQ_OFFSET),(valuer|STOP_ACQ_BIT)); //low - Beb_Write32(baseaddr, (LEFT_OFFSET + STOP_ACQ_OFFSET),(valuel&(~STOP_ACQ_BIT))); - Beb_Write32(baseaddr, (RIGHT_OFFSET + STOP_ACQ_OFFSET),(valuer&(~STOP_ACQ_BIT))); + Beb_Write32(csp0base, (LEFT_OFFSET + STOP_ACQ_OFFSET),(valuel&(~STOP_ACQ_BIT))); + Beb_Write32(csp0base, (RIGHT_OFFSET + STOP_ACQ_OFFSET),(valuer&(~STOP_ACQ_BIT))); printf("Beb Stop Acquisition OK\n"); //close file pointer - Beb_close(fd); + Beb_close(fd,csp0base); } return 1; } @@ -889,10 +886,10 @@ int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_nu u_int32_t right_port_value = 0x2000; - u_int32_t baseaddr; + u_int32_t* csp0base=0; volatile u_int32_t value; //open file pointer - int fd = Beb_open(XPAR_CMD_GENERATOR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_CMD_GENERATOR); if(fd < 0){ cprintf(BG_RED,"Beb Request N Images FAIL\n"); return 0; @@ -915,27 +912,27 @@ int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_nu //"0x20 << 8" is dst_number (0x00 for left, 0x20 for right) //Left - Beb_Write32(baseaddr, (LEFT_OFFSET + FIRST_CMD_PART1_OFFSET),0); - Beb_Write32(baseaddr, (LEFT_OFFSET + FIRST_CMD_PART2_OFFSET),send_header_command); - Beb_Write32(baseaddr, (LEFT_OFFSET + SECOND_CMD_PART1_OFFSET),0); - Beb_Write32(baseaddr, (LEFT_OFFSET + SECOND_CMD_PART2_OFFSET),send_frame_command); - value = Beb_Read32(baseaddr,(LEFT_OFFSET + TWO_REQUESTS_OFFSET)); - if(in_two_requests) Beb_Write32(baseaddr, (LEFT_OFFSET + TWO_REQUESTS_OFFSET),(value | TWO_REQUESTS_BIT)); - else Beb_Write32(baseaddr, (LEFT_OFFSET + TWO_REQUESTS_OFFSET),(value &~(TWO_REQUESTS_BIT))); + Beb_Write32(csp0base, (LEFT_OFFSET + FIRST_CMD_PART1_OFFSET),0); + Beb_Write32(csp0base, (LEFT_OFFSET + FIRST_CMD_PART2_OFFSET),send_header_command); + Beb_Write32(csp0base, (LEFT_OFFSET + SECOND_CMD_PART1_OFFSET),0); + Beb_Write32(csp0base, (LEFT_OFFSET + SECOND_CMD_PART2_OFFSET),send_frame_command); + value = Beb_Read32(csp0base,(LEFT_OFFSET + TWO_REQUESTS_OFFSET)); + if(in_two_requests) Beb_Write32(csp0base, (LEFT_OFFSET + TWO_REQUESTS_OFFSET),(value | TWO_REQUESTS_BIT)); + else Beb_Write32(csp0base, (LEFT_OFFSET + TWO_REQUESTS_OFFSET),(value &~(TWO_REQUESTS_BIT))); // Right - Beb_Write32(baseaddr, (RIGHT_OFFSET + FIRST_CMD_PART1_OFFSET),0); - Beb_Write32(baseaddr, (RIGHT_OFFSET + FIRST_CMD_PART2_OFFSET),send_header_command | right_port_value); - Beb_Write32(baseaddr, (RIGHT_OFFSET + SECOND_CMD_PART1_OFFSET),0); - Beb_Write32(baseaddr, (RIGHT_OFFSET + SECOND_CMD_PART2_OFFSET),send_frame_command | right_port_value); - value = Beb_Read32(baseaddr,(RIGHT_OFFSET + TWO_REQUESTS_OFFSET)); - if(in_two_requests) Beb_Write32(baseaddr, (RIGHT_OFFSET + TWO_REQUESTS_OFFSET),(value | TWO_REQUESTS_BIT)); - else Beb_Write32(baseaddr, (RIGHT_OFFSET + TWO_REQUESTS_OFFSET),(value &~(TWO_REQUESTS_BIT))); + Beb_Write32(csp0base, (RIGHT_OFFSET + FIRST_CMD_PART1_OFFSET),0); + Beb_Write32(csp0base, (RIGHT_OFFSET + FIRST_CMD_PART2_OFFSET),send_header_command | right_port_value); + Beb_Write32(csp0base, (RIGHT_OFFSET + SECOND_CMD_PART1_OFFSET),0); + Beb_Write32(csp0base, (RIGHT_OFFSET + SECOND_CMD_PART2_OFFSET),send_frame_command | right_port_value); + value = Beb_Read32(csp0base,(RIGHT_OFFSET + TWO_REQUESTS_OFFSET)); + if(in_two_requests) Beb_Write32(csp0base, (RIGHT_OFFSET + TWO_REQUESTS_OFFSET),(value | TWO_REQUESTS_BIT)); + else Beb_Write32(csp0base, (RIGHT_OFFSET + TWO_REQUESTS_OFFSET),(value &~(TWO_REQUESTS_BIT))); // Set number of frames - Beb_Write32(baseaddr, (LEFT_OFFSET + COMMAND_COUNTER_OFFSET), nimages*(2+in_two_requests)); - Beb_Write32(baseaddr, (RIGHT_OFFSET + COMMAND_COUNTER_OFFSET), nimages*(2+in_two_requests)); + Beb_Write32(csp0base, (LEFT_OFFSET + COMMAND_COUNTER_OFFSET), nimages*(2+in_two_requests)); + Beb_Write32(csp0base, (RIGHT_OFFSET + COMMAND_COUNTER_OFFSET), nimages*(2+in_two_requests)); #ifdef MARTIN for (i=0; i < 10; i++) @@ -943,7 +940,7 @@ int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_nu printf("%d\n",in_two_requests); #endif - Beb_close(fd); + Beb_close(fd,csp0base); #ifdef MARTIN printf("----Beb_RequestNImages----\n"); @@ -991,31 +988,22 @@ int Beb_Test(unsigned int beb_number){ // Temperature value is cropped and not well rounded int Beb_GetBebFPGATemp() { - int temperature=0; - volatile u_int32_t *ptr1; - int fd; - - fd = open("/dev/mem", O_RDWR | O_SYNC, 0); - if (fd == -1) - { - printf("\nCan't find /dev/mem!\n"); - return 0; - } - - u_int32_t CSP0BASE = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, XPAR_SYSMON_0_BASEADDR ); - if (CSP0BASE == (u_int32_t)MAP_FAILED) - { - printf("\nCan't map memmory area!!\n"); - return 0; + u_int32_t* csp0base=0; + int temperature=0; + int ret; + //open file pointer + int fd = Beb_open(&csp0base,XPAR_SYSMON_0_BASEADDR); + if(fd < 0){ + cprintf(BG_RED,"Module Configuration FAIL\n"); + }else{ + //read data + ret = Beb_Read32(csp0base, FPGA_TEMP_OFFSET); + temperature = ((((float)(ret)/65536.0f)/0.00198421639f ) - 273.15f); // Static conversation, copied from xps sysmon standalone driver + //close file pointer + Beb_close(fd,csp0base); } - ptr1=(u_int32_t*)(CSP0BASE + 0x200); // temperature register in xps sysmon core is at 0x200 - close(fd); - - temperature = ((((float)(*ptr1)/65536.0f)/0.00198421639f ) - 273.15f); // Static conversation, copied from xps sysmon standalone driver - - return temperature; } @@ -1023,7 +1011,7 @@ int Beb_GetBebFPGATemp() -int Beb_open(u_int32_t baseaddr, u_int32_t* csp0base){ +int Beb_open(u_int32_t** csp0base, u_int32_t offset){ int fd = open("/dev/mem", O_RDWR | O_SYNC, 0); if (fd == -1) @@ -1032,33 +1020,34 @@ int Beb_open(u_int32_t baseaddr, u_int32_t* csp0base){ #ifdef VERBOSE printf("/dev/mem opened\n"); #endif - *csp0base = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, baseaddr); - if (*csp0base == (u_int32_t)MAP_FAILED) { + *csp0base = (u_int32_t*)mmap(0, BEB_MMAP_SIZE, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, offset); + if (*csp0base == MAP_FAILED) { cprintf(BG_RED,"\nCan't map memmory area!!\n"); fd = -1; } #ifdef VERBOSE - else printf("CSP0 mapped\n"); + else printf("CSP0 mapped %p\n",(void*)*csp0base); #endif } return fd; } -u_int32_t Beb_Read32 (u_int32_t baseaddr, u_int32_t offset){ - volatile u_int32_t *ptr1; - ptr1=(u_int32_t*)(baseaddr + offset); - return *ptr1; +u_int32_t Beb_Read32 (u_int32_t* baseaddr, u_int32_t offset){ + volatile u_int32_t value; + value=* (u_int32_t*)(baseaddr + offset/(sizeof(u_int32_t))); + return value; } -u_int32_t Beb_Write32 (u_int32_t baseaddr, u_int32_t offset, u_int32_t data){ +u_int32_t Beb_Write32 (u_int32_t* baseaddr, u_int32_t offset, u_int32_t data){ volatile u_int32_t *ptr1; - ptr1=(u_int32_t*)(baseaddr + offset); + ptr1=(u_int32_t*)(baseaddr + offset/(sizeof(u_int32_t))); *ptr1 = data; return *ptr1; } -void Beb_close(int fd){ +void Beb_close(int fd,u_int32_t* csp0base){ if(fd >= 0) close(fd); + munmap(csp0base,BEB_MMAP_SIZE); } diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.h b/slsDetectorSoftware/eigerDetectorServer/Beb.h index e5ddedeb08..1c8efa5188 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.h @@ -88,10 +88,11 @@ struct BebInfo{ int Beb_GetBebFPGATemp(); - int Beb_open(u_int32_t baseaddr, u_int32_t* csp0base); - u_int32_t Beb_Read32 (u_int32_t baseaddr, u_int32_t offset); - u_int32_t Beb_Write32 (u_int32_t baseaddr, u_int32_t offset, u_int32_t data); - void Beb_close(int fd); + int Beb_open(u_int32_t** csp0base, u_int32_t offset); + u_int32_t Beb_Read32 (u_int32_t* baseaddr, u_int32_t offset); + u_int32_t Beb_Write32 (u_int32_t* baseaddr, u_int32_t offset, u_int32_t data); + void Beb_close(int fd,u_int32_t* csp0base); + #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h index f1cc52140a..7bfd919ff9 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h @@ -121,6 +121,7 @@ #define MASTER_BIT 0x1 #define OVERWRITE_HARDWARE_BIT 0x2 #define DEACTIVATE_BIT 0x4 +#define FPGA_TEMP_OFFSET 0x200 #define TXM_DELAY_LEFT_OFFSET 0x180 #define TXM_DELAY_RIGHT_OFFSET 0x1A0 diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.0.5.14.0 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.0.5.14.0.1-beamline similarity index 59% rename from slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.0.5.14.0 rename to slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.0.5.14.0.1-beamline index b9b7cebb8a95d1e6ca063b8cb2e32d99afbbf564..71d0facee9f25665c67b01983c4b4c3d7e3d933f 100755 GIT binary patch delta 43795 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 RPse#n8~0~ikiLE4{{vO>ZyW#s delta 43103 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