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

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * scullc.h -- definitions for the scullc char module
  3.  *
  4.  * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet
  5.  * Copyright (C) 2001 O'Reilly & Associates
  6.  *
  7.  * The source code in this file can be freely used, adapted,
  8.  * and redistributed in source or binary form, so long as an
  9.  * acknowledgment appears in derived source files.  The citation
  10.  * should list that the code comes from the book "Linux Device
  11.  * Drivers" by Alessandro Rubini and Jonathan Corbet, published
  12.  * by O'Reilly & Associates.   No warranty is attached;
  13.  * we cannot take responsibility for errors or fitness for use.
  14.  */
  15. #include <linux/ioctl.h>
  16. /* version dependencies have been confined to a separate file */
  17. #include "sysdep.h"
  18. /*
  19.  * Macros to help debugging
  20.  */
  21. #undef PDEBUG             /* undef it, just in case */
  22. #ifdef SCULLC_DEBUG
  23. #  ifdef __KERNEL__
  24.      /* This one if debugging is on, and kernel space */
  25. #    define PDEBUG(fmt, args...) printk( KERN_DEBUG "scullc: " fmt, ## args)
  26. #  else
  27.      /* This one for user space */
  28. #    define PDEBUG(fmt, args...) fprintf(stderr, fmt, ## args)
  29. #  endif
  30. #else
  31. #  define PDEBUG(fmt, args...) /* not debugging: nothing */
  32. #endif
  33. #undef PDEBUGG
  34. #define PDEBUGG(fmt, args...) /* nothing: it's a placeholder */
  35. #define SCULLC_MAJOR 0   /* dynamic major by default */
  36. #define SCULLC_DEVS 4    /* scullc0 through scullc3 */
  37. /*
  38.  * The bare device is a variable-length region of memory.
  39.  * Use a linked list of indirect blocks.
  40.  *
  41.  * "ScullC_Dev->data" points to an array of pointers, each
  42.  * pointer refers to a memory page.
  43.  *
  44.  * The array (quantum-set) is SCULLC_QSET long.
  45.  */
  46. #define SCULLC_QUANTUM  4000 /* use a quantum size like scull */
  47. #define SCULLC_QSET     500
  48. typedef struct ScullC_Dev {
  49.    void **data;
  50.    struct ScullC_Dev *next;  /* next listitem */
  51.    int vmas;                 /* active mappings */
  52.    int quantum;              /* the current allocation size */
  53.    int qset;                 /* the current array size */
  54.    size_t size;              /* 32-bit will suffice */
  55.    struct semaphore sem;     /* Mutual exclusion */
  56. } ScullC_Dev;
  57. extern ScullC_Dev *scullc_devices;
  58. extern struct file_operations scullc_fops;
  59. /*
  60.  * The different configurable parameters
  61.  */
  62. extern int scullc_major;     /* main.c */
  63. extern int scullc_devs;
  64. extern int scullc_order;
  65. extern int scullc_qset;
  66. /*
  67.  * Prototypes for shared functions
  68.  */
  69. int scullc_trim(ScullC_Dev *dev);
  70. ScullC_Dev *scullc_follow(ScullC_Dev *dev, int n);
  71. #ifdef SCULLC_DEBUG
  72. #  define SCULLC_USE_PROC
  73. #endif
  74. #ifndef min
  75. #  define min(a,b) ((a)<(b) ? (a) : (b))
  76. #endif
  77. /*
  78.  * Ioctl definitions
  79.  */
  80. /* Use 'K' as magic number */
  81. #define SCULLC_IOC_MAGIC  'K'
  82. #define SCULLC_IOCRESET    _IO(SCULLC_IOC_MAGIC, 0)
  83. /*
  84.  * S means "Set" through a ptr,
  85.  * T means "Tell" directly
  86.  * G means "Get" (to a pointed var)
  87.  * Q means "Query", response is on the return value
  88.  * X means "eXchange": G and S atomically
  89.  * H means "sHift": T and Q atomically
  90.  */
  91. #define SCULLC_IOCSQUANTUM _IOW(SCULLC_IOC_MAGIC,  1, scullc_quantum)
  92. #define SCULLC_IOCTQUANTUM _IO(SCULLC_IOC_MAGIC,   2)
  93. #define SCULLC_IOCGQUANTUM _IOR(SCULLC_IOC_MAGIC,  3, scullc_quantum)
  94. #define SCULLC_IOCQQUANTUM _IO(SCULLC_IOC_MAGIC,   4)
  95. #define SCULLC_IOCXQUANTUM _IOWR(SCULLC_IOC_MAGIC, 5, scullc_quantum)
  96. #define SCULLC_IOCHQUANTUM _IO(SCULLC_IOC_MAGIC,   6)
  97. #define SCULLC_IOCSQSET    _IOW(SCULLC_IOC_MAGIC,  7, scullc_qset)
  98. #define SCULLC_IOCTQSET    _IO(SCULLC_IOC_MAGIC,   8)
  99. #define SCULLC_IOCGQSET    _IOR(SCULLC_IOC_MAGIC,  9, scullc_qset)
  100. #define SCULLC_IOCQQSET    _IO(SCULLC_IOC_MAGIC,  10)
  101. #define SCULLC_IOCXQSET    _IOWR(SCULLC_IOC_MAGIC,11, scullc_qset)
  102. #define SCULLC_IOCHQSET    _IO(SCULLC_IOC_MAGIC,  12)
  103. #define SCULLC_IOCHARDRESET _IO(SCULLC_IOC_MAGIC, 13) /* debugging tool */
  104. #define SCULLC_IOC_MAXNR 13