OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [message/] [i2o/] [README.ioctl] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
 
2
Linux I2O User Space Interface
3
rev 0.3 - 04/20/99
4
 
5
=============================================================================
6
Originally written by Deepak Saxena(deepak@plexity.net)
7
Currently maintained by Deepak Saxena(deepak@plexity.net)
8
=============================================================================
9
 
10
I. Introduction
11
 
12
The Linux I2O subsystem provides a set of ioctl() commands that can be
13
utilized by user space applications to communicate with IOPs and devices
14
on individual IOPs. This document defines the specific ioctl() commands
15
that are available to the user and provides examples of their uses.
16
 
17
This document assumes the reader is familiar with or has access to the
18
I2O specification as no I2O message parameters are outlined.  For information
19
on the specification, see http://www.i2osig.org
20
 
21
This document and the I2O user space interface are currently maintained
22
by Deepak Saxena.  Please send all comments, errata, and bug fixes to
23
deepak@csociety.purdue.edu
24
 
25
II. IOP Access
26
 
27
Access to the I2O subsystem is provided through the device file named
28
/dev/i2o/ctl.  This file is a character file with major number 10 and minor
29
number 166.  It can be created through the following command:
30
 
31
   mknod /dev/i2o/ctl c 10 166
32
 
33
III. Determining the IOP Count
34
 
35
   SYNOPSIS
36
 
37
   ioctl(fd, I2OGETIOPS,  int *count);
38
 
39
   u8 count[MAX_I2O_CONTROLLERS];
40
 
41
   DESCRIPTION
42
 
43
   This function returns the system's active IOP table.  count should
44
   point to a buffer containing MAX_I2O_CONTROLLERS entries.  Upon
45
   returning, each entry will contain a non-zero value if the given
46
   IOP unit is active, and NULL if it is inactive or non-existent.
47
 
48
   RETURN VALUE.
49
 
50
   Returns 0 if no errors occur, and -1 otherwise.  If an error occurs,
51
   errno is set appropriately:
52
 
53
     EFAULT   Invalid user space pointer was passed
54
 
55
IV. Getting Hardware Resource Table
56
 
57
   SYNOPSIS
58
 
59
   ioctl(fd, I2OHRTGET, struct i2o_cmd_hrt *hrt);
60
 
61
      struct i2o_cmd_hrtlct
62
      {
63
         u32   iop;      /* IOP unit number */
64
         void  *resbuf;  /* Buffer for result */
65
         u32   *reslen;  /* Buffer length in bytes */
66
      };
67
 
68
   DESCRIPTION
69
 
70
   This function returns the Hardware Resource Table of the IOP specified
71
   by hrt->iop in the buffer pointed to by hrt->resbuf. The actual size of
72
   the data is written into *(hrt->reslen).
73
 
74
   RETURNS
75
 
76
   This function returns 0 if no errors occur. If an error occurs, -1
77
   is returned and errno is set appropriately:
78
 
79
      EFAULT      Invalid user space pointer was passed
80
      ENXIO       Invalid IOP number
81
      ENOBUFS     Buffer not large enough.  If this occurs, the required
82
                  buffer length is written into *(hrt->reslen)
83
 
84
V. Getting Logical Configuration Table
85
 
86
   SYNOPSIS
87
 
88
   ioctl(fd, I2OLCTGET, struct i2o_cmd_lct *lct);
89
 
90
      struct i2o_cmd_hrtlct
91
      {
92
         u32   iop;      /* IOP unit number */
93
         void  *resbuf;  /* Buffer for result */
94
         u32   *reslen;  /* Buffer length in bytes */
95
      };
96
 
97
   DESCRIPTION
98
 
99
   This function returns the Logical Configuration Table of the IOP specified
100
   by lct->iop in the buffer pointed to by lct->resbuf. The actual size of
101
   the data is written into *(lct->reslen).
102
 
103
   RETURNS
104
 
