add userspace library
git-svn-id: svn+ssh://en.codiert.org/home/staff/ben/dev/misc.svn/projects/fpgafs@393 766a2236-cff9-0310-b0c0-a81a5f92509a
This commit is contained in:
		
							parent
							
								
									8efdba0c21
								
							
						
					
					
						commit
						11762c3dab
					
				
							
								
								
									
										13
									
								
								libfpga/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								libfpga/Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | 
 | ||||||
|  | CFLAGS=-c -fPIC | ||||||
|  | 
 | ||||||
|  | CC = gcc | ||||||
|  | 
 | ||||||
|  | SRCS = libfpga.c | ||||||
|  | OBJS = $(SRCS:%.c=%.o) | ||||||
|  | 
 | ||||||
|  | libfpga: ${OBJS} | ||||||
|  | 	${CC} -shared -Wl,-soname,$@.so.1 -o $@.so.1.0.1 $^ | ||||||
|  | 
 | ||||||
|  | clean: | ||||||
|  | 	rm *.o *.so.* | ||||||
							
								
								
									
										200
									
								
								libfpga/libfpga.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										200
									
								
								libfpga/libfpga.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,200 @@ | |||||||
|  | /*********************************************
 | ||||||
|  |  * Benjamin Krill <ben@codiert.org> | ||||||
|  |  *********************************************/ | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/stat.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  | #include <errno.h> | ||||||
|  | 
 | ||||||
