~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux-2.6.17/Documentation/i2o/ioctl

Version: ~ [ 2.6.16 ] ~ [ 2.6.17 ] ~
Architecture: ~ [ ia64 ] ~ [ i386 ] ~ [ arm ] ~ [ ppc ] ~ [ sparc64 ] ~

  1 
  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 retrieved.  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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.