zatm.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* drivers/atm/zatm.h - ZeitNet ZN122x device driver declarations */
  2. /* Written 1995-1998 by Werner Almesberger, EPFL LRC/ICA */
  3. #ifndef DRIVER_ATM_ZATM_H
  4. #define DRIVER_ATM_ZATM_H
  5. #include <linux/config.h>
  6. #include <linux/skbuff.h>
  7. #include <linux/atm.h>
  8. #include <linux/atmdev.h>
  9. #include <linux/sonet.h>
  10. #include <linux/pci.h>
  11. #define DEV_LABEL "zatm"
  12. #define MAX_AAL5_PDU 10240 /* allocate for AAL5 PDUs of this size */
  13. #define MAX_RX_SIZE_LD 14 /* ceil(log2((MAX_AAL5_PDU+47)/48)) */
  14. #define LOW_MARK 12 /* start adding new buffers if less than 12 */
  15. #define HIGH_MARK 30 /* stop adding buffers after reaching 30 */
  16. #define OFF_CNG_THRES 5 /* threshold for offset changes */
  17. #define RX_SIZE 2 /* RX lookup entry size (in bytes) */
  18. #define NR_POOLS 32 /* number of free buffer pointers */
  19. #define POOL_SIZE 8 /* buffer entry size (in bytes) */
  20. #define NR_SHAPERS 16 /* number of shapers */
  21. #define SHAPER_SIZE 4 /* shaper entry size (in bytes) */
  22. #define VC_SIZE 32 /* VC dsc (TX or RX) size (in bytes) */
  23. #define RING_ENTRIES 32 /* ring entries (without back pointer) */
  24. #define RING_WORDS 4 /* ring element size */
  25. #define RING_SIZE (sizeof(unsigned long)*(RING_ENTRIES+1)*RING_WORDS)
  26. #define NR_MBX 4 /* four mailboxes */
  27. #define MBX_RX_0 0 /* mailbox indices */
  28. #define MBX_RX_1 1
  29. #define MBX_TX_0 2
  30. #define MBX_TX_1 3
  31. /*
  32.  * mkdep doesn't spot this dependency, but that's okay, because zatm.c uses
  33.  * CONFIG_ATM_ZATM_EXACT_TS too.
  34.  */
  35. #ifdef CONFIG_ATM_ZATM_EXACT_TS
  36. #define POLL_INTERVAL 60 /* TSR poll interval in seconds; must be <=
  37.    (2^31-1)/clock */
  38. #define TIMER_SHIFT 20 /* scale factor for fixed-point arithmetic;
  39.    1 << TIMER_SHIFT must be
  40.      (1)  <= (2^64-1)/(POLL_INTERVAL*clock),
  41.      (2)  >> clock/10^6, and
  42.      (3)  <= (2^32-1)/1000  */
  43. #define ADJ_IGN_THRES 1000000 /* don't adjust if we're off by more than that
  44.    many usecs - this filters clock corrections,
  45.    time zone changes, etc. */
  46. #define ADJ_REP_THRES 20000 /* report only differences of more than that
  47.    many usecs (don't mention single lost timer
  48.    ticks; 10 msec is only 0.03% anyway) */
  49. #define ADJ_MSG_THRES 5 /* issue complaints only if getting that many
  50.    significant timer differences in a row */
  51. #endif
  52. struct zatm_vcc {
  53. /*-------------------------------- RX part */
  54. int rx_chan; /* RX channel, 0 if none */
  55. int pool; /* free buffer pool */
  56. /*-------------------------------- TX part */
  57. int tx_chan; /* TX channel, 0 if none */
  58. int shaper; /* shaper, <0 if none */
  59. struct sk_buff_head tx_queue; /* list of buffers in transit */
  60. wait_queue_head_t tx_wait; /* for close */
  61. u32 *ring; /* transmit ring */
  62. int ring_curr; /* current write position */
  63. int txing; /* number of transmits in progress */
  64. struct sk_buff_head backlog; /* list of buffers waiting for ring */
  65. };
  66. struct zatm_dev {
  67. /*-------------------------------- TX part */
  68. int tx_bw; /* remaining bandwidth */
  69. u32 free_shapers; /* bit set */
  70. int ubr; /* UBR shaper; -1 if none */
  71. int ubr_ref_cnt; /* number of VCs using UBR shaper */
  72. /*-------------------------------- RX part */
  73. int pool_ref[NR_POOLS]; /* free buffer pool usage counters */
  74. volatile struct sk_buff *last_free[NR_POOLS];
  75. /* last entry in respective pool */
  76. struct sk_buff_head pool[NR_POOLS];/* free buffer pools */
  77. struct zatm_pool_info pool_info[NR_POOLS]; /* pool information */
  78. /*-------------------------------- maps */
  79. struct atm_vcc **tx_map; /* TX VCCs */
  80. struct atm_vcc **rx_map; /* RX VCCs */
  81. int chans; /* map size, must be 2^n */
  82. /*-------------------------------- mailboxes */
  83. unsigned long mbx_start[NR_MBX];/* start addresses */
  84. u16 mbx_end[NR_MBX]; /* end offset (in bytes) */
  85. /*-------------------------------- other pointers */
  86. u32 pool_base; /* Free buffer pool dsc (word addr) */
  87. /*-------------------------------- ZATM links */
  88. struct atm_dev *more; /* other ZATM devices */
  89. #ifdef CONFIG_ATM_ZATM_EXACT_TS
  90. /*-------------------------------- timestamp calculation */
  91. u32 last_clk; /* results of last poll: clock, */
  92. struct timeval last_time; /*   virtual time and */
  93. struct timeval last_real_time; /*   real time */
  94. u32 factor; /* multiplication factor */
  95. int timer_diffs; /* number of significant deviations */
  96. struct zatm_t_hist timer_history[ZATM_TIMER_HISTORY_SIZE];
  97. /* record of timer synchronizations */
  98. int th_curr; /* current position */
  99. #endif
  100. /*-------------------------------- general information */
  101. int mem; /* RAM on board (in bytes) */
  102. int khz; /* timer clock */
  103. int copper; /* PHY type */
  104. unsigned char irq; /* IRQ */
  105. unsigned int base; /* IO base address */
  106. struct pci_dev *pci_dev; /* PCI stuff */
  107. };
  108. #define ZATM_DEV(d) ((struct zatm_dev *) (d)->dev_data)
  109. #define ZATM_VCC(d) ((struct zatm_vcc *) (d)->dev_data)
  110. struct zatm_skb_prv {
  111. struct atm_skb_data _; /* reserved */
  112. u32 *dsc; /* pointer to skb's descriptor */
  113. };
  114. #define ZATM_PRV_DSC(skb) (((struct zatm_skb_prv *) (skb)->cb)->dsc)
  115. #endif