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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Main internal include file for Diva Server driver
  3.  *
  4.  * Copyright (C) Eicon Technology Corporation, 2000.
  5.  *
  6.  * Eicon File Revision :    1.7  
  7.  *
  8.  * This software may be used and distributed according to the terms
  9.  * of the GNU General Public License, incorporated herein by reference.
  10.  *
  11.  */
  12. #if !defined(ADAPTER_H)
  13. #define ADAPTER_H
  14. #include "sys.h"
  15. #include "idi.h"
  16. #include "divas.h"
  17. #undef ID_MASK
  18. #include "pc.h"
  19. #define XMOREC 0x1f
  20. #define XMOREF 0x20
  21. #define XBUSY  0x40
  22. #define RMORE  0x80
  23.         /* structure for all information we have to keep on a per   */
  24.         /* adapater basis                                           */
  25. typedef struct adapter_s ADAPTER;
  26. struct adapter_s {
  27.   void * io;
  28.   byte IdTable[256];
  29.   byte ReadyInt;
  30.   byte (* ram_in)(ADAPTER * a, void * adr);
  31.   word (* ram_inw)(ADAPTER * a, void * adr);
  32.   void (* ram_in_buffer)(ADAPTER * a, void * adr, void * P, word length);
  33.   void (* ram_look_ahead)(ADAPTER * a, PBUFFER * RBuffer, ENTITY * e);
  34.   void (* ram_out)(ADAPTER * a, void * adr, byte data);
  35.   void (* ram_outw)(ADAPTER * a, void * adr, word data);
  36.   void (* ram_out_buffer)(ADAPTER * a, void * adr, void * P, word length);
  37.   void (* ram_inc)(ADAPTER * a, void * adr);
  38. };
  39. typedef struct card card_t;
  40. typedef int card_load_fn_t(card_t *card, dia_load_t *load);
  41. typedef int card_config_fn_t(card_t *card, dia_config_t *config);
  42. typedef int card_start_fn_t(card_t *card, byte *channels);
  43. typedef int card_reset_fn_t(card_t *card);
  44. typedef int card_mem_get_fn_t(card_t *card, mem_block_t *mem_block);
  45. #define MAX_PENTITIES 256 /* Number of entities primary adapter */
  46. #define MAX_ENTITIES 16 /* Number of entities standard adapter */
  47. typedef struct e_info_s E_INFO;
  48. struct e_info_s
  49. {
  50. ENTITY *e; /* entity pointer */
  51. byte next; /* chaining index */
  52. word assign_ref; /* assign reference */
  53. };
  54. /* DIVA card info (details hidden from user) */
  55. typedef struct ux_diva_card_s ux_diva_card_t;
  56. /* card info */
  57. struct card
  58. {
  59. ADAPTER a; /* per-adapter information */
  60. dia_card_t cfg; /* card configuration */
  61. int  state; /* State of the adapter */
  62. dword  serial_no; /* serial number */
  63. int  test_int_pend; /* set for interrupt testing */
  64. ux_diva_card_t *hw; /* O/S-specific handle */
  65. card_reset_fn_t *card_reset; /* call this to reset card */
  66. card_load_fn_t *card_load; /* call this to load card */
  67. card_config_fn_t *card_config; /* call this to config card */
  68. card_start_fn_t *card_start; /* call this to start card */
  69. card_mem_get_fn_t *card_mem_get; /* call this to get card memory */
  70. E_INFO *e_tbl; /* table of ENTITY pointers */
  71. byte e_head; /* list of active ENTITIES */
  72. byte e_tail; /* list of active ENTITIES */
  73. int e_count; /* # of active ENTITIES */
  74. int e_max; /* total # of ENTITIES */
  75. byte assign; /* assign queue entry */
  76. PBUFFER RBuffer; /* Copy of receive lookahead buffer */
  77. int log_types; /* bit-mask of active logs */
  78. word xlog_offset; /* offset to XLOG buffer on card */
  79. void (*out)(ADAPTER *a);
  80. byte (*dpc)(ADAPTER * a);
  81. byte (*test_int)(ADAPTER * a);
  82. void (*clear_int)(ADAPTER * a);
  83. void (*reset_int)(card_t *c);
  84. int   is_live;
  85. int (*card_isr)(card_t *card);
  86. int  int_pend; /* interrupt pending */
  87. long interrupt_reentered;
  88. long  dpc_reentered;
  89. int  set_xlog_request;
  90. } ;
  91. /* card information */
  92. #define MAX_CARDS 20 /* max number of cards on a system */
  93. extern
  94. card_t DivasCards[];
  95. extern
  96. int DivasCardNext;
  97. extern
  98. dia_config_t DivasCardConfigs[];
  99. extern
  100. byte  DivasFlavourConfig[];
  101. /*------------------------------------------------------------------*/
  102. /* public functions of IDI common code                              */
  103. /*------------------------------------------------------------------*/
  104. void DivasOut(ADAPTER * a);
  105. byte DivasDpc(ADAPTER * a);
  106. byte DivasTestInt(ADAPTER * a);
  107. void DivasClearInt(ADAPTER * a);
  108. /*------------------------------------------------------------------*/
  109. /* public functions of configuration platform-specific code         */
  110. /*------------------------------------------------------------------*/
  111. int DivasConfigGet(dia_card_t *card);
  112. /*------------------------------------------------------------------*/
  113. /* public functions of LOG related code                             */
  114. /*------------------------------------------------------------------*/
  115. void DivasXlogReq(int card_num);
  116. int DivasXlogRetrieve(card_t *card);
  117. void DivasLog(dia_log_t *log);
  118. void DivasLogIdi(card_t *card, ENTITY *e, int request);
  119. /*------------------------------------------------------------------*/
  120. /* public functions to initialise cards for each type supported     */
  121. /*------------------------------------------------------------------*/
  122. int DivasPriInit(card_t *card, dia_card_t *cfg);
  123. int DivasBriInit(card_t *card, dia_card_t *cfg);
  124. int Divas4BriInit(card_t *card, dia_card_t *cfg);
  125. void  DivasBriPatch(card_t *card);
  126. /*------------------------------------------------------------------*/
  127. /* public functions of log common code                              */
  128. /*------------------------------------------------------------------*/
  129. extern char *DivasLogFifoRead(void);
  130. extern void DivasLogFifoWrite(char *entry, int length);
  131. extern int DivasLogFifoEmpty(void);
  132. extern int DivasLogFifoFull(void);
  133. extern void    DivasLogAdd(void *buffer, int length);
  134. /*------------------------------------------------------------------*/
  135. /* public functions of misc. platform-specific code          */
  136. /*------------------------------------------------------------------*/
  137. int DivasDpcSchedule(void);
  138. void DivasDoDpc(void *);
  139. void DivasDoRequestDpc(void *pData);
  140. int DivasScheduleRequestDpc(void);
  141. /* table of IDI request functions */
  142. extern
  143. IDI_CALL DivasIdiRequest[];
  144. /*
  145.  * intialisation entry point
  146.  */
  147. int DivasInit(void);
  148. /*
  149.  * Get information on the number and type of cards present
  150.  */
  151. extern
  152. int  DivasCardsDiscover(void);
  153. /*
  154.  * initialise a new card
  155.  */
  156. int DivasCardNew(dia_card_t *card);
  157. /*
  158.  * configure specified card
  159.  */
  160. int DivasCardConfig(dia_config_t *config);
  161. /*
  162.  * load specified binary code onto card
  163.  */
  164. int DivasCardLoad(dia_load_t *load);
  165. /*
  166.  * start specified card running
  167.  */
  168. int DivasCardStart(int card_id);
  169. /*
  170.  * ISR for card
  171.  * Returns 0 if specified card was interrupting
  172.  */
  173. int DivasIsr(void *arg);
  174. /*
  175.  * Get number of active cards
  176.  */
  177. int DivasGetNum(void);
  178. /*
  179.  * Get list of active cards
  180.  */
  181. int DivasGetList(dia_card_list_t *card_list);
  182. /* definitions common to several card types */
  183. #define DIVAS_SHARED_OFFSET     (0x1000)
  184. #endif /* ADAPTER_H */