blob: 71288c4f7be3886a51a077a8bd5625b2828d6dc4 [file] [log] [blame]
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -07001/**************************************************************************
2 *
3 * Copyright (c) 2000-2002 Alacritech, Inc. All rights reserved.
4 *
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -07005 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following
14 * disclaimer in the documentation and/or other materials provided
15 * with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY ALACRITECH, INC. ``AS IS'' AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALACRITECH, INC. OR
21 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
27 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * The views and conclusions contained in the software and documentation
31 * are those of the authors and should not be interpreted as representing
32 * official policies, either expressed or implied, of Alacritech, Inc.
33 *
34 **************************************************************************/
35
36/*
37 * FILENAME: slicinc.h
38 *
39 * This file contains all other include files and prototype definitions
40 * for the SLICOSS driver.
41 */
42#ifndef _SLIC_INCLUDE_H_
43#define _SLIC_INCLUDE_H_
44
45#include "slic_os.h"
46#include "slicdbg.h"
47#include "slichw.h"
48#include "slic.h"
49
Lior Dotane9eff9d2008-10-04 07:10:28 +030050static int slic_entry_probe(struct pci_dev *pcidev,
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -070051 const struct pci_device_id *ent);
Lior Dotane9eff9d2008-10-04 07:10:28 +030052static void slic_entry_remove(struct pci_dev *pcidev);
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -070053
Lior Dotane9eff9d2008-10-04 07:10:28 +030054static void slic_init_driver(void);
55static int slic_entry_open(struct net_device *dev);
56static int slic_entry_halt(struct net_device *dev);
57static int slic_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
58static int slic_xmit_start(struct sk_buff *skb, struct net_device *dev);
59static void slic_xmit_fail(struct adapter *adapter,
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -070060 struct sk_buff *skb,
Lior Dotane9eff9d2008-10-04 07:10:28 +030061 void *cmd,
62 u32 skbtype,
63 u32 status);
Lior Dotane9eff9d2008-10-04 07:10:28 +030064static void slic_config_pci(struct pci_dev *pcidev);
65static struct sk_buff *slic_rcvqueue_getnext(struct adapter *adapter);
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -070066
Lior Dotane9eff9d2008-10-04 07:10:28 +030067static inline void slic_reg32_write(void __iomem *reg, u32 value, uint flush);
68static inline void slic_reg64_write(struct adapter *adapter, void __iomem *reg,
69 u32 value, void __iomem *regh, u32 paddrh, uint flush);
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -070070
71#if SLIC_GET_STATS_ENABLED
Lior Dotane9eff9d2008-10-04 07:10:28 +030072static struct net_device_stats *slic_get_stats(struct net_device *dev);
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -070073#endif
74
Lior Dotane9eff9d2008-10-04 07:10:28 +030075static int slic_mac_set_address(struct net_device *dev, void *ptr);
76static void slic_rcv_handler(struct adapter *adapter);
77static void slic_link_event_handler(struct adapter *adapter);
78static void slic_xmit_complete(struct adapter *adapter);
79static void slic_upr_request_complete(struct adapter *adapter, u32 isr);
80static int slic_rspqueue_init(struct adapter *adapter);
81static int slic_rspqueue_reset(struct adapter *adapter);
82static void slic_rspqueue_free(struct adapter *adapter);
83static struct slic_rspbuf *slic_rspqueue_getnext(struct adapter *adapter);
84static void slic_cmdqmem_init(struct adapter *adapter);
85static void slic_cmdqmem_free(struct adapter *adapter);
86static u32 *slic_cmdqmem_addpage(struct adapter *adapter);
87static int slic_cmdq_init(struct adapter *adapter);
88static void slic_cmdq_free(struct adapter *adapter);
89static void slic_cmdq_reset(struct adapter *adapter);
90static void slic_cmdq_addcmdpage(struct adapter *adapter, u32 *page);
91static void slic_cmdq_getdone(struct adapter *adapter);
Lior Dotane9eff9d2008-10-04 07:10:28 +030092static void slic_cmdq_putdone_irq(struct adapter *adapter,
93 struct slic_hostcmd *cmd);
94static struct slic_hostcmd *slic_cmdq_getfree(struct adapter *adapter);
95static int slic_rcvqueue_init(struct adapter *adapter);
96static int slic_rcvqueue_reset(struct adapter *adapter);
97static int slic_rcvqueue_fill(struct adapter *adapter);
98static u32 slic_rcvqueue_reinsert(struct adapter *adapter, struct sk_buff *skb);
99static void slic_rcvqueue_free(struct adapter *adapter);
100static void slic_rcv_handle_error(struct adapter *adapter,
101 struct slic_rcvbuf *rcvbuf);
102static void slic_adapter_set_hwaddr(struct adapter *adapter);
Lior Dotane9eff9d2008-10-04 07:10:28 +0300103static int slic_card_init(struct sliccard *card, struct adapter *adapter);
104static void slic_intagg_set(struct adapter *adapter, u32 value);
105static int slic_card_download(struct adapter *adapter);
106static u32 slic_card_locate(struct adapter *adapter);
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -0700107
Lior Dotane9eff9d2008-10-04 07:10:28 +0300108static void slic_if_stop_queue(struct adapter *adapter);
109static void slic_if_start_queue(struct adapter *adapter);
110static int slic_if_init(struct adapter *adapter);
111static int slic_adapter_allocresources(struct adapter *adapter);
112static void slic_adapter_freeresources(struct adapter *adapter);
113static void slic_link_config(struct adapter *adapter, u32 linkspeed,
114 u32 linkduplex);
115static void slic_unmap_mmio_space(struct adapter *adapter);
116static void slic_card_cleanup(struct sliccard *card);
117static void slic_init_cleanup(struct adapter *adapter);
118static void slic_soft_reset(struct adapter *adapter);
Lior Dotane9eff9d2008-10-04 07:10:28 +0300119static bool slic_mac_filter(struct adapter *adapter,
120 struct ether_header *ether_frame);
121static void slic_mac_address_config(struct adapter *adapter);
122static void slic_mac_config(struct adapter *adapter);
123static void slic_mcast_set_mask(struct adapter *adapter);
124static int slic_mcast_add_list(struct adapter *adapter, char *address);
125static unsigned char slic_mcast_get_mac_hash(char *macaddr);
126static void slic_mcast_set_bit(struct adapter *adapter, char *address);
127static void slic_config_set(struct adapter *adapter, bool linkchange);
128static void slic_config_clear(struct adapter *adapter);
129static void slic_config_get(struct adapter *adapter, u32 config,
130 u32 configh);
Lior Dotane9eff9d2008-10-04 07:10:28 +0300131static void slic_timer_load_check(ulong context);
132static void slic_timer_ping(ulong dev);
133static void slic_assert_fail(void);
134static ushort slic_eeprom_cksum(char *m, int len);
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -0700135/* upr */
Lior Dotane9eff9d2008-10-04 07:10:28 +0300136static void slic_upr_start(struct adapter *adapter);
137static void slic_link_upr_complete(struct adapter *adapter, u32 Isr);
138static int slic_upr_request(struct adapter *adapter,
139 u32 upr_request,
140 u32 upr_data,
141 u32 upr_data_h,
142 u32 upr_buffer,
143 u32 upr_buffer_h);
144static int slic_upr_queue_request(struct adapter *adapter,
145 u32 upr_request,
146 u32 upr_data,
147 u32 upr_data_h,
148 u32 upr_buffer,
149 u32 upr_buffer_h);
150static void slic_mcast_set_list(struct net_device *dev);
151static void slic_mcast_init_crc32(void);
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -0700152
153#if SLIC_DUMP_ENABLED
Lior Dotane9eff9d2008-10-04 07:10:28 +0300154static int slic_dump_thread(void *context);
155static uint slic_init_dump_thread(struct sliccard *card);
156static unsigned char slic_get_dump_index(char *path);
157static u32 slic_dump_card(struct sliccard *card, bool resume);
158static u32 slic_dump_halt(struct sliccard *card, unsigned char proc);
159static u32 slic_dump_reg(struct sliccard *card, unsigned char proc);
160static u32 slic_dump_data(struct sliccard *card, u32 addr,
161 ushort count, unsigned char desc);
162static u32 slic_dump_queue(struct sliccard *card, u32 buf_phys,
163 u32 buf_physh, u32 queue);
164static u32 slic_dump_load_queue(struct sliccard *card, u32 data,
165 u32 queue);
166static u32 slic_dump_cam(struct sliccard *card, u32 addr,
167 u32 count, unsigned char desc);
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -0700168
Lior Dotane9eff9d2008-10-04 07:10:28 +0300169static u32 slic_dump_resume(struct sliccard *card, unsigned char proc);
170static u32 slic_dump_send_cmd(struct sliccard *card, u32 cmd_phys,
171 u32 cmd_physh, u32 buf_phys,
172 u32 buf_physh);
Greg Kroah-Hartman4d6f6af2008-03-19 14:27:25 -0700173
174#define create_file(x) STATUS_SUCCESS
175#define write_file(w, x, y, z) STATUS_SUCCESS
176#define close_file(x) STATUS_SUCCESS
177#define read_file(w, x, y, z) STATUS_SUCCESS
178#define open_file(x) STATUS_SUCCESS
179
180/* PAGE_SIZE * 16 */
181#define DUMP_PAGE_SIZE 0xFFFF
182#define DUMP_PAGE_SIZE_HALF 0x7FFE
183#endif
184
185#endif /* _SLIC_INCLUDE_H_ */