blob: 4074972c07e7c5df81798f1634beb98dc1e218f5 [file] [log] [blame]
/****************************************************************************
* 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_ */