1/*
2 *  This file is part of the Chelsio T4 Ethernet driver for Linux.
3 *  Copyright (C) 2003-2014 Chelsio Communications.  All rights reserved.
4 *
5 *  Written by Deepak (deepak.s@chelsio.com)
6 *
7 *  This program is distributed in the hope that it will be useful, but WITHOUT
8 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9 *  FITNESS FOR A PARTICULAR PURPOSE.  See the LICENSE file included in this
10 *  release for licensing terms and conditions.
11 */
12
13struct clip_entry {
14	spinlock_t lock;	/* Hold while modifying clip reference */
15	atomic_t refcnt;
16	struct list_head list;
17	union {
18		struct sockaddr_in addr;
19		struct sockaddr_in6 addr6;
20	};
21};
22
23struct clip_tbl {
24	unsigned int clipt_start;
25	unsigned int clipt_size;
26	rwlock_t lock;
27	atomic_t nfree;
28	struct list_head ce_free_head;
29	void *cl_list;
30	struct list_head hash_list[0];
31};
32
33enum {
34	CLIPT_MIN_HASH_BUCKETS = 2,
35};
36
37struct clip_tbl *t4_init_clip_tbl(unsigned int clipt_start,
38				  unsigned int clipt_end);
39int cxgb4_clip_get(const struct net_device *dev, const u32 *lip, u8 v6);
40void cxgb4_clip_release(const struct net_device *dev, const u32 *lip, u8 v6);
41int clip_tbl_show(struct seq_file *seq, void *v);
42int cxgb4_update_root_dev_clip(struct net_device *dev);
43void t4_cleanup_clip_tbl(struct adapter *adap);
44