2 * File...........: linux/include/asm-s390x/idals.h
3 * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
4 * Bugreports.to..: <Linux390@de.ibm.com>
5 * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000a
10 #include <linux/config.h>
13 #define IDA_SIZE_LOG 11 /* 11 for 2k , 12 for 4k */
14 #define IDA_BLOCK_SIZE (1L<<IDA_SIZE_LOG)
16 static inline addr_t *
17 idal_alloc ( int nridaws )
21 return kmalloc(nridaws * sizeof(addr_t), GFP_ATOMIC | GFP_DMA );
25 idal_free ( addr_t *idal )
30 #if defined(CONFIG_ARCH_S390X)
31 extern unsigned long __create_idal(unsigned long address, int count);
35 * Function: set_normalized_cda
36 * sets the address of the data in CCW
37 * if necessary it allocates an IDAL and sets sthe appropriate flags
40 set_normalized_cda(ccw1_t * ccw, unsigned long address)
44 #if defined (CONFIG_ARCH_S390X)
45 if (((address + ccw->count) >> 31) != 0) {
46 if (ccw->flags & CCW_FLAG_IDA)
48 address = __create_idal(address, ccw->count);
50 ccw->flags |= CCW_FLAG_IDA;
55 ccw->cda = (__u32) address;
60 * Function: clear_normalized_cda
61 * releases any allocated IDAL related to the CCW
64 clear_normalized_cda ( ccw1_t * ccw )
66 #if defined(CONFIG_ARCH_S390X)
67 if ( ccw -> flags & CCW_FLAG_IDA ) {
68 idal_free ( (addr_t *)(unsigned long) (ccw -> cda ));
69 ccw -> flags &= ~CCW_FLAG_IDA;