Modules/UDI - Adding PCI and MEI headers
[tpg/acess2.git] / KernelLand / Modules / Interfaces / UDI / include / physio / pio.h
1 /**
2  * \file physio/pio.h
3  */
4 #ifndef _PHYSIO_PIO_H_
5 #define _PHYSIO_PIO_H_
6
7 #include <udi.h>
8 #include <udi_physio.h>
9 typedef _udi_handle_t   udi_pio_handle_t;
10 /* Null handle value for udi_pio_handle_t */
11 #define UDI_NULL_PIO_HANDLE     _NULL_HANDLE
12
13 typedef void udi_pio_map_call_t(udi_cb_t *gcb, udi_pio_handle_t new_pio_handle);
14
15 typedef const struct {
16         udi_ubit8_t     pio_op;
17         udi_ubit8_t     tran_size;
18         udi_ubit16_t    operand;
19 } udi_pio_trans_t;
20
21 /**
22  * \brief Values for tran_size
23  */
24 enum {
25         UDI_PIO_1BYTE,
26         UDI_PIO_2BYTE,
27         UDI_PIO_4BYTE,
28         UDI_PIO_8BYTE,
29         UDI_PIO_16BYTE,
30         UDI_PIO_32BYTE,
31 };
32 /**
33  * \brief Register numbers in pio_op
34  */
35 enum {
36         UDI_PIO_R0,
37         UDI_PIO_R1,
38         UDI_PIO_R2,
39         UDI_PIO_R3,
40         UDI_PIO_R4,
41         UDI_PIO_R5,
42         UDI_PIO_R6,
43         UDI_PIO_R7,
44 };
45 // Addressing modes
46 #define UDI_PIO_DIRECT  0x00
47 #define UDI_PIO_SCRATCH 0x08
48 #define UDI_PIO_BUF     0x10
49 #define UDI_PIO_MEM     0x18
50 // Class A opcodes
51 #define UDI_PIO_IN      0x00
52 #define UDI_PIO_OUT     0x20
53 #define UDI_PIO_LOAD    0x40
54 #define UDI_PIO_STORE   0x60
55 // Class B opcodes
56 #define UDI_PIO_LOAD_IMM        0x80
57 #define UDI_PIO_CSKIP   0x88
58 #define UDI_PIO_IN_IND  0x90
59 #define UDI_PIO_OUT_IND 0x98
60 #define UDI_PIO_SHIFT_LEFT      0xA0
61 #define UDI_PIO_SHIFT_RIGHT     0xA8
62 #define UDI_PIO_AND     0xB0
63 #define UDI_PIO_AND_IMM 0xB8
64 #define UDI_PIO_OR      0xC0
65 #define UDI_PIO_OR_IMM  0xC8
66 #define UDI_PIO_XOR     0xD0
67 #define UDI_PIO_ADD     0xD8
68 #define UDI_PIO_ADD_IMM 0xE0
69 #define UDI_PIO_SUB     0xE8
70 // Class C opcodes
71 #define UDI_PIO_BRANCH  0xF0
72 #define UDI_PIO_LABEL   0xF1
73 #define UDI_PIO_REP_IN_IND      0xF2
74 #define UDI_PIO_REP_OUT_IND     0xF3
75 #define UDI_PIO_DELAY   0xF4
76 #define UDI_PIO_BARRIER 0xF5
77 #define UDI_PIO_SYNC    0xF6
78 #define UDI_PIO_SYNC_OUT        0xF7
79 #define UDI_PIO_DEBUG   0xF8
80 #define UDI_PIO_END     0xFE
81 #define UDI_PIO_END_IMM 0xFF
82 // Values for UDI_PIO_DEBUG's operand
83 #define UDI_PIO_TRACE_OPS_NONE  0
84 #define UDI_PIO_TRACE_OPS1      1
85 #define UDI_PIO_TRACE_OPS2      2
86 #define UDI_PIO_TRACE_OPS3      3
87 #define UDI_PIO_TRACE_REGS_NONE (0U<<2)
88 #define UDI_PIO_TRACE_REGS1     (1U<<2)
89 #define UDI_PIO_TRACE_REGS2     (2U<<2)
90 #define UDI_PIO_TRACE_REGS3     (3U<<2)
91 #define UDI_PIO_TRACE_DEV_NONE  (0U<<4)
92 #define UDI_PIO_TRACE_DEV1      (1U<<4)
93 #define UDI_PIO_TRACE_DEV2      (2U<<4)
94 #define UDI_PIO_TRACE_DEV3      (3U<<4)
95 // Values for conditional operations
96 #define UDI_PIO_Z       0       // reg == 0
97 #define UDI_PIO_NZ      1       // reg != 0
98 #define UDI_PIO_NEG     2       // reg < 0 (signed)
99 #define UDI_PIO_NNEG    3       // reg >= 0 (signed)
100
101 #define UDI_PIO_REP_ARGS(mode,mem_reg,mem_stride,pio_reg,pio_stride,cnt_reg) \
102         ((mode)|(mem_reg)|((mem_stride)<<5)|((pio_reg)<<7)|((pio_stride)<<10)|((cnt_reg)<<13))
103
104 //! \brief PIO Handle Layout Element Type Code
105 #define UDI_DL_PIO_HANDLE_T     200
106
107 /**
108  * \name PIO Handle Allocation and Initialisation
109  * \{
110  */
111
112 /**
113  * \name Values for pio_attributes of udi_pio_map
114  * \{
115  */
116 #define UDI_PIO_STRICTORDER     (1U<<0)
117 #define UDI_PIO_UNORDERED_OK    (1U<<1)
118 #define UDI_PIO_MERGING_OK      (1U<<2)
119 #define UDI_PIO_LOADCACHING_OK  (1U<<3)
120 #define UDI_PIO_STORECACHING_OK (1U<<4)
121 #define UDI_PIO_BIG_ENDIAN      (1U<<5)
122 #define UDI_PIO_LITTLE_ENDIAN   (1U<<6)
123 #define UDI_PIO_NEVERSWAP       (1U<<7)
124 #define UDI_PIO_UNALIGNED       (1U<<8)
125 /**
126  * \}
127  */
128
129 extern void udi_pio_map(udi_pio_map_call_t *callback, udi_cb_t *gcb,
130         udi_ubit32_t regset_idx, udi_ubit32_t base_offset, udi_ubit32_t length,
131         udi_pio_trans_t *trans_list, udi_ubit16_t list_length,
132         udi_ubit16_t pio_attributes, udi_ubit32_t pace, udi_index_t serialization_domain);
133
134 extern void udi_pio_unmap(udi_pio_handle_t pio_handle);
135
136 extern udi_ubit32_t udi_pio_atmic_sizes(udi_pio_handle_t pio_handle);
137
138 extern void udi_pio_abort_sequence(udi_pio_handle_t pio_handle, udi_size_t scratch_requirement);
139
140 /**
141  * \}
142  */
143
144 /**
145  * \name PIO Access Service Calls
146  * \{
147  */
148 typedef void udi_pio_trans_call_t(udi_cb_t *gcb, udi_buf_t *new_buf, udi_status_t status, udi_ubit16_t result);
149
150 extern void udi_pio_trans(udi_pio_trans_call_t *callback, udi_cb_t *gcb,
151         udi_pio_handle_t pio_handle, udi_index_t start_label,
152         udi_buf_t *buf, void *mem_ptr);
153
154 typedef void udi_pio_probe_call_t(udi_cb_t *gcb, udi_status_t status);
155
156 extern void udi_pio_probe(udi_pio_probe_call_t *callback, udi_cb_t *gcb,
157         udi_pio_handle_t pio_handle, void *mem_ptr, udi_ubit32_t pio_offset,
158         udi_ubit8_t tran_size, udi_ubit8_t direction);
159
160 /**
161  * \}
162  */
163
164 #endif

UCC git Repository :: git.ucc.asn.au