sdla_fr.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:24k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2. * sdla_fr.h Sangoma frame relay firmware API definitions.
  3. *
  4. * Author:       Gideon Hack  
  5. * Nenad Corbic <ncorbic@sangoma.com> 
  6. *
  7. * Copyright: (c) 1995-2000 Sangoma Technologies Inc.
  8. *
  9. * This program is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU General Public License
  11. * as published by the Free Software Foundation; either version
  12. * 2 of the License, or (at your option) any later version.
  13. * ============================================================================
  14. * Oct 04, 1999  Gideon Hack     Updated API structures
  15. * Jun 02, 1999  Gideon Hack  Modifications for S514 support
  16. * Oct 12, 1997 Jaspreet Singh Added FR_READ_DLCI_IB_MAPPING
  17. * Jul 21, 1997  Jaspreet Singh Changed FRRES_TOO_LONG and FRRES_TOO_MANY to 
  18. * 0x05 and 0x06 respectively.
  19. * Dec 23, 1996 Gene Kozin v2.0
  20. * Apr 29, 1996 Gene Kozin v1.0 (merged version S502 & S508 definitions).
  21. * Sep 26, 1995 Gene Kozin Initial version.
  22. *****************************************************************************/
  23. #ifndef _SDLA_FR_H
  24. #define _SDLA_FR_H
  25. /*----------------------------------------------------------------------------
  26.  * Notes:
  27.  * ------
  28.  * 1. All structures defined in this file are byte-alined.  
  29.  *
  30.  * Compiler Platform
  31.  * -------- --------
  32.  * GNU C Linux
  33.  */
  34. #ifndef PACKED
  35. #    define PACKED __attribute__((packed))
  36. #endif /* PACKED */
  37. /* Adapter memory layout */
  38. #define FR_MB_VECTOR 0xE000 /* mailbox window vector */
  39. #define FR502_RX_VECTOR 0xA000 /* S502 direct receive window vector */
  40. #define FR502_MBOX_OFFS 0xF60 /* S502 mailbox offset */
  41. #define FR508_MBOX_OFFS 0 /* S508 mailbox offset */
  42. #define FR502_FLAG_OFFS 0x1FF0 /* S502 status flags offset */
  43. #define FR508_FLAG_OFFS 0x1000 /* S508 status flags offset */
  44. #define FR502_RXMB_OFFS 0x900 /* S502 direct receive mailbox offset */
  45. #define FR508_TXBC_OFFS 0x1100 /* S508 Tx buffer info offset */
  46. #define FR508_RXBC_OFFS 0x1120 /* S508 Rx buffer info offset */
  47. /* Important constants */
  48. #define FR502_MAX_DATA 4096 /* maximum data buffer length */
  49. #define FR508_MAX_DATA 4080 /* maximum data buffer length */
  50. #define MIN_LGTH_FR_DATA_CFG         300     /* min Information frame length
  51. (for configuration purposes) */
  52. #define FR_MAX_NO_DATA_BYTES_IN_FRAME  15354  /* max Information frame length */
  53.  
  54. #define HIGHEST_VALID_DLCI 991
  55. /****** Data Structures *****************************************************/
  56. /*----------------------------------------------------------------------------
  57.  * Frame relay command block.
  58.  */
  59. typedef struct fr_cmd
  60. {
  61. unsigned char  command PACKED; /* command code */
  62. unsigned short length PACKED; /* length of data buffer */
  63. unsigned char  result PACKED; /* return code */
  64. unsigned short dlci PACKED; /* DLCI number */
  65. unsigned char  attr PACKED; /* FECN, BECN, DE and C/R bits */
  66. unsigned short rxlost1 PACKED; /* frames discarded at int. level */
  67. unsigned long  rxlost2 PACKED; /* frames discarded at app. level */
  68. unsigned char  rsrv[2] PACKED; /* reserved for future use */
  69. } fr_cmd_t;
  70. /* 'command' field defines */
  71. #define FR_WRITE 0x01
  72. #define FR_READ 0x02
  73. #define FR_ISSUE_IS_FRAME 0x03
  74. #define FR_SET_CONFIG 0x10
  75. #define FR_READ_CONFIG 0x11
  76. #define FR_COMM_DISABLE 0x12
  77. #define FR_COMM_ENABLE 0x13
  78. #define FR_READ_STATUS 0x14
  79. #define FR_READ_STATISTICS 0x15
  80. #define FR_FLUSH_STATISTICS 0x16
  81. #define FR_LIST_ACTIVE_DLCI 0x17
  82. #define FR_FLUSH_DATA_BUFFERS 0x18
  83. #define FR_READ_ADD_DLC_STATS 0x19
  84. #define FR_ADD_DLCI 0x20
  85. #define FR_DELETE_DLCI 0x21
  86. #define FR_ACTIVATE_DLCI 0x22
  87. #define FR_DEACTIVATE_DLCI 0x22
  88. #define FR_READ_MODEM_STATUS 0x30
  89. #define FR_SET_MODEM_STATUS 0x31
  90. #define FR_READ_ERROR_STATS 0x32
  91. #define FR_FLUSH_ERROR_STATS 0x33
  92. #define FR_READ_DLCI_IB_MAPPING 0x34
  93. #define FR_READ_CODE_VERSION 0x40
  94. #define FR_SET_INTR_MODE 0x50
  95. #define FR_READ_INTR_MODE 0x51
  96. #define FR_SET_TRACE_CONFIG 0x60
  97. #define FR_FT1_STATUS_CTRL  0x80
  98. #define FR_SET_FT1_MODE 0x81
  99. /* Special UDP drivers management commands */
  100. #define FPIPE_ENABLE_TRACING           0x41
  101. #define FPIPE_DISABLE_TRACING 0x42
  102. #define FPIPE_GET_TRACE_INFO            0x43
  103. #define FPIPE_FT1_READ_STATUS           0x44
  104. #define FPIPE_DRIVER_STAT_IFSEND        0x45
  105. #define FPIPE_DRIVER_STAT_INTR          0x46
  106. #define FPIPE_DRIVER_STAT_GEN           0x47
  107. #define FPIPE_FLUSH_DRIVER_STATS        0x48
  108. #define FPIPE_ROUTER_UP_TIME            0x49
  109. /* 'result' field defines */
  110. #define FRRES_OK 0x00 /* command executed successfully */
  111. #define FRRES_DISABLED 0x01 /* communications not enabled */
  112. #define FRRES_INOPERATIVE 0x02 /* channel inoperative */
  113. #define FRRES_DLCI_INACTIVE 0x03 /* DLCI is inactive */
  114. #define FRRES_DLCI_INVALID 0x04 /* DLCI is not configured */
  115. #define FRRES_TOO_LONG 0x05
  116. #define FRRES_TOO_MANY 0x06
  117. #define FRRES_CIR_OVERFLOW 0x07 /* Tx throughput has exceeded CIR */
  118. #define FRRES_BUFFER_OVERFLOW 0x08
  119. #define FRRES_MODEM_FAILURE 0x10 /* DCD and/or CTS dropped */
  120. #define FRRES_CHANNEL_DOWN 0x11 /* channel became inoperative */
  121. #define FRRES_CHANNEL_UP 0x12 /* channel became operative */
  122. #define FRRES_DLCI_CHANGE 0x13 /* DLCI status (or number) changed */
  123. #define FRRES_DLCI_MISMATCH 0x14
  124. #define FRRES_INVALID_CMD 0x1F /* invalid command */
  125. /* 'attr' field defines */
  126. #define FRATTR_
  127. /*----------------------------------------------------------------------------
  128.  * Frame relay mailbox.
  129.  * This structure is located at offset FR50?_MBOX_OFFS into FR_MB_VECTOR.
  130.  * For S502 it is also located at offset FR502_RXMB_OFFS into
  131.  * FR502_RX_VECTOR.
  132.  */
  133. typedef struct fr_mbox
  134. {
  135. unsigned char opflag PACKED; /* 00h: execution flag */
  136. fr_cmd_t cmd PACKED; /* 01h: command block */
  137. unsigned char data[1] PACKED; /* 10h: variable length data buffer */
  138. } fr_mbox_t;
  139. /*----------------------------------------------------------------------------
  140.  * S502 frame relay status flags.
  141.  * This structure is located at offset FR502_FLAG_OFFS into FR_MB_VECTOR.
  142.  */
  143. typedef struct fr502_flags
  144. {
  145. unsigned char rsrv1[1] PACKED; /* 00h: */
  146. unsigned char tx_ready PACKED; /* 01h: Tx buffer available */
  147. unsigned char rx_ready PACKED; /* 02h: Rx frame available */
  148. unsigned char event PACKED; /* 03h: asynchronous event */
  149. unsigned char mstatus PACKED; /* 04h: modem status */
  150. unsigned char rsrv2[8] PACKED; /* 05h: */
  151. unsigned char iflag PACKED; /* 0Dh: interrupt flag */
  152. unsigned char imask PACKED; /* 0Eh: interrupt mask */
  153. } fr502_flags_t;
  154. /*----------------------------------------------------------------------------
  155.  * S508 frame relay status flags.
  156.  * This structure is located at offset FR508_FLAG_OFFS into FR_MB_VECTOR.
  157.  */
  158. typedef struct fr508_flags
  159. {
  160. unsigned char rsrv1[3] PACKED; /* 00h: reserved */
  161. unsigned char event PACKED; /* 03h: asynchronous event */
  162. unsigned char mstatus PACKED; /* 04h: modem status */
  163. unsigned char rsrv2[11] PACKED; /* 05h: reserved */
  164. unsigned char iflag PACKED; /* 10h: interrupt flag */
  165. unsigned char imask PACKED; /* 11h: interrupt mask */
  166. unsigned long tse_offs PACKED; /* 12h: Tx status element */
  167. unsigned short dlci PACKED; /* 16h: DLCI NUMBER */
  168. } fr508_flags_t;
  169. /* 'event' field defines */
  170. #define FR_EVENT_STATUS 0x01 /* channel status change */
  171. #define FR_EVENT_DLC_STATUS 0x02 /* DLC status change */
  172. #define FR_EVENT_BAD_DLCI 0x04 /* FSR included wrong DLCI */
  173. #define FR_EVENT_LINK_DOWN 0x40 /* DCD or CTS low */
  174. /* 'mstatus' field defines */
  175. #define FR_MDM_DCD 0x08 /* mdm_status: DCD */
  176. #define FR_MDM_CTS 0x20 /* mdm_status: CTS */
  177. /* 'iflag' & 'imask' fields defines */
  178. #define FR_INTR_RXRDY 0x01 /* Rx ready */
  179. #define FR_INTR_TXRDY 0x02 /* Tx ready */
  180. #define FR_INTR_MODEM 0x04 /* modem status change (DCD, CTS) */
  181. #define FR_INTR_READY 0x08 /* interface command completed */
  182. #define FR_INTR_DLC 0x10 /* DLC status change */
  183. #define FR_INTR_TIMER 0x20 /* millisecond timer */
  184. #define FR_INTR_TX_MULT_DLCIs 0x80 /* Tx interrupt on multiple DLCIs */
  185. /*----------------------------------------------------------------------------
  186.  * Receive Buffer Configuration Info. S508 only!
  187.  * This structure is located at offset FR508_RXBC_OFFS into FR_MB_VECTOR.
  188.  */
  189. typedef struct fr_buf_info
  190. {
  191. unsigned short rse_num PACKED; /* 00h: number of status elements */
  192. unsigned long rse_base PACKED; /* 02h: receive status array base */
  193. unsigned long rse_next PACKED; /* 06h: next status element */
  194. unsigned long buf_base PACKED; /* 0Ah: rotational buffer base */
  195. unsigned short reserved PACKED; /* 0Eh:  */
  196. unsigned long buf_top PACKED; /* 10h: rotational buffer top */
  197. } fr_buf_info_t;
  198. /*----------------------------------------------------------------------------
  199.  * Buffer Status Element. S508 only!
  200.  * Array of structures of this type is located at offset defined by the
  201.  * 'rse_base' field of the frBufInfo_t structure into absolute adapter
  202.  * memory address space.
  203.  */
  204. typedef struct fr_rx_buf_ctl
  205. {
  206. unsigned char flag PACKED; /* 00h: ready flag */
  207. unsigned short length PACKED; /* 01h: frame length */
  208. unsigned short dlci PACKED; /* 03h: DLCI */
  209. unsigned char attr PACKED; /* 05h: FECN/BECN/DE/CR */
  210. unsigned short tmstamp PACKED; /* 06h: time stamp */
  211. unsigned short rsrv[2] PACKED; /* 08h:  */
  212. unsigned long offset PACKED; /* 0Ch: buffer absolute address */
  213. } fr_rx_buf_ctl_t;
  214. typedef struct  fr_tx_buf_ctl
  215. {
  216.         unsigned char flag      PACKED; /* 00h: ready flag */
  217. unsigned short rsrv0[2] PACKED; /* 01h: */
  218.         unsigned short length   PACKED; /* 05h: frame length */
  219.         unsigned short dlci     PACKED; /* 07h: DLCI */
  220.         unsigned char attr      PACKED; /* 09h: FECN/BECN/DE/CR */
  221.         unsigned short rsrv1  PACKED; /* 0Ah:  */
  222.         unsigned long offset    PACKED; /* 0Ch: buffer absolute address */
  223. } fr_tx_buf_ctl_t;
  224. /*----------------------------------------------------------------------------
  225.  * Global Configuration Block. Passed to FR_SET_CONFIG command when dlci == 0.
  226.  */
  227. typedef struct fr_conf
  228. {
  229. unsigned short station PACKED; /* 00h: CPE/Node */
  230. unsigned short options PACKED; /* 02h: configuration options */
  231. unsigned short kbps PACKED; /* 04h: baud rate in kbps */
  232. unsigned short port PACKED; /* 06h: RS-232/V.35 */
  233. unsigned short mtu PACKED; /* 08h: max. transmit length */
  234. unsigned short t391 PACKED; /* 0Ah:  */
  235. unsigned short t392 PACKED; /* 0Ch:  */
  236. unsigned short n391 PACKED; /* 0Eh:  */
  237. unsigned short n392 PACKED; /* 10h:  */
  238. unsigned short n393 PACKED; /* 12h:  */
  239. unsigned short cir_fwd PACKED; /* 14h:  */
  240. unsigned short bc_fwd PACKED; /* 16h:  */
  241. unsigned short be_fwd PACKED; /* 18h:  */
  242. unsigned short cir_bwd PACKED; /* 1Ah:  */
  243. unsigned short bc_bwd PACKED; /* 1Ch:  */
  244. unsigned short be_bwd PACKED; /* 1Eh:  */
  245. unsigned short dlci[0] PACKED; /* 20h:  */
  246. } fr_conf_t;
  247. /* 'station_type' defines */
  248. #define FRCFG_STATION_CPE 0
  249. #define FRCFG_STATION_NODE 1
  250. /* 'conf_flags' defines */
  251. #define FRCFG_IGNORE_TX_CIR 0x0001
  252. #define FRCFG_IGNORE_RX_CIR 0x0002
  253. #define FRCFG_DONT_RETRANSMIT 0x0004
  254. #define FRCFG_IGNORE_CBS 0x0008
  255. #define FRCFG_THROUGHPUT 0x0010 /* enable throughput calculation */
  256. #define FRCFG_DIRECT_RX 0x0080 /* enable direct receive buffer */
  257. #define FRCFG_AUTO_CONFIG 0x8000 /* enable  auto DLCI configuration */
  258. /* 'baud_rate' defines */
  259. #define FRCFG_BAUD_1200 12
  260. #define FRCFG_BAUD_2400 24
  261. #define FRCFG_BAUD_4800 48
  262. #define FRCFG_BAUD_9600 96
  263. #define FRCFG_BAUD_19200 19
  264. #define FRCFG_BAUD_38400 38
  265. #define FRCFG_BAUD_56000 56
  266. #define FRCFG_BAUD_64000 64
  267. #define FRCFG_BAUD_128000 128
  268. /* 'port_mode' defines */
  269. #define FRCFG_MODE_EXT_CLK 0x0000
  270. #define FRCFG_MODE_INT_CLK 0x0001
  271. #define FRCFG_MODE_V35 0x0000 /* S508 only */
  272. #define FRCFG_MODE_RS232 0x0002 /* S508 only */
  273. /* defines for line tracing */
  274. /* the line trace status element presented by the frame relay code */
  275. typedef struct {
  276.         unsigned char flag      PACKED; /* ready flag */
  277.         unsigned short length   PACKED; /* trace length */
  278.         unsigned char rsrv0[2]  PACKED; /* reserved */
  279.         unsigned char attr      PACKED; /* trace attributes */
  280.         unsigned short tmstamp  PACKED; /* time stamp */
  281.         unsigned char rsrv1[4]  PACKED; /* reserved */
  282.         unsigned long offset    PACKED; /* buffer absolute address */
  283. } fr_trc_el_t;
  284. typedef struct {
  285.         unsigned char status     PACKED; /* status flag */
  286. unsigned char data_passed PACKED; /* 0 if no data passed, 1 if */
  287. /* data passed */
  288.         unsigned short length    PACKED; /* frame length */
  289.         unsigned short tmstamp   PACKED; /* time stamp */
  290. } fpipemon_trc_hdr_t;
  291. typedef struct {
  292. fpipemon_trc_hdr_t fpipemon_trc_hdr PACKED;
  293.         unsigned char data[FR_MAX_NO_DATA_BYTES_IN_FRAME] PACKED;
  294. } fpipemon_trc_t;
  295. /* bit settings for the 'status' byte  - note that bits 1, 2 and 3 are used */
  296. /* for returning the number of frames being passed to fpipemon */
  297. #define TRC_OUTGOING_FRM 0x01
  298. #define TRC_ABORT_ERROR         0x10
  299. #define TRC_CRC_ERROR           0x20
  300. #define TRC_OVERRUN_ERROR       0x40
  301. #define MORE_TRC_DATA 0x80
  302. #define MAX_FRMS_TRACED 0x07
  303. #define NO_TRC_ELEMENTS_OFF 0x9000
  304. #define BASE_TRC_ELEMENTS_OFF 0x9002
  305. #define TRC_ACTIVE 0x01
  306. #define FLUSH_TRC_BUFFERS  0x02
  307. #define FLUSH_TRC_STATISTICS 0x04
  308. #define TRC_SIGNALLING_FRMS 0x10
  309. #define TRC_INFO_FRMS 0x20
  310. #define ACTIVATE_TRC (TRC_ACTIVE | TRC_SIGNALLING_FRMS | TRC_INFO_FRMS)
  311. #define RESET_TRC (FLUSH_TRC_BUFFERS | FLUSH_TRC_STATISTICS)
  312. /*----------------------------------------------------------------------------
  313.  * Channel configuration.
  314.  * This structure is passed to the FR_SET_CONFIG command when dlci != 0.
  315.  */
  316. typedef struct fr_dlc_conf
  317. {
  318. unsigned short conf_flags PACKED; /* 00h: configuration bits */
  319. unsigned short cir_fwd PACKED; /* 02h:  */
  320. unsigned short bc_fwd PACKED; /* 04h:  */
  321. unsigned short be_fwd PACKED; /* 06h:  */
  322. unsigned short cir_bwd PACKED; /* 08h:  */
  323. unsigned short bc_bwd PACKED; /* 0Ah:  */
  324. unsigned short be_bwd PACKED; /* 0Ch:  */
  325. } fr_dlc_conf_t;
  326. /*----------------------------------------------------------------------------
  327.  * S502 interrupt mode control block.
  328.  * This structure is passed to the FR_SET_INTR_FLAGS and returned by the
  329.  * FR_READ_INTR_FLAGS commands.
  330.  */
  331. typedef struct fr502_intr_ctl
  332. {
  333. unsigned char mode PACKED; /* 00h: interrupt enable flags */
  334. unsigned short tx_len PACKED; /* 01h: required Tx buffer size */
  335. } fr502_intr_ctl_t;
  336. /*----------------------------------------------------------------------------
  337.  * S508 interrupt mode control block.
  338.  * This structure is passed to the FR_SET_INTR_FLAGS and returned by the
  339.  * FR_READ_INTR_FLAGS commands.
  340.  */
  341. typedef struct fr508_intr_ctl
  342. {
  343. unsigned char mode PACKED; /* 00h: interrupt enable flags */
  344. unsigned short tx_len PACKED; /* 01h: required Tx buffer size */
  345. unsigned char irq PACKED; /* 03h: IRQ level to activate */
  346. unsigned char flags PACKED; /* 04h: ?? */
  347. unsigned short timeout PACKED; /* 05h: ms, for timer interrupt */
  348. } fr508_intr_ctl_t;
  349. /*----------------------------------------------------------------------------
  350.  * Channel status.
  351.  * This structure is returned by the FR_READ_STATUS command.
  352.  */
  353. typedef struct fr_dlc_Status
  354. {
  355. unsigned char status PACKED; /* 00h: link/DLCI status */
  356. struct
  357. {
  358. unsigned short dlci PACKED; /* 01h: DLCI number */
  359. unsigned char status PACKED; /* 03h: DLCI status */
  360. } circuit[1] PACKED;
  361. } fr_dlc_status_t;
  362. /* 'status' defines */
  363. #define FR_LINK_INOPER 0x00 /* for global status (DLCI == 0) */
  364. #define FR_LINK_OPER 0x01
  365. #define FR_DLCI_DELETED 0x01 /* for circuit status (DLCI != 0) */
  366. #define FR_DLCI_ACTIVE 0x02
  367. #define FR_DLCI_WAITING 0x04
  368. #define FR_DLCI_NEW 0x08
  369. #define FR_DLCI_REPORT 0x40
  370. /*----------------------------------------------------------------------------
  371.  * Global Statistics Block.
  372.  * This structure is returned by the FR_READ_STATISTICS command when
  373.  * dcli == 0.
  374.  */
  375. typedef struct fr_link_stat
  376. {
  377. unsigned short rx_too_long PACKED; /* 00h:  */
  378. unsigned short rx_dropped PACKED; /* 02h:  */
  379. unsigned short rx_dropped2 PACKED; /* 04h:  */
  380. unsigned short rx_bad_dlci PACKED; /* 06h:  */
  381. unsigned short rx_bad_format PACKED; /* 08h:  */
  382. unsigned short retransmitted PACKED; /* 0Ah:  */
  383. unsigned short cpe_tx_FSE PACKED; /* 0Ch:  */
  384. unsigned short cpe_tx_LIV PACKED; /* 0Eh:  */
  385. unsigned short cpe_rx_FSR PACKED; /* 10h:  */
  386. unsigned short cpe_rx_LIV PACKED; /* 12h:  */
  387. unsigned short node_rx_FSE PACKED; /* 14h:  */
  388. unsigned short node_rx_LIV PACKED; /* 16h:  */
  389. unsigned short node_tx_FSR PACKED; /* 18h:  */
  390. unsigned short node_tx_LIV PACKED; /* 1Ah:  */
  391. unsigned short rx_ISF_err PACKED; /* 1Ch:  */
  392. unsigned short rx_unsolicited PACKED; /* 1Eh:  */
  393. unsigned short rx_SSN_err PACKED; /* 20h:  */
  394. unsigned short rx_RSN_err PACKED; /* 22h:  */
  395. unsigned short T391_timeouts PACKED; /* 24h:  */
  396. unsigned short T392_timeouts PACKED; /* 26h:  */
  397. unsigned short N392_reached PACKED; /* 28h:  */
  398. unsigned short cpe_SSN_RSN PACKED; /* 2Ah:  */
  399. unsigned short current_SSN PACKED; /* 2Ch:  */
  400. unsigned short current_RSN PACKED; /* 2Eh:  */
  401. unsigned short curreny_T391 PACKED; /* 30h:  */
  402. unsigned short current_T392 PACKED; /* 32h:  */
  403. unsigned short current_N392 PACKED; /* 34h:  */
  404. unsigned short current_N393 PACKED; /* 36h:  */
  405. } fr_link_stat_t;
  406. /*----------------------------------------------------------------------------
  407.  * DLCI statistics.
  408.  * This structure is returned by the FR_READ_STATISTICS command when
  409.  * dlci != 0.
  410.  */
  411. typedef struct fr_dlci_stat
  412. {
  413. unsigned long tx_frames PACKED; /* 00h:  */
  414. unsigned long tx_bytes PACKED; /* 04h:  */
  415. unsigned long rx_frames PACKED; /* 08h:  */
  416. unsigned long rx_bytes PACKED; /* 0Ch:  */
  417. unsigned long rx_dropped PACKED; /* 10h:  */
  418. unsigned long rx_inactive PACKED; /* 14h:  */
  419. unsigned long rx_exceed_CIR PACKED; /* 18h:  */
  420. unsigned long rx_DE_set PACKED; /* 1Ch:  */
  421. unsigned long tx_throughput PACKED; /* 20h:  */
  422. unsigned long tx_calc_timer PACKED; /* 24h:  */
  423. unsigned long rx_throughput PACKED; /* 28h:  */
  424. unsigned long rx_calc_timer PACKED; /* 2Ch:  */
  425. } fr_dlci_stat_t;
  426. /*----------------------------------------------------------------------------
  427.  * Communications error statistics.
  428.  * This structure is returned by the FR_READ_ERROR_STATS command.
  429.  */
  430. typedef struct fr_comm_stat
  431. {
  432. unsigned char rx_overruns PACKED; /* 00h:  */
  433. unsigned char rx_bad_crc PACKED; /* 01h:  */
  434. unsigned char rx_aborts PACKED; /* 02h:  */
  435. unsigned char rx_too_long PACKED; /* 03h:  */
  436. unsigned char tx_aborts PACKED; /* 04h:  */
  437. unsigned char tx_underruns PACKED; /* 05h:  */
  438. unsigned char tx_missed_undr PACKED; /* 06h:  */
  439. unsigned char dcd_dropped PACKED; /* 07h:  */
  440. unsigned char cts_dropped PACKED; /* 08h:  */
  441. } fr_comm_stat_t;
  442. /*----------------------------------------------------------------------------
  443.  * Defines for the FR_ISSUE_IS_FRAME command.
  444.  */
  445. #define FR_ISF_LVE 2 /* issue Link Verification Enquiry */
  446. #define FR_ISF_FSE 3 /* issue Full Status Enquiry */
  447. /*----------------------------------------------------------------------------
  448.  * Frame Relay ARP Header -- Used for Dynamic route creation with InvARP 
  449.  */
  450. typedef struct arphdr_fr
  451. {
  452. unsigned short ar_hrd PACKED; /* format of hardware addr */
  453. unsigned short ar_pro PACKED; /* format of protocol addr */
  454. unsigned char  ar_hln PACKED; /* length of hardware addr */
  455. unsigned char  ar_pln PACKED; /* length of protocol addr */
  456. unsigned short ar_op  PACKED; /* ARP opcode    */
  457. unsigned short ar_sha PACKED; /* Sender DLCI addr 2 bytes */
  458. unsigned long  ar_sip PACKED; /* Sender IP   addr 4 bytes */
  459. unsigned short ar_tha PACKED; /* Target DLCI addr 2 bytes */
  460. unsigned long  ar_tip PACKED; /* Target IP   addr 4 bytes */
  461. } arphdr_fr_t;
  462. /*----------------------------------------------------------------------------
  463.  * Frame Relay RFC 1490 SNAP Header -- Used to check for ARP packets
  464.  */
  465. typedef struct arphdr_1490
  466. {
  467. unsigned char control PACKED; /* UI, etc...  */
  468. unsigned char pad     PACKED; /* Pad */
  469. unsigned char NLPID   PACKED; /* SNAP */
  470. unsigned char OUI[3]  PACKED; /* Ethertype, etc... */
  471. unsigned short PID    PACKED; /* ARP, IP, etc... */
  472. }  arphdr_1490_t;
  473. /* UDP/IP packet (for UDP management) layout */
  474. /* The embedded control block for UDP mgmt
  475.    This is essentially a mailbox structure, without the large data field */
  476. typedef struct {
  477.         unsigned char  opp_flag PACKED; /* the opp flag */
  478.         unsigned char  command  PACKED; /* command code */
  479.         unsigned short length   PACKED; /* length of data buffer */
  480.         unsigned char  result   PACKED; /* return code */
  481.         unsigned short dlci     PACKED; /* DLCI number */
  482.         unsigned char  attr     PACKED; /* FECN, BECN, DE and C/R bits */
  483.         unsigned short rxlost1  PACKED; /* frames discarded at int. level */
  484.         unsigned long  rxlost2  PACKED; /* frames discarded at app. level */
  485.         unsigned char  rsrv[2]  PACKED; /* reserved for future use */
  486. } cblock_t;
  487. /* UDP management packet layout (data area of ip packet) */
  488. typedef struct {
  489.         unsigned char   control                 PACKED;
  490.         unsigned char   NLPID                   PACKED;
  491. } fr_encap_hdr_t;
  492. typedef struct {
  493. // fr_encap_hdr_t  fr_encap_hdr PACKED;
  494. ip_pkt_t  ip_pkt PACKED;
  495. udp_pkt_t udp_pkt PACKED;
  496. wp_mgmt_t  wp_mgmt        PACKED;
  497.         cblock_t                cblock          PACKED;
  498.         unsigned char           data[4080]      PACKED;
  499. } fr_udp_pkt_t;
  500. /* valid ip_protocol for UDP management */
  501. #define UDPMGMT_UDP_PROTOCOL 0x11
  502. #define UDPMGMT_FPIPE_SIGNATURE         "FPIPE8ND"
  503. #define UDPMGMT_DRVRSTATS_SIGNATURE     "DRVSTATS"
  504. /* values for request/reply byte */
  505. #define UDPMGMT_REQUEST 0x01
  506. #define UDPMGMT_REPLY 0x02
  507. #define UDP_OFFSET 12
  508. typedef struct {
  509.         unsigned long if_send_entry;
  510.         unsigned long if_send_skb_null;
  511.         unsigned long if_send_broadcast;
  512.         unsigned long if_send_multicast;
  513.         unsigned long if_send_critical_ISR;
  514.         unsigned long if_send_critical_non_ISR;
  515.         unsigned long if_send_busy;
  516.         unsigned long if_send_busy_timeout;
  517. unsigned long if_send_DRVSTATS_request;
  518.         unsigned long if_send_FPIPE_request;
  519.         unsigned long if_send_wan_disconnected;
  520.         unsigned long if_send_dlci_disconnected;
  521.         unsigned long if_send_no_bfrs;
  522.         unsigned long if_send_adptr_bfrs_full;
  523.         unsigned long if_send_bfrs_passed_to_adptr;
  524. unsigned long if_send_consec_send_fail;
  525. } drvstats_if_send_t; 
  526. typedef struct {
  527.         unsigned long rx_intr_no_socket;
  528.         unsigned long rx_intr_dev_not_started;
  529.         unsigned long rx_intr_DRVSTATS_request;
  530.         unsigned long rx_intr_FPIPE_request;
  531.         unsigned long rx_intr_bfr_not_passed_to_stack;
  532.         unsigned long rx_intr_bfr_passed_to_stack;
  533.  } drvstats_rx_intr_t;
  534. typedef struct {
  535.         unsigned long UDP_FPIPE_mgmt_kmalloc_err;
  536.         unsigned long UDP_FPIPE_mgmt_direction_err;
  537.         unsigned long UDP_FPIPE_mgmt_adptr_type_err;
  538.         unsigned long UDP_FPIPE_mgmt_adptr_cmnd_OK;
  539.         unsigned long UDP_FPIPE_mgmt_adptr_cmnd_timeout;
  540.         unsigned long UDP_FPIPE_mgmt_adptr_send_passed;
  541.         unsigned long UDP_FPIPE_mgmt_adptr_send_failed;
  542.         unsigned long UDP_FPIPE_mgmt_not_passed_to_stack;
  543.         unsigned long UDP_FPIPE_mgmt_passed_to_stack;
  544.         unsigned long UDP_FPIPE_mgmt_no_socket;
  545.         unsigned long UDP_DRVSTATS_mgmt_kmalloc_err;
  546.         unsigned long UDP_DRVSTATS_mgmt_adptr_cmnd_OK;
  547.         unsigned long UDP_DRVSTATS_mgmt_adptr_cmnd_timeout;
  548.         unsigned long UDP_DRVSTATS_mgmt_adptr_send_passed;
  549.         unsigned long UDP_DRVSTATS_mgmt_adptr_send_failed;
  550.         unsigned long UDP_DRVSTATS_mgmt_not_passed_to_stack;
  551.         unsigned long UDP_DRVSTATS_mgmt_passed_to_stack;
  552.         unsigned long UDP_DRVSTATS_mgmt_no_socket;
  553. } drvstats_gen_t;
  554. typedef struct {
  555.         unsigned char   attr       PACKED;
  556.         unsigned short  time_stamp      PACKED;
  557.         unsigned char   reserved[13]    PACKED;
  558. } api_rx_hdr_t;
  559. typedef struct {
  560.         api_rx_hdr_t    api_rx_hdr      PACKED;
  561.         void *          data            PACKED;
  562. } api_rx_element_t;
  563. typedef struct {
  564.         unsigned char   attr            PACKED;
  565.         unsigned char   reserved[15]    PACKED;
  566. } api_tx_hdr_t;
  567. typedef struct {
  568.         api_tx_hdr_t    api_tx_hdr      PACKED;
  569.         void *          data            PACKED;
  570. } api_tx_element_t;
  571. #ifdef _MSC_
  572. #  pragma pack()
  573. #endif
  574. #endif /* _SDLA_FR_H */