Merge with /home/wd/git/u-boot/mailing-list/Haavard_Skinnemoen
[platform/kernel/u-boot.git] / drivers / nicext.h
1 /****************************************************************************
2  * Copyright(c) 2000-2001 Broadcom Corporation. All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation.
7  *
8  * Name:        nicext.h
9  *
10  * Description: Broadcom Network Interface Card Extension (NICE) is an
11  *              extension to Linux NET device kernel mode drivers.
12  *              NICE is designed to provide additional functionalities,
13  *              such as receive packet intercept. To support Broadcom NICE,
14  *              the network device driver can be modified by adding an
15  *              device ioctl handler and by indicating receiving packets
16  *              to the NICE receive handler. Broadcom NICE will only be
17  *              enabled by a NICE-aware intermediate driver, such as
18  *              Broadcom Advanced Server Program Driver (BASP). When NICE
19  *              is not enabled, the modified network device drivers
20  *              functions exactly as other non-NICE aware drivers.
21  *
22  * Author:      Frankie Fan
23  *
24  * Created:     September 17, 2000
25  *
26  ****************************************************************************/
27 #ifndef _nicext_h_
28 #define _nicext_h_
29
30 /*
31  * ioctl for NICE
32  */
33 #define SIOCNICE                        SIOCDEVPRIVATE+7
34
35 /*
36  * SIOCNICE:
37  *
38  * The following structure needs to be less than IFNAMSIZ (16 bytes) because
39  * we're overloading ifreq.ifr_ifru.
40  *
41  * If 16 bytes is not enough, we should consider relaxing this because
42  * this is no field after ifr_ifru in the ifreq structure. But we may
43  * run into future compatiability problem in case of changing struct ifreq.
44  */
45 struct nice_req
46 {
47     __u32 cmd;
48
49     union
50     {
51 #ifdef __KERNEL__
52         /* cmd = NICE_CMD_SET_RX or NICE_CMD_GET_RX */
53         struct
54         {
55             void (*nrqus1_rx)( struct sk_buff*, void* );
56             void* nrqus1_ctx;
57         } nrqu_nrqus1;
58
59         /* cmd = NICE_CMD_QUERY_SUPPORT */
60         struct
61         {
62             __u32 nrqus2_magic;
63             __u32 nrqus2_support_rx:1;
64             __u32 nrqus2_support_vlan:1;
65             __u32 nrqus2_support_get_speed:1;
66         } nrqu_nrqus2;
67 #endif
68
69         /* cmd = NICE_CMD_GET_SPEED */
70         struct
71         {
72             unsigned int nrqus3_speed; /* 0 if link is down, */
73                                        /* otherwise speed in Mbps */
74         } nrqu_nrqus3;
75
76         /* cmd = NICE_CMD_BLINK_LED */
77         struct
78         {
79             unsigned int nrqus4_blink_time; /* blink duration in seconds */
80         } nrqu_nrqus4;
81
82     } nrq_nrqu;
83 };
84
85 #define nrq_rx           nrq_nrqu.nrqu_nrqus1.nrqus1_rx
86 #define nrq_ctx          nrq_nrqu.nrqu_nrqus1.nrqus1_ctx
87 #define nrq_support_rx   nrq_nrqu.nrqu_nrqus2.nrqus2_support_rx
88 #define nrq_magic        nrq_nrqu.nrqu_nrqus2.nrqus2_magic
89 #define nrq_support_vlan nrq_nrqu.nrqu_nrqus2.nrqus2_support_vlan
90 #define nrq_support_get_speed nrq_nrqu.nrqu_nrqus2.nrqus2_support_get_speed
91 #define nrq_speed        nrq_nrqu.nrqu_nrqus3.nrqus3_speed
92 #define nrq_blink_time   nrq_nrqu.nrqu_nrqus4.nrqus4_blink_time
93
94 /*
95  * magic constants
96  */
97 #define NICE_REQUESTOR_MAGIC            0x4543494E /* NICE in ascii */
98 #define NICE_DEVICE_MAGIC               0x4E494345 /* ECIN in ascii */
99
100 /*
101  * command field
102  */
103 #define NICE_CMD_QUERY_SUPPORT          0x00000001
104 #define NICE_CMD_SET_RX                 0x00000002
105 #define NICE_CMD_GET_RX                 0x00000003
106 #define NICE_CMD_GET_SPEED              0x00000004
107 #define NICE_CMD_BLINK_LED              0x00000005
108
109 #endif  /* _nicext_h_ */