| grayich |
|
|
Темы:
216
Сообщения:
1984
Участник с: 08 января 2009
|
Приветы всем! есть такая штука как ppscsi, нужная для сканеров LPT http://penguin-breeder.org/kernel/download/ удалось ли кому собрать этот модуль ядра? |
| dimez |
|
|
Темы:
0
Сообщения:
2
Участник с: 13 марта 2009
|
посмотри на www.vladimirov.org , выложил патч для 2.6.28.7. |
| grayich |
|
|
Темы:
216
Сообщения:
1984
Участник с: 08 января 2009
|
а для 2.6.30 патч есть? =) может, кто то в AUR добавит ppscsi ? |
| grayich |
|
|
Темы:
216
Сообщения:
1984
Участник с: 08 января 2009
|
помогите с патчем для 2.6.31 :) |
| h4tr3d |
|
|
Темы:
34
Сообщения:
2656
Участник с: 12 июля 2007
|
уже 2.6.32 грядет :)
systemd должен умереть.
|
| grayich |
|
|
Темы:
216
Сообщения:
1984
Участник с: 08 января 2009
|
и для 2.6.32 :) |
| h4tr3d |
|
|
Темы:
34
Сообщения:
2656
Участник с: 12 июля 2007
|
Кто с Владивостока, приходите с пивом - забацаем, и ещё сообщество спасибо скажет, а так - ну лениво же право! %)
systemd должен умереть.
|
| grayich |
|
|
Темы:
216
Сообщения:
1984
Участник с: 08 января 2009
|
вообщем пришлось ставить оффтопик и сканать под ним :-\ |
| h4tr3d |
|
|
Темы:
34
Сообщения:
2656
Участник с: 12 июля 2007
|
вот тебе патч, у меня на 2.6.32 собралось, была ругань на указатели, но хз как там они используются, так что, если чиво, ток ядро паникнет :) ppscsi-beta2-for-2.6.32.diff diff -ur -x '*.o' -x '*.ko' -x '*.o.*' -x '*.cmd' -x '*.mod.*' -x '*.order' -x '*.symvers' -x .tmp_versions ppscsi-beta2.orig/ppscsi.c ppscsi-beta2/ppscsi.c
--- ppscsi-beta2.orig/ppscsi.c 2009-12-23 02:11:19.744697273 +1000
+++ ppscsi-beta2/ppscsi.c 2009-12-23 02:18:09.887152657 +1000
@@ -422,16 +422,19 @@
bf &= (!((1<<pha->cur_cmd->device->id) & pha->slow_targets));
- r = pha->cur_cmd->use_sg;
+ //r = pha->cur_cmd->use_sg;
+ r = pha->cur_cmd->sdb.table.nents;
if (r) {
b = 0;
- p = (struct scatterlist *)pha->cur_cmd->request_buffer;
+ //p = (struct scatterlist *)pha->cur_cmd->request_buffer;
+ p = (struct scatterlist *)pha->cur_cmd->sdb.table.sgl;
for (k=0;k<r;k++) {
b += p->length;
p++;
}
} else {
- b = pha->cur_cmd->request_bufflen;
+ //b = pha->cur_cmd->request_bufflen;
+ b = pha->cur_cmd->sdb.length;
}
bf &= (b > 127);
@@ -565,16 +568,20 @@
pha->data_dir = phase & PPSC_IO;
pha->data_count = 0;
- pha->sg_count = pha->cur_cmd->use_sg;
+ //pha->sg_count = pha->cur_cmd->use_sg;
+ pha->sg_count = pha->cur_cmd->sdb.table.nents;
if (pha->sg_count) {
pha->sg_count--;
pha->sg_list =
- (struct scatterlist *)pha->cur_cmd->request_buffer;
+ //(struct scatterlist *)pha->cur_cmd->request_buffer;
+ (struct scatterlist *)pha->cur_cmd->sdb.table.sgl;
pha->cur_buf = sg_virt(pha->sg_list); /* page_address(pha->sg_list->page) + pha->sg_list->offset; */
pha->cur_len = pha->sg_list->length;
} else {
- pha->cur_buf = pha->cur_cmd->request_buffer;
- pha->cur_len = pha->cur_cmd->request_bufflen;
+ //pha->cur_buf = pha->cur_cmd->request_buffer;
+ //pha->cur_len = pha->cur_cmd->request_bufflen;
+ pha->cur_buf = pha->cur_cmd->sdb.table.sgl;
+ pha->cur_len = pha->cur_cmd->sdb.length;
}
pha->last_phase = phase;
@@ -620,7 +627,8 @@
if (pha->cur_cmd->cmnd[0] == REQUEST_SENSE) {
- sb = (char *)pha->cur_cmd->request_buffer;
+ //sb = (char *)pha->cur_cmd->request_buffer;
+ sb = (char *)pha->cur_cmd->sdb.table.sgl;
printk("%s: Sense key: %x ASC: %x ASCQ: %x\n",
pha->device, sb[2] & 0xff,
sb[12] & 0xff, sb[13] & 0xff);
@@ -815,9 +823,12 @@
cmd->cmnd[4] = sizeof(cmd->sense_buffer);
cmd->cmnd[5] = 0;
cmd->cmd_len = 6;
- cmd->use_sg = 0;
- cmd->request_buffer = (char *) cmd->sense_buffer;
- cmd->request_bufflen = sizeof(cmd->sense_buffer);
+ //cmd->use_sg = 0;
+ //cmd->request_buffer = (char *) cmd->sense_buffer;
+ //cmd->request_bufflen = sizeof(cmd->sense_buffer);
+ cmd->sdb.table.nents = 0;
+ cmd->sdb.table.sgl = (char *) cmd->sense_buffer;
+ cmd->sdb.length = sizeof(cmd->sense_buffer);
pha->cur_cmd = cmd;
ppsc_do_claimed(pha,ppsc_start);
@@ -1014,9 +1025,12 @@
cmd.device = &dev;
cmd.cmd_len = 6;
for (i=0;i<6;i++) cmd.cmnd[i] = inq[i];
- cmd.use_sg = 0;
- cmd.request_buffer = buf;
- cmd.request_bufflen = 36;
+ //cmd.use_sg = 0;
+ //cmd.request_buffer = buf;
+ //cmd.request_bufflen = 36;
+ cmd.sdb.table.nents = 0;
+ cmd.sdb.table.sgl = buf;
+ cmd.sdb.length = 36;
return ppsc_command(&cmd);
Сделано по этому: http://forums.gentoo.org/viewtopic-p-51 … 09#5142421 Если заработает, с вас почтой бутылочку хорошего коньячка ;-)
systemd должен умереть.
|
| h4tr3d |
|
|
Темы:
34
Сообщения:
2656
Участник с: 12 июля 2007
|
Второй вариант патча, на основе изменения в ядре mandriva 2010, тут вс чисто собралось, лучше с него тестить начинать: ppscsi-beta2-for-2.6.32-mdv.diff diff -ur -w -B -x '*.o' -x '*.ko' -x '*.o.*' -x '*.cmd' -x '*.mod.*' -x '*.order' -x '*.symvers' -x .tmp_versions ppscsi-beta2.orig/epsa2.c ppscsi-beta2.new-mdv/epsa2.c
--- ppscsi-beta2.orig/epsa2.c 2005-10-17 01:48:48.000000000 +1100
+++ ppscsi-beta2.new-mdv/epsa2.c 2009-12-22 01:35:18.000000000 +1000
@@ -345,7 +345,6 @@
WR(2,0x40); WR(2,0x40); WR(2,0x40);
return 0;
-
}
static int epsa2_test_select (PHA *pha)
diff -ur -w -B -x '*.o' -x '*.ko' -x '*.o.*' -x '*.cmd' -x '*.mod.*' -x '*.order' -x '*.symvers' -x .tmp_versions ppscsi-beta2.orig/onscsi.c ppscsi-beta2.new-mdv/onscsi.c
--- ppscsi-beta2.orig/onscsi.c 2005-10-17 01:49:21.000000000 +1100
+++ ppscsi-beta2.new-mdv/onscsi.c 2009-12-22 01:35:18.000000000 +1000
@@ -222,7 +222,6 @@
if (V_PROBE)
printk("%s: OnSpec 90c26 version %x\n",pha->device,k);
-
}
CPP(0x30,pha->saved_r2);
diff -ur -w -B -x '*.o' -x '*.ko' -x '*.o.*' -x '*.cmd' -x '*.mod.*' -x '*.order' -x '*.symvers' -x .tmp_versions ppscsi-beta2.orig/ppscsi.c ppscsi-beta2.new-mdv/ppscsi.c
--- ppscsi-beta2.orig/ppscsi.c 2009-12-23 02:11:19.744697273 +1000
+++ ppscsi-beta2.new-mdv/ppscsi.c 2009-12-22 01:35:18.000000000 +1000
@@ -57,6 +57,8 @@
#include <linux/string.h>
#include <linux/spinlock.h>
#include <linux/ioport.h>
+#include <linux/workqueue.h>
+#include <linux/scatterlist.h>
#include <linux/parport.h>
@@ -188,11 +190,11 @@
spin_unlock_irqrestore(&ppsc_spinlock,flags);
}
-static void ppsc_tq_int (void *data)
+static void ppsc_tq_int (struct work_struct *work)
{
void (*con)(PHA *);
unsigned long flags;
- PHA *pha = (PHA *)data;
+ PHA *pha = container_of(work, PHA, wq);
spin_lock_irqsave(&ppsc_spinlock,flags);
@@ -422,16 +424,16 @@
bf &= (!((1<<pha->cur_cmd->device->id) & pha->slow_targets));
- r = pha->cur_cmd->use_sg;
+ r = scsi_sg_count(pha->cur_cmd);
if (r) {
b = 0;
- p = (struct scatterlist *)pha->cur_cmd->request_buffer;
+ p = scsi_sglist(pha->cur_cmd);
for (k=0;k<r;k++) {
b += p->length;
p++;
}
} else {
- b = pha->cur_cmd->request_bufflen;
+ b = scsi_bufflen(pha->cur_cmd);
}
bf &= (b > 127);
@@ -483,7 +485,7 @@
if ((!pha->cur_len) && pha->sg_count) {
pha->sg_count--;
pha->sg_list++;
- pha->cur_buf = sg_virt(pha->sg_list); /* page_address(pha->sg_list->page) + pha->sg_list->offset; */
+ pha->cur_buf = sg_virt(pha->sg_list);
pha->cur_len = pha->sg_list->length;
}
}
@@ -565,16 +567,16 @@
pha->data_dir = phase & PPSC_IO;
pha->data_count = 0;
- pha->sg_count = pha->cur_cmd->use_sg;
+ pha->sg_count = scsi_sg_count(pha->cur_cmd);
if (pha->sg_count) {
pha->sg_count--;
- pha->sg_list =
- (struct scatterlist *)pha->cur_cmd->request_buffer;
- pha->cur_buf = sg_virt(pha->sg_list); /* page_address(pha->sg_list->page) + pha->sg_list->offset; */
+ pha->sg_list = scsi_sglist(pha->cur_cmd);
+ pha->cur_buf = sg_virt(pha->sg_list);
pha->cur_len = pha->sg_list->length;
} else {
- pha->cur_buf = pha->cur_cmd->request_buffer;
- pha->cur_len = pha->cur_cmd->request_bufflen;
+ pha->cur_buf =
+ (char *)pha->cur_cmd->sdb.table.sgl;
+ pha->cur_len = scsi_bufflen(pha->cur_cmd);
}
pha->last_phase = phase;
@@ -620,7 +622,7 @@
if (pha->cur_cmd->cmnd[0] == REQUEST_SENSE) {
- sb = (char *)pha->cur_cmd->request_buffer;
+ sb = (char *)pha->cur_cmd->sdb.table.sgl;
printk("%s: Sense key: %x ASC: %x ASCQ: %x\n",
pha->device, sb[2] & 0xff,
sb[12] & 0xff, sb[13] & 0xff);
@@ -664,7 +666,8 @@
{
int i, j;
- if (pha->timedout) PPSC_FAIL(DID_TIME_OUT,"PDMA timeout");
+ if (pha->timedout)
+ PPSC_FAIL(DID_TIME_OUT,"PDMA timeout");
while(1) {
@@ -685,7 +688,8 @@
i = pha->proto->transfer_block(pha,pha->cur_buf,
pha->cur_len,pha->data_dir);
- if (V_FULL) printk("%s: Fragment %d\n",pha->device,i);
+ if (V_FULL)
+ printk("%s: Fragment %d\n",pha->device,i);
if ((i < 0) || (i > pha->cur_len))
PPSC_FAIL(DID_ERROR,"Block transfer error");
@@ -815,9 +819,9 @@
cmd->cmnd[4] = sizeof(cmd->sense_buffer);
cmd->cmnd[5] = 0;
cmd->cmd_len = 6;
- cmd->use_sg = 0;
- cmd->request_buffer = (char *) cmd->sense_buffer;
- cmd->request_bufflen = sizeof(cmd->sense_buffer);
+ cmd->sdb.table.nents = 0;
+ cmd->sdb.table.sgl = (void *) cmd->sense_buffer;
+ cmd->sdb.length = sizeof(cmd->sense_buffer);
pha->cur_cmd = cmd;
ppsc_do_claimed(pha,ppsc_start);
@@ -1005,7 +1009,6 @@
static int ppsc_inquire (PHA *pha, int target, char *buf)
{
char inq[6] = {0x12,0,0,0,36,0};
- int i;
struct scsi_cmnd cmd;
struct scsi_device dev;
@@ -1013,13 +1016,12 @@
dev.id = target;
cmd.device = &dev;
cmd.cmd_len = 6;
- for (i=0;i<6;i++) cmd.cmnd[i] = inq[i];
- cmd.use_sg = 0;
- cmd.request_buffer = buf;
- cmd.request_bufflen = 36;
+ cmd.cmnd = inq;
+ cmd.sdb.table.nents = 0;
+ cmd.sdb.table.sgl = (void *) buf;
+ cmd.sdb.length = 36;
return ppsc_command(&cmd);
-
}
static void ppsc_test_mode (PHA *pha, int mode)
@@ -1047,7 +1049,8 @@
for (t=0;t<8;t++) {
s = ppsc_inquire(pha,t,ibuf);
if (s == DID_NO_CONNECT << 16) continue;
- if (s) { f++;
+ if (s) {
+ f++;
break;
}
if (V_FULL) {
diff -ur -w -B -x '*.o' -x '*.ko' -x '*.o.*' -x '*.cmd' -x '*.mod.*' -x '*.order' -x '*.symvers' -x .tmp_versions ppscsi-beta2.orig/ppscsi.h ppscsi-beta2.new-mdv/ppscsi.h
--- ppscsi-beta2.orig/ppscsi.h 2009-12-23 02:11:19.744697273 +1000
+++ ppscsi-beta2.new-mdv/ppscsi.h 2009-12-22 01:35:18.000000000 +1000
@@ -13,7 +13,6 @@
#define PPSC_H_VERSION "0.92"
#include <linux/module.h>
-#include <linux/autoconf.h>
#include <linux/version.h>
#include <linux/stddef.h>
#include <linux/types.h>
@@ -325,19 +324,11 @@
{"host3",8,host3} };
#endif
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)
-MODULE_PARM(host0,"1-8i");
-MODULE_PARM(host1,"1-8i");
-MODULE_PARM(host2,"1-8i");
-MODULE_PARM(host3,"1-8i");
-MODULE_PARM(verbose,"i");
-#else
module_param_array(host0, int, NULL, 0);
module_param_array(host1, int, NULL, 0);
module_param_array(host2, int, NULL, 0);
module_param_array(host3, int, NULL, 0);
module_param(verbose, int, 0);
-#endif
static struct ppsc_host_adapter host_structs[4];
Если заработает, соберу пакет в AUR, ну и для повышения ЧСВ у себя в блоге запись сделаю :-D хотя тут моего ничего нет, главное правильно посмотреть ;-)
systemd должен умереть.
|