scullv.h
上传用户:wudi5211
上传日期:2010-01-21
资源大小:607k
文件大小:4k
源码类别:

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * scullv.h -- definitions for the vmalloc char module
  3.  *
  4.  *********/
  5. #include <linux/ioctl.h>
  6. /* version dependencies have been confined to a separate file */
  7. #define VERSION_CODE(vers,rel,seq) ( ((vers)<<16) | ((rel)<<8) | (seq) )
  8. #include "sysdep.h"
  9. /*
  10.  * Macros to help debugging
  11.  */
  12. #undef PDEBUG             /* undef it, just in case */
  13. #ifdef SCULLV_DEBUG
  14. #  ifdef __KERNEL__
  15.      /* This one if debugging is on, and kernel space */
  16. #    define PDEBUG(fmt, args...) printk( KERN_DEBUG "scullv: " fmt, ## args)
  17. #  else
  18.      /* This one for user space */
  19. #    define PDEBUG(fmt, args...) fprintf(stderr, fmt, ## args)
  20. #  endif
  21. #else
  22. #  define PDEBUG(fmt, args...) /* not debugging: nothing */
  23. #endif
  24. #undef PDEBUGG
  25. #define PDEBUGG(fmt, args...) /* nothing: it's a placeholder */
  26. #define SCULLV_MAJOR 0   /* dynamic major by default */
  27. #define SCULLV_DEVS 4    /* scullv0 through scullv3 */
  28. /*
  29.  * The bare device is a variable-length region of memory.
  30.  * Use a linked list of indirect blocks.
  31.  *
  32.  * "ScullV_Dev->data" points to an array of pointers, each
  33.  * pointer refers to a memory page.
  34.  *
  35.  * The array (quantum-set) is SCULLV_QSET long.
  36.  */
  37. #define SCULLV_ORDER    4 /* 16 pages at a time */
  38. #define SCULLV_QSET     500
  39. typedef struct ScullV_Dev {
  40.    void **data;
  41.    struct ScullV_Dev *next;  /* next listitem */
  42.    int vmas;                 /* active mappings */
  43.    int order;                /* the current order */
  44.    int qset;                 /* the current array size */
  45.    size_t size;              /* 32-bit will suffice */
  46. } ScullV_Dev;
  47. extern struct ScullV_Dev *scullv_devices;
  48. extern struct file_operations scullv_fops;
  49. /*
  50.  * The different configurable parameters
  51.  */
  52. extern int scullv_major;     /* main.c */
  53. extern int scullv_devs;
  54. extern int scullv_order;
  55. extern int scullv_qset;
  56. /*
  57.  * Prototypes for shared functions
  58.  */
  59. int scullv_trim(ScullV_Dev *dev);
  60. read_write_t scullv_read (struct inode *inode, struct file *filp,
  61.                 char *buf, count_t count);
  62. read_write_t scullv_write (struct inode *inode, struct file *filp,
  63.                 const char *buf, count_t count);
  64. int scullv_lseek (struct inode *inode, struct file *filp,
  65.                  off_t off, int whence);
  66. int scullv_ioctl (struct inode *inode, struct file *filp,
  67.                  unsigned int cmd, unsigned long arg);
  68. #ifdef SCULLV_DEBUG
  69. #  if LINUX_VERSION_CODE > VERSION_CODE(1,99,3) /* 1.99.4 exported the needed symbols */
  70. #    define SCULLV_USE_PROC
  71. #  endif
  72. #endif
  73. #ifndef min
  74. #  define min(a,b) ((a)<(b) ? (a) : (b))
  75. #endif
  76. /*
  77.  * Ioctl definitions
  78.  */
  79. /* Use 'K' as magic number */
  80. #define SCULLV_IOC_MAGIC  'K'
  81. #define SCULLV_IOCRESET    _IO(SCULLV_IOC_MAGIC, 0)
  82. /*
  83.  * S means "Set" through a ptr,
  84.  * T means "Tell" directly
  85.  * G means "Get" (to a pointed var)
  86.  * Q means "Query", response is on the return value
  87.  * X means "eXchange": G and S atomically
  88.  * H means "sHift": T and Q atomically
  89.  */
  90. #define SCULLV_IOCSORDER   _IOW(SCULLV_IOC_MAGIC,  1, scullv_order)
  91. #define SCULLV_IOCSQSET    _IOW(SCULLV_IOC_MAGIC,  2, scullv_qset)
  92. #define SCULLV_IOCTORDER   _IO(SCULLV_IOC_MAGIC,   3)
  93. #define SCULLV_IOCTQSET    _IO(SCULLV_IOC_MAGIC,   4)
  94. #define SCULLV_IOCGORDER   _IOR(SCULLV_IOC_MAGIC,  5, scullv_order)
  95. #define SCULLV_IOCGQSET    _IOR(SCULLV_IOC_MAGIC,  6, scullv_qset)
  96. #define SCULLV_IOCQORDER   _IO(SCULLV_IOC_MAGIC,   7)
  97. #define SCULLV_IOCQQSET    _IO(SCULLV_IOC_MAGIC,   8)
  98. #define SCULLV_IOCXORDER   _IOWR(SCULLV_IOC_MAGIC, 9, scullv_order)
  99. #define SCULLV_IOCXQSET    _IOWR(SCULLV_IOC_MAGIC,10, scullv_qset)
  100. #define SCULLV_IOCHORDER   _IO(SCULLV_IOC_MAGIC,  11)
  101. #define SCULLV_IOCHQSET    _IO(SCULLV_IOC_MAGIC,  12)
  102. #define SCULLV_IOCHARDRESET _IO(SCULLV_IOC_MAGIC, 13) /* debugging tool */
  103. #define SCULLV_IOC_MAXNR 13