/**************************************************************************** * 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_ */