105
   This function returns 0 if no errors occur. If an error occurs, -1
106
   is returned and errno is set appropriately:
107
 
108
      EFAULT      Invalid user space pointer was passed
109
      ENXIO       Invalid IOP number
110
      ENOBUFS     Buffer not large enough.  If this occurs, the required
111
                  buffer length is written into *(lct->reslen)
112
 
113
VI. Settting Parameters
114
 
115
   SYNOPSIS
116
 
117
   ioctl(fd, I2OPARMSET, struct i2o_parm_setget *ops);
118
 
119
      struct i2o_cmd_psetget
120
      {
121
         u32   iop;      /* IOP unit number */
122
         u32   tid;      /* Target device TID */
123
         void  *opbuf;   /* Operation List buffer */
124
         u32   oplen;    /* Operation List buffer length in bytes */
125
         void  *resbuf;  /* Result List buffer */
126
         u32   *reslen;  /* Result List buffer length in bytes */
127
      };
128
 
129
   DESCRIPTION
130
 
131
   This function posts a UtilParamsSet message to the device identified
132
   by ops->iop and ops->tid.  The operation list for the message is
133
   sent through the ops->opbuf buffer, and the result list is written
134
   into the buffer pointed to by ops->resbuf.  The number of bytes
135
   written is placed into *(ops->reslen).
136
 
137
   RETURNS
138
 
139
   The return value is the size in bytes of the data written into
140
   ops->resbuf if no errors occur.  If an error occurs, -1 is returned
141
   and errno is set appropriatly:
142
 
143
      EFAULT      Invalid user space pointer was passed
144
      ENXIO       Invalid IOP number
145
      ENOBUFS     Buffer not large enough.  If this occurs, the required
146
                  buffer length is written into *(ops->reslen)
147
      ETIMEDOUT   Timeout waiting for reply message
148
      ENOMEM      Kernel memory allocation error
149
 
150
   A return value of 0 does not mean that the value was actually
151
   changed properly on the IOP.  The user should check the result
152
   list to determine the specific status of the transaction.
153
 
154
VII. Getting Parameters
155
 
156
   SYNOPSIS
157
 
158
   ioctl(fd, I2OPARMGET, struct i2o_parm_setget *ops);
159
 
160
      struct i2o_parm_setget
161
      {
162
         u32   iop;      /* IOP unit number */
163
         u32   tid;      /* Target device TID */
164
         void  *opbuf;   /* Operation List buffer */
165
         u32   oplen;    /* Operation List buffer length in bytes */
166
         void  *resbuf;  /* Result List buffer */
167
         u32   *reslen;  /* Result List buffer length in bytes */
168
      };
169
 
170
   DESCRIPTION
171
 
172
   This function posts a UtilParamsGet message to the device identified
173
   by ops->iop and ops->tid.  The operation list for the message is
174
   sent through the ops->opbuf buffer, and the result list is written
175
   into the buffer pointed to by ops->resbuf.  The actual size of data
176
   written is placed into *(ops->reslen).
177
 
178
   RETURNS
179
 
180
      EFAULT      Invalid user space pointer was passed
181
      ENXIO       Invalid IOP number
182
      ENOBUFS     Buffer not large enough.  If this occurs, the required
183
                  buffer length is written into *(ops->reslen)
184
      ETIMEDOUT   Timeout waiting for reply message
185
      ENOMEM      Kernel memory allocation error
186
 
187
   A return value of 0 does not mean that the value was actually
188
   properly retreived.  The user should check the result list
189
   to determine the specific status of the transaction.
190
 
191
VIII. Downloading Software
192
 
193
   SYNOPSIS
194
 
195
   ioctl(fd, I2OSWDL, struct i2o_sw_xfer *sw);
196
 
197
      struct i2o_sw_xfer
