Skip to content
Snippets Groups Projects
nicext.h 3.37 KiB
Newer Older
  • Learn to ignore specific revisions
  • Wolfgang Denk's avatar
    Wolfgang Denk committed
    /****************************************************************************
     * 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
     */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define SIOCNICE	SIOCDEVPRIVATE+7
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    /*
     * 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__
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	/* cmd = NICE_CMD_SET_RX or NICE_CMD_GET_RX */
    	struct
    	{
    	    void (*nrqus1_rx)( struct sk_buff*, void* );
    	    void* nrqus1_ctx;
    	} nrqu_nrqus1;
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	/* 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;
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #endif
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	/* cmd = NICE_CMD_GET_SPEED */
    	struct
    	{
    	    unsigned int nrqus3_speed; /* 0 if link is down, */
    				       /* otherwise speed in Mbps */
    	} nrqu_nrqus3;
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	/* cmd = NICE_CMD_BLINK_LED */
    	struct
    	{
    	    unsigned int nrqus4_blink_time; /* blink duration in seconds */
    	} nrqu_nrqus4;
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
        } 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_ */