⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rcif.h

📁 powerpc内核mpc8241linux系统下net驱动程序
💻 H
字号:
/*** *******************************************************************************     R C I F . H******  RedCreek InterFace include file.****  ---------------------------------------------------------------------**  ---     Copyright (c) 1998-1999, RedCreek Communications Inc.     ---**  ---                   All rights reserved.                        ---**  ---------------------------------------------------------------------**** File Description:**** Header file private ioctl commands.******  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; either version 2 of the License, or**  (at your option) any later version.**  This program is distributed in the hope that it will be useful,**  but WITHOUT ANY WARRANTY; without even the implied warranty of**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the**  GNU General Public License for more details.**  You should have received a copy of the GNU General Public License**  along with this program; if not, write to the Free Software**  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.** **************************************************************************/#ifndef RCIF_H#define RCIF_H/* The following protocol revision # should be incremented every time   a new protocol or new structures are used in this file. */int USER_PROTOCOL_REV = 2;     /* used to track different protocol revisions *//* define a single TCB & buffer */typedef struct                  /* a single buffer */{     U32 context;               /* context */     U32 scount;                /* segment count */     U32 size;                  /* segment size */     U32 addr;                  /* segment physical address */}__attribute__((packed))singleB, *psingleB ;typedef struct                  /* a single TCB */{     /*     **  +-----------------------+     **  |         1             |  one buffer in the TCB     **  +-----------------------+     **  |  <user's Context>     |  user's buffer reference     **  +-----------------------+     **  |         1             |  one segment buffer     **  +-----------------------+                            _     **  |    <buffer size>      |  size                       \      **  +-----------------------+                              \ segment descriptor     **  |  <physical address>   |  physical address of buffer  /     **  +-----------------------+                            _/     */     U32 bcount;                /* buffer count */     singleB b;                 /* buffer */}__attribute__((packed))singleTCB, *psingleTCB;/*   When adding new entries, please add all 5 related changes, since    it helps keep everything consistent:      1) User structure entry      2) User data entry      3) Structure short-cut entry      4) Data short-cut entry      5) Command identifier entry   For Example ("GETSPEED"):      1) struct  RCgetspeed_tag { U32 LinkSpeedCode; } RCgetspeed;      2) struct  RCgetspeed_tag *getspeed;      3) #define RCUS_GETSPEED  data.RCgetspeed;      4) #define RCUD_GETSPEED  _RC_user_data.getspeed      5) #define RCUC_GETSPEED  0x02     Notes for the "GETSPEED" entry, above:      1) RCgetspeed      - RC{name}         RCgetspeed_tag  - RC{name}_tag         LinkSpeedCode   - create any structure format desired (not too large,                           since memory will be unioned with all other entries)      2) RCgetspeed_tag  - RC{name}_tag chosen in #1         getspeed        - arbitrary name (ptr to structure in #1)      3) RCUS_GETSPEED   - RCUS_{NAME}   ("NAME" & "name" do not have to the same)         data.RCgetspeed - data.RC{name}  ("RC{name}" from #1)      4) RCUD_GETSPEED   - _RC_user_data.getspeed  ("getspeed" from #2)      5) RCUC_GETSPEED   - unique hex identifier entry.*/typedef struct RC_user_tag RCuser_struct;/* 1) User structure entry */struct RC_user_tag{    int cmd;    union    {        /* GETINFO structure */        struct RCgetinfo_tag {            unsigned long int mem_start;            unsigned long int mem_end;            unsigned long int base_addr;            unsigned char irq;            unsigned char dma;            unsigned char port;        } RCgetinfo;                    /* <---- RCgetinfo */             /* GETSPEED structure */        struct  RCgetspeed_tag {            U32 LinkSpeedCode;        } RCgetspeed;                   /* <---- RCgetspeed */          /* SETSPEED structure */        struct RCsetspeed_tag {            U16 LinkSpeedCode;        } RCsetspeed;                   /* <---- RCsetspeed */        /* GETPROM structure */        struct  RCgetprom_tag {            U32 PromMode;        } RCgetprom;                   /* <---- RCgetprom */          /* SETPROM structure */        struct RCsetprom_tag {            U16 PromMode;        } RCsetprom;                   /* <---- RCsetprom */        /* GETBROADCAST structure */        struct  RCgetbroadcast_tag {            U32 BroadcastMode;        } RCgetbroadcast;                   /* <---- RCgetbroadcast */          /* SETBROADCAST structure */        struct RCsetbroadcast_tag {            U16 BroadcastMode;        } RCsetbroadcast;                   /* <---- RCsetbroadcast */        /* GETFIRMWAREVER structure */        #define FirmStringLen 80        struct RCgetfwver_tag {            U8 FirmString[FirmStringLen];        } RCgetfwver;                   /* <---- RCgetfwver */          /* GETIPANDMASK structure */        struct RCgetipnmask_tag {            U32 IpAddr;            U32 NetMask;        } RCgetipandmask;               /* <---- RCgetipandmask */        /* SETIPANDMASK structure */        struct RCsetipnmask_tag {            U32 IpAddr;            U32 NetMask;        } RCsetipandmask;               /* <---- RCsetipandmask */        /* GETMAC structure */        #define MAC_SIZE 10        struct RCgetmac_tag {            U8 mac[MAC_SIZE];        } RCgetmac;                     /* <---- RCgetmac */        /* SETMAC structure */        struct RCsetmac_tag {            U8 mac[MAC_SIZE];        } RCsetmac;                     /* <---- RCsetmac */        /* GETLINKSTATUS structure */        struct RCgetlnkstatus_tag {            U32 ReturnStatus;        } RCgetlnkstatus;               /* <---- RCgetlnkstatus */        /* GETLINKSTATISTICS structure */        struct RCgetlinkstats_tag {            RCLINKSTATS StatsReturn;        } RCgetlinkstats;               /* <---- RCgetlinkstats */        /* DEFAULT structure (when no command was recognized) */        struct RCdefault_tag {            int rc;        } RCdefault;                    /* <---- RCdefault */    } data;};   /* struct RC_user_tag { ... } *//* 2) User data entry *//* RCUD = RedCreek User Data */union RC_user_data_tag {        /* structure tags used are taken from RC_user_tag structure above */    struct RCgetinfo_tag      *getinfo;    struct RCgetspeed_tag     *getspeed;    struct RCgetprom_tag *getprom;    struct RCgetbroadcast_tag   *getbroadcast;    struct RCgetfwver_tag     *getfwver;    struct RCgetipnmask_tag   *getipandmask;    struct RCgetmac_tag       *getmac;    struct RCgetlnkstatus_tag *getlinkstatus;    struct RCgetlinkstats_tag *getlinkstatistics;    struct RCdefault_tag      *rcdefault;    struct RCsetspeed_tag     *setspeed;    struct RCsetprom_tag     *setprom;    struct RCsetbroadcast_tag     *setbroadcast;    struct RCsetipnmask_tag   *setipandmask;    struct RCsetmac_tag       *setmac;} _RC_user_data;  /* declare as a global, so the defines below will work *//* 3) Structure short-cut entry *//* define structure short-cuts */   /* structure names are taken from RC_user_tag structure above */#define RCUS_GETINFO           data.RCgetinfo;#define RCUS_GETSPEED          data.RCgetspeed;#define RCUS_GETPROM           data.RCgetprom;#define RCUS_GETBROADCAST      data.RCgetbroadcast;#define RCUS_GETFWVER          data.RCgetfwver;#define RCUS_GETIPANDMASK      data.RCgetipandmask;#define RCUS_GETMAC            data.RCgetmac;#define RCUS_GETLINKSTATUS     data.RCgetlnkstatus;#define RCUS_GETLINKSTATISTICS data.RCgetlinkstats;#define RCUS_DEFAULT           data.RCdefault;#define RCUS_SETSPEED          data.RCsetspeed;#define RCUS_SETPROM           data.RCsetprom;#define RCUS_SETBROADCAST      data.RCsetbroadcast;#define RCUS_SETIPANDMASK      data.RCsetipandmask;#define RCUS_SETMAC            data.RCsetmac;/* 4) Data short-cut entry *//* define data short-cuts */    /* pointer names are from RC_user_data_tag union (just below RC_user_tag) */#define RCUD_GETINFO           _RC_user_data.getinfo#define RCUD_GETSPEED          _RC_user_data.getspeed#define RCUD_GETPROM           _RC_user_data.getprom#define RCUD_GETBROADCAST      _RC_user_data.getbroadcast#define RCUD_GETFWVER          _RC_user_data.getfwver#define RCUD_GETIPANDMASK      _RC_user_data.getipandmask#define RCUD_GETMAC            _RC_user_data.getmac#define RCUD_GETLINKSTATUS     _RC_user_data.getlinkstatus#define RCUD_GETLINKSTATISTICS _RC_user_data.getlinkstatistics#define RCUD_DEFAULT           _RC_user_data.rcdefault#define RCUD_SETSPEED          _RC_user_data.setspeed#define RCUD_SETPROM           _RC_user_data.setprom#define RCUD_SETBROADCAST      _RC_user_data.setbroadcast#define RCUD_SETIPANDMASK      _RC_user_data.setipandmask#define RCUD_SETMAC            _RC_user_data.setmac/* 5) Command identifier entry *//* define command identifiers */#define RCUC_GETINFO            0x01#define RCUC_GETSPEED           0x02#define RCUC_GETFWVER           0x03#define RCUC_GETIPANDMASK       0x04#define RCUC_GETMAC             0x05#define RCUC_GETLINKSTATUS      0x06#define RCUC_GETLINKSTATISTICS  0x07#define RCUC_GETPROM            0x14#define RCUC_GETBROADCAST       0x15#define RCUC_DEFAULT            0xff#define RCUC_SETSPEED           0x08#define RCUC_SETIPANDMASK       0x09#define RCUC_SETMAC             0x0a#define RCUC_SETPROM            0x16#define RCUC_SETBROADCAST       0x17/* define ioctl commands to use, when talking to RC 45/PCI driver */#define RCU_PROTOCOL_REV         SIOCDEVPRIVATE#define RCU_COMMAND              SIOCDEVPRIVATE+1/*   Intended use for the above defines is shown below (GETINFO, as this example):      RCuser_struct RCuser;           // declare RCuser structure      struct ifreq ifr;               // declare an interface request structure      RCuser.cmd = RCUC_GETINFO;           // set user command to GETINFO      ifr->ifr_data = (caddr_t) &RCuser;   // set point to user structure      sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);   // get a socket      ioctl(sock, RCU_COMMAND, &ifr);                  // do ioctl on socket      RCUD_GETINFO = &RCuser.RCUS_GETINFO;   // set data pointer for GETINFO      // print results      printf("memory 0x%lx-0x%lx, base address 0x%x, irq 0x%x\n",              RCUD_GETINFO->mem_start, RCUD_GETINFO->mem_end,              RCUD_GETINFO->base_addr, RCUD_GETINFO->irq);*/#endif   /* RCIF_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -