162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _ACENIC_H_ 362306a36Sopenharmony_ci#define _ACENIC_H_ 462306a36Sopenharmony_ci#include <linux/interrupt.h> 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci/* 862306a36Sopenharmony_ci * Generate TX index update each time, when TX ring is closed. 962306a36Sopenharmony_ci * Normally, this is not useful, because results in more dma (and irqs 1062306a36Sopenharmony_ci * without TX_COAL_INTS_ONLY). 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci#define USE_TX_COAL_NOW 0 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* 1562306a36Sopenharmony_ci * Addressing: 1662306a36Sopenharmony_ci * 1762306a36Sopenharmony_ci * The Tigon uses 64-bit host addresses, regardless of their actual 1862306a36Sopenharmony_ci * length, and it expects a big-endian format. For 32 bit systems the 1962306a36Sopenharmony_ci * upper 32 bits of the address are simply ignored (zero), however for 2062306a36Sopenharmony_ci * little endian 64 bit systems (Alpha) this looks strange with the 2162306a36Sopenharmony_ci * two parts of the address word being swapped. 2262306a36Sopenharmony_ci * 2362306a36Sopenharmony_ci * The addresses are split in two 32 bit words for all architectures 2462306a36Sopenharmony_ci * as some of them are in PCI shared memory and it is necessary to use 2562306a36Sopenharmony_ci * readl/writel to access them. 2662306a36Sopenharmony_ci * 2762306a36Sopenharmony_ci * The addressing code is derived from Pete Wyckoff's work, but 2862306a36Sopenharmony_ci * modified to deal properly with readl/writel usage. 2962306a36Sopenharmony_ci */ 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistruct ace_regs { 3262306a36Sopenharmony_ci u32 pad0[16]; /* PCI control registers */ 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci u32 HostCtrl; /* 0x40 */ 3562306a36Sopenharmony_ci u32 LocalCtrl; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci u32 pad1[2]; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci u32 MiscCfg; /* 0x50 */ 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci u32 pad2[2]; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci u32 PciState; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci u32 pad3[2]; /* 0x60 */ 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci u32 WinBase; 4862306a36Sopenharmony_ci u32 WinData; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci u32 pad4[12]; /* 0x70 */ 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci u32 DmaWriteState; /* 0xa0 */ 5362306a36Sopenharmony_ci u32 pad5[3]; 5462306a36Sopenharmony_ci u32 DmaReadState; /* 0xb0 */ 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci u32 pad6[26]; 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci u32 AssistState; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci u32 pad7[8]; /* 0x120 */ 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci u32 CpuCtrl; /* 0x140 */ 6362306a36Sopenharmony_ci u32 Pc; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci u32 pad8[3]; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci u32 SramAddr; /* 0x154 */ 6862306a36Sopenharmony_ci u32 SramData; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci u32 pad9[49]; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci u32 MacRxState; /* 0x220 */ 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci u32 pad10[7]; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci u32 CpuBCtrl; /* 0x240 */ 7762306a36Sopenharmony_ci u32 PcB; 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci u32 pad11[3]; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci u32 SramBAddr; /* 0x254 */ 8262306a36Sopenharmony_ci u32 SramBData; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci u32 pad12[105]; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci u32 pad13[32]; /* 0x400 */ 8762306a36Sopenharmony_ci u32 Stats[32]; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci u32 Mb0Hi; /* 0x500 */ 9062306a36Sopenharmony_ci u32 Mb0Lo; 9162306a36Sopenharmony_ci u32 Mb1Hi; 9262306a36Sopenharmony_ci u32 CmdPrd; 9362306a36Sopenharmony_ci u32 Mb2Hi; 9462306a36Sopenharmony_ci u32 TxPrd; 9562306a36Sopenharmony_ci u32 Mb3Hi; 9662306a36Sopenharmony_ci u32 RxStdPrd; 9762306a36Sopenharmony_ci u32 Mb4Hi; 9862306a36Sopenharmony_ci u32 RxJumboPrd; 9962306a36Sopenharmony_ci u32 Mb5Hi; 10062306a36Sopenharmony_ci u32 RxMiniPrd; 10162306a36Sopenharmony_ci u32 Mb6Hi; 10262306a36Sopenharmony_ci u32 Mb6Lo; 10362306a36Sopenharmony_ci u32 Mb7Hi; 10462306a36Sopenharmony_ci u32 Mb7Lo; 10562306a36Sopenharmony_ci u32 Mb8Hi; 10662306a36Sopenharmony_ci u32 Mb8Lo; 10762306a36Sopenharmony_ci u32 Mb9Hi; 10862306a36Sopenharmony_ci u32 Mb9Lo; 10962306a36Sopenharmony_ci u32 MbAHi; 11062306a36Sopenharmony_ci u32 MbALo; 11162306a36Sopenharmony_ci u32 MbBHi; 11262306a36Sopenharmony_ci u32 MbBLo; 11362306a36Sopenharmony_ci u32 MbCHi; 11462306a36Sopenharmony_ci u32 MbCLo; 11562306a36Sopenharmony_ci u32 MbDHi; 11662306a36Sopenharmony_ci u32 MbDLo; 11762306a36Sopenharmony_ci u32 MbEHi; 11862306a36Sopenharmony_ci u32 MbELo; 11962306a36Sopenharmony_ci u32 MbFHi; 12062306a36Sopenharmony_ci u32 MbFLo; 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci u32 pad14[32]; 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci u32 MacAddrHi; /* 0x600 */ 12562306a36Sopenharmony_ci u32 MacAddrLo; 12662306a36Sopenharmony_ci u32 InfoPtrHi; 12762306a36Sopenharmony_ci u32 InfoPtrLo; 12862306a36Sopenharmony_ci u32 MultiCastHi; /* 0x610 */ 12962306a36Sopenharmony_ci u32 MultiCastLo; 13062306a36Sopenharmony_ci u32 ModeStat; 13162306a36Sopenharmony_ci u32 DmaReadCfg; 13262306a36Sopenharmony_ci u32 DmaWriteCfg; /* 0x620 */ 13362306a36Sopenharmony_ci u32 TxBufRat; 13462306a36Sopenharmony_ci u32 EvtCsm; 13562306a36Sopenharmony_ci u32 CmdCsm; 13662306a36Sopenharmony_ci u32 TuneRxCoalTicks;/* 0x630 */ 13762306a36Sopenharmony_ci u32 TuneTxCoalTicks; 13862306a36Sopenharmony_ci u32 TuneStatTicks; 13962306a36Sopenharmony_ci u32 TuneMaxTxDesc; 14062306a36Sopenharmony_ci u32 TuneMaxRxDesc; /* 0x640 */ 14162306a36Sopenharmony_ci u32 TuneTrace; 14262306a36Sopenharmony_ci u32 TuneLink; 14362306a36Sopenharmony_ci u32 TuneFastLink; 14462306a36Sopenharmony_ci u32 TracePtr; /* 0x650 */ 14562306a36Sopenharmony_ci u32 TraceStrt; 14662306a36Sopenharmony_ci u32 TraceLen; 14762306a36Sopenharmony_ci u32 IfIdx; 14862306a36Sopenharmony_ci u32 IfMtu; /* 0x660 */ 14962306a36Sopenharmony_ci u32 MaskInt; 15062306a36Sopenharmony_ci u32 GigLnkState; 15162306a36Sopenharmony_ci u32 FastLnkState; 15262306a36Sopenharmony_ci u32 pad16[4]; /* 0x670 */ 15362306a36Sopenharmony_ci u32 RxRetCsm; /* 0x680 */ 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci u32 pad17[31]; 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci u32 CmdRng[64]; /* 0x700 */ 15862306a36Sopenharmony_ci u32 Window[0x200]; 15962306a36Sopenharmony_ci}; 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_citypedef struct { 16362306a36Sopenharmony_ci u32 addrhi; 16462306a36Sopenharmony_ci u32 addrlo; 16562306a36Sopenharmony_ci} aceaddr; 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci#define ACE_WINDOW_SIZE 0x800 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci#define ACE_JUMBO_MTU 9000 17162306a36Sopenharmony_ci#define ACE_STD_MTU 1500 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci#define ACE_TRACE_SIZE 0x8000 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci/* 17662306a36Sopenharmony_ci * Host control register bits. 17762306a36Sopenharmony_ci */ 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci#define IN_INT 0x01 18062306a36Sopenharmony_ci#define CLR_INT 0x02 18162306a36Sopenharmony_ci#define HW_RESET 0x08 18262306a36Sopenharmony_ci#define BYTE_SWAP 0x10 18362306a36Sopenharmony_ci#define WORD_SWAP 0x20 18462306a36Sopenharmony_ci#define MASK_INTS 0x40 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci/* 18762306a36Sopenharmony_ci * Local control register bits. 18862306a36Sopenharmony_ci */ 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci#define EEPROM_DATA_IN 0x800000 19162306a36Sopenharmony_ci#define EEPROM_DATA_OUT 0x400000 19262306a36Sopenharmony_ci#define EEPROM_WRITE_ENABLE 0x200000 19362306a36Sopenharmony_ci#define EEPROM_CLK_OUT 0x100000 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci#define EEPROM_BASE 0xa0000000 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci#define EEPROM_WRITE_SELECT 0xa0 19862306a36Sopenharmony_ci#define EEPROM_READ_SELECT 0xa1 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci#define SRAM_BANK_512K 0x200 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci/* 20462306a36Sopenharmony_ci * udelay() values for when clocking the eeprom 20562306a36Sopenharmony_ci */ 20662306a36Sopenharmony_ci#define ACE_SHORT_DELAY 2 20762306a36Sopenharmony_ci#define ACE_LONG_DELAY 4 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci/* 21162306a36Sopenharmony_ci * Misc Config bits 21262306a36Sopenharmony_ci */ 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_ci#define SYNC_SRAM_TIMING 0x100000 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ci/* 21862306a36Sopenharmony_ci * CPU state bits. 21962306a36Sopenharmony_ci */ 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci#define CPU_RESET 0x01 22262306a36Sopenharmony_ci#define CPU_TRACE 0x02 22362306a36Sopenharmony_ci#define CPU_PROM_FAILED 0x10 22462306a36Sopenharmony_ci#define CPU_HALT 0x00010000 22562306a36Sopenharmony_ci#define CPU_HALTED 0xffff0000 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ci/* 22962306a36Sopenharmony_ci * PCI State bits. 23062306a36Sopenharmony_ci */ 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci#define DMA_READ_MAX_4 0x04 23362306a36Sopenharmony_ci#define DMA_READ_MAX_16 0x08 23462306a36Sopenharmony_ci#define DMA_READ_MAX_32 0x0c 23562306a36Sopenharmony_ci#define DMA_READ_MAX_64 0x10 23662306a36Sopenharmony_ci#define DMA_READ_MAX_128 0x14 23762306a36Sopenharmony_ci#define DMA_READ_MAX_256 0x18 23862306a36Sopenharmony_ci#define DMA_READ_MAX_1K 0x1c 23962306a36Sopenharmony_ci#define DMA_WRITE_MAX_4 0x20 24062306a36Sopenharmony_ci#define DMA_WRITE_MAX_16 0x40 24162306a36Sopenharmony_ci#define DMA_WRITE_MAX_32 0x60 24262306a36Sopenharmony_ci#define DMA_WRITE_MAX_64 0x80 24362306a36Sopenharmony_ci#define DMA_WRITE_MAX_128 0xa0 24462306a36Sopenharmony_ci#define DMA_WRITE_MAX_256 0xc0 24562306a36Sopenharmony_ci#define DMA_WRITE_MAX_1K 0xe0 24662306a36Sopenharmony_ci#define DMA_READ_WRITE_MASK 0xfc 24762306a36Sopenharmony_ci#define MEM_READ_MULTIPLE 0x00020000 24862306a36Sopenharmony_ci#define PCI_66MHZ 0x00080000 24962306a36Sopenharmony_ci#define PCI_32BIT 0x00100000 25062306a36Sopenharmony_ci#define DMA_WRITE_ALL_ALIGN 0x00800000 25162306a36Sopenharmony_ci#define READ_CMD_MEM 0x06000000 25262306a36Sopenharmony_ci#define WRITE_CMD_MEM 0x70000000 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_ci/* 25662306a36Sopenharmony_ci * Mode status 25762306a36Sopenharmony_ci */ 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci#define ACE_BYTE_SWAP_BD 0x02 26062306a36Sopenharmony_ci#define ACE_WORD_SWAP_BD 0x04 /* not actually used */ 26162306a36Sopenharmony_ci#define ACE_WARN 0x08 26262306a36Sopenharmony_ci#define ACE_BYTE_SWAP_DMA 0x10 26362306a36Sopenharmony_ci#define ACE_NO_JUMBO_FRAG 0x200 26462306a36Sopenharmony_ci#define ACE_FATAL 0x40000000 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci/* 26862306a36Sopenharmony_ci * DMA config 26962306a36Sopenharmony_ci */ 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ci#define DMA_THRESH_1W 0x10 27262306a36Sopenharmony_ci#define DMA_THRESH_2W 0x20 27362306a36Sopenharmony_ci#define DMA_THRESH_4W 0x40 27462306a36Sopenharmony_ci#define DMA_THRESH_8W 0x80 27562306a36Sopenharmony_ci#define DMA_THRESH_16W 0x100 27662306a36Sopenharmony_ci#define DMA_THRESH_32W 0x0 /* not described in doc, but exists. */ 27762306a36Sopenharmony_ci 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ci/* 28062306a36Sopenharmony_ci * Tuning parameters 28162306a36Sopenharmony_ci */ 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ci#define TICKS_PER_SEC 1000000 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_ci/* 28762306a36Sopenharmony_ci * Link bits 28862306a36Sopenharmony_ci */ 28962306a36Sopenharmony_ci 29062306a36Sopenharmony_ci#define LNK_PREF 0x00008000 29162306a36Sopenharmony_ci#define LNK_10MB 0x00010000 29262306a36Sopenharmony_ci#define LNK_100MB 0x00020000 29362306a36Sopenharmony_ci#define LNK_1000MB 0x00040000 29462306a36Sopenharmony_ci#define LNK_FULL_DUPLEX 0x00080000 29562306a36Sopenharmony_ci#define LNK_HALF_DUPLEX 0x00100000 29662306a36Sopenharmony_ci#define LNK_TX_FLOW_CTL_Y 0x00200000 29762306a36Sopenharmony_ci#define LNK_NEG_ADVANCED 0x00400000 29862306a36Sopenharmony_ci#define LNK_RX_FLOW_CTL_Y 0x00800000 29962306a36Sopenharmony_ci#define LNK_NIC 0x01000000 30062306a36Sopenharmony_ci#define LNK_JAM 0x02000000 30162306a36Sopenharmony_ci#define LNK_JUMBO 0x04000000 30262306a36Sopenharmony_ci#define LNK_ALTEON 0x08000000 30362306a36Sopenharmony_ci#define LNK_NEG_FCTL 0x10000000 30462306a36Sopenharmony_ci#define LNK_NEGOTIATE 0x20000000 30562306a36Sopenharmony_ci#define LNK_ENABLE 0x40000000 30662306a36Sopenharmony_ci#define LNK_UP 0x80000000 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci 30962306a36Sopenharmony_ci/* 31062306a36Sopenharmony_ci * Event definitions 31162306a36Sopenharmony_ci */ 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ci#define EVT_RING_ENTRIES 256 31462306a36Sopenharmony_ci#define EVT_RING_SIZE (EVT_RING_ENTRIES * sizeof(struct event)) 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_cistruct event { 31762306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN_BITFIELD 31862306a36Sopenharmony_ci u32 idx:12; 31962306a36Sopenharmony_ci u32 code:12; 32062306a36Sopenharmony_ci u32 evt:8; 32162306a36Sopenharmony_ci#else 32262306a36Sopenharmony_ci u32 evt:8; 32362306a36Sopenharmony_ci u32 code:12; 32462306a36Sopenharmony_ci u32 idx:12; 32562306a36Sopenharmony_ci#endif 32662306a36Sopenharmony_ci u32 pad; 32762306a36Sopenharmony_ci}; 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci/* 33162306a36Sopenharmony_ci * Events 33262306a36Sopenharmony_ci */ 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ci#define E_FW_RUNNING 0x01 33562306a36Sopenharmony_ci#define E_STATS_UPDATED 0x04 33662306a36Sopenharmony_ci 33762306a36Sopenharmony_ci#define E_STATS_UPDATE 0x04 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci#define E_LNK_STATE 0x06 34062306a36Sopenharmony_ci#define E_C_LINK_UP 0x01 34162306a36Sopenharmony_ci#define E_C_LINK_DOWN 0x02 34262306a36Sopenharmony_ci#define E_C_LINK_10_100 0x03 34362306a36Sopenharmony_ci 34462306a36Sopenharmony_ci#define E_ERROR 0x07 34562306a36Sopenharmony_ci#define E_C_ERR_INVAL_CMD 0x01 34662306a36Sopenharmony_ci#define E_C_ERR_UNIMP_CMD 0x02 34762306a36Sopenharmony_ci#define E_C_ERR_BAD_CFG 0x03 34862306a36Sopenharmony_ci 34962306a36Sopenharmony_ci#define E_MCAST_LIST 0x08 35062306a36Sopenharmony_ci#define E_C_MCAST_ADDR_ADD 0x01 35162306a36Sopenharmony_ci#define E_C_MCAST_ADDR_DEL 0x02 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ci#define E_RESET_JUMBO_RNG 0x09 35462306a36Sopenharmony_ci 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_ci/* 35762306a36Sopenharmony_ci * Commands 35862306a36Sopenharmony_ci */ 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ci#define CMD_RING_ENTRIES 64 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_cistruct cmd { 36362306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN_BITFIELD 36462306a36Sopenharmony_ci u32 idx:12; 36562306a36Sopenharmony_ci u32 code:12; 36662306a36Sopenharmony_ci u32 evt:8; 36762306a36Sopenharmony_ci#else 36862306a36Sopenharmony_ci u32 evt:8; 36962306a36Sopenharmony_ci u32 code:12; 37062306a36Sopenharmony_ci u32 idx:12; 37162306a36Sopenharmony_ci#endif 37262306a36Sopenharmony_ci}; 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_ci 37562306a36Sopenharmony_ci#define C_HOST_STATE 0x01 37662306a36Sopenharmony_ci#define C_C_STACK_UP 0x01 37762306a36Sopenharmony_ci#define C_C_STACK_DOWN 0x02 37862306a36Sopenharmony_ci 37962306a36Sopenharmony_ci#define C_FDR_FILTERING 0x02 38062306a36Sopenharmony_ci#define C_C_FDR_FILT_ENABLE 0x01 38162306a36Sopenharmony_ci#define C_C_FDR_FILT_DISABLE 0x02 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_ci#define C_SET_RX_PRD_IDX 0x03 38462306a36Sopenharmony_ci#define C_UPDATE_STATS 0x04 38562306a36Sopenharmony_ci#define C_RESET_JUMBO_RNG 0x05 38662306a36Sopenharmony_ci#define C_ADD_MULTICAST_ADDR 0x08 38762306a36Sopenharmony_ci#define C_DEL_MULTICAST_ADDR 0x09 38862306a36Sopenharmony_ci 38962306a36Sopenharmony_ci#define C_SET_PROMISC_MODE 0x0a 39062306a36Sopenharmony_ci#define C_C_PROMISC_ENABLE 0x01 39162306a36Sopenharmony_ci#define C_C_PROMISC_DISABLE 0x02 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_ci#define C_LNK_NEGOTIATION 0x0b 39462306a36Sopenharmony_ci#define C_C_NEGOTIATE_BOTH 0x00 39562306a36Sopenharmony_ci#define C_C_NEGOTIATE_GIG 0x01 39662306a36Sopenharmony_ci#define C_C_NEGOTIATE_10_100 0x02 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci#define C_SET_MAC_ADDR 0x0c 39962306a36Sopenharmony_ci#define C_CLEAR_PROFILE 0x0d 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci#define C_SET_MULTICAST_MODE 0x0e 40262306a36Sopenharmony_ci#define C_C_MCAST_ENABLE 0x01 40362306a36Sopenharmony_ci#define C_C_MCAST_DISABLE 0x02 40462306a36Sopenharmony_ci 40562306a36Sopenharmony_ci#define C_CLEAR_STATS 0x0f 40662306a36Sopenharmony_ci#define C_SET_RX_JUMBO_PRD_IDX 0x10 40762306a36Sopenharmony_ci#define C_REFRESH_STATS 0x11 40862306a36Sopenharmony_ci 40962306a36Sopenharmony_ci 41062306a36Sopenharmony_ci/* 41162306a36Sopenharmony_ci * Descriptor flags 41262306a36Sopenharmony_ci */ 41362306a36Sopenharmony_ci#define BD_FLG_TCP_UDP_SUM 0x01 41462306a36Sopenharmony_ci#define BD_FLG_IP_SUM 0x02 41562306a36Sopenharmony_ci#define BD_FLG_END 0x04 41662306a36Sopenharmony_ci#define BD_FLG_MORE 0x08 41762306a36Sopenharmony_ci#define BD_FLG_JUMBO 0x10 41862306a36Sopenharmony_ci#define BD_FLG_UCAST 0x20 41962306a36Sopenharmony_ci#define BD_FLG_MCAST 0x40 42062306a36Sopenharmony_ci#define BD_FLG_BCAST 0x60 42162306a36Sopenharmony_ci#define BD_FLG_TYP_MASK 0x60 42262306a36Sopenharmony_ci#define BD_FLG_IP_FRAG 0x80 42362306a36Sopenharmony_ci#define BD_FLG_IP_FRAG_END 0x100 42462306a36Sopenharmony_ci#define BD_FLG_VLAN_TAG 0x200 42562306a36Sopenharmony_ci#define BD_FLG_FRAME_ERROR 0x400 42662306a36Sopenharmony_ci#define BD_FLG_COAL_NOW 0x800 42762306a36Sopenharmony_ci#define BD_FLG_MINI 0x1000 42862306a36Sopenharmony_ci 42962306a36Sopenharmony_ci 43062306a36Sopenharmony_ci/* 43162306a36Sopenharmony_ci * Ring Control block flags 43262306a36Sopenharmony_ci */ 43362306a36Sopenharmony_ci#define RCB_FLG_TCP_UDP_SUM 0x01 43462306a36Sopenharmony_ci#define RCB_FLG_IP_SUM 0x02 43562306a36Sopenharmony_ci#define RCB_FLG_NO_PSEUDO_HDR 0x08 43662306a36Sopenharmony_ci#define RCB_FLG_VLAN_ASSIST 0x10 43762306a36Sopenharmony_ci#define RCB_FLG_COAL_INT_ONLY 0x20 43862306a36Sopenharmony_ci#define RCB_FLG_TX_HOST_RING 0x40 43962306a36Sopenharmony_ci#define RCB_FLG_IEEE_SNAP_SUM 0x80 44062306a36Sopenharmony_ci#define RCB_FLG_EXT_RX_BD 0x100 44162306a36Sopenharmony_ci#define RCB_FLG_RNG_DISABLE 0x200 44262306a36Sopenharmony_ci 44362306a36Sopenharmony_ci 44462306a36Sopenharmony_ci/* 44562306a36Sopenharmony_ci * TX ring - maximum TX ring entries for Tigon I's is 128 44662306a36Sopenharmony_ci */ 44762306a36Sopenharmony_ci#define MAX_TX_RING_ENTRIES 256 44862306a36Sopenharmony_ci#define TIGON_I_TX_RING_ENTRIES 128 44962306a36Sopenharmony_ci#define TX_RING_SIZE (MAX_TX_RING_ENTRIES * sizeof(struct tx_desc)) 45062306a36Sopenharmony_ci#define TX_RING_BASE 0x3800 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_cistruct tx_desc{ 45362306a36Sopenharmony_ci aceaddr addr; 45462306a36Sopenharmony_ci u32 flagsize; 45562306a36Sopenharmony_ci#if 0 45662306a36Sopenharmony_ci/* 45762306a36Sopenharmony_ci * This is in PCI shared mem and must be accessed with readl/writel 45862306a36Sopenharmony_ci * real layout is: 45962306a36Sopenharmony_ci */ 46062306a36Sopenharmony_ci#if __LITTLE_ENDIAN 46162306a36Sopenharmony_ci u16 flags; 46262306a36Sopenharmony_ci u16 size; 46362306a36Sopenharmony_ci u16 vlan; 46462306a36Sopenharmony_ci u16 reserved; 46562306a36Sopenharmony_ci#else 46662306a36Sopenharmony_ci u16 size; 46762306a36Sopenharmony_ci u16 flags; 46862306a36Sopenharmony_ci u16 reserved; 46962306a36Sopenharmony_ci u16 vlan; 47062306a36Sopenharmony_ci#endif 47162306a36Sopenharmony_ci#endif 47262306a36Sopenharmony_ci u32 vlanres; 47362306a36Sopenharmony_ci}; 47462306a36Sopenharmony_ci 47562306a36Sopenharmony_ci 47662306a36Sopenharmony_ci#define RX_STD_RING_ENTRIES 512 47762306a36Sopenharmony_ci#define RX_STD_RING_SIZE (RX_STD_RING_ENTRIES * sizeof(struct rx_desc)) 47862306a36Sopenharmony_ci 47962306a36Sopenharmony_ci#define RX_JUMBO_RING_ENTRIES 256 48062306a36Sopenharmony_ci#define RX_JUMBO_RING_SIZE (RX_JUMBO_RING_ENTRIES *sizeof(struct rx_desc)) 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ci#define RX_MINI_RING_ENTRIES 1024 48362306a36Sopenharmony_ci#define RX_MINI_RING_SIZE (RX_MINI_RING_ENTRIES *sizeof(struct rx_desc)) 48462306a36Sopenharmony_ci 48562306a36Sopenharmony_ci#define RX_RETURN_RING_ENTRIES 2048 48662306a36Sopenharmony_ci#define RX_RETURN_RING_SIZE (RX_MAX_RETURN_RING_ENTRIES * \ 48762306a36Sopenharmony_ci sizeof(struct rx_desc)) 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_cistruct rx_desc{ 49062306a36Sopenharmony_ci aceaddr addr; 49162306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN 49262306a36Sopenharmony_ci u16 size; 49362306a36Sopenharmony_ci u16 idx; 49462306a36Sopenharmony_ci#else 49562306a36Sopenharmony_ci u16 idx; 49662306a36Sopenharmony_ci u16 size; 49762306a36Sopenharmony_ci#endif 49862306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN 49962306a36Sopenharmony_ci u16 flags; 50062306a36Sopenharmony_ci u16 type; 50162306a36Sopenharmony_ci#else 50262306a36Sopenharmony_ci u16 type; 50362306a36Sopenharmony_ci u16 flags; 50462306a36Sopenharmony_ci#endif 50562306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN 50662306a36Sopenharmony_ci u16 tcp_udp_csum; 50762306a36Sopenharmony_ci u16 ip_csum; 50862306a36Sopenharmony_ci#else 50962306a36Sopenharmony_ci u16 ip_csum; 51062306a36Sopenharmony_ci u16 tcp_udp_csum; 51162306a36Sopenharmony_ci#endif 51262306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN 51362306a36Sopenharmony_ci u16 vlan; 51462306a36Sopenharmony_ci u16 err_flags; 51562306a36Sopenharmony_ci#else 51662306a36Sopenharmony_ci u16 err_flags; 51762306a36Sopenharmony_ci u16 vlan; 51862306a36Sopenharmony_ci#endif 51962306a36Sopenharmony_ci u32 reserved; 52062306a36Sopenharmony_ci u32 opague; 52162306a36Sopenharmony_ci}; 52262306a36Sopenharmony_ci 52362306a36Sopenharmony_ci 52462306a36Sopenharmony_ci/* 52562306a36Sopenharmony_ci * This struct is shared with the NIC firmware. 52662306a36Sopenharmony_ci */ 52762306a36Sopenharmony_cistruct ring_ctrl { 52862306a36Sopenharmony_ci aceaddr rngptr; 52962306a36Sopenharmony_ci#ifdef __LITTLE_ENDIAN 53062306a36Sopenharmony_ci u16 flags; 53162306a36Sopenharmony_ci u16 max_len; 53262306a36Sopenharmony_ci#else 53362306a36Sopenharmony_ci u16 max_len; 53462306a36Sopenharmony_ci u16 flags; 53562306a36Sopenharmony_ci#endif 53662306a36Sopenharmony_ci u32 pad; 53762306a36Sopenharmony_ci}; 53862306a36Sopenharmony_ci 53962306a36Sopenharmony_ci 54062306a36Sopenharmony_cistruct ace_mac_stats { 54162306a36Sopenharmony_ci u32 excess_colls; 54262306a36Sopenharmony_ci u32 coll_1; 54362306a36Sopenharmony_ci u32 coll_2; 54462306a36Sopenharmony_ci u32 coll_3; 54562306a36Sopenharmony_ci u32 coll_4; 54662306a36Sopenharmony_ci u32 coll_5; 54762306a36Sopenharmony_ci u32 coll_6; 54862306a36Sopenharmony_ci u32 coll_7; 54962306a36Sopenharmony_ci u32 coll_8; 55062306a36Sopenharmony_ci u32 coll_9; 55162306a36Sopenharmony_ci u32 coll_10; 55262306a36Sopenharmony_ci u32 coll_11; 55362306a36Sopenharmony_ci u32 coll_12; 55462306a36Sopenharmony_ci u32 coll_13; 55562306a36Sopenharmony_ci u32 coll_14; 55662306a36Sopenharmony_ci u32 coll_15; 55762306a36Sopenharmony_ci u32 late_coll; 55862306a36Sopenharmony_ci u32 defers; 55962306a36Sopenharmony_ci u32 crc_err; 56062306a36Sopenharmony_ci u32 underrun; 56162306a36Sopenharmony_ci u32 crs_err; 56262306a36Sopenharmony_ci u32 pad[3]; 56362306a36Sopenharmony_ci u32 drop_ula; 56462306a36Sopenharmony_ci u32 drop_mc; 56562306a36Sopenharmony_ci u32 drop_fc; 56662306a36Sopenharmony_ci u32 drop_space; 56762306a36Sopenharmony_ci u32 coll; 56862306a36Sopenharmony_ci u32 kept_bc; 56962306a36Sopenharmony_ci u32 kept_mc; 57062306a36Sopenharmony_ci u32 kept_uc; 57162306a36Sopenharmony_ci}; 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_ci 57462306a36Sopenharmony_cistruct ace_info { 57562306a36Sopenharmony_ci union { 57662306a36Sopenharmony_ci u32 stats[256]; 57762306a36Sopenharmony_ci } s; 57862306a36Sopenharmony_ci struct ring_ctrl evt_ctrl; 57962306a36Sopenharmony_ci struct ring_ctrl cmd_ctrl; 58062306a36Sopenharmony_ci struct ring_ctrl tx_ctrl; 58162306a36Sopenharmony_ci struct ring_ctrl rx_std_ctrl; 58262306a36Sopenharmony_ci struct ring_ctrl rx_jumbo_ctrl; 58362306a36Sopenharmony_ci struct ring_ctrl rx_mini_ctrl; 58462306a36Sopenharmony_ci struct ring_ctrl rx_return_ctrl; 58562306a36Sopenharmony_ci aceaddr evt_prd_ptr; 58662306a36Sopenharmony_ci aceaddr rx_ret_prd_ptr; 58762306a36Sopenharmony_ci aceaddr tx_csm_ptr; 58862306a36Sopenharmony_ci aceaddr stats2_ptr; 58962306a36Sopenharmony_ci}; 59062306a36Sopenharmony_ci 59162306a36Sopenharmony_ci 59262306a36Sopenharmony_cistruct ring_info { 59362306a36Sopenharmony_ci struct sk_buff *skb; 59462306a36Sopenharmony_ci DEFINE_DMA_UNMAP_ADDR(mapping); 59562306a36Sopenharmony_ci}; 59662306a36Sopenharmony_ci 59762306a36Sopenharmony_ci 59862306a36Sopenharmony_ci/* 59962306a36Sopenharmony_ci * Funny... As soon as we add maplen on alpha, it starts to work 60062306a36Sopenharmony_ci * much slower. Hmm... is it because struct does not fit to one cacheline? 60162306a36Sopenharmony_ci * So, split tx_ring_info. 60262306a36Sopenharmony_ci */ 60362306a36Sopenharmony_cistruct tx_ring_info { 60462306a36Sopenharmony_ci struct sk_buff *skb; 60562306a36Sopenharmony_ci DEFINE_DMA_UNMAP_ADDR(mapping); 60662306a36Sopenharmony_ci DEFINE_DMA_UNMAP_LEN(maplen); 60762306a36Sopenharmony_ci}; 60862306a36Sopenharmony_ci 60962306a36Sopenharmony_ci 61062306a36Sopenharmony_ci/* 61162306a36Sopenharmony_ci * struct ace_skb holding the rings of skb's. This is an awful lot of 61262306a36Sopenharmony_ci * pointers, but I don't see any other smart mode to do this in an 61362306a36Sopenharmony_ci * efficient manner ;-( 61462306a36Sopenharmony_ci */ 61562306a36Sopenharmony_cistruct ace_skb 61662306a36Sopenharmony_ci{ 61762306a36Sopenharmony_ci struct tx_ring_info tx_skbuff[MAX_TX_RING_ENTRIES]; 61862306a36Sopenharmony_ci struct ring_info rx_std_skbuff[RX_STD_RING_ENTRIES]; 61962306a36Sopenharmony_ci struct ring_info rx_mini_skbuff[RX_MINI_RING_ENTRIES]; 62062306a36Sopenharmony_ci struct ring_info rx_jumbo_skbuff[RX_JUMBO_RING_ENTRIES]; 62162306a36Sopenharmony_ci}; 62262306a36Sopenharmony_ci 62362306a36Sopenharmony_ci 62462306a36Sopenharmony_ci/* 62562306a36Sopenharmony_ci * Struct private for the AceNIC. 62662306a36Sopenharmony_ci * 62762306a36Sopenharmony_ci * Elements are grouped so variables used by the tx handling goes 62862306a36Sopenharmony_ci * together, and will go into the same cache lines etc. in order to 62962306a36Sopenharmony_ci * avoid cache line contention between the rx and tx handling on SMP. 63062306a36Sopenharmony_ci * 63162306a36Sopenharmony_ci * Frequently accessed variables are put at the beginning of the 63262306a36Sopenharmony_ci * struct to help the compiler generate better/shorter code. 63362306a36Sopenharmony_ci */ 63462306a36Sopenharmony_cistruct ace_private 63562306a36Sopenharmony_ci{ 63662306a36Sopenharmony_ci struct net_device *ndev; /* backpointer */ 63762306a36Sopenharmony_ci struct ace_info *info; 63862306a36Sopenharmony_ci struct ace_regs __iomem *regs; /* register base */ 63962306a36Sopenharmony_ci struct ace_skb *skb; 64062306a36Sopenharmony_ci dma_addr_t info_dma; /* 32/64 bit */ 64162306a36Sopenharmony_ci 64262306a36Sopenharmony_ci int version, link; 64362306a36Sopenharmony_ci int promisc, mcast_all; 64462306a36Sopenharmony_ci 64562306a36Sopenharmony_ci /* 64662306a36Sopenharmony_ci * TX elements 64762306a36Sopenharmony_ci */ 64862306a36Sopenharmony_ci struct tx_desc *tx_ring; 64962306a36Sopenharmony_ci u32 tx_prd; 65062306a36Sopenharmony_ci volatile u32 tx_ret_csm; 65162306a36Sopenharmony_ci int tx_ring_entries; 65262306a36Sopenharmony_ci 65362306a36Sopenharmony_ci /* 65462306a36Sopenharmony_ci * RX elements 65562306a36Sopenharmony_ci */ 65662306a36Sopenharmony_ci unsigned long std_refill_busy 65762306a36Sopenharmony_ci __attribute__ ((aligned (SMP_CACHE_BYTES))); 65862306a36Sopenharmony_ci unsigned long mini_refill_busy, jumbo_refill_busy; 65962306a36Sopenharmony_ci atomic_t cur_rx_bufs; 66062306a36Sopenharmony_ci atomic_t cur_mini_bufs; 66162306a36Sopenharmony_ci atomic_t cur_jumbo_bufs; 66262306a36Sopenharmony_ci u32 rx_std_skbprd, rx_mini_skbprd, rx_jumbo_skbprd; 66362306a36Sopenharmony_ci u32 cur_rx; 66462306a36Sopenharmony_ci 66562306a36Sopenharmony_ci struct rx_desc *rx_std_ring; 66662306a36Sopenharmony_ci struct rx_desc *rx_jumbo_ring; 66762306a36Sopenharmony_ci struct rx_desc *rx_mini_ring; 66862306a36Sopenharmony_ci struct rx_desc *rx_return_ring; 66962306a36Sopenharmony_ci 67062306a36Sopenharmony_ci int tasklet_pending, jumbo; 67162306a36Sopenharmony_ci struct tasklet_struct ace_tasklet; 67262306a36Sopenharmony_ci 67362306a36Sopenharmony_ci struct event *evt_ring; 67462306a36Sopenharmony_ci 67562306a36Sopenharmony_ci volatile u32 *evt_prd, *rx_ret_prd, *tx_csm; 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_ci dma_addr_t tx_ring_dma; /* 32/64 bit */ 67862306a36Sopenharmony_ci dma_addr_t rx_ring_base_dma; 67962306a36Sopenharmony_ci dma_addr_t evt_ring_dma; 68062306a36Sopenharmony_ci dma_addr_t evt_prd_dma, rx_ret_prd_dma, tx_csm_dma; 68162306a36Sopenharmony_ci 68262306a36Sopenharmony_ci unsigned char *trace_buf; 68362306a36Sopenharmony_ci struct pci_dev *pdev; 68462306a36Sopenharmony_ci struct net_device *next; 68562306a36Sopenharmony_ci volatile int fw_running; 68662306a36Sopenharmony_ci int board_idx; 68762306a36Sopenharmony_ci u16 pci_command; 68862306a36Sopenharmony_ci u8 pci_latency; 68962306a36Sopenharmony_ci const char *name; 69062306a36Sopenharmony_ci#ifdef INDEX_DEBUG 69162306a36Sopenharmony_ci spinlock_t debug_lock 69262306a36Sopenharmony_ci __attribute__ ((aligned (SMP_CACHE_BYTES))); 69362306a36Sopenharmony_ci u32 last_tx, last_std_rx, last_mini_rx; 69462306a36Sopenharmony_ci#endif 69562306a36Sopenharmony_ci u8 firmware_major; 69662306a36Sopenharmony_ci u8 firmware_minor; 69762306a36Sopenharmony_ci u8 firmware_fix; 69862306a36Sopenharmony_ci u32 firmware_start; 69962306a36Sopenharmony_ci}; 70062306a36Sopenharmony_ci 70162306a36Sopenharmony_ci 70262306a36Sopenharmony_ci#define TX_RESERVED MAX_SKB_FRAGS 70362306a36Sopenharmony_ci 70462306a36Sopenharmony_cistatic inline int tx_space (struct ace_private *ap, u32 csm, u32 prd) 70562306a36Sopenharmony_ci{ 70662306a36Sopenharmony_ci return (csm - prd - 1) & (ACE_TX_RING_ENTRIES(ap) - 1); 70762306a36Sopenharmony_ci} 70862306a36Sopenharmony_ci 70962306a36Sopenharmony_ci#define tx_free(ap) tx_space((ap)->tx_ret_csm, (ap)->tx_prd, ap) 71062306a36Sopenharmony_ci#define tx_ring_full(ap, csm, prd) (tx_space(ap, csm, prd) <= TX_RESERVED) 71162306a36Sopenharmony_ci 71262306a36Sopenharmony_cistatic inline void set_aceaddr(aceaddr *aa, dma_addr_t addr) 71362306a36Sopenharmony_ci{ 71462306a36Sopenharmony_ci u64 baddr = (u64) addr; 71562306a36Sopenharmony_ci aa->addrlo = baddr & 0xffffffff; 71662306a36Sopenharmony_ci aa->addrhi = baddr >> 32; 71762306a36Sopenharmony_ci wmb(); 71862306a36Sopenharmony_ci} 71962306a36Sopenharmony_ci 72062306a36Sopenharmony_ci 72162306a36Sopenharmony_cistatic inline void ace_set_txprd(struct ace_regs __iomem *regs, 72262306a36Sopenharmony_ci struct ace_private *ap, u32 value) 72362306a36Sopenharmony_ci{ 72462306a36Sopenharmony_ci#ifdef INDEX_DEBUG 72562306a36Sopenharmony_ci unsigned long flags; 72662306a36Sopenharmony_ci spin_lock_irqsave(&ap->debug_lock, flags); 72762306a36Sopenharmony_ci writel(value, ®s->TxPrd); 72862306a36Sopenharmony_ci if (value == ap->last_tx) 72962306a36Sopenharmony_ci printk(KERN_ERR "AceNIC RACE ALERT! writing identical value " 73062306a36Sopenharmony_ci "to tx producer (%i)\n", value); 73162306a36Sopenharmony_ci ap->last_tx = value; 73262306a36Sopenharmony_ci spin_unlock_irqrestore(&ap->debug_lock, flags); 73362306a36Sopenharmony_ci#else 73462306a36Sopenharmony_ci writel(value, ®s->TxPrd); 73562306a36Sopenharmony_ci#endif 73662306a36Sopenharmony_ci wmb(); 73762306a36Sopenharmony_ci} 73862306a36Sopenharmony_ci 73962306a36Sopenharmony_ci 74062306a36Sopenharmony_cistatic inline void ace_mask_irq(struct net_device *dev) 74162306a36Sopenharmony_ci{ 74262306a36Sopenharmony_ci struct ace_private *ap = netdev_priv(dev); 74362306a36Sopenharmony_ci struct ace_regs __iomem *regs = ap->regs; 74462306a36Sopenharmony_ci 74562306a36Sopenharmony_ci if (ACE_IS_TIGON_I(ap)) 74662306a36Sopenharmony_ci writel(1, ®s->MaskInt); 74762306a36Sopenharmony_ci else 74862306a36Sopenharmony_ci writel(readl(®s->HostCtrl) | MASK_INTS, ®s->HostCtrl); 74962306a36Sopenharmony_ci 75062306a36Sopenharmony_ci ace_sync_irq(dev->irq); 75162306a36Sopenharmony_ci} 75262306a36Sopenharmony_ci 75362306a36Sopenharmony_ci 75462306a36Sopenharmony_cistatic inline void ace_unmask_irq(struct net_device *dev) 75562306a36Sopenharmony_ci{ 75662306a36Sopenharmony_ci struct ace_private *ap = netdev_priv(dev); 75762306a36Sopenharmony_ci struct ace_regs __iomem *regs = ap->regs; 75862306a36Sopenharmony_ci 75962306a36Sopenharmony_ci if (ACE_IS_TIGON_I(ap)) 76062306a36Sopenharmony_ci writel(0, ®s->MaskInt); 76162306a36Sopenharmony_ci else 76262306a36Sopenharmony_ci writel(readl(®s->HostCtrl) & ~MASK_INTS, ®s->HostCtrl); 76362306a36Sopenharmony_ci} 76462306a36Sopenharmony_ci 76562306a36Sopenharmony_ci 76662306a36Sopenharmony_ci/* 76762306a36Sopenharmony_ci * Prototypes 76862306a36Sopenharmony_ci */ 76962306a36Sopenharmony_cistatic int ace_init(struct net_device *dev); 77062306a36Sopenharmony_cistatic void ace_load_std_rx_ring(struct net_device *dev, int nr_bufs); 77162306a36Sopenharmony_cistatic void ace_load_mini_rx_ring(struct net_device *dev, int nr_bufs); 77262306a36Sopenharmony_cistatic void ace_load_jumbo_rx_ring(struct net_device *dev, int nr_bufs); 77362306a36Sopenharmony_cistatic irqreturn_t ace_interrupt(int irq, void *dev_id); 77462306a36Sopenharmony_cistatic int ace_load_firmware(struct net_device *dev); 77562306a36Sopenharmony_cistatic int ace_open(struct net_device *dev); 77662306a36Sopenharmony_cistatic netdev_tx_t ace_start_xmit(struct sk_buff *skb, 77762306a36Sopenharmony_ci struct net_device *dev); 77862306a36Sopenharmony_cistatic int ace_close(struct net_device *dev); 77962306a36Sopenharmony_cistatic void ace_tasklet(struct tasklet_struct *t); 78062306a36Sopenharmony_cistatic void ace_dump_trace(struct ace_private *ap); 78162306a36Sopenharmony_cistatic void ace_set_multicast_list(struct net_device *dev); 78262306a36Sopenharmony_cistatic int ace_change_mtu(struct net_device *dev, int new_mtu); 78362306a36Sopenharmony_cistatic int ace_set_mac_addr(struct net_device *dev, void *p); 78462306a36Sopenharmony_cistatic void ace_set_rxtx_parms(struct net_device *dev, int jumbo); 78562306a36Sopenharmony_cistatic int ace_allocate_descriptors(struct net_device *dev); 78662306a36Sopenharmony_cistatic void ace_free_descriptors(struct net_device *dev); 78762306a36Sopenharmony_cistatic void ace_init_cleanup(struct net_device *dev); 78862306a36Sopenharmony_cistatic struct net_device_stats *ace_get_stats(struct net_device *dev); 78962306a36Sopenharmony_cistatic int read_eeprom_byte(struct net_device *dev, unsigned long offset); 79062306a36Sopenharmony_ci 79162306a36Sopenharmony_ci#endif /* _ACENIC_H_ */ 792