Commit 26623ba3 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://gkernel.bkbits.net/net-drivers-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents fa1b4579 db30efc4
......@@ -196,6 +196,7 @@ struct e1000_adapter {
uint32_t part_num;
uint32_t wol;
uint32_t smartspeed;
uint32_t en_mng_pt;
uint16_t link_speed;
uint16_t link_duplex;
spinlock_t stats_lock;
......
......@@ -265,6 +265,17 @@ e1000_set_mac_type(struct e1000_hw *hw)
return -E1000_ERR_MAC_TYPE;
}
switch(hw->mac_type) {
case e1000_82541:
case e1000_82547:
case e1000_82541_rev_2:
case e1000_82547_rev_2:
hw->asf_firmware_present = TRUE;
break;
default:
break;
}
return E1000_SUCCESS;
}
......@@ -5189,3 +5200,27 @@ e1000_set_vco_speed(struct e1000_hw *hw)
return E1000_SUCCESS;
}
/******************************************************************************
* Verifies the hardware needs to allow ARPs to be processed by the host
*
* hw - Struct containing variables accessed by shared code
*
* returns: - TRUE/FALSE
*
*****************************************************************************/
uint32_t
e1000_enable_mng_pass_thru(struct e1000_hw *hw)
{
uint32_t manc;
if (hw->asf_firmware_present) {
manc = E1000_READ_REG(hw, MANC);
if (!(manc & E1000_MANC_RCV_TCO_EN) ||
!(manc & E1000_MANC_EN_MAC_ADDR_FILTER))
return FALSE;
if ((manc & E1000_MANC_SMBUS_EN) && !(manc & E1000_MANC_ASF_EN))
return TRUE;
}
return FALSE;
}
......@@ -307,6 +307,7 @@ int32_t e1000_led_off(struct e1000_hw *hw);
/* Adaptive IFS Functions */
/* Everything else */
uint32_t e1000_enable_mng_pass_thru(struct e1000_hw *hw);
void e1000_clear_hw_cntrs(struct e1000_hw *hw);
void e1000_reset_adaptive(struct e1000_hw *hw);
void e1000_update_adaptive(struct e1000_hw *hw);
......@@ -983,6 +984,7 @@ struct e1000_hw {
e1000_ms_type master_slave;
e1000_ms_type original_master_slave;
e1000_ffe_config ffe_config_state;
uint32_t asf_firmware_present;
unsigned long io_base;
uint32_t phy_id;
uint32_t phy_revision;
......
......@@ -299,7 +299,7 @@ e1000_down(struct e1000_adapter *adapter)
void
e1000_reset(struct e1000_adapter *adapter)
{
uint32_t pba;
uint32_t pba, manc;
/* Repartition Pba for greater than 9k mtu
* To take effect CTRL.RST is required.
*/
......@@ -341,6 +341,12 @@ e1000_reset(struct e1000_adapter *adapter)
e1000_reset_adaptive(&adapter->hw);
e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
if(adapter->en_mng_pt) {
manc = E1000_READ_REG(&adapter->hw, MANC);
manc |= (E1000_MANC_ARP_EN | E1000_MANC_EN_MNG2HOST);
E1000_WRITE_REG(&adapter->hw, MANC, manc);
}
}
/**
......@@ -483,6 +489,8 @@ e1000_probe(struct pci_dev *pdev,
if(pci_using_dac)
netdev->features |= NETIF_F_HIGHDMA;
adapter->en_mng_pt = e1000_enable_mng_pass_thru(&adapter->hw);
/* before reading the EEPROM, reset the controller to
* put the device in a known good starting state */
......
......@@ -499,6 +499,8 @@ static int eql_g_slave_cfg(struct net_device *dev, slave_config_t __user *scp)
return -ENODEV;
ret = -EINVAL;
if (!slave_dev)
return ret;
spin_lock_bh(&eql->queue.lock);
if (eql_is_slave(slave_dev)) {
......@@ -534,6 +536,8 @@ static int eql_s_slave_cfg(struct net_device *dev, slave_config_t __user *scp)
return -ENODEV;
ret = -EINVAL;
if (!slave_dev)
return ret;
eql = dev->priv;
spin_lock_bh(&eql->queue.lock);
......
......@@ -207,10 +207,8 @@ KERN_INFO " Further modifications by Keith Underwood <keithu@parl.clemson.edu>
/* Condensed bus+endian portability operations. */
#if ADDRLEN == 64
#define cpu_to_leXX(addr) cpu_to_le64(addr)
#define desc_to_virt(addr) bus_to_virt(le64_to_cpu(addr))
#else
#define cpu_to_leXX(addr) cpu_to_le32(addr)
#define desc_to_virt(addr) bus_to_virt(le32_to_cpu(addr))
#endif
......@@ -1502,7 +1500,7 @@ static int hamachi_rx(struct net_device *dev)
desc->addr,
hmp->rx_buf_sz,
PCI_DMA_FROMDEVICE);
buf_addr = desc_to_virt(desc->addr);
buf_addr = (u8 *) hmp->rx_skbuff[entry]->tail;
frame_status = le32_to_cpu(get_unaligned((s32*)&(buf_addr[data_size - 12])));
if (hamachi_debug > 4)
printk(KERN_DEBUG " hamachi_rx() status was %8.8x.\n",
......
......@@ -588,6 +588,8 @@ static int hdlcdrv_close(struct net_device *dev)
return -EINVAL;
s = (struct hdlcdrv_state *)dev->priv;
netif_stop_queue(dev);
if (s->ops && s->ops->close)
i = s->ops->close(dev);
if (s->skb)
......
......@@ -22,8 +22,8 @@
*************************************************************************/
#define DRV_NAME "pcnet32"
#define DRV_VERSION "1.30c"
#define DRV_RELDATE "05.25.2004"
#define DRV_VERSION "1.30f"
#define DRV_RELDATE "06.16.2004"
#define PFX DRV_NAME ": "
static const char *version =
......@@ -245,6 +245,11 @@ static int full_duplex[MAX_UNITS];
* v1.30b 24 May 2004 Don Fry fix bogus tx carrier errors with 79c973,
* assisted by Bruce Penrod <bmpenrod@endruntechnologies.com>.
* v1.30c 25 May 2004 Don Fry added netif_wake_queue after pcnet32_restart.
* v1.30d 01 Jun 2004 Don Fry discard oversize rx packets.
* v1.30e 11 Jun 2004 Don Fry recover after fifo error and rx hang.
* v1.30f 16 Jun 2004 Don Fry cleanup IRQ to allow 0 and 1 for PCI,
* expanding on suggestions from Ralf Baechle <ralf@linux-mips.org>,
* and Brian Murphy <brian@murphy.dk>.
*/
......@@ -360,7 +365,7 @@ struct pcnet32_private {
static void pcnet32_probe_vlbus(void);
static int pcnet32_probe_pci(struct pci_dev *, const struct pci_device_id *);
static int pcnet32_probe1(unsigned long, unsigned int, int, struct pci_dev *);
static int pcnet32_probe1(unsigned long, int, struct pci_dev *);
static int pcnet32_open(struct net_device *);
static int pcnet32_init_ring(struct net_device *);
static int pcnet32_start_xmit(struct sk_buff *, struct net_device *);
......@@ -958,7 +963,7 @@ pcnet32_probe_vlbus(void)
if (request_region(ioaddr, PCNET32_TOTAL_SIZE, "pcnet32_probe_vlbus")) {
/* check if there is really a pcnet chip on that ioaddr */
if ((inb(ioaddr + 14) == 0x57) && (inb(ioaddr + 15) == 0x57)) {
pcnet32_probe1(ioaddr, 0, 0, NULL);
pcnet32_probe1(ioaddr, 0, NULL);
} else {
release_region(ioaddr, PCNET32_TOTAL_SIZE);
}
......@@ -999,7 +1004,7 @@ pcnet32_probe_pci(struct pci_dev *pdev, const struct pci_device_id *ent)
return -EBUSY;
}
return pcnet32_probe1(ioaddr, pdev->irq, 1, pdev);
return pcnet32_probe1(ioaddr, 1, pdev);
}
......@@ -1008,8 +1013,7 @@ pcnet32_probe_pci(struct pci_dev *pdev, const struct pci_device_id *ent)
* pdev will be NULL when called from pcnet32_probe_vlbus.
*/
static int __devinit
pcnet32_probe1(unsigned long ioaddr, unsigned int irq_line, int shared,
struct pci_dev *pdev)
pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev)
{
struct pcnet32_private *lp;
dma_addr_t lp_dma_addr;
......@@ -1270,11 +1274,8 @@ pcnet32_probe1(unsigned long ioaddr, unsigned int irq_line, int shared,
a->write_csr(ioaddr, 2, (lp->dma_addr + offsetof(struct pcnet32_private,
init_block)) >> 16);
if (irq_line) {
dev->irq = irq_line;
}
if (dev->irq >= 2) {
if (pdev) { /* use the IRQ provided by PCI */
dev->irq = pdev->irq;
if (pcnet32_debug & NETIF_MSG_PROBE)
printk(" assigned IRQ %d.\n", dev->irq);
} else {
......@@ -1362,8 +1363,7 @@ pcnet32_open(struct net_device *dev)
int rc;
unsigned long flags;
if (dev->irq == 0 ||
request_irq(dev->irq, &pcnet32_interrupt,
if (request_irq(dev->irq, &pcnet32_interrupt,
lp->shared_irq ? SA_SHIRQ : 0, dev->name, (void *)dev)) {
return -EAGAIN;
}
......@@ -1531,14 +1531,16 @@ pcnet32_purge_tx_ring(struct net_device *dev)
int i;
for (i = 0; i < TX_RING_SIZE; i++) {
lp->tx_ring[i].status = 0; /* CPU owns buffer */
wmb(); /* Make sure adapter sees owner change */
if (lp->tx_skbuff[i]) {
pci_unmap_single(lp->pci_dev, lp->tx_dma_addr[i],
lp->tx_skbuff[i]->len, PCI_DMA_TODEVICE);
dev_kfree_skb_any(lp->tx_skbuff[i]);
}
lp->tx_skbuff[i] = NULL;
lp->tx_dma_addr[i] = 0;
}
}
}
......@@ -1566,21 +1568,23 @@ pcnet32_init_ring(struct net_device *dev)
skb_reserve (rx_skbuff, 2);
}
rmb();
if (lp->rx_dma_addr[i] == 0)
lp->rx_dma_addr[i] = pci_map_single(lp->pci_dev, rx_skbuff->tail,
PKT_BUF_SZ-2, PCI_DMA_FROMDEVICE);
lp->rx_ring[i].base = (u32)le32_to_cpu(lp->rx_dma_addr[i]);
lp->rx_ring[i].buf_length = le16_to_cpu(2-PKT_BUF_SZ);
wmb(); /* Make sure owner changes after all others are visible */
lp->rx_ring[i].status = le16_to_cpu(0x8000);
}
/* The Tx buffer address is filled in as needed, but we do need to clear
* the upper ownership bit. */
for (i = 0; i < TX_RING_SIZE; i++) {
lp->tx_ring[i].status = 0; /* CPU owns buffer */
wmb(); /* Make sure adapter sees owner change */
lp->tx_ring[i].base = 0;
lp->tx_ring[i].status = 0;
lp->tx_dma_addr[i] = 0;
}
wmb(); /* Make sure all changes are visible */
lp->init_block.tlen_rlen = le16_to_cpu(TX_RING_LEN_BITS | RX_RING_LEN_BITS);
for (i = 0; i < 6; i++)
......@@ -1589,9 +1593,14 @@ pcnet32_init_ring(struct net_device *dev)
offsetof(struct pcnet32_private, rx_ring));
lp->init_block.tx_ring = (u32)le32_to_cpu(lp->dma_addr +
offsetof(struct pcnet32_private, tx_ring));
wmb(); /* Make sure all changes are visible */
return 0;
}
/* the pcnet32 has been issued a stop or reset. Wait for the stop bit
* then flush the pending transmit operations, re-initialize the ring,
* and tell the chip to initialize.
*/
static void
pcnet32_restart(struct net_device *dev, unsigned int csr0_bits)
{
......@@ -1599,6 +1608,15 @@ pcnet32_restart(struct net_device *dev, unsigned int csr0_bits)
unsigned long ioaddr = dev->base_addr;
int i;
/* wait for stop */
for (i=0; i<100; i++)
if (lp->a.read_csr(ioaddr, 0) & 0x0004)
break;
if (i >= 100 && netif_msg_drv(lp))
printk(KERN_ERR "%s: pcnet32_restart timed out waiting for stop.\n",
dev->name);
pcnet32_purge_tx_ring(dev);
if (pcnet32_init_ring(dev))
return;
......@@ -1857,15 +1875,16 @@ pcnet32_interrupt(int irq, void *dev_id, struct pt_regs * regs)
}
if (must_restart) {
/* stop the chip to clear the error condition, then restart */
lp->a.write_csr (ioaddr, 0, 0x0004);
/* reset the chip to clear the error condition, then restart */
lp->a.reset(ioaddr);
lp->a.write_csr(ioaddr, 4, 0x0915);
pcnet32_restart(dev, 0x0002);
netif_wake_queue(dev);
}
}
/* Clear any other interrupt, and set interrupt enable. */
lp->a.write_csr (ioaddr, 0, 0x7940);
/* Set interrupt enable. */
lp->a.write_csr (ioaddr, 0, 0x0040);
lp->a.write_rap (ioaddr,rap);
if (netif_msg_intr(lp))
......@@ -1907,7 +1926,13 @@ pcnet32_rx(struct net_device *dev)
short pkt_len = (le32_to_cpu(lp->rx_ring[entry].msg_length) & 0xfff)-4;
struct sk_buff *skb;
if (pkt_len < 60) {
/* Discard oversize frames. */
if (unlikely(pkt_len > PKT_BUF_SZ - 2)) {
if (netif_msg_drv(lp))
printk(KERN_ERR "%s: Impossible packet size %d!\n",
dev->name, pkt_len);
lp->stats.rx_errors++;
} else if (pkt_len < 60) {
if (netif_msg_rx_err(lp))
printk(KERN_ERR "%s: Runt packet!\n", dev->name);
lp->stats.rx_errors++;
......
......@@ -2900,15 +2900,15 @@ static void __exit
sbmac_cleanup_module(void)
{
struct net_device *dev;
sbmac_port_t port;
int idx;
for (idx = 0; idx < MAX_UNITS; idx++) {
struct sbmac_softc *sc;
dev = dev_sbmac[idx];
if (!dev)
continue;
struct sbmac_softc *sc = netdev_priv(dev);
sc = netdev_priv(dev);
unregister_netdev(dev);
sbmac_uninitctx(sc);
free_netdev(dev);
......
This diff is collapsed.
......@@ -58,7 +58,8 @@
/* 3Com (0x10b7) */ \
if (pdev->vendor == 0x10b7) { \
/* Gigabit Ethernet Adapter (0x1700) */ \
if ((pdev->device == 0x1700)) { \
if ((pdev->device == 0x1700) || \
(pdev->device == 0x80eb)) { \
result = SK_TRUE; \
} \
/* SysKonnect (0x1148) */ \
......
......@@ -96,14 +96,13 @@ static const u_char cf_to_ptype[] = {
/*
* function declarations
*/
static void cfm_fsm() ;
static void cfm_fsm(struct s_smc *smc, int cmd);
/*
init CFM state machine
clear all CFM vars and flags
*/
void cfm_init(smc)
struct s_smc *smc ;
void cfm_init(struct s_smc *smc)
{
smc->mib.fddiSMTCF_State = ACTIONS(SC0_ISOLATED) ;
smc->r.rm_join = 0 ;
......@@ -118,9 +117,7 @@ struct s_smc *smc ;
#define THRU_ENABLED(smc) (smc->y[PA].pc_mode != PM_TREE && \
smc->y[PB].pc_mode != PM_TREE)
/* Selection criteria for the ports */
static void selection_criteria (smc,phy)
struct s_smc *smc ;
struct s_phy *phy ;
static void selection_criteria (struct s_smc *smc, struct s_phy *phy)
{
switch (phy->mib->fddiPORTMy_Type) {
......@@ -146,8 +143,7 @@ struct s_phy *phy ;
}
void all_selection_criteria (smc)
struct s_smc *smc ;
void all_selection_criteria(struct s_smc *smc)
{
struct s_phy *phy ;
int p ;
......@@ -158,9 +154,7 @@ struct s_smc *smc ;
}
}
static void cem_priv_state (smc, event)
struct s_smc *smc ;
int event ;
static void cem_priv_state(struct s_smc *smc, int event)
/* State machine for private PORT states: used to optimize dual homing */
{
int np; /* Number of the port */
......@@ -216,9 +210,7 @@ int event ;
process event
until SM is stable
*/
void cfm(smc,event)
struct s_smc *smc ;
int event ;
void cfm(struct s_smc *smc, int event)
{
int state ; /* remember last state */
int cond ;
......@@ -290,9 +282,7 @@ int event ;
process CFM event
*/
/*ARGSUSED1*/
static void cfm_fsm(smc,cmd)
struct s_smc *smc ;
int cmd ;
static void cfm_fsm(struct s_smc *smc, int cmd)
{
switch(smc->mib.fddiSMTCF_State) {
case ACTIONS(SC0_ISOLATED) :
......@@ -550,8 +540,7 @@ int cmd ;
* return :
* PA or PB
*/
int cfm_get_mac_input(smc)
struct s_smc *smc ;
int cfm_get_mac_input(struct s_smc *smc)
{
return((smc->mib.fddiSMTCF_State == SC10_C_WRAP_B ||
smc->mib.fddiSMTCF_State == SC5_THRU_B) ? PB : PA) ;
......@@ -562,8 +551,7 @@ struct s_smc *smc ;
* return :
* PA or PB
*/
int cfm_get_mac_output(smc)
struct s_smc *smc ;
int cfm_get_mac_output(struct s_smc *smc)
{
return((smc->mib.fddiSMTCF_State == SC10_C_WRAP_B ||
smc->mib.fddiSMTCF_State == SC4_THRU_A) ? PB : PA) ;
......@@ -603,10 +591,7 @@ static char path_iso_s[] = {
0,0, 0,RES_MAC, 0,INDEX_MAC, 0,PATH_ISO,
} ;
int cem_build_path(smc,to,path_index)
struct s_smc *smc ;
char *to ;
int path_index ;
int cem_build_path(struct s_smc *smc, char *to, int path_index)
{
char *path ;
int len ;
......
This diff is collapsed.
......@@ -94,17 +94,16 @@ static const char * const ecm_events[] = {
* function declarations
*/
static void ecm_fsm() ;
static void start_ecm_timer() ;
static void stop_ecm_timer() ;
static void prop_actions() ;
static void ecm_fsm(struct s_smc *smc, int cmd);
static void start_ecm_timer(struct s_smc *smc, u_long value, int event);
static void stop_ecm_timer(struct s_smc *smc);
static void prop_actions(struct s_smc *smc);
/*
init ECM state machine
clear all ECM vars and flags
*/
void ecm_init(smc)
struct s_smc *smc ;
void ecm_init(struct s_smc *smc)
{
smc->e.path_test = PT_PASSED ;
smc->e.trace_prop = 0 ;
......@@ -122,9 +121,7 @@ struct s_smc *smc ;
process event
until SM is stable
*/
void ecm(smc,event)
struct s_smc *smc ;
int event ;
void ecm(struct s_smc *smc, int event)
{
int state ;
......@@ -143,9 +140,7 @@ int event ;
/*
process ECM event
*/
static void ecm_fsm(smc,cmd)
struct s_smc *smc ;
int cmd ;
static void ecm_fsm(struct s_smc *smc, int cmd)
{
int ls_a ; /* current line state PHY A */
int ls_b ; /* current line state PHY B */
......@@ -429,8 +424,7 @@ int cmd ;
/*
* trace propagation actions for SAS & DAS
*/
static void prop_actions(smc)
struct s_smc *smc ;
static void prop_actions(struct s_smc *smc)
{
int port_in = 0 ;
int port_out = 0 ;
......@@ -480,8 +474,7 @@ struct s_smc *smc ;
/*
* trace propagation actions for Concentrator
*/
static void prop_actions(smc)
struct s_smc *smc ;
static void prop_actions(struct s_smc *smc)
{
int initiator ;
int upstream ;
......@@ -527,10 +520,7 @@ struct s_smc *smc ;
* SMT timer interface
* start ECM timer
*/
static void start_ecm_timer(smc,value,event)
struct s_smc *smc ;
u_long value;
int event ;
static void start_ecm_timer(struct s_smc *smc, u_long value, int event)
{
smt_timer_start(smc,&smc->e.ecm_timer,value,EV_TOKEN(EVENT_ECM,event));
}
......@@ -539,8 +529,7 @@ int event ;
* SMT timer interface
* stop ECM timer
*/
static void stop_ecm_timer(smc)
struct s_smc *smc ;
static void stop_ecm_timer(struct s_smc *smc)
{
if (smc->e.ecm_timer.tm_active)
smt_timer_stop(smc,&smc->e.ecm_timer) ;
......
......@@ -80,8 +80,11 @@ static const struct fddi_addr null_addr = {{0,0,0,0,0,0}} ;
-------------------------------------------------------------
*/
static void ess_send_response(), ess_config_fifo(),
ess_send_alc_req(), ess_send_frame() ;
static void ess_send_response(struct s_smc *smc, struct smt_header *sm,
int sba_cmd);
static void ess_config_fifo(struct s_smc *smc);
static void ess_send_alc_req(struct s_smc *smc);
static void ess_send_frame(struct s_smc *smc, SMbuf *mb);
/*
-------------------------------------------------------------
......@@ -89,26 +92,17 @@ static void ess_send_response(), ess_config_fifo(),
-------------------------------------------------------------
*/
extern void *sm_to_para() ;
extern void smt_send_frame(), smt_free_mbuf(),
set_formac_tsync(), formac_reinit_tx() ;
extern int smt_check_para() ;
extern SMbuf *smt_get_mbuf(), *smt_build_frame() ;
extern u_long smt_get_tid() ;
/*
-------------------------------------------------------------
PUBLIC FUNCTIONS:
-------------------------------------------------------------
*/
void ess_timer_poll(), ess_para_change() ;
int ess_raf_received_pack(), process_bw_alloc() ;
void ess_timer_poll(struct s_smc *smc);
void ess_para_change(struct s_smc *smc);
int ess_raf_received_pack(struct s_smc *smc, SMbuf *mb, struct smt_header *sm,
int fs);
int process_bw_alloc(struct s_smc *smc, long int payload, long int overhead);
/*
......@@ -120,11 +114,8 @@ extern u_long smt_get_tid() ;
/*
* evaluate the RAF frame
*/
int ess_raf_received_pack(smc,mb,sm,fs)
struct s_smc *smc ;
SMbuf *mb ;
struct smt_header *sm ;
int fs ;
int ess_raf_received_pack(struct s_smc *smc, SMbuf *mb, struct smt_header *sm,
int fs)
{
void *p ; /* universal pointer */
struct smt_p_0016 *cmd ; /* para: command for the ESS */
......@@ -384,10 +375,7 @@ int fs ;
* determines the synchronous bandwidth, set the TSYNC register and the
* mib variables SBAPayload, SBAOverhead and fddiMACT-NEG.
*/
int process_bw_alloc(smc,payload,overhead)
struct s_smc *smc ;
long payload ;
long overhead ;
int process_bw_alloc(struct s_smc *smc, long int payload, long int overhead)
{
/*
* determine the synchronous bandwidth (sync_bw) in bytes per T-NEG,
......@@ -483,10 +471,8 @@ long overhead ;
return(TRUE) ;
}
static void ess_send_response(smc,sm,sba_cmd)
struct s_smc *smc ;
struct smt_header *sm ;
int sba_cmd ;
static void ess_send_response(struct s_smc *smc, struct smt_header *sm,
int sba_cmd)
{
struct smt_sba_chg *chg ;
SMbuf *mb ;
......@@ -550,9 +536,7 @@ int sba_cmd ;
ess_send_frame(smc,mb) ;
}
void ess_timer_poll(smc)
struct s_smc *smc ;
void ess_timer_poll(struct s_smc *smc)
{
if (!smc->ess.raf_act_timer_poll)
return ;
......@@ -566,8 +550,7 @@ struct s_smc *smc ;
}
}
static void ess_send_alc_req(smc)
struct s_smc *smc ;
static void ess_send_alc_req(struct s_smc *smc)
{
struct smt_sba_alc_req *req ;
SMbuf *mb ;
......@@ -675,9 +658,7 @@ struct s_smc *smc ;
ess_send_frame(smc,mb) ;
}
static void ess_send_frame(smc,mb)
struct s_smc *smc ;
SMbuf *mb ;
static void ess_send_frame(struct s_smc *smc, SMbuf *mb)
{
/*
* check if the frame must be send to the own ESS
......@@ -703,15 +684,13 @@ SMbuf *mb ;
}
}
void ess_para_change(smc)
struct s_smc *smc ;
void ess_para_change(struct s_smc *smc)
{
(void)process_bw_alloc(smc,(long)smc->mib.a[PATH0].fddiPATHSbaPayload,
(long)smc->mib.a[PATH0].fddiPATHSbaOverhead) ;
}
static void ess_config_fifo(smc)
struct s_smc *smc ;
static void ess_config_fifo(struct s_smc *smc)
{
/*
* if nothing to do exit
......@@ -738,3 +717,4 @@ struct s_smc *smc ;
#endif /* ESS */
#endif /* no SLIM_SMT */
This diff is collapsed.
This diff is collapsed.
......@@ -12,6 +12,9 @@
*
******************************************************************************/
#ifndef _SKFP_H_SMTSTATE_H_
#define _SKFP_H_SMTSTATE_H_
/*
* SMT state definitions
*/
......@@ -98,3 +101,6 @@ struct pcm_state {
struct smt_state {
struct pcm_state pcm_state[NUMPHYS] ; /* port A & port B */
} ;
#endif
This diff is collapsed.
......@@ -39,7 +39,7 @@ static const char ID_sccs[] = "@(#)hwt.c 1.13 97/04/23 (C) SK " ;
* Prototypes of local functions.
*/
/* 28-Jun-1994 sw - Note: hwt_restart() is also used in module 'drvfbi.c'. */
/*static*/ void hwt_restart() ;
/*static void hwt_restart() ; */
/************************
*
......@@ -60,9 +60,7 @@ static const char ID_sccs[] = "@(#)hwt.c 1.13 97/04/23 (C) SK " ;
************************/
#define HWT_MAX (65000)
void hwt_start(smc, time)
struct s_smc *smc ;
u_long time ;
void hwt_start(struct s_smc *smc, u_long time)
{
u_short cnt ;
......@@ -115,8 +113,7 @@ u_long time ;
* Nothing.
*
************************/
void hwt_stop(smc)
struct s_smc *smc ;
void hwt_stop(struct s_smc *smc)
{
#ifndef PCI
/* stop counter 0 by switching to mode 0 */
......@@ -145,8 +142,7 @@ struct s_smc *smc ;
* Nothing.
*
************************/
void hwt_init(smc)
struct s_smc *smc ;
void hwt_init(struct s_smc *smc)
{
smc->hw.t_start = 0 ;
smc->hw.t_stop = 0 ;
......@@ -169,8 +165,7 @@ struct s_smc *smc ;
* Nothing.
*
************************/
void hwt_restart(smc)
struct s_smc *smc ;
void hwt_restart(struct s_smc *smc)
{
hwt_stop(smc) ;
#ifndef PCI
......@@ -193,8 +188,7 @@ struct s_smc *smc ;
* The elapsed time since last start in units of 16us.
*
************************/
u_long hwt_read(smc)
struct s_smc *smc ;
u_long hwt_read(struct s_smc *smc)
{
u_short tr ;
#ifndef PCI
......@@ -238,8 +232,7 @@ struct s_smc *smc ;
* current timer value in units of 80ns.
*
************************/
u_long hwt_quick_read(smc)
struct s_smc *smc ;
u_long hwt_quick_read(struct s_smc *smc)
{
u_long interval ;
u_long time ;
......@@ -267,10 +260,7 @@ struct s_smc *smc ;
* NOTE: The fuction will return immediately, if the timer is not
* started
************************/
void hwt_wait_time(smc,start,duration)
struct s_smc *smc ;
u_long start ;
long duration ;
void hwt_wait_time(struct s_smc *smc, u_long start, long int duration)
{
long diff ;
long interval ;
......@@ -312,3 +302,4 @@ long duration ;
}
}
#endif
......@@ -52,8 +52,7 @@ Return smt_error_word These bits are supported:
END_MANUAL_ENTRY()
*/
u_long smt_get_error_word(smc)
struct s_smc *smc ;
u_long smt_get_error_word(struct s_smc *smc)
{
u_long st;
......@@ -92,8 +91,7 @@ Return smt_event_word always 0
END_MANUAL_ENTRY()
*/
u_long smt_get_event_word(smc)
struct s_smc *smc ;
u_long smt_get_event_word(struct s_smc *smc)
{
return (u_long) 0;
}
......@@ -111,8 +109,7 @@ Return smt_port_event_word always 0
END_MANUAL_ENTRY()
*/
u_long smt_get_port_event_word(smc)
struct s_smc *smc ;
u_long smt_get_port_event_word(struct s_smc *smc)
{
return (u_long) 0;
}
......@@ -135,10 +132,7 @@ Return len used len of the error log field
END_MANUAL_ENTRY()
*/
int smt_read_errorlog(smc,p,len)
struct s_smc *smc ;
char _far *p ;
int len ;
int smt_read_errorlog(struct s_smc *smc, char _far *p, int len)
{
int i ;
int st ;
......@@ -207,3 +201,4 @@ int len ;
er->ucode_version_level = 0x0101 ;
return(len) ;
}
......@@ -199,28 +199,25 @@ static int plc_imsk_act = PL_PCM_CODE | PL_TRACE_PROP | PL_PCM_BREAK |
PL_PCM_ENABLED | PL_SELF_TEST | PL_EBUF_ERR;
/* external functions */
void all_selection_criteria ();
void all_selection_criteria(struct s_smc *smc);
/* internal functions */
static void pcm_fsm() ;
static void pc_rcode_actions() ;
static void pc_tcode_actions() ;
static void reset_lem_struct() ;
static void plc_init() ;
static void sm_ph_lem_start() ;
static void sm_ph_lem_stop() ;
static void sm_ph_linestate() ;
static void real_init_plc() ;
static void pcm_fsm(struct s_smc *smc, struct s_phy *phy, int cmd);
static void pc_rcode_actions(struct s_smc *smc, int bit, struct s_phy *phy);
static void pc_tcode_actions(struct s_smc *smc, const int bit, struct s_phy *phy);
static void reset_lem_struct(struct s_phy *phy);
static void plc_init(struct s_smc *smc, int p);
static void sm_ph_lem_start(struct s_smc *smc, int np, int threshold);
static void sm_ph_lem_stop(struct s_smc *smc, int np);
static void sm_ph_linestate(struct s_smc *smc, int phy, int ls);
static void real_init_plc(struct s_smc *smc);
/*
* SMT timer interface
* start PCM timer 0
*/
static void start_pcm_timer0(smc,value,event,phy)
struct s_smc *smc ;
u_long value;
int event;
struct s_phy *phy;
static void start_pcm_timer0(struct s_smc *smc, u_long value, int event,
struct s_phy *phy)
{
phy->timer0_exp = FALSE ; /* clear timer event flag */
smt_timer_start(smc,&phy->pcm_timer0,value,
......@@ -230,9 +227,7 @@ struct s_phy *phy;
* SMT timer interface
* stop PCM timer 0
*/
static void stop_pcm_timer0(smc,phy)
struct s_smc *smc ;
struct s_phy *phy;
static void stop_pcm_timer0(struct s_smc *smc, struct s_phy *phy)
{
if (phy->pcm_timer0.tm_active)
smt_timer_stop(smc,&phy->pcm_timer0) ;
......@@ -242,8 +237,7 @@ struct s_phy *phy;
init PCM state machine (called by driver)
clear all PCM vars and flags
*/
void pcm_init(smc)
struct s_smc *smc ;
void pcm_init(struct s_smc *smc)
{
int i ;
int np ;
......@@ -407,8 +401,7 @@ struct s_smc *smc ;
real_init_plc(smc) ;
}
void init_plc(smc)
struct s_smc *smc ;
void init_plc(struct s_smc *smc)
{
SK_UNUSED(smc) ;
......@@ -421,8 +414,7 @@ struct s_smc *smc ;
*/
}
static void real_init_plc(smc)
struct s_smc *smc ;
static void real_init_plc(struct s_smc *smc)
{
int p ;
......@@ -430,9 +422,7 @@ struct s_smc *smc ;
plc_init(smc,p) ;
}
static void plc_init(smc,p)
struct s_smc *smc ;
int p;
static void plc_init(struct s_smc *smc, int p)
{
int i ;
#ifndef MOT_ELM
......@@ -495,10 +485,7 @@ int p;
/*
* control PCM state machine
*/
static void plc_go_state(smc,p,state)
struct s_smc *smc ;
int p;
int state;
static void plc_go_state(struct s_smc *smc, int p, int state)
{
HW_PTR port ;
int val ;
......@@ -514,9 +501,7 @@ int state;
/*
* read current line state (called by ECM & PCM)
*/
int sm_pm_get_ls(smc,phy)
struct s_smc *smc ;
int phy;
int sm_pm_get_ls(struct s_smc *smc, int phy)
{
int state ;
......@@ -549,10 +534,7 @@ int phy;
return(state) ;
}
static int plc_send_bits(smc,phy,len)
struct s_smc *smc ;
struct s_phy *phy;
int len;
static int plc_send_bits(struct s_smc *smc, struct s_phy *phy, int len)
{
int np = phy->np ; /* PHY index */
int n ;
......@@ -589,9 +571,7 @@ int len;
/*
* config plc muxes
*/
void plc_config_mux(smc,mux)
struct s_smc *smc ;
int mux ;
void plc_config_mux(struct s_smc *smc, int mux)
{
if (smc->s.sas != SMT_DAS)
return ;
......@@ -615,10 +595,7 @@ int mux ;
process event
until SM is stable
*/
void pcm(smc,np,event)
struct s_smc *smc ;
const int np;
int event;
void pcm(struct s_smc *smc, const int np, int event)
{
int state ;
int oldstate ;
......@@ -697,10 +674,7 @@ int event;
/*
* PCM state machine
*/
static void pcm_fsm(smc,phy,cmd)
struct s_smc *smc ;
struct s_phy *phy;
int cmd;
static void pcm_fsm(struct s_smc *smc, struct s_phy *phy, int cmd)
{
int i ;
int np = phy->np ; /* PHY index */
......@@ -1063,10 +1037,7 @@ int cmd;
/*
* force line state on a PHY output (only in MAINT state)
*/
static void sm_ph_linestate(smc,phy,ls)
struct s_smc *smc ;
int phy;
int ls;
static void sm_ph_linestate(struct s_smc *smc, int phy, int ls)
{
int cntrl ;
......@@ -1095,9 +1066,7 @@ int ls;
outpw(PLC(phy,PL_CNTRL_B),cntrl) ;
}
static void reset_lem_struct(phy)
struct s_phy *phy;
static void reset_lem_struct(struct s_phy *phy)
{
struct lem_counter *lem = &phy->lem ;
......@@ -1108,9 +1077,7 @@ struct s_phy *phy;
/*
* link error monitor
*/
static void lem_evaluate(smc,phy)
struct s_smc *smc ;
struct s_phy *phy;
static void lem_evaluate(struct s_smc *smc, struct s_phy *phy)
{
int ber ;
u_long errors ;
......@@ -1210,8 +1177,7 @@ struct s_phy *phy;
/*
* called by SMT to calculate LEM bit error rate
*/
void sm_lem_evaluate(smc)
struct s_smc *smc ;
void sm_lem_evaluate(struct s_smc *smc)
{
int np ;
......@@ -1219,9 +1185,7 @@ struct s_smc *smc ;
lem_evaluate(smc,&smc->y[np]) ;
}
static void lem_check_lct(smc,phy)
struct s_smc *smc ;
struct s_phy *phy ;
static void lem_check_lct(struct s_smc *smc, struct s_phy *phy)
{
struct lem_counter *lem = &phy->lem ;
struct fddi_mib_p *mib ;
......@@ -1265,10 +1229,7 @@ struct s_phy *phy ;
/*
* LEM functions
*/
static void sm_ph_lem_start(smc,np,threshold)
struct s_smc *smc ;
int np;
int threshold;
static void sm_ph_lem_start(struct s_smc *smc, int np, int threshold)
{
struct lem_counter *lem = &smc->y[np].lem ;
......@@ -1286,9 +1247,7 @@ int threshold;
SETMASK(PLC(np,PL_INTR_MASK),PL_LE_CTR,PL_LE_CTR) ;
}
static void sm_ph_lem_stop(smc,np)
struct s_smc *smc ;
int np;
static void sm_ph_lem_stop(struct s_smc *smc, int np)
{
struct lem_counter *lem = &smc->y[np].lem ;
......@@ -1297,10 +1256,8 @@ int np;
}
/* ARGSUSED */
void sm_pm_ls_latch(smc,phy,on_off)
struct s_smc *smc ;
int phy;
int on_off; /* en- or disable ident. ls */
void sm_pm_ls_latch(struct s_smc *smc, int phy, int on_off)
/* int on_off; en- or disable ident. ls */
{
SK_UNUSED(smc) ;
......@@ -1317,10 +1274,7 @@ int on_off; /* en- or disable ident. ls */
/*
* PCM pseudo code 5.1 .. 6.1
*/
static void pc_rcode_actions(smc,bit,phy)
struct s_smc *smc ;
int bit;
struct s_phy *phy;
static void pc_rcode_actions(struct s_smc *smc, int bit, struct s_phy *phy)
{
struct fddi_mib_p *mib ;
......@@ -1456,10 +1410,7 @@ struct s_phy *phy;
/*
* PCM pseudo code 5.1 .. 6.1
*/
static void pc_tcode_actions(smc,bit,phy)
struct s_smc *smc ;
const int bit;
struct s_phy *phy;
static void pc_tcode_actions(struct s_smc *smc, const int bit, struct s_phy *phy)
{
int np = phy->np ;
struct fddi_mib_p *mib ;
......@@ -1638,8 +1589,7 @@ struct s_phy *phy;
/*
* return status twisted (called by SMT)
*/
int pcm_status_twisted(smc)
struct s_smc *smc ;
int pcm_status_twisted(struct s_smc *smc)
{
int twist = 0 ;
if (smc->s.sas != SMT_DAS)
......@@ -1658,13 +1608,8 @@ struct s_smc *smc ;
* remote phy type
* remote mac yes/no
*/
void pcm_status_state(smc,np,type,state,remote,mac)
struct s_smc *smc ;
int np;
int *type;
int *state;
int *remote;
int *mac;
void pcm_status_state(struct s_smc *smc, int np, int *type, int *state,
int *remote, int *mac)
{
struct s_phy *phy = &smc->y[np] ;
struct fddi_mib_p *mib ;
......@@ -1687,8 +1632,7 @@ int *mac;
/*
* return rooted station status (called by SMT)
*/
int pcm_rooted_station(smc)
struct s_smc *smc ;
int pcm_rooted_station(struct s_smc *smc)
{
int n ;
......@@ -1703,10 +1647,8 @@ struct s_smc *smc ;
/*
* Interrupt actions for PLC & PCM events
*/
void plc_irq(smc,np,cmd)
struct s_smc *smc ;
int np; /* PHY index */
unsigned int cmd;
void plc_irq(struct s_smc *smc, int np, unsigned int cmd)
/* int np; PHY index */
{
struct s_phy *phy = &smc->y[np] ;
struct s_plc *plc = &phy->plc ;
......@@ -1919,9 +1861,7 @@ unsigned int cmd;
#endif
}
void pcm_set_lct_short(smc,n)
struct s_smc *smc ;
int n ;
void pcm_set_lct_short(struct s_smc *smc, int n)
{
if (n <= 0 || n > 1000)
return ;
......@@ -1932,9 +1872,7 @@ int n ;
/*
* fill state struct
*/
void pcm_get_state(smc,state)
struct s_smc *smc ;
struct smt_state *state ;
void pcm_get_state(struct s_smc *smc, struct smt_state *state)
{
struct s_phy *phy ;
struct pcm_state *pcs ;
......@@ -1968,9 +1906,7 @@ struct smt_state *state ;
}
}
int get_pcm_state(smc,np)
struct s_smc *smc ;
int np;
int get_pcm_state(struct s_smc *smc, int np)
{
int pcs ;
......@@ -1992,9 +1928,7 @@ int np;
return(pcs) ;
}
char *get_linestate(smc,np)
struct s_smc *smc ;
int np;
char *get_linestate(struct s_smc *smc, int np)
{
char *ls = "" ;
......@@ -2016,9 +1950,7 @@ int np;
return(ls) ;
}
char *get_pcmstate(smc,np)
struct s_smc *smc ;
int np;
char *get_pcmstate(struct s_smc *smc, int np)
{
char *pcs ;
......@@ -2040,8 +1972,7 @@ int np;
return(pcs) ;
}
void list_phy(smc)
struct s_smc *smc ;
void list_phy(struct s_smc *smc)
{
struct s_plc *plc ;
int np ;
......@@ -2069,8 +2000,7 @@ struct s_smc *smc ;
#ifdef CONCENTRATOR
void pcm_lem_dump(smc)
struct s_smc *smc ;
void pcm_lem_dump(struct s_smc *smc)
{
int i ;
struct s_phy *phy ;
......
......@@ -32,12 +32,16 @@
static const char ID_sccs[] = "@(#)pmf.c 1.37 97/08/04 (C) SK " ;
#endif
static int smt_authorize() ;
static int smt_check_set_count() ;
static const struct s_p_tab *smt_get_ptab() ;
static int smt_mib_phys() ;
int smt_set_para() ;
void smt_add_para() ;
static int smt_authorize(struct s_smc *smc, struct smt_header *sm);
static int smt_check_set_count(struct s_smc *smc, struct smt_header *sm);
static const struct s_p_tab* smt_get_ptab(u_short para);
static int smt_mib_phys(struct s_smc *smc);
int smt_set_para(struct s_smc *smc, struct smt_para *pa, int index, int local,
int set);
void smt_add_para(struct s_smc *smc, struct s_pcon *pcon, u_short para,
int index, int local);
static SMbuf *smt_build_pmf_response(struct s_smc *smc, struct smt_header *req,
int set, int local);
#define MOFFSS(e) ((int)&(((struct fddi_mib *)0)->e))
#define MOFFSA(e) ((int) (((struct fddi_mib *)0)->e))
......@@ -280,13 +284,7 @@ static const struct s_p_tab {
{ 0 }
} ;
static SMbuf *smt_build_pmf_response() ;
void smt_pmf_received_pack(smc,mb,local)
struct s_smc *smc ;
SMbuf *mb ;
int local ;
void smt_pmf_received_pack(struct s_smc *smc, SMbuf *mb, int local)
{
struct smt_header *sm ;
SMbuf *reply ;
......@@ -316,13 +314,8 @@ int local ;
}
}
extern SMbuf *smt_get_mbuf() ;
static SMbuf *smt_build_pmf_response(smc,req,set,local)
struct s_smc *smc ;
struct smt_header *req ;
int set ;
int local ;
static SMbuf *smt_build_pmf_response(struct s_smc *smc, struct smt_header *req,
int set, int local)
{
SMbuf *mb ;
struct smt_header *smt ;
......@@ -509,11 +502,7 @@ int local ;
return(mb) ;
}
extern void *sm_to_para() ;
static int smt_authorize(smc,sm)
struct s_smc *smc ;
struct smt_header *sm ;
static int smt_authorize(struct s_smc *smc, struct smt_header *sm)
{
struct smt_para *pa ;
int i ;
......@@ -548,9 +537,7 @@ struct smt_header *sm ;
return(0) ;
}
static int smt_check_set_count(smc,sm)
struct s_smc *smc ;
struct smt_header *sm ;
static int smt_check_set_count(struct s_smc *smc, struct smt_header *sm)
{
struct smt_para *pa ;
struct smt_p_setcount *sc ;
......@@ -566,12 +553,8 @@ struct smt_header *sm ;
return(0) ;
}
void smt_add_para(smc,pcon,para,index,local)
struct s_smc *smc ;
struct s_pcon *pcon ;
u_short para ;
int index ;
int local ;
void smt_add_para(struct s_smc *smc, struct s_pcon *pcon, u_short para,
int index, int local)
{
struct smt_para *pa ;
const struct s_p_tab *pt ;
......@@ -1095,12 +1078,8 @@ int local ;
/*
* set parameter
*/
int smt_set_para(smc,pa,index,local,set)
struct s_smc *smc ;
struct smt_para *pa ;
int index ;
int local ;
int set ;
int smt_set_para(struct s_smc *smc, struct smt_para *pa, int index, int local,
int set)
{
#define IFSET(x) if (set) (x)
......@@ -1549,8 +1528,7 @@ int set ;
#endif
}
static const struct s_p_tab *smt_get_ptab(para)
u_short para ;
static const struct s_p_tab *smt_get_ptab(u_short para)
{
const struct s_p_tab *pt ;
for (pt = p_tab ; pt->p_num && pt->p_num != para ; pt++)
......@@ -1558,8 +1536,7 @@ u_short para ;
return(pt->p_num ? pt : 0) ;
}
static int smt_mib_phys(smc)
struct s_smc *smc ;
static int smt_mib_phys(struct s_smc *smc)
{
#ifdef CONCENTRATOR
SK_UNUSED(smc) ;
......@@ -1572,9 +1549,7 @@ struct s_smc *smc ;
#endif
}
int port_to_mib(smc,p)
struct s_smc *smc ;
int p ;
int port_to_mib(struct s_smc *smc, int p)
{
#ifdef CONCENTRATOR
SK_UNUSED(smc) ;
......@@ -1590,10 +1565,7 @@ int p ;
#ifdef DEBUG
#ifndef BOOT
void dump_smt(smc,sm,text)
struct s_smc *smc ;
struct smt_header *sm ;
char *text ;
void dump_smt(struct s_smc *smc, struct smt_header *sm, char *text)
{
int len ;
struct smt_para *pa ;
......@@ -1680,9 +1652,7 @@ char *text ;
printf("-------------------------------------------------\n\n") ;
}
void dump_hex(p,len)
char *p ;
int len ;
void dump_hex(char *p, int len)
{
int n = 0 ;
while (len--) {
......
......@@ -31,8 +31,7 @@ static const char ID_sccs[] = "@(#)queue.c 2.9 97/08/04 (C) SK " ;
/*
* init event queue management
*/
void ev_init(smc)
struct s_smc *smc ;
void ev_init(struct s_smc *smc)
{
smc->q.ev_put = smc->q.ev_get = smc->q.ev_queue ;
}
......@@ -40,10 +39,7 @@ struct s_smc *smc ;
/*
* add event to queue
*/
void queue_event(smc,class,event)
struct s_smc *smc ;
int class ;
int event ;
void queue_event(struct s_smc *smc, int class, int event)
{
PRINTF("queue class %d event %d\n",class,event) ;
smc->q.ev_put->class = class ;
......@@ -59,9 +55,7 @@ int event ;
/*
* timer_event is called from HW timer package.
*/
void timer_event(smc,token)
struct s_smc *smc ;
u_long token ;
void timer_event(struct s_smc *smc, u_long token)
{
PRINTF("timer event class %d token %d\n",
EV_T_CLASS(token),
......@@ -76,8 +70,7 @@ u_long token ;
* send command to state machine
* end
*/
void ev_dispatcher(smc)
struct s_smc *smc ;
void ev_dispatcher(struct s_smc *smc)
{
struct event_queue *ev ; /* pointer into queue */
int class ;
......@@ -131,9 +124,7 @@ struct s_smc *smc ;
* on 0 disconnect
* on 1 connect
*/
u_short smt_online(smc,on)
struct s_smc *smc ;
int on ;
u_short smt_online(struct s_smc *smc, int on)
{
queue_event(smc,EVENT_ECM,on ? EC_CONNECT : EC_DISCONNECT) ;
ev_dispatcher(smc) ;
......@@ -147,10 +138,7 @@ int on ;
* dump current flag setting
*/
#ifdef CONCENTRATOR
void do_smt_flag(smc,flag,value)
struct s_smc *smc ;
char *flag ;
int value ;
void do_smt_flag(struct s_smc *smc, char *flag, int value)
{
#ifdef DEBUG
struct smt_debug *deb;
......
......@@ -102,17 +102,17 @@ static const char * const rmt_events[] = {
/*
* function declarations
*/
static void rmt_fsm() ;
static void start_rmt_timer0() ;
static void start_rmt_timer1() ;
static void start_rmt_timer2() ;
static void stop_rmt_timer0() ;
static void stop_rmt_timer1() ;
static void stop_rmt_timer2() ;
static void rmt_dup_actions() ;
static void rmt_reinsert_actions() ;
static void rmt_leave_actions() ;
static void rmt_new_dup_actions() ;
static void rmt_fsm(struct s_smc *smc, int cmd);
static void start_rmt_timer0(struct s_smc *smc, u_long value, int event);
static void start_rmt_timer1(struct s_smc *smc, u_long value, int event);
static void start_rmt_timer2(struct s_smc *smc, u_long value, int event);
static void stop_rmt_timer0(struct s_smc *smc);
static void stop_rmt_timer1(struct s_smc *smc);
static void stop_rmt_timer2(struct s_smc *smc);
static void rmt_dup_actions(struct s_smc *smc);
static void rmt_reinsert_actions(struct s_smc *smc);
static void rmt_leave_actions(struct s_smc *smc);
static void rmt_new_dup_actions(struct s_smc *smc);
#ifndef SUPERNET_3
extern void restart_trt_for_dbcn() ;
......@@ -122,8 +122,7 @@ extern void restart_trt_for_dbcn() ;
init RMT state machine
clear all RMT vars and flags
*/
void rmt_init(smc)
struct s_smc *smc ;
void rmt_init(struct s_smc *smc)
{
smc->mib.m[MAC0].fddiMACRMTState = ACTIONS(RM0_ISOLATED) ;
smc->r.dup_addr_test = DA_NONE ;
......@@ -145,9 +144,7 @@ struct s_smc *smc ;
process event
until SM is stable
*/
void rmt(smc,event)
struct s_smc *smc ;
int event ;
void rmt(struct s_smc *smc, int event)
{
int state ;
......@@ -166,9 +163,7 @@ int event ;
/*
process RMT event
*/
static void rmt_fsm(smc,cmd)
struct s_smc *smc ;
int cmd ;
static void rmt_fsm(struct s_smc *smc, int cmd)
{
/*
* RM00-RM70 : from all states
......@@ -535,8 +530,7 @@ int cmd ;
* (jd) RMT duplicate address actions
* leave the ring or reinsert just as configured
*/
static void rmt_dup_actions(smc)
struct s_smc *smc ;
static void rmt_dup_actions(struct s_smc *smc)
{
if (smc->r.jm_flag) {
}
......@@ -555,8 +549,7 @@ struct s_smc *smc ;
/*
* Reconnect to the Ring
*/
static void rmt_reinsert_actions(smc)
struct s_smc *smc ;
static void rmt_reinsert_actions(struct s_smc *smc)
{
queue_event(smc,EVENT_ECM,EC_DISCONNECT) ;
queue_event(smc,EVENT_ECM,EC_CONNECT) ;
......@@ -565,8 +558,7 @@ struct s_smc *smc ;
/*
* duplicate address detected
*/
static void rmt_new_dup_actions(smc)
struct s_smc *smc ;
static void rmt_new_dup_actions(struct s_smc *smc)
{
smc->r.da_flag = TRUE ;
smc->r.bn_flag = FALSE ;
......@@ -591,8 +583,7 @@ struct s_smc *smc ;
/*
* leave the ring
*/
static void rmt_leave_actions(smc)
struct s_smc *smc ;
static void rmt_leave_actions(struct s_smc *smc)
{
queue_event(smc,EVENT_ECM,EC_DISCONNECT) ;
/*
......@@ -605,10 +596,7 @@ struct s_smc *smc ;
* SMT timer interface
* start RMT timer 0
*/
static void start_rmt_timer0(smc,value,event)
struct s_smc *smc ;
u_long value ;
int event ;
static void start_rmt_timer0(struct s_smc *smc, u_long value, int event)
{
smc->r.timer0_exp = FALSE ; /* clear timer event flag */
smt_timer_start(smc,&smc->r.rmt_timer0,value,EV_TOKEN(EVENT_RMT,event));
......@@ -618,10 +606,7 @@ int event ;
* SMT timer interface
* start RMT timer 1
*/
static void start_rmt_timer1(smc,value,event)
struct s_smc *smc ;
u_long value ;
int event ;
static void start_rmt_timer1(struct s_smc *smc, u_long value, int event)
{
smc->r.timer1_exp = FALSE ; /* clear timer event flag */
smt_timer_start(smc,&smc->r.rmt_timer1,value,EV_TOKEN(EVENT_RMT,event));
......@@ -631,10 +616,7 @@ int event ;
* SMT timer interface
* start RMT timer 2
*/
static void start_rmt_timer2(smc,value,event)
struct s_smc *smc ;
u_long value ;
int event ;
static void start_rmt_timer2(struct s_smc *smc, u_long value, int event)
{
smc->r.timer2_exp = FALSE ; /* clear timer event flag */
smt_timer_start(smc,&smc->r.rmt_timer2,value,EV_TOKEN(EVENT_RMT,event));
......@@ -644,8 +626,7 @@ int event ;
* SMT timer interface
* stop RMT timer 0
*/
static void stop_rmt_timer0(smc)
struct s_smc *smc ;
static void stop_rmt_timer0(struct s_smc *smc)
{
if (smc->r.rmt_timer0.tm_active)
smt_timer_stop(smc,&smc->r.rmt_timer0) ;
......@@ -655,8 +636,7 @@ struct s_smc *smc ;
* SMT timer interface
* stop RMT timer 1
*/
static void stop_rmt_timer1(smc)
struct s_smc *smc ;
static void stop_rmt_timer1(struct s_smc *smc)
{
if (smc->r.rmt_timer1.tm_active)
smt_timer_stop(smc,&smc->r.rmt_timer1) ;
......@@ -666,9 +646,9 @@ struct s_smc *smc ;
* SMT timer interface
* stop RMT timer 2
*/
static void stop_rmt_timer2(smc)
struct s_smc *smc ;
static void stop_rmt_timer2(struct s_smc *smc)
{
if (smc->r.rmt_timer2.tm_active)
smt_timer_stop(smc,&smc->r.rmt_timer2) ;
}
......@@ -131,20 +131,10 @@ void mac_drv_clear_rxd(struct s_smc *smc, volatile struct s_smt_fp_rxd *rxd,
int frag_count);
int mac_drv_rx_init(struct s_smc *smc, int len, int fc, char *look_ahead,
int la_len);
void smt_timer_poll(struct s_smc *smc);
void ring_status_indication(struct s_smc *smc, u_long status);
unsigned long smt_get_time(void);
void smt_stat_counter(struct s_smc *smc, int stat);
void cfm_state_change(struct s_smc *smc, int c_state);
void ecm_state_change(struct s_smc *smc, int e_state);
void pcm_state_change(struct s_smc *smc, int plc, int p_state);
void rmt_state_change(struct s_smc *smc, int r_state);
void drv_reset_indication(struct s_smc *smc);
void dump_data(unsigned char *Data, int length);
// External functions from the hardware module
extern u_int mac_drv_check_space();
extern u_int mac_drv_check_space(void);
extern void read_address(struct s_smc *smc, u_char * mac_addr);
extern void card_stop(struct s_smc *smc);
extern int mac_drv_init(struct s_smc *smc);
......@@ -157,9 +147,7 @@ extern void fddi_isr(struct s_smc *smc);
extern void hwm_rx_frag(struct s_smc *smc, char far * virt, u_long phys,
int len, int frame_status);
extern void mac_drv_rx_mode(struct s_smc *smc, int mode);
extern void mac_drv_clear_tx_queue(struct s_smc *smc);
extern void mac_drv_clear_rx_queue(struct s_smc *smc);
extern void mac_clear_multicast(struct s_smc *smc);
extern void enable_tx_irq(struct s_smc *smc, u_short queue);
extern void mac_drv_clear_txd(struct s_smc *smc);
......@@ -921,8 +909,7 @@ static void skfp_ctl_set_multicast_list_wo_lock(struct net_device *dev)
dmi = dev->mc_list;
for (i = 0; i < dev->mc_count; i++) {
mac_add_multicast(smc,
dmi->dmi_addr, 1);
mac_add_multicast(smc, dmi->dmi_addr, 1);
PRINTK(KERN_INFO "ENABLE MC ADDRESS:");
PRINTK(" %02x %02x %02x ",
dmi->dmi_addr[0],
......
This diff is collapsed.
......@@ -72,13 +72,11 @@ static const char ID_sccs[] = "@(#)smtdef.c 2.53 99/08/11 (C) SK " ;
#define DEFAULT_LCT_EXTEND 50
/* Forward declarations */
extern void smt_reset_defaults ();
static void smt_init_mib ();
void smt_reset_defaults(struct s_smc *smc, int level);
static void smt_init_mib(struct s_smc *smc, int level);
static int set_min_max(int maxflag, u_long mib, u_long limit, u_long *oper);
static int set_min_max() ;
void smt_set_defaults(smc)
struct s_smc *smc ;
void smt_set_defaults(struct s_smc *smc)
{
smt_reset_defaults(smc,0) ;
}
......@@ -86,9 +84,7 @@ struct s_smc *smc ;
#define MS2BCLK(x) ((x)*12500L)
#define US2BCLK(x) ((x)*1250L)
void smt_reset_defaults(smc,level)
struct s_smc *smc ;
int level ;
void smt_reset_defaults(struct s_smc *smc, int level)
{
struct smt_config *smt ;
int i ;
......@@ -170,9 +166,7 @@ static const char man_data[32] =
/* 01234567890123456789012345678901 */
"xxxSK-NET FDDI SMT 7.3 - V2.8.8" ;
static void smt_init_mib(smc,level)
struct s_smc *smc ;
int level ;
static void smt_init_mib(struct s_smc *smc, int level)
{
struct fddi_mib *mib ;
struct fddi_mib_p *pm ;
......@@ -292,8 +286,7 @@ int level ;
(void) smt_set_mac_opvalues(smc) ;
}
int smt_set_mac_opvalues(smc)
struct s_smc *smc ;
int smt_set_mac_opvalues(struct s_smc *smc)
{
int st ;
int st2 ;
......@@ -318,8 +311,7 @@ struct s_smc *smc ;
return(st) ;
}
void smt_fixup_mib(smc)
struct s_smc *smc ;
void smt_fixup_mib(struct s_smc *smc)
{
#ifdef CONCENTRATOR
switch (smc->s.sas) {
......@@ -355,11 +347,7 @@ struct s_smc *smc ;
* use mib
* NOTE : numbers are negative, negate comparison !
*/
static int set_min_max(maxflag,mib,limit,oper)
int maxflag ;
u_long mib ;
u_long limit ;
u_long *oper ;
static int set_min_max(int maxflag, u_long mib, u_long limit, u_long *oper)
{
u_long old ;
old = *oper ;
......@@ -369,3 +357,4 @@ u_long *oper ;
*oper = mib ;
return(old != *oper) ;
}
......@@ -27,7 +27,7 @@
static const char ID_sccs[] = "@(#)smtinit.c 1.15 97/05/06 (C) SK " ;
#endif
extern void init_fddi_driver() ;
void init_fddi_driver(struct s_smc *smc, u_char *mac_addr);
/* define global debug variable */
#if defined(DEBUG) && !defined(DEBUG_BRD)
......@@ -48,8 +48,7 @@ struct smt_debug debug;
* Can not be called in smt_reset_defaults, because it is not sure that
* the OEM ID is already defined.
*/
static void set_oem_spec_val(smc)
struct s_smc *smc ;
static void set_oem_spec_val(struct s_smc *smc)
{
struct fddi_mib *mib ;
......@@ -66,9 +65,8 @@ struct s_smc *smc ;
/*
* Init SMT
*/
int init_smt(smc,mac_addr)
struct s_smc *smc ;
u_char *mac_addr ; /* canonical address or NULL */
int init_smt(struct s_smc *smc, u_char *mac_addr)
/* u_char *mac_addr; canonical address or NULL */
{
int p ;
......@@ -124,3 +122,4 @@ u_char *mac_addr ; /* canonical address or NULL */
return(0) ;
}
......@@ -82,8 +82,9 @@ static struct s_ptab {
/*
* local function declarations
*/
static u_long parse_num() ;
static int parse_word() ;
static u_long parse_num(int type, char _far *value, char *v, u_long mn,
u_long mx, int scale);
static int parse_word(char *buf, char _far *text);
#ifdef SIM
#define DB_MAIN(a,b,c) printf(a,b,c)
......@@ -117,11 +118,8 @@ static int parse_word() ;
*
* END_MANUAL_ENTRY()
*/
int smt_parse_arg(smc,keyword,type,value)
struct s_smc *smc ;
char _far *keyword ;
int type ;
char _far *value ;
int smt_parse_arg(struct s_smc *smc, char _far *keyword, int type,
char _far *value)
{
char keybuf[MAX_VAL+1];
char valbuf[MAX_VAL+1];
......@@ -287,9 +285,7 @@ char _far *value ;
return(0) ;
}
static int parse_word(buf,text)
char *buf ;
char _far *text ;
static int parse_word(char *buf, char _far *text)
{
char c ;
char *p ;
......@@ -364,13 +360,8 @@ char _far *text ;
return(0) ;
}
static u_long parse_num(type,value,v,mn,mx,scale)
int type ;
char _far *value ;
char *v ;
u_long mn ;
u_long mx ;
int scale ;
static u_long parse_num(int type, char _far *value, char *v, u_long mn,
u_long mx, int scale)
{
u_long x = 0 ;
char c ;
......@@ -473,3 +464,4 @@ main()
exit(0) ;
}
#endif
......@@ -26,18 +26,9 @@
static const char ID_sccs[] = "@(#)smttimer.c 2.4 97/08/04 (C) SK " ;
#endif
/*
* external function declarations
*/
extern u_long hwt_read() ;
extern void hwt_stop() ;
extern void hwt_start() ;
static void timer_done() ;
static void timer_done(struct s_smc *smc, int restart);
void smt_timer_init(smc)
struct s_smc *smc ;
void smt_timer_init(struct s_smc *smc)
{
smc->t.st_queue = 0 ;
smc->t.st_fast.tm_active = FALSE ;
......@@ -45,9 +36,7 @@ struct s_smc *smc ;
hwt_init(smc) ;
}
void smt_timer_stop(smc,timer)
struct s_smc *smc ;
struct smt_timer *timer ;
void smt_timer_stop(struct s_smc *smc, struct smt_timer *timer)
{
struct smt_timer **prev ;
struct smt_timer *tm ;
......@@ -70,11 +59,8 @@ struct smt_timer *timer ;
}
}
void smt_timer_start(smc,timer,time,token)
struct s_smc *smc ;
struct smt_timer *timer ;
u_long time ;
u_long token ;
void smt_timer_start(struct s_smc *smc, struct smt_timer *timer, u_long time,
u_long token)
{
struct smt_timer **prev ;
struct smt_timer *tm ;
......@@ -121,21 +107,17 @@ u_long token ;
hwt_start(smc,smc->t.st_queue->tm_delta) ;
}
void smt_force_irq(smc)
struct s_smc *smc ;
void smt_force_irq(struct s_smc *smc)
{
smt_timer_start(smc,&smc->t.st_fast,32L, EV_TOKEN(EVENT_SMT,SM_FAST));
}
void smt_timer_done(smc)
struct s_smc *smc ;
void smt_timer_done(struct s_smc *smc)
{
timer_done(smc,1) ;
}
static void timer_done(smc,restart)
struct s_smc *smc ;
int restart ;
static void timer_done(struct s_smc *smc, int restart)
{
u_long delta ;
struct smt_timer *tm ;
......@@ -171,3 +153,4 @@ int restart ;
if (restart && smc->t.st_queue)
hwt_start(smc,smc->t.st_queue->tm_delta) ;
}
......@@ -38,10 +38,10 @@ static const char ID_sccs[] = "@(#)srf.c 1.18 97/08/04 (C) SK " ;
/*
* function declarations
*/
static void clear_all_rep() ;
static void clear_reported() ;
static void smt_send_srf() ;
static struct s_srf_evc *smt_get_evc() ;
static void clear_all_rep(struct s_smc *smc);
static void clear_reported(struct s_smc *smc);
static void smt_send_srf(struct s_smc *smc);
static struct s_srf_evc *smt_get_evc(struct s_smc *smc, int code, int index);
#define MAX_EVCS (sizeof(smc->evcs)/sizeof(smc->evcs[0]))
......@@ -69,8 +69,7 @@ static const struct evc_init evc_inits[] = {
#define MAX_INIT_EVC (sizeof(evc_inits)/sizeof(evc_inits[0]))
void smt_init_evc(smc)
struct s_smc *smc ;
void smt_init_evc(struct s_smc *smc)
{
struct s_srf_evc *evc ;
const struct evc_init *init ;
......@@ -159,10 +158,7 @@ struct s_smc *smc ;
smc->srf.sr_state = SR0_WAIT ;
}
static struct s_srf_evc *smt_get_evc(smc,code,index)
struct s_smc *smc ;
int code ;
int index ;
static struct s_srf_evc *smt_get_evc(struct s_smc *smc, int code, int index)
{
int i ;
struct s_srf_evc *evc ;
......@@ -188,11 +184,7 @@ static const char * const srf_names[] = {
} ;
#endif
void smt_srf_event(smc,code,index,cond)
struct s_smc *smc ;
int code ;
int index ;
int cond ;
void smt_srf_event(struct s_smc *smc, int code, int index, int cond)
{
struct s_srf_evc *evc ;
int cond_asserted = 0 ;
......@@ -340,8 +332,7 @@ int cond ;
}
}
static void clear_all_rep(smc)
struct s_smc *smc ;
static void clear_all_rep(struct s_smc *smc)
{
struct s_srf_evc *evc ;
int i ;
......@@ -354,8 +345,7 @@ struct s_smc *smc ;
smc->srf.any_report = FALSE ;
}
static void clear_reported(smc)
struct s_smc *smc ;
static void clear_reported(struct s_smc *smc)
{
struct s_srf_evc *evc ;
int i ;
......@@ -375,13 +365,10 @@ struct s_smc *smc ;
}
}
extern SMbuf *smt_build_frame() ;
/*
* build and send SMT SRF frame
*/
static void smt_send_srf(smc)
struct s_smc *smc ;
static void smt_send_srf(struct s_smc *smc)
{
struct smt_header *smt ;
......@@ -439,3 +426,4 @@ struct s_smc *smc ;
#endif /* no BOOT */
#endif /* no SLIM_SMT */
......@@ -96,16 +96,51 @@ static const char version[] =
#define USE_32_BIT 1
#endif
#if defined(__H8300H__) || defined(__H8300S__)
#define NO_AUTOPROBE
#undef insl
#undef outsl
#define insl(a,b,l) io_insl_noswap(a,b,l)
#define outsl(a,b,l) io_outsl_noswap(a,b,l)
#endif
/*
.the SMC9194 can be at any of the following port addresses. To change,
.for a slightly different card, you can add it to the array. Keep in
.mind that the array must end in zero.
*/
static unsigned int smc_portlist[] __initdata = {
0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0,
0x300, 0x320, 0x340, 0x360, 0x380, 0x3A0, 0x3C0, 0x3E0, 0
struct devlist {
unsigned int port;
unsigned int irq;
};
#if defined(CONFIG_H8S_EDOSK2674)
static struct devlist smc_devlist[] __initdata = {
{.port = 0xf80000, .irq = 16},
{.port = 0, .irq = 0 },
};
#else
static struct devlist smc_devlist[] __initdata = {
{.port = 0x200, .irq = 0},
{.port = 0x220, .irq = 0},
{.port = 0x240, .irq = 0},
{.port = 0x260, .irq = 0},
{.port = 0x280, .irq = 0},
{.port = 0x2A0, .irq = 0},
{.port = 0x2C0, .irq = 0},
{.port = 0x2E0, .irq = 0},
{.port = 0x300, .irq = 0},
{.port = 0x320, .irq = 0},
{.port = 0x340, .irq = 0},
{.port = 0x360, .irq = 0},
{.port = 0x380, .irq = 0},
{.port = 0x3A0, .irq = 0},
{.port = 0x3C0, .irq = 0},
{.port = 0x3E0, .irq = 0},
{.port = 0, .irq = 0},
};
#endif
/*
. Wait time for memory to be free. This probably shouldn't be
. tuned that much, as waiting for this means nothing else happens
......@@ -468,7 +503,7 @@ static void smc_setmulticast( int ioaddr, int count, struct dev_mc_list * addrs
static int smc_wait_to_send_packet( struct sk_buff * skb, struct net_device * dev )
{
struct smc_local *lp = netdev_priv(dev);
unsigned short ioaddr = dev->base_addr;
unsigned int ioaddr = dev->base_addr;
word length;
unsigned short numPages;
word time_out;
......@@ -582,7 +617,7 @@ static void smc_hardware_send_packet( struct net_device * dev )
byte packet_no;
struct sk_buff * skb = lp->saved_skb;
word length;
unsigned short ioaddr;
unsigned int ioaddr;
byte * buf;
ioaddr = dev->base_addr;
......@@ -637,7 +672,11 @@ static void smc_hardware_send_packet( struct net_device * dev )
#ifdef USE_32_BIT
if ( length & 0x2 ) {
outsl(ioaddr + DATA_1, buf, length >> 2 );
#if !defined(__H8300H__) && !defined(__H8300S__)
outw( *((word *)(buf + (length & 0xFFFFFFFC))),ioaddr +DATA_1);
#else
ctrl_outw( *((word *)(buf + (length & 0xFFFFFFFC))),ioaddr +DATA_1);
#endif
}
else
outsl(ioaddr + DATA_1, buf, length >> 2 );
......@@ -693,9 +732,12 @@ static int ifport;
struct net_device * __init smc_init(int unit)
{
struct net_device *dev = alloc_etherdev(sizeof(struct smc_local));
unsigned *port;
static struct devlist *smcdev = smc_devlist;
int err = 0;
#ifndef NO_AUTOPROBE
smcdev = smc_devlist;
#endif
if (!dev)
return ERR_PTR(-ENODEV);
......@@ -713,11 +755,11 @@ struct net_device * __init smc_init(int unit)
} else if (io != 0) { /* Don't probe at all. */
err = -ENXIO;
} else {
for (port = smc_portlist; *port; port++) {
if (smc_probe(dev, *port) == 0)
for (;smcdev->port; smcdev++) {
if (smc_probe(dev, smcdev->port) == 0)
break;
}
if (!*port)
if (!smcdev->port)
err = -ENODEV;
}
if (err)
......@@ -743,6 +785,7 @@ struct net_device * __init smc_init(int unit)
*/
int __init smc_findirq( int ioaddr )
{
#ifndef NO_AUTOPROBE
int timeout = 20;
unsigned long cookie;
......@@ -797,6 +840,14 @@ int __init smc_findirq( int ioaddr )
/* and return what I found */
return probe_irq_off(cookie);
#else /* NO_AUTOPROBE */
struct devlist *smcdev;
for (smcdev = smc_devlist; smcdev->port; smcdev++) {
if (smcdev->port == ioaddr)
return smcdev->irq;
}
return 0;
#endif
}
/*----------------------------------------------------------------------
......@@ -865,6 +916,7 @@ static int __init smc_probe(struct net_device *dev, int ioaddr)
retval = -ENODEV;
goto err_out;
}
#if !defined(CONFIG_H8S_EDOSK2674)
/* well, we've already written once, so hopefully another time won't
hurt. This time, I need to switch the bank register to bank 1,
so I can access the base address register */
......@@ -879,6 +931,10 @@ static int __init smc_probe(struct net_device *dev, int ioaddr)
retval = -ENODEV;
goto err_out;
}
#else
(void)base_address_register; /* Warning suppression */
#endif
/* check if the revision register is something that I recognize.
These might need to be added to later, as future revisions
......
......@@ -2922,7 +2922,8 @@ static int is_quattro_p(struct pci_dev *pdev)
struct list_head *tmp;
int n_hmes;
if (busdev->vendor != PCI_VENDOR_ID_DEC ||
if (busdev == NULL ||
busdev->vendor != PCI_VENDOR_ID_DEC ||
busdev->device != PCI_DEVICE_ID_DEC_21153)
return 0;
......
......@@ -1717,7 +1717,7 @@ tc35815_killall(void)
}
static struct pci_driver tc35815_driver = {
.name =TC35815_MODULE_NAME,
.name = TC35815_MODULE_NAME,
.probe = tc35815_probe,
.remove = NULL,
.id_table = tc35815_pci_tbl,
......
This diff is collapsed.
......@@ -1519,6 +1519,7 @@ static void __orinoco_ev_wterr(struct net_device *dev, hermes_t *hw)
static void __orinoco_ev_infdrop(struct net_device *dev, hermes_t *hw)
{
if (net_ratelimit())
printk(KERN_WARNING "%s: Information frame lost.\n", dev->name);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment