[BACK]Return to if_sandrv.h CVS log [TXT][DIR] Up to [local] / sys / dev / pci

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