/****************************************************************************
 ****************************************************************************
 ***
 ***   This header was automatically generated from a Linux kernel header
 ***   of the same name, to make information necessary for userspace to
 ***   call into the kernel available to libc.  It contains only constants,
 ***   structures, and macros generated from the original header, and thus,
 ***   contains no copyrightable information.
 ***
 ***   To edit the content of this header, modify the corresponding
 ***   source file (e.g. under external/kernel-headers/original/) then
 ***   run bionic/libc/kernel/tools/update_all.py
 ***
 ***   Any manual change here will be lost the next time this script will
 ***   be run. You've been warned!
 ***
 ****************************************************************************
 ****************************************************************************/
#ifndef _LINUX_ATM_H
#define _LINUX_ATM_H
#include <linux/compiler.h>
#include <linux/atmapi.h>
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#include <linux/atmsap.h>
#include <linux/atmioc.h>
#define ATM_CELL_SIZE 53  
#define ATM_CELL_PAYLOAD 48  
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_AAL0_SDU 52  
#define ATM_MAX_AAL34_PDU 65535  
#define ATM_AAL5_TRAILER 8  
#define ATM_MAX_AAL5_PDU 65535  
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_MAX_CDV 9999  
#define ATM_NOT_RSV_VCI 32  
#define ATM_MAX_VPI 255  
#define ATM_MAX_VPI_NNI 4096  
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_MAX_VCI 65535  
#define ATM_NO_AAL 0  
#define ATM_AAL0 13  
#define ATM_AAL1 1  
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_AAL2 2  
#define ATM_AAL34 3  
#define ATM_AAL5 5  
#define __SO_ENCODE(l,n,t) ((((l) & 0x1FF) << 22) | ((n) << 16) |   sizeof(t))
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define __SO_LEVEL_MATCH(c,m) (((c) >> 22) == ((m) & 0x1FF))
#define __SO_NUMBER(c) (((c) >> 16) & 0x3f)
#define __SO_SIZE(c) ((c) & 0x3fff)
#define SO_SETCLP __SO_ENCODE(SOL_ATM,0,int)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define SO_CIRANGE __SO_ENCODE(SOL_ATM,1,struct atm_cirange)
#define SO_ATMQOS __SO_ENCODE(SOL_ATM,2,struct atm_qos)
#define SO_ATMSAP __SO_ENCODE(SOL_ATM,3,struct atm_sap)
#define SO_ATMPVC __SO_ENCODE(SOL_ATM,4,struct sockaddr_atmpvc)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define SO_MULTIPOINT __SO_ENCODE(SOL_ATM, 5, int)
#define ATM_HDR_GFC_MASK 0xf0000000
#define ATM_HDR_GFC_SHIFT 28
#define ATM_HDR_VPI_MASK 0x0ff00000
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_HDR_VPI_SHIFT 20
#define ATM_HDR_VCI_MASK 0x000ffff0
#define ATM_HDR_VCI_SHIFT 4
#define ATM_HDR_PTI_MASK 0x0000000e
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_HDR_PTI_SHIFT 1
#define ATM_HDR_CLP 0x00000001
#define ATM_PTI_US0 0  
#define ATM_PTI_US1 1  
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_PTI_UCES0 2  
#define ATM_PTI_UCES1 3  
#define ATM_PTI_SEGF5 4  
#define ATM_PTI_E2EF5 5  
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_PTI_RSV_RM 6  
#define ATM_PTI_RSV 7  
#define ATM_NONE 0  
#define ATM_UBR 1
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_CBR 2
#define ATM_VBR 3
#define ATM_ABR 4
#define ATM_ANYCLASS 5  
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_MAX_PCR -1  
struct atm_trafprm {
 unsigned char traffic_class;
 int max_pcr;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 int pcr;
 int min_pcr;
 int max_cdv;
 int max_sdu;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 unsigned int icr;
 unsigned int tbe;
 unsigned int frtt : 24;
 unsigned int rif : 4;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 unsigned int rdf : 4;
 unsigned int nrm_pres :1;
 unsigned int trm_pres :1;
 unsigned int adtf_pres :1;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 unsigned int cdf_pres :1;
 unsigned int nrm :3;
 unsigned int trm :3;
 unsigned int adtf :10;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 unsigned int cdf :3;
 unsigned int spare :9;
};
struct atm_qos {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 struct atm_trafprm txtp;
 struct atm_trafprm rxtp __ATM_API_ALIGN;
 unsigned char aal __ATM_API_ALIGN;
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_ITF_ANY -1  
#define ATM_VPI_ANY -1
#define ATM_VCI_ANY -1
#define ATM_VPI_UNSPEC -2
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_VCI_UNSPEC -2
struct sockaddr_atmpvc {
 unsigned short sap_family;
 struct {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 short itf;
 short vpi;
 int vci;
 } sap_addr __ATM_API_ALIGN;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
#define ATM_ESA_LEN 20  
#define ATM_E164_LEN 12  
#define ATM_AFI_DCC 0x39  
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_AFI_ICD 0x47  
#define ATM_AFI_E164 0x45  
#define ATM_AFI_LOCAL 0x49   
#define ATM_AFI_DCC_GROUP 0xBD  
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_AFI_ICD_GROUP 0xC5  
#define ATM_AFI_E164_GROUP 0xC3  
#define ATM_AFI_LOCAL_GROUP 0xC7  
#define ATM_LIJ_NONE 0  
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define ATM_LIJ 1  
#define ATM_LIJ_RPJ 2  
#define ATM_LIJ_NJ 3  
struct sockaddr_atmsvc {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 unsigned short sas_family;
 struct {
 unsigned char prv[ATM_ESA_LEN];
 char pub[ATM_E164_LEN+1];
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 char lij_type;
 uint32_t lij_id;
 } sas_addr __ATM_API_ALIGN;
};
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
struct atmif_sioc {
 int number;
 int length;
 void __user *arg;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
typedef unsigned short atm_backend_t;
#endif
