1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /****************************************************************************** 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * (C)Copyright 1998,1999 SysKonnect, 5*4882a593Smuzhiyun * a business unit of Schneider & Koch & Co. Datensysteme GmbH. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * The information in this file is provided "AS IS" without warranty. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun ******************************************************************************/ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* 12*4882a593Smuzhiyun * Operating system specific definitions for driver and 13*4882a593Smuzhiyun * hardware module. 14*4882a593Smuzhiyun */ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #ifndef TARGETOS_H 17*4882a593Smuzhiyun #define TARGETOS_H 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun //-------- those should go into include/linux/pci.h 21*4882a593Smuzhiyun #define PCI_VENDOR_ID_SK 0x1148 22*4882a593Smuzhiyun #define PCI_DEVICE_ID_SK_FP 0x4000 23*4882a593Smuzhiyun //-------- 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun //-------- those should go into include/linux/if_fddi.h 28*4882a593Smuzhiyun #define FDDI_MAC_HDR_LEN 13 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #define FDDI_RII 0x01 /* routing information bit */ 31*4882a593Smuzhiyun #define FDDI_RCF_DIR_BIT 0x80 32*4882a593Smuzhiyun #define FDDI_RCF_LEN_MASK 0x1f 33*4882a593Smuzhiyun #define FDDI_RCF_BROADCAST 0x8000 34*4882a593Smuzhiyun #define FDDI_RCF_LIMITED_BROADCAST 0xA000 35*4882a593Smuzhiyun #define FDDI_RCF_FRAME2K 0x20 36*4882a593Smuzhiyun #define FDDI_RCF_FRAME4K 0x30 37*4882a593Smuzhiyun //-------- 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #undef ADDR 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #include <asm/io.h> 43*4882a593Smuzhiyun #include <linux/netdevice.h> 44*4882a593Smuzhiyun #include <linux/fddidevice.h> 45*4882a593Smuzhiyun #include <linux/skbuff.h> 46*4882a593Smuzhiyun #include <linux/pci.h> 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun // is redefined by linux, but we need our definition 49*4882a593Smuzhiyun #undef ADDR 50*4882a593Smuzhiyun #ifdef MEM_MAPPED_IO 51*4882a593Smuzhiyun #define ADDR(a) (smc->hw.iop+(a)) 52*4882a593Smuzhiyun #else 53*4882a593Smuzhiyun #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)))) 54*4882a593Smuzhiyun #endif 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #include "hwmtm.h" 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #define TRUE 1 59*4882a593Smuzhiyun #define FALSE 0 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun // HWM Definitions 62*4882a593Smuzhiyun // ----------------------- 63*4882a593Smuzhiyun #define FDDI_TRACE(string, arg1, arg2, arg3) // Performance analysis. 64*4882a593Smuzhiyun #ifdef PCI 65*4882a593Smuzhiyun #define NDD_TRACE(string, arg1, arg2, arg3) // Performance analysis. 66*4882a593Smuzhiyun #endif // PCI 67*4882a593Smuzhiyun #define SMT_PAGESIZE PAGE_SIZE // Size of a memory page (power of 2). 68*4882a593Smuzhiyun // ----------------------- 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun // SMT Definitions 72*4882a593Smuzhiyun // ----------------------- 73*4882a593Smuzhiyun #define TICKS_PER_SECOND HZ 74*4882a593Smuzhiyun #define SMC_VERSION 1 75*4882a593Smuzhiyun // ----------------------- 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun // OS-Driver Definitions 79*4882a593Smuzhiyun // ----------------------- 80*4882a593Smuzhiyun #define NO_ADDRESS 0xffe0 /* No Device (I/O) Address */ 81*4882a593Smuzhiyun #define SKFP_MAX_NUM_BOARDS 8 /* maximum number of PCI boards */ 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #define SK_BUS_TYPE_PCI 0 84*4882a593Smuzhiyun #define SK_BUS_TYPE_EISA 1 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun #define FP_IO_LEN 256 /* length of IO area used */ 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun #define u8 unsigned char 89*4882a593Smuzhiyun #define u16 unsigned short 90*4882a593Smuzhiyun #define u32 unsigned int 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define MAX_TX_QUEUE_LEN 20 // number of packets queued by driver 93*4882a593Smuzhiyun #define MAX_FRAME_SIZE 4550 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun #define RX_LOW_WATERMARK NUM_RECEIVE_BUFFERS / 2 96*4882a593Smuzhiyun #define TX_LOW_WATERMARK NUM_TRANSMIT_BUFFERS - 2 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun /* 99*4882a593Smuzhiyun ** Include the IOCTL stuff 100*4882a593Smuzhiyun */ 101*4882a593Smuzhiyun #include <linux/sockios.h> 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun #define SKFPIOCTL SIOCDEVPRIVATE 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun struct s_skfp_ioctl { 106*4882a593Smuzhiyun unsigned short cmd; /* Command to run */ 107*4882a593Smuzhiyun unsigned short len; /* Length of the data buffer */ 108*4882a593Smuzhiyun unsigned char __user *data; /* Pointer to the data buffer */ 109*4882a593Smuzhiyun }; 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun /* 112*4882a593Smuzhiyun ** Recognised ioctl commands for the driver 113*4882a593Smuzhiyun */ 114*4882a593Smuzhiyun #define SKFP_GET_STATS 0x05 /* Get the driver statistics */ 115*4882a593Smuzhiyun #define SKFP_CLR_STATS 0x06 /* Zero out the driver statistics */ 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun // The per-adapter driver structure 118*4882a593Smuzhiyun struct s_smt_os { 119*4882a593Smuzhiyun struct net_device *dev; 120*4882a593Smuzhiyun struct net_device *next_module; 121*4882a593Smuzhiyun u32 bus_type; /* bus type (0 == PCI, 1 == EISA) */ 122*4882a593Smuzhiyun struct pci_dev pdev; /* PCI device structure */ 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun unsigned long base_addr; 125*4882a593Smuzhiyun unsigned char factory_mac_addr[8]; 126*4882a593Smuzhiyun ulong SharedMemSize; 127*4882a593Smuzhiyun ulong SharedMemHeap; 128*4882a593Smuzhiyun void* SharedMemAddr; 129*4882a593Smuzhiyun dma_addr_t SharedMemDMA; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun ulong QueueSkb; 132*4882a593Smuzhiyun struct sk_buff_head SendSkbQueue; 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun ulong MaxFrameSize; 135*4882a593Smuzhiyun u8 ResetRequested; 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun // MAC statistics structure 138*4882a593Smuzhiyun struct fddi_statistics MacStat; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun // receive into this local buffer if no skb available 141*4882a593Smuzhiyun // data will be not valid, because multiple RxDs can 142*4882a593Smuzhiyun // point here at the same time, it must be at least 143*4882a593Smuzhiyun // MAX_FRAME_SIZE bytes in size 144*4882a593Smuzhiyun unsigned char *LocalRxBuffer; 145*4882a593Smuzhiyun dma_addr_t LocalRxBufferDMA; 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun // Version (required by SMT module). 148*4882a593Smuzhiyun u_long smc_version ; 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun // Required by Hardware Module (HWM). 151*4882a593Smuzhiyun struct hw_modul hwm ; 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun // For SMP-savety 154*4882a593Smuzhiyun spinlock_t DriverLock; 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun }; 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun typedef struct s_smt_os skfddi_priv; 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun #endif // _TARGETOS_ 161