Skip to content

Commit

Permalink
added udev support
Browse files Browse the repository at this point in the history
- Added udev rule (placed in udev/). It allows to set group
  and permissions of all lsi6-devices in /dev
- Added handling error of get_device_no function
- Removed unnecessary scripts
- Modifed documentation
  • Loading branch information
Pavel Cheblakov authored and Pavel Cheblakov committed Sep 23, 2010
1 parent 0dd300a commit e7c8027
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 70 deletions.
4 changes: 4 additions & 0 deletions README
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
lsi6 - line serial interface for CAMAC
--------------------------------------

See documentation in doc/readme_pci.koi8
56 changes: 36 additions & 20 deletions doc/readme_pci.koi8
Original file line number Diff line number Diff line change
Expand Up @@ -5,35 +5,43 @@
��������� ���������� ���������� ������ 1.4 �� 24.12.2001
������������ � �������� ������� camt ������ ��.

2. ��������� ������.
2. ��������� ��������.

2.1. ����� ���������� ������ ���������� ����������� ��������� ����
Linux � ���������, ��� ���� ������������� �� ������ ������.
��� ���������� ������ ����� �������������� ������������ ����� ����
� ������� modpost (��� ���� 2.6.x)

2.2. ��� Linux 2.6.x � Makefile ���������� ���� ��
��������� ����, ��������,
LINUX_KERNEL_PATH = /usr/src/linux-2.6.9
2.1. ��� ������ �������� ���������� ����� ������������ �����
��� ������� ������ ����. �� ���������, ������ ����� ������������
��� �������� ����. � ��������� ������ ���� ���������� ����������
KERNELDIR.

2.2.
�������������� ������ � �������� �������:
make
make camt
�������������� ������� � �������� �������:
# make modules
# make camt

2.3.
���������������� udev:
� �������� udev/ ��������� ������� 91-lsi6.rules
��� ���������� ����������� � ������� � ��������� udev
(��� �������, /etc/udev/rules.d) � ����������� ��������������
GROUP � MODE � ����������� �� ����, ����� ������ ����� ������������
���������� lsi6 � ����� ����� ������� ����� �����

��� ����, ��� �� ������ ������� "���������" ����� ��������������
��������:
# udevtrigger

����������������:
make install
2.4.

������� ����� ���������:
make devices
���������������� �������:
# make modules_install

��������� ������:
insmod lsi6.o
modprobe lsi6
��� ���������� - ����� ���������� � �������� �����-������
����������� ������������� bios-��.
���� � ������� ��������� ����, ��� �������������
����� �������.
(���������� - � ���� 2.6.x ������ ����� ���������� .ko)

��� �������� ������� ������� ����������� udev-�� �������������.

3. �������������.
���� ���������� /dev/lsi6cardNchannelM
Expand All @@ -47,7 +55,7 @@ insmod lsi6.o
X � Q � ��������������� ����, �.�. ���� � ������� ���
X=1, ��� �������� ���������� ������� X.

5. ������������ � ������ Linux
5. ������������ � ������ Linux (�� 1.06)
2.2.0,
2.2.25
2.4.0
Expand All @@ -56,5 +64,13 @@ insmod lsi6.o
2.6.0
2.6.9

�.�.������, ���. 39-42-84
��� ������ 1.06.x
2.6.18
2.6.33 (����������� ������ ������)

�.�.������, ���. 329-42-84
[email protected]

�.�.�������� (��������� ����� ������ 1.05),
���. 329-42-25
[email protected]
52 changes: 34 additions & 18 deletions lsi6_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,6 @@
#include "lsi6camac.h"
#include "lsi6_lib.h"

/*
extern void *kmalloc(size_t, int);
extern void kfree(const void *);
*/

#undef DEBUG

#ifdef DEBUG
Expand All @@ -35,8 +30,8 @@ extern void kfree(const void *);
#endif

#define DRV_NAME "lsi6"
#define DRV_VERSION "1.06"
#define DRV_RELDATE "16 Sep. 2010"
#define DRV_VERSION "1.06.1"
#define DRV_RELDATE "23 Sep. 2010"
#define DRV_AUTHOR "V.Mamkin, P.Cheblakov"

