wanpipe/patches/kdrivers/include/aft_core_user.h

743 lines
24 KiB
C

/* aft_core_user.h */
#ifndef __AFT_CORE_USER__
#define __AFT_CORE_USER__
/*================================================================
* Includes
*================================================================*/
# include "wanpipe_includes.h"
# include "wanpipe_debug.h"
# include "wanpipe_defines.h"
# include "wanpipe_common.h"
# include "wanpipe_cfg.h"
# include "wanpipe_wanrouter.h"
# include "wanpipe_api_iface.h"
# include "sdlasfm.h"
# include "sdla_front_end.h"
#if defined(__LINUX__)
# include "if_wanpipe.h" /* Linux SIOC_ IOCTL Calls */
#endif
#if defined(__WINDOWS__) && !defined(WAN_KERNEL)
# include <winioctl.h> /* CTL_CODE */
#endif
#define MAX_TRACE_BUFFER (MAX_LGTH_UDP_MGNT_PKT - \
sizeof(iphdr_t) - \
sizeof(udphdr_t) - \
sizeof(wan_mgmt_t) - \
sizeof(wan_trace_info_t) - \
sizeof(wan_cmd_t))
#define UDPMGMT_SIGNATURE "AFTPIPEA"
/*================================================================
* Global Sangoma Commands
*================================================================*/
#define WAN_PROTOCOL_CMD_START 0x01
#define WAN_PROTOCOL_CMD_END 0x4F
#define WAN_UDP_CMD_START WANPIPEMON_PROTOCOL_PRIVATE + 0x01
#define WAN_GET_PROTOCOL (WAN_UDP_CMD_START+0)
#define WAN_GET_PLATFORM (WAN_UDP_CMD_START+1)
#define WAN_GET_MEDIA_TYPE (WAN_UDP_CMD_START+2)
#define WAN_GET_MASTER_DEV_NAME (WAN_UDP_CMD_START+3)
#define WAN_UDP_CMD_END WANPIPEMON_PROTOCOL_PRIVATE + 0x1F
#define WANPIPEMON_DRIVER_PRIVATE WAN_UDP_CMD_END+1
#define WAN_FE_CMD_START 0x90
#define WAN_FE_CMD_END 0x9F
#define WAN_INTERFACE_CMD_START 0xA0
#define WAN_INTERFACE_CMD_END 0xAF
#define WAN_FE_UDP_CMD_START 0xB0
#define WAN_FE_UDP_CMD_END 0xBF
#define TRACE_ALL 0x00
#define TRACE_PROT 0x01
#define TRACE_DATA 0x02
/* values for request/reply byte */
#define UDPMGMT_REQUEST 0x01
#define UDPMGMT_REPLY 0x02
#define UDP_OFFSET 12
#define AFT_SERIAL_MODEM_RTS 1
#define AFT_SERIAL_MODEM_DTR 2
#define AFT_SERIAL_MODEM_CTS 4
#define AFT_SERIAL_MODEM_DCD 8
#if defined(__LINUX__)
enum {
SIOC_AFT_CUSTOMER_ID = SIOC_WANPIPE_DEVPRIVATE,
SIOC_AFT_SS7_FORCE_RX,
SIOC_WANPIPE_API
};
#endif
/* Possible error_flagRX packet errors */
enum {
WP_FIFO_ERROR_BIT,
WP_CRC_ERROR_BIT,
WP_ABORT_ERROR_BIT,
WP_FRAME_ERROR_BIT,
WP_DMA_ERROR_BIT
};
enum {
AFT_CARD_TYPE_ALL,
AFT_CARD_TYPE_GLOBAL_ISR,
AFT_CARD_TYPE_TDM_API,
AFT_CARD_TYPE_ZAP_DAHDI
};
/*================================================================
* Trace Structure
*================================================================*/
/*================================================================
* Global Sangoma Commands
*================================================================*/
#define WAN_PROTOCOL_CMD_START 0x01
#define WAN_PROTOCOL_CMD_END 0x4F
#define WAN_FE_CMD_START 0x90
#define WAN_FE_CMD_END 0x9F
#define WAN_INTERFACE_CMD_START 0xA0
#define WAN_INTERFACE_CMD_END 0xAF
#define WAN_FE_UDP_CMD_START 0xB0
#define WAN_FE_UDP_CMD_END 0xBF
#define TRACE_ALL 0x00
#define TRACE_PROT 0x01
#define TRACE_DATA 0x02
/* values for request/reply byte */
#define UDPMGMT_REQUEST 0x01
#define UDPMGMT_REPLY 0x02
#define UDP_OFFSET 12
/*================================================================
* Trace Structure
*================================================================*/
/* the line trace status element presented by the frame relay code */
typedef struct {
unsigned char flag ; /* ready flag */
unsigned short length ; /* trace length */
unsigned char rsrv0[2] ; /* reserved */
unsigned char attr ; /* trace attributes */
unsigned short tmstamp ; /* time stamp */
unsigned char rsrv1[4] ; /* reserved */
unsigned int offset ; /* buffer absolute address */
}aft_trc_el_t;
typedef struct {
unsigned char num_frames;
unsigned char ismoredata;
} wan_trace_info_t;
/*================================================================
* Statistics Structures
*================================================================*/
#pragma pack(1)
/* the operational statistics structure */
typedef struct {
/* Data frame transmission statistics */
unsigned int Data_frames_Tx_count ;
/* # of frames transmitted */
unsigned int Data_bytes_Tx_count ;
/* # of bytes transmitted */
unsigned int Data_Tx_throughput ;
/* transmit throughput */
unsigned int no_ms_for_Data_Tx_thruput_comp ;
/* millisecond time used for the Tx throughput computation */
unsigned int Tx_Data_discard_lgth_err_count ;
/* Data frame reception statistics */
unsigned int Data_frames_Rx_count ;
/* number of frames received */
unsigned int Data_bytes_Rx_count ;
/* number of bytes received */
unsigned int Data_Rx_throughput ;
/* receive throughput */
unsigned int no_ms_for_Data_Rx_thruput_comp ;
/* millisecond time used for the Rx throughput computation */
unsigned int Rx_Data_discard_short_count ;
/* received Data frames discarded (too short) */
unsigned int Rx_Data_discard_long_count ;
/* received Data frames discarded (too long) */
unsigned int Rx_Data_discard_inactive_count ;
/* received Data frames discarded (link inactive) */
/* Incomming frames with a format error statistics */
unsigned short Rx_frm_incomp_CHDLC_hdr_count ;
/* frames received of with incomplete Cisco HDLC header */
unsigned short Rx_frms_too_long_count ;
/* frames received of excessive length count */
/* CHDLC link active/inactive and loopback statistics */
unsigned short link_active_count ;
/* number of times that the link went active */
unsigned short link_inactive_modem_count ;
/* number of times that the link went inactive (modem failure) */
unsigned short link_inactive_keepalive_count ;
/* number of times that the link went inactive (keepalive failure) */
unsigned short link_looped_count ;
/* link looped count */
unsigned int Data_frames_Tx_realign_count;
} aft_op_stats_t;
typedef struct {
unsigned short Rx_overrun_err_count;
unsigned short Rx_crc_err_count ; /* receiver CRC error count */
unsigned short Rx_abort_count ; /* abort frames recvd count */
unsigned short Rx_hdlc_corrupiton; /* receiver disabled */
unsigned short Rx_pci_errors; /* missed tx underrun interrupt count */
unsigned short Rx_dma_descr_err; /*secondary-abort frames tx count */
unsigned short DCD_state_change_count ; /* DCD state change */
unsigned short CTS_state_change_count ; /* CTS state change */
unsigned short Tx_pci_errors; /* missed tx underrun interrupt count */
unsigned short Tx_dma_errors; /* missed tx underrun interrupt count */
unsigned int Tx_pci_latency; /* missed tx underrun interrupt count */
unsigned int Tx_dma_len_nonzero; /* Tx dma descriptor len not zero */
} aft_comm_err_stats_t;
typedef struct wan_if_cfg{
unsigned char usedby;
unsigned int active_ch; /* Active channels/timslots configured */
unsigned int ec_active_ch; /* Echo Canceller configured active channels/timeslots */
unsigned int cfg_active_ch; /* User specified active channel configuration */
unsigned char media;
unsigned int interface_number;
unsigned int sub_media;
unsigned char hw_coding;
unsigned int chunk_sz;
sdla_fe_cfg_t fe_cfg;
char line_mode[USED_BY_FIELD];/* HDLC, BitStream, BRI D-chan... */
}wan_if_cfg_t;
#define if_cfg_t wan_if_cfg_t
#if 0
#define IFNAMSIZ 256
#define USED_BY_FIELD 128 /* max length of the used by field */
typedef struct {
char usedby[USED_BY_FIELD];
unsigned long active_ch;
unsigned char media;
unsigned int interface_number;
unsigned int sub_media;
char line_mode[USED_BY_FIELD];/* HDLC, BitStream */
}if_cfg_t;
#endif
#pragma pack()
typedef struct global_stats
{
unsigned long isr_entry;
unsigned long isr_already_critical;
unsigned long isr_rx;
unsigned long isr_tx;
unsigned long isr_intr_test;
unsigned long isr_spurious;
unsigned long isr_enable_tx_int;
unsigned long rx_intr_corrupt_rx_bfr;
unsigned long rx_intr_on_orphaned_DLCI;
unsigned long rx_intr_dev_not_started;
unsigned long tx_intr_dev_not_started;
unsigned long poll_entry;
unsigned long poll_already_critical;
unsigned long poll_processed;
unsigned long poll_tbusy_bad_status;
unsigned long poll_host_disable_irq;
unsigned long poll_host_enable_irq;
} global_stats_t;
typedef struct if_send_stat{
unsigned long if_send_entry;
unsigned long if_send_skb_null;
unsigned long if_send_broadcast;
unsigned long if_send_multicast;
unsigned long if_send_critical_ISR;
unsigned long if_send_critical_non_ISR;
unsigned long if_send_tbusy;
unsigned long if_send_tbusy_timeout;
unsigned long if_send_PIPE_request;
unsigned long if_send_wan_disconnected;
unsigned long if_send_dlci_disconnected;
unsigned long if_send_no_bfrs;
unsigned long if_send_adptr_bfrs_full;
unsigned long if_send_bfr_passed_to_adptr;
unsigned long if_send_protocol_error;
unsigned long if_send_bfr_not_passed_to_adptr;
unsigned long if_send_tx_int_enabled;
unsigned long if_send_consec_send_fail;
} if_send_stat_t;
typedef struct rx_intr_stat{
unsigned long rx_intr_no_socket;
unsigned long rx_intr_dev_not_started;
unsigned long rx_intr_PIPE_request;
unsigned long rx_intr_bfr_not_passed_to_stack;
unsigned long rx_intr_bfr_passed_to_stack;
} rx_intr_stat_t;
typedef struct pipe_mgmt_stat{
unsigned long UDP_PIPE_mgmt_kmalloc_err;
unsigned long UDP_PIPE_mgmt_direction_err;
unsigned long UDP_PIPE_mgmt_adptr_type_err;
unsigned long UDP_PIPE_mgmt_adptr_cmnd_OK;
unsigned long UDP_PIPE_mgmt_adptr_cmnd_timeout;
unsigned long UDP_PIPE_mgmt_adptr_send_passed;
unsigned long UDP_PIPE_mgmt_adptr_send_failed;
unsigned long UDP_PIPE_mgmt_not_passed_to_stack;
unsigned long UDP_PIPE_mgmt_passed_to_stack;
unsigned long UDP_PIPE_mgmt_no_socket;
unsigned long UDP_PIPE_mgmt_passed_to_adptr;
} pipe_mgmt_stat_t;
typedef struct aft_driver_isr_stats {
unsigned long all;
unsigned long aft;
unsigned long non_aft;
unsigned long fe;
unsigned long fe_run;
unsigned long tdm;
unsigned long tdm_run;
unsigned long tdm_run_span;
unsigned long dma;
unsigned long dma_rx;
unsigned long dma_tx;
unsigned long fifo;
unsigned long fifo_rx;
unsigned long fifo_tx;
unsigned long wdt;
unsigned long wdt_software;
unsigned long free_run;
unsigned long serial;
}aft_driver_isr_stats_t;
typedef struct aft_driver_bh_stats {
unsigned long all;
unsigned long rx;
unsigned long rx_stack;
unsigned long rx_bri_dchan;
unsigned long tx_post;
unsigned long rx_gsm_dchan;
}aft_driver_bh_stats_t;
typedef struct aft_driver_port_task_stats {
unsigned long all;
unsigned long fe_isr;
unsigned long fe_poll;
unsigned long ec;
unsigned long ec_poll;
unsigned long led;
unsigned long serial_status;
unsigned long tap_q;
unsigned long restart;
unsigned long rbs;
}aft_driver_port_task_stats_t;
#define MAX_SMA_IDX 3
typedef struct aft_driver_timing {
unsigned long max_latency;
unsigned long min_latency;
unsigned long latency;
unsigned long above_avg;
unsigned long below_avg;
unsigned long limit;
int sma_idx;
unsigned long sma[MAX_SMA_IDX];
unsigned long latency_avg;
wan_ticks_t timeout;
wan_timeval_t timing_tv;
}aft_driver_timing_t;
typedef struct aft_driver_performance_stats {
aft_driver_isr_stats_t isr;
aft_driver_bh_stats_t bh;
aft_driver_port_task_stats_t port_task;
aft_driver_timing_t aft_isr_latency;
aft_driver_timing_t kernel_isr_latency;
aft_driver_timing_t port_task_latency;
aft_driver_timing_t bh_latency;
} aft_driver_performance_stats_t;
#define AFT_PERF_STAT_INC(card,type,var) if (card->aft_perf_stats_enable) card->aft_perf_stats.type.var++
#if defined(__WINDOWS__)
///////////////////////////////////////////////////////////////////////////////////////
// Command to send data:
// Input : ptr to TX_DATA_STRUCT structure
// Output: ptr to TX_DATA_STRUCT structure (may be same as input)
// Uses Direct I/O (Irp->MdlAddress). Blocking call on device handle
// to avoid busy loops.
// Note: Since this command blocks all further I/O requests, it must be done
// on a separate device handle, in a dedicated execution thread.
//
// This command is thread safe.
#define IoctlWriteCommand \
CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_WRITE, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
// The same as IoctlWriteCommand, but will NOT block.
#define IoctlWriteCommandNonBlocking \
CTL_CODE(FILE_DEVICE_UNKNOWN, WANPIPE_IOCTL_WRITE_NON_BLOCKING, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
///////////////////////////////////////////////////////////////////////////////////////
// Command to receive data:
// Input : NULL
// Output: ptr to RX_DATA_STRUCT structure
// Uses Direct I/O (Irp->MdlAddress). Blocking call on device handle
// to avoid busy loops.
// Note: Since this command blocks all further I/O requests, it must be done
// on a separate device handle, in a dedicated execution thread.
//
// This command is thread safe.
#define IoctlReadCommand \
CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_READ, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
// The same as IoctlReadCommand, but will NOT block.
#define IoctlReadCommandNonBlocking \
CTL_CODE(FILE_DEVICE_UNKNOWN, WANPIPE_IOCTL_READ_NON_BLOCKING, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
///////////////////////////////////////////////////////////////////////////////////////
// Command to control TDM API:
// Input : ptr to wanpipe_tdm_api_cmd_t structure.
// Output: ptr to wanpipe_tdm_api_cmd_t structure (may be same as input)
// Uses Buffered I/O, Synchronous call.
// This command is thread safe.
#define IoctlTdmApiCommand \
CTL_CODE(FILE_DEVICE_UNKNOWN, WANPIPE_IOCTL_TDM_API, METHOD_BUFFERED, FILE_ANY_ACCESS)
///////////////////////////////////////////////////////////////////////////////////////
// Command to get T1/E1/56K alarms, activate/deactivate line test modes...
// Input : ptr to wan_udp_hdr_t structure.
// Output: ptr to wan_udp_hdr_t structure (may be same as input)
// Uses Buffered I/O, Synchronous call.
// This command is thread safe.
#define IoctlManagementCommand \
CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_MGMT, METHOD_BUFFERED, FILE_ANY_ACCESS)
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// Command to poll API for Data/Events:
// Input : API_POLL_STRUCT
// Output: ptr to API_POLL_STRUCT structure
// Uses Direct I/O (Irp->MdlAddress).
// Call will block, until:
// 1: Out-of-band (OOB) event: link state change (TE1 connected/disconnected)
// 2: Rx data available
// 3: Interface able to Tx (transmit buffer available)
// 4: Telephony Event: DTMF, On/Off hook
//
// Command can be used for writing single-thread applications.
//
// Note: Since this command blocks all further I/O requests, it must be done
// on a separate device handle, in a dedicated execution thread.
//
// This command is thread safe.
#define IoctlApiPoll \
CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_API_POLL, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
//Definitions for 'poll_events_bitmap' and 'user_flags_bitmap' in API_POLL_STRUCT:
#define POLL_EVENT_RX_DATA (1)
#define POLL_EVENT_TX_READY (1 << 1)
#define POLL_EVENT_OOB (1 << 2) /* Out-Of-Band events such as Line Connect/Disconnect,
RBS change, Ring, On/Off Hook, DTMF... */
#if !defined(WP_PREVENT_WINSOCK_NAME_CONFLICT)
/* Old definitions - conflicting with winsock2.h.
* Kept for backward compatibility. */
# define POLLIN POLL_EVENT_RX_DATA
# define POLLOUT POLL_EVENT_TX_READY
# define POLLPRI POLL_EVENT_OOB
# define POLLHUP POLLPRI
# define POLLERR POLLPRI
# define POLLWRNORM 0
# define POLLRDNORM 0
#endif
/* New definitions. Should be used in all new code. */
#define WP_POLLIN POLL_EVENT_RX_DATA
#define WP_POLLOUT POLL_EVENT_TX_READY
#define WP_POLLPRI POLL_EVENT_OOB
#define WP_POLLHUP WP_POLLPRI
#define WP_POLLERR WP_POLLPRI
#define WP_POLLWRNORM 0
#define WP_POLLRDNORM 0
///////////////////////////////////////////////////////////////////////////////////////
// Command to Set data in Idle Transmit buffer of the driver:
// Input : ptr to TX_DATA_STRUCT structure
// Output: ptr to TX_DATA_STRUCT structure (may be same as input)
// Uses Direct I/O (Irp->MdlAddress). Synchronous call.
//
#define IoctlSetIdleTxBuffer \
CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_SET_IDLE_TX_BUFFER, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
///////////////////////////////////////////////////////////////////////////////////////
// This IOCTL for use only by Sangoma Technical Support
// Command to control cdev:
// Input : ptr to wanpipe_tdm_api_cmd_t structure.
// Output: ptr to wanpipe_tdm_api_cmd_t structure (may be same as input)
// Uses Buffered I/O, Synchronous call.
// This command is thread safe.
#define IoctlCdevControlCommand \
CTL_CODE(FILE_DEVICE_UNKNOWN, WANPIPE_IOCTL_CDEV_CTRL, METHOD_BUFFERED, FILE_ANY_ACCESS)
///////////////////////////////////////////////////////////////////////////////////////
// Command to Set a "Shared Event" which can be used for
// WaitForSingleObject() and WaitForMultipleObjects() functions before
// calling the blocking IoctlReadCommand. Once the "Shared Object" is set
// to signalled state by the API driver, call IoctlReadCommand.
//
// Input : ptr to REGISTER_EVENT structure
// Output: ptr to REGISTER_EVENT structure (may be same as input)
// Uses Direct I/O (Irp->MdlAddress). Synchronous call.
//
typedef struct _REGISTER_EVENT
{
u_int8_t operation_status; // operation completion status
u_int32_t user_flags_bitmap; // bitmap of events API user is interested to
// receive when hEvent is signalled
HANDLE *WP_POINTER_64 hEvent;
} REGISTER_EVENT , *PREGISTER_EVENT ;
#define SIZEOF_REGISTER_EVENT sizeof(REGISTER_EVENT)
#define IoctlSetSharedEvent \
CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_SET_SHARED_EVENT, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
///////////////////////////////////////////////////////////////////////////////////////
//this IOCTL is for 'Port', for example: WANPIPE1.
#define IoctlPortConfigurationCommand \
CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_PORT_CONFIG, METHOD_BUFFERED, FILE_ANY_ACCESS)
///////////////////////////////////////////////////////////////////////////////////////
//this IOCTL is for 'Port', for example: WANPIPE1.
#define IoctlPortManagementCommand \
CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_PORT_MGMT, METHOD_BUFFERED, FILE_ANY_ACCESS)
///////////////////////////////////////////////////////////////////////////////////////
#define WP_CMD_TIMEOUT 1000 //in milliseconds, or 1 second.
#define MGMT_CMD_TIMEOUT WP_CMD_TIMEOUT
#define WRITE_CMD_TIMEOUT WP_CMD_TIMEOUT
#define READ_CMD_TIMEOUT WP_CMD_TIMEOUT
#if defined(__KERNEL__)
#define PRINT_BITMAP DEBUG_TDMAPI
#else
#define PRINT_BITMAP printf
#endif
static void print_poll_event_bitmap(u_int32_t bitmap)
{
char known_event = 0;
if(bitmap & WP_POLLIN){
known_event = 1;
PRINT_BITMAP("WP_POLLIN\n");
}
if(bitmap & WP_POLLOUT){
known_event = 1;
PRINT_BITMAP("WP_POLLOUT\n");
}
if(bitmap & WP_POLLPRI){
known_event = 1;
PRINT_BITMAP("WP_POLLPRI\n");
}
if(known_event == 0){
PRINT_BITMAP("Unknown event!\n");
}
}
///////////////////////////////////////////////////////////////////////////////////////
// Command to control Logger API:
// Input : ptr to wp_logger_cmd_t structure.
// Output: ptr to wp_logger_cmd_t structure (same as input)
// Uses Buffered I/O, Synchronous call.
// This command is thread safe.
#define IoctlLoggerApiCommand \
CTL_CODE(FILE_DEVICE_UNKNOWN, WANPIPE_IOCTL_LOGGER_CMD, METHOD_BUFFERED, FILE_ANY_ACCESS)
#else /* __WINDOWS__ */
# define WP_POLLIN POLLIN
# define WP_POLLOUT POLLOUT
# define WP_POLLPRI POLLPRI
# define WP_POLLHUP POLLHUP
# define WP_POLLERR POLLERR
# define WP_POLLWRNORM POLLWRNORM
# define WP_POLLRDNORM POLLRDNORM
#endif
/*
#define MEM_TEST_BUFFER_LEN 100
typedef struct _user_buff{
char *user_buff_ptr;
int user_buff_length;
}user_buff_t;
*/
typedef struct _rbs_management{
int channel;
unsigned char ABCD_bits;
}rbs_management_t;
// Command codes for IoctlPortManagementCommand():
enum {
GET_HARDWARE_INFO=1, //Fill in "hardware_info_t" structure.
STOP_PORT, //Stop Port. Prior to calling this command all 'handles'
//to communication interfaces such as WANPIPE1_IF0 must
//be closed using CloseHandle() system call.
START_PORT_VOLATILE_CONFIG, //Start Port. Use configuration stored in a Port's Driver memory buffer.
//This command runs faster than START_PORT_REGISTRY_CFG.
//Recommended for use if Port is restarted *a lot*.
START_PORT_REGISTRY_CONFIG, //Start Port. Use configuration stored in the Port's Registry key.
//This command runs slower than START_PORT_VOLATILE_CFG.
//Recommended for use if Port is *not* restarted often (most cases).
GET_DRIVER_VERSION, //Fill in "DRIVER_VERSION" structure.
GET_PORT_OPERATIONAL_STATS, //Fill in "port_stats_t" structure.
FLUSH_PORT_OPERATIONAL_STATS, //Reset port's statistics counters in API driver.
WANPIPE_HARDWARE_RESCAN /* Re scan the PCI & USB bus for sangoma hardware */
};
/* port statistics for low-level debugging and techsupport */
typedef struct {
unsigned int rx_fifo_interrupt_counter;/* receive fifo error interrupt counter (total for all channels groups) */
unsigned int tx_fifo_interrupt_counter;/* transmit fifo error interrupt counter (total for all channels groups)*/
unsigned int fifo_err_interrupt_counter;/* total number of fifo error interrupts */
unsigned int chip_security_interrupt_counter;/* chip security 'bit set' counter */
unsigned int front_end_interrupt_counter;
unsigned int isr_entry_counter;/* Interrupt Service Routine entry counter */
unsigned int recognized_interrupt_counter;/* interrupt was generated by this port */
unsigned int unrecognized_interrupt_counter;/* caused by interrupt sharing with other ports and cards */
unsigned int isr_critical_flag_set_counter;
unsigned int isr_hwec_poll_counter;
unsigned int wdt_interrupt_counter;
unsigned int dma_interrupt_counter;/* DMA for data complete interrupt counter */
unsigned int hwec_chip_security_interrupt_counter;/* hwec chip security 'bit set' counter */
unsigned int synch_loss_with_fe_chip_interrupt_counter;
}port_stats_t;
#define CARD_SERIAL_NUMBER_LENGTH 64
// data structure for GET_HARDWARE_INFO command
typedef struct {
int card_model; /* A101/102/104/108/200... */
int firmware_version;
int pci_bus_number;
int pci_slot_number;
/* Number of HW Echo Canceller channels.
Zero means HW Echo Canceller not installed the card. */
int max_hw_ec_chans;
/* Port's number on a card
For T1/E1: Indicates FE_LINE number starting from 1
For Analog: Always set to 1. (Not used) (use fxo/fxs map instead)
For BRI: Indicats module number starting from 1
For S514: Indicates Primary or Secondary Port
*/
int port_number;
char serial_number[CARD_SERIAL_NUMBER_LENGTH]; /* Not implemented, for future use. */
unsigned int chans_map; /* bitmap of available TDM slots */
unsigned int fxo_map; /* bitmap of available fxo TDM slots, if analog port */
unsigned int fxs_map; /* bitmap of available fxs TDM slots, if analog port */
int max_chans_num; /* max number of TDM slots */
int bri_modtype; /* which BRI type (MOD_TYPE_NT, MOD_TYPE_TE), if BRI port */
}hardware_info_t;
typedef struct{
int wanpipe_number; /* One based wanpipe number, corresponds to wanpipe name,
* for example, WANPIPE1, WANPIPE2... */
hardware_info_t hardware_info;
}wanpipe_instance_info_t;
///////////////////////////////////////////////////////////////////////////////////////
//Structure used with IoctlPortManagementCommand
#define PORT_MGMT_MAX_DATA_SIZE 8188
typedef struct {
unsigned int command_code; /* Management Command Code */
unsigned int operation_status; /* operation completion status */
unsigned short port_no; /* port number */
unsigned char data[PORT_MGMT_MAX_DATA_SIZE]; /* data buffer passed from/to caller */
}port_management_struct_t;
// Commands for IoctlPortConfigurationCommand().
// Used together with 'port_cfg_t' from wanpipe_cfg.h
enum {
GET_PORT_VOLATILE_CONFIG=1, //Get current Port configuration stored in a Port's Driver memory buffer.
SET_PORT_VOLATILE_CONFIG, //Set new Port configuration in a Port's Driver memory buffer.
//Prior to using this command Port must be stopped with STOP_PORT command.
//This command will not update Port's Property Pages in the Device Manager.
//Recommended for use if Port is restarted *a lot*.
};
#if defined(__WINDOWS__)
static wan_driver_version_t drv_version = { WANPIPE_VERSION_MAJOR,
WANPIPE_VERSION_MINOR,
WANPIPE_VERSION_MINOR1,
WANPIPE_VERSION_MINOR2
};
#endif
#endif