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

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * sbull.h -- definitions for the 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.  */
  16. #include <linux/ioctl.h>
  17. /* version dependencies have been confined to a separate file */
  18. #include "sysdep.h"
  19. /* Multiqueue only works on 2.4 */
  20. #ifdef SBULL_MULTIQUEUE
  21. #  ifndef LINUX_24
  22. #    warning "Multiqueue only works on 2.4 kernels"
  23. #    undef SBULL_MULTIQUEUE
  24. #  endif
  25. #endif
  26. /*
  27.  * Macros to help debugging
  28.  */
  29. #undef PDEBUG             /* undef it, just in case */
  30. #ifdef SBULL_DEBUG
  31. #  ifdef __KERNEL__
  32.      /* This one if debugging is on, and kernel space */
  33. #    define PDEBUG(fmt, args...) printk( KERN_DEBUG "sbull: " fmt, ## args)
  34. #  else
  35.      /* This one for user space */
  36. #    define PDEBUG(fmt, args...) fprintf(stderr, fmt, ## args)
  37. #  endif
  38. #else
  39. #  define PDEBUG(fmt, args...) /* not debugging: nothing */
  40. #endif
  41. #undef PDEBUGG
  42. #define PDEBUGG(fmt, args...) /* nothing: it's a placeholder */
  43. #define SBULL_MAJOR 0       /* dynamic major by default */
  44. #define SBULL_DEVS 2        /* two disks */
  45. #define SBULL_RAHEAD 2      /* two sectors */
  46. #define SBULL_SIZE 2048     /* two megs each */
  47. #define SBULL_BLKSIZE 1024  /* 1k blocks */
  48. #define SBULL_HARDSECT 512  /* 2.2 and 2.4 can used different values */
  49. #define SBULLR_MAJOR 0      /* Dynamic major for raw device */
  50. /*
  51.  * The sbull device is removable: if it is left closed for more than
  52.  * half a minute, it is removed. Thus use a usage count and a
  53.  * kernel timer
  54.  */
  55. typedef struct Sbull_Dev {
  56.    int size;
  57.    int usage;
  58.    struct timer_list timer;
  59.    spinlock_t lock;
  60.    u8 *data;
  61. #ifdef SBULL_MULTIQUEUE
  62.    request_queue_t queue;
  63.    int busy;
  64. #endif
  65. }              Sbull_Dev;