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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rtems-20020807/] [cpukit/] [libblock/] [include/] [rtems/] [blkdev.h] - Diff between revs 1026 and 1765

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 1026 Rev 1765
/*
/*
 * blkdev.h - block device driver interface definitions
 * blkdev.h - block device driver interface definitions
 *
 *
 * Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia
 * Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia
 * Author: Victor V. Vengerov <vvv@oktet.ru>
 * Author: Victor V. Vengerov <vvv@oktet.ru>
 *
 *
 * @(#) blkdev.h,v 1.1 2002/02/28 20:39:54 joel Exp
 * @(#) blkdev.h,v 1.1 2002/02/28 20:39:54 joel Exp
 */
 */
 
 
#ifndef __RTEMS_LIBBLOCK_BLKDEV_H__
#ifndef __RTEMS_LIBBLOCK_BLKDEV_H__
#define __RTEMS_LIBBLOCK_BLKDEV_H__
#define __RTEMS_LIBBLOCK_BLKDEV_H__
 
 
#include <rtems.h>
#include <rtems.h>
#include <sys/ioctl.h>
#include <sys/ioctl.h>
 
 
#ifdef __cplusplus
#ifdef __cplusplus
extern "C" {
extern "C" {
#endif
#endif
 
 
/* Interface with device drivers
/* Interface with device drivers
 * Block device looks, initialized and behaves like traditional RTEMS device
 * Block device looks, initialized and behaves like traditional RTEMS device
 * driver. Heart of the block device driver is in BIOREQUEST ioctl. This call
 * driver. Heart of the block device driver is in BIOREQUEST ioctl. This call
 * puts I/O request to the block device queue, in priority order, for
 * puts I/O request to the block device queue, in priority order, for
 * asynchronous processing. When driver executes request, req_done
 * asynchronous processing. When driver executes request, req_done
 * function invoked, so callee knows about it. Look for details below.
 * function invoked, so callee knows about it. Look for details below.
 */
 */
 
 
 
 
/* Block device block number datatype */
/* Block device block number datatype */
typedef rtems_unsigned32 blkdev_bnum;
typedef rtems_unsigned32 blkdev_bnum;
 
 
/* Block device request type */
/* Block device request type */
typedef enum blkdev_request_op {
typedef enum blkdev_request_op {
    BLKDEV_REQ_READ,  /* Read operation */
    BLKDEV_REQ_READ,  /* Read operation */
    BLKDEV_REQ_WRITE  /* Write operation */
    BLKDEV_REQ_WRITE  /* Write operation */
} blkdev_request_op;
} blkdev_request_op;
 
 
/* Type for block device request done callback function.
/* Type for block device request done callback function.
 *
 *
 * PARAMETERS:
 * PARAMETERS:
 *     arg    - argument supplied in blkdev_request
 *     arg    - argument supplied in blkdev_request
 *     status - rtems status code for this operation
 *     status - rtems status code for this operation
 *     errno  - errno value to be passed to the user when
 *     errno  - errno value to be passed to the user when
 *              status != RTEMS_SUCCESSFUL
 *              status != RTEMS_SUCCESSFUL
 */
 */
typedef void (* blkdev_request_cb)(void *arg,
typedef void (* blkdev_request_cb)(void *arg,
                                   rtems_status_code status,
                                   rtems_status_code status,
                                   int error);
                                   int error);
 
 
/* blkdev_sg_buffer
/* blkdev_sg_buffer
 * Block device scatter/gather buffer structure
 * Block device scatter/gather buffer structure
 */
 */
typedef struct blkdev_sg_buffer {
typedef struct blkdev_sg_buffer {
    rtems_unsigned32 length;  /* Buffer length */
    rtems_unsigned32 length;  /* Buffer length */
    void            *buffer;  /* Buffer pointer */
    void            *buffer;  /* Buffer pointer */
} blkdev_sg_buffer;
} blkdev_sg_buffer;
 
 
/* blkdev_request (Block Device Request) structure is
/* blkdev_request (Block Device Request) structure is
 * used to read/write a number of blocks from/to device.
 * used to read/write a number of blocks from/to device.
 */
 */
typedef struct blkdev_request {
typedef struct blkdev_request {
    blkdev_request_op req;      /* Block device operation (read or write) */
    blkdev_request_op req;      /* Block device operation (read or write) */
    blkdev_request_cb req_done; /* Callback function */
    blkdev_request_cb req_done; /* Callback function */
    void             *done_arg; /* Argument to be passed to callback function*/
    void             *done_arg; /* Argument to be passed to callback function*/
    blkdev_bnum       start;    /* Start block number */
    blkdev_bnum       start;    /* Start block number */
    rtems_unsigned32  count;    /* Number of blocks to be exchanged */
    rtems_unsigned32  count;    /* Number of blocks to be exchanged */
    rtems_unsigned32  bufnum;   /* Number of buffers provided */
    rtems_unsigned32  bufnum;   /* Number of buffers provided */
 
 
    blkdev_sg_buffer  bufs[0];/* List of scatter/gather buffers */
    blkdev_sg_buffer  bufs[0];/* List of scatter/gather buffers */
} blkdev_request;
} blkdev_request;
 
 
/* Block device IOCTL request codes */
/* Block device IOCTL request codes */
#define BLKIO_REQUEST      _IOWR('B', 1, blkdev_request)
#define BLKIO_REQUEST      _IOWR('B', 1, blkdev_request)
#define BLKIO_GETBLKSIZE   _IO('B', 2)
#define BLKIO_GETBLKSIZE   _IO('B', 2)
#define BLKIO_GETSIZE      _IO('B', 3)
#define BLKIO_GETSIZE      _IO('B', 3)
#define BLKIO_SYNCDEV      _IO('B', 4)
#define BLKIO_SYNCDEV      _IO('B', 4)
 
 
/* Device driver interface conventions suppose that driver may
/* Device driver interface conventions suppose that driver may
 * contain initialize/open/close/read/write/ioctl entry points. These
 * contain initialize/open/close/read/write/ioctl entry points. These
 * primitives (except initialize) can be implemented in generic fashion,
 * primitives (except initialize) can be implemented in generic fashion,
 * based upon supplied block device driver ioctl handler. Every block
 * based upon supplied block device driver ioctl handler. Every block
 * device driver should provide initialize entry point, which is register
 * device driver should provide initialize entry point, which is register
 * all block devices and appropriate ioctl handlers.
 * all block devices and appropriate ioctl handlers.
 */
 */
 
 
#define GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES \
#define GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES \
      rtems_blkdev_generic_open, rtems_blkdev_generic_close, \
      rtems_blkdev_generic_open, rtems_blkdev_generic_close, \
      rtems_blkdev_generic_read, rtems_blkdev_generic_write, \
      rtems_blkdev_generic_read, rtems_blkdev_generic_write, \
      rtems_blkdev_generic_ioctl
      rtems_blkdev_generic_ioctl
 
 
/* blkdev_generic_read --
/* blkdev_generic_read --
 *     Generic block device read primitive. Implemented using block device
 *     Generic block device read primitive. Implemented using block device
 *     buffer management primitives.
 *     buffer management primitives.
 */
 */
rtems_device_driver
rtems_device_driver
rtems_blkdev_generic_read(
rtems_blkdev_generic_read(
    rtems_device_major_number major,
    rtems_device_major_number major,
    rtems_device_minor_number minor,
    rtems_device_minor_number minor,
    void                    * arg
    void                    * arg
);
);
 
 
/* blkdev_generic_write --
/* blkdev_generic_write --
 *     Generic block device driver write primitive. Implemented using block
 *     Generic block device driver write primitive. Implemented using block
 *     device buffer management primitives.
 *     device buffer management primitives.
 */
 */
rtems_device_driver
rtems_device_driver
rtems_blkdev_generic_write(
rtems_blkdev_generic_write(
    rtems_device_major_number major,
    rtems_device_major_number major,
    rtems_device_minor_number minor,
    rtems_device_minor_number minor,
    void                    * arg
    void                    * arg
);
);
 
 
/* blkdev_generic_open --
/* blkdev_generic_open --
 *     Generic block device open primitive.
 *     Generic block device open primitive.
 */
 */
rtems_device_driver
rtems_device_driver
rtems_blkdev_generic_open(
rtems_blkdev_generic_open(
    rtems_device_major_number major,
    rtems_device_major_number major,
    rtems_device_minor_number minor,
    rtems_device_minor_number minor,
    void                    * arg
    void                    * arg
);
);
 
 
/* blkdev_generic_close --
/* blkdev_generic_close --
 *     Generic block device close primitive.
 *     Generic block device close primitive.
 */
 */
rtems_device_driver
rtems_device_driver
rtems_blkdev_generic_close(
rtems_blkdev_generic_close(
    rtems_device_major_number major,
    rtems_device_major_number major,
    rtems_device_minor_number minor,
    rtems_device_minor_number minor,
    void                    * arg
    void                    * arg
);
);
 
 
/* blkdev_generic_ioctl --
/* blkdev_generic_ioctl --
 *     Generic block device ioctl primitive.
 *     Generic block device ioctl primitive.
 */
 */
rtems_device_driver
rtems_device_driver
rtems_blkdev_generic_ioctl(
rtems_blkdev_generic_ioctl(
    rtems_device_major_number major,
    rtems_device_major_number major,
    rtems_device_minor_number minor,
    rtems_device_minor_number minor,
    void                    * arg
    void                    * arg
);
);
 
 
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
 
 
#endif
#endif
 
 

powered by: WebSVN 2.1.0

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