File: i2os.h

package info (click to toggle)
kernel-image-2.4.17-hppa 32.4
  • links: PTS
  • area: main
  • in suites: woody
  • size: 156,356 kB
  • ctags: 442,585
  • sloc: ansic: 2,542,442; asm: 144,771; makefile: 8,468; sh: 3,097; perl: 2,578; yacc: 1,177; tcl: 577; lex: 352; awk: 251; lisp: 218; sed: 72
file content (146 lines) | stat: -rw-r--r-- 5,434 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*******************************************************************************
*
*   (c) 1999 by Computone Corporation
*
********************************************************************************
*
*
*   PACKAGE:     Linux tty Device Driver for IntelliPort II family of multiport
*                serial I/O controllers.
*
*   DESCRIPTION: Defines, definitions and includes which are heavily dependant
*                on O/S, host, compiler, etc. This file is tailored for:
*                 Linux v2.0.0 and later
*                 Gnu gcc c2.7.2
*                 80x86 architecture
*
*******************************************************************************/

#ifndef I2OS_H    /* To prevent multiple includes */
#define I2OS_H 1

#define VERSION(ver,rel,seq) (((ver)<<16) | ((rel)<<8) | (seq))

//-------------------------------------------------
// Required Includes
//-------------------------------------------------

#include "ip2types.h"
#include <asm/io.h>  /* For inb, etc */
#include <linux/version.h>

//------------------------------------
// Defines for I/O instructions:
//------------------------------------

#define INB(port)                inb(port)
#define OUTB(port,value)         outb((value),(port))
#define INW(port)                inw(port)
#define OUTW(port,value)         outw((value),(port))
#define OUTSW(port,addr,count)   outsw((port),(addr),(((count)+1)/2))
#define OUTSB(port,addr,count)   outsb((port),(addr),(((count)+1))&-2)
#define INSW(port,addr,count)    insw((port),(addr),(((count)+1)/2))
#define INSB(port,addr,count)    insb((port),(addr),(((count)+1))&-2)

//--------------------------------------------
// Interrupt control
//--------------------------------------------

#if LINUX_VERSION_CODE < 0x00020100
typedef int spinlock_t;
#define spin_lock_init() 
#define spin_lock(a)
#define spin_unlock(a)
#define spin_lock_irqsave(a,b)			{save_flags((b));cli();}
#define spin_unlock_irqrestore(a,b)		{restore_flags((b));}
#define write_lock_irqsave(a,b)			spin_lock_irqsave(a,b)
#define write_unlock_irqrestore(a,b)	spin_unlock_irqrestore(a,b)
#define read_lock_irqsave(a,b)			spin_lock_irqsave(a,b)
#define read_unlock_irqrestore(a,b)		spin_unlock_irqrestore(a,b)
#endif

//#define SAVE_AND_DISABLE_INTS(a,b)	spin_lock_irqsave(a,b)
//#define RESTORE_INTS(a,b)         	spin_unlock_irqrestore(a,b)

#define LOCK_INIT(a)	rwlock_init(a)

#define SAVE_AND_DISABLE_INTS(a,b) { \
	/* printk("get_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
	spin_lock_irqsave(a,b); \
}

#define RESTORE_INTS(a,b) { \
	/* printk("rel_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
	spin_unlock_irqrestore(a,b); \
}

#define READ_LOCK_IRQSAVE(a,b) { \
	/* printk("get_read_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
	read_lock_irqsave(a,b); \
}

#define READ_UNLOCK_IRQRESTORE(a,b) { \
	/* printk("rel_read_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
	read_unlock_irqrestore(a,b); \
}

#define WRITE_LOCK_IRQSAVE(a,b) { \
	/* printk("get_write_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
	write_lock_irqsave(a,b); \
}

#define WRITE_UNLOCK_IRQRESTORE(a,b) { \
	/* printk("rel_write_lock: 0x%x,%4d,%s\n",(int)a,__LINE__,__FILE__);*/ \
	write_unlock_irqrestore(a,b); \
}


//------------------------------------------------------------------------------
// Hardware-delay loop
//
// Probably used in only one place (see i2ellis.c) but this helps keep things
// together. Note we have unwound the IN instructions. On machines with a
// reasonable cache, the eight instructions (1 byte each) should fit in cache
// nicely, and on un-cached machines, the code-fetch would tend not to dominate.
// Note that cx is shifted so that "count" still reflects the total number of
// iterations assuming no unwinding.
//------------------------------------------------------------------------------

//#define  DELAY1MS(port,count,label)

//------------------------------------------------------------------------------
// Macros to switch to a new stack, saving stack pointers, and to restore the
// old stack (Used, for example, in i2lib.c) "heap" is the address of some
// buffer which will become the new stack (working down from highest address).
// The two words at the two lowest addresses in this stack are for storing the
// SS and SP.
//------------------------------------------------------------------------------

//#define  TO_NEW_STACK(heap,size)
//#define  TO_OLD_STACK(heap)

//------------------------------------------------------------------------------
// Macros to save the original IRQ vectors and masks, and to patch in new ones.
//------------------------------------------------------------------------------

//#define  SAVE_IRQ_MASKS(dest)
//#define  WRITE_IRQ_MASKS(src)
//#define  SAVE_IRQ_VECTOR(value,dest)
//#define  WRITE_IRQ_VECTOR(value,src)

//------------------------------------------------------------------------------
// Macro to copy data from one far pointer to another.
//------------------------------------------------------------------------------

#define  I2_MOVE_DATA(fpSource,fpDest,count) memmove(fpDest,fpSource,count);

//------------------------------------------------------------------------------
// Macros to issue eoi's to host interrupt control (IBM AT 8259-style).
//------------------------------------------------------------------------------

//#define MASTER_EOI
//#define SLAVE_EOI

#endif   /* I2OS_H */