ppscsi

Приветы всем!

есть такая штука как ppscsi, нужная для сканеров LPT http://penguin-breeder.org/kernel/download/
удалось ли кому собрать этот модуль ядра?
посмотри на www.vladimirov.org , выложил патч для 2.6.28.7.
а для 2.6.30 патч есть? =)

может, кто то в AUR добавит ppscsi ?
помогите с патчем для 2.6.31 :)
уже 2.6.32 грядет :)
systemd должен умереть.
и для 2.6.32 :)
Кто с Владивостока, приходите с пивом - забацаем, и ещё сообщество спасибо скажет, а так - ну лениво же право! %)
systemd должен умереть.
вообщем пришлось ставить оффтопик и сканать под ним :-\
вот тебе патч, у меня на 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 должен умереть.
Второй вариант патча, на основе изменения в ядре 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 должен умереть.
 
Зарегистрироваться или войдите чтобы оставить сообщение.