198
      {
199
         u32   iop;       /* IOP unit number */
200
         u8    flags;     /* DownloadFlags field */
201
         u8    sw_type;   /* Software type */
202
         u32   sw_id;     /* Software ID */
203
         void  *buf;      /* Pointer to software buffer */
204
         u32   *swlen;    /* Length of software buffer */
205
         u32   *maxfrag;  /* Number of fragments */
206
         u32   *curfrag;  /* Current fragment number */
207
      };
208
 
209
   DESCRIPTION
210
 
211
   This function downloads a software fragment pointed by sw->buf
212
   to the iop identified by sw->iop. The DownloadFlags, SwID, SwType
213
   and SwSize fields of the ExecSwDownload message are filled in with
214
   the values of sw->flags, sw->sw_id, sw->sw_type and *(sw->swlen).
215
 
216
   The fragments _must_ be sent in order and be 8K in size. The last
217
   fragment _may_ be shorter, however. The kernel will compute its
218
   size based on information in the sw->swlen field.
219
 
220
   Please note that SW transfers can take a long time.
221
 
222
   RETURNS
223
 
224
   This function returns 0 no errors occur. If an error occurs, -1
225
   is returned and errno is set appropriatly:
226
 
227
      EFAULT      Invalid user space pointer was passed
228
      ENXIO       Invalid IOP number
229
      ETIMEDOUT   Timeout waiting for reply message
230
      ENOMEM      Kernel memory allocation error
231
 
232
IX. Uploading Software
233
 
234
   SYNOPSIS
235
 
236
   ioctl(fd, I2OSWUL, struct i2o_sw_xfer *sw);
237
 
238
      struct i2o_sw_xfer
239
      {
240
         u32   iop;      /* IOP unit number */
241
         u8    flags;    /* UploadFlags */
242
         u8    sw_type;  /* Software type */
243
         u32   sw_id;    /* Software ID */
244
         void  *buf;     /* Pointer to software buffer */
245
         u32   *swlen;   /* Length of software buffer */
246
         u32   *maxfrag; /* Number of fragments */
247
         u32   *curfrag; /* Current fragment number */
248
      };
249
 
250
   DESCRIPTION
251
 
252
   This function uploads a software fragment from the IOP identified
253
   by sw->iop, sw->sw_type, sw->sw_id and optionally sw->swlen fields.
254
   The UploadFlags, SwID, SwType and SwSize fields of the ExecSwUpload
255
   message are filled in with the values of sw->flags, sw->sw_id,
256
   sw->sw_type and *(sw->swlen).
257
 
258
   The fragments _must_ be requested in order and be 8K in size. The
259
   user is responsible for allocating memory pointed by sw->buf. The
260
   last fragment _may_ be shorter.
261
 
262
   Please note that SW transfers can take a long time.
263
 
264
   RETURNS
265
 
266
   This function returns 0 if no errors occur.  If an error occurs, -1
267
   is returned and errno is set appropriatly:
268
 
269
      EFAULT      Invalid user space pointer was passed
270
      ENXIO       Invalid IOP number
271
      ETIMEDOUT   Timeout waiting for reply message
272
      ENOMEM      Kernel memory allocation error
273
 
274
X. Removing Software
275
 
276
   SYNOPSIS
277
 
278
   ioctl(fd, I2OSWDEL, struct i2o_sw_xfer *sw);
279
 
280
      struct i2o_sw_xfer
281
      {
282
         u32   iop;      /* IOP unit number */
283
         u8    flags;    /* RemoveFlags */
284
         u8    sw_type;  /* Software type */
285
         u32   sw_id;    /* Software ID */
286
         void  *buf;     /* Unused */
287
         u32   *swlen;   /* Length of the software data */
288
         u32   *maxfrag; /* Unused */
289
         u32   *curfrag; /* Unused */
290
      };
291
 
292
   DESCRIPTION
293
 
294
   This function removes software from the IOP identified by sw->iop.
295
   The RemoveFlags, SwID, SwType and SwSize fields of the ExecSwRemove message
296
   are filled in with the values of sw->flags, sw->sw_id, sw->sw_type and
