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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-s390/] [ccwcache.h] - Rev 1774

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

/* 
 * File...........: linux/include/asm-s390/ccwcache.h
 * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
 * Bugreports.to..: <Linux390@de.ibm.com>
 * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000
 *
 * $Revision: 1.1.1.1 $
 *
 */
#ifndef CCWCACHE_H
#define CCWCACHE_H
#include <linux/slab.h>
#include <asm/irq.h>
 
#ifndef __KERNEL__
#define kmem_cache_t void
#endif /* __KERNEL__ */
 
typedef struct ccw_req_t {
	/* eye catcher plus queueing information  */
	unsigned int magic;	
	struct ccw_req_t *next;	/* pointer to next ccw_req_t in queue */
	struct ccw_req_t *int_next;	/* for internal queueing */
	struct ccw_req_t *int_prev;	/* for internal queueing */
 
	/* Where to execute what... */
	void *device;		/* index of the device the req is for */
	void *req;		/* pointer to originating request */
	ccw1_t *cpaddr;		/* address of channel program */
	char status;	        /* reflecting the status of this request */
	char flags;              /* see below */
	short retries;		/* A retry counter to be set when filling */
 
	/* ... and how */
	int options;		/* options for execution */
	char lpm;               /* logical path mask                      */
	void *data;		/* pointer to data area */
	devstat_t *dstat;	/* The device status in case of an error */
 
	/* these are important for recovering erroneous requests          */
	struct ccw_req_t *refers;	/* Does this request refer to another one? */
	void *function; /* refers to the originating ERP action */ ;
 
	unsigned long long expires;	/* expiration period */
	/* these are for profiling purposes */
	unsigned long long buildclk;	/* TOD-clock of request generation */
	unsigned long long startclk;	/* TOD-clock of request start */
	unsigned long long stopclk;	/* TOD-clock of request interrupt */
	unsigned long long endclk;	/* TOD-clock of request termination */
 
	/* these are for internal use */
	int cplength;		/* length of the channel program in CCWs */
	int datasize;		/* amount of additional data in bytes */
	void *lowmem_idal;      /* lowmem page for idals (if in use) */
	void *lowmem_idal_ptr;  /* ptr to the actual idal word in the idals page */
	kmem_cache_t *cache;	/* the cache this data comes from */
 
} __attribute__ ((aligned(4))) ccw_req_t;
 
/* 
 * ccw_req_t -> status can be:
 */
#define CQR_STATUS_EMPTY    0x00	/* cqr is empty */
#define CQR_STATUS_FILLED   0x01	/* cqr is ready to be preocessed */
#define CQR_STATUS_QUEUED   0x02	/* cqr is queued to be processed */
#define CQR_STATUS_IN_IO    0x03	/* cqr is currently in IO */
#define CQR_STATUS_DONE     0x04	/* cqr is completed successfully */
#define CQR_STATUS_ERROR    0x05	/* cqr is completed with error */
#define CQR_STATUS_FAILED   0x06	/* cqr is finally failed */
 
#define CQR_FLAGS_CHAINED   0x01	/* cqr is chained by another (last CCW is TIC) */
#define CQR_FLAGS_FINALIZED 0x02	
#define CQR_FLAGS_LM_CQR    0x04	/* cqr uses page from lowmem_pool */
#define CQR_FLAGS_LM_IDAL   0x08	/* IDALs uses page from lowmem_pool */
 
#ifdef __KERNEL__
#define SMALLEST_SLAB (sizeof(struct ccw_req_t) <= 128 ? 128 :\
 sizeof(struct ccw_req_t) <= 256 ? 256 : 512 )
 
/* SMALLEST_SLAB(1),... PAGE_SIZE(CCW_NUMBER_CACHES) */
#define CCW_NUMBER_CACHES (sizeof(struct ccw_req_t) <= 128 ? 6 :\
 sizeof(struct ccw_req_t) <= 256 ? 5 : 4 )
 
int ccwcache_init (void);
 
ccw_req_t *ccw_alloc_request (char *magic, int cplength, int additional_data);
void ccw_free_request (ccw_req_t * request);
#endif /* __KERNEL__ */
#endif				/* CCWCACHE_H */
 
 
 
 

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

powered by: WebSVN 2.1.0

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