Files
m241Neelima/vxworks-6.9/target/h/drv/xbd/bio.h
T
2026-07-30 11:19:44 +05:30

98 lines
3.2 KiB
C

/* bio.h - Block I/O Transaction Header File */
/*
* Copyright (c) 2004-2006, 2008-2013 Wind River Systems, Inc.
*
* The right to copy, distribute, modify or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
/*
modification history
--------------------
01l,08oct13,ghs Remove incorrect definition (WIND00437841)
01k,30nov12,w_x add code to support xbd sched policy
01j,15aug11,zly fix for WIND00201989:xbd priority inversion issue.
01i,29apr10,pad Moved extern C statement after include statements.
01h,24jul09,lyc Romove warning for LP64 support
01g,10jul09,lyc LP64 support
01f,10jul08,hui fixed WIND126983 - VX_TO_DISK_32 define error
01e,12apr06,dee SPR 119990, WIND00037359 - add cplusplus construct
01d,07mar05,rfr Added NULLSECTOR constant
01c,10feb05,rfr Added bio_alloc and bio_free.
01b,10feb05,rfr Changed block_t to sector_t
01a,03feb05,rfr Added global initialization function.
*/
#ifndef __INCbioh
#define __INCbioh
#include <drv/manager/device.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef long long sector_t; /* a block index */
#define NULLSECTOR -1L
#define BIO_READ 0x0001
#define BIO_WRITE 0x0002
#define BIO_CACHE_BYPASS 0x0004
#define BIO_CACHE_FLUSH 0x0008
/* endian swap */
#define DISK_TO_VX_32( pSrc ) (UINT32)( \
( *((u_char *)(pSrc)+3)<<24 ) | \
( *((u_char *)(pSrc)+2)<<16 ) | \
( *((u_char *)(pSrc)+1)<< 8 ) | \
( *(u_char *)(pSrc) ) )
#define VX_TO_DISK_16( src, pDst ) \
( * (u_char *)(pDst) = (src) & 0xff, \
*((u_char *)(pDst) + 1) = ((src)>> 8) & 0xff )
#define VX_TO_DISK_32( src, pDst ) \
( * (u_char *)(pDst) = (u_char)((src) & 0xff), \
*((u_char *)(pDst) + 1) = (u_char)(((src)>> 8) & 0xff), \
*((u_char *)(pDst) + 2) = (u_char)(((src)>> 16) & 0xff), \
*((u_char *)(pDst) + 3) = (u_char)(((src)>> 24) & 0xff) )
struct xbd;
struct bio;
#define BIO_IOSCHED_DIRECTIO (1 << 1)
#define BIO_IOSCHED_ALLOWED (1 << 2)
#define BIO_IOSCHED_QUEUABLE (1 << 3)
struct bio {
device_t bio_dev; /* The allocator of this bio */
sector_t bio_blkno; /* The Block Number of this bio */
unsigned bio_bcount; /* Total number of bytes in this segment */
void *bio_data; /* bio_bcount bytes of data */
unsigned bio_resid; /* Residual count for this segment */
unsigned bio_error; /* Error code for this segment */
unsigned bio_flags; /* Flags. At least BIO_READ and BIO_WRITE */
int bio_priority; /* priority of the task which inserted the bio */
void (*bio_done)(struct bio *); /* Completion function for this segment */
void *bio_caller1; /* Caller supplied data */
struct bio *bio_chain; /* The next segment or NULL */
void * bio_context; /* Xfer Context */
};
STATUS bioInit(void);
void bio_done(struct bio *, int);
void *bio_alloc(device_t, int);
void bio_free(void *);
#ifdef __cplusplus
}
#endif
#endif /* __INCbioh */