|  | int fpgafs_create_context(int fd, const char *lldrv, const char *dir) | ||||||
|  | { | ||||||
|  | 	char *cdir; | ||||||
|  | 	int res,fd1; | ||||||
|  | 
 | ||||||
|  | 	/* create context directory */ | ||||||
|  | 	cdir=malloc(sizeof(dir) + 8); | ||||||
|  | 	sprintf(cdir, "/fpgafs/%s", dir); | ||||||
|  | 	if (mkdir(dir, 0777) == -1) { | ||||||
|  | 		printf("ERROR-1: %s\n", strerror(errno)); | ||||||
|  | 		free(cdir); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* change to the context directory */ | ||||||
|  | 	if (chdir(cdir) == -1) { | ||||||
|  | 		printf("ERROR-2: %s\n", strerror(errno)); | ||||||
|  | 		free(cdir); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	free(cdir); | ||||||
|  | 	/* open the load file */ | ||||||
|  | 	if ((fd1 = open("load", O_WRONLY, 0)) == -1) { | ||||||
|  | 		printf("ERROR-3: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* write the file into load */ | ||||||
|  | 	free(cdir); | ||||||
|  | 	cdir=malloc(1024); | ||||||
|  | 	while ((res=read(fd, cdir, 1024))) | ||||||
|  | 		write(fd1, cdir, res); | ||||||
|  | 
 | ||||||
|  | 	free(cdir); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int fpgafs_send_data(const char *dir, const void *buf, size_t count) | ||||||
|  | { | ||||||
|  | 	int fd, res; | ||||||
|  | 	char *cdir; | ||||||
|  | 	cdir=malloc(sizeof(dir) + 8); | ||||||
|  | 	sprintf(cdir, "/fpgafs/%s", dir); | ||||||
|  | 
 | ||||||
|  | 	/* change to the context directory */ | ||||||
|  | 	if (chdir(cdir) == -1) { | ||||||
|  | 		printf("ERROR-1: %s\n", strerror(errno)); | ||||||
|  | 		free(cdir); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	free(cdir); | ||||||
|  | 	/* open the load file */ | ||||||
|  | 	if ((fd = open("dout", O_RDONLY, 0)) == -1) { | ||||||
|  | 		printf("ERROR-2: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* write stuff into the file */ | ||||||
|  | 	if ((res=write(fd, buf, count)) == -1) { | ||||||
|  | 		printf("ERROR-3: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return res; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int fpgafs_recv_data(const char *dir, void *buf, size_t count) | ||||||
|  | { | ||||||
|  | 	int fd, res; | ||||||
|  | 	char *cdir; | ||||||
|  | 	cdir=malloc(sizeof(dir) + 8); | ||||||
|  | 	sprintf(cdir, "/fpgafs/%s", dir); | ||||||
|  | 
 | ||||||
|  | 	/* change to the context directory */ | ||||||
|  | 	if (chdir(cdir) == -1) { | ||||||
|  | 		printf("ERROR-1: %s\n", strerror(errno)); | ||||||
|  | 		free(cdir); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	free(cdir); | ||||||
|  | 	/* open the load file */ | ||||||
|  | 	if ((fd = open("din", O_WRONLY, 0)) == -1) { | ||||||
|  | 		printf("ERROR-2: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* write stuff into the file */ | ||||||
|  | 	if ((res=read(fd, buf, count)) == -1) { | ||||||
|  | 		printf("ERROR-3: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return res; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int fpgafs_send_cmd(const char *dir, unsigned int cmd) | ||||||
|  | { | ||||||
|  | 	int fd, res; | ||||||
|  | 	char *cdir; | ||||||
|  | 	cdir=malloc(sizeof(dir) + 8); | ||||||
|  | 	sprintf(cdir, "/fpgafs/%s", dir); | ||||||
|  | 
 | ||||||
|  | 	/* change to the context directory */ | ||||||
|  | 	if (chdir(cdir) == -1) { | ||||||
|  | 		printf("ERROR-1: %s\n", strerror(errno)); | ||||||
|  | 		free(cdir); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	free(cdir); | ||||||
|  | 	/* open the load file */ | ||||||
|  | 	if ((fd = open("cmd", O_WRONLY, 0)) == -1) { | ||||||
|  | 		printf("ERROR-2: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* write stuff into the file */ | ||||||
|  | 	if ((res=write(fd, (const char *)&cmd, 4)) == -1) { | ||||||
|  | 		printf("ERROR-3: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return res; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int fpgafs_get_stat(const char *dir) | ||||||
|  | { | ||||||
|  | 	int fd; | ||||||
|  | 	char *cdir; | ||||||
|  | 	char buf[4]; | ||||||
|  | 	int res; | ||||||
|  | 	cdir=malloc(sizeof(dir) + 8); | ||||||
|  | 	sprintf(cdir, "/fpgafs/%s", dir); | ||||||
|  | 
 | ||||||
|  | 	/* change to the context directory */ | ||||||
|  | 	if (chdir(cdir) == -1) { | ||||||
|  | 		printf("ERROR-1: %s\n", strerror(errno)); | ||||||
|  | 		free(cdir); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	free(cdir); | ||||||
|  | 	/* open the load file */ | ||||||
|  | 	if ((fd = open("stat", O_RDONLY, 0)) == -1) { | ||||||
|  | 		printf("ERROR-2: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* write stuff into the file */ | ||||||
|  | 	if ((res=read(fd, buf, 4)) == -1) { | ||||||
|  | 		printf("ERROR-3: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return (int)*(int*)&buf[0]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int fpgafs_set_lldrv(const char *dir, const char* name) | ||||||
|  | { | ||||||
|  | 	int fd; | ||||||
|  | 	char *cdir; | ||||||
|  | 	int res; | ||||||
|  | 	cdir=malloc(sizeof(dir) + 8); | ||||||
|  | 	sprintf(cdir, "/fpgafs/%s", dir); | ||||||
|  | 
 | ||||||
|  | 	/* change to the context directory */ | ||||||
|  | 	if (chdir(cdir) == -1) { | ||||||
|  | 		printf("ERROR-1: %s\n", strerror(errno)); | ||||||
|  | 		free(cdir); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	free(cdir); | ||||||
|  | 	/* open the load file */ | ||||||
|  | 	if ((fd = open("lldrv", O_WRONLY, 0)) == -1) { | ||||||
|  | 		printf("ERROR-2: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* write stuff into the file */ | ||||||
|  | 	if ((res=write(fd, name, 5)) == -1) { | ||||||
|  | 		printf("ERROR-3: %s\n", strerror(errno)); | ||||||
|  | 		return -1; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								libfpga/libfpga.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								libfpga/libfpga.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | /*********************************************
 | ||||||
|  |  * Benjamin Krill <ben@codiert.org> | ||||||
|  |  *********************************************/ | ||||||
|  | int fpgafs_create_context(int fd, const char *name) | ||||||
|  | int fpgafs_send_data(const void *buf, size_t count); | ||||||
|  | int fpgafs_recv_data(void *buf, size_t count); | ||||||
|  | int fpgafs_send_cmd(unsigned int cmd); | ||||||
|  | int fpgafs_get_stat(); | ||||||
|  | int fpgafs_set_lldrv(const char* name); | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user