11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	(C)Copyright 1998,1999 SysKonnect,
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	a business unit of Schneider & Koch & Co. Datensysteme GmbH.
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	This program is free software; you can redistribute it and/or modify
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	it under the terms of the GNU General Public License as published by
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	the Free Software Foundation; either version 2 of the License, or
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	(at your option) any later version.
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	The information in this file is provided "AS IS" without warranty.
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	Operating system specific definitions for driver and
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	hardware module.
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef	TARGETOS_H
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TARGETOS_H
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds//-------- those should go into include/linux/pci.h
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_VENDOR_ID_SK		0x1148
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_DEVICE_ID_SK_FP		0x4000
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds//--------
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds//-------- those should go into include/linux/if_fddi.h
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FDDI_MAC_HDR_LEN 13
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FDDI_RII	0x01 /* routing information bit */
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FDDI_RCF_DIR_BIT 0x80
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FDDI_RCF_LEN_MASK 0x1f
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FDDI_RCF_BROADCAST 0x8000
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FDDI_RCF_LIMITED_BROADCAST 0xA000
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FDDI_RCF_FRAME2K 0x20
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FDDI_RCF_FRAME4K 0x30
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds//--------
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#undef ADDR
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/io.h>
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/netdevice.h>
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/fddidevice.h>
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/skbuff.h>
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/pci.h>
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// is redefined by linux, but we need our definition
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#undef ADDR
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef MEM_MAPPED_IO
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	ADDR(a) (smc->hw.iop+(a))
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	ADDR(a) (((a)>>7) ? (outp(smc->hw.iop+B0_RAP,(a)>>7), (smc->hw.iop+( ((a)&0x7F) | ((a)>>7 ? 0x80:0)) )) : (smc->hw.iop+(((a)&0x7F)|((a)>>7 ? 0x80:0))))
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
60aab3ac26108642eaa06efa4697dab595c7de2bbdJeff Kirsher#include "hwmtm.h"
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TRUE  1
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FALSE 0
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// HWM Definitions
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// -----------------------
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FDDI_TRACE(string, arg1, arg2, arg3)	// Performance analysis.
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef PCI
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NDD_TRACE(string, arg1, arg2, arg3)	// Performance analysis.
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif	// PCI
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SMT_PAGESIZE	PAGE_SIZE	// Size of a memory page (power of 2).
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// -----------------------
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// SMT Definitions
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// -----------------------
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	TICKS_PER_SECOND	HZ
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SMC_VERSION    		1
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// -----------------------
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// OS-Driver Definitions
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// -----------------------
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NO_ADDRESS 0xffe0	/* No Device (I/O) Address */
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SKFP_MAX_NUM_BOARDS 8	/* maximum number of PCI boards */
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SK_BUS_TYPE_PCI		0
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SK_BUS_TYPE_EISA	1
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FP_IO_LEN		256	/* length of IO area used */
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define u8	unsigned char
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define u16	unsigned short
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define u32	unsigned int
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_TX_QUEUE_LEN	20 // number of packets queued by driver
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_FRAME_SIZE		4550
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	RX_LOW_WATERMARK	NUM_RECEIVE_BUFFERS  / 2
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TX_LOW_WATERMARK	NUM_TRANSMIT_BUFFERS - 2
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds** Include the IOCTL stuff
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/sockios.h>
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	SKFPIOCTL	SIOCDEVPRIVATE
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct s_skfp_ioctl {
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned short cmd;                /* Command to run */
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned short len;                /* Length of the data buffer */
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char __user *data;        /* Pointer to the data buffer */
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds** Recognised ioctl commands for the driver
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SKFP_GET_STATS		0x05 /* Get the driver statistics */
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SKFP_CLR_STATS		0x06 /* Zero out the driver statistics */
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// The per-adapter driver structure
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct s_smt_os {
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct net_device *dev;
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct net_device *next_module;
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32	bus_type;		/* bus type (0 == PCI, 1 == EISA) */
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev 	pdev;		/* PCI device structure */
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long base_addr;
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char factory_mac_addr[8];
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ulong	SharedMemSize;
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ulong	SharedMemHeap;
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void*	SharedMemAddr;
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dma_addr_t SharedMemDMA;
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ulong	QueueSkb;
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct	sk_buff_head SendSkbQueue;
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ulong	MaxFrameSize;
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8	ResetRequested;
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	// MAC statistics structure
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct fddi_statistics MacStat;
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	// receive into this local buffer if no skb available
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	// data will be not valid, because multiple RxDs can
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	// point here at the same time, it must be at least
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	// MAX_FRAME_SIZE bytes in size
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char *LocalRxBuffer;
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dma_addr_t LocalRxBufferDMA;
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	// Version (required by SMT module).
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u_long smc_version ;
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	// Required by Hardware Module (HWM).
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct hw_modul hwm ;
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	// For SMP-savety
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	spinlock_t DriverLock;
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct s_smt_os skfddi_priv;
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif	 // _TARGETOS_
165