297
   *(sw->swlen). Give zero in *(sw->len) if the value is unknown. IOP uses
298
   *(sw->swlen) value to verify correct identication of the module to remove.
299
   The actual size of the module is written into *(sw->swlen).
300
 
301
   RETURNS
302
 
303
   This function returns 0 if no errors occur.  If an error occurs, -1
304
   is returned and errno is set appropriatly:
305
 
306
      EFAULT      Invalid user space pointer was passed
307
      ENXIO       Invalid IOP number
308
      ETIMEDOUT   Timeout waiting for reply message
309
      ENOMEM      Kernel memory allocation error
310
 
311
X. Validating Configuration
312
 
313
   SYNOPSIS
314
 
315
   ioctl(fd, I2OVALIDATE, int *iop);
316
        u32 iop;
317
 
318
   DESCRIPTION
319
 
320
   This function posts an ExecConfigValidate message to the controller
321
   identified by iop. This message indicates that the current
322
   configuration is accepted. The iop changes the status of suspect drivers
323
   to valid and may delete old drivers from its store.
324
 
325
   RETURNS
326
 
327
   This function returns 0 if no erro occur.  If an error occurs, -1 is
328
   returned and errno is set appropriatly:
329
 
330
      ETIMEDOUT   Timeout waiting for reply message
331
      ENXIO       Invalid IOP number
332
 
333
XI. Configuration Dialog
334
 
335
   SYNOPSIS
336
 
337
   ioctl(fd, I2OHTML, struct i2o_html *htquery);
338
      struct i2o_html
339
      {
340
         u32   iop;      /* IOP unit number */
341
         u32   tid;      /* Target device ID */
342
         u32   page;     /* HTML page */
343
         void  *resbuf;  /* Buffer for reply HTML page */
344
         u32   *reslen;  /* Length in bytes of reply buffer */
345
         void  *qbuf;    /* Pointer to HTTP query string */
346
         u32   qlen;     /* Length in bytes of query string buffer */
347
      };
348
 
349
   DESCRIPTION
350
 
351
   This function posts an UtilConfigDialog message to the device identified
352
   by htquery->iop and htquery->tid.  The requested HTML page number is
353
   provided by the htquery->page field, and the resultant data is stored
354
   in the buffer pointed to by htquery->resbuf.  If there is an HTTP query
355
   string that is to be sent to the device, it should be sent in the buffer
356
   pointed to by htquery->qbuf.  If there is no query string, this field
357
   should be set to NULL. The actual size of the reply received is written
358
   into *(htquery->reslen).
359
 
360
   RETURNS
361
 
362
   This function returns 0 if no error occur. If an error occurs, -1
363
   is returned and errno is set appropriatly:
364
 
365
      EFAULT      Invalid user space pointer was passed
366
      ENXIO       Invalid IOP number
367
      ENOBUFS     Buffer not large enough.  If this occurs, the required
368
                  buffer length is written into *(ops->reslen)
369
      ETIMEDOUT   Timeout waiting for reply message
370
      ENOMEM      Kernel memory allocation error
371
 
372
XII. Events
373
 
374
    In the process of determining this.  Current idea is to have use
375
    the select() interface to allow user apps to periodically poll
376
    the /dev/i2o/ctl device for events.  When select() notifies the user
377
    that an event is available, the user would call read() to retrieve
378
    a list of all the events that are pending for the specific device.
379
 
380
=============================================================================
381
Revision History
382
=============================================================================
383
 
384
Rev 0.1 - 04/01/99
385
- Initial revision
386
 
387
Rev 0.2 - 04/06/99
388
- Changed return values to match UNIX ioctl() standard.  Only return values
389
  are 0 and -1.  All errors are reported through errno.
390
- Added summary of proposed possible event interfaces
391
 
392
Rev 0.3 - 04/20/99
393
- Changed all ioctls() to use pointers to user data instead of actual data
394
- Updated error values to match the code

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.