nidas v1.2.3
Classes | Macros | Functions | Variables
lamsx.c File Reference
#include <linux/types.h>
#include <linux/module.h>
#include <linux/version.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/fs.h>
#include <linux/workqueue.h>
#include <linux/poll.h>
#include <linux/delay.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/uaccess.h>
#include <asm/io.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include "lamsx.h"
#include <nidas/linux/ver_macros.h>
#include <nidas/linux/Revision.h>
#include <nidas/linux/klog.h>
#include <nidas/linux/isa_bus.h>
#include <nidas/linux/util.h>

Classes

struct  bh_data
 
struct  LAMS_board
 

Macros

#define MAX_LAMS_BOARDS   3
 
#define IRQF_SHARED   SA_SHIRQ
 
#define REPO_REVISION   "unknown"
 
#define RAM_CLEAR_OFFSET   0x00
 
#define PEAK_CLEAR_OFFSET   0x02
 
#define AVG_LSW_DATA_OFFSET   0x04
 
#define AVG_MSW_DATA_OFFSET   0x06
 
#define PEAK_DATA_OFFSET   0x08
 
#define TAS_BELOW_OFFSET   0x0A
 
#define TAS_ABOVE_OFFSET   0x0C
 
#define IOPORT_REGION_SIZE   16
 
#define SPECTRAL_POINTS_TO_SKIP   0
 
#define LAMS_ISR_SAMPLE_QUEUE_SIZE   128
 
#define LAMS_OUTPUT_SAMPLE_QUEUE_SIZE   32
 

Functions

 module_param_array (ioports, int, numboards, 0)
 
 module_param_array (irqs, int, numirqs, 0)
 
 MODULE_AUTHOR ("Gordon Maclean <maclean@ucar.edu>")
 
 MODULE_LICENSE ("Dual BSD/GPL")
 
 MODULE_DESCRIPTION ("Driver for LAMX card")
 
 MODULE_VERSION (REPO_REVISION)
 
static int setNAvg (struct LAMS_board *brd, int val)
 
static void lams_bottom_half (struct work_struct *work)
 Work queue function that processes the raw samples from the ISR.
 
static irqreturn_t lams_irq_handler (int irq, void *dev_id)
 
static int lams_request_irq (struct LAMS_board *brd)
 
static int lams_remove_irq (struct LAMS_board *brd)
 
static int lams_open (struct inode *inode, struct file *filp)
 
static int lams_release (struct inode *inode, struct file *filp)
 
