Annotation of sys/dev/pci/if_sandrv.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: if_sandrv.h,v 1.4 2005/04/01 21:42:36 canacar Exp $ */
! 2:
! 3: /*-
! 4: * Copyright (c) 2001-2004 Sangoma Technologies (SAN)
! 5: * All rights reserved. www.sangoma.com
! 6: *
! 7: * This code is written by Alex Feldman <al.feldman@sangoma.com> for SAN.
! 8: *
! 9: * Redistribution and use in source and binary forms, with or without
! 10: * modification, are permitted provided that the following conditions
! 11: * are met:
! 12: * 1. Redistributions of source code must retain the above copyright
! 13: * notice, this list of conditions and the following disclaimer.
! 14: * 2. Redistributions in binary form must reproduce the above
! 15: * copyright notice, this list of conditions and the following disclaimer
! 16: * in the documentation and/or other materials provided with the
! 17: * distribution.
! 18: * 3. Neither the name of Sangoma Technologies nor the names of its
! 19: * contributors may be used to endorse or promote products derived
! 20: * from this software without specific prior written permission.
! 21: *
! 22: * THIS SOFTWARE IS PROVIDED BY SANGOMA TECHNOLOGIES AND CONTRIBUTORS
! 23: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! 24: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
! 25: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
! 26: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! 27: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
! 28: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
! 29: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! 30: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
! 31: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
! 32: * THE POSSIBILITY OF SUCH DAMAGE.
! 33: */
! 34:
! 35: #ifndef __IF_SANDRV_H
! 36: # define __IF_SANDRV_H
! 37:
! 38: #ifdef __SDLADRV__
! 39: # define EXTERN
! 40: #else
! 41: # define EXTERN extern
! 42: #endif
! 43:
! 44:
! 45:
! 46: #define WAN_MAILBOX_SIZE 16
! 47: #define WAN_MAX_DATA_SIZE 2032
! 48: #pragma pack(1)
! 49: typedef struct {
! 50: union {
! 51: struct {
! 52: unsigned char opp_flag;
! 53: unsigned char command;
! 54: unsigned short data_len;
! 55: unsigned char return_code;
! 56: } wan_p_cmd;
! 57: unsigned char mbox[WAN_MAILBOX_SIZE];
! 58: } wan_cmd_u;
! 59: #define wan_cmd_opp_flag wan_cmd_u.wan_p_cmd.opp_flag
! 60: #define wan_cmd_command wan_cmd_u.wan_p_cmd.command
! 61: #define wan_cmd_data_len wan_cmd_u.wan_p_cmd.data_len
! 62: #define wan_cmd_return_code wan_cmd_u.wan_p_cmd.return_code
! 63: } wan_cmd_t;
! 64: #pragma pack()
! 65:
! 66: /************************************************
! 67: * GLOBAL DEFINITION FOR SANGOMA MAILBOX *
! 68: ************************************************/
! 69: #pragma pack(1)
! 70: typedef struct {
! 71: wan_cmd_t wan_cmd;
! 72: unsigned char wan_data[WAN_MAX_DATA_SIZE];
! 73: #define wan_opp_flag wan_cmd.wan_cmd_opp_flag
! 74: #define wan_command wan_cmd.wan_cmd_command
! 75: #define wan_data_len wan_cmd.wan_cmd_data_len
! 76: #define wan_return_code wan_cmd.wan_cmd_return_code
! 77: } wan_mbox_t;
! 78: #pragma pack()
! 79: #define WAN_MBOX_INIT(mbox) memset(mbox, 0, sizeof(wan_cmd_t));
! 80:
! 81:
! 82: #if defined(_KERNEL)
! 83:
! 84: /*
! 85: ******************************************************************
! 86: ** D E F I N E S **
! 87: ******************************************************************
! 88: */
! 89: #define SDLADRV_MAJOR_VER 2
! 90: #define SDLADRV_MINOR_VER 1
! 91: #define SDLA_WINDOWSIZE 0x2000 /* default dual-port memory window size */
! 92:
! 93: /* Adapter types */
! 94: #define SDLA_S508 5080
! 95: #define SDLA_S514 5140
! 96: #define SDLA_ADSL 6000
! 97: #define SDLA_AFT 7000
! 98:
! 99: #define SDLA_PRI_PORT 1
! 100: #define SDLA_SEC_PORT 2
! 101:
! 102: /* Firmware supported version */
! 103: #define SFM_VERSION 2
! 104: #define SFM_SIGNATURE "SFM - Sangoma SDLA Firmware Module"
! 105:
! 106: /* min/max */
! 107: #define SFM_IMAGE_SIZE 0x8000 /* max size of SDLA code image file */
! 108: #define SFM_DESCR_LEN 256 /* max length of description string */
! 109: #define SFM_MAX_SDLA 16 /* max number of compatible adapters */
! 110:
! 111: /* Firmware identification numbers:
! 112: * 0 .. 999 Test & Diagnostics
! 113: * 1000 .. 1999 Streaming HDLC
! 114: * 2000 .. 2999 Bisync
! 115: * 3000 .. 3999 SDLC
! 116: * 4000 .. 4999 HDLC
! 117: * 5000 .. 5999 X.25
! 118: * 6000 .. 6999 Frame Relay
! 119: * 7000 .. 7999 PPP
! 120: * 8000 .. 8999 Cisco HDLC
! 121: */
! 122: #define SFID_HDLC502 4200
! 123: #define SFID_HDLC508 4800
! 124: #define SFID_CHDLC508 8800
! 125: #define SFID_CHDLC514 8140
! 126: #define SFID_AFT 30000
! 127:
! 128: /* */
! 129: #define SDLA_MEMBASE 0x01
! 130: #define SDLA_MEMEND 0x02
! 131: #define SDLA_MEMSIZE 0x03
! 132: #define SDLA_MEMORY 0x05
! 133: #define SDLA_BASEADDR 0x06
! 134: #define SDLA_DMATAG 0x04
! 135: #define SDLA_IRQ 0x07
! 136: #define SDLA_BUS 0x08
! 137: #define SDLA_CPU 0x0A
! 138: #define SDLA_SLOT 0x0B
! 139: #define SDLA_ADAPTERTYPE 0x0C
! 140: #define SDLA_CARDTYPE 0x0D
! 141: #define SDLA_PCIEXTRAVER 0x0E
! 142:
! 143: /* S514 PCI adapter CPU numbers */
! 144: #define SDLA_MAX_CPUS 2
! 145: #define S514_CPU_A 'A'
! 146: #define S514_CPU_B 'B'
! 147: #define SDLA_CPU_A 1
! 148: #define SDLA_CPU_B 2
! 149: #define SDLA_GET_CPU(cpu_no) (cpu_no==SDLA_CPU_A)?S514_CPU_A:S514_CPU_B
! 150:
! 151: #define AFT_CORE_ID_MASK 0x00FF
! 152: #define AFT_CORE_REV_MASK 0xFF00
! 153: #define AFT_HDLC_CORE_ID 0x00 /* HDLC core */
! 154: #define AFT_ATM_CORE_ID 0x01 /* ATM core */
! 155: #define AFT_SS7_CORE_ID 0x02 /* SS7 core */
! 156:
! 157: #define XILINX_PCI_MEM_SIZE 0x2FF
! 158: #define XILINX_PCI_LATENCY 0x0000FF00
! 159:
! 160: #define XILINX_PCI_CMD_REG 0x04
! 161: #define XILINX_PCI_LATENCY_REG 0x0C
! 162:
! 163: /* Local PCI register offsets */
! 164: #if 0
! 165: #define PCI_VENDOR_ID_WORD 0x00 /* vendor ID */
! 166: #define PCI_DEVICE_ID_WORD 0x02 /* device ID */
! 167: #define PCI_SUBCLASS_ID_BYTE 0x0a /* subclass ID byte */
! 168: #endif
! 169: #define PCI_IO_BASE_DWORD 0x10 /* IO base */
! 170: #define PCI_MEM_BASE0_DWORD 0x14 /* memory base - apperture 0 */
! 171: #define PCI_MEM_BASE1_DWORD 0x18 /* memory base - apperture 1 */
! 172: #if 0
! 173: #define PCI_SUBSYS_VENDOR_WORD 0x2C /* subsystem vendor ID */
! 174: #define PCI_SUBSYS_ID_WORD 0x2E /* subsystem ID */
! 175: #define PCI_INT_LINE_BYTE 0x3C /* interrupt line */
! 176: #define PCI_INT_PIN_BYTE 0x3D /* interrupt pin */
! 177: #endif
! 178: #define PCI_MAP0_DWORD 0x40 /* PCI to local bus address 0 */
! 179: #define PCI_MAP1_DWORD 0x44 /* PCI to local bus address 1 */
! 180: #define PCI_INT_STATUS 0x48 /* interrupt status */
! 181: #define PCI_INT_CONFIG 0x4C /* interrupt configuration */
! 182:
! 183: #define PCI_DEV_SLOT_MASK 0x1F /* mask for slot numbering */
! 184: #define PCI_IRQ_NOT_ALLOCATED 0xFF /* interrupt line for no IRQ */
! 185: /* Local PCI register usage */
! 186: #define PCI_MEMORY_ENABLE 0x00000003 /* enable PCI memory */
! 187: #define PCI_CPU_A_MEM_DISABLE 0x00000002 /* disable CPU A memory */
! 188: #define PCI_CPU_B_MEM_DISABLE 0x00100002 /* disable CPU B memory */
! 189: #define PCI_ENABLE_IRQ_CPU_A 0x005A0004 /* enable IRQ for CPU A */
! 190: #define PCI_ENABLE_IRQ_CPU_B 0x005A0008 /* enable IRQ for CPU B */
! 191: #define PCI_ENABLE_IRQ_DMA0 0x01000000 /* enable IRQ for DMA 0 */
! 192: #define PCI_ENABLE_IRQ_DMA1 0x02000000 /* enable IRQ for DMA 1 */
! 193: #define PCI_DISABLE_IRQ_CPU_A 0x00000004 /* disable IRQ for CPU A */
! 194: #define PCI_DISABLE_IRQ_CPU_B 0x00000008 /* disable IRQ for CPU B */
! 195: #define PCI_DISABLE_IRQ_DMA0 0x01000000 /* disable IRQ for DMA 0 */
! 196: #define PCI_DISABLE_IRQ_DMA1 0x02000000 /* disable IRQ for DMA 1 */
! 197:
! 198: /* Setting for the Interrupt Status register */
! 199: #define IRQ_DMA0 0x01000000 /* IRQ for DMA0 */
! 200: #define IRQ_DMA1 0x02000000 /* IRQ for DMA1 */
! 201: #define IRQ_LOCAL_CPU_A 0x00000004 /* IRQ for CPU A */
! 202: #define IRQ_LOCAL_CPU_B 0x00000008 /* IRQ for CPU B */
! 203: #define IRQ_CPU_A 0x04 /* IRQ for CPU A */
! 204: #define IRQ_CPU_B 0x08 /* IRQ for CPU B */
! 205:
! 206: /* The maximum size of the S514 memory */
! 207: #define MAX_SIZEOF_S514_MEMORY (256 * 1024)
! 208:
! 209: /* S514 control register offsets within the memory address space */
! 210: #define S514_CTRL_REG_BYTE 0x80000
! 211:
! 212: /* S514 adapter control bytes */
! 213: #define S514_CPU_HALT 0x00
! 214: #define S514_CPU_START 0x01
! 215:
! 216: /* The maximum number of S514 adapters supported */
! 217: #define MAX_S514_CARDS 20
! 218:
! 219: #define WAN_CMD_OK 0 /* normal firmware return code */
! 220: #define WAN_CMD_TIMEOUT 0xFF /* firmware command timed out */
! 221:
! 222: /* signature: 'SDLA' reversed */
! 223: #define SDLAHW_MAGIC 0x414C4453L
! 224:
! 225: /*
! 226: ******************************************************************
! 227: ** M A C R O S **
! 228: ******************************************************************
! 229: */
! 230: #define AFT_CORE_ID_DECODE(core_id) \
! 231: (core_id == AFT_HDLC_CORE_ID) ? "HDLC" : \
! 232: (core_id == AFT_ATM_CORE_ID) ? "ATM" : \
! 233: (core_id == AFT_SS7_CORE_ID) ? "SS7" : \
! 234: "Unknown"
! 235: #define WAN_ASSERT(val) \
! 236: if (val){ \
! 237: log(LOG_INFO, "********** ASSERT FAILED **********\n"); \
! 238: log(LOG_INFO, "%s:%d - Critical error\n", \
! 239: __FILE__,__LINE__); \
! 240: return -EINVAL; \
! 241: }
! 242:
! 243: #define WAN_ASSERT1(val) \
! 244: if (val){ \
! 245: log(LOG_INFO, "********** ASSERT FAILED **********\n"); \
! 246: log(LOG_INFO, "%s:%d - Critical error\n", \
! 247: __FILE__,__LINE__); \
! 248: return; \
! 249: }
! 250:
! 251: #define WAN_ASSERT2(val, ret) \
! 252: if (val){ \
! 253: log(LOG_INFO, "********** ASSERT FAILED **********\n"); \
! 254: log(LOG_INFO, "%s:%d - Critical error\n", \
! 255: __FILE__,__LINE__); \
! 256: return ret; \
! 257: }
! 258:
! 259: #define SDLA_MAGIC(hw) WAN_ASSERT((hw)->magic != SDLAHW_MAGIC)
! 260: /*
! 261: ******************************************************************
! 262: ** S T R U C T U R E S **
! 263: ******************************************************************
! 264: */
! 265:
! 266: typedef struct sfm_info /* firmware module information */
! 267: {
! 268: unsigned short codeid; /* firmware ID */
! 269: unsigned short version; /* firmaware version number */
! 270: unsigned short adapter[SFM_MAX_SDLA]; /* compatible adapter types */
! 271: unsigned long memsize; /* minimum memory size */
! 272: unsigned short reserved[2]; /* reserved */
! 273: unsigned short startoffs; /* entry point offset */
! 274: unsigned short winoffs; /* dual-port memory window offset */
! 275: unsigned short codeoffs; /* code load offset */
! 276: unsigned short codesize; /* code size */
! 277: unsigned short dataoffs; /* configuration data load offset */
! 278: unsigned short datasize; /* configuration data size */
! 279: } sfm_info_t;
! 280:
! 281: typedef struct sfm /* SDLA firmware file structire */
! 282: {
! 283: char signature[80]; /* SFM file signature */
! 284: unsigned short version; /* file format version */
! 285: unsigned short checksum; /* info + image */
! 286: unsigned short reserved[6]; /* reserved */
! 287: char descr[SFM_DESCR_LEN]; /* description string */
! 288: sfm_info_t info; /* firmware module info */
! 289: unsigned char image[1]; /* code image (variable size) */
! 290: } sfm_t;
! 291:
! 292:
! 293: typedef struct sdla_hw_type_cnt
! 294: {
! 295: unsigned char AFT_adapters;
! 296: }sdla_hw_type_cnt_t;
! 297:
! 298: /****** Function Prototypes *************************************************/
! 299: extern int san_dev_attach(void*, u_int8_t*, int);
! 300:
! 301: /* Hardware interface function */
! 302: extern int sdladrv_init(void);
! 303: extern int sdladrv_exit(void);
! 304: extern int sdla_get_hw_devices(void);
! 305: extern void *sdla_get_hw_adptr_cnt(void);
! 306:
! 307: extern int sdla_setup (void*);
! 308: extern int sdla_down (void*);
! 309: extern int sdla_read_int_stat (void*, u_int32_t*);
! 310: extern int sdla_check_mismatch(void*, unsigned char);
! 311: extern int sdla_cmd (void*, unsigned long, wan_mbox_t*);
! 312: extern int sdla_getcfg(void*, int, void*);
! 313: extern int sdla_bus_write_1(void*, unsigned int, u_int8_t);
! 314: extern int sdla_bus_write_2(void*, unsigned int, u_int16_t);
! 315: extern int sdla_bus_write_4(void*, unsigned int, u_int32_t);
! 316: extern int sdla_bus_read_1(void*, unsigned int, u_int8_t*);
! 317: extern int sdla_bus_read_2(void*, unsigned int, u_int16_t*);
! 318: extern int sdla_bus_read_4(void*, unsigned int, u_int32_t*);
! 319: extern int sdla_peek (void*, unsigned long, void*, unsigned);
! 320: extern int sdla_poke (void*, unsigned long, void*, unsigned);
! 321: extern int sdla_poke_byte (void*, unsigned long, u_int8_t);
! 322: extern int sdla_set_bit (void*, unsigned long, u_int8_t);
! 323: extern int sdla_clear_bit (void*, unsigned long, u_int8_t);
! 324: extern int sdla_intr_establish(void*, int(*intr_func)(void*), void*);
! 325: extern int sdla_intr_disestablish(void*);
! 326: extern int sdla_get_hwprobe(void*, void**);
! 327: extern int sdla_get_hwcard(void*, void**);
! 328: extern int sdla_is_te1(void*);
! 329:
! 330: #endif
! 331:
! 332: #undef EXTERN
! 333: #endif /* __IF_SANDRV_H */
CVSweb