ringbuff.h
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:2k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)ringbuff.h 1.2 99/12/19 Copyright 1998,1999 Heiko Eissfeldt */
  2. /* This file contains data structures that reside in the shared memory
  3.  * segment.
  4.  */
  5. /* the linux semctl prototype is broken as is the definition
  6.    of union semun in sys/sem.h. */
  7. #ifdef HAVE_UNION_SEMUN
  8. # define my_semun semun
  9. #else
  10. union my_semun {
  11.   int val;
  12.   struct semid_ds *pid;
  13.   unsigned short *array;
  14. };
  15. #endif
  16. typedef struct {
  17.   int offset;
  18.   UINT4 data[CD_FRAMESAMPLES];
  19. } myringbuff;
  20. struct ringbuffheader {
  21.   myringbuff *p1;
  22.   myringbuff *p2;
  23.   volatile unsigned long total_read;
  24.   volatile unsigned long total_written;
  25.   volatile int child_waitstate;
  26.   volatile int parent_waitstate;
  27.   volatile int input_littleendian;
  28.   int offset;
  29.   UINT4 data[CD_FRAMESAMPLES];
  30. };
  31. extern myringbuff **fill_buffer;
  32. extern myringbuff **last_buffer;
  33. extern volatile unsigned long *total_segments_read;
  34. extern volatile unsigned long *total_segments_written;
  35. extern volatile int *child_waits;
  36. extern volatile int *parent_waits;
  37. extern volatile int *in_lendian;
  38. #define palign(x, a)    (((char *)(x)) + ((a) - 1 - (((unsigned)((x)-1))%(a))))
  39. #define multpage(x, a)    ((((x) + (a) - 1) / (a)) * (a))
  40. #define HEADER_SIZE multpage(offset_of(struct ringbuffheader, data), global.pagesize)
  41. #define SEGMENT_SIZE (global.nsectors*CD_FRAMESIZE_RAW)
  42. #define ENTRY_SIZE_PAGE_AL multpage(SEGMENT_SIZE + offset_of(myringbuff, data), global.pagesize)
  43. #define RB_BASE ((myringbuff *)(((unsigned char *)fill_buffer) + HEADER_SIZE - offset_of(myringbuff, data)))
  44. #define INC(a) (myringbuff *)(((char *)RB_BASE) + (((((char *) (a))-((char *)RB_BASE))/ENTRY_SIZE_PAGE_AL + 1) % total_buffers)*ENTRY_SIZE_PAGE_AL)
  45. void set_total_buffers __PR((unsigned int num_buffers, int mysem_id));
  46. const myringbuff *get_previous_read_buffer __PR((void));
  47. const myringbuff *get_fill_buffer __PR((void));
  48. myringbuff *get_next_buffer __PR((void));
  49. myringbuff *get_oldest_buffer __PR((void));
  50. void define_buffer __PR((void));
  51. void drop_buffer __PR((void));
  52. void drop_all_buffers __PR((void));