| /**************************************************************************** |
| * Copyright(c) 2000-2001 Broadcom Corporation. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation. |
| * |
| * Name: nicext.h |
| * |
| * Description: Broadcom Network Interface Card Extension (NICE) is an |
| * extension to Linux NET device kernel mode drivers. |
| * NICE is designed to provide additional functionalities, |
| * such as receive packet intercept. To support Broadcom NICE, |
| * the network device driver can be modified by adding an |
| * device ioctl handler and by indicating receiving packets |
| * to the NICE receive handler. Broadcom NICE will only be |
| * enabled by a NICE-aware intermediate driver, such as |
| * Broadcom Advanced Server Program Driver (BASP). When NICE |
| * is not enabled, the modified network device drivers |
| * functions exactly as other non-NICE aware drivers. |
| * |
| * Author: Frankie Fan |
| * |
| * Created: September 17, 2000 |
| * |
| ****************************************************************************/ |
| #ifndef _nicext_h_ |
| #define _nicext_h_ |
| |
| /* |
| * ioctl for NICE |
| */ |
| #define SIOCNICE SIOCDEVPRIVATE+7 |
| |
| /* |
| * SIOCNICE: |
| * |
| * The following structure needs to be less than IFNAMSIZ (16 bytes) because |
| * we're overloading ifreq.ifr_ifru. |
| * |
| * If 16 bytes is not enough, we should consider relaxing this because |
| * this is no field after ifr_ifru in the ifreq structure. But we may |
| * run into future compatiability problem in case of changing struct ifreq. |
| */ |
| struct nice_req |
| { |
| __u32 cmd; |
| |
| union |
| { |
| #ifdef __KERNEL__ |
| /* cmd = NICE_CMD_SET_RX or NICE_CMD_GET_RX */ |
| struct |
| { |
| void (*nrqus1_rx)( struct sk_buff*, void* ); |
| void* nrqus1_ctx; |
| } nrqu_nrqus1; |
| |
| /* cmd = NICE_CMD_QUERY_SUPPORT */ |
| struct |
| { |
| __u32 nrqus2_magic; |
| __u32 nrqus2_support_rx:1; |
| __u32 nrqus2_support_vlan:1; |
| __u32 nrqus2_support_get_speed:1; |
| } nrqu_nrqus2; |
| #endif |
| |
| /* cmd = NICE_CMD_GET_SPEED */ |
| struct |
| { |
| unsigned int nrqus3_speed; /* 0 if link is down, */ |
| /* otherwise speed in Mbps */ |
| } nrqu_nrqus3; |
| |
| /* cmd = NICE_CMD_BLINK_LED */ |
| struct |
| { |
| unsigned int nrqus4_blink_time; /* blink duration in seconds */ |
| } nrqu_nrqus4; |
| |
| } nrq_nrqu; |
| }; |
| |
| #define nrq_rx nrq_nrqu.nrqu_nrqus1.nrqus1_rx |
| #define nrq_ctx nrq_nrqu.nrqu_nrqus1.nrqus1_ctx |
| #define nrq_support_rx nrq_nrqu.nrqu_nrqus2.nrqus2_support_rx |
| #define nrq_magic nrq_nrqu.nrqu_nrqus2.nrqus2_magic |
| #define nrq_support_vlan nrq_nrqu.nrqu_nrqus2.nrqus2_support_vlan |
| #define nrq_support_get_speed nrq_nrqu.nrqu_nrqus2.nrqus2_support_get_speed |
| #define nrq_speed nrq_nrqu.nrqu_nrqus3.nrqus3_speed |
| #define nrq_blink_time nrq_nrqu.nrqu_nrqus4.nrqus4_blink_time |
| |
| /* |
| * magic constants |
| */ |
| #define NICE_REQUESTOR_MAGIC 0x4543494E /* NICE in ascii */ |
| #define NICE_DEVICE_MAGIC 0x4E494345 /* ECIN in ascii */ |
| |
| /* |
| * command field |
| */ |
| #define NICE_CMD_QUERY_SUPPORT 0x00000001 |
| #define NICE_CMD_SET_RX 0x00000002 |
| #define NICE_CMD_GET_RX 0x00000003 |
| #define NICE_CMD_GET_SPEED 0x00000004 |
| #define NICE_CMD_BLINK_LED 0x00000005 |
| |
| #endif /* _nicext_h_ */ |