Merge commit 'gcl/gcl-next' into next
[linux-2.6] / drivers / ieee1394 / raw1394.h
1 #ifndef IEEE1394_RAW1394_H
2 #define IEEE1394_RAW1394_H
3
4 /* header for the raw1394 API that is exported to user-space */
5
6 #define RAW1394_KERNELAPI_VERSION 4
7
8 /* state: opened */
9 #define RAW1394_REQ_INITIALIZE    1
10
11 /* state: initialized */
12 #define RAW1394_REQ_LIST_CARDS    2
13 #define RAW1394_REQ_SET_CARD      3
14
15 /* state: connected */
16 #define RAW1394_REQ_ASYNC_READ      100
17 #define RAW1394_REQ_ASYNC_WRITE     101
18 #define RAW1394_REQ_LOCK            102
19 #define RAW1394_REQ_LOCK64          103
20 #define RAW1394_REQ_ISO_SEND        104 /* removed ABI, now a no-op */
21 #define RAW1394_REQ_ASYNC_SEND      105
22 #define RAW1394_REQ_ASYNC_STREAM    106
23
24 #define RAW1394_REQ_ISO_LISTEN      200 /* removed ABI, now a no-op */
25 #define RAW1394_REQ_FCP_LISTEN      201
26 #define RAW1394_REQ_RESET_BUS       202
27 #define RAW1394_REQ_GET_ROM         203
28 #define RAW1394_REQ_UPDATE_ROM      204
29 #define RAW1394_REQ_ECHO            205
30 #define RAW1394_REQ_MODIFY_ROM      206
31
32 #define RAW1394_REQ_ARM_REGISTER    300
33 #define RAW1394_REQ_ARM_UNREGISTER  301
34 #define RAW1394_REQ_ARM_SET_BUF     302
35 #define RAW1394_REQ_ARM_GET_BUF     303
36
37 #define RAW1394_REQ_RESET_NOTIFY    400
38
39 #define RAW1394_REQ_PHYPACKET       500
40
41 /* kernel to user */
42 #define RAW1394_REQ_BUS_RESET        10000
43 #define RAW1394_REQ_ISO_RECEIVE      10001
44 #define RAW1394_REQ_FCP_REQUEST      10002
45 #define RAW1394_REQ_ARM              10003
46 #define RAW1394_REQ_RAWISO_ACTIVITY  10004
47
48 /* error codes */
49 #define RAW1394_ERROR_NONE        0
50 #define RAW1394_ERROR_COMPAT      (-1001)
51 #define RAW1394_ERROR_STATE_ORDER (-1002)
52 #define RAW1394_ERROR_GENERATION  (-1003)
53 #define RAW1394_ERROR_INVALID_ARG (-1004)
54 #define RAW1394_ERROR_MEMFAULT    (-1005)
55 #define RAW1394_ERROR_ALREADY     (-1006)
56
57 #define RAW1394_ERROR_EXCESSIVE   (-1020)
58 #define RAW1394_ERROR_UNTIDY_LEN  (-1021)
59
60 #define RAW1394_ERROR_SEND_ERROR  (-1100)
61 #define RAW1394_ERROR_ABORTED     (-1101)
62 #define RAW1394_ERROR_TIMEOUT     (-1102)
63
64 /* arm_codes */
65 #define ARM_READ   1
66 #define ARM_WRITE  2
67 #define ARM_LOCK   4
68
69 #define RAW1394_LONG_RESET  0
70 #define RAW1394_SHORT_RESET 1
71
72 /* busresetnotify ... */
73 #define RAW1394_NOTIFY_OFF 0
74 #define RAW1394_NOTIFY_ON  1
75
76 #include <asm/types.h>
77
78 struct raw1394_request {
79         __u32 type;
80         __s32 error;
81         __u32 misc;
82
83         __u32 generation;
84         __u32 length;
85
86         __u64 address;
87
88         __u64 tag;
89
90         __u64 sendb;
91         __u64 recvb;
92 };
93
94 struct raw1394_khost_list {
95         __u32 nodes;
96         __u8 name[32];
97 };
98
99 typedef struct arm_request {
100         __u16           destination_nodeid;
101         __u16           source_nodeid;
102         __u64           destination_offset;
103         __u8            tlabel;
104         __u8            tcode;
105         __u8            extended_transaction_code;
106         __u32           generation;
107         __u16           buffer_length;
108         __u8            __user *buffer;
109 } *arm_request_t;
110
111 typedef struct arm_response {
112         __s32           response_code;
113         __u16           buffer_length;
114         __u8            __user *buffer;
115 } *arm_response_t;
116
117 typedef struct arm_request_response {
118         struct arm_request  __user *request;
119         struct arm_response __user *response;
120 } *arm_request_response_t;
121
122 /* rawiso API */
123 #include "ieee1394-ioctl.h"
124
125 /* per-packet metadata embedded in the ringbuffer */
126 /* must be identical to hpsb_iso_packet_info in iso.h! */
127 struct raw1394_iso_packet_info {
128         __u32 offset;
129         __u16 len;
130         __u16 cycle;   /* recv only */
131         __u8  channel; /* recv only */
132         __u8  tag;
133         __u8  sy;
134 };
135
136 /* argument for RAW1394_ISO_RECV/XMIT_PACKETS ioctls */
137 struct raw1394_iso_packets {
138         __u32 n_packets;
139         struct raw1394_iso_packet_info __user *infos;
140 };
141
142 struct raw1394_iso_config {
143         /* size of packet data buffer, in bytes (will be rounded up to PAGE_SIZE) */
144         __u32 data_buf_size;
145
146         /* # of packets to buffer */
147         __u32 buf_packets;
148
149         /* iso channel (set to -1 for multi-channel recv) */
150         __s32 channel;
151
152         /* xmit only - iso transmission speed */
153         __u8 speed;
154
155         /* The mode of the dma when receiving iso data. Must be supported by chip */
156         __u8 dma_mode;
157
158         /* max. latency of buffer, in packets (-1 if you don't care) */
159         __s32 irq_interval;
160 };
161
162 /* argument to RAW1394_ISO_XMIT/RECV_INIT and RAW1394_ISO_GET_STATUS */
163 struct raw1394_iso_status {
164         /* current settings */
165         struct raw1394_iso_config config;
166
167         /* number of packets waiting to be filled with data (ISO transmission)
168            or containing data received (ISO reception) */
169         __u32 n_packets;
170
171         /* approximate number of packets dropped due to overflow or
172            underflow of the packet buffer (a value of zero guarantees
173            that no packets have been dropped) */
174         __u32 overflows;
175
176         /* cycle number at which next packet will be transmitted;
177            -1 if not known */
178         __s16 xmit_cycle;
179 };
180
181 /* argument to RAW1394_IOC_GET_CYCLE_TIMER ioctl */
182 struct raw1394_cycle_timer {
183         /* contents of Isochronous Cycle Timer register,
184            as in OHCI 1.1 clause 5.13 (also with non-OHCI hosts) */
185         __u32 cycle_timer;
186
187         /* local time in microseconds since Epoch,
188            simultaneously read with cycle timer */
189         __u64 local_time;
190 };
191 #endif /* IEEE1394_RAW1394_H */