[parisc-linux] Re: YA pb with PCI IDE (my merge 2.4.21-pre1)

jsoe0708@tiscali.be jsoe0708@tiscali.be
Mon, 16 Dec 2002 19:24:28 +0100


>On Mon, Dec 16, 2002 at 07:13:53PM +0100, jsoe0708@tiscali.be wrote:
>> >
>> >why are you sending word documents?  i'm not reading that shit.
>> >
>> Sorry for confusion, it just contents ascii text. Trust me there is no=

>relation
>> with world, just an extension (a professional habit to make internal
exchange
>> more confortable for the one not familiar with unix).
>
>something's very screwed up then, probably your mail server:
>
>[-- Attachment #2: add_function.diff.doc --]
>[-- Type: application/msword, Encoding: base64, Size: 7.8K --]
>
>[-- application/msword is unsupported (use 'v' to view this part) --]
>
>is what i see.
>
That should be the webmail interface (I do not like it but have no choise=

behind a fw not allowing pop.mail connection)

>> Tell me what is your prefered extension, I will take care to adopt it.=

>
>i prefer it inlined, not as an attachment.  it's easier to reply to.
>
That is ok for me:

diff -NaurwbBX /Develop/Kernel-Linux/dontdiff linux-2.4.21-pre1-pa14-alph=
a/include/asm-parisc/ide.h
linux-2.4.21-pre1-pa14-beta/include/asm-parisc/ide.h
--- linux-2.4.21-pre1-pa14-alpha/include/asm-parisc/ide.h	2002-12-13 14:0=
0:09.000000000
+0100
+++ linux-2.4.21-pre1-pa14-beta/include/asm-parisc/ide.h	2002-12-15 15:34=
:01.000000000
+0100
@@ -20,6 +20,8 @@
 #define MAX_HWIFS	2
 #endif
 
+#define ide__sti()      __sti()
+
 static __inline__ int ide_default_irq(ide_ioreg_t base)
 {
 	switch (base) {
@@ -78,13 +80,116 @@
 #endif /* CONFIG_BLK_DEV_IDEPCI */
 }
 
-/*
+typedef union {
+	unsigned all			: 8;	/* all of the bits together */
+	struct {
+		unsigned bit7		: 1;	/* always 1 */
+		unsigned lba		: 1;	/* using LBA instead of CHS */
+		unsigned bit5		: 1;	/* always 1 */
+		unsigned unit		: 1;	/* drive select number, 0 or 1 */
+		unsigned head		: 4;	/* always zeros here */
+	} b;
+} select_t;
+
+typedef union {
+	unsigned all			: 8;	/* all of the bits together */
+	struct {
+		unsigned bit0		: 1;
+		unsigned nIEN		: 1;	/* device INTRQ to host */
+		unsigned SRST		: 1;	/* host soft reset bit */
+		unsigned bit3		: 1;	/* ATA-2 thingy */
+		unsigned reserved456	: 3;
+		unsigned HOB		: 1;	/* 48-bit address ordering */
+	} b;
+} control_t;
+
 #define ide_request_irq(irq,hand,flg,dev,id)	request_irq((irq),(hand),(f=
lg),(dev),(id))
 #define ide_free_irq(irq,dev_id)		free_irq((irq), (dev_id))
 #define ide_check_region(from,extent)		check_region((from), (extent))
 #define ide_request_region(from,extent,name)	request_region((from), (ext=
ent),
(name))
 #define ide_release_region(from,extent)		release_region((from), (extent)=
)
+
+#define T_CHAR          (0x0000)        /* char:  don't touch  */
+#define T_SHORT         (0x4000)        /* short: 12 -> 21     */
+#define T_INT           (0x8000)        /* int:   1234 -> 4321 */
+#define T_TEXT          (0xc000)        /* text:  12 -> 21     */
+
+#define T_MASK_TYPE     (0xc000)
+#define T_MASK_COUNT    (0x3fff)
+
+#define D_CHAR(cnt)     (T_CHAR  | (cnt))
+#define D_SHORT(cnt)    (T_SHORT | (cnt))
+#define D_INT(cnt)      (T_INT   | (cnt))
+#define D_TEXT(cnt)     (T_TEXT  | (cnt))
+
+static u_short driveid_types[] =3D {
+	D_SHORT(10),	/* config - vendor2 */
+	D_TEXT(20),	/* serial_no */
+	D_SHORT(3),	/* buf_type - ecc_bytes */
+	D_TEXT(48),	/* fw_rev - model */
+	D_CHAR(2),	/* max_multsect - vendor3 */
+	D_SHORT(1),	/* dword_io */
+	D_CHAR(2),	/* vendor4 - capability */
+	D_SHORT(1),	/* reserved50 */
+	D_CHAR(4),	/* vendor5 - tDMA */
+	D_SHORT(4),	/* field_valid - cur_sectors */
+	D_INT(1),	/* cur_capacity */
+	D_CHAR(2),	/* multsect - multsect_valid */
+	D_INT(1),	/* lba_capacity */
+	D_SHORT(194)	/* dma_1word - reservedyy */
+};
+
+#define num_driveid_types       (sizeof(driveid_types)/sizeof(*driveid_t=
ypes))
+
+static __inline__ void ide_fix_driveid(struct hd_driveid *id)
+{
+	u_char *p =3D (u_char *)id;
+	int i, j, cnt;
+	u_char t;
+
+	for (i =3D 0; i < num_driveid_types; i++) {
+		cnt =3D driveid_types[i] & T_MASK_COUNT;
+		switch (driveid_types[i] & T_MASK_TYPE) {
+		case T_CHAR:
+			p +=3D cnt;
+			break;
+		case T_SHORT:
+			for (j =3D 0; j < cnt; j++) {
+				t =3D p[0];
+				p[0] =3D p[1];
+				p[1] =3D t;
+				p +=3D 2;
+			}
+			break;
+		case T_INT:
+			for (j =3D 0; j < cnt; j++) {
+				t =3D p[0];
+				p[0] =3D p[3];
+				p[3] =3D t;
+				t =3D p[1];
+				p[1] =3D p[2];
+				p[2] =3D t;
+				p +=3D 4;
+			}
+			break;
+		case T_TEXT:
+			for (j =3D 0; j < cnt; j +=3D 2) {
+				t =3D p[0];
+				p[0] =3D p[1];
+				p[1] =3D t;
+				p +=3D 2;
+			}
+			break;
+		};
+	}
+}
+
+/*
+ * The following are not needed for the non-m68k ports
  */
