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