patch-2.4.8 linux/include/asm-s390x/idals.h
Next file: linux/include/asm-s390x/init.h
Previous file: linux/include/asm-s390x/hardirq.h
Back to the patch index
Back to the overall index
- Lines: 76
- Date:
Wed Jul 25 14:12:02 2001
- Orig file:
v2.4.7/linux/include/asm-s390x/idals.h
- Orig date:
Tue Feb 13 14:13:44 2001
diff -u --recursive --new-file v2.4.7/linux/include/asm-s390x/idals.h linux/include/asm-s390x/idals.h
@@ -10,36 +10,51 @@
#include <linux/config.h>
#include <asm/irq.h>
-typedef unsigned long idaw_t;
+#define IDA_SIZE_LOG 12 /* 11 for 2k , 12 for 4k */
+#define IDA_BLOCK_SIZE (1L<<IDA_SIZE_LOG)
-static inline idaw_t *
+static inline addr_t *
idal_alloc ( int nridaws )
{
if ( nridaws > 33 )
BUG();
- return kmalloc(nridaws * sizeof(idaw_t), GFP_ATOMIC | GFP_DMA );
+ return kmalloc(nridaws * sizeof(addr_t), GFP_ATOMIC | GFP_DMA );
}
static inline void
-idal_free ( idaw_t *idal )
+idal_free ( addr_t *idal )
{
kfree (idal);
}
+#if defined(CONFIG_ARCH_S390X)
+extern unsigned long __create_idal(unsigned long address, int count);
+#endif
+
/*
* Function: set_normalized_cda
* sets the address of the data in CCW
* if necessary it allocates an IDAL and sets sthe appropriate flags
*/
-#if defined (CONFIG_ARCH_S390X)
-extern void set_normalized_cda(ccw1_t * ccw, unsigned long address);
-#else
-static inline void
+static inline int
set_normalized_cda(ccw1_t * ccw, unsigned long address)
{
- ccw->cda = address;
-}
+ int ret = 0;
+
+#if defined (CONFIG_ARCH_S390X)
+ if (((address + ccw->count) >> 31) != 0) {
+ if (ccw->flags & CCW_FLAG_IDA)
+ BUG();
+ address = __create_idal(address, ccw->count);
+ if (address)
+ ccw->flags |= CCW_FLAG_IDA;
+ else
+ ret = -ENOMEM;
+ }
#endif
+ ccw->cda = (__u32) address;
+ return ret;
+}
/*
* Function: clear_normalized_cda
@@ -48,10 +63,12 @@
static inline void
clear_normalized_cda ( ccw1_t * ccw )
{
+#if defined(CONFIG_ARCH_S390X)
if ( ccw -> flags & CCW_FLAG_IDA ) {
- idal_free ( (idaw_t *)(unsigned long) (ccw -> cda ));
+ idal_free ( (addr_t *)(unsigned long) (ccw -> cda ));
ccw -> flags &= ~CCW_FLAG_IDA;
}
+#endif
ccw -> cda = 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)