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

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * scullp.h -- definitions for the scullp 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 SCULLP_DEBUG
  13. #  ifdef __KERNEL__
  14.      /* This one if debugging is on, and kernel space */
  15. #    define PDEBUG(fmt, args...) printk( KERN_DEBUG "scullp: " 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 SCULLP_MAJOR 0   /* dynamic major by default */
  26. #define SCULLP_DEVS 4    /* scullp0 through scullp3 */
  27. /*
  28.  * The bare device is a variable-length region of memory.
  29.  * Use a linked list of indirect blocks.
  30.  *
  31.  * "ScullP_Dev->data" points to an array of pointers, each
  32.  * pointer refers to a memory page.
  33.  *
  34.  * The array (quantum-set) is SCULLP_QSET long.
  35.  */
  36. #define SCULLP_ORDER    0 /* one page at a time */
  37. #define SCULLP_QSET     500
  38. typedef struct ScullP_Dev {
  39.    void **data;
  40.    struct ScullP_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. } ScullP_Dev;
  47. extern ScullP_Dev *scullp_devices;
  48. extern struct file_operations scullp_fops;
  49. /*
  50.  * The different configurable parameters
  51.  */
  52. extern int scullp_major;     /* main.c */
  53. extern int scullp_devs;
  54. extern int scullp_order;
  55. extern int scullp_qset;
  56. /*
  57.  * Prototypes for shared functions
  58.  */
  59. int scullp_trim(ScullP_Dev *dev);
  60. ScullP_Dev *scullp_follow(ScullP_Dev *dev, int n);
  61. #ifdef SCULLP_DEBUG
  62. #  define SCULLP_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 SCULLP_IOC_MAGIC  'K'
  72. #define SCULLP_IOCRESET    _IO(SCULLP_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 SCULLP_IOCSORDER   _IOW(SCULLP_IOC_MAGIC,  1, scullp_order)
  82. #define SCULLP_IOCTORDER   _IO(SCULLP_IOC_MAGIC,   2)
  83. #define SCULLP_IOCGORDER   _IOR(SCULLP_IOC_MAGIC,  3, scullp_order)
  84. #define SCULLP_IOCQORDER   _IO(SCULLP_IOC_MAGIC,   4)
  85. #define SCULLP_IOCXORDER   _IOWR(SCULLP_IOC_MAGIC, 5, scullp_order)
  86. #define SCULLP_IOCHORDER   _IO(SCULLP_IOC_MAGIC,   6)
  87. #define SCULLP_IOCSQSET    _IOW(SCULLP_IOC_MAGIC,  7, scullp_qset)
  88. #define SCULLP_IOCTQSET    _IO(SCULLP_IOC_MAGIC,   8)
  89. #define SCULLP_IOCGQSET    _IOR(SCULLP_IOC_MAGIC,  9, scullp_qset)
  90. #define SCULLP_IOCQQSET    _IO(SCULLP_IOC_MAGIC,  10)
  91. #define SCULLP_IOCXQSET    _IOWR(SCULLP_IOC_MAGIC,11, scullp_qset)
  92. #define SCULLP_IOCHQSET    _IO(SCULLP_IOC_MAGIC,  12)
  93. #define SCULLP_IOCHARDRESET _IO(SCULLP_IOC_MAGIC, 13) /* debugging tool */
  94. #define SCULLP_IOC_MAXNR 13