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 должен умереть.
|