From 5681d374267cd613846b6e8b41dd2e65e96439a4 Mon Sep 17 00:00:00 2001 From: Patrick Robbe <robbe@lal.in2p3.fr> Date: Tue, 11 Jun 2019 18:48:30 +0900 Subject: [PATCH] Remove old files --- Pcie40DriverLibraries/Makefile | 28 ++++++++ Pcie40DriverLibraries/ecs_driverlib.c | 94 +++++++++++++++++++++++++++ Pcie40DriverLibraries/ecs_driverlib.h | 44 +++++++++++++ Pcie40DriverLibraries/flags.mk | 3 + 4 files changed, 169 insertions(+) create mode 100644 Pcie40DriverLibraries/Makefile create mode 100644 Pcie40DriverLibraries/ecs_driverlib.c create mode 100644 Pcie40DriverLibraries/ecs_driverlib.h create mode 100755 Pcie40DriverLibraries/flags.mk diff --git a/Pcie40DriverLibraries/Makefile b/Pcie40DriverLibraries/Makefile new file mode 100644 index 0000000..aa2d399 --- /dev/null +++ b/Pcie40DriverLibraries/Makefile @@ -0,0 +1,28 @@ +HERE :=$(strip $(realpath $(dir $(lastword $(MAKEFILE_LIST))))) +TOP :=$(realpath $(HERE)) + +include $(TOP)/flags.mk + +LIBPCIE40_ECS.A :=libpcie40driver_ecs.a +LIBPCIE40_ECS.A_OBJS =pcie40_driverlib.o ecs_driverlib.o +LIBPCIE40_ECS.A_CFLAGS =$(CFLAGS) -I$(TOP) -I$(TOP)/../Pcie40Driver +LIBPCIE40_ECS.A_ARFLAGS =rcs +LIBPCIE40_ECS.A_INSTALL =$(PREFIX)/lib$(LIBDIR_SUFFIX) + +LIBPCIE40_ECS.SO :=libpcie40driver_ecs.so +LIBPCIE40_ECS.SO_OBJS =$(LIBPCIE40_ECS.A_OBJS:.o=.pic.o) +LIBPCIE40_ECS.SO_CFLAGS =$(LIBPCIE40_ECS.A_CFLAGS) +LIBPCIE40_ECS.SO_LDFLAGS =-shared +LIBPCIE40_ECS.SO_INSTALL =$(LIBPCIE40_ECS.A_INSTALL) + +LIBPCIE40_ECS_HDRS :=ecs.h +LIBPCIE40_ECS_HDRS_INSTALL =$(PREFIX)/include/pcie40 + +VPATH :=$(TOP) + +include $(TOP)/rules.mk +ifeq ($(ENABLE_PCIE40), true) +$(eval $(call ODIR_template,LIBPCIE40_ECS.A)) +$(eval $(call ODIR_template,LIBPCIE40_ECS.SO)) +endif +$(eval $(call DEFAULT_template)) diff --git a/Pcie40DriverLibraries/ecs_driverlib.c b/Pcie40DriverLibraries/ecs_driverlib.c new file mode 100644 index 0000000..0dfec0f --- /dev/null +++ b/Pcie40DriverLibraries/ecs_driverlib.c @@ -0,0 +1,94 @@ +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <errno.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> + +#include <linux/ioctl.h> +#include <sys/ioctl.h> +#include <sys/mman.h> + +#include "ecs_driverlib.h" +#include "pcie40_driverlib.h" +#include "pcie40_ioctl.h" + +//`p40_ecs_open` +int p40_ecs_open(int dev, int bar, uint32_t **regs) +{ + int fd; + char devname[32]; + + char *suffix; + switch (bar) { + case 0: + suffix = "bar0"; + break; + case 2: + suffix = "bar2"; + break; + default: + return -EINVAL; + } + + if (p40_get_devname(dev, suffix, devname, sizeof(devname)) < 0) { + perror("p40_get_devname()"); + return -1; + } + + if ((fd = open(devname, O_RDWR)) == -1){ + perror("open()"); + return -1; + } + + int bar_size = p40_ecs_bar_size(fd); + if (bar_size < 0) { + close(fd); + return -1; + } + + *regs = mmap(NULL, bar_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (*regs == NULL) { + perror("mmap()"); + close(fd); + return -1; + } + + return fd; +} + +//`p40_ecs_close` +void p40_ecs_close(int fd, uint32_t *regs) +{ + int bar_size = p40_ecs_bar_size(fd); + munmap(regs, bar_size); + close(fd); +} + +//`p40_ecs_bar_size` +int p40_ecs_bar_size(int fd) +{ + int ret; + + //? See ioctl.pcie`P40_ECS_GET_BAR_SIZE` . + ret = ioctl(fd, P40_ECS_GET_BAR_SIZE); + if (ret < 0) { + perror("ioctl(P40_ECS_GET_BAR_SIZE)"); + return -1; + } + return ret; +} + +//`p40_ecs_w32` +void p40_ecs_w32(uint32_t volatile *regs, uint32_t addr, uint32_t val) +{ + regs[addr >> 2] = val; +} + +//`p40_ecs_r32` +uint32_t p40_ecs_r32(uint32_t volatile *regs, uint32_t addr) +{ + return regs[addr >> 2]; +} diff --git a/Pcie40DriverLibraries/ecs_driverlib.h b/Pcie40DriverLibraries/ecs_driverlib.h new file mode 100644 index 0000000..4227e6b --- /dev/null +++ b/Pcie40DriverLibraries/ecs_driverlib.h @@ -0,0 +1,44 @@ +#ifndef __PCIE40_ECS_H +#define __PCIE40_ECS_H + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +//dg`wt.pcie40.c.ecs` In order to interact with the ECS interface of the PCIe40 driver, C libraries are provided (*libpcie40_ecs.so* and *libpcie40_ecs.a*). +// To use these libraries, add ``#include <lhcb/pcie40/ecs.h>`` to your source code and ``-lpcie40_ecs`` to your linker flags. +// This API is very simple, consisting only of a handful of functions to create I/O memory mappings and to access individual I/O registers, see <<PCIe40 driver ECS API>>. + +//`p40_ecs_open` Create file descriptor to access an ECS BAR. +int p40_ecs_open(int dev, int bar, uint32_t **regs);//?> +//>`dev` Device identifier corresponding to the given board. +//>`bar` PCI BAR to access, valid values are 0 (for the user registers) and 2 (for the low-level registers). +//<`regs` Address of a valid +uint32_t *+ pointer. It is set by the function upon return. + +//`p40_ecs_close` Destroy file descriptor to an open ECS BAR. +void p40_ecs_close(int fd, uint32_t *regs);//?> +//>`fd` File descriptor returned by `p40_ecs_open` . +//>`regs` Pointer populated by `p40_ecs_open` . + +//`p40_ecs_bar_size` Query driver for size of a given PCI BAR. +int p40_ecs_bar_size(int fd);//?> +//>`fd` File descriptor returned by `p40_ecs_open` . + +//`p40_ecs_w32` Write register at given address. +void p40_ecs_w32(uint32_t volatile *regs, uint32_t addr, uint32_t val);//?> +//>`regs` Pointer populated by `p40_ecs_open` . +//>`addr` Address of register. +//>`val` 32-bit value to write. + +//`p40_ecs_r32` Read register at given address. +uint32_t p40_ecs_r32(uint32_t volatile *regs, uint32_t addr);//?> +//>`regs` Pointer populated by `p40_ecs_open` . +//>`addr` Address of register. + +#ifdef __cplusplus +} //extern "C" +#endif + +#endif//__PCIE40_ECS_H diff --git a/Pcie40DriverLibraries/flags.mk b/Pcie40DriverLibraries/flags.mk new file mode 100755 index 0000000..fe8e02c --- /dev/null +++ b/Pcie40DriverLibraries/flags.mk @@ -0,0 +1,3 @@ +export ENABLE_PCIE40 ?=true + +export PREFIX ?=/usr -- GitLab