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

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * scullv.h -- definitions for the scullv char module
  3.  *
  4.  *********/
  5. #include <linux/ioctl.h>
  6. /* version dependencies have been confined to a separate file */
  7. #include "sysdep.h"
  8. /*
  9.  * Macros to help debugging
  10.  */
  11. #undef PDEBUG             /* undef it, just in case */
  12. #ifdef SCULLV_DEBUG
  13. #  ifdef __KERNEL__
  14.      /* This one if debugging is on, and kernel space */
  15. #    define PDEBUG(fmt, args...) printk( KERN_DEBUG "scullv: " fmt, ## args)
  16. #  else
  17.      /* This one for user space */
  18. #    define PDEBUG(fmt, args...) fprintf(stderr, fmt, ## args)
  19. #  endif
  20. #else
  21. #  define PDEBUG(fmt, args...) /* not debugging: nothing */
  22. #endif
  23. #undef PDEBUGG
  24. #define PDEBUGG(fmt, args...) /* nothing: it's a placeholder */
  25. #define SCULLV_MAJOR 0   /* dynamic major by default */
  26. #define SCULLV_DEVS 4    /* scullv0 through scullv3 */
  27. /*
  28.  * The bare device is a variable-length region of memory.
  29.  * Use a linked list of indirect blocks.
  30.  *
  31.  * "ScullV_Dev->data" points to an array of pointers, each
  32.  * pointer refers to a memory page.
  33.  *
  34.  * The array (quantum-set) is SCULLV_QSET long.
  35.  */
  36. #define SCULLV_ORDER    4 /* 16 pages at a time */
  37. #define SCULLV_QSET     500
  38. typedef struct ScullV_Dev {
  39.    void **data;
  40.    struct ScullV_Dev *next;  /* next listitem */
  41.    int vmas;                 /* active mappings */
  42.    int order;                /* the current allocation order */
  43.    int qset;                 /* the current array size */
  44.    size_t size;              /* 32-bit will suffice */
  45.    struct semaphore sem;     /* Mutual exclusion */
  46. } ScullV_Dev;
  47. extern 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. ScullV_Dev *scullv_follow(ScullV_Dev *dev, int n);
  61. #ifdef SCULLV_DEBUG
  62. #  define SCULLV_USE_PROC
  63. #endif
  64. #ifndef min
  65. #  define min(a,b) ((a)<(b) ? (a) : (b))
  66. #endif
  67. /*
  68.  * Ioctl definitions
  69.  */
  70. /* Use 'K' as magic number */
  71. #define SCULLV_IOC_MAGIC  'K'
  72. #define SCULLV_IOCRESET    _IO(SCULLV_IOC_MAGIC, 0)
  73. /*
  74.  * S means "Set" through a ptr,
  75.  * T means "Tell" directly
  76.  * G means "Get" (to a pointed var)
  77.  * Q means "Query", response is on the return value
  78.  * X means "eXchange": G and S atomically
  79.  * H means "sHift": T and Q atomically
  80.  */
  81. #define SCULLV_IOCSORDER   _IOW(SCULLV_IOC_MAGIC,  1, scullv_order)
  82. #define SCULLV_IOCTORDER   _IO(SCULLV_IOC_MAGIC,   2)
  83. #define SCULLV_IOCGORDER   _IOR(SCULLV_IOC_MAGIC,  3, scullv_order)
  84. #define SCULLV_IOCQORDER   _IO(SCULLV_IOC_MAGIC,   4)
  85. #define SCULLV_IOCXORDER   _IOWR(SCULLV_IOC_MAGIC, 5, scullv_order)
  86. #define SCULLV_IOCHORDER   _IO(SCULLV_IOC_MAGIC,   6)
  87. #define SCULLV_IOCSQSET    _IOW(SCULLV_IOC_MAGIC,  7, scullv_qset)
  88. #define SCULLV_IOCTQSET    _IO(SCULLV_IOC_MAGIC,   8)
  89. #define SCULLV_IOCGQSET    _IOR(SCULLV_IOC_MAGIC,  9, scullv_qset)
  90. #define SCULLV_IOCQQSET    _IO(SCULLV_IOC_MAGIC,  10)
  91. #define SCULLV_IOCXQSET    _IOWR(SCULLV_IOC_MAGIC,11, scullv_qset)
  92. #define SCULLV_IOCHQSET    _IO(SCULLV_IOC_MAGIC,  12)
  93. #define SCULLV_IOCHARDRESET _IO(SCULLV_IOC_MAGIC, 13) /* debugging tool */
  94. #define SCULLV_IOC_MAXNR 13