MODULE_AUTHOR(DRV_AUTHOR);
Expand Down Expand Up @@ -70,7 +65,7 @@ static int get_device_no(int major)
if (lsi6_dev[i].major == major)
return i;

return -1; //TODO fix it. it's very dangerous
return -1;
}

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
Expand Down Expand Up @@ -109,12 +104,18 @@ static irqreturn_t lsi6_interrupt(int irq, void *dev_id, struct pt_regs *unused)
}
static int lsi6_open(struct inode * inode, struct file * file)
{
unsigned int chnum = MINOR(inode->i_rdev);
unsigned int card = get_device_no(MAJOR(inode->i_rdev));
lsi6_dev_t *lsi = &lsi6_dev[card];
lsi6_regs_t *regs = (lsi6_regs_t *)lsi->base;
unsigned long flags;
int csr;
unsigned int chnum = MINOR(inode->i_rdev);
unsigned int card = get_device_no(MAJOR(inode->i_rdev));
lsi6_dev_t *lsi;
lsi6_regs_t *regs;

if (card < 0)
return -ENXIO;

lsi = &lsi6_dev[card];
regs = (lsi6_regs_t *)lsi->base;

DP(printk(DRV_NAME ": open channel %d\n", chnum));

Expand All @@ -137,14 +138,19 @@ static int lsi6_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
int chnum = MINOR(inode->i_rdev);
unsigned int card = get_device_no(MAJOR(inode->i_rdev));
lsi6_dev_t *lsi = &lsi6_dev[card];
unsigned long * ptr = (unsigned long * ) arg;
unsigned long x;
int n,a,f, rc;
unsigned long flags;
unsigned long volatile jiffies_start, jiffies_end;
int jiffies_left;
unsigned int card = get_device_no(MAJOR(inode->i_rdev));
lsi6_dev_t *lsi;

if (card < 0)
return -ENXIO;

lsi = &lsi6_dev[card];

n = N_NAF(cmd);
a = A_NAF(cmd);
Expand Down Expand Up @@ -287,12 +293,17 @@ static ssize_t lsi6_read(struct file * file, char * buf,
size_t count, loff_t *ppos)
{
unsigned int chnum=MINOR(file->f_dentry->d_inode->i_rdev);
unsigned int card = get_device_no(MAJOR(file->f_dentry->d_inode->i_rdev));
lsi6_dev_t *lsi = &lsi6_dev[card];
int naf = *ppos;
int n,a,f, rc;
unsigned long x;
unsigned long flags;
unsigned int card = get_device_no(MAJOR(file->f_dentry->d_inode->i_rdev));
lsi6_dev_t *lsi;

if (card < 0)
return -ENXIO;

lsi = &lsi6_dev[card];

n = N_NAF(naf);
a = A_NAF(naf);
Expand Down Expand Up @@ -347,12 +358,17 @@ static ssize_t lsi6_write(struct file * file, const char * buf,
size_t count, loff_t *ppos)
{
unsigned int chnum=MINOR(file->f_dentry->d_inode->i_rdev);
unsigned int card = get_device_no(MAJOR(file->f_dentry->d_inode->i_rdev));
lsi6_dev_t *lsi = &lsi6_dev[card];
int naf = *ppos;
int n,a,f, rc;
unsigned long x;
unsigned long flags;
unsigned int card = get_device_no(MAJOR(file->f_dentry->d_inode->i_rdev));
lsi6_dev_t *lsi;

if (card < 0)
return -ENXIO;

lsi = &lsi6_dev[card];

n = N_NAF(naf);
a = A_NAF(naf);
Expand Down
25 changes: 0 additions & 25 deletions makedevices

This file was deleted.

6 changes: 0 additions & 6 deletions reload

This file was deleted.

2 changes: 1 addition & 1 deletion udev/91-lsi6.rules
Original file line number Diff line number Diff line change
@@ -1 +1 @@
SUBSYSTEM=="pci", SYSFS{device}=="0x3333", SYSFS{vendor}=="0x1172", PROGRAM="/root/ttt.pl %M %m"
KERNEL=="lsi6*", GROUP="root", MODE="0660"

0 comments on commit e7c8027

Please sign in to comment.