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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  * 
  6.  * Copyright (c) 2001-2002 Silicon Graphics, Inc.  All rights reserved.
  7.  */
  8. #ifndef _ASM_IA64_SN_BTE_H
  9. #define _ASM_IA64_SN_BTE_H
  10. #ident "$Revision: 1.1 $"
  11. #include <linux/spinlock.h>
  12. #include <linux/cache.h>
  13. #include <asm/sn/io.h>
  14. #define L1_CACHE_MASK (L1_CACHE_BYTES - 1) /* Mask to retrieve
  15.  * the offset into this
  16.  * cache line.*/
  17. /* BTE status register only supports 16 bits for length field */
  18. #define BTE_LEN_BITS (16)
  19. #define BTE_LEN_MASK ((1 << BTE_LEN_BITS) - 1)
  20. #define BTE_MAX_XFER ((1 << BTE_LEN_BITS) * L1_CACHE_BYTES)
  21. /*
  22.  * Constants used in determining the best and worst case transfer
  23.  * times. To help explain the two, the following graph of transfer
  24.  * status vs time may help.
  25.  *
  26.  *     active +------------------:-+  :
  27.  *  status    |                  : |  :
  28.  *       idle +__________________:_+=======
  29.  *            0 Time           MaxT  MinT
  30.  *
  31.  *  Therefore, MaxT is the maximum thoeretical rate for transfering
  32.  *  the request block (assuming ideal circumstances)
  33.  *
  34.  *  MinT is the minimum theoretical rate for transferring the
  35.  *  requested block (assuming maximum link distance and contention)
  36.  *
  37.  *  The following defines are the inverse of the above.  They are
  38.  *  used for calculating the MaxT time and MinT time given the 
  39.  *  number of lines in the transfer.
  40.  */
  41. #define BTE_MAXT_LINES_PER_SECOND 800
  42. #define BTE_MINT_LINES_PER_SECOND 600
  43. /* Define hardware */
  44. #define BTES_PER_NODE 2
  45. /* Define hardware modes */
  46. #define BTE_NOTIFY (IBCT_NOTIFY)
  47. #define BTE_NORMAL BTE_NOTIFY
  48. #define BTE_ZERO_FILL (BTE_NOTIFY | IBCT_ZFIL_MODE)
  49. /* Use a reserved bit to let the caller specify a wait for any BTE */
  50. #define BTE_WACQUIRE (0x4000)
  51. /*
  52.  * Structure defining a bte.  An instance of this
  53.  * structure is created in the nodepda for each
  54.  * bte on that node (as defined by BTES_PER_NODE)
  55.  * This structure contains everything necessary
  56.  * to work with a BTE.
  57.  */
  58. typedef struct bteinfo_s {
  59. u64 volatile notify ____cacheline_aligned;
  60. char *bte_base_addr ____cacheline_aligned;
  61. spinlock_t spinlock;
  62. u64 idealTransferTimeout;
  63. u64 idealTransferTimeoutReached;
  64. u64 mostRecentSrc;
  65. u64 mostRecentDest;
  66. u64 mostRecentLen;
  67. u64 mostRecentMode;
  68. u64 volatile *mostRecentNotification;
  69. void *bteTestBuf;
  70. } bteinfo_t;
  71. /* Possible results from bte_copy and bte_unaligned_copy */
  72. typedef enum {
  73. BTE_SUCCESS, /* 0 is success */
  74. BTEFAIL_NOTAVAIL, /* BTE not available */
  75. BTEFAIL_ERROR, /* Generic error */
  76. BTEFAIL_DIR /* Diretory error */
  77. } bte_result_t;
  78. #endif /* _ASM_IA64_SN_BTE_H */