cbb054bbb49ca7e232455b683c28dd67dae6d40e
[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 PIO Handle Layout Element Type Code
34 #define UDI_DL_PIO_HANDLE_T     200
35
36 /**
37  * \name PIO Handle Allocation and Initialisation
38  * \{
39  */
40
41 /**
42  * \name Values for pio_attributes of udi_pio_map
43  * \{
44  */
45 #define UDI_PIO_STRICTORDER     (1U<<0)
46 #define UDI_PIO_UNORDERED_OK    (1U<<1)
47 #define UDI_PIO_MERGING_OK      (1U<<2)
48 #define UDI_PIO_LOADCACHING_OK  (1U<<3)
49 #define UDI_PIO_STORECACHING_OK (1U<<4)
50 #define UDI_PIO_BIG_ENDIAN      (1U<<5)
51 #define UDI_PIO_LITTLE_ENDIAN   (1U<<6)
52 #define UDI_PIO_NEVERSWAP       (1U<<7)
53 #define UDI_PIO_UNALIGNED       (1U<<8)
54 /**
55  * \}
56  */
57
58 extern void udi_pio_map(udi_pio_map_call_t *callback, udi_cb_t *gcb,
59         udi_ubit32_t regset_idx, udi_ubit32_t base_offset, udi_ubit32_t length,
60         udi_pio_trans_t *trans_list, udi_ubit16_t list_length,
61         udi_ubit16_t pio_attributes, udi_ubit32_t pace, udi_index_t serialization_domain);
62
63 extern void udi_pio_unmap(udi_pio_handle_t pio_handle);
64
65 extern udi_ubit32_t udi_pio_atmic_sizes(udi_pio_handle_t pio_handle);
66
67 extern void udi_pio_abort_sequence(udi_pio_handle_t pio_handle, udi_size_t scratch_requirement);
68
69 /**
70  * \}
71  */
72
73 /**
74  * \name PIO Access Service Calls
75  * \{
76  */
77 typedef void udi_pio_trans_call_t(udi_cb_t *gcb, udi_buf_t *new_buf, udi_status_t status, udi_ubit16_t result);
78
79 extern void udi_pio_trans(udi_pio_trans_call_t *callback, udi_cb_t *gcb,
80         udi_pio_handle_t pio_handle, udi_index_t start_label,
81         udi_buf_t *buf, void *mem_ptr);
82
83 typedef void udi_pio_probe_call_t(udi_cb_t *gcb, udi_status_t status);
84
85 /**
86  * \name Values for direction
87  * \{
88  */
89 #define UDI_PIO_IN      0x00
90 #define UDI_PIO_OUT     0x20
91 /**
92  * \}
93  */
94
95 extern void udi_pio_probe(udi_pio_probe_call_t *callback, udi_cb_t *gcb,
96         udi_pio_handle_t pio_handle, void *mem_ptr, udi_ubit32_t pio_offset,
97         udi_ubit8_t tran_size, udi_ubit8_t direction);
98
99 /**
100  * \}
101  */
102
103 #endif

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