Commit 80e47371 authored by David S. Miller's avatar David S. Miller

[NET]: Kill PTI fddi driver, never completed and no plans to finish.

parent 73098660
/* $Id: ptifddi.c,v 1.14 2001/04/14 01:12:04 davem Exp $
* ptifddi.c: Network driver for Performance Technologies single-attach
* and dual-attach FDDI sbus cards.
*
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
*/
static char *version =
"ptifddi.c:v1.0 10/Dec/96 David S. Miller (davem@caipfs.rutgers.edu)\n";
#include <linux/string.h>
#include <linux/init.h>
#include "ptifddi.h"
#include "ptifddi_asm.h"
#ifdef MODULE
static struct ptifddi *root_pti_dev;
#endif
static inline void pti_reset(struct ptifddi *pp)
{
pp->reset = 1;
}
static inline void pti_unreset(struct ptifddi *pp)
{
pp->unreset = 1;
}
static inline void pti_load_code_base(struct dfddi_ram *rp, unsigned short addr)
{
rp->loader_addr = ((addr << 8) & 0xff00) | ((addr >> 8) & 0x00ff);
}
static inline void pti_clear_dpram(struct ptifddi *pp)
{
memset(pp->dpram, 0, DPRAM_SIZE);
}
#define CARD_TEST_TIMEOUT 100000
static inline int pti_card_test(struct ptifddi *pp)
{
struct dfddi_ram *rp = pp->dpram;
unsigned char *code = &rp->loader;
unsigned char *status = (unsigned char *) rp;
int clicks = CARD_TEST_TIMEOUT;
/* Clear it out. */
pti_clear_dpram(pp);
/* Load test data. */
for(i = 0; i < test_firmware_size; i++)
code[i] = test_firmware[i];
/* Tell card where to execute the code. */
pti_load_code_base(pp, test_firmware_dev_addr);
/* Clear test run status in dpram. */
*status = 0;
/* Reset single attach state machine before the test. */
rp->reset = 1;
/* Unreset, to get the test code running. */
pti_unreset(pp);
/* Wait for dpram status to become 5, else fail if we time out. */
while(--clicks) {
if(*status == 5) {
pti_reset(pp);
return 0;
}
udelay(20);
}
return 1;
}
static inline void pti_init_firmware_loader(struct ptifddi *pp)
{
struct dfddi_ram *rp = pp->dpram;
int i;
for(i = 0; i < firmware_loader_size; i++)
rp->loader.loader_firmware[i] = firmware_loader[i];
}
static inline void pti_load_main_firmware(struct ptifddi *pp)
{
struct dfddi_ram *rp = pp->dpram;
struct dpram_loader *lp = &rp.loader;
int i;
}
static void pti_init_rings(struct ptifddi *pp, int from_irq)
{
}
static int pti_init(struct ptifddi *pp, int from_irq)
{
}
static void pti_is_not_so_happy(struct ptifddi *pp)
{
}
static inline void pti_tx(struct ptifddi *pp, struct net_device *dev)
{
}
static inline void myri_rx(struct ptifddi *pp, struct net_device *dev)
{
}
static void pti_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
struct net_device *dev = (struct net_device *) dev_id;
struct ptifddi *pp = (struct ptifddi *) dev->priv;
}
static int pti_open(struct net_device *dev)
{
struct ptifddi *pp = (struct ptifddi *) dev->priv;
return pti_init(pp, in_interrupt());
}
static int pti_close(struct net_device *dev)
{
struct ptifddi *pp = (struct ptifddi *) dev->priv;
return 0;
}
static int pti_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct ptifddi *pp = (struct ptifddi *) dev->priv;
}
static struct net_device_stats *pti_get_stats(struct net_device *dev)
{ return &(((struct ptifddi *)dev->priv)->enet_stats); }
static void pti_set_multicast(struct net_device *dev)
{
}
static inline int pti_fddi_init(struct net_device *dev, struct sbus_dev *sdev, int num)
{
static unsigned version_printed;
struct ptifddi *pp;
int i;
dev = init_fddidev(0, sizeof(struct ptifddi));
if(version_printed++ == 0)
printk(version);
/* Register 0 mapping contains DPRAM. */
pp->dpram = (struct dfddi_ram *) sbus_ioremap(
&sdep->resource[0], 0, sizeof(sturct dfddi_ram), "PTI FDDI DPRAM");
if(!pp->dpram) {
printk("ptiFDDI: Cannot map DPRAM I/O area.\n");
return -ENODEV;
}
/* Next, register 1 contains reset byte. */
pp->reset = (unsigned char *) sbus_ioremap(
&sdep->resource[1], 0, 1, "PTI FDDI RESET Byte");
if(!pp->reset) {
printk("ptiFDDI: Cannot map RESET byte.\n");
return -ENODEV;
}
/* Register 2 contains unreset byte. */
pp->unreset = (unsigned char *) sbus_ioremap(
&sdep->resource[2], 0, 1, "PTI FDDI UNRESET Byte");
if(!pp->unreset) {
printk("ptiFDDI: Cannot map UNRESET byte.\n");
return -ENODEV;
}
/* Reset the card. */
pti_reset(pp);
/* Run boot-up card tests. */
i = pti_card_test(pp);
if(i) {
printk("ptiFDDI: Bootup card test fails.\n");
return -ENODEV;
}
/* Clear DPRAM, start afresh. */
pti_clear_dpram(pp);
/* Init the firmware loader. */
pti_init_firmware_loader(pp);
/* Now load main card FDDI firmware, using the loader. */
pti_load_main_firmware(pp);
}
int __init ptifddi_sbus_probe(struct net_device *dev)
{
struct sbus_bus *bus;
struct sbus_dev *sdev = 0;
static int called;
int cards = 0, v;
if(called)
return -ENODEV;
called++;
for_each_sbus(bus) {
for_each_sbusdev(sdev, bus) {
if(cards) dev = NULL;
if(!strcmp(sdev->prom_name, "PTI,sbs600") ||
!strcmp(sdev->prom_name, "DPV,fddid")) {
cards++;
DET(("Found PTI FDDI as %s\n", sdev->prom_name));
if((v = pti_fddi_init(dev, sdev, (cards - 1))))
return v;
}
}
}
if(!cards)
return -ENODEV;
return 0;
}
#ifdef MODULE
int
init_module(void)
{
root_pti_dev = NULL;
return ptifddi_sbus_probe(NULL);
}
void
cleanup_module(void)
{
struct ptifddi *pp;
while (root_pti_dev) {
pp = root_pti_dev->next_module;
unregister_netdev(root_pti_dev->dev);
kfree(root_pti_dev->dev);
root_pti_dev = mp;
}
}
#endif /* MODULE */
/* $Id: ptifddi.h,v 1.3 1999/08/20 00:31:08 davem Exp $
* ptifddi.c: Defines for Performance Technologies FDDI sbus cards.
*
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
*/
#ifndef _PTIFDDI_H
#define _PTIFDDI_H
struct dpram_loader {
volatile unsigned char dpram_stat;
volatile unsigned char _unused;
volatile unsigned char addr_low;
volatile unsigned char addr_hi;
volatile unsigned char num_bytes;
volatile unsigned char data[0x3b];
volatile unsigned char loader_firmware[0xc0];
};
struct dfddi_ram {
/*0x000*/ unsigned char _unused0[0x100];
/*0x100*/ struct dpram_loader loader;
/*0x200*/ unsigned char instructions[0x400];
/*0x600*/ unsigned char msg_in[0x20];
/*0x620*/ unsigned char msg_out[0x20];
/*0x640*/ unsigned char _unused2[0x50];
/*0x690*/ unsigned char smsg_in[0x20];
/*0x6b0*/ unsigned char _unused3[0x30];
/*0x6e0*/ unsigned char beacom_frame[0x20];
/*0x700*/ unsigned char re_sync;
/*0x701*/ unsigned char _unused4;
/*0x702*/ unsigned short tswitch;
/*0x704*/ unsigned char evq_lost;
/*0x705*/ unsigned char _unused6;
/*0x706*/ unsigned char signal_lost;
/*0x707*/ unsigned char _unused7;
/*0x708*/ unsigned char lerror;
/*0x709*/ unsigned char _unused8;
/*0x70a*/ unsigned char rstate;
/*0x70b*/ unsigned char _unused9[0x13];
/*0x716*/ unsigned short dswitch;
/*0x718*/ unsigned char _unused10[0x48];
/*0x750*/ unsigned char cbusy;
/*0x751*/ unsigned char hbusy;
/*0x752*/ unsigned short istat;
/*0x754*/ unsigned char _unused11[];
/*0x756*/ unsigned char disable;
/*0x757*/ unsigned char _unused12[];
/*0x78e*/ unsigned char ucvalid;
/*0x78f*/ unsigned char _unused13;
/*0x790*/ unsigned int u0addr;
/*0x794*/ unsigned char _unused14[];
/*0x7a8*/ unsigned int P_player;
/*0x7ac*/ unsigned int Q_player;
/*0x7b0*/ unsigned int macsi;
/*0x7b4*/ unsigned char _unused15[];
/*0x7be*/ unsigned short reset;
/*0x7c0*/ unsigned char _unused16[];
/*0x7fc*/ unsigned short iack;
/*0x7fe*/ unsigned short loader_addr;
};
#define DPRAM_SIZE 0x800
#define DPRAM_STAT_VALID 0x80
#define DPRAM_STAT_EMPTY 0x00
struct ptifddi {
struct dfddi_ram *dpram;
unsigned char *reset;
unsigned char *unreset;
struct net_device *dev;
struct ptifddi *next_module;
};
#endif /* !(_PTIFDDI_H) */
This source diff could not be displayed because it is too large. You can view the blob instead.
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