150ee11fe383255db8e5c3307319d470015616f27Bob Beers#ifndef _INC_PMCC4_PRIVATE_H_
250ee11fe383255db8e5c3307319d470015616f27Bob Beers#define _INC_PMCC4_PRIVATE_H_
350ee11fe383255db8e5c3307319d470015616f27Bob Beers
450ee11fe383255db8e5c3307319d470015616f27Bob Beers/*-----------------------------------------------------------------------------
550ee11fe383255db8e5c3307319d470015616f27Bob Beers * pmcc4_private.h -
650ee11fe383255db8e5c3307319d470015616f27Bob Beers *
750ee11fe383255db8e5c3307319d470015616f27Bob Beers * Copyright (C) 2005  SBE, Inc.
850ee11fe383255db8e5c3307319d470015616f27Bob Beers *
950ee11fe383255db8e5c3307319d470015616f27Bob Beers *   This program is free software; you can redistribute it and/or modify
1050ee11fe383255db8e5c3307319d470015616f27Bob Beers *   it under the terms of the GNU General Public License as published by
1150ee11fe383255db8e5c3307319d470015616f27Bob Beers *   the Free Software Foundation; either version 2 of the License, or
1250ee11fe383255db8e5c3307319d470015616f27Bob Beers *   (at your option) any later version.
1350ee11fe383255db8e5c3307319d470015616f27Bob Beers *
1450ee11fe383255db8e5c3307319d470015616f27Bob Beers *   This program is distributed in the hope that it will be useful,
1550ee11fe383255db8e5c3307319d470015616f27Bob Beers *   but WITHOUT ANY WARRANTY; without even the implied warranty of
1650ee11fe383255db8e5c3307319d470015616f27Bob Beers *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1750ee11fe383255db8e5c3307319d470015616f27Bob Beers *   GNU General Public License for more details.
1850ee11fe383255db8e5c3307319d470015616f27Bob Beers */
1950ee11fe383255db8e5c3307319d470015616f27Bob Beers
2050ee11fe383255db8e5c3307319d470015616f27Bob Beers
2150ee11fe383255db8e5c3307319d470015616f27Bob Beers#include <linux/kernel.h>
2250ee11fe383255db8e5c3307319d470015616f27Bob Beers#include <linux/sched.h>
237c1e68ba9236ef848a715cbb60b13947b9ae7289Randy Dunlap#include <linux/semaphore.h>
2450ee11fe383255db8e5c3307319d470015616f27Bob Beers#include <linux/spinlock.h>
2550ee11fe383255db8e5c3307319d470015616f27Bob Beers#include <linux/interrupt.h>    /* support for tasklets */
2650ee11fe383255db8e5c3307319d470015616f27Bob Beers#include <linux/timer.h>        /* support for timer */
2750ee11fe383255db8e5c3307319d470015616f27Bob Beers#include <linux/workqueue.h>
2850ee11fe383255db8e5c3307319d470015616f27Bob Beers#include <linux/hdlc.h>
2950ee11fe383255db8e5c3307319d470015616f27Bob Beers
3050ee11fe383255db8e5c3307319d470015616f27Bob Beers#include "libsbew.h"
3150ee11fe383255db8e5c3307319d470015616f27Bob Beers#include "pmcc4_defs.h"
3250ee11fe383255db8e5c3307319d470015616f27Bob Beers#include "pmcc4_cpld.h"
3350ee11fe383255db8e5c3307319d470015616f27Bob Beers#include "musycc.h"
3450ee11fe383255db8e5c3307319d470015616f27Bob Beers#include "sbe_promformat.h"
3550ee11fe383255db8e5c3307319d470015616f27Bob Beers#include "comet.h"
3650ee11fe383255db8e5c3307319d470015616f27Bob Beers
3750ee11fe383255db8e5c3307319d470015616f27Bob Beers
3850ee11fe383255db8e5c3307319d470015616f27Bob Beers/* driver state */
3950ee11fe383255db8e5c3307319d470015616f27Bob Beers#define SBE_DRVR_INIT        0x0
4050ee11fe383255db8e5c3307319d470015616f27Bob Beers#define SBE_DRVR_AVAILABLE   0x69734F4E
4150ee11fe383255db8e5c3307319d470015616f27Bob Beers#define SBE_DRVR_DOWN        0x1
4250ee11fe383255db8e5c3307319d470015616f27Bob Beers
4350ee11fe383255db8e5c3307319d470015616f27Bob Beers/******************************************************************************
4450ee11fe383255db8e5c3307319d470015616f27Bob Beers * MUSYCC Message Descriptor - coupled to hardware implementation, the first
4550ee11fe383255db8e5c3307319d470015616f27Bob Beers * three u_int32 must not be reordered.
4650ee11fe383255db8e5c3307319d470015616f27Bob Beers */
4750ee11fe383255db8e5c3307319d470015616f27Bob Beers
4850ee11fe383255db8e5c3307319d470015616f27Bob Beersstruct mdesc
4950ee11fe383255db8e5c3307319d470015616f27Bob Beers{
5050ee11fe383255db8e5c3307319d470015616f27Bob Beers    volatile u_int32_t status;  /* Buffer Descriptor */
5150ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int32_t   data;           /* Data Pointer */
5250ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int32_t   next;           /* MUSYCC view of Next Pointer */
5350ee11fe383255db8e5c3307319d470015616f27Bob Beers    void       *mem_token;      /* Data */
5450ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct mdesc *snext;
5550ee11fe383255db8e5c3307319d470015616f27Bob Beers};
5650ee11fe383255db8e5c3307319d470015616f27Bob Beers
5750ee11fe383255db8e5c3307319d470015616f27Bob Beers
5850ee11fe383255db8e5c3307319d470015616f27Bob Beers/*************************************************************************
5950ee11fe383255db8e5c3307319d470015616f27Bob Beers * Private driver data structures, internal use only.
6050ee11fe383255db8e5c3307319d470015616f27Bob Beers */
6150ee11fe383255db8e5c3307319d470015616f27Bob Beers
6250ee11fe383255db8e5c3307319d470015616f27Bob Beersstruct c4_chan_info
6350ee11fe383255db8e5c3307319d470015616f27Bob Beers{
6450ee11fe383255db8e5c3307319d470015616f27Bob Beers    int         gchan;          /* channel number within group/port 0-31 */
6550ee11fe383255db8e5c3307319d470015616f27Bob Beers    int         channum;        /* absolute channel number 0-128 */
6650ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int8_t    status;
6750ee11fe383255db8e5c3307319d470015616f27Bob Beers#define TX_RECOVERY_MASK   0x0f
6850ee11fe383255db8e5c3307319d470015616f27Bob Beers#define TX_ONR_RECOVERY    0x01
6950ee11fe383255db8e5c3307319d470015616f27Bob Beers#define TX_BUFF_RECOVERY   0x02
7050ee11fe383255db8e5c3307319d470015616f27Bob Beers#define RX_RECOVERY_MASK   0xf0
7150ee11fe383255db8e5c3307319d470015616f27Bob Beers#define RX_ONR_RECOVERY    0x10
7250ee11fe383255db8e5c3307319d470015616f27Bob Beers
7350ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned char ch_start_rx;
7450ee11fe383255db8e5c3307319d470015616f27Bob Beers#define CH_START_RX_NOW    1
7550ee11fe383255db8e5c3307319d470015616f27Bob Beers#define CH_START_RX_ONR    2
7650ee11fe383255db8e5c3307319d470015616f27Bob Beers#define CH_START_RX_BUF    3
7750ee11fe383255db8e5c3307319d470015616f27Bob Beers
7850ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned char ch_start_tx;
7950ee11fe383255db8e5c3307319d470015616f27Bob Beers#define CH_START_TX_1ST    1
8050ee11fe383255db8e5c3307319d470015616f27Bob Beers#define CH_START_TX_ONR    2
8150ee11fe383255db8e5c3307319d470015616f27Bob Beers#define CH_START_TX_BUF    3
8250ee11fe383255db8e5c3307319d470015616f27Bob Beers
8350ee11fe383255db8e5c3307319d470015616f27Bob Beers    char        tx_full;        /* boolean */
8450ee11fe383255db8e5c3307319d470015616f27Bob Beers    short       txd_free;       /* count of TX Desc available */
8550ee11fe383255db8e5c3307319d470015616f27Bob Beers    short       txd_required;   /* count of TX Desc needed by mesg */
8650ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned short rxd_num;     /* must support range up to 2000 */
8750ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned short txd_num;     /* must support range up to 1000 */
8850ee11fe383255db8e5c3307319d470015616f27Bob Beers    int         rxix_irq_srv;
8950ee11fe383255db8e5c3307319d470015616f27Bob Beers
9050ee11fe383255db8e5c3307319d470015616f27Bob Beers    enum
9150ee11fe383255db8e5c3307319d470015616f27Bob Beers    {
9250ee11fe383255db8e5c3307319d470015616f27Bob Beers        UNASSIGNED,             /* AVAILABLE, NOTINUSE */
9350ee11fe383255db8e5c3307319d470015616f27Bob Beers        DOWN,                   /* ASSIGNED, NOTINUSE */
9450ee11fe383255db8e5c3307319d470015616f27Bob Beers        UP                      /* ASSIGNED and INUSE */
9550ee11fe383255db8e5c3307319d470015616f27Bob Beers    }           state;
9650ee11fe383255db8e5c3307319d470015616f27Bob Beers
9750ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct c4_port_info *up;
9850ee11fe383255db8e5c3307319d470015616f27Bob Beers    void       *user;
9950ee11fe383255db8e5c3307319d470015616f27Bob Beers
10050ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct work_struct ch_work;
10150ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct mdesc *mdt;
10250ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct mdesc *mdr;
10350ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct mdesc *txd_irq_srv;
10450ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct mdesc *txd_usr_add;
10550ee11fe383255db8e5c3307319d470015616f27Bob Beers
10650ee11fe383255db8e5c3307319d470015616f27Bob Beers#if 0
10750ee11fe383255db8e5c3307319d470015616f27Bob Beers    /*
10850ee11fe383255db8e5c3307319d470015616f27Bob Beers     * FUTURE CODE MIGHT SEPARATE TIMESLOT MAP SETUPS INTO SINGLE IOCTL and
10950ee11fe383255db8e5c3307319d470015616f27Bob Beers     * REMOVE MAPS FROM CHANNEL PARAMETER STRUCTURE
11050ee11fe383255db8e5c3307319d470015616f27Bob Beers     */
11150ee11fe383255db8e5c3307319d470015616f27Bob Beers    /*
11250ee11fe383255db8e5c3307319d470015616f27Bob Beers     * each byte in bitmask below represents one timeslot (bitmask[0] is for
11350ee11fe383255db8e5c3307319d470015616f27Bob Beers     * timeslot 0 and so on), each bit in the byte selects timeslot bits for
11450ee11fe383255db8e5c3307319d470015616f27Bob Beers     * this channel (0xff - whole timeslot, 0x7f - 56kbps mode)
11550ee11fe383255db8e5c3307319d470015616f27Bob Beers     */
11650ee11fe383255db8e5c3307319d470015616f27Bob Beers
11750ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int8_t    ts_bitmask[32];
11850ee11fe383255db8e5c3307319d470015616f27Bob Beers#endif
11950ee11fe383255db8e5c3307319d470015616f27Bob Beers    spinlock_t  ch_rxlock;
12050ee11fe383255db8e5c3307319d470015616f27Bob Beers    spinlock_t  ch_txlock;
12150ee11fe383255db8e5c3307319d470015616f27Bob Beers    atomic_t    tx_pending;
12250ee11fe383255db8e5c3307319d470015616f27Bob Beers
12350ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct sbecom_chan_stats s;
12450ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct sbecom_chan_param p;
12550ee11fe383255db8e5c3307319d470015616f27Bob Beers};
12650ee11fe383255db8e5c3307319d470015616f27Bob Beerstypedef struct c4_chan_info mch_t;
12750ee11fe383255db8e5c3307319d470015616f27Bob Beers
12850ee11fe383255db8e5c3307319d470015616f27Bob Beersstruct c4_port_info
12950ee11fe383255db8e5c3307319d470015616f27Bob Beers{
13050ee11fe383255db8e5c3307319d470015616f27Bob Beers
13150ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct musycc_globalr *reg;
13250ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct musycc_groupr *regram;
13350ee11fe383255db8e5c3307319d470015616f27Bob Beers    void       *regram_saved;   /* Original malloc value may have non-2KB
13450ee11fe383255db8e5c3307319d470015616f27Bob Beers                                 * boundary.  Need to save for use when
13550ee11fe383255db8e5c3307319d470015616f27Bob Beers                                 * freeing. */
13650ee11fe383255db8e5c3307319d470015616f27Bob Beers    comet_t    *cometbase;
13750ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct sbe_card_info *up;
13850ee11fe383255db8e5c3307319d470015616f27Bob Beers
13950ee11fe383255db8e5c3307319d470015616f27Bob Beers    /*
14050ee11fe383255db8e5c3307319d470015616f27Bob Beers     * The workqueue is used for TX restart of ONR'd channels when in
14150ee11fe383255db8e5c3307319d470015616f27Bob Beers     * Transparent mode.
14250ee11fe383255db8e5c3307319d470015616f27Bob Beers     */
14350ee11fe383255db8e5c3307319d470015616f27Bob Beers
14450ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct workqueue_struct *wq_port;   /* chan restart work queue */
14550ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct semaphore sr_sem_busy;       /* service request exclusion
14650ee11fe383255db8e5c3307319d470015616f27Bob Beers                                         * semaphore */
14750ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct semaphore sr_sem_wait;       /* service request handshake
14850ee11fe383255db8e5c3307319d470015616f27Bob Beers                                         * semaphore */
14950ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int32_t   sr_last;
15050ee11fe383255db8e5c3307319d470015616f27Bob Beers    short       openchans;
15150ee11fe383255db8e5c3307319d470015616f27Bob Beers    char        portnum;
15250ee11fe383255db8e5c3307319d470015616f27Bob Beers    char        group_is_set;   /* GROUP_INIT command issued to MUSYCC,
15350ee11fe383255db8e5c3307319d470015616f27Bob Beers                                 * otherwise SET_CHAN Ioctl fails */
15450ee11fe383255db8e5c3307319d470015616f27Bob Beers
15550ee11fe383255db8e5c3307319d470015616f27Bob Beers    mch_t      *chan[MUSYCC_NCHANS];
15650ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct sbecom_port_param p;
15750ee11fe383255db8e5c3307319d470015616f27Bob Beers
15850ee11fe383255db8e5c3307319d470015616f27Bob Beers    /*
15950ee11fe383255db8e5c3307319d470015616f27Bob Beers     * The MUSYCC timeslot mappings are maintained within the driver and are
16050ee11fe383255db8e5c3307319d470015616f27Bob Beers     * modified and reloaded as each of a group's channels are configured.
16150ee11fe383255db8e5c3307319d470015616f27Bob Beers     */
16250ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int8_t    tsm[32];        /* tsm (time slot map) */
16350ee11fe383255db8e5c3307319d470015616f27Bob Beers    int         fifomap[32];
16450ee11fe383255db8e5c3307319d470015616f27Bob Beers};
16550ee11fe383255db8e5c3307319d470015616f27Bob Beerstypedef struct c4_port_info mpi_t;
16650ee11fe383255db8e5c3307319d470015616f27Bob Beers
16750ee11fe383255db8e5c3307319d470015616f27Bob Beers
16850ee11fe383255db8e5c3307319d470015616f27Bob Beers#define COMET_OFFSET(x) (0x80000+(x)*0x10000)
16950ee11fe383255db8e5c3307319d470015616f27Bob Beers#define EEPROM_OFFSET   0xC0000
17050ee11fe383255db8e5c3307319d470015616f27Bob Beers#define ISPLD_OFFSET    0xD0000
17150ee11fe383255db8e5c3307319d470015616f27Bob Beers
17250ee11fe383255db8e5c3307319d470015616f27Bob Beers/* iSPLD control chip registers */
17350ee11fe383255db8e5c3307319d470015616f27Bob Beers#define ISPLD_MCSR  0x0
17450ee11fe383255db8e5c3307319d470015616f27Bob Beers#define ISPLD_MCLK  0x1
17550ee11fe383255db8e5c3307319d470015616f27Bob Beers#define ISPLD_LEDS  0x2
17650ee11fe383255db8e5c3307319d470015616f27Bob Beers#define ISPLD_INTR  0x3
17750ee11fe383255db8e5c3307319d470015616f27Bob Beers#define ISPLD_MAX   0x3
17850ee11fe383255db8e5c3307319d470015616f27Bob Beers
17950ee11fe383255db8e5c3307319d470015616f27Bob Beersstruct sbe_card_info
18050ee11fe383255db8e5c3307319d470015616f27Bob Beers{
18150ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct musycc_globalr *reg;
18250ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct musycc_groupr *regram;
18350ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int32_t  *iqd_p;          /* pointer to dword aligned interrupt queue
18450ee11fe383255db8e5c3307319d470015616f27Bob Beers                                 * descriptors */
18550ee11fe383255db8e5c3307319d470015616f27Bob Beers    void       *iqd_p_saved;    /* Original malloc value may have non-dword
18650ee11fe383255db8e5c3307319d470015616f27Bob Beers                                 * aligned boundary.  Need to save for use
18750ee11fe383255db8e5c3307319d470015616f27Bob Beers                                 * when freeing. */
18850ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned int iqp_headx, iqp_tailx;
18950ee11fe383255db8e5c3307319d470015616f27Bob Beers
19050ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct semaphore sem_wdbusy;/* watchdog exclusion semaphore */
19150ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct watchdog wd;         /* statically allocated watchdog structure */
19250ee11fe383255db8e5c3307319d470015616f27Bob Beers    atomic_t    bh_pending;     /* bh queued, but not yet running */
19350ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int32_t   brd_id;         /* unique PCI ID */
19450ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int16_t   hdw_bid;      /* on/board hardware ID */
19550ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned short wdcount;
19650ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned char max_port;
19750ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned char brdno;        /* our board number */
19850ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned char wd_notify;
19950ee11fe383255db8e5c3307319d470015616f27Bob Beers#define WD_NOTIFY_1TX       1
20050ee11fe383255db8e5c3307319d470015616f27Bob Beers#define WD_NOTIFY_BUF       2
20150ee11fe383255db8e5c3307319d470015616f27Bob Beers#define WD_NOTIFY_ONR       4
20250ee11fe383255db8e5c3307319d470015616f27Bob Beers    enum                        /* state as regards interrupt processing */
20350ee11fe383255db8e5c3307319d470015616f27Bob Beers    {
20450ee11fe383255db8e5c3307319d470015616f27Bob Beers        C_INIT,                 /* of-board-address not configured or are in
20550ee11fe383255db8e5c3307319d470015616f27Bob Beers                                 * process of being removed, don't access
20650ee11fe383255db8e5c3307319d470015616f27Bob Beers                                 * hardware */
20750ee11fe383255db8e5c3307319d470015616f27Bob Beers        C_IDLE,                 /* off-board-addresses are configured, but
20850ee11fe383255db8e5c3307319d470015616f27Bob Beers                                 * don't service interrupts, just clear them
20950ee11fe383255db8e5c3307319d470015616f27Bob Beers                                 * from hardware */
21050ee11fe383255db8e5c3307319d470015616f27Bob Beers        C_RUNNING               /* life is good, service away */
21150ee11fe383255db8e5c3307319d470015616f27Bob Beers    }           state;
21250ee11fe383255db8e5c3307319d470015616f27Bob Beers
21350ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct sbe_card_info *next;
21450ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int32_t  *eeprombase;     /* mapped address of board's EEPROM */
21550ee11fe383255db8e5c3307319d470015616f27Bob Beers    c4cpld_t   *cpldbase;       /* mapped address of board's CPLD hardware */
21650ee11fe383255db8e5c3307319d470015616f27Bob Beers    char       *release;        /* SBE ID string w/in sbeRelease.c */
21750ee11fe383255db8e5c3307319d470015616f27Bob Beers    void       *hdw_info;
21850ee11fe383255db8e5c3307319d470015616f27Bob Beers#ifdef CONFIG_PROC_FS
21950ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct proc_dir_entry *dir_dev;
22050ee11fe383255db8e5c3307319d470015616f27Bob Beers#endif
22150ee11fe383255db8e5c3307319d470015616f27Bob Beers
22250ee11fe383255db8e5c3307319d470015616f27Bob Beers    /* saved off interface assignments which bound a board */
22350ee11fe383255db8e5c3307319d470015616f27Bob Beers    hdlc_device *first_if;
22450ee11fe383255db8e5c3307319d470015616f27Bob Beers    hdlc_device *last_if;
22550ee11fe383255db8e5c3307319d470015616f27Bob Beers    short       first_channum, last_channum;
22650ee11fe383255db8e5c3307319d470015616f27Bob Beers
22750ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct intlog
22850ee11fe383255db8e5c3307319d470015616f27Bob Beers    {
22950ee11fe383255db8e5c3307319d470015616f27Bob Beers        u_int32_t   this_status_new;
23050ee11fe383255db8e5c3307319d470015616f27Bob Beers        u_int32_t   last_status_new;
23150ee11fe383255db8e5c3307319d470015616f27Bob Beers        u_int32_t   drvr_intr_thcount;
23250ee11fe383255db8e5c3307319d470015616f27Bob Beers        u_int32_t   drvr_intr_bhcount;
23350ee11fe383255db8e5c3307319d470015616f27Bob Beers        u_int32_t   drvr_int_failure;
23450ee11fe383255db8e5c3307319d470015616f27Bob Beers    }           intlog;
23550ee11fe383255db8e5c3307319d470015616f27Bob Beers
23650ee11fe383255db8e5c3307319d470015616f27Bob Beers    mpi_t       port[MUSYCC_NPORTS];
23750ee11fe383255db8e5c3307319d470015616f27Bob Beers    char        devname[SBE_IFACETMPL_SIZE + 1];
23850ee11fe383255db8e5c3307319d470015616f27Bob Beers    atomic_t    tx_pending;
23950ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int32_t   alarmed[4];     /* dpm211 */
24050ee11fe383255db8e5c3307319d470015616f27Bob Beers
24150ee11fe383255db8e5c3307319d470015616f27Bob Beers#if defined(SBE_ISR_TASKLET)
24250ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct tasklet_struct ci_musycc_isr_tasklet;
24350ee11fe383255db8e5c3307319d470015616f27Bob Beers#elif defined(SBE_ISR_IMMEDIATE)
24450ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct tq_struct ci_musycc_isr_tq;
24550ee11fe383255db8e5c3307319d470015616f27Bob Beers#endif
24650ee11fe383255db8e5c3307319d470015616f27Bob Beers};
24750ee11fe383255db8e5c3307319d470015616f27Bob Beerstypedef struct sbe_card_info ci_t;
24850ee11fe383255db8e5c3307319d470015616f27Bob Beers
24950ee11fe383255db8e5c3307319d470015616f27Bob Beersstruct s_hdw_info
25050ee11fe383255db8e5c3307319d470015616f27Bob Beers{
25150ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int8_t    pci_busno;
25250ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int8_t    pci_slot;
25350ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int8_t    pci_pin[2];
25450ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int8_t    revid[2];
25550ee11fe383255db8e5c3307319d470015616f27Bob Beers    u_int8_t    mfg_info_sts;
25650ee11fe383255db8e5c3307319d470015616f27Bob Beers#define EEPROM_OK          0x00
25750ee11fe383255db8e5c3307319d470015616f27Bob Beers#define EEPROM_CRCERR      0x01
25850ee11fe383255db8e5c3307319d470015616f27Bob Beers    char        promfmt;        /* prom type, from sbe_promformat.h */
25950ee11fe383255db8e5c3307319d470015616f27Bob Beers
26050ee11fe383255db8e5c3307319d470015616f27Bob Beers    char        devname[SBE_IFACETMPL_SIZE];
26150ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct pci_bus *bus;
26250ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct net_device *ndev;
26350ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct pci_dev *pdev[2];
26450ee11fe383255db8e5c3307319d470015616f27Bob Beers
26550ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned long addr[2];
26650ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned long addr_mapped[2];
26750ee11fe383255db8e5c3307319d470015616f27Bob Beers    unsigned long len[2];
26850ee11fe383255db8e5c3307319d470015616f27Bob Beers
26950ee11fe383255db8e5c3307319d470015616f27Bob Beers    union
27050ee11fe383255db8e5c3307319d470015616f27Bob Beers    {
27150ee11fe383255db8e5c3307319d470015616f27Bob Beers        char        data[128];
27250ee11fe383255db8e5c3307319d470015616f27Bob Beers        FLD_TYPE1   pft1;       /* prom field, type #1 */
27350ee11fe383255db8e5c3307319d470015616f27Bob Beers        FLD_TYPE2   pft2;       /* prom field, type #2 */
27450ee11fe383255db8e5c3307319d470015616f27Bob Beers    }           mfg_info;
27550ee11fe383255db8e5c3307319d470015616f27Bob Beers};
27650ee11fe383255db8e5c3307319d470015616f27Bob Beerstypedef struct s_hdw_info hdw_info_t;
27750ee11fe383255db8e5c3307319d470015616f27Bob Beers
27850ee11fe383255db8e5c3307319d470015616f27Bob Beers/*****************************************************************/
27950ee11fe383255db8e5c3307319d470015616f27Bob Beers
28050ee11fe383255db8e5c3307319d470015616f27Bob Beersstruct c4_priv
28150ee11fe383255db8e5c3307319d470015616f27Bob Beers{
28250ee11fe383255db8e5c3307319d470015616f27Bob Beers    int         channum;
28350ee11fe383255db8e5c3307319d470015616f27Bob Beers    struct sbe_card_info *ci;
28450ee11fe383255db8e5c3307319d470015616f27Bob Beers};
28550ee11fe383255db8e5c3307319d470015616f27Bob Beers
28650ee11fe383255db8e5c3307319d470015616f27Bob Beers
28750ee11fe383255db8e5c3307319d470015616f27Bob Beers/*****************************************************************/
28850ee11fe383255db8e5c3307319d470015616f27Bob Beers
28950ee11fe383255db8e5c3307319d470015616f27Bob Beersextern ci_t *c4_list;
29050ee11fe383255db8e5c3307319d470015616f27Bob Beers
29150ee11fe383255db8e5c3307319d470015616f27Bob Beersmch_t      *c4_find_chan (int);
29250ee11fe383255db8e5c3307319d470015616f27Bob Beersint         c4_set_chan (int channum, struct sbecom_chan_param *);
29350ee11fe383255db8e5c3307319d470015616f27Bob Beersint         c4_get_chan (int channum, struct sbecom_chan_param *);
29450ee11fe383255db8e5c3307319d470015616f27Bob Beersint         c4_get_chan_stats (int channum, struct sbecom_chan_stats *);
29550ee11fe383255db8e5c3307319d470015616f27Bob Beers
29650ee11fe383255db8e5c3307319d470015616f27Bob Beers#endif                          /* _INC_PMCC4_PRIVATE_H_ */
297