diff options
Diffstat (limited to 'sys/netatm/atm_if.h')
-rw-r--r-- | sys/netatm/atm_if.h | 392 |
1 files changed, 392 insertions, 0 deletions
diff --git a/sys/netatm/atm_if.h b/sys/netatm/atm_if.h new file mode 100644 index 0000000..ccf9d03 --- /dev/null +++ b/sys/netatm/atm_if.h @@ -0,0 +1,392 @@ +/* + * + * =================================== + * HARP | Host ATM Research Platform + * =================================== + * + * + * This Host ATM Research Platform ("HARP") file (the "Software") is + * made available by Network Computing Services, Inc. ("NetworkCS") + * "AS IS". NetworkCS does not provide maintenance, improvements or + * support of any kind. + * + * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED, + * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE + * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE. + * In no event shall NetworkCS be responsible for any damages, including + * but not limited to consequential damages, arising from or relating to + * any use of the Software or related support. + * + * Copyright 1994-1998 Network Computing Services, Inc. + * + * Copies of this Software may be made, however, the above copyright + * notice must be reproduced on all copies. + * + * @(#) $Id: atm_if.h,v 1.13 1998/08/07 22:10:37 mks Exp $ + * + */ + +/* + * Core ATM Services + * ----------------- + * + * ATM Physical and Network Interface definitions + * + */ + +#ifndef _NETATM_ATM_IF_H +#define _NETATM_ATM_IF_H + +/* + * Handy constants + */ +#define ATM_NIF_MTU 9180 /* Default network interface MTU */ + +#define ATM_PCR_TAXI100 227273 /* Peak Cell Rate for 100 Mbs TAXI */ +#define ATM_PCR_TAXI140 318181 /* Peak Cell Rate for 140 Mbs TAXI */ +#define ATM_PCR_OC3C 353207 /* Peak Cell Rate for OC3c */ +#define ATM_PCR_OC12C 1416905 /* Peak Cell Rate for OC12c */ + + +/* + * Media Access Control (MAC) address + */ +struct mac_addr { + u_char ma_data[6]; /* MAC address */ +}; +typedef struct mac_addr Mac_addr; + + +/* + * Adapter vendor identifiers + */ +enum atm_vendor { + VENDOR_UNKNOWN, /* Unknown vendor */ + VENDOR_FORE, /* FORE Systems, Inc. */ + VENDOR_ENI /* Efficient Networks, Inc. */ +}; +typedef enum atm_vendor Atm_vendor; + + +/* + * Adapter vendor interface identifiers + */ +enum atm_vendapi { + VENDAPI_UNKNOWN, /* Unknown interface */ + VENDAPI_FORE_1, /* FORE - 200 Series */ + VENDAPI_ENI_1 /* ENI - Midway */ +}; +typedef enum atm_vendapi Atm_vendapi; + + +/* + * Adapter device model identifiers + */ +enum atm_device { + DEV_UNKNOWN, /* Unknown device */ + DEV_FORE_SBA200E, /* FORE SBA-200E */ + DEV_FORE_SBA200, /* FORE SBA-200 */ + DEV_FORE_PCA200E, /* FORE PCA-200E */ + DEV_ENI_155P /* ENI-155p */ +}; +typedef enum atm_device Atm_device; + + +/* + * Adapter media identifiers + */ +enum atm_media { + MEDIA_UNKNOWN, /* Unknown media type */ + MEDIA_TAXI_100, /* TAXI - 100 Mbps */ + MEDIA_TAXI_140, /* TAXI - 140 Mbps */ + MEDIA_OC3C, /* OC-3C */ + MEDIA_OC12C, /* OC-12C */ + MEDIA_UTP155 /* UTP-155 */ +}; +typedef enum atm_media Atm_media; + + +/* + * Bus type identifiers + */ +enum atm_bus { + BUS_UNKNOWN, /* Unknown bus type */ + BUS_SBUS_B16, /* SBus: 16 byte (4 word) max burst */ + BUS_SBUS_B32, /* SBus: 32 byte (8 word) max burst */ + BUS_PCI /* PCI */ +}; +typedef enum atm_bus Atm_bus; + + +#define VERSION_LEN 16 /* Length of version info string */ + + +/* + * ATM adapter configuration information structure + */ +struct atm_config { + Atm_vendor ac_vendor; /* Vendor */ + Atm_vendapi ac_vendapi; /* Vendor interface */ + Atm_device ac_device; /* Device model */ + Atm_media ac_media; /* Media type */ + u_long ac_serial; /* Serial number */ + Atm_bus ac_bustype; /* Bus type */ + u_long ac_busslot; /* Bus slot info (bus type dependent) */ + u_long ac_ram; /* Device ram offset */ + u_long ac_ramsize; /* Device ram size */ + Mac_addr ac_macaddr; /* MAC address */ + char ac_hard_vers[VERSION_LEN]; /* Hardware version */ + char ac_firm_vers[VERSION_LEN]; /* Firmware version */ +}; +typedef struct atm_config Atm_config; + + +#ifdef ATM_KERNEL +/* + * Common structure used to define each physical ATM device interface. + * This structure will (normally) be embedded at the top of each driver's + * device-specific interface structure. + */ +struct atm_pif { + struct atm_pif *pif_next; /* Next registered atm interface */ + char *pif_name; /* Device name */ + short pif_unit; /* Device unit number */ + u_char pif_flags; /* Interface flags (see below) */ + struct sigmgr *pif_sigmgr; /* Signalling Manager for interface */ + struct siginst *pif_siginst; /* Signalling protocol instance */ + struct stack_defn *pif_services; /* Interface's stack services */ + struct mac_addr pif_macaddr; /* Interface's MAC address */ + struct atm_nif *pif_nif; /* List of network interfaces */ + struct atm_pif *pif_grnext; /* Next atm device in group */ + +/* Exported functions */ + int (*pif_ioctl) /* Interface ioctl handler */ + __P((int, caddr_t, caddr_t)); + +/* Interface statistics */ + long pif_ipdus; /* PDUs received from interface */ + long pif_opdus; /* PDUs sent to interface */ + long pif_ibytes; /* Bytes received from interface */ + long pif_obytes; /* Bytes sent to interface */ + long pif_ierrors; /* Errors receiving from interface */ + long pif_oerrors; /* Errors sending to interface */ + long pif_cmderrors; /* Interface command errors */ + caddr_t pif_cardstats; /* Card specific statistics */ + +/* Interface capabilities */ + u_short pif_maxvpi; /* Maximum VPI value supported */ + u_short pif_maxvci; /* Maximum VCI value supported */ + u_int pif_pcr; /* Peak Cell Rate */ +}; + +/* + * Physical interface flags + */ +#define PIF_UP 0x01 /* Interface is up */ +#define PIF_LOOPBACK 0x02 /* Loopback local packets */ + + +/* + * Structure defining an ATM network interface. This structure is used as + * the hook between the standard BSD network layer interface mechanism and + * the ATM device layer. There may be one or more network interfaces for + * each physical ATM interface. + */ +struct atm_nif { + struct ifnet nif_if; /* Network interface */ + struct atm_pif *nif_pif; /* Our physical interface */ + char nif_name[IFNAMSIZ];/* Network interface name */ + u_char nif_sel; /* Interface's address selector */ + struct atm_nif *nif_pnext; /* Next net interface on phys i/f */ + +/* Interface statistics (in addition to ifnet stats) */ + long nif_ibytes; /* Bytes received from interface */ + long nif_obytes; /* Bytes sent to interface */ +}; + + +/* + * Common Device VCC Entry + * + * Contains the common information for each VCC which is opened + * through a particular device. + */ +struct cmn_vcc { + struct cmn_vcc *cv_next; /* Next in list */ + void *cv_toku; /* Upper layer's token */ + void (*cv_upper) /* Upper layer's interface */ + __P((int, void *, int, int)); + Atm_connvc *cv_connvc; /* Associated connection VCC */ + u_char cv_state; /* VCC state (see below) */ + u_char cv_flags; /* VCC flags (see below) */ +}; +typedef struct cmn_vcc Cmn_vcc; + +/* + * VCC States + */ +#define CVS_FREE 0 /* Not allocated */ +#define CVS_INST 1 /* Instantiated, waiting for INIT */ +#define CVS_INITED 2 /* Initialized, waiting for driver */ +#define CVS_ACTIVE 3 /* Device activated by driver */ +#define CVS_PTERM 4 /* Waiting for TERM */ +#define CVS_TERM 5 /* Terminated */ + +/* + * VCC Flags + */ +#define CVF_RSVD 0x0f /* Reserved for device-specific use */ + + +/* + * Common Device Unit Structure + * + * Contains the common information for a single device (adapter). + */ +struct cmn_unit { + struct atm_pif cu_pif; /* Physical interface */ + u_int cu_unit; /* Local unit number */ + u_char cu_flags; /* Device flags (see below) */ + u_int cu_mtu; /* Interface MTU */ + + u_int cu_open_vcc; /* Open VCC count */ + Cmn_vcc *cu_vcc; /* List of VCC's on interface */ + + u_int cu_intrpri; /* Highest unit interrupt priority */ + int cu_savepri; /* Saved priority for locking device */ + + struct sp_info *cu_vcc_pool; /* Device VCC pool */ + struct sp_info *cu_nif_pool; /* Device NIF pool */ + + int (*cu_ioctl) /* Interface ioctl handler */ + __P((int, caddr_t, caddr_t)); + int (*cu_instvcc) /* VCC stack instantion handler */ + __P((struct cmn_unit *, Cmn_vcc *)); + int (*cu_openvcc) /* Open VCC handler */ + __P((struct cmn_unit *, Cmn_vcc *)); + int (*cu_closevcc) /* Close VCC handler */ + __P((struct cmn_unit *, Cmn_vcc *)); + void (*cu_output) /* Data output handler */ + __P((struct cmn_unit *, Cmn_vcc *, KBuffer *)); + + Atm_config cu_config; /* Device configuration data */ +}; +typedef struct cmn_unit Cmn_unit; + +/* + * Device flags + */ +#define CUF_REGISTER 0x01 /* Device is registered */ +#define CUF_INITED 0x02 /* Device is initialized */ + + +/* + * Structure used to define a network convergence module and its associated + * entry points. A convergence module is used to provide the interface + * translations necessary between the ATM system and the BSD network layer + * interface mechanism. There will be one network convergence module for + * each protocol address family supporting ATM connections. + */ +struct atm_ncm { + struct atm_ncm *ncm_next; /* Next in registry list */ + u_short ncm_family; /* Protocol family */ +/* Exported functions */ + int (*ncm_ifoutput) /* Interface if_output handler */ + __P((struct ifnet *, KBuffer *, + struct sockaddr *)); + int (*ncm_stat) /* Network i/f status handler */ + __P((int, struct atm_nif *, int)); +}; + +/* + * ncm_stat() commands + */ +#define NCM_ATTACH 1 /* Attaching a new net i/f */ +#define NCM_DETACH 2 /* Detaching a current net i/f */ +#define NCM_SETADDR 3 /* Net i/f address change */ +#define NCM_SIGATTACH 4 /* Attaching a signalling manager */ +#define NCM_SIGDETACH 5 /* Detaching a signalling manager */ + + +/* + * atm_dev_alloc() parameters + */ +#define ATM_DEV_NONCACHE 1 /* Allocate non-cacheable memory */ + +/* + * atm_dev_compress() buffer allocation sizes + */ +#if defined(BSD) +#define ATM_DEV_CMPR_LG MCLBYTES /* Size of large buffers */ +#define ATM_DEV_CMPR_SM MLEN /* Size of small buffers */ +#endif + +/* + * Macros to manage DMA addresses + */ +#if defined(sun4c) +#define DMA_INIT() +#define DMA_GET_ADDR(addr,len,align,flags) ((void *)(addr)) +#define DMA_FREE_ADDR(addr,daddr,len,flags) +#define DMA_RELEASE() + +#elif defined(sun4m) +#define DMA_INIT() +#define DMA_GET_ADDR(addr,len,align,flags) \ + (void *)atm_dma_map((addr),(len),(flags)) +#define DMA_FREE_ADDR(addr,daddr,len,flags) \ + (void)atm_dma_free((daddr),(flags)) +#define DMA_RELEASE() + +#elif defined(BSD) && defined(__i386__) +#define DMA_INIT() +#define DMA_GET_ADDR(addr,len,align,flags) ((void *)vtophys(addr)) +#define DMA_FREE_ADDR(addr,daddr,len,flags) +#define DMA_RELEASE() + +#else + #error - Must define hardware-specific requirements here +#endif + + +/* + * Macros to lock out device interrupts + */ +#if defined(sun) +#define DEVICE_LOCK(u) ((u)->cu_savepri = splr((u)->cu_intrpri)) +#endif +#if defined(__FreeBSD__) +#define DEVICE_LOCK(u) ((u)->cu_savepri = splimp()) +#endif +#define DEVICE_UNLOCK(u) ((void) splx((u)->cu_savepri)) + + +/* + * SBus defines + */ +#if defined(sun) +#define SBUS_BURST32 0x20 /* Device supports 32-byte bursts */ +#endif + + +/* + * Macro to schedule the ATM interrupt queue handler + */ +typedef void (atm_intr_t) __P((void *, KBuffer *)); /* Callback function type */ +typedef atm_intr_t *atm_intr_func_t; /* Pointer to callback function */ + +#ifdef sun +#define SCHED_ATM schednetisr(atm_intr) +#endif +#ifdef __FreeBSD__ +#define NETISR_ATM AF_ATM +#define SCHED_ATM schednetisr(NETISR_ATM) +#endif +#ifdef sgi +extern int atm_intr_index; +#define SCHED_ATM schednetisr(atm_intr_index) +#endif +#endif /* ATM_KERNEL */ + +#endif /* _NETATM_ATM_IF_H */ |