static ssize_t lams_read (struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
 
static unsigned int lams_poll (struct file *filp, poll_table *wait)
 
static long lams_ioctl (struct file *filp, unsigned int cmd, unsigned long arg)
 
static void lams_cleanup (void)
 
static int __init lams_init (void)
 
 module_init (lams_init)
 
 module_exit (lams_cleanup)
 

Variables

static const char * driver_name = "lamsx"
 
static unsigned int ioports [MAX_LAMS_BOARDS] = { 0x220, 0, 0 }
 
static int numboards = 0
 
static int irqs [MAX_LAMS_BOARDS] = { 4, 0, 0 }
 
static int numirqs = 0
 
static dev_t lams_device = MKDEV(0,0)
 
static struct class * lams_class
 
static struct LAMS_boardboards = 0
 
static struct workqueue_struct * work_queue = 0
 
static struct file_operations lams_fops
 

Macro Definition Documentation

◆ AVG_LSW_DATA_OFFSET

#define AVG_LSW_DATA_OFFSET   0x04

Referenced by lams_init().

◆ AVG_MSW_DATA_OFFSET

#define AVG_MSW_DATA_OFFSET   0x06

Referenced by lams_init().

◆ IOPORT_REGION_SIZE

#define IOPORT_REGION_SIZE   16

Referenced by lams_cleanup(), and lams_init().

◆ IRQF_SHARED

#define IRQF_SHARED   SA_SHIRQ

◆ LAMS_ISR_SAMPLE_QUEUE_SIZE

#define LAMS_ISR_SAMPLE_QUEUE_SIZE   128

◆ LAMS_OUTPUT_SAMPLE_QUEUE_SIZE

#define LAMS_OUTPUT_SAMPLE_QUEUE_SIZE   32

◆ MAX_LAMS_BOARDS

#define MAX_LAMS_BOARDS   3

Referenced by lams_init().

◆ PEAK_CLEAR_OFFSET

#define PEAK_CLEAR_OFFSET   0x02

Referenced by lams_init().

◆ PEAK_DATA_OFFSET

#define PEAK_DATA_OFFSET   0x08

Referenced by lams_init().

◆ RAM_CLEAR_OFFSET

#define RAM_CLEAR_OFFSET   0x00

Referenced by lams_init().

◆ REPO_REVISION

#define REPO_REVISION   "unknown"

Referenced by lams_init().

◆ SPECTRAL_POINTS_TO_SKIP

#define SPECTRAL_POINTS_TO_SKIP   0

Referenced by lams_init().

◆ TAS_ABOVE_OFFSET

#define TAS_ABOVE_OFFSET   0x0C

Referenced by lams_ioctl().

◆ TAS_BELOW_OFFSET

#define TAS_BELOW_OFFSET   0x0A

Referenced by lams_ioctl().

Function Documentation

◆ lams_bottom_half()

static void lams_bottom_half ( struct work_struct * work)
static

◆ lams_cleanup()

static void lams_cleanup ( void )
static

◆ lams_init()

static int __init lams_init ( void )
static

◆ lams_ioctl()

static long lams_ioctl ( struct file * filp,
unsigned int cmd,
unsigned long arg )
static

◆ lams_irq_handler()

static irqreturn_t lams_irq_handler ( int irq,
void * dev_id )
static

◆ lams_open()

static int lams_open ( struct inode * inode,
struct file * filp )
static

◆ lams_poll()

static unsigned int lams_poll ( struct file * filp,
poll_table * wait )
static

◆ lams_read()

static ssize_t lams_read ( struct file * filp,
char __user * buf,
size_t count,
loff_t * f_pos )
static

◆ lams_release()

static int lams_release ( struct inode * inode,
struct file * filp )
static

◆ lams_remove_irq()

static int lams_remove_irq ( struct LAMS_board * brd)
static

Referenced by lams_release().

◆ lams_request_irq()

static int lams_request_irq ( struct LAMS_board * brd)
static

References driver_name, irqs, and lams_irq_handler().

Referenced by lams_open().

◆ MODULE_AUTHOR()

MODULE_AUTHOR ( "Gordon Maclean <maclean@ucar.edu>" )

◆ MODULE_DESCRIPTION()

MODULE_DESCRIPTION ( "Driver for LAMX card" )

◆ module_exit()

module_exit ( lams_cleanup )

◆ module_init()

module_init ( lams_init )

◆ MODULE_LICENSE()

MODULE_LICENSE ( "Dual BSD/GPL" )

◆ module_param_array() [1/2]

module_param_array ( ioports ,
int ,
numboards ,
0  )

◆ module_param_array() [2/2]

module_param_array ( irqs ,
int ,
numirqs ,
0  )

◆ MODULE_VERSION()

MODULE_VERSION ( REPO_REVISION )

◆ setNAvg()

static int setNAvg ( struct LAMS_board * brd,
int val )
static

Referenced by lams_init(), and lams_ioctl().

Variable Documentation

◆ boards

struct LAMS_board* boards = 0
static

◆ driver_name

const char* driver_name = "lamsx"
static

Referenced by lams_init(), and lams_request_irq().

◆ ioports

unsigned int ioports[MAX_LAMS_BOARDS] = { 0x220, 0, 0 }
static

Referenced by lams_init().

◆ irqs

int irqs[MAX_LAMS_BOARDS] = { 4, 0, 0 }
static

Referenced by lams_init(), and lams_request_irq().

◆ lams_class

struct class* lams_class
static

Referenced by lams_cleanup(), and lams_init().

◆ lams_device

dev_t lams_device = MKDEV(0,0)
static

Referenced by lams_cleanup(), and lams_init().

◆ lams_fops

struct file_operations lams_fops
static
Initial value:
= {
.owner = THIS_MODULE,
.read = lams_read,
.poll = lams_poll,
.open = lams_open,
.unlocked_ioctl = lams_ioctl,
.release = lams_release,
.llseek = no_llseek,
}
static long lams_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
Definition lamsx.c:650
static int lams_open(struct inode *inode, struct file *filp)
Definition lamsx.c:516
static unsigned int lams_poll(struct file *filp, poll_table *wait)
Definition lamsx.c:635
static int lams_release(struct inode *inode, struct file *filp)
Definition lamsx.c:578
static ssize_t lams_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
Definition lamsx.c:606

Referenced by lams_init().

◆ numboards

int numboards = 0
static

◆ numirqs

int numirqs = 0
static

◆ work_queue

struct workqueue_struct* work_queue = 0
static