+#define ide_ack_intr(hwif)		(1)
+#define ide_release_lock(lock)		do {} while (0)
+#define ide_get_lock(lock, hdlr, data)	do {} while (0)
 
 #endif /* __KERNEL__ */
 
diff -NaurwbBX /Develop/Kernel-Linux/dontdiff linux-2.4.21-pre1-pa14-alph=
a/include/asm-parisc/system.h
linux-2.4.21-pre1-pa14-beta/include/asm-parisc/system.h
--- linux-2.4.21-pre1-pa14-alpha/include/asm-parisc/system.h	2002-12-13
13:58:36.000000000 +0100
+++ linux-2.4.21-pre1-pa14-beta/include/asm-parisc/system.h	2002-12-15 15=
:34:01.000000000
+0100
@@ -66,8 +66,6 @@
 #define sti() __global_sti()
 #define save_flags(x) ((x)=3D__global_save_flags())
 #define restore_flags(x) __global_restore_flags(x)
-#define save_and_cli(x) do { save_flags(x); cli(); } while(0);
-#define save_and_sti(x) do { save_flags(x); sti(); } while(0);
 
 #else
 
@@ -75,8 +73,6 @@
 #define sti() __sti()
 #define save_flags(x) __save_flags(x)
 #define restore_flags(x) __restore_flags(x)
-#define save_and_cli(x) __save_and_cli(x)
-#define save_and_sti(x) __save_and_sti(x)
 
 #endif
 
diff -NaurwbBX /Develop/Kernel-Linux/dontdiff linux-2.4.21-pre1-pa14-alph=
a/include/asm-parisc/system_irqsave.h
linux-2.4.21-pre1-pa14-beta/include/asm-parisc/system_irqsave.h
--- linux-2.4.21-pre1-pa14-alpha/include/asm-parisc/system_irqsave.h	2002=
-12-12
16:12:02.000000000 +0100
+++ linux-2.4.21-pre1-pa14-beta/include/asm-parisc/system_irqsave.h	2002-=
12-15
15:34:01.000000000 +0100
@@ -7,21 +7,10 @@
 #define __cli()	__asm__ __volatile__("rsm %0,%%r0\n" : : "i" (PSW_I) :
"memory" )
 #define __sti()	__asm__ __volatile__("ssm %0,%%r0\n" : : "i" (PSW_I) :
"memory" )
 
-#define __save_and_cli(x)  do { __save_flags(x); __cli(); } while(0);
-#define __save_and_sti(x)  do { __save_flags(x); __sti(); } while(0);
-
-/* For spinlocks etc */
-#if 0
 #define local_irq_save(x) \
 	__asm__ __volatile__("rsm %1,%0" : "=3Dr" (x) :"i" (PSW_I) : "memory" )=

-#define local_irq_set(x) \
-#       "Warning local_irq_set(x) is not yet defined"
-#else
-#define local_irq_save(x)  __save_and_cli(x)
-#define local_irq_set(x)   __save_and_sti(x)
-#endif
-
-#define local_irq_restore(x) __restore_flags(x)
+#define local_irq_restore(x) \
+	__asm__ __volatile__("mtsm %0" : : "r" (x) : "memory" )
 #define local_irq_disable() __cli()
 #define local_irq_enable()  __sti()
 

Hope this is still readable,
    Joel

*************************************************************************=
*******
Controlez mieux votre consommation Internet...surfez Tiscali Complete...h=
ttp://tiscali.complete.be