summaryrefslogtreecommitdiffstats
path: root/drivers/isdn/eicon/adapter.h
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-08-28 22:00:09 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-08-28 22:00:09 +0000
commit1a1d77dd589de5a567fa95e36aa6999c704ceca4 (patch)
tree141e31f89f18b9fe0831f31852e0435ceaccafc5 /drivers/isdn/eicon/adapter.h
parentfb9c690a18b3d66925a65b17441c37fa14d4370b (diff)
Merge with 2.4.0-test7.
Diffstat (limited to 'drivers/isdn/eicon/adapter.h')
-rw-r--r--drivers/isdn/eicon/adapter.h265
1 files changed, 265 insertions, 0 deletions
diff --git a/drivers/isdn/eicon/adapter.h b/drivers/isdn/eicon/adapter.h
new file mode 100644
index 000000000..cabba68be
--- /dev/null
+++ b/drivers/isdn/eicon/adapter.h
@@ -0,0 +1,265 @@
+
+/*
+ *
+ * Copyright (C) Eicon Technology Corporation, 2000.
+ *
+ * This source file is supplied for the exclusive use with Eicon
+ * Technology Corporation's range of DIVA Server Adapters.
+ *
+ * Eicon File Revision : 1.7
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+
+/* Main internal include file for Diva Server driver */
+
+#if !defined(ADAPTER_H)
+#define ADAPTER_H
+
+#include "sys.h"
+#include "idi.h"
+#include "divas.h"
+#undef ID_MASK
+#include "pc.h"
+
+#define XMOREC 0x1f
+#define XMOREF 0x20
+#define XBUSY 0x40
+#define RMORE 0x80
+
+ /* structure for all information we have to keep on a per */
+ /* adapater basis */
+
+typedef struct adapter_s ADAPTER;
+
+struct adapter_s {
+ void * io;
+
+ byte IdTable[256];
+ byte ReadyInt;
+
+ byte (* ram_in)(ADAPTER * a, void * adr);
+ word (* ram_inw)(ADAPTER * a, void * adr);
+ void (* ram_in_buffer)(ADAPTER * a, void * adr, void * P, word length);
+ void (* ram_look_ahead)(ADAPTER * a, PBUFFER * RBuffer, ENTITY * e);
+
+ void (* ram_out)(ADAPTER * a, void * adr, byte data);
+ void (* ram_outw)(ADAPTER * a, void * adr, word data);
+ void (* ram_out_buffer)(ADAPTER * a, void * adr, void * P, word length);
+
+ void (* ram_inc)(ADAPTER * a, void * adr);
+};
+
+typedef struct card card_t;
+
+typedef int card_load_fn_t(card_t *card, dia_load_t *load);
+typedef int card_config_fn_t(card_t *card, dia_config_t *config);
+typedef int card_start_fn_t(card_t *card, byte *channels);
+typedef int card_reset_fn_t(card_t *card);
+typedef int card_mem_get_fn_t(card_t *card, mem_block_t *mem_block);
+
+#define MAX_PENTITIES 256 /* Number of entities primary adapter */
+#define MAX_ENTITIES 16 /* Number of entities standard adapter */
+
+typedef struct e_info_s E_INFO;
+
+struct e_info_s
+{
+ ENTITY *e; /* entity pointer */
+ byte next; /* chaining index */
+ word assign_ref; /* assign reference */
+};
+
+/* DIVA card info (details hidden from user) */
+
+typedef struct ux_diva_card_s ux_diva_card_t;
+
+/* card info */
+
+struct card
+{
+ ADAPTER a; /* per-adapter information */
+ dia_card_t cfg; /* card configuration */
+ int state; /* State of the adapter */
+ dword serial_no; /* serial number */
+ int test_int_pend; /* set for interrupt testing */
+ ux_diva_card_t *hw; /* O/S-specific handle */
+ card_reset_fn_t *card_reset; /* call this to reset card */
+ card_load_fn_t *card_load; /* call this to load card */
+ card_config_fn_t *card_config; /* call this to config card */
+ card_start_fn_t *card_start; /* call this to start card */
+ card_mem_get_fn_t *card_mem_get; /* call this to get card memory */
+ E_INFO *e_tbl; /* table of ENTITY pointers */
+ byte e_head; /* list of active ENTITIES */
+ byte e_tail; /* list of active ENTITIES */
+ int e_count; /* # of active ENTITIES */
+ int e_max; /* total # of ENTITIES */
+ byte assign; /* assign queue entry */
+ PBUFFER RBuffer; /* Copy of receive lookahead buffer */
+ int log_types; /* bit-mask of active logs */
+ word xlog_offset; /* offset to XLOG buffer on card */
+ void (*out)(ADAPTER *a);
+ byte (*dpc)(ADAPTER * a);
+ byte (*test_int)(ADAPTER * a);
+ void (*clear_int)(ADAPTER * a);
+ void (*reset_int)(card_t *c);
+ int is_live;
+
+ int (*card_isr)(card_t *card);
+
+ int int_pend; /* interrupt pending */
+ long interrupt_reentered;
+ long dpc_reentered;
+ int set_xlog_request;
+
+} ;
+
+/* card information */
+
+#define MAX_CARDS 20 /* max number of cards on a system */
+
+extern
+card_t DivasCards[];
+
+extern
+int DivasCardNext;
+
+extern
+dia_config_t DivasCardConfigs[];
+
+extern
+byte DivasFlavourConfig[];
+
+/*------------------------------------------------------------------*/
+/* public functions of IDI common code */
+/*------------------------------------------------------------------*/
+
+void DivasOut(ADAPTER * a);
+byte DivasDpc(ADAPTER * a);
+byte DivasTestInt(ADAPTER * a);
+void DivasClearInt(ADAPTER * a);
+
+/*------------------------------------------------------------------*/
+/* public functions of configuration platform-specific code */
+/*------------------------------------------------------------------*/
+
+int DivasConfigGet(dia_card_t *card);
+
+/*------------------------------------------------------------------*/
+/* public functions of LOG related code */
+/*------------------------------------------------------------------*/
+
+void DivasXlogReq(int card_num);
+int DivasXlogRetrieve(card_t *card);
+void DivasLog(dia_log_t *log);
+void DivasLogIdi(card_t *card, ENTITY *e, int request);
+
+/*------------------------------------------------------------------*/
+/* public functions to initialise cards for each type supported */
+/*------------------------------------------------------------------*/
+
+int DivasPriInit(card_t *card, dia_card_t *cfg);
+
+int DivasBriInit(card_t *card, dia_card_t *cfg);
+int Divas4BriInit(card_t *card, dia_card_t *cfg);
+void DivasBriPatch(card_t *card);
+
+/*------------------------------------------------------------------*/
+/* public functions of log common code */
+/*------------------------------------------------------------------*/
+
+extern char *DivasLogFifoRead(void);
+extern void DivasLogFifoWrite(char *entry, int length);
+extern int DivasLogFifoEmpty(void);
+extern int DivasLogFifoFull(void);
+extern void DivasLogAdd(void *buffer, int length);
+
+/*------------------------------------------------------------------*/
+/* public functions of misc. platform-specific code */
+/*------------------------------------------------------------------*/
+
+int DivasDpcSchedule(void);
+void DivasDoDpc(void *);
+void DivasDoRequestDpc(void *pData);
+int DivasScheduleRequestDpc(void);
+
+/* table of IDI request functions */
+
+extern
+IDI_CALL DivasIdiRequest[];
+
+/*
+ * intialisation entry point
+ */
+
+int DivasInit(void);
+
+/*
+ * Get information on the number and type of cards present
+ */
+
+extern
+int DivasCardsDiscover(void);
+
+/*
+ * initialise a new card
+ */
+
+int DivasCardNew(dia_card_t *card);
+
+/*
+ * configure specified card
+ */
+
+int DivasCardConfig(dia_config_t *config);
+
+/*
+ * load specified binary code onto card
+ */
+
+int DivasCardLoad(dia_load_t *load);
+
+/*
+ * start specified card running
+ */
+
+int DivasCardStart(int card_id);
+
+/*
+ * ISR for card
+ * Returns 0 if specified card was interrupting
+ */
+
+int DivasIsr(void *arg);
+
+/*
+ * Get number of active cards
+ */
+
+int DivasGetNum(void);
+
+/*
+ * Get list of active cards
+ */
+
+int DivasGetList(dia_card_list_t *card_list);
+
+/* definitions common to several card types */
+
+#define DIVAS_SHARED_OFFSET (0x1000)
+
+#endif /* ADAPTER_H */