Commit f96d4189 authored by Cesar Prados's avatar Cesar Prados

vme-wb: add the wb to vme bridge kernel module.

It allows to use from a vme master eb commands (e.g. eb-ls) over the vme interface.
It follows the philosophy of pci-wb. So far only reading eb commands are supported.
The development is in a test phase, for that reason there are hardcode values and paths.

Main files:
vme_wb.*: register the kernel module and creates two VME windows, the first for the
          setting of the CSR/CR parameters in the vme slave, and second for data
          communication.
Module.symvers: it is needed for the correct compilation of the module sice it uses functions
                from wishbone.ko and vmebus.ko.
scripts for inserting and removing the module.
parent cb4328f3
# This is useful if cross-compiling. Taken from kernel Makefile (CC changed)
#AS =$(CROSS_COMPILE)as
#LD =$(CROSS_COMPILE)ld
#CC =$(CROSS_COMPILE)gcc
#CPP =$(CC) -E
#AR =$(CROSS_COMPILE)ar
#NM =$(CROSS_COMPILE)nm
#STRIP =$(CROSS_COMPILE)strip
#OBJCOPY =$(CROSS_COMPILE)objcopy
#OBJDUMP =$(CROSS_COMPILE)objdump
KERNELVER ?= `uname -r`
KERNELDIR ?= /lib/modules/$(KERNELVER)/build
ifneq ($(KERNELRELEASE),)
obj-m := vme_wb.o
ccflags-y := -I/root/vetar_drv/vmebridge/driver
ccflags-y += -I/root/fpga-config-space/pcie-wb
vetar-objs := vme-wb.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
KBUILD_EXTRA_SYMBOLS := $(M)/Module.symvers.wb
KBUILD_EXTRA_SYMBOLS += $(M)/Module.symvers.vme
all: modules
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD)
install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
0xd5d87388 vme_bus_error_check /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0xfdd837c3 vme_create_window /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x404e46ad vme_release_mapping /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x2f83b3c2 wishbone_slave_ready /root/fpga-config-space/pcie-wb/wishbone EXPORT_SYMBOL
0xade9cbbc vme_unregister_driver /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x27d77c1f vme_do_dma_kernel /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0xd1694422 find_controller /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x97a23c39 vme_register_berr_handler /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0xb6f7ab9c wishbone_register /root/fpga-config-space/pcie-wb/wishbone EXPORT_SYMBOL
0xd72f079c vme_request_irq /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x159028be wishbone_unregister /root/fpga-config-space/pcie-wb/wishbone (unknown)
0x8ecccb22 vme_free_irq /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x17f13619 find_vme_mapping_from_addr /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0xae07c6e9 vme_find_mapping /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x74ee0fbc vme_bus_error_check_clear /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0xd22ebdee vme_register_driver /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x7832e4d0 vme_generate_interrupt /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x2fe70581 vme_destroy_window /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0xbea0c878 vme_do_dma /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0xbccb7cc9 return_controller /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x0106863e vme_unregister_berr_handler /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x824cc545 vme_intclr /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0xe35baa39 vme_intset /root/vetar_drv/vmebridge/driver/vmebus EXPORT_SYMBOL_GPL
0x20314cbf vme_get_window_attr /root/vetar_drv/vmebridge/driver/vmebus (unknown)
#!/bin/bash
insmod vme_wb.ko slot=1 vmebase=0x0 vector=1 lun=1
#!/bin/bash
rmmod vme_wb.ko
This diff is collapsed.
/*
* Copyright (C) 2012-2013 GSI (www.gsi.de)
* Author: Cesar Prados <c.prados@gsi.de>
*
* Released according to the GNU GPL, version 2 or any later version
*
* Driver for VME VME board.
*/
#ifndef __VME_H__
#define __VME_H__
#include <linux/firmware.h>
#include <vmebus.h>
#include <wishbone.h>
#define VME_WB "vme_wb"
#define VME_MAX_DEVICES 32
#define VME_DEFAULT_IDX { [0 ... (VME_MAX_DEVICES-1)] = -1 }
#define VME_IRQ_LEVEL 2
#define VME_VENDOR_ID 0x80031
#define VME_VENDOR_ID_OFFSET 0x24
enum vme_map_win {
MAP_CR_CSR = 0, /* CR/CSR */
MAP_REG /* A32 space */
};
/* Our device structure */
struct vme_dev {
int lun;
int slot;
uint32_t vmebase;
int vector;
int level;
//struct device *dev;
char driver[16];
char description[80];
struct vme_mapping *map[2];
/* struct work_struct work; */
unsigned long irqcount;
};
struct vme_wb_dev {
struct device *vme_dev;
struct wishbone wb;
struct vme_dev vme_res;
struct mutex mutex;
};
/* Functions and data in vme_wb.c */
extern void vme_setup_csr_fa0(void *base, u32 vme, unsigned vector,
unsigned level);
extern int vme_unmap_window(struct vme_wb_dev *vetar, enum vme_map_win map_type);
extern int vme_map_window( struct vme_wb_dev *vetar, enum vme_map_win map_type);
/* VME CSR offsets */
#define FUN0ADER 0x7FF63
#define INT_LEVEL 0x7ff5b
#define INTVECTOR 0x7ff5f
#define WB_32_64 0x7ff33
#define BIT_SET_REG 0x7FFFB
#define BIT_CLR_REG 0x7FFF7
#define WB32 1
#define WB64 0
#define RESET_CORE 0x80
#define ENABLE_CORE 0x10
#endif /* __VME_H__ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment