home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / nics / root.2 / usr / include / sys / mdi.h / mdi
Text File  |  1998-08-19  |  24KB  |  720 lines

  1. /*
  2.  * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3.  *                                                                         
  4.  *        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5.  *                   SANTA CRUZ OPERATION INC.                             
  6.  *                                                                         
  7.  *   The copyright notice above does not evidence any actual or intended   
  8.  *   publication of such source code.                                      
  9.  */
  10.  
  11. #ifndef _IO_ND_SYS_MDI_H  /* wrapper symbol for kernel use */
  12. #define _IO_ND_SYS_MDI_H  /* subject to change without notice */
  13.  
  14. #ident "@(#)mdi.h    28.1"
  15. #ident "$Header: $"
  16. /*
  17.  *      Copyright (C) The Santa Cruz Operation, 1993-1997.
  18.  *      This Module contains Proprietary Information of
  19.  *      The Santa Cruz Operation and should be treated
  20.  *      as Confidential.
  21.  */
  22.  
  23. #if defined(__cplusplus)
  24. extern "C" {
  25. #endif
  26.  
  27. #ifdef _KERNEL_HEADERS
  28.  
  29. #include <util/types.h>
  30. #include <util/param.h>
  31. /* for mblk_t */
  32. #include <io/stream.h>
  33. /* for rm_key_t */
  34. #include <io/autoconf/resmgr/resmgr.h>
  35. #include <io/autoconf/confmgr/confmgr.h>
  36. #include <io/autoconf/confmgr/cm_i386at.h>
  37.  
  38. #elif defined(_KERNEL) || defined(_KMEMUSER)
  39.  
  40. #include <sys/types.h>
  41. #include <sys/param.h>
  42. #include <sys/stream.h>
  43. #include <sys/resmgr.h>
  44. #include <sys/confmgr.h>
  45. #include <sys/cm_i386at.h>
  46.  
  47. #endif
  48.  
  49. /*
  50.  * mdi.h header for MAC Driver Interface
  51.  */
  52.  
  53. /*
  54.  * Primitives for Local Management Services
  55.  */
  56. #define MAC_INFO_REQ        0x00    /* Information Req */
  57. #define MAC_INFO_ACK        0x03    /* Information Ack */
  58. #define MAC_BIND_REQ        0x01    /* Bind dlsap address */
  59. #define MAC_ERROR_ACK        0x05    /* Error acknowledgment */
  60. #define MAC_OK_ACK        0x06    /* Success acknowledgment */
  61. #define MAC_HWFAIL_IND        0x07    /* H/W Failure Indication */
  62. #define MAC_HWSUSPEND_IND    0x08    /* H/W Suspend Indication (DDI8) */
  63. #define MAC_HWRESUME_IND    0x09    /* H/W Resume Indication (DDI8) */
  64.  
  65. #define MAC_ISDN_MSG        (500+0x0d)    /* ISDN Message, must be */
  66.                         /* same as DL_ISDN_MSG in */
  67.                         /* scodlpi.h */
  68.  
  69. /*
  70.  * MAC_ERROR_ACK error return values
  71.  */
  72. #define    MAC_OUTSTATE    0x02    /* Primitive issued in improper state */
  73. #define    MAC_BADPRIM    0x03    /* Primitive received unknown by MDI driver */
  74. #define    MAC_INITFAILED    0x04    /* Physical Link initialization failed */
  75. #define    MAC_HWNOTAVAIL    0x05    /* Hardware isn't available at this time */
  76.  
  77. /*
  78.  * MDI media types supported
  79.  */
  80. #define    MAC_CSMACD    0x0    /* IEEE 802.3 CSMA/CD network */
  81. #define    MAC_TPR        0x02    /* IEEE 802.5 Token Passing Ring */
  82. #define MAC_FDDI    0x08    /* FDDI on Copper/Fiber */
  83.  
  84. #define MAC_ISDN_BRI    0x10    /* Basic Rate ISDN    1D(16)+2B(64) */
  85. #define MAC_ISDN_PRI    0x11    /* Primary Rate ISDN    1D(64)+23B(64) */
  86.  
  87. /*
  88.  * Device minor numbers
  89.  *
  90.  * If there are more than 32 channels associated with a single
  91.  * adapter, extended minors must be used.  See mdevice(F) for
  92.  * the procedure for allocating extended minors.
  93.  *
  94.  * The card number is in the low bits so that single channel
  95.  * cards (Ethernet, Token Ring) have consecutive minor numbering
  96.  * and are not bothered with extended minors.
  97.  */
  98.  
  99. #define MDI_DEV_TO_CARD(dev)        (minor(dev) & 0x07)
  100. #define MDI_DEV_TO_CHANNEL(dev)        (minor(dev) >> 3)
  101.  
  102. /*
  103.  * MDI interface primitive definitions.
  104.  *
  105.  * Each primitive is sent as a stream message. The
  106.  * the messages may be viewed as a sequence of bytes that have the
  107.  * following form without any padding. The structure definition
  108.  * of the following messages may have to change depending on the
  109.  * underlying hardware architecture and crossing of a hardware
  110.  * boundary with a different hardware architecture.
  111.  *
  112.  * Fields in the primitives having a name of the form
  113.  * mac_reserved cannot be used and have the value of
  114.  * binary zero, no bits turned on.
  115.  *
  116.  * Each message has the name defined followed by the
  117.  * stream message type (M_PROTO, M_PCPROTO, M_DATA)
  118.  */
  119.  
  120. /*
  121.  *    LOCAL MANAGEMENT SERVICE PRIMITIVES
  122.  */
  123.  
  124. /*
  125.  * MAC_INFO_REQ, M_PROTO type
  126.  */
  127. typedef struct mac_info_req {
  128.     ulong    mac_primitive;
  129. } mac_info_req_t;
  130.  
  131. /*
  132.  * MAC_INFO_ACK, M_PROTO type
  133.  */
  134. typedef struct mac_info_ack {
  135.     ulong        mac_primitive;
  136.     ulong        mac_max_sdu;
  137.     ulong        mac_min_sdu;
  138.     ulong        mac_mac_type;
  139.     ulong        mac_driver_version;
  140.     ulong        mac_if_speed;
  141. } mac_info_ack_t;
  142.  
  143. /*
  144.  * MAC_BIND_REQ, M_PROTO type
  145.  *    Return MAC_OK_ACK/MAC_ERROR_ACK
  146.  */
  147. typedef struct mac_bind_req {
  148.     ulong    mac_primitive;
  149.     void    *mac_cookie;    /* passed to mdi_valid_mca() */
  150. } mac_bind_req_t;
  151.  
  152. /*
  153.  * MAC_OK_ACK, M_PROTO type
  154.  */
  155. typedef struct mac_ok_ack {
  156.     ulong    mac_primitive;
  157.     ulong    mac_correct_primitive;
  158. } mac_ok_ack_t;
  159.  
  160. /*
  161.  * MAC_ERROR_ACK, M_PROTO type
  162.  */
  163. typedef struct mac_error_ack {
  164.     ulong    mac_primitive;
  165.     ulong    mac_error_primitive;
  166.     ulong    mac_errno;
  167. } mac_error_ack_t;
  168.  
  169. /*
  170.  * MAC_HWFAIL_IND, M_PROTO type
  171.  */
  172. typedef struct mac_hwfail_ind {
  173.     ulong    mac_primitive;
  174. } mac_hwfail_ind_t;
  175.  
  176. /*
  177.  * MAC_HWSUSPEND_IND, M_PCPROTO type
  178.  */
  179. typedef struct mac_hwsuspend_ind {
  180.     ulong    mac_primitive;
  181. } mac_hwsuspend_ind_t;
  182.  
  183. /*
  184.  * MAC_HWRESUME_IND, M_PCPROTO type
  185.  */
  186. typedef struct mac_hwresume_ind {
  187.     ulong    mac_primitive;
  188. } mac_hwresume_ind_t;
  189.  
  190. typedef union MAC_primitives {
  191.     ulong            mac_primitive;
  192.     mac_info_req_t        info_req;
  193.     mac_info_ack_t        info_ack;
  194.     mac_bind_req_t        bind_req;
  195.     mac_ok_ack_t        ok_ack;
  196.     mac_error_ack_t        error_ack;
  197.     mac_hwfail_ind_t    hwfail_ind;
  198.     mac_hwsuspend_ind_t    hwsuspend_ind;
  199.     mac_hwresume_ind_t    hwresume_ind;
  200. } mac_prim_t;
  201.  
  202. #define    MAC_INFO_REQ_SIZE    sizeof(mac_info_req_t)
  203. #define    MAC_INFO_ACK_SIZE    sizeof(mac_info_ack_t)
  204. #define    MAC_BIND_REQ_SIZE    sizeof(mac_bind_req_t)
  205. #define    MAC_OK_ACK_SIZE        sizeof(mac_ok_ack_t)
  206. #define    MAC_ERROR_ACK_SIZE    sizeof(mac_error_ack_t)
  207. #define    MAC_HWFAIL_IND_SIZE    sizeof(mac_hwfail_ind_t)
  208. #define    MAC_MCA_SIZE        sizeof(mac_mcast_t)
  209. #define MAC_HWSUSPEND_IND_SIZE    sizeof(mac_hwsuspend_ind_t)
  210. #define MAC_HWRESUME_IND_SIZE    sizeof(mac_hwresume_ind_t)
  211.  
  212. #define MDI_VERSION 0x0100    /* Value passed back from MDI driver */
  213.  
  214. /* Valid ioctls for MDI drivers */
  215. #define MACIOC(x)           (('M' << 8) | (x))
  216.  
  217. #define MACIOC_SETMCA        MACIOC(3)    /* Multicast set */
  218. #define MACIOC_DELMCA        MACIOC(4)    /* Multicast delete */
  219. #define MACIOC_GETMCA        MACIOC(6)    /* Get multicast table */
  220. #define MACIOC_GETADDR        MACIOC(8)    /* Get MAC address */
  221. #define MACIOC_SETADDR        MACIOC(9)    /* Set MAC address */
  222. #define MACIOC_GETSTAT        MACIOC(10)    /* Get MAC statistics */
  223. #define MACIOC_PROMISC        MACIOC(11)    /* Set Promiscuous Reception */
  224. #define MACIOC_GETRADDR        MACIOC(12)    /* Get factory MAC Address */
  225. #define MACIOC_CLRSTAT        MACIOC(13)    /* Clear MAC statistics */
  226. #define MACIOC_GETMCSIZ        MACIOC(14)    /* Get multicast table size */
  227. #define MACIOC_SETSTAT        MACIOC(16)    /* Set MAC statistics */
  228. #define MACIOC_SETALLMCA    MACIOC(17)      /* Recieve All Multicast */
  229. #define MACIOC_DELALLMCA    MACIOC(18)      /* Dont Recieve All Multicast */
  230.  
  231.     /* UNSUPPORTED MACIOC ioctl values - DO NOT USE */
  232. #ifdef LLI31_UNSUPPORTED
  233. #define MACIOC_DIAG        MACIOC(1)    /* Set MAC diagnostics */
  234. #define MACIOC_UNITSEL        MACIOC(2)    /* MAC unit select */
  235. #define MACIOC_CLRMCA        MACIOC(5)    /* Flush multicast table */
  236. #define MACIOC_GETIFSTAT    MACIOC(7)    /* Dump BSD statistics */
  237. #define MACIOC_HWDEPEND        MACIOC(15)    /* Hardware dependent */
  238. #define MACIOC_LOCALSTAT    MACIOC(254)    /* dump statistics */
  239. #endif
  240.  
  241. /*
  242.  * Ethernet statistics structure for the MACIOC_GETSTAT ioctl
  243.  */
  244. typedef struct mac_stats_eth {
  245.     ulong mac_align;            /* Bad Alignment Received */
  246.     ulong mac_badsum;           /* Bad Checksum Received */
  247.     ulong mac_sqetesterrors;    /* NEW SQE Test Errors */
  248.     ulong mac_frame_def;        /* #Frames Deferred (not dropped) */
  249.     ulong mac_oframe_coll;      /* #Times coll' det'ed >512bits into frame*/
  250.     ulong mac_xs_coll;      /* #Frames(tx) Dropped due Excess Collisions */
  251.     ulong mac_tx_errors;    /* NEW #Internal MAC Transmit Errors */
  252.     ulong mac_carrier;      /* #Frames Dropped(tx) Due To Lost Carrier */
  253.     ulong mac_badlen;           /* #Frames(rx) Dropped due >MAX_MACPDUSZ */
  254.     ulong mac_no_resource;      /* #Internal MAC Receive Errors */
  255.     
  256.         /* NEW Table of #frames involved in N collisions, where */
  257.         /* N-1 is the table index (e.g. mac_colltable[0] == #frames */
  258.         /* involved in 1 collision) */
  259.     ulong mac_colltable[16];
  260.     
  261.     /* FIELDS NOT REQUIRED BY MIB */
  262.     ulong mac_spur_intr;        /* Spurious interrupts */
  263.     ulong mac_frame_nosr;       /* Dropped Due To Lack of STREAMS */
  264.         /* FIELDS NOT REQUIRED BY MIB, ARE THEY USEFUL?? */
  265.     ulong mac_baddma;    /* Errors Due To Over/Under Runs */
  266.     ulong mac_timeouts;    /* Device Timeouts */
  267. } mac_stats_eth_t;
  268.  
  269. /*
  270.  * Token-Ring statistics structure for the MACIOC_GETSTAT ioctl
  271.  */
  272. typedef    struct mac_stats_tr {
  273.     ulong mac_ringstatus;    /* Bit field holding T-R status */
  274.     unchar mac_funcaddr[6];    /* Currently set functional address */
  275.     unchar mac_upstream[6];    /* MAC addr of upstream neighbor */
  276.     unchar mac_actmonparticipate;    /* Active Mon selection participation */
  277.     ulong mac_lineerrors;    /* #Frames copied with FCS error */
  278.     ulong mac_bursterrors;    /* #times no transitions detected */
  279.     ulong mac_acerrors;    /* #times stn. detected with bad A/C response */
  280.     ulong mac_aborttranserrors;    /* #frames aborted on transmission */
  281.     ulong mac_internalerrors;    /* #internal errors */
  282.     ulong mac_lostframeerrors;
  283.     ulong mac_receivecongestions;    /* #frames received and then dropped */
  284.     ulong mac_framecopiederrors;    /* #times duplicate address detected */
  285.     ulong mac_tokenerrors;    /* #times Act' Mon detects token err */
  286.     ulong mac_softerrors;    /* #errors recoverable by MAC protocol */
  287.     ulong mac_harderrors;    /* #times MAC beacon frames tx'ed or rx'ed */
  288.     ulong mac_signalloss;    /* #times detection of ring signal lost */
  289.     ulong mac_transmitbeacons;    /* #MAC beacon frames sent */
  290.     ulong mac_recoverys;    /* #times MAC claim frames tx'ed or rx'ed */
  291.     ulong mac_lobewires;    /* #times open/short circuit in lobe path */
  292.     ulong mac_removes;    /* #MAC remove-ring-stn frames received */
  293.     ulong mac_statssingles;    /* #times only stn. on ring */
  294.     ulong mac_frequencyerrors;    /* #times signal freq. out of range */
  295.  
  296.     /* FIELDS NOT REQUIRED BY MIB */
  297.     ulong mac_badlen;           /* #Frames(tx) Dropped due >MAX_MACPDUSZ */
  298.     ulong mac_spur_intr;        /* Spurious interrupts */
  299.     ulong mac_frame_nosr;       /* Dropped Due To Lack of STREAMS */
  300.         /* FIELDS NOT REQUIRED BY MIB, ARE THEY USEFUL?? */
  301.     ulong mac_baddma;    /* Errors Due To Over/Under Runs */
  302.     ulong mac_timeouts;    /* Device Timeouts */
  303. } mac_stats_tr_t;
  304.  
  305. /*
  306.  * FDDI statistics structure for the MACIOC_GETSTAT ioctl
  307.  */
  308. typedef struct mac_stats_fddi {
  309.     unchar smt_station_id[8];        /* SMT Attributes */
  310.     ulong smt_op_version_id;
  311.     ulong smt_hi_version_id;
  312.     ulong smt_lo_version_id;
  313.     unchar smt_user_data[32];        /* read-write */
  314.     ulong smt_mib_version_id;
  315.     ulong smt_mac_cts;
  316.     ulong smt_non_master_cts;
  317.     ulong smt_master_cts;
  318.     ulong smt_available_paths;
  319.     ulong smt_config_capabilities;
  320.     ulong smt_config_policy;        /* read-write */
  321.     ulong smt_connection_policy;        /* read-write */
  322.     ulong smt_t_notify;            /* read-write */
  323.     ulong smt_stat_rpt_policy;        /* read-write */
  324.     ulong smt_trace_max_expiration;        /* read-write */
  325.     ulong smt_bypass_present;
  326.     ulong smt_ecm_state;
  327.     ulong smt_cf_state;
  328.     ulong smt_remote_disconnect_flag;
  329.     ulong smt_station_status;
  330.     ulong smt_peer_wrap_flag;
  331.     ulong smt_time_stamp;    /* RFC1512 32bit signed int, SMT 7.2c 64bits */
  332.     ulong smt_transition_time_stamp;    /* RFC1512 32b, SMT 7.2c 64b */
  333.     ulong mac_frame_status_functions;    /* MAC Attributes */
  334.     ulong mac_t_max_capability;
  335.     ulong mac_tvx_capability;
  336.     ulong mac_available_paths;
  337.     ulong mac_current_path;
  338.     unchar mac_upstream_nbr[6];
  339.     unchar mac_downstream_nbr[6];
  340.     unchar mac_old_upstream_nbr[6];
  341.     unchar mac_old_downstream_nbr[6];
  342.     ulong mac_dup_address_test;
  343.     ulong mac_requested_paths;        /* read-write */
  344.     ulong mac_downstream_port_type;
  345.     unchar mac_smt_address[6];
  346.     ulong mac_t_req;
  347.     ulong mac_t_neg;
  348.     ulong mac_t_max;
  349.     ulong mac_tvx_value;
  350.     ulong mac_frame_cts;
  351.     ulong mac_copied_cts;
  352.     ulong mac_transmit_cts;
  353.     ulong mac_error_cts;
  354.     ulong mac_lost_cts;
  355.     ulong mac_frame_error_threshold;    /* read-write */
  356.     ulong mac_frame_error_ratio;
  357.     ulong mac_rmt_state;
  358.     ulong mac_da_flag;
  359.     ulong mac_una_da_flag;
  360.     ulong mac_frame_error_flag;
  361.     ulong mac_ma_unitdata_available;
  362.     ulong mac_hardware_present;
  363.     ulong mac_ma_unitdata_enable;        /* read-write */
  364.     ulong path_tvx_lower_bound;        /* read-write */
  365.     ulong path_t_max_lower_bound;        /* read-write */
  366.     ulong path_max_t_req;            /* read-write */
  367.     ulong path_configuration[8];        /* PATH Attributes */
  368.     ulong port_my_type[2];            /* PORT Attributes */
  369.     ulong port_neighbor_type[2];
  370.     ulong port_connection_policies[2];    /* read-write */
  371.     ulong port_mac_indicated[2];
  372.     ulong port_current_path[2];
  373.     unchar port_requested_paths[3*2];    /* read-write */
  374.     ulong port_mac_placement[2];
  375.     ulong port_available_paths[2];
  376.     ulong port_pmd_class[2];
  377.     ulong port_connection_capabilities[2];
  378.     ulong port_bs_flag[2];
  379.     ulong port_lct_fail_cts[2];
  380.     ulong port_ler_estimate[2];
  381.     ulong port_lem_reject_cts[2];
  382.     ulong port_lem_cts[2];
  383.     ulong port_ler_cutoff[2];        /* read-write */
  384.     ulong port_ler_alarm[2];        /* read-write */
  385.     ulong port_connect_state[2];
  386.     ulong port_pcm_state[2];
  387.     ulong port_pc_withhold[2];
  388.     ulong port_ler_flag[2];
  389.     ulong port_hardware_present[2];
  390. } mac_stats_fddi_t;
  391.  
  392. /*
  393.  * ISDN statistics structure for the MACIOC_GETSTAT ioctl
  394.  *
  395.  * The ISDN statistics structures defined below are taken from RFC 2127
  396.  * ISDN Management Information Base using SMIv2.
  397.  *
  398.  */
  399. typedef struct isdn_dchannel_stats {
  400.     ulong    speed;
  401.     ulong    mtu;
  402.     ulong    LapdOperStatus;
  403.     ulong    InOctets;
  404.     ulong    InUcastPkts;
  405.     ulong    InBroadcastPkts;
  406.     ulong    InDiscards;
  407.     ulong    InErrors;
  408.     ulong    InUnkownProtos;
  409.     ulong    OutOctets;
  410.     ulong    OutUcastPkts;
  411.     ulong    OutBroadcastPkts;
  412.     ulong    OutDiscards;
  413.     ulong    OutErrors;
  414.     ulong    filler1;    
  415.     ulong    filler2;
  416.     ulong    filler3;
  417.     ulong    filler4;
  418. } isdn_dchannel_stats_t;
  419.  
  420. typedef struct isdn_signaling_stats {
  421.     ulong    SignalingProtocol;        /* enum, see RFC 2127 */
  422.     unchar    CallingAddress[2][32];
  423.     unchar    CallingSubAddress[2][32];
  424.     ulong    BchannelCount;
  425.     ulong    InCalls;
  426.     ulong    InConnected;
  427.     ulong    OutCalls;
  428.     ulong    OutConnected;
  429.     ulong    ChargedUnits;
  430.     ulong    filler1;
  431.     ulong    filler2;
  432.     ulong    filler3;
  433.     ulong    filler4;
  434. } isdn_signaling_stats_t;
  435.  
  436. typedef struct isdn_bchannel_stats {
  437.     ulong    OperStatus;            /* enum, see RFC 2127 */
  438.     ulong    AppID;
  439.     ulong    ChannelNumber;
  440.     unchar    PeerAddress[32];
  441.     unchar    PeerSubAddress[32];
  442.     ulong    CallOrigin;
  443.     ulong    InfoType;            /* enum, see RFC 2127 */
  444.     time_t    CallSetupTime;
  445.     time_t    CallConnectTime;
  446.     ulong    ChargedUnits;
  447.     ulong    filler1;
  448.     ulong    filler2;
  449.     ulong    filler3;
  450.     ulong    filler4;
  451. } isdn_bchannel_stats_t;
  452.  
  453. typedef struct mac_stats_isdn {
  454.     isdn_dchannel_stats_t    dchannel;
  455.     isdn_signaling_stats_t    signaling;
  456.     isdn_bchannel_stats_t    bchannel[30];
  457. } mac_stats_isdn_t;
  458.  
  459. /* helpful defintions for reporting ISDN statistics */
  460.  
  461. /* enumeration for dchannel.LapdOperStatus */
  462. /* RFC 2127 isdnLapdOperStatus             */
  463.  
  464. /* choose:               ndstat reports: */
  465. #define    LAPD_NONE    0    /* Device Not Reporting LAPD Status */
  466. #define    LAPD_INACTIVE    1    /* Inactive */
  467. #define    LAPD_L1ACTIVE    2    /* Layer 1 Active */
  468. #define    LAPD_L2ACTIVE    3    /* Layer 2 Active */
  469.  
  470. /* emuneration for signaling.SignalingProtocol */
  471. /* RFC 2127 IsdnSignalingProtocol              */
  472.  
  473. /* choose:               ndstat reports: */
  474. #define    SIGPROT_NONE    0    /* Protocol Information Not Available */
  475. #define    SIGPROT_Q931    2    /* ITU DSS1 Q.931 */
  476. #define    SIGPROT_ETSI    3    /* Europe / ETSI */
  477. #define    SIGPROT_UKDASS2    4    /* U.K. / DASS2 (PRI) */
  478. #define    SIGPROT_USA4ESS    5    /* U.S.A. / AT&T 4ESS */
  479. #define    SIGPROT_USA5ESS    6    /* U.S.A. / AT&T 5ESS */
  480. #define    SIGPROT_USADMS1    7    /* U.S.A / Northern Telecom DMS100 */
  481. #define    SIGPROT_USADMS2    8    /* U.S.A / Northern Telecom DMS250 */
  482. #define    SIGPROT_USANI1    9    /* U.S.A National ISDN 1 (BRI) */
  483. #define    SIGPROT_USANI2    10    /* U.S.A National ISDN 2 (BRI, PRI) */
  484. #define    SIGPROT_FRNVN2    12    /* France / VN2 */
  485. #define    SIGPROT_FRNVN3    13    /* France / VN3 */
  486. #define    SIGPROT_FRNVN4    14    /* France / VN4 (ETSI with changes) */
  487. #define    SIGPROT_FRNVN6    15    /* France / VN6 (ETSI with changes) */
  488. #define    SIGPROT_JPNKDD     16    /* Japan / KDD */
  489. #define    SIGPROT_JPNNI64    17    /* Japan / NTT INS64 */
  490. #define    SIGPROT_JPNNI15    18    /* Japan / NTT INS1500 */
  491. #define    SIGPROT_GER1TR6    19    /* Germany / 1TR6 (BRI, PRI) */
  492. #define    SIGPROT_GERSIEM    20    /* Germany / Siemens HiCom CORNET */
  493. #define    SIGPROT_AUTS013    21    /* Australia / TS013 */
  494. #define    SIGPROT_AUTS014    22    /* Australia / TS014 */
  495. #define    SIGPROT_QSIG    23    /* Q.SIG */
  496. #define    SIGPROT_SWNET2    24    /* SwissNet-2 */
  497. #define    SIGPROT_SWNET3    25    /* SwissNet-3 */
  498.  
  499. /* enumeration for bchannel.OperStatus */
  500. /* RFC 2127 isdnBearerOperStatus       */
  501.  
  502. /* choose:               ndstat reports: */
  503. #define    BSTATUS_NONE    0    /* Device not reporting B channel statistics */
  504. #define    BSTATUS_IDLE    1    /* Idle */
  505. #define    BSTATUS_CNNCTNG    2    /* Connecting */
  506. #define    BSTATUS_CNNCTD    3    /* Connected */
  507. #define    BSTATUS_ACTIVE    4    /* Active */
  508.  
  509. /* enumeration for bchannel.CallOrigin */
  510. /* RFC 2127 isdnBearerCallOrigin       */
  511.  
  512. /* choose:               ndstat reports */
  513. #define BCALLORIG_OUT    1    /* Outgoing */
  514. #define    BCALLORIG_IN    2    /* Incoming */
  515. #define    BCALLORIG_CBACK    3    /* Callback */
  516.  
  517. /* enumeration for bchannel.InfoType */
  518. /* RFC 2127 isdnBearerInfoType       */
  519.  
  520. /* choose:               ndstat reports */
  521. #define    BINFOTYPE_NONE    0    /* Unknown */
  522. #define    BINFOTYPE_SPCH    2    /* Speech */
  523. #define    BINFOTYPE_UDI    3    /* Unrestricted Digital Information */
  524. #define    BINFOTYPE_UDI56    4    /* Unrestricted Digital Information 56Kbit/s Rate Adoption */
  525. #define    BINFOTYPE_RDI    5    /* Restricted Digital Information */
  526. #define    BINFOTYPE_3KAUD    6    /* 3.1 kHz Audio */
  527. #define    BINFOTYPE_7KAUD    7    /* 7 kHz Audio */
  528. #define    BINFOTYPE_VIDEO    8    /* Video */
  529. #define    BINFOTYPE_PCKT    9    /* Packet Mode */
  530.  
  531.  
  532. /*
  533.  *   MACIOC_SETSTAT - support for writeable MIBs.
  534.  */
  535.     /* MACSTATs for the mac_flags bit field */
  536. #define MACSTAT_ACTMONPARTICIPATE 0     /* Active Mon selection participation */
  537.  
  538. typedef    long macflags_t[10];
  539.  
  540. #define NFLBITS    (sizeof(long) * 8)    /* bits per mask */
  541.  
  542. #define    MACFL_SET(n, p)    ((p)->mac_flags[(n)/NFLBITS] |= (1L << ((n) % NFLBITS)))
  543. #define    MACFL_CLR(n, p)    ((p)->mac_flags[(n)/NFLBITS] &= ~(1L<< ((n) % NFLBITS)))
  544. #define    MACFL_ISSET(n, p) ((p)->mac_flags[(n)/NFLBITS] &(1L << ((n) % NFLBITS)))
  545. #define MACFL_ZERO(p)    memset((char *)((p)->mac_flags), '\0', sizeof(*(p)))
  546.  
  547. typedef struct mac_setstat {
  548.     macflags_t    mac_flags;
  549.     union {
  550.         mac_stats_eth_t        eth;
  551.         mac_stats_tr_t        tr;
  552.         mac_stats_fddi_t     fddi;
  553.         mac_stats_isdn_t    isdn;
  554.     } mac_stats;
  555. } mac_setstat_t;
  556.  
  557. /*
  558.  * Type: macaddr_t
  559.  *
  560.  * Purpose:
  561.  *   Store a network address.
  562.  */
  563. #define MDI_MACADDRSIZE    6
  564. typedef unsigned char    macaddr_t[MDI_MACADDRSIZE];
  565.  
  566. /*
  567.  * multicast address state structure - mdi_get_mctable()
  568.  */
  569. typedef struct mac_mcast {
  570.     ulong    mac_all_mca;        /* all multicasts enabled */
  571.     ulong    mac_mca_count;        /* number of multicast addrs enabled */ 
  572.     ulong    mac_mca_length;        /* size (# bytes) of multicast table */
  573.     ulong    mac_mca_offset;        /* beginning of multicast table */
  574. } mac_mcast_t;
  575.  
  576. /*
  577.  * MDI TX Interface routines/structures
  578.  */
  579.  
  580. #if defined(_KERNEL) || defined(_KMEMUSER)
  581. #if defined(__STDC__) && !defined(_NO_PROTOTYPE)
  582. typedef int (*mdi_tx_checkavail_t)(void * handle);
  583. typedef void (*mdi_tx_processmsg_t)(void * handle, int txr, mblk_t * mp);
  584. #else
  585. typedef int (*mdi_tx_checkavail_t)();
  586. typedef void (*mdi_tx_processmsg_t)();
  587. #endif
  588.  
  589. #define MDIDRIVER_HIER_BASE  1  /* lock hierarchy for MDI drivers starts here */
  590.  
  591.         typedef struct {
  592.     queue_t             *q;
  593.     int                active;
  594.     lock_t            *txlock;
  595.     mdi_tx_checkavail_t        tx_avail;
  596.     mdi_tx_processmsg_t        process_msg;
  597.     void             *handle;
  598.     int                         flags;
  599. } mdi_tx_if_t;
  600.  
  601. #define MDI_TX_MP_SAFE        0x00
  602. #define MDI_TX_MP_MT        0x01
  603.  
  604. /*
  605.  * MDI NetBoot/ksl stuff
  606.  */
  607. #define MDI_BUS_ISA        0x00000001
  608. #define MDI_BUS_MCA        0x00000002
  609. #define MDI_BUS_EISA        0x00000004
  610. #define MDI_BUS_PCI        0x00000010
  611. #define MDI_BUS_PCMCIA        0x10000000 /* not defined in arch.h yet */
  612.  
  613. /*
  614.  * lots of adapter docs mix up media types, cabling, and connector type
  615.  * so a small bit of the media mess we live with gets propagated below
  616.  */
  617. #define MDI_MEDIA_AUTO        0x00000001
  618. #define MDI_MEDIA_AUI        0x00000002
  619. #define MDI_MEDIA_BNC        0x00000004
  620. #define MDI_MEDIA_TP        0x00000008
  621. #define MDI_MEDIA_COAX        0x00000010
  622. #define MDI_MEDIA_BNC_TP    0x00000020
  623. #define MDI_MEDIA_TP_COAX    0x00000040
  624.  
  625. #define MDI_SET_BOOTPARAMS    0
  626. #define MDI_GET_BOOTPARAMS    1
  627.  
  628. typedef struct {
  629.     char    *lbl;
  630.     int        val;
  631. } mdi_netboot_t;
  632.  
  633. /* _verify(D2) enhancements for ISA EEPROM/NVRAM autodetection/writeback */
  634. #define MDI_ISAVERIFY_UNKNOWN 0
  635. #define MDI_ISAVERIFY_GET 1 /* retrieve params from eeprom, call again later */
  636. #define MDI_ISAVERIFY_SET 2 /* retrieve params from resmgr & set in firmware */
  637. #define MDI_ISAVERIFY_GET_REPLY 3 /* 2nd time: set params in resmgr from info*/
  638. #define MDI_ISAVERIFY_TRADITIONAL 4 /* normal verify: just confirm io address*/
  639.  
  640. /*
  641.  * memtype values for dlpibase_alloc.
  642.  */
  643. #define DLPIBASE_MEM_NONE                       0x00002    /* no special memory */
  644. /* DLPIBASE_MEM_DMA_LOGICALTOPHYSICAL_BELOW16 is unsupported */
  645. #define DLPIBASE_MEM_DMA_LOGICALTOPHYSICAL_BELOW16 0x00004 /* spec 3.1 reqs. */
  646. #define DLPIBASE_MEM_NONE_BELOW16        0x00008    /* simply below 16meg */
  647. #define DLPIBASE_MEM_NONE_PAGEALIGN        0x00010    /* simply page align */
  648. #define    DLPIBASE_MEM_NONE_PAGEALIGN_BELOW16    0x00020    /* page aligned */
  649.                             /* below 16meg */
  650. #define    DLPIBASE_MEM_DMA_PAGEALIGN_BELOW16    0x00040    /* page aligned */
  651.                             /* contigous */
  652.                             /* below 16meg */
  653. #define    DLPIBASE_MEM_DMA_PAGEALIGN        0x00080    /* page aligned */
  654.                             /* and contiguous */
  655. #define DLPIBASE_MEM_DMA_BELOW16                0x00100 /* physcontiguous */
  656.                             /* below 16 Meg */
  657. #define DLPIBASE_MEM_DMA                        0x00200    /* physcontiguous */
  658.  
  659. #define DLPIBASE_MEM_DMA_LOGICAL_ADDR        0x00400    /* physcontiguous */
  660.                             /* logical addr */
  661.                             /* in ecbs */
  662. /*
  663.  * miscflag values for dlpibase_alloc.
  664.  */
  665. #define    DLPIBASE_KMEM                0x0
  666. /* DLPIBASE_ODIMEM is unsupported */
  667. #define    DLPIBASE_ODIMEM                0x1
  668.  
  669. #define DLPIBASE_NO_INIT_IRQ            0x10000    /* interrupts are */
  670.                             /* not enabled during */
  671.                             /* all of init */
  672. #define DLPIBASE_SGCOUNT_LIMIT5                 0x20000
  673. #define DLPIBASE_SGCOUNT_LIMIT10                0x40000
  674.  
  675.         /* MDI Library functions */
  676. #if defined(__STDC__) && !defined(_NO_PROTOTYPE)
  677. extern void mdi_set_frtn(frtn_t *, void *, int);
  678. extern int mdi_open_file(char *, uchar_t **, int *);
  679. extern int mdi_open_file_i(char *, uchar_t **, int *, int, int, int);
  680. extern void mdi_close_file(void *ptr);
  681. extern void mdi_close_file_i(void *, int, int);
  682. extern void mdi_printcfg(const char *, unsigned, unsigned, 
  683.                          int, int, const char *, ...);
  684. extern int mdi_AT_verify(rm_key_t rm_key, int *getset,
  685.                          ulong_t *sioa, ulong_t *eioa, int *vector,
  686.                          ulong_t *scma, ulong_t *ecma, int *dmac);
  687. extern mblk_t *    mdi_get_mctable(void * mac_cookie);
  688. extern boolean_t mdi_get_unit(rm_key_t, uint_t *);
  689. extern int    mdi_addrs_equal(macaddr_t addr1, macaddr_t addr2);
  690. extern u_short    mdi_htons(u_short);
  691. extern u_short    mdi_ntohs(u_short);
  692. extern void    mdi_do_loopback(queue_t *, mblk_t *, int);
  693. extern void    mdi_macerrorack(queue_t *, long, int);
  694. extern void    mdi_macokack(queue_t *, long);
  695. extern int      mdi_tx_if_init(mdi_tx_if_t * txint,
  696.                             mdi_tx_checkavail_t tx_avail,
  697.                             mdi_tx_processmsg_t process_msg,
  698.                             void * handle,
  699.                             int flags,
  700.                             uchar_t hierarchy);
  701. extern void     mdi_tx_deinit(mdi_tx_if_t * txint);
  702. extern void     mdi_tx_enable(mdi_tx_if_t * txint,
  703.                               queue_t *q);
  704. extern void     mdi_tx_disable(mdi_tx_if_t * txint);
  705. extern void     mdi_tx_if(mdi_tx_if_t * txint, mblk_t * msg);
  706. extern u_char * mdi_end_of_contig_segment(u_char *, u_char *);
  707. extern int    mdi_isdma(u_char *);
  708. extern mblk_t * mdi_dma_allocb(u_long);
  709. extern void    mdi_dma_freeb(u_long *);
  710. extern int    mdi_hw_suspended(queue_t *, rm_key_t);
  711. extern int    mdi_hw_resumed(queue_t *, rm_key_t);
  712. #endif
  713. #endif  /* if defined(_KERNEL) || defined(_KMEMUSER) */
  714.  
  715. #if defined(__cplusplus)
  716.     }
  717. #endif
  718.  
  719. #endif    /* _IO_ND_SYS_MDI_H */
  720.